My Journey As A Self-Taught Programmer

Joel Steinbaugh
Jul 28, 2017 · 9 min read
Following the yellow brick road

When I graduated college in 2008, I spent a lot of time making music. Right after I got my first job, I bought a Macbook Pro and a MIDI keyboard. Using just these two pieces of equipment and a software program, I discovered I could make any sound I wanted. The possibilities were limitless.

At the same time, I hated my job. Good jobs were hard to come by. It was the height of the recession, and I was a recent grad with no work experience. I was working as a glorified bill collector. My job was basically to take calls from angry customers, who were small, independent insurance agencies, and they’d often had money taken out of their personal accounts by my company because of flaws in its billing system.

About a year later, drawn by (at the time) a new piece of software called Salesforce, and showing some strengths with technical skills, I was able to get a job as an analyst. The work was better, but I still didn’t fully enjoy it. I felt like a caged animal. I started to dream of ideas that could change my life. A way out.

My first good idea came out of my musical interests. What if someone wanted to learn to play the piano? What were their avenues for learning? They could hire a private instructor, but those were expensive. They could take a college course, also expensive. Online, there was Wikipedia, but I hated the look and feel of it. The images sucked, there were too many hyperlinks, and it wasn’t focused on certain topics or geared toward learning — I felt that it was just a bunch or regurgitated information.

I came up with Renaissance, a next-generation version of Wikipedia where you could search general topics across all educational disciplines — like piano, chemistry, or photography, for example — and be shown a decent curriculum. I wanted to enhance text information with a whole bunch of interactive stuff like videos, audio clips, and user experiences specific to each topic (for example, an embedded widget with a playable piano). Renaissance would be like a little mini-university, free and fun.

Of course, I didn’t know the first thing about how to make that. That’s when my hunger started. And eight years later, it hasn’t stopped. I needed the skills to be able to build any big idea I came up with. I needed to learn to code. And here’s how I did it.


Pick a platform.

I started messing around primarily in HTML and ActionScript. The latter was deprecated by Adobe shortly thereafter, which taught me a valuable lesson about how fast technologies change. Learning to code was going to be a huge time investment, so I wanted to make sure from that point on I invested my time in languages that were popular and going to be around for a while.

HTML5 was still being born

Pick a platform that you’re passionate about. This has a big impact on the languages you should start with. It doesn’t make sense to dive into Java right away if all you want to do is build iPhone apps. Sure, it’s worthwhile to go through Intro to Computer Science courses, which usually start with Java, but on your own time learn whatever interests you. The big rewards come from the feeling of getting closer to building the things you want. If you don’t, everything will go over your head and you’ll feel like you’re not getting anywhere.

Once I got my first iPhone, I fell in love with iOS. Apple’s apps provided the clean, interactive experiences I’d always dreamt of. Apple was like the Wizard of Oz, and I was Dorothy. I needed to figure out what was behind the curtain.

So I strapped on my ruby slippers and started to learn Objective-C.

Steve Jobs was the wizard, and I needed to know how apps worked

Watch lectures online.

Pretend you’re back at school. When I discovered iTunes U, I was amazed. I’d just graduated from a very expensive private university, and now suddenly full courses were being made available for free by Stanford and Harvard! Sure, you can’t put a price tag on a college experience and education, but I was shocked. With the incredible value being made available to me by this one app, I fell deeper into Apple fanboyhood.

This was basically me, but without the tat and a lot less facial hair

I was obsessed with the iTunes U course on iOS app development, which was being taught by Paul Hegarty at Stanford University. I’d watch each of the lectures enough until the concepts started to sink in, sometimes three or four times. At the same time, I’d write my own code using examples from the lectures.

I was determined. My girlfriend would go to bed and I’d stay up until the wee hours getting my code to work. After months of this, I was able to pick up the basics I needed to build my first cloud-based app. Using a Parse backend (which also doesn’t exist anymore), I made a primitive version of my second big app idea. Happen was an app that allowed you to subscribe to your favorite interests — sports, books, movies, etc. — and provided you with one event feed for all of them. You’d always be kept in the loop on when the next big game was, or when George R.R. Martin finally announced that next GoT book was coming out (it still hasn’t). It never made it to the app store, but I’m still hopeful that one day it might ship.


Understand data types.

To become a decent programmer, you don’t need to be able to come up with the perfect solution to every programming problem they teach you in CS courses. But you do need to know the basic building blocks.

Booleans, strings, integers, floats, arrays, and dictionaries (or key-value data types) are common to all programming languages, and should all become second nature to you, or you won’t get very far.

