Be the dog that wags the tail

Why does the dog wag its tail?

Because the dog is smarter than the tail.

If the tail were smarter, it would wag the dog.

The phrase wag the dog refers to times when some­thing of a sec­ondary impor­tance improp­er­ly takes on the role of some­thing of pri­ma­ry impor­tance. As I watched the record­ing of Tim Ewald’s excel­lent talk Clo­jure : Pro­gram­ming with Hand Tools it is the phrase that popped into my mind when Tim con­clud­ed that

The tools that you use shape the way you view the world.

Tim’s talk is on the dan­gers of blind­ly auto­mate with tools with­out ful­ly under­stand­ing them, and one of the strong points he made is that instead of being the mas­ter of our tools we have so often allowed them to dic­tate us instead. If you con­sid­er the pro­gram­ming lan­guages we use as part of the tools in our devel­op­er tool­box, they have a sim­i­lar ‘wag the dog’ effect on us as they restrict the pos­si­bil­i­ties we see and the solu­tions we are able to cre­ate when faced with a prob­lem.

If all you know is object-ori­ent­ed and imper­a­tive pro­gram­ming, then how will you even know if a bet­ter, more ele­gant solu­tion exists with func­tion­al, log­ic or oth­er pro­gram­ming par­a­digms? Or that they don’t?

In his let­ter to the Bud­get Coun­cil of the Uni­ver­si­ty of Texas, the great Dijk­stra wrote:

[…] func­tion­al pro­gram­ming imme­di­ate­ly dri­ves home the mes­sage that there is more to pro­gram­ming than they thought. […] It’s not only the vio­lin that shapes the vio­lin­ist, we are all shaped by the tools we train our­selves to use, and in this respect program­ming lan­guages have a devi­ous influ­ence: they shape our think­ing habits. […]

The best way to over­come the lim­i­ta­tions and “shape” that our tools have placed upon us is to active­ly seek a broad­er per­spec­tive, by expos­ing our­selves to dif­fer­ent ways of think­ing. What bet­ter way to do that than to try out dif­fer­ent pro­gram­ming par­a­digms and lan­guages. Luck­i­ly for us, we’re spoilt for choice at the moment – F#, Clo­jure, Scala, Haskell, Erlang, Go, Julia, Dart, Elixir, Rust, the list goes on, and each offers some­thing unique and inter­est­ing.


In his inspi­ra­tional talk The Future of Pro­gram­ming, Bret Vic­tor offer a glimpse into a past that many of us was nev­er for­tu­nate enough to expe­ri­ence; a past that had so much more vari­ety because there was no pre­con­cep­tion about what the “right” way is, so all of a sud­den every­thing is pos­si­ble and every­thing is per­mis­si­ble!

It is a sen­ti­ment that is shared by none oth­er than Alan Kay, who spoke of a wealth of his­to­ry that are worth revis­it­ing as you pon­der about the future, in his 2011 talk Pro­gram­ming and Scal­ing.


To wrap up this short post, don’t let the languages/tools we use mas­ter us, broad­en your hori­zons by learn­ing and see­ing the pos­si­bil­i­ties that your tools/languages might not want you to see, bet­ter your­self and become the mas­ter of your tools.


Be the dog that wags the tail.




Tim Ewald – Clo­jure : Pro­gram­ming with Hand Tools

Dijkstra’s let­ter to the Bud­get Coun­cil of the Uni­ver­si­ty of Texas

Bret Vic­tor – The Future of Pro­gram­ming

Alan Kay – Pro­gram­ming and Scal­ing