Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.Sign up
A common question is "what language should I learn?" This is akin to asking "I want to get into construction, should I learn to use a hammer or a drill?" If you want to specialize in putting nails in things hammer is probably a better route, but really you should focus on how things in a building fit together and the different tools available to you.
Contrary to popular belief, programming languages are not everything. They all do more or less the same thing, and most of the popular ones are derived from C and have very similar syntax and constructs. Knowing a particular language is far less important than knowing the common concepts and vocabulary used to describe how all languages work, so that you can learn new ones as they become fashionable, useful to your project, or are just interesting to you.
At the very least try doing a few tutorials of different languages and take note of the commonalities and differences between them. This is much more valuable than deciding "I am going to be a python programmer" or shackling yourself to a particular language.
C is the greatest programming language of all time. It gives you the perfect level of abstraction from the underlying hardware to make programs and libraries portable, but is still low-level and expressive enough to do serious work and give you enough control when you need it.
Basically all operating systems, web browsers, databases, high-performance server applications and games are written in C (or C++). Whenever someone creates a new useful library, it is probably written in C, and then bindings are created to make it usable from various higher-level languages.
Every programmer should at least be familiar with C. It's the lingua franca of software, and you will encounter it often.
- Introduction to C
- C for embedded systems - Strongly recommended.
- Pointer fun with Binky - Pointers are always a confusing subject for beginners, so our clay pal Binky explains them in a handy video.
- Introduction to C (Stanford Computer Science) - A fantastic introduction to C through assembly and memory management.
- History of C - History of C by Dennis Ritchie
- You can do object-oriented programming in C. Here's how the Linux kernel does it: part 1 part 2
Stanford CS Course
Stanford has a fantastic free online course on youtube covering basic computer science concepts. http://www.youtube.com/course?list=EC9D558D49CA734A02
Once you are somewhat familiar with C, your next task is to watch these lectures. There is seriously no good reason for you to not watch this whole thing this instant if you plan on writing code. You don't even have to leave your bedroom and you can get a better, more solid understanding of software than most professional developers. Watch the whole thing right now.
Python is a modern and straightforward programming language designed to remove a lot of the mystery and occult incantations found in many older languages. It's quite popular right now with novices and has a great deal of support, libraries and frameworks. It's designed to make it easy to write clear and readable code, arguably at the expense of elegance and flexibility. The unofficial python motto is "there is only one way to do it."
- Think Python - How to think like a computer scientist. Beats going to school I guess.
- Official python tutorial - Introduction to the basics of python.
- Python code visualizer - Good tool for python beginners to get a better sense of what the machine is actually doing.
Go is one of the most interesting and well thought-out modern languages to come along lately. It's backed by Google though it is a project run by the open-source community.
A language introduced by Apple for OSX and iOS development. The libraries used are the same as Objective-C but the language is cleaner and designed from the ground up for their platforms.
Assembly is the least practical but most important language to be familiar with, because it is eventually what all higher-level programs end up as. You do not need to be good at writing assembly, but it is extremely important to have a basic familiarity with the concepts.
- Learn you a haskell for great good - This is a fun and painless intro into a "functional" programming language, haskell. Take a little time to fuck with the guided tutorial, and you'll be a better person for it.
- Real world haskell
PHP does one thing and it does it sorta well: building small-scale web applications.
Java is terrible and you probably shouldn't use it.