notes-computer-programming-programmingLanguagesOpinions

As of this writing, my favorite language to use is Python.

If you are learning to program for the first time, I'd start with Python (http://www.codecademy.com/tracks/python). After that I'd learn Haskell (because Haskell uses a very different and complementary programming paradigm to Python. Warning: Haskell has some difficult/advanced features, but you can avoid them while you are learning, so be sure to find a sufficiently easy tutorial). After that I'd learn C (because C teaches you about low-level implementation stuff such as memory management and arrays and pointers).

If you are writing a website or dealing with text, I'd use Python.

If you are analyzing numeric data (exception: simulations), I'd use Python, with the numpy and scipy libraries. If you are trying discover or predict something based on data (machine learning/supervised learning/unsupervised learning/predictive analytics), i'd look at the scikit-learn library and the statsmodels library for timeseries data.

If your Python program is running too slowly, you can use Cython to speed it up. However, if it's still too slow, then i'd write the inner loop in C.

If you are writing a simulation, then that tends to be CPU-bound. I'd use C (if you are doing something simple) or C++ (if you are making a flexible simulation framework that allows other people to define new simulation rules with it; but beware, C++ is too complicated, perhaps Go is better, see below).

If you are doing 'systems programming', e.g. interacting closely with hardware or operating systems, then i'd use C.

Apparently Go (search for "golang" in google) is a new alternative to C. I don't know Go but maybe it's better. So you can consider replacing any mention of 'C' or 'C++' above with 'Go'. Another even newer alternative that may be interesting is Rust. I don't know Rust either. "Go is for web-services/web-apps development; Rust is for truer systems software (if they keep GC optional it could even be used for kernel development)." "Go puts programmer productivity on top, thus fast compilation, "zero-thinking" memory management (thus global GC). They want the best from both fast but hard C++ and elegant but slow Python. Rust aims at low level, close to hardware, as fast as possible programs, thus fine tuning for memory management (arenas, isolated GCs, choice between GC and non-gc allocation), thus disallowance of implicit copying even at cost of making language a bit harder etc. They want to fix memory unsafety and bad concurrency problems of C and C++ while keeping all the perks which are the reasons why those languages are still used for new software." https://news.ycombinator.com/item?id=4345390 . There's also D.

Alternatives to languages you may have heard of

If you are thinking of using: