📜 ⬆️ ⬇️

Abstract programmer

I will begin with a story about programmers that I have heard repeatedly.

I asked Joe to write a simple program that makes <xyz>. The work was there for several hours, at worst for the day. It took him several days, for which he wrote a much more complex framework than was required. Why is he so naughty again?

Perhaps the fact is that Joe is an Abstract Programmer ( AOP ).
Here are some template phrases ( snowclones )

If you often over-engineer your programs, you may be AOP .
')
If you spend more time thinking about tomorrow's problems than current ones, perhaps you are AOP >.

If you like to look for deep connections, feel a pleasant shiver from unconscious insights, or reason with analogies, perhaps you are AOP .

The need for abstractions

Software development is one of the few activities in which one constantly has to deal with abstractions. Programming languages, data types, graphical representations, control flows, etc. are real-world abstractions, hardware abstractions, and often abstractions of abstractions.

The sharp increase in processor performance (in accordance with Moore's law ) creates a need for abstractions. I started to program on computers with processors, in which transistors went hundreds. The Motorolla 6800 had 4100 transistors and a clock frequency of 1-2 megahertz. Zilog Z80 had 8500 transistors and a frequency of 2-8 MHz. Understanding the operation of processor registers, interrupts, and other physical processes in one sense helped a lot when it was necessary to force these computers to do something really useful.

Now in mass production processors are launched with a billion or so transistors. For example, Intel Core i7 contains about a billion transistors, and has a clock frequency of 2-3.5 GHz.

This is approximately a billion times the computational power of computers thirty years ago. Man, however, failed to evolve so noticeably. There was a need to effectively use the increase in processor power. This is where compilers, virtual machines, complex interfaces, various optimizers, high-level programming languages, and other tools appeared. Between the hardware and modern programs there are many layers of abstraction. And, of course, they are necessary.

Thus, there is nothing surprising in the fact that programming attracts people with a penchant for abstract thinking ... and, perhaps, a person with abstract thinking has more chances to enjoy work and achieve success in this area.

But, arguing in this way, it is very easy to forget that not all people have abstract thinking. You can even conclude that all programmers are abstractly oriented, or it can be mistakenly concluded that abstract thinking is the best option for them.

Abstract thinking

To begin, consider the definitions
Abstract (adjective)

Abstraction (noun)

Abstractions are, by definition, the simplification of information, which is achieved by considering a large number of examples and compressing them into a general pattern.

For some people, abstract thinking is natural, while others prefer concrete facts. Abstractly speaking, it is about the way people process information .

Consider the Myers-Briggs type personality indicator, which is widely used in business. The indicator allows you to define four types of personality, which are divided into based on intuition and common sense (N and S, if you use the typology of symbols) - respectively, the abstract and concrete thinking. (There are other psychological studies with a similar division of personality types)

We list some features that manifest themselves in abstract and concrete thinking.

Due to the fact that many people adjust their behavior to circumstances, you can also interpret the above information as an abstract or concrete current state of consciousness, although it is believed that each person has a dominant tendency.

Signs of abstract / intuitive thinking


Signs of concrete thinking


Back to joe

Let us return to the story about Joe, which began this article, where he complicated (over-engineer) code. For an abstract-oriented programmer, everything is logical


However, when, during communication with Joe, we asked him to solve only Problem X, while he knew that Y and Z are inevitable in the future, we doomed him to frustration because of poorly performed work or even the confidence that in the future make extreme.

This is where the current situation comes to the fore. The ability to think ahead can make you a hero. Also the ability to think in advance easily turns you into a burden. Concentrating solely on immediate problems, you will become a hero ... or a burden.

The trick is in understanding what approach would be appropriate in a given situation, in other words, adapt .

It is also very important to coordinate the chosen strategy with colleagues, in other words, communicate .

I will give some reviews that I have heard about abstract programmers ...

Positive


Negative



... and the same thing about specifically targeted programmers ( CPC )

Positive


Negative



Mini test

List A. How many of the items in it describe you in the best way? (Answer without thinking)

  1. You are more interested in the idea in general, than the subtleties of its implementation
  2. You often think about the fate of mankind
  3. You can easily distinguish general patterns from concrete examples.
  4. You often talk about the complexity of life
  5. Do you think that almost everything can be analyzed
  6. You can easily understand the new theoretical principles.
  7. You often spend time thinking about how to do something better.
  8. You can easily calculate the different ways in which the situation can go

List B. How many of the items in it describe you in the best way?

  1. You are bored reading theoretical books
  2. You prefer to rely on your experience, rather than on theoretical alternatives.
  3. It's important for you to try doing something with your own hands.
  4. Analyzing the situation, you focus on its current state, rather than possible consequences.
  5. As a rule, current classes worry you more than future plans.

If you agreed with a larger number of items from list A than from B, you must be abstract oriented. Conversely, if statements from list B prevailed, you are a particular type of person.

[I want to make a reservation right away. First, the type of personality is not destiny. Very often, life requires us to adapt our behavior for the sake of family, work, friends, etc. Secondly, it may well be that, depending on your current situation, you can answer the same questions differently. Thirdly, it’s about describing your dominant way of thinking - no need to take it as a call to action.]

Adapt thinking

A few years ago I heard a good analogy. You can be right-handed or left-handed. Most people use one hand as the main hand, some are fluent in both. But just from the fact that someone often uses his right hand, it does not follow that he does not need the left at all. In addition, some tasks require the use of a specific hand - try using scissors for right-handed left-handed or driving a car, switching speeds with the wrong hand, which was assumed by the manufacturer.

We all know how to handle both facts and generalized patterns, but more often we have a tendency to something alone. In the same way, there are tasks for which a certain type of thinking is more suitable. From my own experience, I can say that programmers get stronger when they understand their natural inclinations, but learn to adapt if necessary.

Here are some examples of tasks in which certain types of thinking are preferred (they are all generalizations)



I did not set a goal to show what style of thinking is better. Instead, I advocate the idea of ​​self-awareness and exercise flexibility in thinking and communication.

Being an absolute abstractionist, I want to finish with a wonderful example of abstract thinking.

All generalizations are false. Including this. Mark Twain

And Mark Twain was an abstract writer ...

Source: https://habr.com/ru/post/209386/


All Articles