Note: this post is aimed mostly at Harvard students.
So you took Harvard’s introductory computer science class, CS50. (Maybe you were a regular at my section or met me at office hours.) You learned a lot, you enjoyed it, and you want to continue exploring computer science. Maybe you want to concentrate in CS, get a minor, get an internship at a tech company, or better understand how computers are going to take over the world.
But CS is a huge field, and with just one course under your belt, it’s difficult to really break into it.
So what next?
Take more courses (CS51)
CS51, Harvard’s second introduction to computer science, is the natural next step. I’ve found that Harvard’s computer science courses are, by and large, very different than CS50; that course isn’t representative of CS at Harvard.
CS51 is much more like the other CS courses at Harvard than is CS50: more theoretical, less focused on programming, more serious, less flash. So don’t write off CS if you didn’t like CS50; check out CS51 to see what CS is really like. On the flip side, don’t commit entirely to CS if you liked CS50. In other words, if you’re at all considering computer science, check out CS51.
CS51 teaches functional programming, a different style of programming than what you’ve learned in CS50, which is called imperative programming. Functional programming has been surging in popularity nowadays, and I’ve found that learning it makes you a much more intelligent computer scientist. CS51 is definitely worth it if you want to become a better computer scientist or software engineer!
Here are a few resources I’ve found that’ll help you prepare for CS51 and OCaml:
– Real world OCaml, which was CS51’s textbook last year (might change this year, as the course is under new leadership.)
– Setting up OCaml
– Basics of OCaml
– Princeton’s functional programming/OCaml course
– 99 practice problems in OCaml
By the way, if you’re going to start coding in OCaml (or any other language, for that matter), you’ll need a good text editor — I recommend Atom, a free and insanely popular text editor that’s been exploding in popularity recently. Classes like CS51 will often recommend their own editor, so feel free to give theirs a try too.
Learn new languages
Here are a couple useful resources to learn the other big programming languages:
– Java, arguably the most popular language on the planet. Essential for Android development. And, in my experience, the only language you should use for programming interviews. (The famous “Cracking the Coding Interview” book, which I’ll mention below, uses Java for all its sample problems and solutions.) Here’s a crash course in Java, and here’s a higher-quality (though much longer) course.
– Python, another vital language for your toolbelt. Essential for scientific programming and some web backend stuff. Here’s a crash course in Python, and here’s a more-focused (though shorter) tutorial.
– Practice your Java and Python coding. Covers everything from loops to advanced topics like recursive backtracking.
Join CS clubs
There are a lot of up-and-coming computer science clubs at Harvard where you can put your newfound knowledge to work building impactful projects, meet fascinating (and really friendly) computer science students, and learn what’s possible with computer science. I’m a big fan of using computer science for social impact, so I’ll tell you about a few clubs I’ve been involved with to that end.
The Digital Literacy Project is a computer science and community service club that focuses on applying tech to education. You can teach computer science to underserved middle school students, which is a great way to cement your CS skills, give back to the community, and empower the next generation of computer scientists. We’ve also started term-time projects through which you can build educational technology software — it’s shaping up to be awesome.
Developers 4 Development is a computer science and international development club. You can join term-time projects to build software for nonprofits around the world, or even go abroad to build software for international nonprofits through our Tech in the World program. (I’m actually on this trip as I’m writing this post; follow along with my progress!)
This last one isn’t really a club, but you can get involved with CS50 as a staff member next year! Being a Teaching Fellow (TF) lets you meet some amazing CS students, both current (other TFs) and future (students), solidify your understanding of technology, and have a lot of fun. Let me know if you’re interested and I can connect you!
Get an internship
Software engineering affords you opportunities to work at everything from rapidly-growing startups to famous tech giants, build products that your friends use and that can change the world, and have lots of fun. Internships are a great way to see if software engineering — and, more generally, computer science — are for you. So I strongly recommend looking into software engineering internships now that you’ve started your foray into computer science!
I’ll write a separate post on this topic since it isn’t quite as Harvard-specific, but here are a few Harvard-specific resources you can check out:
– Career fairs, like Harvard’s startup fair every February, are great ways to meet recruiters.
– Harvard’s OCS. You’ll first need to come in for a 10-minute drop-in advising session where a career advisor will review your resume with you. After that, you can schedule longer meetings with an advisor. I’ve talked to Heather Law a lot and strongly recommend her.
– The Harvard Computer Society holds lots of great job events, publicizes job opportunities, and has lots of connections in tech. Subscribe to their mailing list and attend their events!
Getting a software engineering internship after just one CS class is going to be difficult, but if you put in the extra work, you’ll be in great shape — better than you might expect.
Just taking CS50 was a great start down the path toward becoming a computer scientist. By investing in further courses, learning new languages, joining CS clubs, and trying out tech internships, I think you’ll be setting yourself up for success. You might just surprise yourself! Remember me when you solve P=NP or become the next Gates or Zuckerberg (both of whom, of course, did CS at Harvard.)
Feel free to contact me if you have any questions about computer science, computer science at Harvard, or life in general!