How to Navigate Computer Science Courses At Dartmouth
In June of 2015, I graduated with a degree in computer science, modified with digital arts, and a minor in psychology. In my time at and after Dartmouth, I’ve been asked many times for some guidance in which CS classes to take to make the most of a computer science education at this small liberal arts, finance-focused school. The following is my slightly dated advice, which you should take with a tsp of salt, seeing as how I very accidentally wandered into COSC 1 sophomore fall and failed my first exam.
If you’re a freshman, take CS 1. Just do it, regardless of your prior experience and performance in computer science, science, or math, your fear of technology, and especially your fear of how hard it will be a.k.a. how much it will interfere with your attendance of Bissell pre-games. It will not be easy, but you’re a fresh freshman so you still know how to work hard. I heard the phrase I wish I took CS 1 earlier many many times come senior year, when your priorities are different and your time for academic exploration greatly dwindles. NRO it if you’re really worried--trust me, you are very unlikely to ever use all of your NRs.
If you do sign up for CS 1 freshman year, great! If not, but you are a sophomore or a junior or a senior, great! If not at all, then why are you reading this? Try to snag Hany Farid or Devin Balkcom, though all the CS 1 profs are generally good. Writing 5 and your Seminar will not be terribly hard classes, and in fact may be the most familiar to your high school classes (because ‘shmen + smaller class sizes).
In general, expect the TAS code and problem set heavy classes to be tough. Even if you are a genius, they take some brain power so complement CS classes with distribs or courses of interests. Mental health is good.
Here is a link of upcoming courses. These are the major reqs, when you get to thinking about it. Below are notes based on my own experiences from 2012-2015, and metadata from fellow classmates.
CS 1 Intro
Difficulty: Like doing the Ledyard challenge. Depends on how fit, sober, and comfortable with being naked / arrested you are and how many degrees below 0 it is outside (i.e. prior experience).
Language: Python
Pros: It’s really cool to learn about what “computer science” is, what it can do, and how you can make real things on your computer. Python is also an exceptionally useful language in the working world.
Cons: Time consuming and steep learning curve. Johnny “I’ve programmed since I was 3 years old” sitting in the front of class asking those horrible questions that no one, including the prof, knows or cares about. Large class sizes due to small department, which may make it harder to get 1:1 time with profs, but there will be student TAs that will have open lab hours. Or you can make friends with that cute classmate of yours because you need so much “extra help” that you end up doing your problem sets together until midnight. And by doing problem sets until midnight I mean DFMO’ing on the dance floor of the Heorot highlighter party.
CS 10 Object-Oriented Programming
Difficulty: Like trying to run Rip Road the Sunday morning of Green Key: extremely rewarding, but it might just kill you.
Language: Java
Pros: You learn and re-learn and implement some real fundamental computer science topics in this class, where you also now have a background understanding of programming.
Cons: The jump from Python to Java is a little daunting at first, plus some of the projects are very difficult to accomplish if you start the night before and or don’t ever go to lab hours and or class. If you finish CS 10 and still like / love programming, this is good.
CS 30 Discrete Mathematics
Difficulty: Like giving birth to 8 children at once.
Language: math, proofs
Pros: I don’t really know. Not many people know. It unlocks Algorithms since it’s a prereq for 31. Well, it does get your mind thinking in more abstract mathematical ways, but algorithms are definitely more useful in the context of computer science.
Cons: Just very complicated and abstract stuff, plus weekly problem sets and exams that you just constantly need to be on your A game to do well on. Probably the only saving grace would be having Prasad Jayanti as your prof, but even then it’s tough. Get this one out of your way if you’re going full CS major or minor. If you don’t need to take this course, don’t. Unless you are really considering taking Algorithms, which you really should + will make taking this course worth it, but all depending on how much time you have left.
CS 31 Algorithms
Difficulty: Like getting to Foco and realizing you left your ID card in your room, but you live in the River and its -17 degrees out and you chose not to wear socks with your Bean boots, but all you want are those foco chicken nuggets so you walk back to your room, get your card, walk back to foco, and you get those damn chicken nuggets. Also frostbite.
Language: math
Pros: This is a challenging course, but such a fundamental in any computer science education that it’s absolutely worth taking. Plus, algorithms, particularly algorithmic thinking in computer science, really really really help with code interviews--try to take this before senior year (FYI: which involves taking 30 as well).
Cons: Difficult, but definitely not impossible. Weekly problem sets that you should get started early on. It’s math, but it’s computer science math, so you have a framework of thinking to back up the work you need to do.
CS 50 Software Design & Implementation
Difficulty: Like chugging a 40 in under 40 seconds.
Language: C, UNIX, Bash
Pros: No other project you complete in your CS career at Dartmouth will make you feel more like a bad b**** than your tiny crawler project, written in m****f***** C. And you can talk about it, forever, to whomever may care. 50 also unlocks most upper level CS courses, which get very interesting and way less painful.
Cons: This will be the first time for many opening up their terminals, writing shell scripts, and coding in C. You have 1 week to learn this all, god speed, because then comes the hefty weekly project. There is no more hand holding in this course, as there will likely be 1 professor and 1 grad school TA that will not have any time to be a TA, and plus there are a million ways to implement / screw up in C. Be prepared to devote many many nights a week to this course. But once you make it through survive this course, it’s smooth sailing for the remainder of your programming career at Dartmouth, and kind of in life.
CS 51 Architecture
Difficulty: Like getting stir fry from Collis, during 12s.
Language: Machine Code (LC3), Assembly, C
Pros: I’m definitely biased here but I thought it was super cool to finally look under the hood of everything and see the very very fundamentals of how a computer works, and write lines of ridiculous TRAP and ADD functions that make simple loops and operations. Also building circuits on Logisim was pretty cool, the more hands on (but same idea) version of this course is CS 56 Digital Electronics, where you build up to hardware rather than to C programming.
Cons: A lot of CS majors will take this class sophomore summer, since its one of the ones offered, so it’s a bummer to actually have to be functional and think and study for this course during __X term. However, the workload is quite manageable.
CS 60 Networks
Difficulty: The president’s lawn Dartmouth 7: hard, from what I hear, but doable.
Language: idk
Info: Okay I never took this course because it never worked with my schedule but I really wish I did because knowing about Networking (the WWW!) is incredibly important in real life, plus it’s really rad and I wish I knew more about it in depth.
CS 61 Database Systems
Difficulty: The 50 yard line Dartmouth 7: pretty easy, if the gate’s open. If it’s not open it’s not worth getting some gruesome injury while trying to climb the fence that you then have to tourniquet with your gross college beer hands while waiting for EMS to roll up.
Language: SQL
Info: Okay, also never got the chance to take this course due to scheduling but from CS major friends who did, and working as a software engineer IRL, knowing at least the basics of how databases work and how to write SQL queries won’t go out of style anytime soon. Websites and apps can often be considered glorified database interfaces.
Pros: Very useful knowledge of how/where data is stored and accessed. Useful foundational industry knowledge as well.
Cons: You can get by this and do fine in the real world, you’ll just need to play catchup on your own time.
CS 65 Smartphone Programming (Android)
Difficulty: Like the final day of trips. You’ve already been through two smelly days, but this is your final day and the Lodj is in sight, and hell, you may even do the sunrise hike.
Language: Java
Pros: The only actual CS class where everything you learn about languages and algorithms comes to fruition in tangible, even usable apps.
Cons: Subject to change, but can be a disorganized class, especially with changing android versions all the time. Also, not offered for iOS.
CS 77 Graphics
Difficulty: Sorority rush, in the winter.
Language: C++
Pros: Although the math may be daunting at first, it’s computer science math where operators are pre-defined and equations can be referenced. Graphical bugs and mistakes are phenomenal works of art and finishing the assignments (rendering, animations, etc.) is extremely rewarding.
Cons: This is definitely a specific and quite different track of programming that won’t really be used unless you go directly into some graphical development or fabrication career, but still cool to know.
CS 89, varies, Computational Fabrication encouraged
Difficulty: Playing on an IM softball team.
Language: C++, various
Pros: At this point you’ve probably been through quite a few of the pre-requisite, soul draining CS classes. Electives such as these are your reward. Computational fabrication--i.e. 3D printing and laser cutting--is an endlessly interesting and emerging field of study, and this class is definitely a hands-on, in the best way, learning experience that allows for you to make a direct impact on the community at large.
Cons: Though not the most difficult class, it’s definitely really time draining. Requires lots of outside-class time inside labs babysitting 3D prints while your friends get nice healthy tans in the sun.
So how does a computer science degree from a liberal arts school help you in real life?
Great question. You’re not at MIT, you’re not at Carnegie Mellon. But you are at Dartmouth, which probably means you’re well-rounded in terms of being encouraged and required to take classes like Native American Studies in addition to your major. Which is pretty rad.
Honestly, the following classes are all you really need (and more) to be a pretty successful software engineer, if that’s what you want. The breakdown of specific core classes and how they will help you is as follows:
CS 1 & 10: ace the job interview
CS 30 & 31: ace the job interview
CS 51: dig deeper, become a better bug fixer
Not too bad. With a CS minor, you can do a lot. At the least, as computers become more and more engrained in our everyday life, the basic knowledge you can take away from Dartmouth CS classes will submerge you in the know of computer science. Plus, don’t you want to stay as with it as little Rosie-the-7-month-old-with-the-iPad your friend babysits on week nights?