On UIUC’s 5th year MCS program
date
Jul 16, 2022
slug
cs-masters
status
Published
tags
School
Career
summary
What the Masters degree in Computer Science gave me, why I believe it’s a great path to consider
type
Post
Background
In November 2018 I was heads down coding up an alternative to the C programming language’s Malloc memory allocator in my Systems programming class (UIUC’s CS241) in the basement of the Siebel Center for Computer Science at the University of Illinois in Urbana-Champaign. I stepped out of the lab to receive a call from a recruiter at Uber - a company I had just recently interviewed with for an internship. She let me know I got the internship - and I was ecstatic. I would work on the fraud team at Uber where they needed people who were familiar with applied machine learning & distributed systems - the area I was most excited about in school.
During the summer, I discovered so many new technologies and methodologies that were used to tackle concrete problems Uber faced with fraud. These new methodologies ranged from deep learning on tabular data for payment fraud detection to database migration to Cassandra DB - and all the technical complexities that went with it. After spending the summer having the opportunity to return either full time or as a return intern - I determined to spend my remaining time in school becoming as much of an expert on the new topics I was inspired by for when I returned to Uber.
I had only 1 semester of school remaining in my undergrad, but I was also accepted into the UIUC’s 1 year master program. This left me at a drastic crossroads - do I head back to go full time at Uber after a semester or delay by a year and spend the extra year learning even more in school for the earning of a graduate degree?
I made the decision to delay joining the workforce for a year, informed the Uber recruiter, and committed to the extra year at UIUC.
Here’s what I did with the extra time, and why I believe it was worth it.
What I gained from my Master’s
I enrolled in UIUC’s 5-year BS-MCS Program, a program that offered additional graduate-level coursework and no requirements for submitting a thesis.
This is how I made technical use of the extra year of school I undertook:
(Spring 2020)
Distributed Systems
Computer Security
Computer Vision
(Summer 2020)
Interning on a security team at Google
(Fall 2020)
Communication Networks
Advanced Computer Security
ML for Systems, Networks, and Security
+ Actively contributing distributed deep learning (federated learning ) system design and implementation on Sanmi Koyejo’s Federated Learning Research Group
Why I took the extra year to do school
2.5 years wasn’t enough time to explore technical domains
In undergrad, especially early on in my days at UIUC I often felt technically shallow compared with the peers I had in my classes. Advisors in my high school had told many students that big 4 universities are not worth the money for the first 2 years - and that if you really wanted to get the best deal, a great path would be to first attend community college for 2 years, complete all the general education requirements and some basic computer classes, and then transfer into university. Once in university, I’d have only 2 years to complete all required Computer Science classes. Given only 1 computer science class of mine transferred over, this meant completing an entire Computer Science curriculum that was intended to span 4 years in only 2.
While completing the curriculum in 2 years was possible and what I originally set my goals on, going through the first year of taking 5 computer science classes per semester I realized that the realm of computer science was too exciting for me to only take the required classes and not have an opportunity to explore the really challenging classes in the major. Even after stretching out my undergrad at UIUC by an extra semester to 2.5 years to have more time for breadth, I realized that even that wasn’t going to be enough for me to tackle the graduate classes I had been dreaming of taking.
The extra year I then had access to gave me the ability to explore Systems, Security, and Machine Learning, which is what I felt inspired by at Uber on the fraud team.
An internship at Google was valuable
Joining Uber full time, the unique perspectives I was able to bring from working at Google gave me the ability to quickly perform high above the expectations my team had for an entry level engineer, which allowed my manager to fight for me to get promoted in less than 1 year.
Google gave me the mentality of what high quality software design looked like - which helped me stand out against my peers. It also gave me an overview of how tools are used in a highly advanced company like Google, and gave me the experience of being able to know that I was not ‘missing out’ by not working at Google.
Interning at an extra tech company also gave me the perspective of seeing 2 different types of security teams that can exist. On one hand, I saw Uber’s fraud team, who was dealing with intense payment fraud problems where fraudsters could sign up for earner accounts and pretend to take 100s of trips to earn 1000s of dollars fraudulently. With so much money being lost every year, if the problems weren’t solved quickly, the business would go under and the entire company would be need to find a new job (if you’re interested in learning more about these sorts of fraud issues, I recommend the TV Show Super Pumped: The Battle for Uber - it highlights some of the problems Uber faced early on).
On the other hand, at Google, my team worked on internal security policy monitoring, for detecting whether internal teams at Google were using the best security practices when conducting RPC calls on locational jurisdictional micro-services. This work helped Google to better understand the landscape for which services across the company were compliant or un-compliant with location jurisdictional access.
After finishing both and deciding the kind of security that I wanted to dive deeper into, I ended up joining Uber because I found that solving their security / fraud problems was going to be
- Centric to the company succeeding
- Ambiguous with the solution architecture, providing a lot more challenge than the boiler plate design I followed at Google
- Common outside of just Uber, equipping me with skills that many other companies would also love to have at their disposal.
Getting closer to the 4 year university experience
Cramming 4 years of undergrad computer science course requirements into 2.5 pretty much tied up all the time I had, 7 days a week, for each semester. Up until my 3rd year at school, I had only visited a bar to hang out with friends maybe once or twice, at first because I didn’t believe in drinking before I was 21, but later because the happy hour times often overlapped with a class office hour that I didn’t want to miss out on.
Knowing that I would have a chance to take some of the most time-intensive classes in my grad program in 2020, my last semester of undergrad in Fall 2019 was the semester I took the least time-intensive tasks (but still technically challenging) and finally tried out for the school’s rowing 🚣 team! During that semester, I somehow managed to wake up every week day at 4:50am or 6:30am to run to practice so we can get on the water by sunrise
By the end of the semester, I was in some of the best shape I had ever been in in my life. We also got to travel around to other universities to compete against other school’s teams.
Since college, rowing has been my favorite exercise to do when I feel I really need to get all the energy out. Getting on the ergometer and pushing out a slow 2K row is nothing compared to what we did for practice at Illinois, but when I haven’t done it in a while, I feel completely exhausted just from those 8 - 10 minutes it’ll take me.
Having these unique opportunities to try different activities that you might like while in school is something that I wouldn’t have been able to make the time to do without the extra time I bought myself.
With the extra time, I was also able to make the time for countless more activities, like taking 2 semesters of Hip Hop Dancing, being an amazing TA to the undergraduate students I was teaching, attending board game night every Friday, and finally making the time to go to the happy hour that other members of the ACM club had been inviting me to for what had accumulated to years of me rejecting them.
All these experiences added so much value to my life, if not for the sake of them being the core non-technical enjoyment in my life, but in the least for the sake of gaining the soft skills of understanding and relating to others’ favorite activities to enjoy.
The necessary ‘Graduate Degree’
We’ve heard it time and time again. “You don’t really need a graduate degree to go into distributed systems or applied machine learning, you can just start.” After joining in Big Tech, I found this statement to be somewhat true, however, during the process of completing my graduate degree, I realized why if I were to attempt it, failure would be most likely imminent.
I believe pursing machine learning without some expose to graduate research is likely to result in at least short-term failure, not for any technical reason, but for a reason of experience and comfortability. Some of the largest skills to learn in any Machine Learning job is the ability to thrive in ambiguity and the ability to architect an end to end system for AI or Machine Learning to be relevant at all for a problem.
Thriving in ambiguity
In any Machine Learning or AI project, lots of decisions are left open to the ML solution architect. Be it training data collection, model actioning solution, human-in-the-loop considerations, training data selection, label selection, robustness of the engineering solution to handle the model complexity, robustness of the user experience flow management before and after an AI or model takes an action. So many assumptions need to be made, and without experience and having the acumen to decide some of these parameters, the project you create may not be useful at all.
In graduate school, once on a research team, a usual case you will find is that similar parameters will exist for you to decide upon in order to produce a novel or valuable contribution which appropriately tackles a problem. In my case, during my time working in the Sanmi Koyejo’s research group, we were building a federated learning system for hospitals to collaboratively train computer vision models without needing to violate HIPAA compliance by sharing data. During our project lifecycle, we continually met with staff from the hospitals that were able to direct us on the path towards building a solution that worked for them. This process helped us understand the assumptions we made along the way, and adjust them to the assumptions aligned with the hospitals (our end customers) - for example, on the training & handling of the non-iid data we trained our model with.
Ability to architect an effective end to end ML Solution
Machine learning solutions are only as valuable as the business problem you are interested in solving is, and machine learning models are only as valuable as the data they were trained on. The skill of knowing when and how to adapt the technical landscape of your ML project’s solution (backend architecture, user experience flow, data architecture) becomes essential when needing to deploy ML for customer experiences.
Developing the skills for machine learning, backend development, user experience management, and distributed data processing is almost impossible for an undergraduate student to enter the industry experienced with right out of school. Graduate programs force students to at least engage in some more ML classes after they had their heavy systems classes in their undergraduate degrees.
The paper reading requirements
Most graduate level classes will also have a weekly paper reading requirement associated with them. In my case, during my semester taking the Advanced Computer Security and ML for Systems, Networks, and Security classes I mentioned above, between both the classes we had to read over 5 papers per week and write reports on each of them.
Coming from a background of opening up a research style paper and being intimidated during undergrad, this experience of reading over 100 research papers during my last semester of school greatly bloomed my comfortability and confidence in research paper reading and construction. This confidence has carried on with me much after my semester of paper reading ended, and is what made me feel that I had what it took to transition to a machine learning engineer at Uber after joining as a backend engineer.
Holding the degree shows others that you’ve been through the $@#%.
People that have been in grad programs know that students who get put through these grad programs come out tougher mentally, having survived the ridiculous ambiguity they had to solve, the tough classes they were put through, and the countless literature review they would have done in order to contribute a novel and valuable solution to the world.
This is the reason why job descriptions at top companies still state that they would prefer someone with a higher degree such as a Master’s or a PhD when hiring for Machine Learning roles. It’s not that under grads graduates can’t learn, it’s that they can’t have the same mental attitude coming in as a Machine Learning engineer. With Machine Learning engineering, there’s often no underlying theory to implementing a solution as there is with implementing a backend microservice or a CRUD application. Success is typically the result of many trial-and-error attempts, reviewing other people’s successes and evaluating if they work well for your problem. Research is a simulation of this exercise - thus the paper reading and implementation showing value.
The cost I paid to do the program
For me there were a few costs to consider
- The cost of the graduate program itself. In my case, I had a tuition waiver because I was able to secure a teaching assistantship for both the semesters I was there - allow this was not guaranteed. Without this, Illinois residents would pay about $7K in tuition per semester and non-residents would pay $14K.
- The cost of not earning a tech salary for 1 extra year of school - this cost can be evaluated at around $150K* 0.66, since we assume a 33% tax bracket. So about $100K.
- The cost of not learning at a tech-giant, in favor of learning in grad school. I’d evaluate this cost as $27K. After about 1 year of work, the average bay area tech worker makes about $190K, a $40K bump, and therefore after taxes a $27K bump.
However, what you gain:
- A graduate degree.
- (If you get a teaching assistantship) about $20K / semester
- (If you get a second tech internship) about an extra $20K post tax for your summer wages.
- About $20K in savings on rent from not having to live & work in an expensive city
So, in all, under my scenario as a high earning tech-worker, my masters most likely costed me about $70K to receive. However, it provided me with the confidence and skills required to truly excel once I landed my first job and to de-risk any potential mistakes I could engage myself in by not having exposure to the breadth of different areas of study. Additionally, it’s also something that you probably won’t do in the rest of your career, but it is something you’ll have for the rest of your career.
Should you go for the Master’s program?
Ultimately, it will be a decision that is up to your unique scenario and preferences. For me, re-iterating on myself over and over again until I get to a point that I’m comfortable helps me form the confidence to tackle and problem I could be interested in.
For you, it will depend on:
- How comfortable you will be with missing out on the added experience you could gain before jumping into the industry
- What your current career aspirations are after graduating. Do you one day want to become a machine learning engineer or another role that requires more research oriented comfortability?
- The cost.
Overall, for those that are still on the fence, I’d recommend you go for it, and really spend the year or two learning as much as you can so once you graduate you can hit the ground running with confidence, clarity, and ambition for what you want to tackle in your life.