Why We Use Racket
You probably hadn't heard of the Racket programming language before you enrolled at NU, and you might well wonder why we're using such an obscure programming language in this course.
The first thing you need to understand is that CS 5010 is not about programming in Racket, or in any other specific language.
Program Design Paradigms
CS 5010 is about program design.
As technology changes, functional and object-oriented paradigms have been displacing the imperative programming paradigm most of you were taught as undergraduates. The imperative paradigm remains relevant, and we will discuss its uses during the second half of the semester, but we focus on the functional and object-oriented paradigms because most incoming MS students have less experience with those paradigms, and because those paradigms are becoming more important in industry.
To teach these program design paradigms effectively, we need a multi-paradigm language that is easy to learn quickly and provides good support for educational applications of the language.
Popularity versus Love
Those requirements rule out many of the languages that remain, for the moment, most popular in industry. For this course, it would be better to use one of the eight languages that, according to a survey conducted by Stack Overflow, are most loved by software developers: Rust, Swift, F#, Scala, Go, Clojure, React, Haskell.
Most of those well-loved languages are fairly new, and have not had time to accumulate the pedagogical tools we rely upon in this course.
Racket is quite similar to Clojure. Like F#, Scala, Clojure, and Haskell, Racket offers excellent support for the functional paradigm. Unlike the most-loved languages in Stack Overflow's survey, Racket was designed for educational use and offers pedagogical tools and course materials that have benefited from decades of development.
That's why we use Racket in this course.