The Informal Path
Becoming a versatile software developer is extremely rewarding, and opens the door to a creative and satisfying career. But the journey is long, frustrating, stressful, confusing and terrifying, to say the least.
There are, generally speaking, two paths developers take to becoming employable:
- The Formal Path: studying Computer Science, or equivalent qualification, at tertiary institution.
- The Informal Path: studying programming in a self directed manner using online courses, and non tertiary schools such as General Assembly. Many people taking this path are also changing careers at the same time.
Personally, I have mainly taken the informal path, but my own journey has been a mix of both. Because of this, I've experienced some of the advantages and disadvantages of both.
The Formal Path
The formal path does a great job at teaching core programming capabilities, and the theory behind software development.
The downside is that university based programming education has been critiscised for not being able to keep up with technology trends and industry shifts1.
Depending on what institution you attend, it will also range broadly in terms of quality, and perhaps most importantly, the relevance of the lecturers experience of real world programming situations.2
The Informal Path
The informal path is great for learning the latest programming languages and frameworks, and being taught (usually online) by people who really understand those from a real world perspective.
The disadvantage here is that some of the lower level theoretical concepts are not emphasised enough in these courses. You effectively learn what to do, but not necessarily why you do it.
Ultimately, there's only one path
In reality, we all must take the informal path at some point, even if we are formally educated. It's the only way to keep our skills relevant, at least in the web and native areas of the tech industry.
It's a lot of work, which is why it's a good thing if you innately love what you do as programmer. The reward is just as much in the learning and doing itself, as it is in the products of that learning and doing.
What you'll learn on my site
There are already tonnes of resources to teach you different languages and frameworks. My goal is not to reiterate what others are already doing a great job at.
A lot of it will be content that you generally won't be given nearly enough self development time for in your paid position. It's the sort of content that requires a curiosity and desire to learn in your own time, which you can then later bring into practice at work.
Over time, you'll write better code, be able to learn new languages and frameworks faster and be more knowledgable of the underlying philosophy of programming.
You have a duty of care
It's a glorious thing that we don't need to be a scholar of the thoretical aspects of software development in order to start making a living as a programmer3. That certainly wouldn't be the case for a civil engineer! Yet, in the right situations, you could earn a similar salary.
Just because we can take the informal road and be employable, doesn't mean that we shouldn't make the effort to learn the theory that underpins our artform. If we are serious about this profession, then we must. It's in our duty of care.
Let's show our gratitude that the informal path exists into our industry, by striving to write the best software we can.
 I've learned this the expensive way. A few years ago I paid $5000+ for a single semester open university course in .NET, only to discover during it that the industry was (and had been for a while) moving away from the main technology they were teaching, .NET Web Forms. This is one of the main reasons I didn't bother completing formal education. Recently, I've spoken with graduates who have mentioned the same, as well as noting that they had to spend a lot of extra hours learning the skills that would actually get them employed.
 No critiscm implied, it's a fast changing industry. Even those of us who are actively working in it are constantly scrambling to keep up.
 Mission critical areas of software development excluded of course, such as medical instruments.