The Class of 2012 was asked to pass along some of the insights they gained during their years as a major. Here are their responses (lightly edited):
You cannot only rely on class assignments to become a strong programmer. Create small projects for yourself that force you to learn different languages and understand different platforms.
Figure out what your post-graduation goal is as early as you can, and focus your efforts on achieving that goal (e.g., working at Google or Facebook, working at a start-up, going to grad school, etc.). If you devote as much time to pursuing this goal as you devote to schoolwork (they are not the same thing), you will definitely be successful in achieving your goal.
Work in the Zoo. There you will find some of the smartest and most helpful people in all of Yale.
Program outside of class (Web, applications for Beinecke, ANYTHING). If you love it, it will not feel like a chore and you will learn more about the practical side of programming. If you find you don’t like it, start looking for post-graduation alternatives to software development.
Try peer tutoring or being a TA. Even if you don’t think you’d be good at it, it’s a great opportunity to learn what it’s like to mentor and give back to those who are looking to join our field.
Learn about graphic design. If you have even the slightest interest in joining a startup, graphic design is 99% of the battle, and being able to speak with design sensibilities will earn you a lot of respect.
Try a research project. Academic research is far different than what you experience inside of class, so branching out on a limb may help you discover something you never knew you would love or completely eliminate a path in life. Both are valuable things.
LOVE YOUR TIME AT YALE. This place moves very quickly and it is very easy to lose track of things. Four years literally moves by in the blink of an eye and you never know when you’re going to get the chance to be surrounded by such bright, energetic, and happy individuals again.
I would consider the following CS electives very time-consuming or difficult. I would take at most one of the following classes in one semester and I would fill out that semester with some easier classes.
Start your programming assignments early! You’ll hear this a thousand times, and it’s true. Even if you’re busy, force yourself to start coding early. It’s only when you start writing code that you start to realize all the complexities involved and a million design questions pop into your head about how to implement this or whether the data structure you’re using is appropriate.
Strive for understanding, not for finishing your assignments as fast as possible. One of the most interesting parts of CS for me was learning about various algorithms, data structures, and system architectures in detail and really thinking about and trying to understand how they work. A deep understanding of how these fundamentals work will give you a solid foundation for the rest of your career.
Looking for a good internship? Apply to lots of companies and do many interviews for practice. After a while, you get used to the kind of algorithmic and coding questions they ask you. Write a summary of the interview right after you’ve done one, figure out any questions you got stumped on, and look up any concepts you didn’t know. Use these interview summaries to prepare and warm-up for future interviews.
Try to start early on research if you think you may be interested in graduate school. Hang out in the Zoo. Work on projects with people outside of class. Take linear algebra early on—it’s extremely useful. Don’t stress to much about you first two summers. Try to get an internship or research junior year, but the first two years can be a great time to try something new/take some time to rest.
Work in the Zoo! I didn’t at all for my first couple of years and really missed out. Problem sets are much more bearable when you have a bunch of other majors to bounce ideas off of and commiserate with. It’s a also a lot of fun and a great way to meet people in the major across class years.
Take EENG 202 (Communications, Computation, and Control), even if you’re not thinking about EECS! It’s an incredibly well taught class - you’ll learn about signal sampling, Fourier transforms, convolution, compression, and tons more. The topics covered will pop up in you education over and over again, but even if they don’t, they’re pretty fundamental to modern technology. Definitely worth knowing.
If you’re interested in tech startups and want to learn about app/web development, just jump on a project, even if you have literally no experience. With a general CS background, you’ll learn quickly. If you don’t know anyone working on a startup, don’t feel bad about emailing students you haven’t met who already has a project going—there’s almost a 100% chance they’ll welcome any sort of help.
Don’t waste time in extracurriculars you’re not actually interested in. You might as well be working on your own projects—they’re just as good for the resume, more gratifying, and you’ll probably learn more.
The Great Wall is the best kept secret of Whitney Avenue. It’s a Chinese market/restaurant with an incredibly tasty, cheap take out buffet. If you’re working in the Zoo and miss dining hall hours, this place is simply the best.
Your most valuable experiences at Yale will be outside the classroom.
Embrace randomness, do exciting stuff, and the universe will unfold as it should. No one at Yale starves under a bridge. If you’re not excited to get out of bed every morning, you’re doing it wrong.
Focus on doing what you love. Computer Science is such a huge field that you really can make it whatever you want. Work in the robotics lab, do algorithmic research, or do web development on the side. If you really have something you want to learn, do an independent project. It’s a great excuse to get a credit for learning something new and interesting.
Do 490 in the fall. It just makes spring so much more enjoyable. Especially since you will probably be doing applications or interviews.
Find a friend, and do projects together. I was lucky enough to find someone I worked very well with, and that made every single class and project we did together more enjoyable.
Be proactive. CS won’t teach you the skills you need to do anything truly useful in the real-world. Academia excepted, you should take your studies outside the classroom and work on your own. Contribute to open-source projects, work for a startup you are passionate about, or just learn a language you haven’t had a reason to before. 80% of my Yale accomplishments and the reasons I had a lot of awesome job opportunities came from my work outside of class.
In the end, do what you love and make the major and Yale fit you.
Take classes because you want to learn, not to get a good grade. Try to develop an attitude of curiosity.
Help out other CS majors whenever you get a chance and foster a culture of cooperation in the Zoo; everyone benefits from that.
For 201, 223 and 323 seek out the TAs, go to office hours and ask questions. Read tech news and blogs (Hacker News, Gigaom, etc.) to see what kind of cool things people are building.
Talk about projects with friends.
Start assignments early, and work on them often. If you do this, you won’t have to spend late nights at the Zoo.
Ask the TA or instructors for help if you don’t understand class material.
Most importantly, don’t be afraid to approach professors or TA’s for help on problem sets, difficult topics in class, etc. Procrastinating on problem sets or programming projects is a very bad idea. Make sure you start programming problem sets as soon as they are assigned. This will give you ample time to complete the assignment, and also to ask for help in the event that you get stuck. Try to avoid programming for extended periods of time like 4/5+ hours, I found that doing so usually caused more problems than I’d solved.
Start working on your senior project in September/January. Thinking about working or thinking about your approach does not count.
If you are so foolish as to wait until the last minute, at least take a few minutes a day to mentally work through your ideas. At least then you’ll be starting from somewhere.
If you can’t trace a bug, make an algorithm work, or find insight into a proof, go to bed and work on it when you wake up.
Have pet projects! The most rewarding work you do will be outside the classroom, whether you’re building a startup, contributing to open-source, or just coding for your own amusement. Pet projects help you figure out what motivates you, and that is SUPER important for finding the right job and generally being a happy person.
Start assignments early … and finish them early, too. (Well begun is half done, but don’t forget about the other half.)
As someone said last year: “Spend as ___ time in the Zoo as possible.” Some people spend all their time in the Zoo and find it incredibly helpful; others spend zero time in the Zoo and are just as successful. Both ways are valid.
Learn how to use the Zoo early.
Work at the zoo and befriend other majors / grad students / professors.
Start your problem sets early. Start your problem sets early. Start your problem sets early.
Grades matter less for industry; instead, know your algorithms and data structures well if you want to get a good job.
Build and launch stuff on the side; learn new languages explore new technologies. Do something cool with your technical skills.
Take advantage of the very tight knit community—get to know your peers and your professors.