Lots of people will tell you how to become a computer programmer. Go to college and major in Computer Science is the most wide-spread advice. In the last few years things called “coding academies" have emerged as quicker, more affordable paths to that goal. There is a faster, better way to acquire the skill of computer programming that is rarely discussed. While this post is about computer programming, the educational concepts discussed are broadly applicable.
How Skills are Acquired
Stepping back from programming, let’s think about how skills are acquired. Physical skills like playing various sports is a good place to start. How much classroom time is required? How about text books? The basic way you learn sports or other physical skills is watching someone play them. With any sport involving a ball, you pick one up and try to throw it. Then catch it when thrown to you. Someone may give advice, but basically you try a lot, gradually learn from your mistakes and get better. It’s important to note that you see the results of your effort. You see if the ball went where you intended it to go, for example. This can continue for years.
How about a more intellectual skill? We all learn how to talk and listen with understanding. The way we learn is similar to learning a sport – by watching, listening and then emulating. The world is incredibly complex and varied, with words associated with a huge number of things and actions. You start with a few words, and spend years adding many thousands more to them. Yes, parents give lots of feedback – not unlike the feedback you get when you see whether the ball you threw went where you wanted it to, whether the receiver caught it. Did you catch what I was trying to say there? Yup, like that.
The language of software
By contrast to any human language, a computer language is amazingly simple – partly because the “world” in which it “lives” is incredibly narrow and abstract. The nouns are all data of a couple different types, basically numbers and letters. You give each place that can hold data a name. The verbs are just a handful of simple actions that just grab the data that’s in a named place on your “desk,” do something with it, and put the result back or into another named place.
A great deal of the power of software comes from what’s called the subroutine library, which is basically an attentive gang of little robots waiting to do your bidding. If you want to write something on a screen, you “call” the relevant robot, give it your instructions, and send it off. There are robot librarians and file clerks that are excellent with card catalogs and endless file cabinets, fetching what you ask for and putting away what you’re done with. There are robot butlers at each “door” (keyboard, mouse, etc.) that politely inform you when something has arrived and give you the package. Another butler will also send data where you want it to go. While central to programming is learning how to “talk,” learning about the team of robots at your disposal and what each can do for you is also important.
Yes, there are lots of different software languages. But they’re really like local dialects. They all conform to the basic description I just gave. The gang of robots available in a given language typically vary depending on what the language is mostly used for. There are business-oriented languages that pay special attention to things like financial data, account data collections like accounts, and others that have robots that are really good at fancy math. But the way of thinking about them and writing programs is remarkably similar.
This should make you wonder exactly why you need years of courses “taught” by fancy professors, when programming is like doing things in an amazingly simple world of data using a small set of instructions that are easy to visualize and understand. The answer is that you can do it on your own, given access to a computer, some widely available tools and a bunch of organized exercises that start super-simple and get gradually more elaborate. That’s how I learned!
How I learned to program in ancient times
I went to high school at the newly-opened Morris Knolls HS in Rockaway, NJ. It took students from a couple of towns and had courses that were explicitly college and non-college. There were vocational tracks such as HVAC, auto repair and secretarial. The towns weren’t poor but definitely weren’t elite, with few professionals.
My introduction to programming and computers was a course offered in my junior year of high school, the academic year 1966-7. One of the high school teachers wanted to move from teaching to software and had no training or other way to get there. He somehow persuaded the administration to let him teach a course on programming. His break-through was arranging for the class to have computer time at a nearby company, Reaction Motors.
The teacher found a FORTRAN textbook to serve as the basis of the class. While he was the “teacher,” it was clear that his teaching amounted to trying to be a couple chapters ahead of the class in the book. But it didn’t matter. The important thing was having a book that laid things out, along with exercises and answers. And above all, the Saturday time slot when we had access to the computer.
Programming involved writing the program on paper, and then keying the program onto cards using one of the punch card machines that were in a room adjacent to the main machine room. We got to operate the room-sized computer, something which in the normal corporate environment was an absolute no-no, as I later learned. It was terrific fun.
I got lucky the summer after my senior year, and got a job at a local company, EMSI, Esso Mathematics and Systems Inc. The company applied computers and math to a wide variety of issues running the oil company. I started by fixing bugs and making changes to their math optimization FORTRAN program that helped them run their oil refineries better. Did I “know” how to do this? In each case I dove in and figured it out.
Then they needed some test programs written a new language, PL/1. No one there knew the language, so I dove into the manual and wrote the programs. Then they needed some accounting programs to help run their facilities in Asia. They wanted them written in COBOL, which made sense for financial programs, so I learned the language as I went along. I quickly fell into the pattern of getting some data from my boss, writing code that did what he wanted with it, showing him the output, and cycling for more. Each cycle required less self-education in COBOL, so I got faster. I tell more of this story here.
What I did wasn’t that unusual at the time. Most of the early programmers basically figured things out as they went along. They needed to get stuff done. They studied programs written by other people and learned how to write their own. Compared to learning to read and write the German language, I found FORTRAN to be amazingly simple by comparison; in fact, it was a relief compared to the endless complications and words of any human language, not to mention idioms.
How you can learn in modern times
You won’t have to deal with card and card punch machines. You won’t have to go to a place with a room-sized computer. You have the internet to give you access to all the information about any language you want, and tools you can access to enable you to write code in that language, try to run it and see how it goes. To start you can use formal exercises with programmed solutions you can study. You can learn and advance at your own pace.
If you want, you can poke around for a local or remote job. It’s good to start with some narrow domain of problems and tools that you’re interested in and have gained skill in. The first job doesn't even have to be programming -- it could be testing, for example. Just get in somewhere and start producing. Once you prove value, you’ll move up from there, because people who can produce results aren’t that easy to find, and a proven producer is a keeper. The important thing is to keep learning and move up the skills hierarchy.
Finally, count your blessings that the ridiculous world of job certification hasn’t yet latched its evil claws into programming very much. Yes, there are ignorant HR people who insist applicants have a degree in Computer Science, but the best programmers with degrees are good in spite of their mis-education in college.