The Python Tutorial
The official tutorial for programming in Python. Having some programming experience will help you to move through the material presented here at a faster pace.
The C Programming Language
An excellent way to learn C, a widely used, influential programming language.
Structure and Interpretation of Computer Programs (SICP)
An introduction to computation and programming. Racket is a good choice for running the example code and doing the exercises from the book.
Language Specific Resources
Programming Abstractions in C++
A good way to effectively use the ubiquitous C++ programming language. Stop writing C-like C++! When appropriate, take advantage of what C++ has to offer.
A collection of JS resources.
A comprehensive, categorised collection of Python Resources.
Learn you a Haskell for great good
A nicely illustrated book on functional programming in Haskell.
What I Wish I Knew When Learning Haskell 2.0
A Haskell Reading List
A collection of OCaml resources.
Real World OCaml
A book about OCaml, a fast, functional programming language used in research and industry.
Practical Common Lisp
An introduction to Common Lisp describing the construction of practical, real world programs.
Articulate Common Lisp
A collection of CL resources.
Newer programming languages
A systems programming language developed by Mozilla.
A new Lisp. Shen draws inspiration from functional programming, type theory and the ancient Lisp tradition.
Programming Language Theory
Lambda the Ultimate
A blog and community for programming language enthusiasts.
Oleg Kiselyov's site
Beej's Guide to Network Programming Using Internet Sockets
A humorous guide to get started with network programming.
Things to learn
What every computer science major should know
Matt Might's advice on obtaining the essential education any student of CS ought to know.
Alex Bowe's interview prep advice
Steve Yegge's interview prep advice
Designing clean, elegant and portable webpages requires taste and patience. There are an abundance of HTML tutorials on the web.
Modularised CSS Specifications
The latest drafts of the HTML and CSS specifications. The links to the stable standards shouldn't be too hard to find. Use the stable standards for web design, and the latest drafts to know what the future standards are (probably) going to be like.
Learn how to float and position element using CSS and avoid some sources of frustrating confusion.
Markdown is a (plaintext) writing format that is widely used. Writing Markdown reduces the amount of HTML you have to hand-write. Markdown parsers/converters are widely available.
You could write content in Markdown and use something like jekyll to generate the static html webpages of your site/blog.
MDN CSS Reference
General Programmer Tools
You will have to be familiar with the development tools like the compiler/interpreter and debugger because you'll be spending a sizeable amount of your time working with them.
The GNU Debugger can help with finding what's going wrong with your program. It's usually used to debug C/C++ programs.
Building large projects can take a significant amount of time. ccache can help with reducing the time spent waiting for the build to finish.
Knowing how to efficiently use a text editor is one of the most useful secondary skills of any programmer.
Among the free text editors, vim and emacs have (unfortunately) been the state of the art for quite some time now.
A modal text editor that has nice key bindings and an emphasis on speed. It is an important command-line survival skill. Once installed, run the "vimtutor" command to start a basic tutorial.
An operating system containing (amongst many, many other things) a file manager, calculator, games, package manager and even a text editor.
It can be extended in trivial, and extremely non-trivial ways with Emacs Lisp, which also happens to be the language it is written in.
An easy to use, feature-laden text editor.
An interactive IDE written in ClojureScript.
A Version Control System (VCS) is used to track changes in files. Even the most trivial projects can quickly become unmanageable if a VCS is not used. You will need to know how to use the VCS a project is versioned with, if you want to contribute to it.
Mercurial is supposedly easier to learn and use when compared to Git. This tutorial covers the fundamental idea behind version control and basic usage of Mercurial.
A solid introduction to the powerful Git version control system.
Mastering the command line shell gives you unfathomable power and more importantly nerd cred. ;-)
A shell with nice completions and other customisable features.
Switching between multiple terminal emulator instances can hamper productivity. This terminal multiplexer can be used with a tiling window manager for a killer combination.
The GNU coreutils bundled with GNU/Linux can be used to perform straighforward tasks, and also arcane wizardry.
For as long as text terminals are used, it will be worth your while to be comfortable with using these.
Tiling window managers are useful in a typical programming session when you have to repeatedly switch between your text-editor, terminal emulator, web-browser, and any number of other programs you may have running. Alt-Tab never again!
A commonly used tiling window manager written in Haskell.
Another decent tiling window manager.
The best open source SVG editor there is. Also allows importing from, exporting to the commonly used graphical formats.
Easily converts between a great variety of markup formats.
A handy cheatsheet of algorithmic complexities associated with commonly used data structures and algorithms.
Learning to use references is one of the essential skills of a programmer. References are by necessity large and intimidating, but with time they become indispensable.
Programming Language References
Handy quick reference while writing C++ code. It can be downloaded for offline use.
Another reference on C++. It has clear examples to help you learn how to use the standard library.
Fairly large collection of C++ FAQs and their answers.
C++ Frequently Questioned Answers.
Official C++ FAQ
Simplified Common Lisp Reference
A selection of commonly used symbols.
Common Lisp HyperSpec™
The entire ANSI CL standard in HTML. Rather readable.
Freely available specifications for various internet-related protocols.
A good source of many exercise problems. Many of the problems here require some mathematical (and programming) knowledge.
Some practical programming problems in addition to the sorts of problems found at Project Euler.
Problem of the Day
Any operating system that you are productive in, and happy with, is fine. If that is not the case, however, these are some of our recommendations.
neena says that it is a decent operating system. A widely used, stable Linux distribution.
A Linux distribution with an emphasis on simplicity, configurability and having the latest software packages. Rolling releases keep your system at the bleeding edge.
How to Become a Hacker
Just read it.
What I Tell All New Programmers
Good advice that new programmers will do well to follow.
Teach Yourself Programming in Ten Years
Check out his other articles, as well.
Joe Armstrong's Advice
Joe Armstrong's recommendations as to what might be worth learning.
How To Ask Questions The Smart Way
It's a good idea to read this before asking questions on the internet (and in real life).
You and Your Research
Fascinating insights into the life experiences of a scientist, and his colleagues.
Programming Language Comparison by Mike Vanier
Slightly dated, but still a good comparison between the various languages the author has used in his career.
Paul Graham's Articles
There are some interesting ideas presented here.
The Art of Community
A book on how to build and sustain a community.
List of Free Programming Books
A massive collection of links to freely available books of interest to programmers.