I was glad to see this post on the programming churn. I thought the authors point interesting regarding the lost productivity of switching languages and software development paradigms every couple years.
I agree with the point that the progress in software is logarithmic, that in the early days the progression from one language to another was dramatic, and now the progression is much more incremental. Also consider the amount of software code still running in a wide variety of languages, and you realize the lost intellectual capital caused by the obsoleting of languages.
I have learned to deal with the changing language landscape by watching and waiting. I have a stable of languages that I am comfortable with, but I watch and sometimes tinker with new languages to see if they truly are radical improvements. A good analogy would be car ownership – new cars come out every year with new features, but I don’t get a new car every year. I watch to see what the emerging trends are, and when my current car has enough deficiencies over a perceived new car, I upgrade and ‘learn to drive’ the new car.
With software, ‘learning to drive’ a new language can be more painful than learning to drive a new car (well… unless you get in accident in your new car). Every new language has new concepts that you have to grasp, and hours can be wasted going down dead ends and googling solutions. Plus just because you upgrade, it doesn’t mean all your code written in the previous language was ‘traded in’ – all that code is still around, and in theory needs to be rewritten to the next language.
Having said all this, the changes incorporated in new software and tooling in the last 20 years have been remarkable. Thing such as true component architecture, an API architecture, and unit test frameworks have all allowed us to make huge leaps in things we could do. But do these improvements as a whole outweigh all the painful incremental language changes it took us to get here? That’s a tough one. I lean towards yes, it is worth it. As painful as the constant innovation has been, the world of software has evolved to support a wider variety of functions than anybody ever dreamed.