The Class of 2013 was asked to pass along some of the insights they gained during their years as a major. Here are their responses (lightly edited).
Take advantage from upperclassmen in the Zoo. Most of them would love to help you out with this bug that’s been killing you for the last two hours.
GO TO OFFICE HOURS. Ask questions. It saves you so much time.
The culture of the department is very collaborative. If you go in with that mindset, make sure to give without expecting anything in return; it’s that kind of mentality which fosters a wonderful atmosphere and ends up benefiting you because people will want to help you.
Definitely shop around a bit before choosing electives; there are some great ones and some less great ones. Abadi’s is definitely a must-take. Also don’t forget to look outside the department to supplement your CS curriculum. Emerson’s STAT 230 course, in particular, is a perfect introduction to basic data mining and analysis, with a heavy programming component.
Make friends with other CS majors. Though sometimes a standoffish bunch, we’re a lot of fun.
Floss regularly.
Mind the Ballmer curve.
Ask a professor where they think their field is going—and then listen.
Use Github.
Don’t bother with a resume and focus on building stuff.
GPA’s don’t matter unless you want to go to grad school.
Stop complaining about your damn problem sets, no one wants to hear that.
Call home once in a while.
I’d like to echo previous years’ advice to strive for learning and not just good grades in CS courses. However, I would advise CS majors to maintain good grades early in their academic careers, if only because it is easier and will open more doors down the line.
The earlier you get involved in research, the earlier you can judge for yourself whether you want a job in the industry or a graduate/master’s degree.
Apply for internships in the same semester you take 223. If anything, the interviews will be good practice for the following semester, when some of you will most definitely be applying for (and qualifying for) good internships in the industry.
You don’t have to follow a particular sequence when choosing CS courses. For example, you can take many 400-level CS courses without having taken 323 or 365. If you enjoy programming, try to take 223 as early as possible.
Try to finish the core CS courses and start taking electives as soon as possible. If you’re not sure what part of CS you enjoy, take a variety of electives and find out!
Balance theory courses (read: hard problem sets) with systems courses (read: time-consuming programming assignments). You will burn out if you take too much of either.
Manage your semesters well. Do not try to take more than three CS courses per semester if you can help it. Refer to the following table for a general guideline for how you will feel given the number of CS courses you’re taking in a semester (inspired by Stanford’s CS Advisor, Load Balancing page:
If you’re taking a difficult course load, try to minimize “context-switching” between vastly different subject materials. For example, try to group lighter quantitative reasoning or science courses with difficult CS courses. Try not to mix and match heavy humanities and science courses in the same semester. The transactional cost of having to readjust your thought process can negatively impact your productivity (disclaimer: all evidence anecdotal).
Sleep.
Use ergonomic keyboards and peripherals. Take breaks between bursts of typing. You are particularly vulnerable to RSI as a CS major, especially if you’re taking more than one programming-intensive course in the same semester. Take good care of your body.
Explore! Get an internship early on so that you know if you like software engineering (because a lot of people don’t!) If you’re trying to start a company, think carefully about what it is you’re building: too many people start with trying to make the latest, greatest technology and never get beyond that. Try thinking about what you’d like humans to be able to do in the future, then build a technological solution to it. You’ve been given extraordinary talents, use them to build a better world.
Get involved in research early if you think it’s something you might be interested in. Close contact with top-notch professors is one of Yale CS’s real highlights.
Start your problem sets early! Don’t necessarily start with coding; instead, sketch out the structure of your program and make sure you account for edge cases or unusual “flags” early on. They will come back to bite you otherwise.
Don’t be afraid to ask Stan for advice. He can seem scary at first but is an excellent teacher and very willing to help his students.
Use the Zoo and the people there. People are more willing to help than you might expect. You will learn a lot even by hanging around the Zoo and not working!
You will do better and more efficient work after sleeping for a few hours. Don’t try to stay up all night to get something done. Take care of yourself!
Be discerning about where you choose to take your career. Yale CS grads are sought after not only for their skill set, but also for their ability to think, plan and lead. Don’t take a job just for the money.
Only take classes with good professors (you know who they are).
For the women out there: Don’t be intimidated by the gender imbalance in the CS major! You have every right to be here. Become friendly with the other female CS majors. Go to women’s CS events - they are powerful even if they seem cheesy. Don’t be afraid to ask questions.
Only participate in extracurriculars that feel like a valuable use of your time. Don’t be afraid to quit the ones that aren’t.
Allow yourself to have FREE TIME to reflect and wonder.
Work efficiently and don’t repeat yourself.
Learn how to use the terminal effectively; become familiar with Linux utilities; start using emacs or vim.
Mentoring is a valued skill, wherever you end up. Help other students in the Zoo or apply to be a peer tutor.
When choosing projects for classes, pick something you can become passionate about. You’ll find yourself wanting to keep working after the deadline. Put these projects online somewhere to start building your portfolio.
As someone said last year: “Spend as [much | little] time in the Zoo as possible.” Some people spend all their time in the Zoo and find it incredibly helpful; others work remotely and are just as successful. Both ways are valid.
Don’t overload yourself with too many Computer Science credits in a semester. CS classes are usually more work, and you will burn yourself out. Instead, take some time to enjoy other academic interests, or take some of the “can’t miss” classes at Yale.
Make friends with other CS majors early. It helps in the core classes when you’re all doing a problem set together, and it helps to know people in the smaller elective classes later on. Plus it can help you down the road to know people working at a host of startups/ big tech companies.
One bad problem set or grade does not mean you are bad at a subject. If you made it to Yale, you’re not stupid, no matter how you may feel at any moment.
Know when to cut your losses. If it takes you thirty hours a problem set in 223/323 and you hate it, CS may not be the area for you. If it takes you thirty hours a problem set in 223/323 and you still like it, stick it out.
Make sure you’re learning, but also take time to enjoy where you are.
Don’t be intimidated if you came into the major with no background in CS. There are lots of people who do it, and you’ll learn it too.
Work in the Zoo. Especially for 201, 223, and 323. It’s a great way to get to know other CS majors, and you’ll find lots of people willing to help answer your questions.
If you start your problem sets early, they will take less time and they won’t take over your life (usually).
Make sure you have your senior project well defined at the beginning of the semester.
Your main focus as an undergrad should be learning, not getting good grades or networking. In fact, grades are largely irrelevant unless you intend to go to grad school.
Learn a functional programming language (Haskell or ML) before you graduate. Even if you never use it again, you will become a better programmer.
If you want to go to graduate school, begin doing research as early as you can. Even if you end up spending a semester in a subject that you don’t eventually pursue, you will have a better grasp of how and where to find research opportunities as well as a better understanding of what it’s like to be a graduate student.
If you are looking to go into industry, spend some time to truly understand many of the concepts in 202/223/365 even if you didn’t do particularly well in the classes themselves. Other useful resources include popular algorithm books as well as classes outside of the major based heavily on critical thinking, such as ECON 159 or MATH 241. The ability to get through the CS core combined with a bit of spare time spent browsing common interview questions all but guarantees employment after graduation.
Don’t live in the Zoo. Enjoy the wealth of opportunities Yale presents to you and do not limit yourself during your time here as an undergraduate. For the majority, the most formative and memorable experiences here will not be spent in front of a computer but rather in the company of your fellow students.
Get involved in scientific research as soon as possible. Don’t wait until senior year. Building relationships with professors and pushing the boundaries of human knowledge are two of the most satisfying things I have done at Yale.
At Yale there are thousands of research opportunities, and your coding skills are desperately needed by just about everyone. Just because you are majoring in computer science does not mean you have to do research within the department. Do you love birds? Find an ornithologist! Interested in galaxies? Get involved in computational cosmology! Want to study *real* neural networks? Work with computational neuroscientists in the medical school!
I recommend doing two things. First, find a project that is so exciting that it makes you want to procrastinate on all your other work so that you can fully immerse yourself in it. Second, find an advisor who is excited to have you on their team.
At times the incredible rigor of computer science courses left me feeling discouraged and unintelligent. Working with researchers in other departments provided me much-needed perspective. I discovered that many seasoned scientists find the bread and butter stuff of our department—algorithms, modeling and programming—to be mysterious and difficult. When I started working in a neuroscience lab my insecurities vanished as I realized that the major had given me a strong theoretical foundation that made it possible for me to make big contributions.
Go to the Zoo! At least at the beginning. I know everyone says this but it’s really so important. You become a better programmer just being there.
Get out of the Zoo when you need to! At a certain point, you will probably need to work alone in your own space. Get your SSH set up before you need it so it’s there when you do.
Coding is fun when you have the time, and terrible when you’re at deadline. Keep that in mind.
Challenge yourself in the courses that you take.
Talk to the Professors early on. You’ll find that there is a lot of interesting things going on, and Yale professors often have the most interesting things to say
Figure out what makes sense for you; it might diverge from the average or expected path for a CS student at Yale and that’s absolutely okay.
Work on side projects, but seek out ones where you can learn from someone more experienced than yourself, tackle a truly challenging problem, etc. Pass on the ones that won’t teach you anything interesting, especially if they come in emails like this).
There’s a significant range in the difficulty of the major, depending on which electives you choose to take. Read the course reviews, talk to upperclassmen, and plan accordingly.
Start work early! And if you have trouble, don’t be afraid to take a break and have another look another day.
Take the time to meet other CS majors, graduate students, and professors because they can be incredibly helpful.
Most importantly, do what you love and make the most of Yale!
Do some research early on and figure out if you prefer that to industry. Knowing whether you want to go to grad school or work at a company will really help you figure out where you should focus your efforts.
Take a balanced course load, each semester. You want to dedicate enough time to each of your CS courses, but also explore everything that Yale has to offer.
Start everything early. You’ll just manage to finish on time.
Working in the Zoo is a great way to meet people, so try to go there from time to time.
Go beyond your coursework and try to take on side projects. Bonus points for taking what you learned and translating them into practical applications.
Don’t neglect your grades, but don’t optimize for them either.
Practice for your interviews!
Work in the Zoo. You don’t realize how much less you will be distracted there, as well as how much help you can get.
Keep goals for yourself throughout a week or two when you’re given a problem set. For some classes/assignments, these will be more obvious, so make sure to allow yourself more time for those which are ambiguous.
Assume that there aren’t late days until you’re late.
Ask your TAs/prof for advice. E-mail questions to anyone who could help, even if you think the problem is a stupid bug. We all make the simplest mistakes, but every once in a while, you might bring up a point that would help clarify a problem for everyone.
Learn how to use auxillary tools well, such as Makefiles, valgrind, etc.
WRITE CLEAN CODE. Make helpful print statements and don’t take them out unless you’re 100% positive a piece of code is correct. Comment as much as possible, and stick to a certain coding convention style.
Always be conscious of your efficiency curve.
I’ll be the billionth person to say it: Start your work early. That way you won’t have to pull an all-nighter in the Zoo. If you are going to be in the Zoo all night, remember to bring healthy snacks and a toothbrush (Dental Hygiene!).
Don’t talk in the quiet Zoo, unless you’re the only ones there.
Take some time to explore and gain experience in computer science research, entrepreneurship, and software development before your senior year.
Do your senior project in the fall, if possible.
Schedule time to exercise at least a few times a week. Don’t schedule every minute of every day. Leave some time each week for spontaneity.
Get to know the other kids in your classes—anyone making it through 323 is already a cool cat. Tinker with things on the side—it’s sometimes really cool to see where the theory you learn in class can apply. Have fun with the major—and use more em dashes in your writing.