2013年3月24日日曜日

The Myth of the Genius Programmer

A bit old video from Google I/O 2009, but still a good talk by Brian Fitzpatrick and Ben Collins-Sussman.


"A pervasive elitism hovers in the background of collaborative software development: everyone secretly wants to be seen as a genius. In this talk, we discuss how to avoid this trap and gracefully exchange personal ego for personal growth and super-charged collaboration. We'll also examine how software tools affect social behaviors, and how to successfully manage the growth of new ideas."
From their slides:

Don't try to be a genius
Collaborate early and often
Pay attention to your tools
Pay attention to timing

Lose the Ego
Criticism is not Evil
Embrace Failure
Iterate Quickly
Practice is Key
Be a Small Fish
Be Influenced
Be Vulnerable
Tools Matter

When I was doing crisis response, I told people "You don't have to be a super programmer to help. There are lots of things you can do." One of the developers told me that you do have to be a super programmer to be effective. I guess they're both true. In many cases, we did hackathons for crisis relief, and in some cases we did not have effective products created. But in some cases we did. And those people weren't necessarily super programmers- they were made through collaboration, among various developers admitting they are good at whatever and not good at others.

One of the amazing app was built for Android - it collected various data on wind direction, weather, radiation etc for the people living in Fukushima. However he didn't know about app development of all the platforms. Not all the citizens in Fukushima use Android nor iOS, so in order to deliver information effectively, he had to tap to other people to help, give advise, review the code and help fix quickly. I remember once that we were having a meeting on crisis response, and after the meeting during the dinner they started asking for help, opening their PC and debugging in an Izakaya ;)

Not being a super programmer, elite, doesn't mean you can't contribute- knowledge of technology itself works in some cases. For example I don't code, but when we started a movement called Hack for Japan, I used all the existing technologies for the platform without doing any coding. I wrote a blog post to start the movement, set up Google Sites to set up the homepage, set up Google form to register, set up Google Moderator to get the ideas come through, Google Wave to get the ideas brainstormed, Google spreadsheet to get the projects listed and call for volunteers visible, etc. I am not a programmer in the first place, but there were things I could do to get things started using technology, and build the infrastructure in a couple of minutes or hours so that everyone can start working on it. Of course it doesn't mean people should give up coding nor give up being a better programmer (and of course I am still learning...).

I remember I once had a phone call from a non-profit in Tohoku helping with crisis response, he had a list of addresses that he wanted to map. I could have grabbed those address lists and mapped it for them, but if I did that, every single time they need to make a change to that list, they need to call me. That won't work. I knew they were not developers, but I told them to open their browser, hit the URL of Fusion Tables, add the address and map it. For non-programmers, just knowing the tools will be super useful.

Disclaimer: The opinions expressed here are my own, and do not reflect those of my employer. -Fumi Yamazaki