DEV Community

kennethcassel
kennethcassel

Posted on • Edited on

5 Things I didn't learn in college studying Computer Science

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:

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.

Top comments (4)

Collapse
 
cubiclesocial profile image
cubiclesocial

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

There are products out there that have really nice looking UIs but don't function at all. I know of several SaaS products that qualify.

Of course, a product can work poorly and look terrible too.

Functionality matters more to users than the UI when the product doesn't work well or even work at all.

On the flip side, using fancy UI widgets in a fully functional application tends to: Consume lots of system resources (CPU, GPU, and RAM) and exclude underserved people such as impaired users who navigate applications using assistive technologies like screen readers.

Working with Legacy Codebases

Code maintenance of existing code and backwards compatibility are more important things to do than adding shiny, new features or using shiny new language XYZ. However, those are concepts that are hard to teach. They are also not the words most students want to hear, "Hey, you're going to be working on optimizing the performance of existing software and fixing bugs for most of your working life to make money to put food on your table, a roof over your head, and to pay off your school bills. Now doesn't that sound like a lot of fun?"

Collapse
 
kennethcassel profile image
kennethcassel

Great points on UI.

I think though in general, programmers tend to underestimate UI. A great product with great UI is a killer combination. If you can do this without consuming a tons of resources too, then you are on a path to win.
Functionality should be a given. Your program should work and that should be de-coupled from having a good looking UI. It doesn't take a ton of effort from having your UI look in the bottom 10% to being a pleasant visual experience.

Also, great points on legacy codebases haha. It doesn't really sell the software career that great if you focus on teaching that to people.

There is so much content to learn in software engineering so it'd be impossible to teach them all in college. It's really about lifelong learning.

Thanks for your insightful comments!

Collapse
 
anja profile image
Anja

Great list! And yes contributing to Open Source really can prepare you for foreign code bases in general. 👍

Collapse
 
mccurcio profile image
Matt Curcio

Tony the Tiger says, "Good and Good for you!"
Nice list, the video is great, too. Your voice is calm and smooth.