Announcements #

Jan 26th and 28th Lectures
There is no lab on Jan 26th and 28th. Instead, there will be lectures from 10:30-11:45am EST. For those who cannot attend lectures live, the recordings will be made available shortly after the lecture. Lecture will be held via Zoom (Zoom link on Canvas).

Make sure to check the Calendar (DCE Calendar) for the weekly reading assignments.

Description #

CS51 teaches fundamental concepts in the design of computer programs, emphasizing the crucial role of abstraction. The goal of the course is to give students insight into the difference between programming and programming well. One and the same problem can be solved in different ways, and the different solutions can vary along multiple dimensions including correctness, efficiency, readability, scalability, and elegance.

To emphasize the differing approaches to expressing programming solutions, you will learn to program in a variety of paradigms – including imperative (familiar from CS50 but seen here in a more elemental form), functional, and object-oriented. The elegant multi-paradigm programming language OCaml is the ideal language for manifesting these ideas. Important ideas from software engineering and models of computation will inform these different views of programming. You should come out of the course a better programmer in any language, but also a better computational thinker, with a much broader range of tools at your disposal and ability to analyze the quality of programs.