The Codewright's Tale is a place to discuss the craft of software development. The focus is more about the human aspect of programming, there are plenty of sites which post the latest and greatest tools or blocks of 'how to' code. All the tools, methodologies, or languages in the world won't help if the primary obstacle of quality software is human nature and not a human invention.

Contributors

Friday, May 14, 2010

So the rookie coder is working at his new job, fresh out of college, when the team malcontent is overheard a couple of cubes over, "This place is so cheap! They should reimburse me for this technical book. It's a heckuva lot cheaper then a training class." However true that is, it hides a simple choice: keep the book and be out the money, or give up the book and pocket the cash - assuming the boss will foot the bill.

Recently a question on Stackoverflow reminded me of that rookie coder. Being fresh out of college gives you an amazing combination of overconfidence and cluelessness. Without any basis, it's easy to take the office attitude and run with it. You shouldn't have to buy your tools, your company should.

I disagree.

Why? Because they are tools. It's not even a cost thing. A professional should be responsible for knowing which tools they need to be most productive. Tour an airline maintenance facility and check out the workshop. A large area, maybe 1000 sq. ft., with nothing but large toolboxes; each with a name and a lock. The mechanics have to buy all their own tools, think wrench sets and so forth - not large things like engine dollies.

At first it seems a bit silly and redundant but when you start to think about it, it's easy to see that not everyone is going to want to spend the extra money on the high-end tools, or they might want extras of the same set for whatever reason. Also, consider the hassles with sharing, e.g. "Where are the 1/2 inch box-end wrenches?" By not making the tools shared, the 'Tragedy of the commons' is avoided.

Another example is chefs and their knives. You don't touch another chef's knives. The restaurant provides the big things like ovens and stoves, the chefs bring their own knives.

Back in the world of computers, I've brought in extra memory before. I told my manager so he'd know that some of my personal property was in the PC in case it needed to be worked on by the internal techs. I also put a note on the box itself. I would have had a bigger issue if they discouraged bringing your own hardware. Most shops like to provide the box itself because it minimizes their support issues but they shouldn't have any problems with you bringing accessories like monitors, keyboards, mice, etc.

To summarize, change how you think about tools and strive to use whatever makes you better at your job, even if you have to pay for them out of your own pocket. It's the 'Professional" thing to do.

2 comments:

The thing is, books are not knives or impact wrenches. A knife cuts stuff, however you want to cut it. An impact wrench (while applicable to many problems) does one thing and one thing only, loosens or tightens a fastener. A gap tool gauges gaps, wrenches are sized to fit. The 'company' way to tighten a bolt is to , well, tighten it. This is the single accepted method. Loosening weighs in the same.

Of course employees are expected to have tools that accomplish the same task, the art is in the order and knowledge of the process. However, the metaphor here is broken .. if I put my wrench on a bolt, I have only one direction to choose when tightening it. You can't infer the same in any programming language.

Knives cut stuff, wherever you provide some force, provided that the knife is sharp. All knives, if sufficiently sharpened produce the same result if used in the same way. That is on par with _running_ code, but not exactly writing it.

I agree with you, I think programmers should evolve independently of their employer and I encourage anyone to do so. The metaphors given, however, basically boil down to straw man arguments.

What you are discussing is _how_ to use a tool, not the tool itself, its a major difference. On the one hand we have knowledge, on the other we have languages.