Dan Fox bio photo

Dan Fox

Software developer interested in learning New Things and applying them in Real Life

Just for the record, I like to pronounce the word paradigm like “par-ra-dig-em”.  I acknowledge it’s completely wrong, I apologise wholeheartedly to the English language, but I find it fun so I’m not going to change my ways now.

Software development is a very unique field of expertise.  Not only is each problem solvable in countless ways, but there is never a “perfect” solution.  Also, there are an infinite number of ways to solve a given problem given the way your mind currently works.  Your knowledge and software skillset will only grow based on what you use and understand, so unless you’re at some form of research company where you can learn anything you want at any time you like, chances are you’re limiting yourself if you don’t learn tools and techniques outside of the “day job”.  To be a great developer you need to be able to think differently - and that means being open-minded to other approaches.

For example, I am firmly in an object-oriented mindset when I code.  The majority of developers are the same, some developers even just write procedural code dressed up in an object-oriented outfit (I’m really not a fan of this coding style, but that’s not my point).  My point is that I’m currently doing a Coursera course on reactive programming.  In Scala.

Scala, for those that don’t know, is a functional language based on the Java runtime.  It requires a very different way of thinking from object-oriented techniques.  And yes, I’m finding it difficult (even though I passed the “beginner’s” Scala course).  Now this is an extreme example for learning a new skill - I know very well I’m not going to suddenly declare myself skilled in Scala and start coding in that language - I’m just not good enough.  I could use the techniques I learn and start coding in F#… but that’s not likely.  Code I write as part of my job has to be maintained by other people who aren’t skilled in F#.

However… I suddenly have another tool in my toolbox.  F# and Scala are available to me if I have to use them, or if there is a particular reason why they are more suited to a given application than C#.  More than that though, I believe my knowledge of functional programming has improved my C#.  My skills using LINQ and (to a lesser extent) generics are now better - both LINQ and generics have their concepts grounded in functional concepts.  So I’m actually reaping the rewards in my day job.

I heard recently of a company rolling out Visual Studio but not including F#, because “they code in C# and developers don’t need it”.  Absolutely true, they don’t need it.  Just don’t be surprised when the developers that are most willing to learn - and the ones with the most potential to be great developers - take their learning elsewhere.