Why usefulProgrammer?

usefulProgrammer = A person who can make meaningful contribution to web development projects.

meaningful contributions may include:

  • Identification and documentation of an issue
  • Understanding and writing code to address an issue 

Why?

Learning to write software is hard.

The goal of usefulProgrammer is to create a learning procedure which converts non-programmers to useful programmers.

I don’t currently see a detailed road-map for those learning to program. There are many reasons for this.

Problems with Learning and Teaching Software

Learning to program is a moving target

Software changes constantly. Learning to program for the web one day will be very different from programming for the web a year ago. For that reason, it’s hard to know what to get good at.

Learning carpentry is not like this. A circular saw in 2010 works similarly to a circular saw from 1910. Writing software for the web in 2010 is not the same as writing software for the web in 2018.

As one’s programming skills develop,  one’s programming teaching skill diminish

As a person becomes a more proficient programmer, they loose the ability to speak to less-proficient programmers. A young programmer might not understand the relationship of CSS to HTML and why a specific page needs to be loaded where it does. This sort of thing seems obvious to a more proficient programmer.

For this reason, proficient programmers often loose the ability to be good teachers as their own skills develop.

Technology decisions are complex

Time is lost when a non-programmer is deciding what to learn. Useful programmers have diverse ideas as to what technology is the best to start learning. The topic of what to learn first is heated because everyone feels the technology they work with is the best. A Ruby developer will tell you to learn Ruby with the same confidence that a JavaScript developer will tell you to learn JavaScript.

This complexity causes the non-programmer to get stuck. They thrash back and forth between languages. This causes unneeded hurdles in the learning process.

If someone asks, what programming language should I learn first?

The answer should be simple and consistent:

  • HTML
  • CSS
  • JavaScript

should learn first, they should know a solid answer and get started learning. Do not waste time deciding.

Technology decisions are complex

As a person becomes a more pr

My Story

I’m Ian and I started this project in 2019 because I think there is room for improvement in how programming is taught.

I started to learn deep software programming in 2016. I didn’t become a useful programmer until late 2018. During that time I took 9 months off to build a school bus house. Much of that time I was doing business development for our podcast production company. Outside those projects, my productive hours where largely focused on learning to become a useful programmer.

Previously I had experience building podcasts and developing WordPress websites. That work involved web development, but it wasn’t related directly to programming web applications. I wanted to be able to build web applications like WordPress, Facebook, Twitter, Wealthfront, AirBnB or Instagram. This required programming skills that I didn’t have.

Today in 2019, I’ve become a useful programmer. I can make meaningful contributions to web applications. My contributions are valued by others and I can get paid for them. My contributions have been added to large open source projects.

I still feel I’m a young, inexperienced programmer. But I’m at least a useful one.

With luck, this website will be resource for those seeking to transition from non-programmer too useful programmer.

What’s with the capitalization?

usefulProgrammer is written in a style called camel case. Camel case is used in the JavaScript programming language. JavaScript is a commonplace language used across the internet by browsers like Google Chrome, Apple’s Safari, FireFox and many others.