Recently I seem to discuss and read about one theme regularly: It isn’t easy to describe though. I’ll elaborate from a few different points of view.
I recently talked on EURUKO, the European Ruby Conference. The main theme was about what I’ve learned since last year’s EURUKO. One of these things was how wildly different the ways are in which people approach learning a programming language. One guy learned about Ruby one day, bought the “pickaxe book” the next day and then started programming. Note that I explicitly don’t mention actually reading the book. This I guess is what Paul Graham means, when saying “So hackers start original, and get good…” in his essay Hackers and Painters. This particular one surely did it.
The other guy borrowed my pickaxe book, started reading and still kind of doesn’t “dare” to edit existing code or write new stuff — even though we of course do use version control. He is probably worried that his code might not be ‘good enough’ — whatever the measure. So in a way, he is more a “scientific” person and as Graham continues in the same sentence cited above “…scientists start good, and get original”.
So much about the differences. The similarities are just as interesting: Both started to learn a new tool, while of course using known tools, especially a text editor, file system browser and a shell. Now, while these are very basic tools to software people I think they are probably the most important ones — apart from the programming language. Let’s focus on the editor for a moment. There are sure quite a few editors available out there one could use: Emacs, TextMate, Notepad, vi to name just a few – and in random order.
To be (or become) a productive software person you should certainly learn (and use) one editor well, which is one of the tips given by the Pragmatic Programmers.
So, apparently you should choose your tools based on good reasons and then actually learn to use it well. This, by the way, does not mean that you shouldn’t look for other or new tools that might become available.
To make this clear: You should choose your tools. And learn how to use them well.
Now, to me this sounds a lot like craftsmanship. Craftsmanship in the sense Pete McBreen has introduced it in Software Craftsmanship. I think there’s much truth in this book (and really recommend reading it). And as far as I can see most of the software development I have seen is actually more like craftsmanship (on a very high level though) — or may be like manufacturing in some more advanced palaces, but certainly not yet an industry as many claim it to be. May be it’s even engineering or science, not “rocket science” though. 😉
So here we are, craftsmen knowing our tools and ready to actually start productive work.
Alas, as Robert L. Glass states in his “Computing Trends” series in IEEE Software under the title “Greece vs. Rome: Two Very Different Software Cultures” in which he opposes “the current trend toward a Roman, as opposed to a Greek, approach to building software”. (I think that’s the same ideas he presents in Software Creativity 2.0, one of his books.)
I feel that I experienced this in nearly every working place: Being a “Greek” carrying around my tools but currently mostly working in environments where tools have been standardised by the company: Editor and IDE, programming language (Thankfully and thanks to a great colleague we came around this constraint. You know who you are.), even file system and web browsers, FTP clients, compressing programs and telnet. The reasons for this are mostly (but not limited to) security. Kind of sad but true.
Well, if security is at stake, it would probably be a good idea to encapsulate software development from “business critical” systems very well, wouldn’t it? Even the best developers introduce bugs now and then. Not just (mis-) behaviour, but also security flaws. The same holds true for software testers who develop automated test systems, by the way…
The (to me) unanswered question is how we can get around having software people on one side who just love to do productive work on one side and having “standard tools” in the companies on the other side. I think we (“enterprises” and “hackers”) need to find a way to make both sides happy.
Even more happy than now — let’s not forget that software is a huge market where equally huge amounts of money is spent.
Enjoy tesing, programming and developing your business.
Add that to a good business idea and you’re very likely to be successful.