Never stop learning

This time five years ago, I was just finishing off my AS levels at college. The summer couldn’t come quickly enough for me; I was off to Versatilia to be a full time developer. I couldn’t wait to show them what I could do. I didn’t know it then, but I was in for a shock.

The first few weeks were easy. It was just run of the mill maintenance on existing sites, updating copy and fixing simple bugs. Then one day, my boss asked me to update some DNS records for a client’s site. When I replied that I didn’t know how to, he told me to find out – I had Google, use it. Looking back that was probably the task that jump started my career.

I worked at Versatilia for two more summers. Every time I went back it was something different. Provision this server. Set up that network. Integrate against this SOAP API (I didn’t say it was all fun and games…). Learn Codeigniter. Write unit tests for the API integration. Add functionality to our SVN deployment script. The list goes on, but the pattern was the same. If I’d never done it before, it was allocated to me to learn.

In my second year of university, I noticed something strange happening. Learning over the summer wasn’t enough any more. I started going to Geekup. I joined the IRC channel and Twitter. I started reading blogs via RSS. I just couldn’t learn quickly enough.

However, this had a negative effect on my university work. I couldn’t see how being able to calculate gouraud shading was going to help me in the real world. I didn’t go to lectures and subsequently dropped out of university. This wasn’t the end though. I applied for direct entry to another university in the same city that had a much more hands on course available. I ended up graduating with a first class degree as the content was interesting. I wanted to learn it.

In the summer of 2010 I needed a job. Versatilia was gone and I couldn’t face an entire summer at home doing nothing. I tweeted that I was looking for work and within 12 hours I had arranged an interview with someone I had never met (such is the power of Twitter). I got the job and made a huge mistake. I stopped learning. All I was doing was PSD to HTML work and watching a cPanel server. I thought that if anything else came along, the job would be mine if I wanted it. After all, how many other people could write HTML, CSS, Javascript, PHP and mySQL and knew how to configure a server and DNS to get it online? Little did I know that it still wouldn’t be enough in the near future.

I got lucky, a few months later I received a phone call from someone that I’d met at a Barcamp the month earlier. They needed a Codeigniter developer part time. Anything had to be better than PSD to HTML work, so I agreed to meet with the company owner and accepted the job shortly after.

Just like that, I was learning again. Sure I knew how to use mySQL, but did I know how to use mySQL when the table I want to query had a billion records in it? Not a chance. Was I going to learn how to? Of course. There was also a lot of domain knowledge that I had to learn, I couldn’t just throw code out and start from scratch like I had on previous occasions, I had to learn how to refactor.

The project lasted about 6 months before our boss sold his shares in the company, started a new venture (Max Software), and I decided to go with him. It was time for a greenfield project! One that we had complete control over. Possibly more importantly for me, one that I could contribute more to. The previous project had an entire team of people involved; developers, sales, support, DBA’s, the lot. This new project had me and one other developer, plus our boss. I was back setting up servers and looking into DNS. It was heaven! That is, until I stopped learning again. I was comfortable. The tools we were using were fairly up to date, the problem was sufficiently interesting. Once we had all the domain knowledge we needed, we could just plod along implementing features. That’s when I noticed I was getting bored.

Fast forward a few months and I had just graduated and started working full time as the lead developer for Max Software. We’d ceased development on the original product and were working on another one. This time it involved automatic domain registration, updating the nameservers and serving a dynamic website automatically when the DNS propogated. It was something new! It was something fun, but it wasn’t gaining the traction we wanted and it was quickly abandoned.

We were working on a few potential ideas, when along came the concept for Tweetdig. It started out small, but the more we worked on it the more we saw it’s potential. We hired a designer, we started to get people interested via a beta signup page, we hacked it together, launched it and watched it flop. It just couldn’t scale to more than a handful of users. Then I realised I’d done it again. I’d stuck to what I knew just because it was familiar. Even though I knew that PHP probably wasn’t the best thing to use when processing realtime data, I did it anyway.

I decided then that we weren’t going to compromise any more. Even if it was going to take longer, or cost more. Even (or sometimes especially) if it meant learning a new technology, we were going to do things right. No matter how much I had to learn to accomplish it.

And learn I did! PHP wasn’t cutting it with realtime data, so I learned NodeJS. Codeigniter wasn’t unit test friendly, so we learned FuelPHP. Our interface was to be JavaScript powered, so I learned about Backbone and RequireJS. Apache couldn’t handle the number of concurrent connections, so I learned about nginx. We were losing tweets when the database was unavailable, so I learned about Redis. Queries were starting to run too slowly, so I learned how to optimise queries to avoid using temporary tables. It wouldn’t all fit on one machine so I learned about securing machines whilst allowing access from certain security groups on Amazon AWS. Actually, I learned a lot about AWS.

I learned that when you’re doing something you love, it’s not a 9-5 job. I learned that you can get a text at 4am and have to get up and fix a server. That you can be in the middle of a meal on your week off and have to ssh in to restart something from your phone. I learned that if you work too hard, it eventually catches up with you and finally, that if you don’t ask, you don’t get.

I learned that you get out of life what you put in to it. As a result, I’m now officially a Tweetdig shareholder and company director.

What’s the most important thing I’ve learned?

Never stop learning.

Michael is a polyglot software engineer, committed to reducing complexity in systems and making them more predictable. Working with a variety of languages and tools, he shares his technical expertise to audiences all around the world at user groups and conferences. You can follow @mheap on Twitter

Thoughts on this post

Ben Cooper 2012-09-22

Nice post Michael, I told you I would read it.

Pretty knowledgable guy.

Cheers for the advice.

Leave a comment?

Leave a Reply