In 2012, I started my first iOS project after working with C# for over a decade. This led to a journey where I ended up working with OS X, Linux, MongoDB, ObjC, Node.js, C, Ruby and much more.
In retrospect this experience accelerated my learning dramatically and because of that I want to share this story with you.
Rewind to the 80’s...
I wrote my first code on the Macintosh II when I was 9 years old. It was awesome! I wish I could say the rest was history, but it wasn’t. Around the same time Adobe released Photoshop 2 which was the first to support colour (I can’t remember if I ever used v.1). I was hooked and spent most of my computer time designing graphics.
Fast forward to 1995 when we bought our first PC. Shortly afterwards we got internet and it blew my mind. I spent most of my time on IRC, playing games (Q2 and C&C) and messing around with basic hacks. Around 1996 I downloaded my first MP3 (Prodigy - Voodoo People) and decided that I must have my own MP3 site.
I ended up designing and authoring a new site for Moshmetalz MP3. The original webmaster and I ran the site for about 18 months when I decided to go to the UK for a working holiday where I got my first job as a web author using Coldfusion.
The rest is history.
- 1998: Coldfusion
- 1999 - 2000: Visual Basic 6
- 2000 - 2002: Java
- 2002 - 2011: .NET (C#)
- 2011 - now: Objective-C, Node, Ruby, PHP, and C#
I have been coding for most of my life and hope to do so for as long as I can. As I get older keeping my skills relevant is becoming an increasing challenge.
During my 10 years as a .NET developer I’ve had the the fortune on extremely interesting projects from doing the seat calculation for the South African National/Provincial elections through to doing insanely high speed message processing and data analytics for the Johannesburg Stock Exchange.
So why did I stop being a .NET developer? Here are 6 reasons:
.NET and Microsoft culture
Starting with with ALT.NET movement around 2005, the .NET community has made massive strides in the last 10 years. Unfortunately, the community is still filled with countless “Drag ’n drop” developers.
It is hard to avoid teams like that.
Boring corporate projects
I always found it very hard to seek out interesting .NET projects. The typical .NET project usually involves management software, accounting, or data capture. Worst of all these projects usually take place in those typical corporates with under hierarchical and authoritative management, restrictive policies and cubicle farms where the you wear the standard issue blue shirt and brown chino’s. Aaarggh!
This holds equally true for Java, COBOL and NATURAL developers by the way.
A new hammer
With each new release of the .NEW framework (err .NET) I got less and less excited by the features. As I explained to my wife: "I was just getting a new and improved hammer every year and at the end it was still just a hammer."
Being the lover of new toys, I had to start mastering other tools.
Becoming a n00b
There was also diminishing returns in deepening my knowledge of the platform. As my knowledge of the platform deepened I had to invest more time to learn increasingly smaller minutiae.
By forcing myself to learn other platforms, I’ve become the perpetual n00b. With that I get to experience all the excitement I had when I wrote my first programs. This also comes with the angst of being unsure how well I’m doing. (A good thing :-D )
The cool thing about different platforms is how each platform and its community approaches things uniquely. To name a few differences:
- The Ruby and Node.js communities have a strong culture of TDD and there is a lot to learn from them.
- Objective-C is verbose which causes code to quickly turn ugly. To prevent this continuous refactoring towards patterns and proper naming is essential.
What this taught me:
- The emphasis on different things between platforms carry over to others. For example:
- My method and parameter naming improved as because strange approach in Objective-C that makes intent painfully clear.
- Different platforms are better for different jobs and you should know what to use where. For example:
- Ruby and Node.js are über productive platforms.
- Node.js is great for async processing and event-driven systems, but suck at traditional sequential logic.
- .NET and Java handle large codebases very well.
In summary, I believe this improved my ability as a developer because I make better technology choices and this allows me to take different.
The importance of being a polyglot as a mentor
In 2001 I decided to start coaching teams after playing roles including Team Lead, Solutions Architect, and even Enterprise Architect. My goal as a coach is to help teams become more effective across all activities in the software development lifecycle.
Being a polyglot allows me to jump in and pair program with almost any developer. It also comes with the added benefit of sharing “cross-platform” insight especially in age-old debates like the Java vs C#, Windows vs Unix or whatever else.
At this stage of my career it is more important that my knowledge is broad, than deep and specialised.
PS. It helps that I still spend half of my time building real world systems :-).
Becoming a polyglot and build real-world systems on a variety of platforms has been deeply rewarding and I believe it has made more rounded as a developer.
I love the craft and it brings me deep joy.