This site is a personal journal of my attempts at learning software development. My entry into the computer industry was as a computer technician for a K-12 school district. I had no experience with computers before that. I didn't grow up programming, there are no members of my family with advanced computer knowledge or careers in tech.
In 2014, I bought a book on PC repair and began learning computer basics and desktop support fundamentals. I passed the CompTIA A+ exam in May of that year and got a job as a desktop support tech in July 2015. It was around this time that I gained an interest in making video games. This interest came from reading the book Masters of Doom, that chronicled the story of Id Software, creators of the ground-breaking game Doom in the early '90s. This sent me searching for resources on learning to program the 'old-school' way, writing low-level C and assembly routines. I bought a bunch of old books on 3D game graphics and never actually read them. I repeated this pattern several times over the next few years after reading Ghost in the Wires, Hackers: Heroes of the Computer Revolution, Where Wizards Stay Up Late, and Walter Issacson's Steve Jobs biography. With each of these journies into retro tech I picked up a little more knowledge about programming and how computers work, but I still couldn't write a useful program to save my life.
Fast-forward to today, and I've managed to discipline myself to learn enough Java to be semi-productive. About 8 months ago, after purchasing another relatively expensive book, Inside the Machine: An Illustrated Introdution to Microprocessors and Computer Architecture, to add to my seven-by-eleven-foot bookshelf full of computer books that I've never even half-read, I became ashamed of myself, and rendered a personal ultimatum: if I don't read this book, start to finish, and actually learn something useful, I would begin to sell all of my books and forget computers alltogether, as I lacked the fundamental discipline to do the work necessary to become a software engineer. This actually sunk in rather seriously and I methodically made it thru half of the book, coming away with a considerable amount of new knowledge about the inner workings of CPUs. Though I only made it half-way, I counted this a success because I only stopped after realizing how effective this approach was, deciding to apply it to something programming related.
Being that I entered IT via industry certifications (CompTIA A+, Network+, Security+) I naturally thought of certs as a good path into verifying my skills in programming. Many people online bash certifications as being a way to fake skills by just studying for an exam rather than displaying real-world skills via projects or actual work. My reasons for looking to certs is a bit different. I would never have the confidence to even apply for a job where I wasn't 100% sure I could perform its related duties; certification exams, for me serve more as confidence builders. Passing one of these exams is like having the company that owns a certain technology say to you: okay kid, you're good enough to use our product. I had purchased a study guide for the Oracle Java OCA: Programmer I exam for Java 8 in early 2017, but had never even so much as opened it. I decided to issue myself another ultimatum to finish the OCA study guide. This time, I actually completed the book.
The knowledge of Java programming that I picked up has proven bittersweet. I know enough Java now to be able to 'start' building any program I can think of. I've become familiar enough with the Java API documentation and the structure of Java's libraries that I can figure out pretty much anything I might need to know while coding. The bitter part comes from the fact that actually knowing basic Java has exposed how much I still don't know about 'software engineering', the algorithms, design patterns, and data structure knowledge that allows you easily build more complex programs or to understand what's going on in code examples written by professionals. This is frustrating, but not at all insurmountable and gets at the entire purpose of this website.
This site is meant to be a place where one may see a guy who is obviously struggling to learn programming. Most of the content online exists as fully formed, complete projects or ideas that have been well thought out by a seemingly knowledgeable professional who has attained a level of mastery over a topic that a n00b like me might only dream of. What I'd like to display here is all the ugly learning that occurs behind the scenes, solely for the purpose of letting someone else who may come across this info during a websearch know that it doesn't all come overnight, and that not everyone who codes is some prodigy who wrote her first web server from scratch in Lisp at age 5. The thoughts and ideas presented here will likely be flawed and incomplete; I am completely comfortable with that. My ultimate hope is that my posts here will be, at least, honest, at best, helpful, and hopefully this isn't the only post here. ;)
--Joshua Rodgers, September 2, 2018