Monday, 22 June 2020

Tools of the Trade

Before Leonardo da Vinci could create The Mona Lisa, he had to learn to use a paintbrush. As mundane as it seems, there was a day (at least one) when the only things Leonardo could paint wouldn't be worthy of a place on the fridge door.

A paintbrush is pretty simple, essentially a stick with some bristles attached ... I'm a bit dumb about art, but a painter would seem to have it easy in comparison to an auto-mechanic.

I don't know if you've ever looked in an auto-mechanics toolbox, those big red things with lots of drawers ... you maybe got a peek in the top two trays when your were having your oil changed and seen lots and lots of sockets of different sizes and drives, and extension bars, and things that look like they have universal joints in the middle.

The most interesting cavity in an auto-mechanics toolbox is usually the bottom draw and or cupboard. They spent a considerable amount of money filling up their toolbox with tools for every imaginable job, and then they found that there are some jobs that have no tool, or more commonly the official tool is extortionately expensive, so they welded a thing to another thing and chopped it into the right sort of shape to do the job. These tools they made don't only make the impossible possible, they might in some cases save literally hours of work ... absolutely ingenious.

However, what would you think if you took your car to an auto-mechanic to have the tires changed and they started loosening the wheel nuts using a blow torch, and then set about hitting the wheel nuts in the right direction using a chisel and a hammer ?

Let's talk about the tools of our trade ...

This slightly tongue in cheek tweet generated a lot of discussion, and a fair amount of heat.

The most surprising perhaps from well known members of the community:

I thought I would join in the conversation with this:

I thought I was being pretty precise, but it turns out what I wanted to say has more nuance than you can fit into a tweet, and is too complex to follow for a twitter thread.

My Name Is

The very fact that you can use the form "my name is" and have it make sense, means you are a well known professional at the top of your field.

There is no way that these people can't use a debugger.

During your career, you develop what feels like intuition about code ... It isn't intuition, it's informed by the model you have in your head of the languages and components that you use. As precision of the model increases so does your "intuition".

Being able to get through the development of a thing without experiencing the kinds of bugs that should require you to use a debugger is obviously the goal for any professional.

It's not very surprising therefore that you have professionals that say they don't use a debugger.

Don't and can't are very different.

That's Not Very Nice

This came in various forms:

  • You don't deserve a team
  • I wouldn't want to be on your team anyway
  • Oh, so you don't teach ?

Even a junior professional is expected to know how to use the tools of their trade, to some degree ... of course I would help them to use the debugger.

Below a junior, there might be an intern. An intern, that is a member of the team, or hopes to be one day, is welcome to camp out (virtually) next to me, ask me as many questions as they like.

Do What You Like

You must be the people who wouldn't mind having their cars set on fire in the course of having their wheels changed.

If I told you that I have never dumped a variable while writing a script, you would know I was lying.

When you are on your own, working locally on a thing, I don't care if you use alchemy and witchcraft to write your code.

However, once you have committed to a collaborative environment, that is obviously no longer okay.

Am I going to let you commit debugging statements to a staging server while you try to figure something out !? Obviously and clearly not, I wouldn't be doing my job if I did. 

If you don't have your development environment setup to debug the collaborative environment, or the requisite knowledge to do so, knowing that this is a thing you might have to do, you would seem unprepared to do your job properly.

Teams tend to develop a DSL for talking about bugs, they communicate with screenshots and internal references, line numbers and variable names and such.

This is a waste of time, there exists a very precise DSL for talking and communicating about bugs, and it belongs to your debugger.

We don't only collaborate on our successes, we sometimes need other members of the team to see exactly what we see. The fastest way to communicate and find your way out of these situations is using the tools of your trade.

Our Tools

On a scale of complexity from painter (my dumb idea of a painter) to mechanic, I guess we are somewhere in the middle, maybe a little closer to the mechanic.

I don't dispute that there is more complexity involved in setting up a collaborative debugging environment, than there is in a var dump ... because I'm not crazy, or being mean, or provocative just because we're on the internet.

Investing the time in learning how to use the tools of your trade properly, in discussing as a team how you will handle those situations where collaborative debugging is going to be required is just good sense.

Maybe, as a team, you will never need several of your skill sets to solve a bug, but you should definitely prepare for that eventuality.

Maybe, as an individual member of the team, you will never need a debugger locally, but you too should prepare for that eventuality.

Peace out phomies ...