rise4fun

Software engineering tools from Microsoft Research.

The Rise of the New Groupthink

“Research strongly suggests that people are more creative when they enjoy privacy and freedom from interruption.”

Learning and the Narcissism of Small Differences

I started working with python full-time about a year-and-a-half ago. I was coming from having mostly done ruby and javascript for the last few years, and my prior exposure to python was relatively brief.

I fairly quickly found a bunch of annoyances in python that I carped about frequently. Can’t resolve circular references? Ruby has no problem with that. Class and static methods tacked on via decorators? Those should be first-class concepts in any modern programming language. Not to mention that the python style of programming (and the circular reference issue) encouraged having multiple classes in a single file, or even files with bare, classless functions (i.e. modules). And what kind of crap is “if __name__ == '__main__':”? Yeah, I did a lot of grumbling.

But a funny thing happened. I kept working with it, learned to do things the “python way,” and most of these things turned out to be not such a big deal. I found a lot to like about python. The lack of extraneous characters for defining blocks (a.k.a. significant whitespace) was refreshing, and made for more readable code. It has a deep and well-documented standard library, and the quality of external libraries I’ve come across has generally been extraordinarily high. I had come to enjoy writing python.

When learning something new, the natural reaction is to compare it to what we already know. That’s how the brain works, by making associations. The easy trap to fall into, however, is jumping to the conclusion that because it doesn’t quite fit the patterns that you’ve learned–because it is different–it is inferior or broken. This is often compounded by the normal frustrations any beginner encounters, especially when you’re in an environment where you’re expected to hit the ground running.

I believe this is related to what Sigmund Freud termed the narcissism of small differences, the idea that people with relatively minor differences in viewpoint tend to be more combative than those with major differences.

Over time, as you learn and start to see more of the whole picture, those annoying differences become smaller and smaller, often disappearing entirely. In fact, you’ll likely come to appreciate some of those differences.

It takes effort to fight those initial narcissistic tendencies. The next time you’re thrown into a foreign environment, make a conscious effort to keep an open mind, and bite your tongue until you’ve given it some time. After you’ve mastered the subject, then you’re entitled to bitch about it.

Christopher Hitchens, 1949 - 2011

“To be the father of growing daughters is to understand something of what Yeats evokes with his imperishable phrase ‘terrible beauty.’ Nothing can make one so happily exhilarated or so frightened: it’s a solid lesson in the limitations of self to realize that your heart is running around inside someone else’s body. It also makes me quite astonishingly calm at the thought of death: I know whom I would die to protect and I also understand that nobody but a lugubrious serf can possibly wish for a father who never goes away.”

– Christopher Hitchens, “Hitch-22”

Apache Considered Harmful

A recent article by Mikeal Rogers about the Apache Software Foundation’s outmoded idea of open source contributions struck a chord with me.

Some time ago I submitted a pull request to Flume, making a very minor change to get something to compile again after code reorganization had broken it. About a week later, I got a comment from one of Cloudera’s engineers saying that the patch looked good, but that since they were in the process of moving to Apache Incubator, could I follow some extra steps. The extra steps (create an account on Cloudera’s JIRA issue tracker, create an issue for the bug, generate a patch for my change and attach it to the issue) weren’t terribly onerous, but considering I had already moved on (and in fact had decided not to use Flume for my project), and had real work to get done, I put it on the back burner and eventually forgot all about it.

The genius of git and GitHub is how easy it is to contribute to projects. Fork, fix, submit. I submit patches to projects all the damn time because barrier to contribution is so low. Like most developers, I’ve got a job that keeps me busy, and any roadblocks big enough to take me out of my flow are usually going to stop me.

Someone more patient than I submitted a “proper” patch for my Flume issue about a month later, so my conscience is clear. I hope, however, that the ASF eventually embraces the new open source reality. Their software will be better for it.