The difference between How and Why
Derek Sivers’ 7 reasons I switched back to PHP after 2 years on Rails article is getting a lot of link love if for no other reason than it is about Ruby, and has a rather inflammatory title. I don’t know enough of either language to comment on the technical merits, but the section quoted below sums up the article for me.
I don’t need to adapt my ways to Rails. I tell PHP exactly what I want to do, the way I want to do it, and it doesn’t complain. I was having to hack-up Rails with all kinds of plugins and mods to get it to be the multi-lingual integration to our existing 95-table database. My new code was made just for me. The most efficient possible code to work with our exact needs.
This brought to mind the state of testing education. Too often schools / technical colleges are churning out freshly minted QTP or similar drones who can make QTP jump through some impressive hoops. The problem is that I don’t know many organizations that actually use the licenses they purchased. Instead, I am seeing more and more companies explore Selenium and Watir. These new grads see every automation project as a QTP one (and if it is slightly more complicated than the tutorial then they are screwed).
(Entire organizations can fall into this trap too by trying to force and application to do what it was not designed to do. Just because it can made to jump through the flaming hoop doesn’t mean it should. I would argue that using Selenium for performance testing is one of these questionable hoops.)
Derek is not a programmer by trade (though maybe he could be considered such now) and so does not have the computer science folklore to back him up, instead he learned by doing and doing so in PHP. Or you could say he had the HOW to do something, not the WHY.
When I teach my QA classes, or when I am learning a new technique or technology I strive to teach / learn the WHY of what I am doing. The HOW then can be tweaked to whichever tool I am using at the moment. For example, in my Python class we spend a great deal of time talking about types, loops and ifs. Not because the language is heavy in details on these areas, but these are common to all languages. The goal is to not only teach them Python, but basic programming as well. If they understand WHY to use a certain construct, the language simply becomes the HOW. We spend at the end of the class a tiny bit of time looking at Perl to illustrate this.
I recommend everyone start caring more about the WHY as they go through the career. As someone who used to be a WinRunner specialist, knowing why do automate something is a certain way is much more useful long term than just knowing how to automate it.