Programming (and other) Languages CS Majors Should Learn

The page is currently in very rough form.

Although the philosophical community is not agreed on Putnam's claim that the natural language you speak affects your thoughts, it's clear that the programming language you use affects how you solve problems. (The traditional aphorism for this view is If the only tool you have is a hammer, everything looks like a nail.) Strong computer science students therefore regularly look to learn new languages. This page provides a quick list of programming languages that SamR thinks you should learn.

Essentials

Scheme (or other dialect of Lisp). The functional paradigm is an incredibly powerful approach to expressing algorithms. The abilities to design your own control structures and to use higher-order techniques empowers programmers in many ways. The functional paradigm is also increasingly relevant. For example, Amazon and Google use map-reduce as a core technique in much of their work with large data sets, and most modern languages now seem to include a functional component. As importantly, Scheme has a syntax that easily lets you treat the same expression as either data or code. Being able to switch between models is a transformative way to think about programs.

C. Being able to program in C means that you can start to approach your code at a level close to the machine - you can't program well in C unless you understand memory arrangement. There have been some arguments that students no longer need to handle things at this level, and you can clearly write programs more quickly if you use a higher-level language. Nonetheless, understanding pointers, data representation, and more is useful. C's syntax also influences a large number of languages.

Java.

Postscript. Postscript is a stack-based language (think of reverse Polish notation on steroids) with a focus on making images. You don't need deep understanding of Postscript. But working in a language with this model (and with a fairly simple syntax) can really transform your thinking. Plus, you get to make cool images.

Python or Ruby. Some modern scripting language.

HTML and CSS. These are not programming languages; they are markup languages. But you should know at least one markup language. Knowing HTML also lets you do quick Web consulting jobs. (Yeah, that's a practical issue.)

Additional

TeX or LaTeX. Like HTML, TeX and LaTex are markup languages, not programming languages.

Perl