A good exercise is to just think of everyday technologies we use, and what properties and data types those things might have. Like this:

I’m listening to Audioslave on Spotify

Understand object-oriented programming.

Just like data types, this is one of the building blocks of programming, but it took me longer to wrap my head around.

If you understand how objects work, how to initialize (create) them, and how certain objects can inherit properties and methods from others, it will make your job a lot easier. Take this simple example from a Swift playground:

I’m old

Once stuff like this starts to make sense, you’ll be well on your way to creating some awesome classes that use inheritance and prevent a lot of duplicate code.

Make sure to read the code documentation for whatever language it is you decide to learn. There are a lot of useful classes built into each language that you can draw from instead of having to come up with everything yourself. For example, if you need to do something pretty common like generate a random number, you could look at your language’s Integer class methods to see if anything like that already exists.


Learn basic programming style.

Coding style and design patterns are something programmers love to obsess about. Basically it all boils down to your ability to write clean, readable, structured code.

Undergraduate C.S. programs are pretty good at instilling this from the beginning, so we lone wolves have to pay special attention to it, lest our code turns into a cryptic jungle.

Doing some internet research on design patterns (such as MVC) or reading about object-oriented programming should yield some decent results.

In addition to design patterns, there are other things that will make you stand out as the ultimate programming n00b if you don’t pick up, like how you document your code, how to debug your code, how well you can avoiding copy and pasting, and your ability to write tests that ensure your code works.


Learn a database technology.

All complex apps require data to be stored somewhere, whether it’s on a device or in the cloud.

I was pretty lucky on this one, because my analyst job made me learn SQL. So when my team at Wiblits started using SQLite and PostgreSQL, it wasn’t totally foreign to me.

Whether it’s SQL, MySQL or some NoSQL technology, understand how database technologies work will be a big step in the journey.


Aim to become a full-stack developer.

It’s easy to fall into one specialty, but once you get comfortable in one language or platform, it’s time to move on. Remember that when you’re a self-taught programmer, you’re behind the 8-ball. It’s gonna take something special for you to stand out among other programmers, and this is one way you can.

If you learn just iOS, there will be plenty of programmers out there better than you. But there are a lot fewer developers who can code well for both iOS and Android.


Try to get a mentor.

It’s not always possible, but if you can, try to partner with someone who has an engineering background. They’ll be able to provide perspectives and tools you’d never have thought to consider.

During my first programming gig, I was lucky enough to work with a talented engineer who taught me a lot, and who I learned a lot from just by doing code analysis. I’ve since gone from a primarily iOS UI programmer to also working on web apps, backend, version control, databases, and more.

I also need to give a shout out to by good friend Colin Turner, another self-taught programmer who gave me the opportunity to do my first programming job at his startup called Wiblits. I think I’ve learned more in the last two years than I did in my first 28 in terms of real life and work experience, and a lot of that is owed to our startup experience at Wiblits.


Stay up-to-date.

Being a programmer requires knowing the latest technologies out there. Don’t learn Objective-C just because you found some online videos on it. If you want to build for Apple devices, it’s all about Swift now.

If you want to do app development, consider learning React, a JavaScript-based library which can now be used to build for both web apps and mobile.

As I stated in my series on app development, there are some great tech publications that can help you stay in the loop just by reading a few minutes a day.

There are also a lot of tools and free programs available that will help make your life a lot easier. I listed some of them in my series on building consumer apps.


One of my all-time favorite-bands is Jethro Tull. If you’re not familiar with them, they were one the most successful bands of the twentieth century. The lead singer, Ian Anderson, had so much money that he’d purchased a huge estate on an island off the coast of Scotland by the time he was 28. I’d been listening to Tull albums for several years when I discovered that Anderson never learned how to read music. When he was asked if he ever regretted it, he said no, that he actually credited much of his success to his inability. He said that free of the constraints of a theoretical background in music, he was able to explore new musical horizons at a time when rock music itself was extending its boundaries, and audiences were hungry to hear more experimental and progressive music.

Ian Anderson jamming on his flute

As a self-taught programmer, this is how I approach my coding journey. I want to be the Ian Anderson of app development. Having not taken the traditional path, my goal is to use what sets me apart, like creativity and business background, in order to create value in ways that other programmers struggle with.

Teaching myself to code has been a long uphill battle, and still is. I don’t even know how my code stacks up to other programmers. But now that I’ve built some pretty complex cross-platform, scalable web and mobile apps, I’m pretty happy with where my personal journey has taken me.

Without the C.S. background, I think I’ll always feel like I’m playing catch-up. But that means I’m always driven to get better.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade