Being a better software engineer

Way back in the 1980s when I started my first job, I thought I was pretty good. I’d breezed through the computer science work at uni, helped others with their assignments and done a bit of programming on the side. After 6 months at the job, I went back and rewrote the first 5 programs I had written because I was so embarrassed about them. So, actually I was a pretty crappy programmer. I spent a lot of the next few years trying to learn as much as I could. I don’t think I’m particularly unique here; I expect this is how most people get through their first few years working in software development.

After a while, maybe you’ve been through a few jobs or you’ve spent a long time at a company, you get comfortable in your skills. You’re probably in a senior position, and presumably have resisted the lure of the management track. Your personal life has much more important things to take up your time, instead of reading about new programming languages or coding that new game. About the only learning that happens now is when you switch roles or companies, and when this does happen, you tend to pick up just enough to get up to speed with your peers.

Fast forward 10, 15 or 20 years. You’re probably an expert in whatever technology your company uses, you’re in a more senior leadership role and you’re just cruising along thinking everything is going well. At some point you somehow decide it is time to move on (or maybe your company goes under or downsizes). Suddenly you realise that the IT industry is an alien place and maybe you haven’t been paying enough attention. Now you’re in a difficult position. You’re locked in to technology that’s old or just just haven’t developed enough new skills to make yourself attractive to other companies.

What you need to do, before you get to a difficult situation like this, is recreate that mindset you had when you first started working, where everything was new and interesting. This isn’t as hard as you might think, because actually the IT industry really still is new and exciting. It’s just that you’ve forgotten to look.

Now, while the above doesn’t exactly describe my own trajectory in life, I have spent the last couple of years on a bit of a personal quest to rekindle the interest and increase my technical knowledge. So, following a very well-worn track, I’m going to talk a bit about some of the things I’ve done and what seemed to work well for me.

First of all you want to find some spare time. If you’ve got spare time at home (maybe the kids have grown up), then you can do something on the evening or weekends, even if it is just reading something in bed. Or maybe you can read stuff on your commute. Otherwise, maybe you can set aside some time at work, for example at lunch time or before/after work. As long as you partition your work and non-work activities, you’re not trying to rip off your company and most places would be only to happy to see their employees learning something new. Or maybe you can even negotiate with your manager to do some type of study as part of your normal workload. You could be surprised!

Learning stuff

OK, so just learning stuff by reading textbooks can be a pretty hard slog. So why not try a mix of different resources?

Maybe your company provides internal or external training courses. Even if you don’t need it, take it! Certainly in Australia, companies are required to spend a certain amount of money each year on staff training, maybe your company is the same. That could mean that HR are looking for opportunities to spend the training budget, so why not give them some ideas?

Alternatively there are a lot of free online training courses you can sign up for. Some of these are quite detailed and technical. A couple of well known sites for online learning are Udacity and Coursera. A number of universities now offer online education programs. For some more resources, see the MOOC List. ย  Push yourself to complete a course in the evenings. Or maybe you can organise for your company to set aside time for people to work through a course during work hours (my company does this!).

Does your company send people to conferences? Maybe you can get yourself sent on one by your company. Pick the right conference and you will not believe what people are doing. I think there is probably no better way to catch up on what the rest of the world is doing than by going to a conference. At my company people go to conferences with the proviso that they write a report and do a presentation to their peers about what they learned. Even if that isn’t the case where you are, it makes a great selling point. A pro tip: the time to raise this with your manager is when they are putting together their annual budget. Getting it budgeted by your manager is surprisingly easy (it’s not their money!) and once approved it is hard to get disallowed later ๐Ÿ™‚

Even if you can’t get to a conference, if you’ve found some interesting ones then see if you can get hold of the proceedings. Sometimes the authors make their papers available on the Internet, otherwise a good way to get access to zillions of technical papers is by joining the ACM. The cost for a year’s membership is not huge but you get access to an awful lot of resources, including many conference proceedings. Don’t forget that membership of a professional organisation can be tax friendly!

If all the above seems too much effort, you can keep up to date with what’s going on by subscribing to, or regularly reading, some technical news aggregation services. Some that I think are pretty good are:

  • Slashdot. OK, the comments are pretty banal, but sometimes some interesting articles come up.
  • Hacker News. I think this is the premier location for finding about about interesting or hot technical information.
  • There are some pretty cool videos about technology on YouTube. If you find someone who is consistently posting videos that you find interesting, then you can subscribe to them.
  • If you are interested in or are a team lead, then I think the Software Lead Weekly is pretty interesting.
  • InfoQ is a collection of resources based around the qCon software engineering conferences. It’s updated frequently, and you can subscribe to get new information in email.

Finally, if you don’t have your own technical library, then you’re not looking after yourself. Don’t forget that if it is work-related you may be able to claim tax deductions for personal training purposes.

Doing something new

If you are stuck in the same old routine at work, why not look to see if there is something different you can do part time? Maybe there’s a problem you can solve or some new technology that can be used to improve the way things are done… Are there some tools (free or otherwise) that you could get hold of that would make the job easier?

You could talk to your manager or team leader and mention that you are looking for a new challenge, and is there something specific that they could suggest? (manager love pro-active thinking like that!).

