Want to walk in my footsteps? Not sure that's a good idea, but here are some pointers.
Try ruby. Short online tutorial for the popular Ruby programming language.
Python is another popular programming language. Short scripts or giant enterprise systems? Python is used for both and everything in between.
Node JS is both a good introduction to web applications and a favorite of huge companies like EBay and Microsoft. An unusual combination! [ npm ]
Codelite is a useful introduction to Integrated Development Environments(IDE) and pretty good for developing C software.[ c, ide ]
Subversion. Good no non-sense version control system.[ vcs ]
If you want to learn the contentious functional programming paradigm, Haskell is the academical choice but I prefer Erlang. F# may also be a good bet. If you want to have a very solid platform one which to build software, Ada is hard to beat. Search for AdaCore. Java is the most prolific programming language as it stands. C# is better but has less cross platform support. If you just want an interesting trip, consider Dart, Lisp or Microsoft Robotics Studio.
VirtualBox. Try out and destroy operating systems and other software in the safety of a virtual machine. This text was written inside a VirtualBox Virtual Machine. [ virtualization ]
Distrowatch. A list of some free operating systems you can try out. Ubuntu and FreeBSD are two strong candidates.
System Rescue CD. Does what is says. Learn how to use it inside VirtualBox!
Acronis True Image. Ready to try out the stuff you learnt inside VirtualBox on a real computer? Better make a system image first so you can reset the computer to how you like it.[ virtualization ]
Sysinternals Suite. A set of tools for Microsoft Windows for all kinds of debugging and general tinkering.
Duplicati. Favorite Windows tool for backing up files.
CCleaner. Windows cleaning and optimization tool.
Compression tool. Can make and open archives in lots of different formats. Opening tar.gz in Windows? Easy!
Ant renamer. Tool for renaming lots of files in batches.
Cygwin. Linux-style environment for Windows. Brilliant for SSH. [ ssh ]
Notepad++ .Great replacement for Windows Notepad.
You might want to learn fundamental things that are unlikely to be directly useful.
xDigiflex. Software in Swedish to learn about basic digital logic.
Eterm. Software for developing Assembler programs and debug them. Also used at my old alma mater for introductory courses in embedded systems.
ModelSim. Great tool for working with programmable logic.
OrCAD PSpice. Tool for simulating electrical circuits. Painful memories.
Matlab. As a matrix tool it's acceptable but it's the plugins that makes it fun to use. I used it for signal analysis.
Node uses it's own package manager, which might seem a bit foreign to people not used to running their own Linux systems. A package manager has a list of locations containing installable files and relationships between these packages. On Ubuntu linux
apt-get install wmii will install the Wmii window manager and all the packages that Wmii needs. The node package manager only installs Node packages but the principle is the same.
npm install express gets you the brilliant Express framework. Mocha, Expect and Superagent are also most useful.
Writing code is error prone. Even when you get things right you can end up breaking them again. So it's almost unthinkable to not use software that stores snapshots of your code so you can revert to older versions, preferably working ones but not always. I tend to use git nowadays because it's well equipped for local use only - i.e. without a separate server. Subversion is a better introduction to VCS and has a nice Windows client called TortoiseSVN, but setting up an SVN server is tough going.
I've written quite a lot about C on this site but I can give it a quick run-through again. It's an old programming language but probably the most influential. It's still popular but it's not so common for new projects being started I think. Knowing at least basic C is considered required knowledge among programmers, for no good reason really.
Back in the day, people wrote code in text editors, saved the text to files, executed a compiler and then ran the resulting program to see if it worked. Nowadays we mainly use IDEs which combine editors with compilers, debuggers and version control software. Languages like C and Java are well suited for automated processing in IDEs but there are also simpler ones for languages like Python, which doesn't lend itself to the fancier mechanisms in IDEs. Some text editors do a lot of the work found in IDEs, including Notepad++, Gedit and the venerable Emacs. I find little reason to write code in statically typed languages like C and Java outside proper IDEs like Eclipse and Visual Studio.
Virtualization is immensely useful. It is much easier to tinker with a virtual machine than a physical one. You can clone them and take snapshots of them. I am writing this text inside an Ubuntu virtual machine running in VirtualBox on Windows 7. In my day I have beyond VirtualBox also used Xen, VMware Player, VMware vSphere Hypervisor and Solaris Zones, which should give you some idea of how useful it is. Virtualization makes testing dangerous things safe and prevents operating systems from getting in your way.
Virtual machines can be saved as snapshots which makes it easy to restore them to a known state. To do this for physical machines you need imaging software like Acronis True Image or Clonezilla. It has saved me so many hours of work to be able to restore a computer's operating system from an image! I nowadays make a complete image of all hard drives on a computer before reinstalling stuff, because people rarely know where all their files are until it's too late. Storage space is cheap, data is not.
Secure SHell is a staple protocol from the world of Unix/Linux. It's both used to get terminal access over a network and serves as a tunneling protocol for remote copying(SCP) and Git communication. By creating a private/public key pair these operations can be performed without providing a password. One can also use it for general tunneling. I used to use PuTTY for Windows SSH access but it didn't work when the remote system ran Byobu. So I use Cygwin nowadays.