Ask HN: Attending CMU for MS Comp Eng. Gaps to fill before applying to top 10s?
Hello everyone. I'll be attending CMU at their Silicon Valley grad campus starting this August. Although I'm very excited to start preparing for the valley job search, I would like some advice on what gaps I should fill during my Master's degree, either through coursework or in my own time. Some background: I completed a Computer Engineering degree at BU. It was heavily focused on C programming with architecture topics and microprocessor design, and all the other fundamentals such as Discrete Math and algorithms. Since I was able to complete my degree in 2 years, I have many gaps that I would like to fill through my graduate career. I will likely lean towards software since I lack the more technical knowledge of things like circuit design and pcb diagrams.
My knowledge from most familiar to least: C programming - Architecture Simulation such as cache design, branch prediction, INTEL PIN, assembly decompilation, recreated malloc
C++ algorithm design, search algorithms, some palindrome finding and optimization
Some work in C#, Java, and Python designing Unity games, other user oriented projects. However, I'm still lacking in this large scale system type projects and still not experienced with good hierarchy of parent and child classes, etc. Pretty much not as well touched up on the "object" side of object oriented programming.
Pretty much no real work experience, no cybersecurity knowledge, no machine learning knowledge, no database programming, no network type programming.
My current course plans for next sem are: Computer Systems (C programming, Assembly, architecture type programming); Project Based course (mixture of hardware and software); Internet Security course; Energy Aware computing (gives more depth of CPU components and how to optimize them for energy);
And my possibly course load for next semester: Fundamentals of software engineering (project based, industry type projects); Machine learning; Wireless networks; TBD Concur with the other poster here: you are going about the process backwards. You need to figure out what specialty you're aiming for and shape your coursework toward that. You say you have a BS in Comp. Eng., which would point towards a career doing hardware oriented things like embedded systems, device driver / OS development, or IoT, yet you list a bunch of end-user oriented software as your project work. If you're lacking in "the more technical knowledge of things like circuit design and pcb diagrams", the first thing people are going to wonder is "Well, why didn't you go back and fill in those gaps? What's your actual passion?" Bear in mind also that your Comp. Eng. background puts you in a odd place in the job market. Look carefully at the HN "Who's hiring?" posts for this month and preceding months. 90% of them are for web stuff/CRUD apps and most of the rest are for mobile or desktop apps. That's not to say you can't get hired for those positions but pretty much _none_ of them will make use of your specialized education. If you want to avoid that route (and once you start going down it, it gets hard to break out), then start figuring out what you want to do professionally for the rest of your life, start looking at job postings for engineers at companies that do said things, and start shaping your coursework to fit those job postings. And since, as you mention, you don't have any real work experience, start thinking about getting some internships under your belt immediately. I've realized that most of the job listings aren't for my speciality, which is why I'm pushing more towards what the job listings are asking for, rather than things like PCB design and circuit design. I don't want to go into that rabbit hole, as you said, of specializing in something I won't use much. My real question is then, what specifically should I learn in order to make myself more well suited to taking the type of offers that current job listings are looking for? As far as internships go, I'm completing my masters in one year and would only have time to pursue an internship in possibly winter and summer break of next year at best. > My real question is then, what specifically should I learn in order to make myself more well suited to taking the type of offers that current job listings are looking for? If you're talking about web jobs, I'll point out that you have a rare specialization that you've acquired at great difficulty and expense that puts you head and shoulders above the average developer. Why throw that away before even trying to use it? There are jobs for Comp. E.'s out there in the areas I listed in my original post, though they take effort to find. Don't settle for mediocrity. If you're determined to do it anyway, a solid understanding of software engineering, distributed systems, database theory, and software security will serve you well. Languages to pick up are Javascript, either Java or C#, and one of the dialects of SQL. > As far as internships go, I'm completing my masters in one year and would only have time to pursue an internship in possibly winter and summer break of next year at best. Foregoing internships is unwise; those do well at an internship will often be directly be offered full time employment after graduation, if open headcount is available. Even if not, completing internships and being able to describe the work accomplished is a strong positive indicator to hiring managers. The purpose of a Master's is to develop expertise in a particular subfield of CS. Your course plan doesn't seem to be focused in any subfield. You'll get more out of your time in the program, and will be able to more easily identify what knowledge gaps to fill, once you decide what you will specialize in.