Advice I would give to the younger version of myself entering college
tl;dr: Choose the difficult classes.
I studied computer science at the excellent Faculty of Mathematics and Physics at the Charles University in Prague. I’m forever grateful to our amazing teachers for what they taught us.
In the first two years, we did a lot of math, theory about algorithms and data structures which I think was great. To this day, my first year of college was the best preparation for coding interviews at companies like Facebook or Google.
After that, we chose our own courses and I made a mistake here. I didn’t know what the possibilities were in terms of career. I liked algorithms but thought most well-paid jobs were at banks, so I focused on stuff like SQL. I did some summer internships. Most of the work was building CRUD apps on top of databases.
Little did I know one could get paid to work on amazing developer tools (e.g. via Google Summer of Code). I didn’t realise I could get a job abroad or even have the option to move to Silicon Valley. This is because in high school I took part in coding competitions and olympiads and usually ended up somewhere in the middle of the leaderboard, so I thought I wasn’t very good. Later, many of the contestants ended up working at Google, Facebook, Microsoft etc. The bar was just very high.
What courses I would choose at college
Whenever I could choose a course, I went for the practical ones: “Database applications”, “Web development”, stuff like that. These courses turned out to be among the easiest, which meant I could do part-time work at agencies. Working in a team with experienced colleagues was a great way to get some real-world experience.
In retrospect, however, I wish I took the most difficult courses instead: Operating systems (build an OS from scratch!), Natural language processing, Machine learning, Statistics. These courses were much more difficult and time-consuming. I’m catching up on some of the knowledge now.
I now realise the years in college are best spent studying. You can always build mobile apps and login forms in the years after college. You’ll learn it on the job and it’s not that difficult. But the tough stuff — how an operating system works, you won’t learn on the job. So learn it while in school. You won’t regret diving deeper and learning advanced stuff few programmers know about.
I’m glad some of the difficult courses, like Automata Theory, Unix or Compiler Design were mandatory. The scary courses were the most useful and fulfilling ones, because I learned a lot of new information. I actually used the knowledge on the job later. I was lucky to find interesting work that required computer science knowledge.
See also Chistopher Cheadeau’s post on why computer science education was worth it for him.