Advice for Computer Science Students(things they might not teach you in class)

I'm by no means a professional academic, nor am I really even a competent programmer, but in my time in school I've observed in my peers (or perhaps fellow CS students; I'm not sure a 40 year old should refer to 20-somethings as peers) a certain lack of proficiency in what I believe are important ancillary skills. Here's a little timeline of skills you probably want to pick up during your training as a computer scientist.

Before you start formal learning

Before you sign up for your first programming class, you need to know how to use the damn computer. Not a lot, just enough to manage your files and understand guides you find online.

At a minimum, you ought to be able to:

100 Level

Your first year you'll probably be required to use a couple of specific IDEs and you'll get to pick up some coding skills, but you're going to need more than just that. Your aim should be to completely maintain your own machine. You don't have the time to wait for tech support, nor should you ever trust the inept to touch your machine.

Now you need to be able to:

200 Level

If your courses are anything like mine, here you start getting a bit more leeway with your tools and methods. Your professors probably won't care what IDE you use so long as it runs correctly. I'm going to ask you to do something that might be a bit painful, so maybe get some practice over the summer.

Here's what you need to be working on:

By the end of your 2nd year, I want you to be able to set up a Linux machine on your local network, access it through SSH, write software on it in Vim (or Emacs), compile and run it. You are going to encounter Linux machines at some point in your academic or professional computing career, and remote command line access via SSH is very often the best and fastest way to employ them.

300 Level

About now you should focus your extracurricular learning around collaboration.

This means:

As a matter of practice, create a new repository for each new coding assignment. For every feature you add, build it in a branch then merge.

I might also suggest Slack or Discord, but I really don't think those require a lot of practice.

400 Level

I've got nothing for this section right now (and it may remain that way) since these won't start for me until next fall.

End of advice.

Made in Vim