Josh Hepworth

Preface to Learning
Learning to Program Software

I'm not the first developer that's found themselves wanting to teach others how to write software. I won't be the last. Despite the volume of available writing, there's a need to provide a series of articles that teach the foundations before programming. I want to approach teaching programming in a way I haven't seen. I want to teach the basis which other tutorials can (and already do) rely on.

The largest failure of current "Learn to Program" resources is where they start. These resources don't give a foundation to build the knowledge about a specific programming language around. The authors don't answer questions about what prior knowledge the reader really requires. They don't provide (or point to) a level of computer proficiency that the reader will need to actually use the language outside of the nice web-based REPL the guide provides. The reader leaves these tutorials with the knowledge of the syntax of a language, but without the ability to use it.

I want to provide a resource that establishes the core concepts critical to understanding the whys of any language and gives the knowledge essential to beginning to program on the reader's own machine. These articles will serve as an introduction to any tutorial that seeks to teach the reader their first programming language.

I'm probably not the first to do this. In fact, I think Yehuda's Tokaido attempts to provide a practical method of a beginner getting started with Rails. More recently, Linda Liukas' children's book also seeks to establish the concepts behind programming rather than presenting a language's syntax alone.

These tools fall short in a few ways. The GUI applications that hide the complexity of unix commands, file directories, and building software straggle when the user needs to understand that complexity to fix an issue. The books about patterns of software development never explain why the concepts it presents are important. Although, this is fine; the people these resources actually help wouldn't want these things.

I must admit that this group of articles will fall short as well. Unlike the GUI applications trying to abstract the complexities away and the children's books providing an early introduction to ways of thinking like a programmer, this will enforce the status quo. I like the idea of pushing the boundaries of how we're passing on technical knowledge, but I don't think anything else is practical in 2014.