Cornell Computer Science Wikia

CS 3110 - Data Structures and Functional Programming

70pages on
this wiki
Add New Page
Comments3 Share

Ad blocker interference detected!

Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

General Information Edit

The third level programming course in the CS major. Features a new programming language which is probably different than anything you've done before: OCaml. Considered by some to be the first "weeder" course - while the course staff doesn't intend this, it can be true, since the amount of work is greater than you might have seen in prior courses.

Prerequisites Edit

CS 2110/CS 2112, coreq CS 2800

Topics Covered Edit

  • OCaml and functional programming concepts
    • Pattern matching
    • Currying
    • Higher-order functions
    • Anonymous functions
    • Polymorphism
    • Models of evaluation
    • Functors
    • Mutability
  • Logic
  • Concurrency
  • Data Structures
  • Analysis of algorithms
  • Random topics towards the end, at discretion of professor
    • Locality
    • Streams
    • B-Trees
    • Lazy Evaluation
    • Splay Trees
    • Type inference
    • Lambda Calculus

Workload Edit

Heavy. Six increasingly time consuming projects, two prelims, and a final. The sixth project is generally developing a fully-fledged game with several team members.

General Advice Edit

Take it. You have to.

Ocaml. It's fun.

3110 has a reputation of being more difficult than it really is. Don't be scared of it, but make sure to not fall behind on the course material.

Do well in the exams and you will be fine... Projects are time consuming and fun, but won't affect the final grade that much...

If you did well in the class, enjoyed the material, and are willing to put in a significant amount of time to help with the course, consider asking if you can TA this course. It has a very unique culture among the course staff, and you can meet some cool CS majors.

Start on the projects early - if nothing else, thinking about how you're going to layout your solution.

Don't be too intimidated by OCaml. It's scary at first, but when you get to the third or fourth assignment, you'll be able to look back and do the first assignment in about 15 minutes. The first half of this course is learning the language, and everyone is learning the language.

Take this class early in your CS career - it introduces a new paradigm of thinking about computational problems which can prove invaluable.

Yes, it has a reputation. And it's not an easy course. But you'll get so much out of it. You aren't just going to learn OCaml. You're going to learn how to learn languages.

Testimonials Edit

Probably the best class I've taken so far. Functional programming will blow your mind. And personally, I didn't think it was all that hard.

CS3110 is like the toad you kiss unwillingly and then it turns into a beautiful princess who you marry and live happily ever after. Once it clicks, you'll love it.


3110 is the gateway to becoming a theory junkie. It creates enough doubt and internal conflict to make you question every assumption you've ever made about computer science and programming (Real programmers use assembly? Fuck that, they've obviously never done any control flow acrobatics with all of the different recursion schemes out there). At the same time it's just illuminative and rewarding enough to trap you into a vicious love-hate roller coaster with OCaml. 
It's probably kind of like LSD, in that you experience the same sense of ego death when it's 3am in the morning and you find yourself shouting random outbursts in CSUG about how you're "one with the while loop" and how you finally understand the true essence of all programs as some physical geometric shape that sits at the edge of a converging sequence of ever more refined and beautiful surfaces blessed by the one and only based god himself. You are literally every program and simultaneously not a program all at once. Holy shit, was that zero and that one so perfect before? Did that binary tree just become the sound of yellow? (Sidenote: If you can't tell already, I have no fucking idea what a trip on LSD is like)

If you're up for a healthy dose of stockholm syndrome, 3110 and another 3 - 10 years dabbling in the "pure" world is probably a great experience. I'll have to admit it though, once you enter the ivory tower, you'll have a rude re-awakening once you decide to reintegrate into the mainstream. There are likely many positive correlations between "have taken 3110" and "did well on regular expression/algo gymnastic/proving P = NP problems on some interview for Unicorn Startup." (I'd argue however that the majority of that correlation comes from the fact that you went to a brand school at just the right time to do an internship) 

However, the bulk of the reward and growth that you will reap from this course comes from your own personal satisfaction. 3110 isn't meant to be a practical course. I use OCaml at work and the only practical benefit I've gotten out of 3110 is the fact that it forced me to sludge through some tutorials on OCaml back in Cornell... so that I have a vague recollection of which tutorials to avoid when I need to relearn the language for the n^{th} time (that and LaTeX). 

However, what 3110 and the whole theory heavy focus that Cornell places on its computer science core curriculum lack is more than made up for by the fact that these courses have the propensity to make you question everything you've believed about computing and programming. It gives the student a taste and an appreciation for the esoteric and the arcane. Why do X in this simple and robust way when you can do it using 11 levels of abstractions just to justify the fact that you've somehow reduced radix base conversion into jigsaw puzzles []?

Which is why it's totally okay to put it off

-Lee Gao


Past Offerings Edit

Semester Time Professor Median Grade Course Page
Fall 2014 TR 10:10 - 11:00 Michael Clarkson
Fall 2012 TR 10:10 - 11:00 Ramin Zabih B
Fall 2009 TR 10:10 - 11:00 Dexter Kozen B

Also on Fandom

Random Wiki