“Architects must code” said Daniel Bryant at #qconlondon. The day before, I had read I rant from a Chief Architect (at a Building Society) against a recruitment consultant who had approached him with a coding job. “I haven’t coded since 1992” railed the BS Chief Architect.
@AdamTornhill – who is doing excellent work on code analysis (code scene.io and adamtornhill.com) quotes “The Pragmatic Programmer” stance that we should all learn one new language every year. That is a good ambition but unless you are a pretty dedicated programmer, it is quite a daunting task.
So, where do we start? I started a long time ago with Basic, then Fortran, Simula (the first OO language), then Lisp (functional), prolog, then at a “meta level” Ada and Java. By meta level I mean I did not actually program in these languages but read up about them – Ada because we were producing an Ada compiler and generating Ada code – and Java because I was working with Sun in Menlo Park (1995) and implemented J2EE based solutions in the early 2000s. I am a long way from knowing 40 languages though.
Recently, I had some time on my hands (I woke up one morning and was completely deaf – I couldn’t work – now resolved) and decided to learn Scala. I chose Scala because it is deployable – it generates to the JVM and is a combination of functional programming (Lisp) and object oriented (Simula, Flavors, C++, Java etc.). Because there are a lot more Java programmers around and Scala is being touted as an “upgrade” to Java I suspect most programmers will come to Scala from Java rather than a functional language e.g. Lisp. Lisp programmers are fairly rare beasts – Adam Tornhill is one and I suspect Richard Stallman (RMS) still programs in Lisp. RMS was not a fan of the OO programming style but I found Flavors (OO constructs on Lisp Machines) to be exceptionally powerful. Scala shares the power of Flavors – combining OO and functional styles – is a killer combination for many types of problem.
Although it is a complex language Scala is pretty terse – more so than Java. Terse is good (IMHO) and one of the features of Golang is that it is also terse – apparently the people who designed it didn’t like the wordiness/complexity of C++. Adam Tornhill has written an excellent exposition on the J language – which is even more terse.
Programming languages evolve – I doubt whether many people are programming in Basic, Fortran or Cobol any more. Pascal, Prolog anyone? If you put 20 expert programmers in a room and ask them which language they find most useful you will get 30 different answers and many of these will be languages that have not been defined yet.
The reality from a CTO or Chief Architect’s perspective is that you are usually restricted by the type of applications that you are developing – it doesn’t make sense to develop in Java in a Microsoft environment. Similarly if you are building a new team, you are restricted by the “talent pool”. It would be pretty suicidal to try and build a new programming team using J – there are very few out there. There are not many Golang programmers either (yet).
The problem that CTO/Chief Architects have is that development languages are just one component that has to be considered. How to define and run programmes of work is another, whether to use Microservices, how do we use Agile, what CI/CD (DevOps) approach to use, managing programmes, how to make make our systems secure and comply with new legislation (e.g. GDPR)- are all issues that have to be considered and they cannot be taken in isolation.
In summary we need to listen to and respect gurus like Adam, John Arundel (@bitfield), Mike Burrows (positiveincline.com) etc. My programming hero is Richard Stallman (RMS) but he doesn’t tweet – he inspired me to found a company using Lisp Machines to tackle AI problems in 1984. Problems that still have relevance today.
I come down on Daniel Bryant’s side – everyone involved in managing software development teams needs to be able to program (even if it is only at the meta level). The Chief Architect at the Building Society is possibly exempt from this as his systems are probably written in Cobol.