Classes
I’m just basing this off my experience going to University of California, Irvine, but I’ll go over the degree syllabus and review which types of classes are important and how you can apply them in the field. The current syllabus can be found here: UCI Catalogue.
Algorithms
The concept of algorithms will follow you throughout your career. Algorithms are important for two things:
- Interviews
- Mindset
Interviews
We’ll have a larger conversations about interviews in a future post, but 95% of interviews will have you work through some algorith problem, so it is important to be able to get your foot in the door to actually prove yourself. Focusing on these types of classes will build a good foundation which will help you when you start to prepare for coding interviews.
Mindset
At first you will be learning different algorithms and probably be flabbergasted at the different solutions past computer scientist have come up with to solve computer problems. They’ll probably have you implement some merge sort, and in future classes go into some pretty crazy stuff like hueristic algorithms.
I think the biggest take away from these classes is learning how to approach different problems and what aspects are valuable to that solution. For example you may learn that Dijkstra is able to solve shortest path between nodes in a graph, but what this really is teaching you is that you can try to abstract real world problems in terms of graphs and their relationships to find better performance and understanding of the problem.
Architecture and Embedded Systems
Probably one of the more useful topics that you’ll learn in school, building good software architecture fundamentals is important in your growth from intern to senior engineers. It is important to learn about the different aspects of computer systems so that you understand what your application and programming languages are doing under the hood.
Information
These classes prepare you to understand the complexities of the data that you will be handling. The core idea behind much of software engineering is the data and how you apply that. Think about companies like Google and Facebook, they are just huge data aggregators that found a novel way of presenting their data.
General Computer Science
You will learn the basics of different programming styles such as Object Oriented Programming, Functional Programming, Imperative Programming that will dictate the type of style that you prefer.
Systems and Software
These classes will go into how to develop quality solutions. By learning language semantics, compilers, operating systems - you will be able to be a polyglot of programming languages and be able to swap to different technologies throughout your career which will make you more flexible for employment as well as opening new doors in your current work.
Project Courses
These are the MOST important classes that I took during university. If possible I would find time to take extra project courses because they expose you to more real world scenarios, compared to academia that universities usually try to teach. In my project courses I was exposed to: project management, source control, design patterns, testing, user design, code reviews - the list goes on. TAKE THEM!