Total Internal Reflection

Technology and Art


Code

Plenoxels
Transformer
Basis-Processing
Cataract
COMRADE
Duck-Angular
Exo
IRIS
MuchHeap
Snail-MapReduce
Underline
Lambda-Queuer
jQuery-Jenkins Radiator

Contact

Github
Twitter
LinkedIn

Site Feed

An Ode to the Generalist

Avishek Sen Gupta on 13 March 2023

This post is probably a spiritual successor to Resilient Knowledge Bases.

I fear for the death of the Generalist.

The Generalist is characterised not by his extreme capability to specialise in one particular area, though that is not an uncommon trait. He is characterised by his ability to shapeshift into whatever form that derives the maximum value around a particular set of circumstances. Business Analyst not around? He can write good stories, and hold the fort well enough until the BA returns. QA not around? He can devise a reasonable QA strategy. A project needs some UX practices in place? The Generalist will understand enough from first principles, as well as digest literature on the latest library, and produce something halfway decent. None of these cases imply that the Generalist stands alone. He knows fully well his limitations.

The Generalist is a Born Troubleshooter. This comes from his experience in having to figure his way out of numerous unfamiliar problems as they struck. He will be the first person you turn to on your project when the build is broken at 5 pm on a Friday evening, and you cannot figure out why it’s breaking. To be fair, the Generalist will not have all the information that is needed to redeem the situation. This leads us to the next trait of the Generalist…

The Generalist knows the Right Questions to ask. He is not infaliible, and he is not omniscient. He knows his limitations, especially when confronted with an unfamiliar domain. But he has built a mental framework which he can use to zoom in and out of the situation to map out an unfamiliar terrain or problem space. You may or may not have heard of a Role Playing Game system called Microscope. In that, players collaborate in building the history of a (usually fictional) world or universe. The flexibility of the system comes from the fact that at any point, a player can zoom out to describe events of a historical scale, like the rise and fall of a civilisation; equally he can zoom in to describe events of a single (fictional) person’s day and how that ultimately affected the outcome of a large-scale event. That is how the Generalist operates; sometimes he will ask 10,000 feet-level questions; sometimes he will ask why the contents of a particular register changed from 0x20 to 0xFF. These are not random questions he asks; he is simply figuring out the lay of the land, particularly the interesting spots.

The Generalist always has a Plan; and he lays it out freely. He knows that one of his primary objectives is to help others – who have more context of the problem, and have more knowledge – reach conclusions or resolutions. More often than not, he will sketch out his thinking to others, encouraging them to fill in the gaps, and point out the loopholes. He will want you to realise that “Oh, my event history ordering is incorrect because the sometimes the events are reaching the database out of order, and OMG I can’t depend on server clocks to establish causality”. That insight came from you, not him; his MO is to state the evident facts and build a chain of reasoning to help you – the expert – reach the conclusion that was already present in your head, but not accessed. The Generalist is thus a Team Player.

The Generalist has his Fundamentals firmly in place. He is not buffetted by the whims and fancies of the latest frameworks and libraries. That is not to say that he does not learn these, or is immune to charms of particularly compelling programming language. But he does not despair simply because he has not used the latest technology on his project. He makes bets on things that will force him to expand his dictionary of fundamentals, and learns those. He may not remember the latest API’s, but he understands the spirit behind the learning, and is fully capable of jumping onto the saddle of hands-on implementation if called for. But, the Generalist is always Learning. If he has yet to understand Functional Programming fully, he will attempt to incorporate that thinking into his toolbox. If he feels that learning Vim is worth it, because it is usually the lowest common denominator on all Unix-like operating systems, he will do it. He will select a technology, pluck the hardy core idea behind this technology, and file it away for the future.

The Generalist is a fierce Specialist in his preferred area of specialisation. He may be known for his expertise in this area, but he does not let this define him. He hones his knowledge and capability in this area with a single-minded fervour, because he knows that if something is worth doing, it is worth doing it extremely well. He does this not to show off, but because he believes in attaining some semblance of mastery in his chosen discipline.

I fear for the death of the Generalist.


tags: Software Engineering