because Hindley-Milner rocks
It’s amazing how much you learn by exploring the differences between two languages and how to re-express ideas between the two. I’ve been exploring Python’s itertools, Scala’s Iterator/Iterable and for-comprehensions. It’s really expanding my mind. There will be several posts once I collect all my thoughts. But on to the topic at hand.
I read a great blog post from Hacker News. Two really, but both are from the same blog. The first is “On the Fear of Reading Code” which is a spot on description to how I first began my coding career. Everyone has to go through this stage at some point because “I don’t do anything this bad. Not me. My code is perfect.” The next stage is inevitably “Wtf? When did I write this garbage?” which is the stage you will spend the rest of your life living. I constantly look back at my code and wonder what I was thinking.
The second post from this blog is “3 Simple Rules That Will Make You a ‘Superstar’ Developer.” It’s a “venting” post and for those frustrated very cathartic. Let me add another rule, Rule #4: Don’t ever write down the libraries you’re using, where you got them, their version numbers or place them into source control. It doesn’t matter if other developers have to trace them back to some website in China written in Mandarin (true story.) It doesn’t matter if certain functionality was only available in earlier, discontinued and unsupported versions (true story again.) The only thing that matters is that other developers can waste days while you’re gone attempting to get all the bits and bobs to work while you can get it up and running in minutes.
All jesting aside, it’s easy to understand how non-technical managers get fooled by “Superstar” developers like this. When managers look down at the group they see people constantly asking one guy about code, continuously having that person solve problems they can’t, and more importantly that person takes ownership of a very large swath of the code base. It’s a no-brainer, slam dunk. That guy must be the “Superstar” they’ve read about.
What they don’t understand is that they should look for that guy everyone asks technical, general knowledge or domain-specific questions. You know, stuff not directly about the inner workings of the code base. They should ask why it takes so long for everyone but one guy to get things going. Ask about the real code quality and maintainability costs of each person’s contributions. Find out which guys are team players and which guys just work with the team. As long as a manager is approachable I guess the responsibility to educate non-technical people falls on the developers themselves. I’m doing my part, I hope.