Искусство программирования
От: Basil B Россия  
Дата: 14.12.16 23:06
Оценка: :))
(Прошу прощения за каламбур, речь пойдет не о труде Кнута).

Предлагаю поделиться мыслями об эстетическом аспекте программирования. Что я имею в виду? Программирование — это выражение алгоритма в некоторой произвольной (одной из бесчисленно возможных) форме, и его результат — программа — может быть объектом эстетической оценки, т.е. может вызывать определенного рода переживание, сходное с тем, когда мы воспринимаем объекты традиционного искусства, и это переживание можно адекватно выразить в тех же терминах, что использует художественный критик. (Сам по себе алгоритм, скорее всего, красивым или некрасивым быть не может, так как не является формой выражения).

Возьмем, к примеру, 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|...</@> </@>


Что мы (т.е. я ) видим? Вариант на Хаскелле — это то, что приходит на ум первым, т.е. банальность. Решение на перле — самое короткое, но при этом запутанное, неряшливое — все принесено в жертву краткости. А вот вариант на пиколиспе — ясный, элегантный, небанальный — можно сказать, красивый. Заключительная программа приведена для контраста.

Что это означает на практике? Что есть языки программирование более и менее красивые. Например, можно предположить, что С просто-напросто красивее С++, и т.д... Уфф... Надеюсь, что читать этот пост было легче, чем его писать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.