For non-programmers: you don't need to know 5 programming languages. Knowing one is probably enough, and I would suggest Python. Then you may need to know things like Visual Basic for Applications or JavaScript. For programmers, different languages are useful as a way to learn paradigms. I would suggest: A low-level procedural language such as C. It helps you understand the machine, and there is a very valuable body of code written in C you will want to study at some point. C is also the language of Unix, and understanding Unix may be more important than knowing any programming language at all. A Lisp, if possible a Scheme like Racket. It will introduce you to fundamental concepts like dynamism and homoiconicity. Study how to implement Lisp in Lisp, then study how to implement Lisp in C. This will teach you about the relationship between the teoretical part of CS (lambda calculus) and practice (how real computers work). It will also help you understand the power of well-chosen simple mechanisms. A language to get real work done. Depending on your field, this may be Python, Java, JavaScript, Objective C... This is the language you use at work. Something solid, dependable, probably with a reasonable amount of libraries you can leverage to get things done. A concatenative language, probably some variant of Forth. Concatenative programming is a paradigm that is not known well enough and yet embodies several fundamental concepts of CS. Although it has influenced fewer languages than Lisp, it is the same kind of simple language that opens your eyes. The last slot depends on what you want to do. Haskell will teach you about types, Erlang about distribution, Self or Smalltalk about OOP, Prolog about Logic Programming... I cannot write an answer like that without mentioning Lua. I didn't include in the "top 5'" list but you should still have a look at it, as a language that is extremely well designed, simple, fast...