Slowly running out of posts but I have a little backlog of drafts to publish. Here’s some (vaguely) incorrect claims I’ve seen online and elsewhere:
- CS is not programming
Ah yes, the common line trotted out when people dare discuss learning programming in a CS major. This isn’t wrong, but it’s often disingenuous in spirit.
Programming is certainly not CS. However, the early parts of a CS degree function as a introduction to programming. Furthermore, the majority of CS majors are CS majors because they plan on programming in their future career. Dismissing concerns about not learning enough programming because “ItS NoT Cs” is just needlessly pedantic.
Furthermore, software development is a legitimate field of CS. People like Barbara Liskov have contributed immensely to how we write code. It’s not unreasonable to study software development in a CS program. Sure, software development as a research field isn’t gonna be React and JavaScript, but it will be principles like SOLID and DRY which do show up in real world development.
- If you’re good at math, do machine learning
This advice is everywhere. If you browse the various subreddits on CS careers, you’ll see people give it. I’ve even gotten it from some math professors.
The problem, like a lot of the other entries, is that there’s a kernel1 of truth here. Machine learning research has a lot of important math like topology, differential geometry and probability.
However, machine learning research is exceedingly not a common path. It requires a PhD and the corresponding graduate level math skills. The majority of machine learning jobs are much more in the vein of data scientists and machine learning engineers. For these jobs, the focus is much more on applying existing models to data. If you go that route, you’ll spend a lot of time cleaning data, finding new datasets, and using statistical methods to verify your results. This can be rewarding, interesting work, but it’s certainly not the pure, abstract elegance of math.
If you like the abstract logic of math, I’d check out programming languages/compilers. Type theory is far closer to pure math than any statistics. Plus pure functional programming like Haskell or OCaml is very algebraic in nature. If you like algebra or category theory, then you’ll have a good time with either.
- Leetcode is required to get a job
I’m made it clear that I don’t believe in Leetcode grinding. It certainly can be a shortcut to getting a good job, but it’s by no means a requirement. Plenty of successful developers do well in interviews without hundreds of Leetcode problems.
I’d focus on practicing problem solving, learning your fundamentals in data structures and algorithms, and programming a lot. If you grow your problem solving and technical ability, interviews should be a lot easier.
I’ve also never gotten anything harder than a Leetcode medium on interviews. A medium can be tricky, but it’s not the impossible distributed systems questions people claim to get.
- I should learn XYZ language/library/tool to be employable!
Often times students assume that companies hire by essentially pattern matching. The company wants a React developer, so they filter out all resumes that don’t have React.
This does happen, but there’s a few caveats. One, it’s a stupid way to hire junior developers. Really, it’s a bad way to hire any developer unless they’re a contract programmer or a lead architect. Contract programmers need to be productive in the short timespan they have and can’t waste time learning the stack. Lead architects should have the requisite deep knowledge necessary to design a project from the ground up.
The second is that most large companies are hiring for everything. Google doesn’t care if you know Python, JavaScript, Ruby or Haskell. They’re using all of them and more.
Learn what you think is neat. If you can gain a degree of depth in whatever tech you like to use, then you’ll be hireable.
- I should take as many CS classes as possible
I’ve seen a few people do this. A few things happen. The best case scenario is that you simply run out of courses. Now there are graduate CS courses, but even then it’s possible to exhaust all the good ones.
The second possibility is that you suffer through a very painful workload and possibly burn out. Indeed I’ve seen people who just switched into the major or desperately need to complete requirements to graduate attempt this move. That’s a very bad idea. You’re putting a lot of pressure onto yourself. Yes, graduating late is not good. Neither is taking incompletes and having to redo a course. And wrecking your mental health is especially not great.
Another problem with taking courses as quickly as possible is that you could easily end up with a subpar professor. By going through the curriculum slowly, you can wait until a specific professor teaches the course. Comparing notes with friends, it’s remarkable how large of a difference professor choice makes. In many cases we’ve effectively taken different classes.
-
But really it’s a nullspace of truth ↩