Comments 13
В то же время ещё до появления ЭВМ программисты знали, что чтобы написать хорошую программу
интересно, что программировали программисты до появления ЭВМ? Кто выполнял их программы и на каком языке?
Просто интересно, это оговорка или какой смысл в это все таки вкладывается.
Вот Лобачевский придумал геометрию в которой параллельные могут пересекаться, если вдруг заявить что кто-то знал что могут существовать такие геометрии до Лобачевского, зачем так передергивать?
Лобачевский придумал геометрию в которой параллельные могут пересекаться
Вы неправильно поняли геометрию Лобачевского.
До ЭВМ были и механические вычислительные машины. Но автор письма из "альтернативного пошлого" называет "программистами" всех, кто составляет алгоритмы, безотносительно того, кто именно будет их выполнять - искусственный вычислитель, или человек. В любом случае алгоритмы должны быть просты и понятны человеку, и достаточно надёжны, чтобы при всех сценариях исполнитель не сделал чего-либо плохого.
В любом случае алгоритмы должны быть просты и понятны человеку
Разве не существует очень сложных алгоритмов которые тоже нужны, то есть имеют практическое применение? Разве человек не способен понять любой алгоритм если в нем заложен какой-то смысл? Или вы сторонник теории о том что домохозяйка не только должна быть способна управлять государством, но еще и алгоритмы понимать, поэтому нельзя превышать определенный уровень сложности при разработке алгоритмов?
я думаю вы хотели сказать что изложение алгоритмов на каком бы то ни было языке не должно создавать избыточной сложности не присущей данному алгоритму, но которая добавляется исключительно из способа такого изложения.
Слово "избыточной" здесь принципиально важно, по моему.
Тут не говорится о вычеслительной или любой другой сложности алгоритма как целого. Речь идёт о простоте его понимания. Например, сколько времени потребуется коллегам, чтобы разобраться в коде. Любой алгоритм можно записать как очень просто, так и переусложнить.
Сложные алгоритмы всегда можно декомпозировать на небольшие, каждый из которых будет прост и понятен. (Локальная простота.) Суть втом, что каким бы сложным не казался алгоритм изначально, всегда найдётся возможность устранить это "избыточную" сложность. Ну или как минимум нужно к этому стремиться, задумываться об этом))
Суть втом, что каким бы сложным не казался алгоритм изначально, всегда найдётся возможность устранить это "избыточную" сложность.
я не могу с этим согласиться и у меня есть стандартный пример:
если вы должны написать или понять Быстрое Преобразование Фурье, вы должны знать откуда взялось и зачем нужно просто Преобразование Фурье, вы должны знать понимать про двойные интегралы, про комплексные числа, высшую математику. Тут нет никакой избыточной сложности! Все это надо знать хотя бы, чтобы понимать как проверить что ваш алгоритм действительно работает, не говоря уже о проверке его параметров. Ничего тут декомпозировать у нас не получится все надо знать в комплексе.
А вот замутить исходную идею алгоритма всякими лямбдами, рекурсиями и монадами и еще черт знает чем это можно запросто, тут к сожалению ограничений нет.
В "письме" есть цитата Эйнштейна (скорее всего), что проще какого-то предела упростить не получится - будет только хуже.
Но акцент делается прежде всего на "простоту понимания кода". Т.е. тут важны количество и читаемость идентификаторов, знаки препинания, предсказуемая последовательность выражений, наиболее удачные инструменты и т.п. В этом же плане, например, декларативный стиль часто выигрывает у императивного.
Думаю, не стоит сводить всё к устранению именно "избыточной" сложности, которую я понимаю так, что есть какая-то базовая логика, но она "переусложнена" какими-то лишними действиями или кодом.
Что же до FFT... Код из вот этого примера определённо можно упростить. Задача интересная, есть любопытные идеи. Найти бы на это время...
Что же до FFT... Код из вот этого примера определённо можно упростить.
ссылка огонь :) ! Только ассемблера не хватает.
Хотите сказать, что до 1942 года не было программистов? :)
А как же Чарльз Бэббидж, Ада Лавлейс, Пафнутий Львович Чебышёв и многие другие....
Всё верно. А ещё Чёрч, Рассл и Хаскель и прочие математики программисты, развивавшие теорию вычислений.
Евклида ещё стоит вспомнить )
Угу. Ещё больше меня впечатлили алгоритмы расчёта количества кирпичей для крепостных стен или динамики поголовья в стаде - клинопись на глиняных табличках. Суровые шумерские программисты из третьего тысячелетия до нашей эры...
Кредо программиста (в приложении к стилю кодирования)