Breaking down complexity.

I’ve always thought that there is something that parallels the ‘programming world’ to our own — like some magic mirror. I think a lot of what we have accomplished with software paradigms are really, really useful in real-world scenarios, especially in a business context!

I was chatting to a guy that I’m working with (through my micro-consultancy) this morning and he was saying he wanted to learn as many programming languages as possible. While I admire the desire to learn, I think that this would make him too much of a generalist. So I drew the following drawing on paper to explain it in a bit more detail:

The context is pretty simple:

Each programming language shifts and changes over time. Some of them are more complex than others. So each of the different languages has a different complexity path, as it evolves. What I’ve experienced, as someone that studied and practiced software development for long enough, is that looking at code now (say, the latest constructs in C#) require me to re-learn parts of the language. Not that I can’t do what I want to do using my “old school” constructs, but just that the language has evolved and I haven’t kept up, so it’s not necessarily the best way to do something.

This brings for the generalist view:

As a generalist, I’m able to function in a way that I’m able to perform the most basic functions in each language, but not necessarily in the best way (or the most performative) — I mean, I don’t recall all the nuances of each language, so it becomes more difficult for me to switch between them. Or to wonder why construct x isn’t working in way y — oh yes, it’s because this language doesn’t feature this expression, yet.

So by trying to learn to program in too many languages, one limits what you’re actually able to do. The complexity levels shift, and each layer becomes more and more difficult to achieve. I’m not saying it’s impossible, I’m saying it’s just more difficult. I think it is also dependent on your own individual passion — I know I’ve lost my passion for programming, so keeping up with 2–3 languages (which I’m not even really doing) is becoming a bit tiresome, although completely necessary for the future.

So, instead of trying to become a generalist, I said he should try focus on a maximum of three languages. I also mentioned that no one works in the same career for their entire life anymore, so he should at least make the basis of his language choice on his familiarity of language, as well as potential future jobs.

He still retains his generalist ability to program (on a basic level) in any programming language, because there are universal constructs in any programming languages, but it also provides him with an opportunity to better himself in a way that can have future impact in his future career.

HOW IS THIS APPLICABLE TO OUR LIVES?

I think that, in many instances, we also try and do the same. Because we have so many interests and desires, that sometimes we becomes sidetracked by what it is we’re really passionate about, and what we should be doing. I know I’ve been led down that slippery-slope before.

So perhaps part of what I have been doing, very slowly, is also looking at the things that interest me, what I want to do, and what I think I should be doing. I suppose doing a generalist MBA also has made me more conscience about being interested in many things, and then trying to focus after on the things that really matter to me. Or just perhaps interest me more than something else.

In the end, it might be a useful reflection tool. What are your thoughts?