Programmer Caricatures
What images conjure up in your mind when you think of the word "Programmer"? The lonely bespectacled geek with disheveled hair shown in Hollywood movies?
Programming is largely problem solving fuelled by organised thinking. There are multiple diverse yet "right" ways to effectively think about and solve problems. No surprise then that there exists a lot of colour and diversity among programmers too.
Good programmers exhibit many fascinating traits and mindsets. Sketching from my personal journeys, few caricatures of effective programmers Ive known, learnt from and admired...
There are some notable type omissions as I don't have enough personal material to bring them out.
1: Computer Scientists
Intimate with the history of computing and its rich traditions which predate the computer. Deep knowledge of a variety of useful data structures, many puzzle solving tricks and a huge variety of algorithms. Experts in implementing a wide array of tools ranging from internet protocols, low level network components and custom databases. Expert understanding of the hardware where software would be deployed. Disciplined and methodical in how they organise their ideas. Great in writing technical specifications. These engineers have the best answer for technical questions that begin with "What ...". They know the knack of 'back of the envelop' calculations to predict how a certain implementation would behave under stress and other conditions during evaluation or design stage. Their skills and strong opinions are misunderstood for arrogance as they often turn down ideas and suggestions that do not hold technical merit.
2: Martial Artists
Can become anything that they will themselves to become. Plan their careers weeks, months and even years in advance. Disciplined, focused and all the time aware of the ticking clock. Exhibit high idealism. Can't put up with mediocrity and take upon themselves to re write systems and components if it can be made significantly better. Self motivated and actively involved in personal projects that teach them variety of useful skills. Prolific through a combination of intelligence and single minded drive. Tend to put their ambitions before everything else and may leave the team if not adequately challenged.
3: Commanders
The only thing that comes between these masters and the glowing monitor is the next command. Awe inspiring ability to flex their minds and bend the computer into submission. Commands are emitted in bursts, at the speed of their minds. Fastest to get from point A to point B. Work with a few well known universal abstractions (standard in, standard out, filters, sequences, queues). Slurp technical manuals along with their coffee, committing to memory details of exotic switches and esoteric commands that will be put to use precisely when its needed - 4 years from now! Almost exclusively work in Linux. "Ities" (re usability, maintainability etc) way down in the bottom of their todo lists. Work only with tools that resonate with their values. Socially awkward too, as people are confusing as hell and don't come with "man pages".
4: Sleuths
When you start working in a new environment its often an unsettling experience. But there are certain folks who enjoy the challenge of such environments. They thrive on suspense and have a knack of interrogation. They are like magnets attracting useful information spontaneously. Experts in trouble shooting and tracking down production bugs. Uncanny nose for where problems lurk. Good knowledge of business processes and how various systems co ordinate and come together. No one trained these sleuths internally. No one handed these sleuths documents or user manuals either. In fact I suspect they would hate receiving such training - as it spoils the fun for them. They just look at the right place, read code fragments, observe logs and "get" what the system is upto. Curious about things and full of interesting hypothesis. Always fun to hang with because they concoct hilarious gossip and make outrageous connections that are not obviously apparent but are often spot on. Take ownership and responsibility to keep things up and running. Invaluable assets and soon become the centre of gravity for all system decisions.
5: Domain Engineers
When a new project begins there is no structure. There is ambiguity everywhere. Dealing with ambiguity and arriving at structure are skills these Domain engineers possess. Experts in extracting requirements, asking the important questions and documenting them. These engineers are essentially expert application programmers who have garnered essential domain knowledge and use that to model the entities, interdependencies and operations that would run the system. Proficient in all areas of the system stack. Work closely with the product managers and project managers. Expert in database schema design and Application Programming Interface (API) specifications. Aware of system and enterprise design patterns, anti patterns and have the skills to organise the system around available tech frameworks and infrastructure. In a sense they are the target for our next type, the meta programmer.
6: Meta Programmers
Make life for domain engineers easier and more productive. These genius programmers program for other programmers. Responsible for designing libraries, software development kits (SDKs), frameworks and sometimes even new languages and compilers. Exhibit strong opinions, philosophies and offer commentary and solutions on whats wrong with the state of software development. Very convincing in their arguments and often have a fan-following. Don't get along with other alpha programmers harbouring conflicting philosophies.
7: Gurus
No engineering team can stand on the back of a few lone programmers. Gurus are expert programmers who are genuinely and selflessly invested in growing teams and turning each one in them into rockstars. Showing them the right way think, to code and work collaboratively in a team through real life examples and internal sessions. Gurus understand that along with hard skills in software engineering, soft skills like tips on disciplining the mind and ego, developing important life habits, essential reading lists etc. go an unreasonably long way in making lives qualitatively better.
8: Post cloud programmers
The very essence of what it means to be a programmer was and will always be in a state of flux. This era is no exception. Programming itself is getting further and further abstracted from computers, peripherals and physical infrastructure. Large chunk of application programs are now declarative and look like rules. Physical infrastructure is not only specified but also reified in the cloud merely through data configuration. Computing power is commodity. Most earlier-era areas of friction have vanished! Rules of the game have turned around the head, as the laws governing the physics of computing have mutated. The programmer described in this section has come of age in this post cloud era. These programmers build on top of huge black box abstractions and cloud platforms. These platforms were unheard of in preceding generations. 1 generation is roughly 2 years and doubles the preceding generations complexity in this industry. This is flux most have never experienced before! These programmers consume knowledge from Youtube, Hacker News, Stack Overflow and a battery of similar incredible resources. They have at their disposals, smart Integrated Development Environments (IDEs), social networks, AI assistance and other resources to get just in time information and re-orient themselves along necessary frameworks du jour.
9: Grand Masters
Deep understanding of software engineering including the critical human elements involved in the discipline. Experts in putting together various pieces, both technology and personnel in the larger system. What fits where and more importantly why and when? Keenly track the world outside and leverage unique opportunities. May have been any of the above types at some point in their careers. In a position to purpose technology to deliver competitive advantage for business. Can communicate, inspire and articulate vision and instil a healthy tech culture inside the organisation and forge partnerships outside it. At ease obsessing about detailed engineering specifications, dealing with flux, acknowledging tech and non-tech constraints, setting up processes and identifying and addressing gaps and bottlenecks that will hurt the organisation later in time.