Tinker Tailor Engineer Spy

When I was in University I had a few good teachers, and I remember fondly Professor Lorenzo Farina.

Once, he§ came to class and ranted a bit about some job advertisement he had read: the job was for a software engineer, and mentioned they were looking for someone with a smanettone mindset.

Smanettone is an Italian term which in context meant something like “hacker” (in the Jargon File sense) or “tinkerer“. Back then, it was a bit of a shibboleth for people who were into cyber culture, *nix, FLOSS, security and so on. Those of us in the audience who were into that felt immediately positive about the company who had used this.§

Our teacher didn’t know that, so he interpreted it in a negative sense: who the heck are these people looking for? Someone who’ll turn knobs and flip switches without any sort of understanding of what’s going on? That is the opposite of what the engineer mindset should be!

The Tinkerer Mindset

Since the teacher welcomed feedback, we approached him to change his mind at the end of the lesson: that’s not what this is about! Being a a smanettone is about the joy of playing with something, push it beyond what it is designed for, and actually trying to understand it better. It’s about having fun while you build something because of your knowledge, not for lack of it!

There is a definition in the Treccani dictionary now, which roughly translates to

In computer jargon, someone who’s passionate and has fun experimenting, creating and changing the contents of their computer or of the software installed on it.

Vocabolario on line Treccani

It’s an ok definition! It’s not the one I’d write, but it’s close to what I think of as the tinkerer mindset.

(In praise of my teacher, he updated his world view, and I seem to remember he started using the term himself later on.)

The Engineer Mindset

So, I liked to think of myself as a smanettone. But I also like to think of myself as an engineer. I don’t think the two things are at odds.

I think the engineer mindset is about having a method. It does not actually matter what method exactly, but you should act with a plan.

Which is another factor: your actions should be intentional, you do X because you expect Y, not because you have no idea. When you get (or don’t get) a result, you try to understand why.

And you should be able to work logically. Logic is not all one needs in life or on a job, but it is a defining part of an engineering approach to problem solving and solution design.

The engineering mindset and the tinkerer mindset may overlap, but are separated and independent and not mutually exclusive.

I hate ChatGPT

ChatGPT and its ilk are incredible things. If someone had told me a few years back that we’d be able to have quasi-conversations with a bot I’d not believe it§.

But I hate the feeling of working with it, and I despise the concept of prompt engineering.

Prompt engineering is, to put it bluntly, not engineering. It is, at best, prompt tinkering, as it shares exploratory and fiddling aspects.

But it’s actually worse than that, because people do not have actual insights on what is happening, nor do they gain them by fiddling.

You hear stuff like “you should talk directly to the LLM” or “you should talk kindly and say please” or “you should ask to explain itself, and sometimes it works better“. In the OpenAI forums you’ll see people telling each other “oh yeah that works terribly with GPT3.5 try GPT4” but also the opposite.

There is actual engineering going on on top of LLMs. Stuff like RAG or HyDE or ReAct is cool and smart, and you can certainly build things of value on top of these things.

But a large part of it is prompt fiddling. You can’t even know how different LLMs (or versions of the same LLM) will react until you try them out, and when you do, you only know if something worked for whatever input you used, but you have no knowledge of how it will generalize. Sometimes a single different word may cause drastically different outcomes, for no discernible reasons.

You don’t even know if the same LLM will continue to work the same over time! They may be getting dumber while you use them!

Prompt fiddling can be fun, and may work at times, but it’s also deeply frustrating and inefficient.

Shamans and Medics

I once listened to a mythology class, which explained that in many mythologies people or animals are born out of a deity’s armpit.§

The explanation given was that, well, primitive people did not really understand procreation. An armpit is angular, hairy and humid. So, not that much different from female genitalia, right? If one thing gives birth, why not the other?

People did not understand things, they told each other vague explanations and did things that seemed to make sense to them.

There’s a beautiful story of an Arab doctor called to help a Frankish knight. The knight had an abscess to a leg, and the Arab doctor, armed with Greek medicinal theory, wanted to administer him some balm.

But a Frankish doctor came and suggested to chop his leg, “better to live with one leg than die with both!”. Of course the knight died.

Those Frankish idiots! They should have stuck with real science and a proper doctor: it would have been enough to rebalance his humors, and the knight would have been just fine. Or not.

The Frankish medics were not idiots, and they are more or less the reason surgery became the real thing in Europe. And the Arab doctors were not idiots either, they had centuries old theories, and sometimes their remedies worked, too.

But they didn’t actually have a proper understanding, and no way of gaining it, they were limited to vague explanations and things that sometimes worked, and sometimes killed people.

And I have the feeling this is where we’re at right now with LLM usage.

I can’t wait for the modern era to arrive.