While working with people who write code I keep noticing three vaguely defined but nonetheless distinct "roles", or "styles of thinking", or "behavioral patterns", or "skill sets" — I don't really know how to call this classification per se, but I came up with a descriptive name for each class.

I wonder if other people had similar impression.


Scientists research the field before starting to write code, devise a mathematically correct solution and then try to implement it as true to the model as possible. Along the way they don't care about readability, maintainability, performance or architectural beauty and usually end up with a mathematically correct spaghetti code. Which is not to say that it is immediately usable because scientists hate to work around ugly real-world cases that don't fall perfectly into their model.

Their understanding of things is based on scientific proof rather than on intuition which allows them to solve extremely complex problems where human intuition doesn't work well.

They are good at math and seriously consider it a perfectly understandable language to explain their solutions to others.


Engineers work by iteratively cooking up an imperfect but working solution and improving it watching how it behaves. They consider the solution "correct" when it complies to tests covering an arbitrary subset of use cases. Though they actually use the word "correct" as a shorthand for "ready to be made even more correct". Likewise, when they say "all" or "nobody" they usually mean "most" and "few".

To work with the notion of correctness as a process, rather than a state, they care very much about programming languages, tools and coding methodologies to produce beautiful maintainable code.

While trying to explain their solutions to others they tend to drown in the details of implementation precious to their heart, losing the big picture and skipping reasoning.


Teachers aren't as fluent in the realm of formal logic as scientists are, nor can they achieve the magical level of craftsmanship endemic to engineers. They are usually content with the broad understanding of how things work and quickly lose interest in endless refinement of a product to perfection, preferring instead to learn something new.

The unique skill of teachers is empathy — the ability to step into another person's shoes and understand how they think. This makes them able to explain things to other people, as well as understand explanations made by scientists and engineers. They are good at teaching (obviously) but also at writing documentation, talking on behalf of the team and hiring people.

Teachers posses a specific feeling of how much they can get sloppy with facts and deviate from truth to achieve better understanding of their explanation.

Random corollaries

Mixing of skills

As in role-playing games, these roles are by no means mutually exclusive: they are inclinations rather than limitations. A really experienced scientist can be a better engineer than a "natural" engineering rookie.

Comments: 3 (noteworthy: 1)

  1. Ilya Kutukov

    I want to notice that many of real scientists of 20-th century have their legs in the engeneering field like Feynman, Watson-Watt, Shennon, Brewer e.t.c.. And described negative scientist traits is more common for academic mathematicians (ugh, sometimes im really can't understand how someone can talk a lot about depths of lambda calculus, but missing trivial things like variables naming or incapsulation principle).

    Anyway precise solution can follow only the precise problems. There is not so much of them in software development world. So in the average project, team using engeneers approach will win.

    Recently in my company clear mathematican specializing in algorithms suddenly completely failed solving case of Travelling salesman problem which he was assigned to. This case has puzzled me, it was like a bird that suddenly failed to fly. Furher similar case was repeated with other employee, so i pointed out for yourself that clear mathematicans have a huge probability of critical miss due the black-white vision of problem and its solution.

  2. Ivan Sagalaev

    It reminds me of a quote from Dijkstra about "pure mathematicians". :-) Though he was hardly an unbiased observer…

  3. Yuri Zholobov

    Noteworthy comment

    Your trichotomy is biased, in my opinion. I'm not sure what will be unbiased one, but I'd like to criticize yours and tell about my version, which is no less biased. :)

    The term "teacher" in this context is associated with the anecdote http://www.anekdot.ru/id/587560/ which I'll translate roughly as "If you can't do - teach. If you can't teach - manage." People who do not want to specialize deeply do not necessarily have empathy. But they do have broad enough view on the world to be much better in communication with management than highly specialized or detached from reality types.

    The term "scientist" is wrong too IMO, because being disconnected from reality is not a feature of a scientist. Strictly speaking, it's a feature of an autist. I would agree if you call it "theoretical scientist", but you didn't. :)

    Overall I feel that your terms bundle too much traits to be usable in most situations. So I propose another set of traits instead:

    • Astronaut. Derived mostly from "architecture astronaut". A person detached from reality. A person in normal connection with reality is a default and has no special term.
    • Specialist. http://en.wikipedia.org/wiki/Specialist
    • Generalist. http://en.wikipedia.org/wiki/Generalist
    • Glue. A person excelling in communication. There was a story of an employee which was seemingly doing nothing, having no project-specific output. She was fired by management, and then it became clear that without her team members were not able to communicate, understand each other and solve team problems. She was pure "glue". I cannot find the link though.

    Your Scientist would be roughly Astronaut Specialist. Your Engineer would be Specialist I think. Your Teacher would be Glue Generalist. But in my work I see as many other combinations of these basic traits as the ones you identified.

Add comment