(Прошу прощения за каламбур, речь пойдет не о труде Кнута).
Предлагаю поделиться мыслями об эстетическом аспекте программирования. Что я имею в виду? Программирование — это выражение алгоритма в некоторой произвольной (одной из бесчисленно возможных) форме, и его результат — программа — может быть объектом эстетической оценки, т.е. может вызывать определенного рода переживание, сходное с тем, когда мы воспринимаем объекты традиционного искусства, и это переживание можно адекватно выразить в тех же терминах, что использует художественный критик. (Сам по себе алгоритм, скорее всего, красивым или некрасивым быть не может, так как не является формой выражения).
Возьмем, к примеру,
FizzBuzz. Ниже — типовые варианты его реализации:
Haskell:
main = mapM_ (putStrLn . fizzbuzz) [1..100]
fizzbuzz x
| x `mod` 15 == 0 = "FizzBuzz"
| x `mod` 3 == 0 = "Fizz"
| x `mod` 5 == 0 = "Buzz"
| otherwise = show x
Perl:
say 'Fizz' x $_ %% 3 ~ 'Buzz' x $_ %% 5 || $_ for 1 .. 100;
PicoLisp:
(for N 100
(prinl
(or (pack (at (0 . 3) "Fizz") (at (0 . 5) "Buzz")) N) ) )
Peloton:
<@ DEFUDRLIT>__FizzBuzz|<@ SAW>
<@ TSTMD0PARLIT>1|3</@>
<@ TSTMD0PARLIT>1|5</@>
<@ O12><@ SAYLIT>Fizz</@></@>
<@ O22><@ SAYLIT>Buzz</@></@>
<@ BTH><@ SAYLIT>FizzBuzz</@></@>
<@ NTH><@ SAYPAR>1</@></@>
</@></@>
<@ ITEFORLITLIT>100|<@ ACTUDRPOSFOR>__FizzBuzz|...</@> </@>
Что мы (т.е. я
) видим? Вариант на Хаскелле — это то, что приходит на ум первым, т.е. банальность. Решение на перле — самое короткое, но при этом запутанное, неряшливое — все принесено в жертву краткости. А вот вариант на пиколиспе — ясный, элегантный, небанальный — можно сказать,
красивый. Заключительная программа приведена для контраста.
Что это означает на практике? Что есть языки программирование более и менее красивые. Например, можно предположить, что С просто-напросто красивее С++, и т.д... Уфф... Надеюсь, что читать этот пост было легче, чем его писать.