Top Ten Reasons to Learn Racket! It’s like Latin: it gives you insight into other languages derived from racket, like Latin helps you understand French, Italian, Spanish, Portuguese, Romanian, and English. It’s like Latin: you can understand otherwise obscure references, e.g., some Yale students graduate cum laude, some graduate magna cum laude, and some graduate mirabile dictu. (attributed to William Howard Taft, Yale class of 1878) Three reasons: recursion, recursion, recursion. Unlike other high level languages, racket reflects the principles of the von Neumann computer architecture in which data and instructions are syntactically identical. (We will see this when we write assembly language programs for TC-201.) The uniform syntax of data and code in racket makes it easy to extend racket to create new programming languages. (link to https://en.wikipedia.org/wiki/Racket_features#Language_Extensions The uniform syntax of data and code in racket makes it convenient to write programs that can reflect on other programs, which is an appealing notion in artificial intelligence. You can write programs that think about thinking! It looks good on your resume, as a second order effect. Most employers are not looking for people who code in racket, but those who themselves learned racket will appreciate the intellectual challenges you faced and will likely value you more, creating a better work experience. (Story about Francesca and Google.) Learning to program is not like learning a foreign language. It is like learning to drive. It really does not matter that much what kind of car you use to learn to drive. All cars do basically the same thing. At some point in the future, you may land at an airport and rent a car that you have never before driven. However, within a few minutes you will be happily on your way. You need to think of programming languages that way. They all do basically the same thing. You are learning how to steer, accelerate, put on the brakes, and operate the turn signals, windshield washer, and air conditioner. When I was student in the equivalent of CS 201, we learned ALGOL and APL. (Francesca:) We learn C because understanding how the computer manages memory is a fundamental part of CS. In C you can't avoid understanding if things are allocated on the heap or the stack, if you pass things by pointer or by reference. Yes there are languages that let you avoid that, but it's important to have a fundamental understanding of what the language you're using is hiding so you know how to use it well. Similarly understanding how data structures work by building them by hand is important so that you understand the fundamentals of the performance tradeoffs between them. In racket you're learning the fundamentals of recursion, and recursive data structures. Everything in racket is functions, and data structures that are defined in terms of themselves. eg linked lists, and trees. Recursively defined data structures and recursion more generally is fundamental to computer science. Lambda, baby, lambda! Upon completing CS 201, you will be a member of the Order of Lambda!.