How a programmer reads Darwin's Origin of Species

During the reading of Charles Darwin's The Origin of Species by Natural Selection, I had a persistent déjà vu. Later, I realized that the mechanisms described in the book strongly correlate with the mechanisms of enterprise development in large companies. Where ever-changing business requirements and programmers act as environmental conditions, and code as organisms.





To better demonstrate this idea, I took a paragraph from Darwin's book and replaced biological terms with terms from the development world . The proposals themselves remained original. The language is a bit specific, but in general, I think it's understandable.



Chapter V. The laws of variation. Short review



Our ignorance of the laws of variation is deep. In none of the 100 cases, we can determine the reason why this or that function has changed. But in all cases where we have the means for comparison, it turns out that the formation of smaller differences between the varieties of one component is caused by the action of the same laws as the larger differences between the components of the same library. Changes in conditions usually produce only fluctuating variability, but sometimes lead to direct and definite results: and these results may become more pronounced over time, although there is still not enough evidence to support this. Habit - in the formation of constitutional features, use - in improving the function and non-use - in their degradation and reduction, in many cases seem powerful in their action.



Homologous parts tend to vary in the same way, as well as to bind to each other. Modification of parts of the frontend affects parts of the internal structure. When one particular part develops strongly, it may divert development resources from its adjacent parts, and any part of the application structure that can be eliminated without damage will be eliminated. Structural changes at an early age can affect parts that develop later; undoubtedly, there are numerous cases of correlative variation, the nature of which we are unable to understand. Parts that are repetitive are variable both in number and in structure, and this probably stems from the lack of strict specialization of such parts for any particular function, so that natural selection did not impede their modification.A consequence of the same reason, perhaps, is the fact that software products at the lower stages of software product maturity are more changeable than higher-level ones, whose entire application structure is more specialized. Functions that are rudimentary, useless, are not subject to natural selection and therefore changeable. Component attributes, i.e. the traits by which the components of one library began to differ from the time they branched off from a common ancestor are more variable than library traits, that is, those that have been inherited for a long time and for which no differences have arisen during the specified period. In these remarks, we have dealt with special functions or parts, but nonetheless changeable, because they have varied more recently and as a result become different; but in chapter II we sawthat the same principle applies to the project as a whole.



We have made sure that in an area containing many components of a given library, i.e., where significant changes and differentiation have recently taken place, or where the production of new forms of components has been actively proceeding, in such an area and in such components, we still find on average the largest number varieties. Function signatures are highly volatile; they differ greatly among the components of the same group. The mutability of the same parts of the application structure was usually useful both for generating function signatures between two communication protocols of the same component, and for forming component differences between components of the same library. Any part or function that is excessively or exclusively developed in comparison with the same part or function in related components,must have undergone modifications to extraordinary proportions since the inception of this library; from this we understand why they are still often changeable to a much greater extent than other parts, since variation is a slow and long-lasting process and natural selection in such cases has not yet had enough time to master the tendency towards further variability and reversal to a less modified state. But when a component with an unusually developed function became the ancestor of numerous modified descendants, which, in my opinion, should be an extremely slow process that requires a huge period of time, then in such a case, natural selection has already managed to impart constant features to this function, despite the unusual development of it. Components,Those who inherited almost the same constitution from their common ancestor and were exposed to similar conditions naturally tend to give similar variations or sometimes return to some of the characteristics of their distant ancestors. Although, due to reversal and similar variation, new and important modifications cannot arise, such modifications will add to the beautiful and harmonious variety of development.



Whatever the reason, perhaps, for every subtle difference between library versions - and there must be a reason for each of them - we have reason to believe that the steady accumulation of favorable differences has caused all the most important structural modifications due to the life cycle of each component.



The terms I replaced in the original paragraph



  • genus -> library
  • view -> component
  • organ -> function
  • individual -> project
  • offspring and their parents -> library versions
  • nutrients -> development resources
  • organic beings -> software products
  • organic ladder -> software product maturity
  • secondary sex characteristics -> function signatures
  • gender -> communication protocol
  • strengthening, weakening -> improvement, degradation
  • solid and external -> external interface
  • soft and internal -> internal structure
  • nature -> development


I also replaced terms that would look strange in this context:



  • usage -> usage (since the word looks a little outdated)
  • organization -> application structure (so that the meaning is correct)
  • lifestyle -> life cycle


I also suggest that you familiarize yourself with the original paragraph, I hid it under the spoiler.



Read the original paragraph from the book
. 100 , . , , , , . , : , . – , – – . , . . - , , , , , , . , ; , , . , , , , , , - , . , , , , , , , . , , . , . . , , , , , . . , . , , ; II , . , , , . . , . ; . , . , , ; , , , , . , , , , , , . , , , . , - , , .



, , – , – , .






A little explanation



After a complete replacement, I noticed that it is very difficult to read the text (who would have thought?). There are many reasons for this. One of the most important is the selected paragraph. The fact is that this paragraph includes a short retelling of everything that was described in the chapter itself, so the text is very succinct and concise. Unfortunately, I could not find another suitable paragraph in which it would be possible to replace the terms with such minimal gestures.



So that the text does not look completely crazy, I will expand a couple of sentences in a little more detail.



Example 1



Original:

When one part develops strongly, it may divert nutrients from its adjacent parts, and any part of the organization that can be eliminated without damage will be eliminated.


Explanation of this idea in chapter V:

, , ; , , , , , . , , , , , . , , – , .




When one particular part develops strongly, it may divert development resources from its adjacent parts, and any part of the application structure that can be eliminated without damage will be eliminated.


An example from life: the icons in the Habr profile now look like just divas with a border, and once they were beautiful icons. Obviously, no resources are allocated to support and develop these icons. However, reading and navigating through the comments is much more convenient now than in the old days. Apparently, the development of comments takes away some of the resources from the development of icons.



Example 2



Original

Species traits, that is, traits with which species of the same genus began to differ from the time they branched off from a common ancestor, are more variable than generic traits, that is, those that have been inherited for a long time and for which during the specified period did not differences arose.



Explanation of this idea in chapter V:

Let us explain this with a simple example: if, in a larger genus of plants, some species had blue flowers, and others - red, then the color would only be a specific feature, and it would not surprise anyone if one of the blue species changed to red, or vice versa. ; but if all the species had blue flowers, then the color would be a generic sign, and its change would seem to be a more extraordinary phenomenon.


After replacing terms:

Component attributes, i.e. the traits by which the components of one library began to differ from the time they branched off from a common ancestor are more variable than library traits, that is, those that have been inherited for a long time and for which no differences have arisen during the specified period.


Real life example



If you use buttons from the Bootstrap CSS framework in a project, for example, it is obvious that the content of the .btn or .btn-primary classes will change more often than renaming these classes to something like .g-button or g -button-first



Conclusion



Although the article turned out to be so, semi-serious, but in any case, I think that we can take a lot from the natural evolutionary process and transfer it to development.



PS: Many thanks to my friends and colleagues. They had no idea why the terms were telling me.



All Articles