I was at a (pretty boring) course the a couple days this week, and also madly trying to get some stuff done for my moonlight job, so that disrupted my attempt at keeping a regular pace of blogging up.
Something I think would behoove most programmers is to learn at least one or two other programming language families. Java and C# are too close. Smalltalk or Lisp on the other hand. It comes down to one general idea…
Experience with new ideas is part of it. Each language has its idiosyncracies that are sometimes useful elsewhere. But the most important value is when one tries hard to understand why the language or framework designers did as they did. That’s the real eye opener. Too many people see something unfamiliar or that doesn’t make immediate sense and proclaim the designers and implementers brain dead, kludge it, and move on.
This is usually a mistake. Not only does that person make inefficient use of time by trying to fight the environment that’s supposed to improve productivity, it’s missing a meaningful learning opportunity. Realistically, even if the designers are less intelligent in every way (unlikely), they had much, much more time to consider the problem space. So it’s totally worth taking time to pause and think about it differently. Instead of thinking “this is stupid, I can’t get it to do what I want it to do”, wonder “under what conditions could this solution possibly make sense?”
It may very well be that the designer missed something. It may be that there is a serious flaw. Showing that helps the designer learn something. But looking for the designer’s error first, and stopping there, misses all the opportunities to learn something in those cases where in fact the designer was right after all. And those opportunities are a delight, because it’s almost as good as having a dedicated mentor, older and wiser, right there explaining and teaching you tricks of the trade.