This was just on slashdot, so I imagine many will have already read about it, but for those who haven’t, here’s a wonderful metaphor to understand the difference between how scientists (biologists anyway) code, and how professional computer people (some of whom as also scientists) do:
Scientists see their software as a kind of exoskeleton, an extension of themselves. … The software may do heavy lifting, but the scientists remain actively involved in its use. The software is a tool, not a self-contained product.
Programmers see their software as something they will hand over to someone else, more like building a robot than an exoskeleton. Programmers believe it’s their job to encapsulate intelligence in software. If users have to depend on programmers after the software is written, the programmers didn’t finish their job.
The full post was writing by a fellow named John D. Cook and is available over on his website.
I’m definitely in the scientist/exoskeleton camp myself. More than 90% of the code I write will only run a single time once I finish ironing out the bugs. I don’t comment it, or document it and I certainly don’t bother designing a bunch of command line options (that’s what manually tweeking variables within the script itself is for!).
That said, I fully appreciate the importance of writing flexible and well documented code when designing software that will be used by others. My own research is only possible because I’m building upon progress made by other — far better — programmers than myself. Code ranging from python libraries that do simple tasks in efficient and intuitive ways (like pyfasta) to whole web-based graphical toolkits like CoGe.
Right now I have the first week of August blocked off for a code sprint that will, if successful, end with a working prototype of a web tool designed be of use to the maize community, not myself. Even as I begin laying other the framework of what I will need to accomplish, I am forcefully reminded again and again of the different skills and different mindset this attempt will require of me.
I can’t wait!
I like that description. I have tried to explain this dichotomy to several computer scientists and they looked at me like I was crazy. I think the other aspect you touched on is also key. Most of our programs only need to be run once, and then likely will never be touched again. At best we will come back by and scrap some code out of them for use somewhere else.
Comment by Noah Fahlgren — July 25, 2011 @ 6:56 am