So I’ve just started my Master’s in CS and wanted to know what subjects (aside from DS and Algo) to review from my bachelor’s that would be important to know while searching for a job as well as which would be useful while on the job. The reason I ask is because I kinda bumbled my way through my Bachelor’s and didn’t really study the subjects well so I want to take the time to relearn them if they’re important to whatever job I’m gonna get (most probably software engineering). For reference here are some of the subjects that were part of my curriculum:
- Data Structures using C
- Design and Analysis of Algorithms
- OOP using JAVA
- Database Management Systems
- Operating Systems
- Software Engineering
- Data Communications
- Compiler Construction
- Object Oriented System Development
- Computer Networks
- Web Programming and Services
- Distributed Systems
- Embedded Systems
- Software Project Management
- Artificial Intelligence
- Data Mining
Searching for a job: Data structures and algorithms. Standard whiteboard interviews are exactly like a random exercise out of Kleinberg and Tardos. You'll occasionally get an object oriented design question (bullshit, but enough shops think it's important), or a large scale systems question (never a good question, some effective answers are "your data is small enough to fit in Postgres", durable queues, and map reduce), or some bullshit where the answer is applying XOR to pointers (you don't want that job anyway).
On the job: if you actually sit down and read whatever framework they've based everything on, you're ahead of 90% of programmers. Most programming is not super technical (and if it is, it will usually be one specific skill, not all of them), and it's mostly about communicating with people.
I'm taking an Algorithm Design course this semester with this textbook being the main reference and boy am I intimidated to attempt any of the questions :sweat: . You got any advice on how to approach/think about those excercises?
Read the chapter and don't skim anything. If you don't understand something, you need to go back a paragraph at a time until you're back in familiar territory, then work forward until you hit what you missed. It's very well constructed to actually explain everything, but it's very, very dense. Set solid blocks of time aside to work on it.
The problems all start out hard, but get much easier once you've done a few from the chapter. Once you've practiced the techniques a while, it gets quite a lot easier; it turns out they know what they're talking about when they say these are general techniques. Think of actually completing your first few problems in a chapter as being the majority of the work.
Expect Dynamic Programming to be harder than the rest. Shit's notoriously hard. Schedule extra time for it. Once again, the majority of the work is getting through your first couple problems of that type. Eventually it clicks.