Someone sent me the following quote the other day by the designer of the GNU / Linux kernel, Linus Torvalds, and I thought it was a really accurate and meaningful quote. Some of the best developers I have ever worked with are people who are very passionate about software development and do it because they think it is fun.
Most of these developers also have their own personal pet projects that they work on, be it a phone app, computer game, website, or some other general geekery. One developer I work with has done a lot of algorithm work with fractals. When I am recruiting developers, the one thing that leaps out at me on their CV is whether they have a pet project. If they list it on their CV, then I always ask about it, as generally you will learn a lot about a developers abilities by hearing them talk about their hobby project.
I am not saying that any developers who don’t have pet projects are bad. Far from it, I have worked with many good developers who don’t code in their spare time. But, the programmers that do have pet projects tend to be better, well rounded, developers in my opinion as they go out and seek new technologies and experiment.
Recently I moved my main home PC and Laptop over to the Linux Mint distribution, which for someone who has been a dedicated Windows users since I ever got my hands on a PC back around 1990, has gone amazingly well. My next little venture is to do a little cross platform development. Although I have moved away from Windows (not strictly true as I have set up Windows 8 in a Virtual Box environment in-case I need to switch over for something) I still really like the .NET environment and C# language, so I would like to carry on using it. I would like to learn another language like Python / Ruby, but I really don’t have the time at the moment as I have just changed job and I also have young kids at home which takes up a lot of my spare time.
Thankfully, there is the Mono .NET implementation that I can use and it is really well supported. Mono is a Free (as in freedom) implementation of the C# language and .NET runtime that is written to the ECMA-334 open specification. As well as being open source, Mono also has a company, Xamarin, sponsoring its development as they use the mono system for their IOS and Android application development system, of which you can also use for free (within limits).
My main interest at the moment is writing desktop applications for both Linux and Windows. Mono does support Windows Forms, but it isn’t as well supported as the Linux Gnome user interface library GTK. Mono has a version called GTK# and it is designed to be cross platform so you can use it with Windows and Mac OSX as-well.
After more playing around with Linux I decided to take the plunge and wipe my main desktop PC and install it natively. I have been trying out both Linux Mint and Elementary OS for a few weeks now in a Virtual Box VM to see whether the desktop experience is any good, and I am glad to say that it has now matured perfectly.
I first decided to install Elementary OS natively. This worked fine on my laptop, but there was a problem when I installed it onto my PC. There seems to be an annoying display bug where the screen just flips out if you have multiple monitors attached. This looks to be a known issue, but I am not sure when it will be fixed. This is a shame as Elementary OS has a nicer look and feel to Linux Mint, but after recently shelling out for 2 very nice 24inch flat panel monitors, I wasn’t going to be in a position where I could only use one of them. Elementary OS worked fine though if you unplugged one of the screens.
Next up I decided to install Linux Mint, which in itself is an amazing distribution. The installation process for this was very smooth and within 15 minutes my PC was wiped and I was logging into a fresh install of Linux. Everything worked as expected, sound, display, usb etc. I spent an hour or so installing updates and some applications (Mono Develop, xMind, Cairo Dock etc) and I was all done.
Since writing this article, I have developed a training course for the Pluralsight training library called “Developer to Manager” which is available to all current subscribers.
There comes a time in every developers career when you will have to make a decision about your own progression. Do you stay as a developer / senior developer and focus mostly on code, or do you make a jump into a management level position as a Lead Developer who has to manage staff or a Development Manager.
I had this same choice back in 2011. I was a Senior Developer for a large internet bank. I didn’t directly manage any staff although I was a mentor to a few. I got involved with an academy program where we would offer work placements to university students and train them up for a year. I started on this program as a mentor, but eventually I ended up running the academy as-well as carrying on with my normal role as a senior developer. This was my first proper go at directly managing a team of people, and I really enjoyed it. From there I moved onto my current role (Current for the next 2 weeks of writing as I accepted another job) at a consumer finance company as a Lead Developer. This role still involved some coding (but no where near as much as I was used too) but focused mainly on leading a multi disciplined team of software developers.
It has largely been a good experience for me and I enjoy leading as-well as coding, but it isn’t for everyone. Seeing as I am about to take on a new role as a Development Manager for a new organisation, I thought I would put an article together on making the transition from Developer to Manager based on my experiences. I hope that it will help anyone who is trying to decide whether it is the right career change for them.
This made me laugh as it is so true. I had to share. It doesn’t seem to matter how good a developer you are and how rigorously you follow testing process etc, we are all still people and when things don’t go as you would expect them, we start to come out with the excuses.
I have used the majority of replies on this list myself in my career as a software developer.