Konstantin Lvov - November 3rd, 2007 [entries|archive|friends|userinfo]
Konstantin Lvov

[ website | Почти Напрасный Труд ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

November 3rd, 2007

дизайн, principles, Quality Without A Name [Nov. 3rd, 2007|11:44 pm]
Про качество "Quality Without A Name" (термин ввел очень известный как в архитектурных, так и в программерских кругах архитектор Кристофер Александр), о котором пишет известный программист Стив Йегге в блог-статье "The Pinoccio problem". Он говорит, что это безымянное качество присуще всем "хорошо спроектированным" ("well-designed") системам, и приводит в пример редактор Emacs *. Я же замечал проявления этого самого "абстрактного и неформулируемого" принципа и в редакторе Vim, например, в том, что команда :%s//NewValue/g заменит на "NewValue" содержимое регистра "/" **. И таким же образом будут вести себя команды :g//t$ *** , :g//d **** и т.п. Мне кажется, что это признак очень правильного дизайна системы, когда она делает именно то, что я имею в виду, даже в том случае, когда я еще точно не знаю, как именно корректно сформулировать свое требование, и даю инструкцию, руководствуясь не документацией, а своим собственным представлением о том, как должна выглядеть команда, которая делает то, что я хочу.



*
Цитата из Стива Йегге:

People have observed that Emacs has ... Quality Witout A Name ... : a nice, organic, comfortable rightness that fits like a pair of old jeans, or a snug warm chair in a library by a fire.

Красиво излагает, однако.

**
Регистр, обозначаемый "/" в редакторе Vim хранит содержимое последнего поиска. Команда "s" означает "substitute", и предназначена для замены, грубо говоря, одного слова на другое. Ее синтаксис и семантика примерно такова: инструкция :s/OldWord/NewWord/ значит "заменить вхождения OldWord на NewWord". Если дать команду s с пропущенным аргументом OldWord (она будет иметь вид :s//NewWord/) , то в качестве OldWord редактор Vim будет использовать содержимое последнего поиска. Это, на мой взгляд, очень удобно, и к такому поведению привыкаешь моментально.


***
:g//t$ - Скопировать строки, содержащие вхождение регистра "/", в конец файла.

****
:g//d - Удалить строки, содержащие вхождение регистра "/".
LinkLeave a comment

navigation
[ viewing | November 3rd, 2007 ]
[ go | Previous Day|Next Day ]