Education & Learning Committee
by Nguyen Vo
Now that I have your attention, this post is for people who want to get their first Software Engineering job. Not PM, not Data Analyst, not Quant.
This is where I tell you my background so that you set your own goals according to where you are. Everyone is different. And that’s the fun part. I graduated studying Mechanical Engineering, Math, and Philosophy. I worked for a year as a Design Engineer before getting my offer to be a Software Engineer. I taught myself a bunch, did side projects, and prepared for interviews. And my plan is to show you the timeline, what I did, my current situation, and other tips.
- Aug 2015 – Jun 2019: Only took one Computer Science course (Introduction to C Programming for Engineers), but I coded in MATLAB in those four years.
- Jul 2019 – Jan 2020: Started my first job as a Design Engineer. Starting to realize I really enjoyed automating my work, doing computational and analytical tasks, and the software engineering aspect of engineering.
- Feb 2020 – Jun 2020: Had to start somewhere, so I tested the water by learning Discrete Math, then it led to CS50 (Introduction to CS) from Harvard, which boosted my confidence to take CS80 (Introduction to Artificial Intelligence) and a slew of other courses. In March, I contacted my professors to apply for MCIT’s early round.
- Jul 2020 – Mid Aug 2020: Interviewing preparation.
- Mid Aug 2020 – Sep 2020: Interviewing season.
- Sep 2020: Starting MCIT with CIT591. Negotiation process.
- Late Sep 2020 – Present: Moved to Philadelphia and started my first software job.
I took Discrete Mathematics I & II from TrevTutor. He also has midterms and finals on this website. It took me two weeks to complete. Noticed I had a pretty decent background in Math so learning a new way of solving Math wasn’t too challenging for me. It’s totally fine to take more time. The goal is to understand it well. This is the building block for the science portion of computer science, after all.
I then took CS50. It introduced me to the world of software engineering with a focus on breadth, so I could see whether I’d like to specialize in this field. Workload and difficulty is on par with Penn (our program is way cooler of course), so it’s definitely not a cake walk. Took me seven weeks to finish. I used the final project (I built a file converter) and the stock trading website project on my resume.
I then took CS80, Elements of AI from University of Helsinki, and Automate the Boring Stuff with Python Programming. CS80 was pretty challenging for me as it required a year of Python experience and I had seven. I struggled with translating my ideas into code and breaking the program into functions. But in the end, I prevailed. It took me four weeks to ace the course.
Elements of AI is a good course to get the big picture of AI. and Automate the Boring Stuff with Python Programming is a practical course to use Python more effectively. They took me 20 hours in total.
My suggestion if you have more time is:
- 1 Math course (Cause I like Math)
- 1 Introduction to Computer Science (Breadth & Gauging Interest)
- 1 Artificial Intelligence (To see if you like the hype or actually like this subfield)
- 1 Web Development (The most employable subfield)
- 1 Computer Architecture/Hardware (Foundations of the computer residence)
My thinking is that at the end of the day, if your goal is to start your career in industry, it makes more sense to use the knowledge to build projects and put it in your resume. Don’t bother putting online courses in it. If you are smart and get things done, show, don’t tell.
TECHNICAL INTERVIEW PREPARATION
Of course there are countless books, websites, and resources out there. Choice paralysis is real. So go with the path of least resistance and of reasonable growth.
Love it or hate it, you still need to do this well. So let’s get good.
If you have more time, I would suggest working through the Cracking the Coding Interview for a systematic and holistic approach, in addition to 594 and 596.
But well, if you feel risky, nutty, and always run short on time (as most of you are), may I suggest my path?
So for a month and a half, I managed to understand, and squash 117 Leetcode problems (57 Easies and 57 Mediums). At first, it was a slog. I barely understand how pointers work, and I couldn’t finish an Easy. Nick Parlante’s writings were tremendously helpful. The first two weeks, I could only finish two to three Easies with help. To speed it up, think and try as hard as you can for an hour to two. Then see the solution, understand it, and replicate it. By the middle of fourth week, I breezed through the Easies and started Medium. It was the same problem again. But now that I understood the basic blocks (Pointers, DFS, BFS, Recursion, Hash Tables, Stacks, Heaps, Queues, common algorithms, etc.), it’s like playing LEGOs with them.
I solved them with a brute force solution, then fine tune them. Then read other people’s solution to either understand an order of magnitude faster solution or optimize my solution even more.
Will I be able to crush FAANG full-time interviews? No way. But isn’t that the aspirationally typical goal when you graduate? So this was good enough.
INTERVIEWS & NEGOTIATION
Projects at work, side projects, competence level of a stack, grad school (people are impressed and supportive if you work full-time, and study and prepare for interviews part-time), personality fit, drive, attitude, and technical interviewing skills are the name of the game. Personally, I felt more confident after the 100th problem.
But I never felt like I was ready. The trick is to apply regardless.
Interviewing is an art. I’ll come back once I have my first exhibition at MOMA.
I thought long and hard about writing nudges, but with so much great advice out there, the best tip is to use Reddit wisely. Diminishing returns set in quite early, but nuances come with time.
My goal was to be barely good enough to have a chance. The road to mastery is another nine and a half years of deliberate effort.
It would bring great joy if you let me know if this personally helps YOU 🙂