Scott Walters recently ranted on how Perl programmers tend not to perform OO analysis and design, at least when compared to Java programmers.

Setting aside issues of language design–though they’re important, I think there are other insights available–it does seem as if there’s much more literature available for developers who want to design large systems in Java than there is for developers who want to design large systems in Perl. (I operate from the assumption that the number of people who could write a program in Perl is probably the same as the number of people who could write a program in Java, if not greater, so I set aside questions of market size as well.)

Aristotle Pagaltzis suggested I repost my analysis here. In short, it’s all about the teachers.

Java ended up as the de facto teaching language because Pascal was the teaching language of the previous generation, C++ was too baroque, Smalltalk was too much unlike Pascal, and when “How to Use Excel” is a CS class, there’s no way you can think about teaching undergraduates Scheme.

Though there were still a few books written about Smalltalk or Lisp in this era, non-theoretical CS programs moved to Java in the late ’90s, hence Design Patterns mixed C++ and Java examples (and thus many of the more severe problems of that book). A lot of the great Smalltalk programmers I know moved to Java because it had momentum. You can go to OOPSLA (or more likely the POPL track) and hear about Haskell, ML, Ocaml, Smalltalk once in a while, and lately Ruby, but even a lot of academic research uses Java and the JVM. (.Net and the CLR have grown as you might expect in the past few years.)

I can’t entirely account for the fact that the dominant development environment of the dominant desktop platform was Visual C++, but I do think the academic adoption of Java has led to a focus among newly-minted Java programmers that There Is One Right Way To Do Things. It helps that the language design encourages One Right Way, though I remain unconvinced that that principle is useful.

Maybe calling this all one trend is conflation, but it seems a mixture of 1) deliberate design choices to funnel all code down certain paths 2) academic adoption and dogmatic teaching styles and 3) plenty of supporting literature.