How I’ve Learned to Program

I am not a trained software developer. I do not hold a degree in Software Engineering and the first time I stepped inside a bootcamp I was teaching a class. My Bachelor’s Degree in Classical Cello Performance (highly relevant, right?) allowed me to take one relevant class – Web Development for Musicians. This certainly wasn’t enough to break into the industry. I’m sharing my story to help other learners see how it isn’t a straight line, and there’s no magic moment where everything is done. It’s a career-long process, learning to program. I’m still learning today. With that said, here’s the history thus far:

2007 – College Course – Web Development for Musicians

I learned the basics of HTML and CSS, but not enough to do anything worthwhile. I built a super-basic website for myself. It was absolutely terrible, and I don’t have the code anymore. I remember it having a black background with green text. It was super ugly, but it let me pass the course. I learned on an old Pentium I Windows laptop, and I wrote the website in JEdit. This was enough to get me interested. I took this course in my last semester, when I was quite sure I wouldn’t continue as a programmer and was studying for the LSAT – I thought I was going to go to Law School, but I’m really glad I didn’t.

2007 – Self-Study with a Library Card

You can learn anything at a library. Seriously. Public libraries are massively under-appreciated. I was interested in learning more after that one college course, so I went to the Baltimore Public Library and found their one quarter-shelf of (mostly outdated). They had a giant tome on CSS, so I borrowed it, took it home to Maine on a visit to my parents and read it at the dining room table. My parents didn’t quite know what to make of it, but they let me read.

2008 – Night School in Graphic Design

After working a bunch of awful temp jobs and seeing how rough things are as an administrative assistant or busing tables I decided to enroll in night school to get into Graphic Design. I figured that it was a creative field, and I might enjoy it. I took out a commercial loan to pay for the training. I think it was around $17k, and the interest rate was awful, close to 10% per year. I learned the Adobe suite and did class projects. It wound up being useful in the beginning, but not what I wound up doing for a career. In retrospect, I don’t know that I would do it again. Near the end of the program the extension school I went to ran out of money and shut down. I never got the certificate of completion that I wanted, so you won’t see this on my resume. I can’t actually prove that I did the program.

2008 – Internship with Weber Shandwick in Baltimore

Through some truly crazy luck and a kind neighbor (a story for another post) I landed a 3-month internship in the digital marketing department of Weber Shandwick in Baltimore. There was a programmer there named Nelson who was quite a character – he was crotchety, had insane stories to tell from his life outside work, and he took me under his wing enough to point me in the right direction. I would go to work, try to do stuff and fail, ask Nelson what I needed to know, then stop by Barnes and Noble on the way home to buy a book on the relevant tech. I’d work a full day at the marketing shop then study for a few hours at night before falling asleep. I did this for about 3 months before I moved to Chicago. I picked up more HTML and CSS, got to practice with the Adobe suite, learned PHP and picked up some basic JavaScript.

2009 – Web Developer Job with Schafer Condon Carter

I would consider this my first real job in the industry. I worked as part of a small digital department inside a traditional marketing agency. I and another more-experienced programmer transitioned the group to something closer to best-practice development with issue tracking, source control, and backups. We also moved from PHP to Ruby on Rails. I learned a lot of what I needed to know from Ryan Bates’ Railscasts series – still one of the best resources for learning that I’ve ever come across. At the end of this job, I felt like I actually knew enough about development to be a good Software Engineer.

2011 – Starting a Consultancy

I went out on my own. It was big and scary, but at this time in Chicago Groupon was making it big and the startup scene was hot. There were a ton of people bootstrapping their own startups and not all of them had programming chops. I landed some contracts helping out some of these organizations, learned to manage projects (by making all the mistakes I could), managed others for the first time (badly) and only barely made ends meet for a couple of years. This was probably the most valuable experience I could have given myself – I learned a ton about both business and programming. I built some cool projects, some of which are still kicking today. I built a lot of Web Applications. I learned a huge amount by rubbing shoulders with entrepreneurs and programmers. I went to every Meetup I could. I watched every Railscast that Ryan Bates ever made, along with all of Destroy All Software by Gary Bernhardt. Both made a big impression. Without this time, I wouldn’t have been ready for what came next.

2013 – Rouxbe and Sqwiggle: Working In-House for Startups

I decided that tech startups were a much better place to be than marketing organizations when it comes to opportunities for learning. I jumped in with both feet. I worked on video platforms – this is where I first started to use the ACM Digital Library. Most of the free resources on the web are amazing, until it comes time to do something really hard. The Association for Computing Machinery is something I really recommend joining when you’re at that point. They have an amazing Digital Library that houses industry articles and academic papers on pretty much any subject you could want related to Computer Science. I read all of the Distributed Systems literature I could find and applied every bit of it, especially when building Sqwiggle. There’s nothing like watching a distributed system fall over and changing the architecture to make it work to really hammer home the points. This is the point in my career where I felt like I transitioned from being a Web Developer to a Programmer.

2016 – Change.org: Operating at Scale

OK, so what’s this “Scale” thing everyone’s talking about? Turns out it’s a totally different ballgame. When the systems under development are huge the skillset required is a bit different too. The volume of processing and the number of concerns that the Engineering team had to deal with at Change were new to me. I learned a lot – I took the system offline for a few minutes in my second week, which was a wakeup call. Shipping a database migration in the wrong way or at the wrong time could really cause problems! I was lucky – there were more-experienced Engineers who were willing to point me in the right direction and I was able to continue my reading. I also tried management again. I was more successful this time, though certainly far from masterful, especially at the beginning.

2019 – Entelo: Server Costs

Servers cost money. Don’t ever let anyone tell you different. Entelo was my first experience being the most-senior-titled IC Engineer at a mid-size organization. Don’t get me wrong – others at the organization were just as good or better. I spent most of my time at Entelo trying to reduce AWS spend and walk back previous decisions that were costing the company a lot of money. The project was successful. I learned a lot about organizing the efforts of a larger Engineering group. I learned more about providing transparency to Executives. I learned a ton about AWS reserved instance credits and applied my Rails expertise to speed up the test suite to cut CI costs.

2019 – Preset: Commercial Open Source

I had known about the work done as part of the Apache Software Foundation – Apache open-source projects are frequently foundational pieces of architecture that power enormous parts of the internet. The Apache Web Server is legendary. I had used Cassandra at Change.org and knew what a beast it was. The opportunity came up to get involved with Apache Superset, then incubating with the Apache Software Foundation. Turns out that open source development on systems like this is quite different than what I had done before. The project moves quickly with a huge number of commits and merges each day. Collaborators are generally involved as part of their employment at another organization – Lyft, Airbnb, and Nielsen were three of the largest contributors to the project while I was working on it, aside from Preset. I helped take the project to 1.0, helped establish some standards in the project, helped launch both Preset’s Beta and their general availability release. I managed a team of 7 by the end. I’m still processing what I learned here, and I think the lessons won’t be fully apparent to me until a few months from now.


Get On Learning to Program in your Inbox

Processing…
Success! You're on the list.

2 thoughts on “How I’ve Learned to Program

  1. Hey, Will! This blog seems like a fun project — quick, entertaining reads. I remember some of this backstory from our conversations on Caltrain, but it’s interesting to see where you’ve gone since your days at Change.org. Hope you and your wife are doing well and staying safe.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s