17 votes

Advice for those who want a computer science career?

Those that have pursued a career that deals with any type of computer science, what advice would you give to students before they get a job in it? What do you do on a daily basis? What would you have wanted to know before you started?

21 comments

  1. [8]
    Deimos
    (edited )
    Link
    A few quick, kinda-pithy pieces of advice: If you haven't already, learn how to use a version-control system (Git, Mercurial, whatever) and start using it all the time, for all your code. In my...

    A few quick, kinda-pithy pieces of advice:

    • If you haven't already, learn how to use a version-control system (Git, Mercurial, whatever) and start using it all the time, for all your code. In my experience, a lot of schools don't seem to teach this, but it's extremely important and will save your ass at some point (as well as being useful for a lot of other reasons).
    • Learn regular expressions. They're complicated and ugly and confusing, but there are a ton of problems that you'll be able to solve very easily and efficiently with a regular expression that will be far more difficult if you don't know how to use them.
    • Don't attach your identity to the languages you code in or the other tools you use. Getting in arguments on the internet about whether language X is garbage or if your editor/IDE is the best one are a waste of your life and will almost never accomplish anything except making you angry.
    • Whenever possible, write code in simple, easily-understandable ways, not "clever" ones. I know it's more interesting to try to figure out how to solve problems in a clever way, but you (and other people you work with) will appreciate the straightforward code far more when trying to figure out why something's wrong with it.
    • Lean towards the YAGNI ("You Aren't Gonna Need It") approach. Don't worry about writing overly-abstracted code to support future flexibility that you may never need. Solve problems you actually have, not ones that are a vague future possibility.
    32 votes
    1. Emerald_Knight
      Link Parent
      Regular expressions are one of those things that you put off really learning for years until you finally get frustrated and bite the bullet to properly learn about them because not using them...

      Regular expressions are one of those things that you put off really learning for years until you finally get frustrated and bite the bullet to properly learn about them because not using them would be an even worse pain in the ass for solving the problem you need to solve, and suddenly you start to "get" them and kick yourself for not drilling them into your head sooner in the first place.

      Seriously. Get comfortable with regular expressions. They're wonderful.

      11 votes
    2. tnkflx
      (edited )
      Link Parent
      I will add another couple of items to this already awesome list: Always make time to explain things to more junior people. Learn to explain difficult things in simple terms. A good way to practice...

      I will add another couple of items to this already awesome list:

      • Always make time to explain things to more junior people.

      • Learn to explain difficult things in simple terms. A good way to practice this is to explain CS things to non-CS people. I still struggle with this every day and I am in awe of people who can do things. (My non-technical friends wanted to know about 'blockchain'...)

      • Don't disparage people for using the 'wrong' operating system or 'wrong' programming language. Everyone works differently.

      • DRY: Don't Repeat Yourself. If you find things that you're doing repeatedly, script & automate it.

      • KISS: Keep It Simple Stupid. Don't make things overly complex.

      • Never stop learning. I cannot stress this enough.

      • Build a network both inside and outside of the company you're going to work for. Unfortunately, 50% of getting a (new) job is knowing people, the other 50% is skill.

      • Don't be afraid to ask for help.

      • LEARN ABOUT SECURITY! SQL injections, cryptography, hashing, XSS, CSRF, service authentication, etc, etc...

      4 votes
    3. Leo
      Link Parent
      And a great way to learn Git is to sign up for Github (or another free public Git website like BitBucket) and put projects you're working on up there. That'll help you build a portfolio that you...

      And a great way to learn Git is to sign up for Github (or another free public Git website like BitBucket) and put projects you're working on up there. That'll help you build a portfolio that you can easily share with potential employers.

      3 votes
    4. Gaywallet
      Link Parent
      A fantastic resource for learning and testing regular expressions is regexr

      A fantastic resource for learning and testing regular expressions is regexr

      3 votes
    5. [3]
      ali
      Link Parent
      About that clever solutions way : for my thesis I had two ways to count something : using Maps and just using an array and it's indices. The maps were extremely slow (I had a lot of data to...

      About that clever solutions way : for my thesis I had two ways to count something : using Maps and just using an array and it's indices. The maps were extremely slow (I had a lot of data to analyze) so the more clever way using arrays was the better option, even tho it was harder to read. Might be a specific example but I definitely agree it should be understandable - using fitting names for the function, variables - and with such weird snippets, you should document what you're doing

      2 votes
      1. [2]
        Deimos
        Link Parent
        The important part is that you used the clever approach to solve a specific problem that you had. I'm not saying that people should never do anything complex, the issue is when people write clever...

        The important part is that you used the clever approach to solve a specific problem that you had. I'm not saying that people should never do anything complex, the issue is when people write clever code just for the sake of writing clever code, when a simpler approach would have worked equally well.

        3 votes
        1. Yudhayvavhay
          Link Parent
          I'm learning C++ right now and I absolutely hate unnecessary (from a technical perspective) white space. I try to make it readable against my urges but one day I might break down and put the whole...

          I'm learning C++ right now and I absolutely hate unnecessary (from a technical perspective) white space.
          I try to make it readable against my urges but one day I might break down and put the whole code on a single line.

          For example, I'd never write

          ++i;
          std::cout << *i;
          

          rather than std::cout << *i++;

          1 vote
  2. panic
    Link
    Assuming you’re in school now, make sure to get a summer internship the year before you graduate. On a more general level, always think about who you’re making software for and how to help them....

    Assuming you’re in school now, make sure to get a summer internship the year before you graduate. On a more general level, always think about who you’re making software for and how to help them. Don’t say “no” just because something is hard—if it will make a difference to the experience of the people using your software, it may still be worth doing. Avoid programming ideologies which make you say “no” for purely architectural reasons.

    9 votes
  3. Emerald_Knight
    Link
    Understand one thing right now: in any area of CS, the #1 skill you'll be exercising is your problem-solving abilities. Whether you're writing code or a thesis, the written solution is merely you...

    Understand one thing right now: in any area of CS, the #1 skill you'll be exercising is your problem-solving abilities. Whether you're writing code or a thesis, the written solution is merely you putting the result of your problem solving into a formal proof.

    With that in mind, my biggest tip for you is to learn how to effectively solve problems. Don't just randomly change things until you get something that works, but follow a rigorous process for deciding why your solutions are wrong and what needs to be changed. Hypothesize, experiment, analyze, revise, and repeat as necessary. If you can do that much, you'll do well whether you decide to head into theoretical areas or practical application.

    8 votes
  4. trojanhorse
    Link
    A big one is, don't feel like you have to take a computer science program. They have more honed in programs now. When I graduated high school all they had was computer science but I wanted to do...

    A big one is, don't feel like you have to take a computer science program. They have more honed in programs now. When I graduated high school all they had was computer science but I wanted to do systems, networking and security. So I went to a smaller school just to get a degree and then taught myself on the side.

    And don't get let down if a lot of what they teach you is just Theory. The field changes so rapidly you have to study on your own and set up an environment on your own. People I went to school with expected them to teach them from the ground up and that just wasn't possible.

    7 votes
  5. [3]
    NubWizard
    Link
    Not in CS but I do have some helpful advice! One thing that I did before going to graduate school was to reach out to people in the industry/field via LinkedIn and set up informational interviews....

    Not in CS but I do have some helpful advice!

    One thing that I did before going to graduate school was to reach out to people in the industry/field via LinkedIn and set up informational interviews.

    I sent out probably 10 messages and ended up having 9 over the phone conversations. One of the conversations that I had ended up helping me land an internship. In addition to the feedback you get here, you can always create a LinkedIn, creep on user's you want to be after your education, and use that as a benchmark. Plus, it gives you a place to put your portfolio when the time comes to do some job hunting.

    5 votes
    1. trojanhorse
      Link Parent
      I kind of did that. I looked at job ads and looked at the list of requirements for the jobs closely related to what I wanted to do and then I learned about those requirements and anything related...

      I kind of did that. I looked at job ads and looked at the list of requirements for the jobs closely related to what I wanted to do and then I learned about those requirements and anything related and while I was in school I made sure to study those requirements on my own and ask professors that were in the field about them.

      I basically just took lists of wanted skills from job ads and learned what they were and experimented with them and my own environment which was basically a Compaq Core 2 Duo.

      3 votes
    2. AVo
      Link Parent
      By informational interviews, do you mean just messaging anyone that seems interesting and asking if they would be willing to answer a couple of questions? How did you approach them?

      By informational interviews, do you mean just messaging anyone that seems interesting and asking if they would be willing to answer a couple of questions? How did you approach them?

      1 vote
  6. [3]
    cge
    (edited )
    Link
    Are you a student (undergraduate? graduate?) now, or thinking about going into computer science? More importantly, by computer science, do you mean programming, or the scholarly field of computer...

    Are you a student (undergraduate? graduate?) now, or thinking about going into computer science?

    More importantly, by computer science, do you mean programming, or the scholarly field of computer science?

    In part, I ask because much of the advice here is about programming and development, not computer science itself.

    5 votes
    1. [2]
      dblohm7
      Link Parent
      Not only that, but if OP goes into industry, do they have a particular type of software that they'd like to work on?

      Not only that, but if OP goes into industry, do they have a particular type of software that they'd like to work on?

      2 votes
      1. ArizTrad
        Link Parent
        I am in high school now. Sorry for not being more specific, but yes, I do want to do development. I'm hoping to get into game development, and possibly design!

        I am in high school now. Sorry for not being more specific, but yes, I do want to do development. I'm hoping to get into game development, and possibly design!

        1 vote
  7. somewaffles
    Link
    Learn your limits in your problem solving process. One of the biggest weaknesses I've seen in other developers is to not know how to ask for help when they need it. You never want to stew on an...

    Learn your limits in your problem solving process. One of the biggest weaknesses I've seen in other developers is to not know how to ask for help when they need it. You never want to stew on an issue for way too long, it doesn't make you look good and is not constructive for anyone. Mostly everyone I've ever worked with is always willing to help take a look at an issue.

    4 votes
  8. Pistolwhip
    Link
    Lots of good comments in here. The only thing I'd add is that you need to cultivate what I'd call 'systems thinking'. What I mean by this is that you don't want to work on projects in a silo of...

    Lots of good comments in here. The only thing I'd add is that you need to cultivate what I'd call 'systems thinking'. What I mean by this is that you don't want to work on projects in a silo of focus.

    Out in the working world, stuff you build will 99% of the time be part of some larger system or use case than just the widget you are directly responsible for or working on. One of the things that sets great engineers apart is the ability to keep the larger picture in mind for consideration when they're producing work. Not thinking about that while designing a solution or building something is the #1 cause of frustration and friction. It's also a great way to continuously learn, and in some cases even stay ahead of your own project allowing you to anticipate what might be required.

    Many decisions and direction will come from non-CS people. Many times Project Management/Product Owners/Managers are not nearly as savvy tech wise, but are still the ones setting the vision for products. Combining a good systems thinking mindset with the advice already posted here will make it MUCH easier to help direct good decisions and produce better work with less frustration.

    4 votes
  9. natdempk
    Link
    I think learning how to pick up and understand new technologies quickly and thoroughly has been the most useful to me. To me the most useful way to do this is to start to understand the broader...

    I think learning how to pick up and understand new technologies quickly and thoroughly has been the most useful to me. To me the most useful way to do this is to start to understand the broader technology/computing landscape from the prospective of problems you encounter and then fit things into that landscape as solutions that make different tradeoffs. This way when you need/want to use something new you can see where it fits in quickly, make comparisons to existing systems you know, and highlight the areas where this new thing is different. Being able to understand this landscape and compare different possible solutions at a high level pays off time and time again in real-world engineering.

    3 votes