Professional

What I didn’t learn in CS101

February 3, 2021

I’m a Junior majoring in Computer Science and Mathematics at the University of Maryland. I don’t know everything. I knew even less two years ago, when I was a Freshman.

(For that matter, I knew even less two years before that, as a Junior in high school who wanted to major in Computer Science.)

A lot of what I have learned has been from school and classes, but plenty has also come from internship experience and from personal projects. In this blog post, I’ll be focusing on some of the lessons I learned about software development outside of class. 

If nothing else, treat the sections of this blog post as a guide for things to look up and research on your own. 

How to get started

Getting started with computer science can be pretty intimidating. There is plenty to learn, and it can be hard to get an idea of where to start. My first experience writing code on my computer was with codecademy, a website that I recommend for beginners. When I wanted to challenge myself, I used Project Euler, which featured a ton of problems that can be solved in any programming language. Sometimes, I have even gone back to solve problems in new languages, and have challenged myself to improve on old solutions.

I have also learned through personal projects. These projects don’t need to be hard – the process of solving any problem with Computer Science can help sharpen your skills and make you a better programmer. If you aren’t sure what to do as a project, try to find the answer to a question related to another interest of yours. There’s plenty of data out there about anything from the weather to free throw percentages just waiting to be explored.

Git and Version Control

Version Control is incredibly important, and most schools don’t really teach it, so much as hint that you should know it. Git the most common form of version control, and is most popularly implemented on GitHub.

What exactly is Version Control? Put simply, it is a way to track and manage changes made to a codebase. If you’ve ever used the Version History feature on Google Docs, it’s a little like that. Git lets you pull (get other people’s changes) and push (share your changes) will others, but also lets you do things like make branches (alternate versions/features) in a safe way, without risking messing up an entire codebase. 

Agile Development

Many companies that write software use a software development strategy called Agile Development. Agile Development means something slightly different at most places, but the primary tenets of it are standup meetings and sprints. A standup meeting is typically daily, in which each team member explains what they did yesterday, what they plan to do today, and what, if anything, is currently blocking them from further progress.

Standup meetings help teams stay coordinated even when things get hectic, and often take places will all team members standing, to encourage them to go quickly. A sprint is a period of time, typically about two weeks, during which a team works to accomplish their tasks. Sprints keep teams moving quickly, and are most effective with teams that iterate quickly.

Other software development strategies, like Waterfall, do exist, but are becoming less common as technologies make it easier for teams to iterate and develop new features faster. 

Writing Tests

Hopefully as a student you will have some exposure to the concept of unit tests, a way to verify if code works the way it is expected. If not, just know that a test is a unique function or method used to check if other code you have written functions as expected. When developing software professionally, tests are used to ensure that new features work, and that old features aren’t broken or affected by new code.

Many companies will use continuous integration tools to test each and every commit against a full suite of tests, to ensure that changes don’t break any production code. As a developer working to add a new feature, you will often be expected to also write tests that demonstrate that your code functions as expected. 

The Interview Process

Interviewing for a software development role is a fairly complicated process, and deserves (and will get) a discussion of its own. Companies will typically ask one or more leetcode questions, and applicants will have a certain amount of time to program a solution. A leetcode question is a coding question that tests your knowledge and intuition with data structures and algorithms. These questions are pretty different than what you might be used to doing in class or school, but like anything else, you’ll get better with practice.