Programming Language Theory
Designing clean, elegant and portable webpages requires
taste and patience. There are an abundance of HTML tutorials
on the web.
- HTML Standard
- 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.
- CSS Floats
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
You could write content in Markdown and use something
like jekyll to generate
the static html webpages of your site/blog.
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++
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 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
It can be extended in trivial, and extremely non-trivial
ways with Emacs Lisp, the language it is written in.
An easy to use, feature-laden text editor.
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
version control concepts.
- Pro Git
A solid introduction to the powerful Git version control
A shell with nice completions and other customisable
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
As long as text terminals are used, it is worth your while
to be comfortable with 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.
A commonly used tiling window manager, incidentally
written in Haskell.
Another good tiling window manager.
The best open source SVG editor there is. Also allows
importing from, exporting to the commonly used graphical
Easily converts between a great variety of markup
Learning to use references is one of the essential skills of
a programmer. References can seem large and intimidating to
begin with, but with time they become indispensable.
- Project Euler
A good source of many exercise problems. Many of the
problems here require some mathematical (and programming)
- Programming Praxis
Some practical programming problems in addition to the
sorts of problems found at
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
- Arch Linux
A Linux distribution with an emphasis on simplicity,
configurability and having the latest software
packages. Rolling releases keep your system at the bleeding