Join GitHub today
Creating software is a discipline with many facets and areas of specialization. Learning to program is a good start, but not the only thing you need to be familiar with.
Read this stuff first, so you have some idea of what your code is actually doing. This information is not directly applicable, but is important for a solid understanding of the connection between the abstract concepts you deal with and the underlying technology you are manipulating.
- How computers work
- How the internet works
- What is code?
- Algorithms and data structures
- Getting started professionally
- What you won't learn in school
You should probably be using a UNIX-style system for development. In practice this means OSX or Linux. Most open-source software is designed for a UNIX-like environment and virtually all hosting is done on linux. Yes some people are still using windows but we're going to pretend they don't exist. If you're on a windows computer, you can run Linux in a virtual machine or install it.
- Learn the command-line - This is non-optional.
Computing from the Bottom Up
http://www.bottomupcs.com/ - An amazing resource covering the entire underlying system of computing for beginners. Goes from the lowest-level simple pieces up to more complex, explaining each layer of abstraction. A perfect way to get a proper feel for the way computer systems are put together. Written in plain English for people that know nothing about how software works.