Acing your Masters at Stony Brook

Over the past few years, several Masters in Computer Science students at Stony Brook have asked me to highlight my Masters experience seeking guidelines to get the most out of their Masters at Stony Brook. I have always wanted to document my experience and suggestions and now seems to be a good time when I am on a summer break.

First, a few words on my academic background: I graduated with a B.Tech degree in Computer Science from National Institute of Technology, Karnataka and worked for a few years as a software developer at Microsoft and Juniper Networks. I then pursued my MS in Computer Science from Stony Brook in Fall 2012. After spending a wonderful summer in 2013 interning at Google, I returned back to Stony Brook to pursue a thesis and graduated with a MS in Spring 2014. I then stayed on for a PhD and obtained my PhD in May 2017.

My MS experience was not only characterized by a deepening of my skills and expertise but also a shift in my outlook shaped by the overall academic experience and my interactions with faculty. I document some of these guiding principles and experiences I picked up during graduate school below with the hope that others might find it useful.

1. The long view

While it is easy to view an MS at Stony Brook as only a ticket to get that job at your dream company X, in my personal opinion this is a very limiting view that yields a sub-optimal experience and return on investment in the long run.

Long term career skills: Observe that what you might be doing 10/15 years later will likely have no resemblance to your first job after your MS. Consequently, a good MS degree should serve you well even decades later. One way to accomplish that is to (a) take foundation courses (b) learn from domain experts and (c) pick up skills that are unique to an academic setting.

For example, I took Operating Systems (CSE 506) with Don Porter. Now while one could work on the Linux kernel in the industry as well, that would mostly be limited to one tiny component — where one is typically expected to pick up how the component works on the job. However, CSE 506 provided me with the opportunity of writing pretty much an entire OS (with minimal features) from scratch. Most importantly, it was a safe environment to experiment and fail (the worst thing that could happen is your kernel would not boot up :) and you would lose some points). I had full freedom/control to design the entire system — an experience I would be hard-pressed to obtain in the industry unless I was a software architect, which would still take me years. After taking CSE 506 with this vision, I pretty much enjoyed debugging the kernel panics, the OOM’s encountered because I knew that these experiences would be useful when I might take on a role of software architect a few years later.

As a second example, like most people do, I took CSE 548: Analysis and Design of Algorithms. Generally, one might be of the view that the course does not really teach you how to ace a coding interview but focuses majorly on analysis. However, this is precisely what makes it unique — an experience you might not be able to replicate outside of graduate school and incredibly useful for getting your dream job. This course focused on general problem-solving techniques. We studied design techniques like “Divide and Conquer” in exceeding depth including applications to randomized algorithms. Most importantly, the focus was on “how to think” rather than “recall from memory” — a technical skill that would be useful no matter how old I get in the industry.

Broader career options: A Masters degree can also open up other career options not limited to software development in the industry. Some other career options include (a) Research Programmer at a research lab in academia (b) Pursue a PhD (c) Data Scientist and (d) Teach. The diverse set of experiences during your Masters can be useful to decide what career options are best suited for you.

Keeping the potential long-term impact of your MS can be useful in not only deciding what courses to take but also enable a fulfilling and fruitful graduate school experience.

2. Take the high road and enjoy the journey

There is a beautiful Chinese poem that goes as below:

“If archer shoots just for fun he has all his skill.
If he shoots for score his hands tremble and his breath is uneasy.
If he shoots for a golden price he becomes mad and blind.
His skill was not lessened, but the vision of the target changed him.”

Similarly, being overly focused on your end-goal (dream-job or grades) can be sub-optimal. The means are as important as the end!

Below are a few tips/guidelines that I found to be most useful during my MS:

(1) Focus on learning key skills: Rather than focusing overly on “How to clear interviews for company X”, focus on actually learning — mastering material taught in CSE 548 and CSE 506 for instance. This will lay down basic abstractions/foundations which will make it easier for you to cover a much larger span of interview questions in shorter time. For example, once you master the idea

