Кнут, посрамлённый шестистрочником
Не первый раз встречаю эту историю. Её преподносят как идею о превосходстве философии Юникс, где заносчивые снобы оказываются посрамлены находчивыми инженерами со скотчем.
На мой взгляд, эта история впечатляет по-другой причине.
Краткое изложение
В июне 1986-го выходит статья про литературное программирование. В ней, автора методологии, Дональда Кнута просят продемонстрировать подход и решить тривиальную задачу:
Написать программу, которая принимает текстовый файл и целое число k.
Программа должна вывести список из k наиболее часто встречающих слов, в порядке убывания.
Дональд демонстрирует своё решение. Он использует собственную систему литературного программирования WEB. Он демонстрирует всё, от парсинга числа, до разбора строк по-словам, приведение к единому регистру (нижнему) и функцию вывода результата.
Решение занимает семь(!) страниц печатного текста!
Маккилрой, которого попросили отрецензировать Кнута, обсуждает недостатки системы WEB, слабые алгоритмические места (например, привязку к латинскому алфавиту) и предлагает пойти дальше и дополнять человекочитаемый код ещё и наглядной диаграммой.
А потом предлагает заменить семь страниц шестью строчками
1 tr -cs A-Za-z '
' |
2 tr A-Z a-z |
3 sort |
4 uniq -c |
5 sort -rn |
6 sed ${1}q
И рядом также шесть небольших строчек с объяснением каждой команды.
{: .fullwidth}
И после такого, уже как-то пофиг, что Кнут написал свой пример совсем с другой задачей - продемонстрировать литературное программирование. Рецензия Маккилроя получилась вещью в себе с очень наглядной разницей в подходах.
Кнут и Маккилрой стукаются яичками
Из этой заметки делают далеко идущие выводы. Например:
- https://mattrickard.com/instinct-and-culture
- https://leancrew.com/all-this/2011/12/more-shell-less-egg/
Тут и философия Юникс (которая имхо, сформировалась сильно опосле смерти самого Юникса), и сильные аналогии (яйцо Фаберже Кнута против стальных яиц Маккилроя).
На мой взгляд, пример Маккилроя это отличный пример того, когда меньше это больше (less is more).
Короткие наглядные команды лучше подробных многословных инструкций.
Короткое и наглядное - самоочевидное.
А самоочевидное не требует никаких сложных систем.