Alternatively, you could look at doing something significant outside of the work space. If you’ve got a hobby or interest that you know something about, why not think about creating a blog or website to let the world know? You can get a complete web-hosting package for under $100/yr, complete with domain name, and do whatever you like with it. Along the way, you’ll need to learn some new technologies, but that’s half the fun right? 10 years ago I started a website on the history of NSW railways, because it was something I was interested in. I knew something about HTML and digital mapping, but I had to learn about PHP, MySQL, CSS, Apache and website design along the way. It ended up growing way beyond my expectations and became a very popular resource along the way, with contributions from hundreds of people.

Why not learn another programming language?ย  There’s always something new coming around the corner, and one of the worst things you can do for career longevity is to stick only with the languages you know. If you don’t know a scripting language then you should definitely look at something like Python, Perl, PHP or JavaScript. Or maybe you could look at a functional language such as Clojure, Scala or OCaml. Even learning Java and C++ can be a ticket for a new job, if you don’t know them. Whatever you choose, learning a new language is tough to do in isolation. I’ve always found that the best way to learn is to start with some problems you want to solve or programs you want to write. For example, you could be deploying some new web pages and you need JavaScript to add some nice client-side functionality. Whatever you decide, it is critical that you have some tasks that you want to complete in the language you are learning – the only way you’ll learn a language is by doing. For example, I’m inย  the middle of learning OCaml, so I’ve been working through the 99 Problems (solved) in OCaml exercises, but I’ve also been writing an Xtensa analyser / disassembler (something I want for reverse engineering).

Teach your peers

Anyone can tell you that the only way you truly learn something is when you have to explain it to someone else. So if you look for opportunities to help someone else with something you know, then you are achieving two things: you are reinforcing your own understanding, and of course you’re helping someone else understand as well. No matter who you are, there are bound to be things that you know that your peers don’t (maybe an interesting debugging tool or technique. a new way of testing something, or just a process that works well for you). If you look for an opportunity to teach others about it, then you might find something equally illuminating coming back from one of your peers.

At my company we run several seminar series where people can get up and talk about something interesting that they know about. I was unhappy about the lack of coverage of software development topics, so I started a new seminar series to cover this area. So now every 2 weeks or so there is a talk about some interested aspect of software development to a bunch of engineers. Probably 3/4 of the talks are given by me, but that’s cool. I’ve got lots of things I can talk about, but I’m also happy to learn about something now and topical and then turn around and present it to my peers. For me, this has been a fantastically rewarding process. Sure, I have to put more time into this but I’ve learned a heap of new things and dragged my fellow employees along for the ride! Even better, some of the ideas that I’ve talked about have sprung seeds with some of the developers who are looking at trying some of them out.

By the way, I expect a number of people would back away from something like that because, they “don’t do public speaking”. I don’t think too many people would claim to be native public speakers, and I certainly didn’t look forward to the rare situations where I would have to get up and talk in front of people. But when people say that the best way to become better at public speaking is to just do it, it turns out they are right! Since I started these seminars, I’ve done about 20 talks, and now I actually look forward to giving a new one (who knew?!). So, if you ever have the opportunity to give some kind of talk in front of people, you should grab it. You might find it uncomfortable the first couple of times, but it will immeasurably improve your confidence and ability.

Pay the world back

No matter where you are in your career, it is inconceivable that you got to where you are without the help of the many thousands of people who have freely given their time, knowledge and even money to the world. Whether it is using some open source software, finding answers to your questions or reading online technical materials, your world has been enriched by the actions of people all over the Internet. All this comes about because people think it is a cool thing to create something useful and to make it available for the rest of the world to use. There are countless millions of websites maintained by people who just thought, “maybe someone would be interested in this…”. I cannot imagine a world where this is not the case. Even back in the 1980s when I first started working there was no Internet, but there were newsgroups where people could answer questions and even provide free software.

There’s a couple of points I would like to make here. Firstly, you have undoubtedly received more benefit from the rest of the world than you have provided (that’s just the nature of the numbers). But maybe you can think of some where to make something useful for the rest of the world, as a small repayment. Some ideas you could consider are:

  • If you’ve written some software that others might be interested in, why not set up a GitHub account and make it available?
  • If there is some open source software that you use and care about, maybe you could submit some fixed or improvements? The owner of the software is almost certainly interested in contributions.
  • How about setting up a website providing some interesting stuff that you know about?
  • Teach yourself to use WordPress or some similar package and start a blog (like I just did!)
  • Answer some questions on a Q&A site like Stack Overflow? Or write/update some pages on Wikipedia?

There are two benefits from these kinds of things. Firstly, through the magic powers of Google / Bing / Baidu / Yandex / Yahoo! you could provide the one answer that someone has been looking for. Or your contributions could be used by millions in the form of better software. If you do this, I can guarantee there is nothing better than receiving some email from someone you’ve never met thanking you for what you did ๐Ÿ™‚

Secondly, there’s also a tangible benefit to yourself. By organising your thoughts into something coherent and useful, you improve your own thinking and communication skills. Whether it is writing a blog article, preparing a presentation or creating a patch for some open source software, the process of creation forces a discipline upon yourself that will naturally make you better.

So there you have it. An entirely subjective guide to becoming just a little bit better than you currently are. I’ve been putting a lot of what I’ve just described into practice over the last few years, and have found it extremely useful and satisfying. If you think you’re stagnating in your current situation, the worst thing you could possibly do at this point is nothing…