“ In order to derive an algorithm to solve a problem, it is sufficient to show (a) how to solve it for small inputs and (b) how to extend the solution for smaller sizes to larger size” .

, and are familiar with tools/techniques to achieve the above, a large class of problems and algorithms all seem easily derivable from first principles (eg. Kadane’s algorithm for maximum sub-array in linear time).

Similarly, once you “unroll a stack” manually in GDB, you can debug kernel panics and dumps much more efficiently and confidently solve that elusive customer bug on the job quickly.

(2) The real learning happens during home works: While intuition is conveyed in the classes, the devil is always in the details. It is only when working on homework problems that some ideas are drilled upon, key abstractions understood and tools learned. Consequently, the real learning happens only when you work out homework yourself, however time-consuming it may be.

For example, when I took Machine Learning CSE 512, we discussed Linear Regression in class and derived the formula for least squares in the case of 1 feature variable (which is trivially easy). However, deriving the formula for the case when there are multiple features easily, requires one to know Matrix Calculus which the homework problem required.

(3) Broaden your skill set: Graduate school offers you the opportunity to take a variety of courses — courses spanning multiple fields like “Computational Biology” as well as advanced courses like “Advanced Operating Systems”. A broad range of courses can enable one to switch fields/careers after graduate school. A systems engineer can seek jobs which are more related to Data Science/Machine Learning or vice-versa. I encourage students to attend the initial lectures of several courses (even well outside your intended specialization) as this can reveal new interests as well as opportunities.

(4) No need to burn the midnight oil: In my experience, you can pretty much ace all your courses by (a) Focusing in class, asking questions during office hours to clear concepts and (b) consistently and regularly working for 8–10 hours every day. In fact, the exams are designed to test your understanding which you would have no trouble with if you have worked out the homework problems sincerely and attended office hours to clear questions. A “cramming” strategy is not only stressful but in my opinion useless and ineffective. I strongly advocate for a slow and steady schedule rather than a “death march”. Most days during my MS and even during my PhD I consistently got 8 hours of sleep and did just fine :)

Good luck on your journey and hope this is useful!

Edit: Responses to frequently asked questions

(1) Can you elaborate on your experience in Data Science Lab?

I joined Data Science Lab as Masters student and continued all the way towards a PhD working with Steve. For me personally, it was a very fulfilling experience which involved many fruitful projects and collaborations ranging from other labs in Computer Science like HLAB, Sociology and the Laufer Centre for Quantitative Biology. I would strongly encourage prospective students to consider applying to work at Data Science Lab with the following suggestions. First, take your first semester to get to know the lay of the land, develop tastes and preferences for what you are really interested and only then apply to labs that interest you. I believe it is important to play to your strengths and do what you like to have a fruitful experience. Thriving at Data Science Lab is not any different from any other lab. Second, you need to be self-motivated, internally-driven and work hard. You will need to be interested in machine learning, natural language processing and text mining and either should have taken courses on these or be willing to self-learn. More importantly, you need to have the tenacity to get things done and figure things out on your own to whatever extent possible. In other words, do not expect spoon-feeding in graduate school. Finally, strive to do well in courses, which I believe are a proxy (even though imperfect) of your hard work and commitment.

(2) My GRE scores are X and I am from Y institution. Can you tell me whether I can get into Stony Brook and where else I should apply?

Recognize that there are far too many factors (some of which are random) for anyone not on the admissions committee to estimate whether you will get into any particular school. Your best bet is to look towards your peer group and identify what graduate schools they applied to and got accepted. I advocate for a strategy where one applies to a at least 15 schools: 5 top tier, 5 mid range and 5 safe schools. Again, I cannot realistically assess your chances of getting in and I will generally not respond to e-mails on this question for the reasons enunciated above. Finally, whether you get an opportunity to work at Data Science Lab is also subject to many factors (like timing, current projects , vacancies) and your best bet is to apply and see. As it is said: 90% of success is just showing up. Good luck!