· 7 min read
My unconventional path as a self-taught developer
Modern society expects us to follow a certain path. Go to school, get a degree, get a job, get married, have kids, retire, die. I've never been one to follow the crowd and my journey into software development is no exception.
I grew up in rural Mississippi far from the land of opportunity. In fact, until only a few years ago, I was plagued with internet speeds and data caps reminiscent of old school dial-up. Most people with any ambition or desire to work in tech, move away ASAP. I should have, and would have, had I the means.
At the risk of sounding old, I wrote my first lines of code over 20 years ago. Long before the internet or cell phones were a thing. There were no boot camps or courses and until a few years ago, I’d never met another programmer in person. When I say that I’m self-taught I mean it in the truest sense. Good old-fashioned trial and error.
It’s sort of always been a thing I do. Whenever I’d get home from school, I’d work on a coding project. It’s what I did for fun. I never considered doing it professionally until much later and for a long time, I didn’t believe it a possibility. I didn’t go to college, which is an automatic no for a lot of places, and there really weren’t any opportunities within my region. Even if remote work were a possibility back then(it wasn’t), I didn’t have the internet to support it.
1999
The year of Y2K, The Matrix and my humble beginnings as a programmer. At 11 years old, I purchased my first computer at a garage sale for $10. A Packard Bell 386 with DOS and Windows 3.1 on floppy disks. I was the only person I knew who owned a computer and to be honest, I didn’t know what to do with it. Until, that is, my dad gifted me a book called Beginning Programming for Dummies.
Adventures in code
For the sake of brevity, I’ll skip over a lot of details but just know that learning to write code back then was a lot harder than it is today. I had no internet(or only dial-up), no courses or mentors. Just some books and a lot of persistance.
The levels of frustration I experienced were immense and to tell the truth, I’m not sure why I stuck with it. I guess I just enjoyed the challenge and the feeling of accomplishment when I finally got something to work. Trial and error are great teachers and as a result, my debugging skills are second to none.
I spent roughly the next 10 years writing code in various flavors of BASIC and some Python. My primary motivation was game development but I also enjoyed writing tools such as level editors and the like. I did it for fun and it felt amazing knowing that I had the power to create anything I could imagine.
Back in the day, the general consensus was that if you didn’t know C++, you weren’t a real programmer. Or at least that was the consensus on the forums I frequented. Luckily, I stumbled upon a book that taught C++ and introduced me to design patterns, Wiley’s Teach Yourself C++.
I went deep with this book and spent a lot of time learning not only C++ but basic computer science concepts such as data structures and algorithms. My favorite projects from this era were the rendering engines I wrote from scratch. A software renderer, and eventually openGL and DirectX renderers; animation systems and bitmap font renderers.
This is the point at which I really started learning how to architect solutions rather than just programming to accomplish a task. I started to understand the importance of design patterns and how to apply them to solve problems. Again, for the sake of brevity, I’ll skip over the details but I spent a lot of time developing small projects. From UI development with Qt, WxWidgets, and GTK to libraries for matrix math and music theory. What I remember most about this time is how much I enjoyed it, despite the painful learning process, and in 2013 I published my first app to the Google Play store. A game called Zabyrinth that I wrote in C++ with Cocos2dx.
The web is the future
When deciding what to do next, I looked on job boards and noticed that most of the jobs were for web developers. I had developed a few websites in the past for myself and for one of my employers, but to be honest, I tried to avoid web development at all cost.
Why? Because it didn’t seem like real programming. But, after some time and research, I realized that the web had evolved greatly and that with the advent of Node.js, Cordova and Electron, anything was possible. I found the fact that I could build anything with JavaScript, from cross-platform desktop and mobile apps to web apps, very appealing.
”The web is the future” is a phrase I heard often circa 2014. These days, I’m skeptical anytime I hear the phrase “X is the future”. But, in this case, it was true. I made a bet on the Web and I’m still happy with that decision.
Web development is an extremely broad and ever-changing field. And over the years since then, I’ve been learning non-stop. From frontend frameworks to docker and kubernetes to distributed systems and cloud computing.
Job search hell
Somewhere around 2016, I started to become confident in my skills as a developer and my ability to solve problems with code. I started putting together a portfolio and eventually started applying for jobs(mostly remote). I was working full-time as a kitchen manager 6 days a week, often working double shifts, so it was difficult to say the least.
For all the struggles I had in my life, nothing has infuriated me quite so much as the job search. Any job search, but especially for programming jobs. I’ve been rejected more times than I can count and ghosted more times than that. When people say that the hiring process is broken, they’re not kidding.
The most sobering realization I had was that It’s mostly a numbers game. It’s finding the right opportunity at the right time or using your network to get your foot in the door. I’ve learned it’s better to apply early and be persistent.
Victory
In 2018 or was it 2019? I can’t remember, I finally landed a programming job locally. Unfortunately, the job didn’t pay much and I had too many other obligations and side projects(I was running several e-commerce stores at the time) to accept the offer. I wasn’t sure if this was the right decision, but given my upward trajectory over the last few years, I was hopeful that I’d find something better.
A couple years later, I found another local job listing and as fate would have it, It was with the same guy who offered me the job a few years prior. This time I accepted the offer and despite the imposter syndrome that we all feel, I was able to hit the ground running and make an impact from day one.
Lessons learned the hard way
I skipped over a lot in this post. At some point I’ll write about some of the many projects and failures I’ve had over the years. Some that aren’t programming related and some that are.
Fortunately, times have changed a bit and remote work is becoming more common. Hiring someone who comes from non-traditional background is becoming more acceptable now that companies are realizing that a lot of the best programmers are self-taught.
In hindsight, I should have taken more risk and grabbed life by the horns. Fear and self-doubt are powerful forces and if I could go back, I’d do it all different. With that said, I’m grateful for where I am and I’ve got big plans for the future.
If you orient yourself towards a goal and live each day pushing the needle forward, you’ll get there eventually. It’s not always easy, but persistence pays.