услуги по уменьшению энтропии

The Art of Unix programming(TAOUP). Eric Raymond

The Art of Unix programming(TAOUP). Eric RaymondThe Art of Unix programming(TAOUP). Eric Raymond

Классическая книга Эрика Реймонда о истории возникновения UNIX подобных систем с популярным обьяснием самых основных идей и концепций. Особенно полезна «молодежи» которая родилась после наступления эпохи юникc.

Приведу пару определений важных концепций которые мне понравились:


Compactnessis the property that a design can fit inside a human being's head. A good practical test for compactness is this: does an experienced user normally need a manual? If not, then the design (or at least the subset of it that covers normal use) is compact. Compact software tools have all the virtues of physical tools that fit well in the hand. They feel pleasant to use, they don't obtrude themselves between your mind and your work, they make you more productive — and they are much less likely than unwieldy tools to turn in your hand and injure you. Compact is not equivalent to ‘weak'.

A design can have a great deal of power and flexibility and still be compact if it is built on abstractions that are easy to think about and fit together well. Nor is compact equivalent to ‘easily learned'; some compact designs are quite difficult to understand until you have mastered an underlying conceptual model that is tricky, at which point your view of the world changes and compact becomes simple. Very few software designs are compact in an absolute sense, but many are compact in a slightly looser sense of the term. They have a compact working set, a subset of capabilities that suffices for 85% or more of what expert users normally do with them. Practically speaking, such designs normally need a reference card or cheat sheet but not a manual.


Orthogonality is one of the most important properties that can help make even complex designs compact. In a purely orthogonal design, operations do not have side effects; each action (whether it's an API call, a macro invocation, or a language operation) changes just one thing without affecting others. There is one and only one way to change each property of whatever system you are controlling.

Your radio has orthogonal controls. You can change the station it's tuned into independently of the volume level, and (if the radio has one) the stereo balance control will be independent of both. Imagine how much more difficult it would be to use a radio on which the volume knob affected the tuning — you'd have to compensate by tweaking the tuning control every time after you changed the volume. Worse, imagine if the tuning control also affected the volume; then, you'd have to adjust both knobs simultaneously in exactly the right way to change either volume or tuning frequency alone while holding the other constant.

Кроме всего прочего, принципы демонстрируются на примере рабочего(хотя и устаревшего) софта, в том числе и авторства самого Эрика. Вообще удивительно почему эту книгу не рекомендуют вместо всяких там Бучей и Страуструпов с их мегоабстрактными паттернами и ООП. Книга в свободном доступе - The Art of Unix programming(TAOUP)