5 Things I didn't learn in college studying Computer Science
Tags: career, beginners, motivation
Published: 2020-10-13 12:15:58

I studied computer science in college and completed my third year level courses before I dropped out to work in the industry full-time. 

I've been a software engineer for 2 years now and I'd like to share 5 things I didn't learn in CS School. 

If you're more of a video content type of person feel free to watch the video version here as well: 
{% youtube cRAYZFCVx4E %}


## 1. Code Review Process

When I completed my first code review, I was overwhelmed. It was for a colleague with > 15 years experience. I left no comments ,because in my mind, I had nothing valuable to contribute. And worse, what would my colleague think of a new engineer commenting on his code? Surely he'd think it was rude.

This is as far from the truth as it can be. My manager noticed I merged the PR with no comments. He kindly pulled me aside later on, and let me know what code reviews were for. 

Code reviews are not a personal attack. They aren't a comment on someone's ability. They are meant to be a constructive form of review.

Code reviews are beneficial for the reviewer, the reviewee, and the code base.

If you're leaving a review, it teaches you to think critically about someone else's code. 

Reading code effectively is one of the best skills you can develop as a software engineer. 

If you're having your code reviewed, it encourages you to write readable code. You have this added pressure that someone else will look at your code, so it makes you write to a higher standard. Also, you get valuable feedback on your code.

Lastly, it helps the codebase stay up to current standards. Code review helps prevent unwanted, unnecessary, or incorrect code from entering your codebase.

## 2. Importance of UI

UI is important. UI is important. UI IS IMPORTANT!

Whether you're making a side project, or a project for a client, UI is important. Even for internal tools.

UI is how your product is perceived by everyone who is not a developer. 

I learned this lesson when I worked on a project and built out all functionality without focusing on UI. The client perceived that very little work had been done, even when there was a ton of work completed.

UI is how you let people know you care about your product.

Even if you're not a designer you can use popular tools to make your work look better.

Some tools I use often:
- Dribbble - Tons of beautiful UI designs and examples to get inspiration from 
- TailwindCSS - A fantastic and easy to use CSS utility
- Cooloors - Generate beautiful color palletes 

## 3. CI/CD

CI/CD is continuous integration and continuous deployment.

I never even heard about CI/CD in college. It wasn't until my first software job where I learned just how important it can be.

There are ton of great resources about CI/CD online so I won't go too in depth here.

The main benefits are shorter iteration times, the ability to deploy easily, and less manual errors.

Getting comfortable setting up your projects with a CI/CD pipeline will help you ship faster. 

## 4. Agile / Project Management

Most companies use some form of project management like Agile, Scrum, or other popular methodologies.

The methodologies dictate meeting frequency, deadlines, dealing with scope creep, and more. 

We didn't cover this topic in school. 

Luckily, it's pretty easy to learn the basics. 

It was definitely eye-opening to see how software was built in the real world.

It'd be worthwhile looking into the various methodologies and seeing which one aligns well with your personal preferences.

## 5. Working with Legacy Codebases

This is a big one. Working with legacy codebases is a large part of most software engineering roles. I'm a bit surprised they don't teach strategies for exploring legacy codebases in  University.

There is a gigantic learning curve with familiarizing oneself with a legacy codebase.

One way to get this experience before your first job is to contribute to open-source. 

Exploring an existing project and finding a way to make a meaningful contribution will be a huge first step to becoming a better software developer. 



## That's it!

If you have any thoughts on other items that CS school doesn't teach you, I'd love to hear them! Comment below.