I have a confession to make: I read Retraction Watch. It's one of my pieces of mental junk food, like bad soap opera. And though I started for the soap-opera and schadenfreude, I've stayed also because of the serious questions about ethics that get raised.
Monday, June 17, 2013
One of my current projects has induced me to learn Haskell, a rather dogmatic programming language notorious for its insistence on purely functional programming and extremely strict data type enforcement. It's been both interesting and frustrating: Haskell clearly shows its origin in mathematical thinking. On the good side, there is the elegant way that data types are inferred, the fact that sophisticated and subtle manipulations of mathematical functions are elementary to the language, and the intuitive handling to sets and recursion. On the bad side, anything that doesn't fit the elegant paradigm is horribly painful to handle, when things do go wrong they go very wrong very quickly, and there is a mathematician-style culture of using single-character symbols and minimal comments. I detest this last, since it renders programs extremely hard to decode. It reminds me of a criticism of Perl that I once heard: "banging on the keyboard has a 50/50 chance of producing a valid program."
Learning Haskell also reminds me of a litmus test that I like, for testing whether somebody is a Real Programmer. The test is a single simple question:
"What programming languages do you know?"
If the person responds with a clear and simple list, they aren't are Real Programmer.
You get my point, I think. I could probably keep going on for a while, and still not have everything. This is part of the nature of working with code. If you spend enough time working with enough complex systems, you'll inevitably have to tangle with lots of different programming languages, just through the pragmatics of making things work in whatever context of duct-tape and spackle your partners and predecessors have had to set up to get stuff done. Likewise, if you tangle with enough languages and gain a deep enough understanding of the underlying concepts, then picking up new languages is relatively easy---at least to an intermediate level. Real Programmers have done both of these things, and it will have left its scars on their memory in one form or another---and I don't think you can really be fluent without it.
Note that being a Real Programmer doesn't necessarily make you any damned good at any particular task, though. It just means you've got the potential to get there with a sharp learning curve if you've got the time and motivation. For example, I'm no longer competent to carry out any but the most basic system administration tasks, since I stopped tracking that field early in grad school, which is why I own a Mac.
So, dear reader: are you a Real Programmer?