What My CS Program Didn't Teach

PUBLISHED ON APR 30, 2022 : 634 words, 3 minute read โ€” SOFTWARE DEVELOPMENT

There are skills, tools, and ideas my CS program didn’t teach and which I hope to gather here in case someone in the future finds it useful. They should be be ubiquitous and help you solve problems. Think of it like teaching your grandma she doesn’t have to print every web page she visits - was her system functional before? Yeah, but it can be so much easier for her. I won’t suggest any programming languages or frameworks because they all end up being fads and have strong opinions on both sides, but aim to fill this with core concepts that help regardless of what company you work for.

This is a living list, and is updated whenever I’m reminded of another.

Things I Wish I learned in my CS Program

Knowing where to look for answers

It’s a common meme that developers are just really good at copy+pasting from Stack Overflow or Google, but it hints at the truth. An important part of programming is not memorizing details, but knowing where (and how) to look for the answers.

Version Control - Git/GitHub

Takes a very small time investment to learn, but pays off immensely when you are comfortable with the tools you will likely use every single day at a real job.

Basic shell usage

You don’t need to be a Unix wizard, just get the basics down, learn enough to be dangerous, and you can build from there as you run into unique situations.

90% of the commands you run will fit in a very short list:

# Moving around
cd

# Knowing your surrounds
pwd,ls,cat

# Modifying files
touch,rm,vim/emacs

While learning (ha, you’ll always be learning), Explain Shell can be a handy resource for exploring what is happening in complicated commands.

Basic scripting

Much like learning to write an Excel formula, knowing a small amount of scripting gives you a swiss army knife to save yourself time in all sorts of random situations.

Bash is gonna be the most universal since it’s on almost every Macbook command line (people love their Apple) and easy enough to access from Windows with WSL. Python scripting is handy as well, but I often find that I end up needing a 3rd-party package and am back to having to deal with regular programming language stuff that’s not as quick as Bash scripting.

Making the computer do what you want

My early instruction in Computer Sciences was all done with the Eclipse IDE, writing programs that printed out input. I had no concept of how the things I was writing could be used to actually control the computer to do things I wanted it to. It wasn’t until I wrote a program that opened 50 Rick Astley’ YouTube tabs that I felt the spark of “Coding gives me super powers.” I don’t have much advice here other than try to keep that in mind, and attempt to find that spark. I’ve heard Automate the Boring Stuff is a good book for learning how to connect your day-to-day life with the programming you’re learning.

Common situations you will encounter

As a software developer, you may be called upon to perform some of these tasks in your career.

How well a CS degree prepares you for these tasks (and whether it even should prepare you for these) is left as an exercise to the reader.

๐Ÿงต 1/ - Twitter๐Ÿฆ

Markdown

Used all over the place in READMEs and other documentation, takes very little time to get comfortable with it, makes you more productive than popping open another Google Doc.

Advice for those in a college CS program

For those entering or in the middle of college, I have written up my thoughts and action steps on how I would approach college CS if I could re-do it .


See Also