“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.” — C.A.R. Hoare, The 1980 ACM Turing Award Lecture
You can also learn more than one langage because they fits domain of excellencies you want to master:
- C low level programming (zmq switched from c++ to C because of error handling) - high level portable language that can bind on libraries (python to avoid hispter mac users using ruby) ; - something for concurrency (Go); - R-project for data treatment; - vanilla JS because mixing LISP difficulties with braces syntax is insanely cool; - PHP and Perl to feel with your guts what a wrong language is (hint: it is all about maintainability); - ASM 68000 because motorola 68000 is the most beautiful mix between a good design and implementation and it will make you truly able to build a consistent mental map of what a computer really is; - Tk because 25 years it still is the most portable way of doing GUI and has inspired everyone; - Forth because it is fun to use postscript as a real programming language; ....