A while ago Twitter pal @glessermansazo asked me about learning how to write code, if I could recommend any good books. This got me pondering, my oldest daughter is changing schools this coming March – her first “real” school – and inevitably all the kids will have to tell their teacher “what kind of work does your daddy do?” Once upon a time those answers were simple, when the world was full of farmers, bakers, welders and carpenters but that was then. My daughter won’t have an easy answer, she’ll tell her new teacher and classmates a much glorified version of the following story.
That’s the SHORT answer! How I got here is another story.
Once upon a time when rock was pop, my father brought home a Commodore 64 computer. He was one of the first people in our area to buy a computer, most people didn’t really know anything about them back then. I learned how to write a few small programs in Bill Gates’ beloved BASIC and I wrote my first real program for a school project when I was in 5th grade. I didn’t really grasp the low level stuff – I still don’t – but I remember if you could hit the correct key combination you could escape the BASIC shell on the Commodore 64 and get into the assembly language. As a 12 year old boy I could make characters on the screen in assembly language and I vaguely felt mankind had gotten too big for its britches.
When my older brother started university he had to take some programming classes in Pascal but the professors told their students that this was mostly for learning purposes, to teach programming concepts. In the real world, everyone was using C – as we still do today. However, the university didn’t teach C because it was too powerful and easy to get in trouble.
So you wanna guess which book I picked up? Of course I decided to learn C. Why bother learning the concepts in university if you can learn the good stuff from a book? I was only 15 or so and by that time Pink Floyd had told me I didn’t need no university anyway. C is a wonderful programming language, the entire computer industry as we know it is built on top of it. Anyone who wants to program computers should learn the basics of C – just don’t put more elements in an array than you’re supposed to and stay away from pointer arithmetic unless you really know what you’re doing (I didn’t).
And then I quit programming. I’d had a love affair with aviation since I was about 5 years old and when I finished high school I enrolled in flight school. There’s a long story there too but suffice to say I spent 15 years flying airplanes, working as a flight instructor and building jet engines. I enjoyed aviation but it has its ups and downs. Somewhere along the way I was working 8 hours during the day and going to college at night, graduating when I was 33. I was working in a Fortune 500 company at the time which had outsourced most of it’s programming so I decided to pursue a degree in information systems, not computer science, but I did take a few programming classes in college. While I was in aviation I wrote some programs for aircraft weight and balance and I also did a short stint with an internet start-up during the internet boom in the 1990s.
Then I left my job at GE and came to Peru with the intention of working in aerospace, I had a contract with an aerospace company lined up when I arrived. The contract fell through and I found myself on top of a mountain in Peru with no job. I started looking for anything and everything. I was teaching ESL part time and looking for contract programming work online. I found a small 6 week programming job which turned into 6+ years of full time / independent / remote employment. I have no boss, no set working hours, it’s a very nice gig. I miss flying sometimes but programming is great because even someone like me who has no artistic talent gets to be creative, design things.
Coming back to the question @glessermansazo asked, what would I recommend if someone wanted to learn a bit about coding:
- Take a few programming classes. I launched into everything head first, see if I could make something work without understanding the concepts. All that experimenting is great but when I took some programming classes years later I found it helped me a lot to think about the academic concepts.
- Tinker with C at least a little bit, just remember the thingy about arrays and pointer arithmetic. Also, learn at least the basics of Linux – Linux is to operating systems what C is to programming languages.
- Don’t fall for hype. Software like anything else is a business and people want to sell. Some things that were all the hype 5-8 years ago like SOAP and XML are now practically obsolete. On the other hand you can never go wrong with broadly accepted technologies like C/C++, Java, and PHP.
- There are many new-ish languages and technologies now like node.js (which I’m tinkering with a little bit), Erlang, Scala, noSQL and untold frameworks, some claiming to be the best thing since sliced bread. You don’t have to learn them all, some are better for creative/expressive work, others are more suited for analytical work, etc. Find something you like and do it to the best of your abilities.
- Don’t worry too much about this vs that. Ruby vs PHP, Python vs GO, mySQL vs Postgres, Ford vs. Chevy. Some languages are better suited for certain types of work (for example, C is better for systems programming and PHP is better for web development) but in my opinion a heated debate over things like PHP vs ASP often indicates you’re missing the most important part of software development: you are programming for real people in the real world. Designing the best solution starts with understanding the real world requirement, then you design the application around the real world requirement – not around your choice of language or technology.