Slacking to “success” as a self-taught software development fuck up
Here’s an entry from my journal that’s been modified for self-taught software developers, new college graduates, people suffering from imposter syndrome in tech, or anyone considering a move into the realm.
The summer of 2016 will mark my 20th anniversary as a technology professional.
Let’s make it clear that I’m using “professional” as loosely as possible here. “Professional” because I was getting paid for my work, not because I feel I’ve conducted myself as such over the entire course of that time. For the first 5 years or so, I was anything but a pro.
At age 15 I’d tested out of high school by taking the California proficiency exam, left a job bagging groceries, and scored a gig doing design and HTML work at a small web company in downtown Sacramento.
To get a job like that back then all you needed to do was competently operate Photoshop and smash enough HTML into an editor to get a web page appearing on Netscape Navigator. A little UNIX experience didn’t hurt either. Lucky for me I could do all of those.
I spent 40 hours weekly making web sites for local businesses and the rest slacking my way towards a computer science degree at a local community college. I slacked because the money spoiled me. Slacked because I thought I already knew how to design and code. I had a job. I had a cool car that I paid for in cash. I wasn’t even 18. I thought I was the man.
At that time I was more interested in going to raves, spraypainting trains, attending 2600 meetings, and playing Quake with other geeks in the computer lab than studying or doing well in class. I flunked out of ’Introduction To C Programming’ for not turning in assignments. I dropped an early morning ’Electrical Engineering’ class to catch some rest after late nights of delinquency.
…Despite my “talents” I was still a teenage fuck up.
I eventually stopped pursuing a CS degree all together, choosing instead to work and learn on the job. How then, have I lasted 20 years working in this field? The only thing I can point to is a complete obsession with design and technology.
To tell this properly, and at the risk of being long winded, I have to take you back in time
Bear with me…
My dad worked in advertising during the 80s, so there was a computer in our house since the original Macintosh was released. I remember vividly sitting next to him as he unboxed it and ran through the tutorial.
We learned together how to point, click, and operate a GUI. It was amazing. When he wasn’t working on the family Mac my sister and I were allowed to play Sim City, type weird stories (with all the fonts) in MacWrite, or watch the flying toasters of After Dark.
Moving ahead to 1993…
Imagine how stoked I was to receive a hand-me-down Mac IIsi and 14.4k modem for my 13th birthday, which gave me access to dad’s CompuServe account. Discovering the world of online information only heightened my obsession with technology. I spent hours downloading issues of Phrack, finding new video games to pirate, and poking around on early dial-up UNIX systems I’d hack using instructions found online.
It was amazing to discover the things people were creating with the computer, but I felt left out being simply a consumer. I needed to be a part of the conversation. I wanted in.
The path towards programming
Does anyone remember Pascal?
I doubt any millennials in the crowd do. It hasn’t been in fashion since the turn of the 21st century. Pretty sure the only notable project it’s still being used on is FL Studio. It was the first real language I attempted to learn, so I could program a BBS door game.
Like any first proper attempt at something, it sucked…bad. It was a text-only “choose your own adventure” cyberpunk MUD, inspired by RIFTS. The code was horrible. It had limited paths you could follow. It was buggy. And I was so proud of it.
I’ll never forget the rush of logging in after someone had played the game to look what they’d write about it on our message board. Seeing people actually use and enjoy something I created was a transformative experience.
Bulletin board systems faded away as dial-up internet became the next big thing. Web pages were the new way to communicate, so naturally I had to teach myself how to create those if I wanted to continue participating in the online experience.
Remember that job I mentioned at the start of this story? Let’s flash forward to 1999. I’d moved on to a gig as a contractor at Hewlett Packard — working on “internal tools” that helped other people get their jobs done. It paid well, but didn’t last long.
At the time I was still a major fuck up. I’d run into a bit of trouble with the Sacramento police for the previously mentioned graffiti habit. My lawyer instructed me I needed to get out of the general region so I could be placed on house arrest and avoid a jail sentence for painting trains. Whoops.
Through sheer dumb luck or an act of a higher power I was able to talk myself into a job in Berkeley. I’d be the primary front-end designer & programmer at a small startup company that made web software. The engineers working there were top class — Stanford, Berkeley, and MIT graduates. Some of them had attended school together, and everyone was older. I knew nothing in comparison when it came to computer science, and it showed early and often.
I was clueless about Java, EJB, and anything related to their server-side implementation. I had little practical knowledge about object oriented programming, and certainly knew nothing about source control or development methodologies.
Still, I couldn’t shake feeling out of place and inferior. Here I was — a community college dropout with a police record — working with highly educated professionals. I felt I didn’t belong. Truth told…I probably didn’t.
Thankfully, everyone at that job in Berkeley was patient and leveled me up; pointing out books I should read, things I should learn, and instructing me on basics like object oriented design, source control, and code review. They were wonderful mentors.
I probably didn’t deserve that job in Berkeley, or the help of my gracious co-workers. I was lucky to be there. Fortunately, I was able to take feeling of being an outsider and turned it into a skill that’s assisted me ever since. That skill turned me into a pro — and it can turn you into one as well.
Feeling inferior in that environment, I spent weekends and nights at the office; reading source code from the project, and teaching myself Java from books.
Any title that was mentioned as a seminal work in computer science or design was immediately purchased, read, and re-read. I stopped going out with friends, preferring to stay in front of the computer and read tutorials online from sites like Lynda.com.
Being in that position (and others after) I was shown exactly what I didn’t know. Shown areas I needed to improve in. What I was missing from my self-directed course in computer science… My co-workers helped me fill in the gaps.
I eventually left that job but I carried the tendency for manic self learning into the future. Doing so has paid off time and time again.
I strongly believe that anyone in a similar situation can, and should make it a habit to do the same. If you’re going to excel in software development you must be a self-directed learner.
How to get started
Occasionally people ask me where I’d begin if jumping into software development today. The following instructions are for them. Maybe for you too?
Even if you do know how to program, but aren’t quite sure what “object oriented” programming is, give it a look. You’ll be glad you did.
Books Every Software Developer Must Read
Cool. This section is for you.
I’ve included everything that shaped me as a programmer for the better, and left out the ones geared towards development of specific projects. I strongly suggest reading them in order.
These will help you “fill in the gaps”, as I once did.
- The Pragmatic Programmer
- Extreme Programming Installed
- Design Patterns Explained
- Data Structures & Algorithms in Java
- Domain Driven Design
- Unix in a Nutshell
- Mastering Regular Expressions
Books for Web Developers
Bonus round… Want to make web sites, web apps, or power the systems behind a mobile application? You want these.
- SQL Queries For Mere Mortals
- Database Design For Mere Mortals
- Agile Web Development with Rails 4
- Patterns of Enterprise Application Architecture
- Yes, I still feel Ruby/Rails is the way to go in 2016 on the server side. Node isn’t quite there yet IMHO.
You made it this far? Thank you. Hopefully you’ve found something useful.
The biggest key I hope you take away from this is that you can’t be complacent with your education. You must be on a constant quest to learn if you want success in software development. Additionally, even if you aren't university educated, have a shaky past, or maybe were a fuck up at one point - you can change and be successful in this field. It's possible. I've done it.
- Pay attention to books that get mentioned by co-workers on web pages you read, by people you follow on twitter, quota, linked in, etc.
- Read blogs of well respected people in the software community you want to be a part of.
- Make it a point to learn new technologies and keep up with developments in your field of interest.
Have a book recommendation I missed? I’m sure there are a few. Disagree with some points I’ve made? Take it to the comments…