5 Tips for UW CSE Undergraduates
This past June, I graduated from the University of Washington’s Paul G. Allen School for Computer Science & Engineering, more fondly known as UW CSE. Among learning essential life skills, such as how to balance a binary tree and find the shortest path between nodes in a graph, I picked up a few tricks that helped me navigate life as a CSE major.
To current and incoming undergrads, here are five tips that I wish someone had given me when I started.
Prototype and test diverse experiences.
As a freshman, I wasn’t sure where I wanted to go after graduation. Would I want to be a software engineer or product manager in industry? Go to grad school and be a researcher? Maybe even start my own company?
Though reading articles and asking for advice can be helpful, I’ve discovered that the best way to figure out what you want to do is to try things. Think of college as a way to design many prototypes of your future self. Experiment with these prototypes. This will help you understand what different career paths look like and which types of work you find personally fulfilling.
As an undergrad, you have a golden opportunity to try things for a short period of time with very little cost to your time and career. Industry internships, RA, and TA positions generally start as quarter-long commitments. Once you leave school for the working world, you are locked into the same position for at least a year and experimenting becomes much more difficult. Moreover, the department provides you with access to people and resources that are hard to come by once you are out of a university environment. Seek out and take advantage of them .
What if being a software engineer at Google or an ML professor has been your dream for ages? It’s great that you have a goal in front of you, but don’t discount other experiences. Try working at a company or in an area that you think could be exciting but wasn’t part of your original plan. Don’t just take my word for it. Sheryl Sandberg has a great way of putting this: “If you’re offered a seat on a rocket ship, don’t ask what seat. Just get on.” Even if the experience doesn’t end up being your rocket ship, it will give you another data point that will allow you to make a well-informed decision of where you want to head.
Below are six experiences you could try as an undergrad in CSE. Aim to do 2–4 of them, and do them well.
Undergraduate Research
Research allows you to dive deep into a technical area that you find interesting and become an expert in it. Unlike in class projects, in research there usually is no well-structured plan already laid out for you. There is no right answer. Stealing industry terminology, in research, you are both your own product manager and engineer. Regardless of whether or not you decide to go into academia, having the ability to add structure to an unstructured task and execute on it is an incredibly valuable and difficult-to-learn skill.
In addition, doing research will allow you to meet professors and grad students who are more knowledgeable than you. They can also guide you if you choose to go to grad school later. Leaving more options open for yourself never hurts.
To get involved in research,
- Narrow down areas you might be interested in working in. It’s okay if your interests are initially pretty broad. Start by exploring the UW CSE research page.
- Take classes relevant to your research areas of interest as soon as possible. Go to ACM research nights during fall and spring quarter, read the webpages and papers of faculty members, and attend CSE Distinguished Lectures. You might find that your area of interest changes after doing this.
- Once you’ve done the above, reach out to professors or grad students you are interested in working with. Cold emailing them is one way of doing this. Even better is to go to their office hours or talks and ask good questions about their work (more on this in a bit) — chances of success become much higher if you have already gotten to know the people you want to work with.
At UW, you can get up to three graded credits every quarter for doing research that count towards your graduation requirements. If you do this for three quarters, you can even write an undergraduate honors thesis. Doing research is great preparation for doing a Masters or PhD. If a PhD is something you’re thinking about, make sure you know what you’re getting into.
TA a Class
You can’t fully understand a subject until you can teach it to someone else. If you took a CSE class and found that you loved it, try applying for a teaching assistant (TA) position and lead a section. Most of the intro series and 300-level course sections are run by undergraduate TAs.
Being a TA can allow you to develop your presentation skills and boost confidence in explaining technical material — this can come in handy for interviews down the line. Some TAs also get the opportunity to become head TAs, or to even become lecturers. More than the credentials, there is something incredibly satisfying about helping a fellow student and sharing the experience of learning with them. Many TAs also develop camaraderie and deep friendships with each other, especially the 14x intro series TAs. TAs spend a lot of time together preparing for section, grading, and unjamming the paper copier.
Being a TA is usually a 10–20 hour per week commitment during the school year, so make sure you clear room in your schedule for it. You do get paid for your time, but also know you will have to balance your class commitments on top of it.
Intern at a Startup
Working at a startup can be incredibly rewarding — as an individual you can have a large impact on the company and its products. Startups are energetic, fast-paced, and not bogged down by corporate bureaucracy. If the future is being created anywhere, it’s probably in a research lab or in a startup.
To find interesting startups to work at, make sure to check out the UW CSE startup career fair (it usually happens the day before or after the established company career fair). Also create a profile on AngelList, a type of LinkedIn for people into startups. Hacker News also has job listings from Y Combinator startups.
A note of caution: be very, very picky when you’re choosing a startup to work for. While big companies have a pretty consistent experience, startups are much more unpredictable. Make sure you are excited about the company’s mission, but even more importantly, make sure you like and admire the people you will be working with — particularly the founders. They will make or break the whole experience.
Start (and Finish) a Side Project
Pick a project, then set aside a few hours every week to work on it. Don’t worry if it’s not world-changing — it doesn’t need to be. There are only a few criteria to keep in mind when picking a project: (1) Does it fill a personal need? If the project is useful and relevant to you, you’ll be much more motivated to work on it. (2) Is it fun? Whether you want to make a doge 2048 game or rewrite the Linux kernel in Haskell, pick something you get excited about. (3) Is it realistically achievable? Pick projects that are actually doable with the time you have.
Even more importantly, once you start a project commit yourself to finishing it. Most side projects (including many of mine) die after the first day of initial excitement. However, crossing the finish line is where the real reward is. Have milestones to measure your progress. It’s really hard to stay focused on finishing something when you feel like you aren’t getting anywhere. Picture what the minimum viable product (MVP) looks like for your project and then work backwards from that point. Schedule what and when you’re going to get things done.
Start simple. Create your own personal website. Implement a cool algorithm that a professor brushed over in class. Build a UW CSE meme bot. Start your own club. Again, remember that done is better than perfect.
Start a Startup
Starting a company is not just about padding your resume or doing something that sounds sexy. It takes a lot of work, and you have to really, really want it. When starting a company, remember the need you are filling is way more important than the technology itself. No one will care about how fancy your AI algorithm is if it doesn’t produce any real value. Paul Graham says it like it is: “The market doesn’t give a shit how hard you worked. Users just want your software to do what they need, and you get a zero otherwise.”
If starting a startup is something that you think could be on your radar, either now or in the future, I would highly recommend taking CSE 490a (Software Entrepreneurship, taught by Ed Lazowska and Greg Gottesman). The only real way to learn how to start a startup is to try and build one yourself, which is precisely what this class forces you to do. Y Combinator, the world’s most well-known startup incubator, is now also offering an online startup school. In the Seattle area, incubators like Techstars, Pioneer Square Labs, and AI2 are also worth serious consideration. Read GeekWire voraciously to find out what’s happening around Seattle.
Rather than sitting around just thinking about startup ideas, build out your side projects and see where they take you. Don’t be discouraged if things don’t stick right away. If you build ten projects, maybe one of those will be great. If you build none, your chance of success is 0%. Moreover, in the process of building you’ll gain valuable insight as to what works and what doesn’t, and become a generally better hacker.
Intern at an Established Company
The Big 4 (Microsoft, Google, Amazon, and Facebook) and other well-known tech companies grab a disproportionately large number of the graduating class of UW CSE — for full disclaimer, including myself. Internships at large companies are typically very well-organized, since these companies are used to taking in thousands of interns every year. Most established companies have excellent engineering practices. Working at a big company can open you up to a world of people and projects and give your resume the coveted “brand-name” stamp. The free food, T-shirts, and occasional back massages also don’t hurt. Interning at an established company is certainly helpful, but the price is often underlooked.
Recent statistics have shown that we are the top producer of technical talent at large companies. However, we lag far behind schools like Stanford, Berkeley, and MIT when it comes to producing entrepreneurs. In addition, only a small fraction of UW CSE graduates end up working at startups or going into research. I hope alumni and future generations of students will be able to change this. Clearly, UW CSE undergrads know their stuff and have technical chops, so why are there so few taking high-risk/high-reward paths?
Part of the above might be attributed to pressure from the department and peers, as well as the relatively quiet tech culture in Seattle. The CSE labs during fall recruiting season can sometimes be reminiscent of high school locker-room drama, where angsty students exchange the latest gossip on who got the “best” internship or full-time offer. As an alumna who went through this drama, I remember how painful it was to deal with and now how silly it all seems now in hindsight.
Try working at a big company, but also be willing to swim upstream and take some risks. Be wary of being too comfortable. The free food doesn’t taste as good after you’ve had it a hundred times, but exciting work never fails to be rewarding.
Prioritize like your life depends on it.
As an undergrad, you will constantly be fighting to be in control of your time. Ruthlessly prioritize what you need to get done. During junior year, I started playing a mental game with myself; the objective of the game is to be the first in the class (or among my friend group) to finish an assignment. Putting this time pressure on myself forced me to increase my work intensity and not let things linger. Remember this equation:
work done = time spent x intensity of focus
Inverse proportionality is a beautiful thing. The more focused you are, the less time you have to spend working. It’s that simple. Despite the pretentious name, Cal Newport’s book, “How to Be a Straight A Student” is an excellent and short read (and bonus points, the author is a CS PhD) that changed how I approached work.
Grades are important, but they are not everything. Industry hardly blinks an eye at them. Grad schools look at them, but professors are much more interested in the quality of the research you produced. Aim for the 3.7–3.9 GPA sweet spot. You want to have grades that are a bit above average, but don’t devote all of your energy to getting a 4.0 and do nothing else. If you’re only studying for classes you’re missing out on all the other opportunities the department has to offer.
Also, be realistic with yourself. It’s good to stretch yourself, but don’t break yourself either. If you take 3 CSE classes at a time and research and TA at the same time you’re only setting yourself up for mental breakdowns and frustration. Ignore the people who are always bragging about their insane schedules. It’s better to do a few things and do them well than to do everything poorly.
Ask the the right people the right questions.
People like being helpful — it makes them feel good. People also like it when you take a genuine interest in their work. Emphasis on genuine. To show genuine interest, ask good questions. The best way to ask good questions is be curious and do your homework.
When you go to office hours to ask for help on a problem set, have a few questions prepared in advance and strategies you tried outlined. Your TAs will love you for it. If you want to talk to a professor about research, read about their work and formulate your own ideas about it. Thoughtful questions shows that you are engaged and actually care.
You never know where a good question may lead you. When I was a sophomore, I attended a tech talk by Google’s Spanner Tools and Infrastructure team. I didn’t know very much about distributed systems at the time, but I was in the middle of taking databases and I found a particular point during the talk interesting. Afterwards, while other students were leaving, I went down and asked a couple questions to the senior engineer that had been presenting. A year later, this led to an opportunity to intern on the same team.
Make sure you know who your audience is when asking questions, and be aware that their answers are biased by their own personal experiences. This is especially true for advice-type questions. There’s nothing wrong with getting advice, but have the courage to make your own judgment call.
Build close friendships with people you admire.
There’s a common saying that says you are the average of your five closest friends. Luckily in CSE, you are surrounded by many like-minded, high-achieving people. Identify people you admire and jive well with, and befriend them. Help each other. These people will become the basis of your professional network. You will spend late nights working with them, discussing new ideas, and maybe even start a project or company together. Once you leave college, developing close friendships will only be increasingly hard. Don’t miss out on the opportunity you have right now.
Even more importantly, if you make the right friends they will be your rocks and emotional support throughout your life. No one achieves things alone, no matter how brilliant they are.
So, where do you meet your crew?
- Hang out in the labs. Even though 002 can be noisy and rowdy, the camaraderie that comes out of it is unbeatable.
- Join clubs; run for an ACM or ACM-W position. The ACM student groups are responsible for planning undergrad events together, and students who are excited about CSE tend to gravitate towards them.
- Talk to the other students in your classes and in office hours. New-major classes like CSE 311 and CSE 352 are especially teeming with people looking to make friends.
- TA. The TA friend groups in CSE, particularly for 14x, are some of the strongest.
If you can, also try to intern at different parts of the country or the world and build friendships with people from other schools. People outside of UW often can provide you with fresh ideas and opinions. When I interned in the Bay Area several years ago, I made several close friends from California, Canada, and the East Coast who I still talk to regularly today.
Get enough sleep.
You don’t need to sleep in the labs to be a successful CSE student. I learned this the hard way. My naiive freshman and sophomore-self pulled many all-nighters, since I just assumed that’s what I needed to do to get everything done. All the cool hacker-types seemed to be doing it. This was extremely counterproductive.
The extra few hours of work you get done by staying up late is a waste — the next day, your body and brain will be useless. This goes back to the equation we saw before. If you are working at half your normal level of focus, it will take you double the amount of time to get the same amount of work done. Not a good tradeoff.
No matter how much work you have, make a vow to sleep at least six hours and preferably seven to eight. Go to bed at 12am, wake up at 6am if you must. Coding early in the morning feels awesome anyway, and the magic of sleep will make it much easier to find the bug you were looking for.
Being an undergrad at UW CSE was one of the most rewarding experiences of my life. Climbing a mountain like an undergraduate CS or CE curriculum is a grueling process, but the sense of accomplishment when you reach the top is unbeatable. To undergrads reading this, I hope you know that you are more than capable of climbing the CSE mountain. I can’t wait to see you at the top, and I can’t wait to see what new peaks you climb.
Acknowledgments: Thanks to Karishma Mandyam for feedback on this post. Also, thank you to the wonderful people in UW CSE for four fantastic years.