September 10th, 2014

vit_r

Про ёжика в тумане, зазнайство, языки программирования и вериги

Пара слов по поводу разговоров о правильном языке программирования и прочих идеалах, а также упоминиания противоречий моих высказываний со всякой квазинаучной фигнёй.

Первым делом, психология программирования начала развиваться вместе с появлением языков высокого уровня. Пик был где-то в девяностых. Потом в консалтинг и науку пришли жулики и оно захирело.

Секрет тут прост: финансовая основа индустрии софта - это плохое качество. Есть отдельные отклонения, но в основном всё делается для того, чтобы делать долго, дорого, ненадёжно и плохо. Это касается как обычного тяп-ляп для веба, так и высокомудрых передовых разработок.

Я не буду углубляться, можно считать это моим частным предвзятым ошибочным мнением.

Программирование всегда было гуманитарной наукой, просто профессора хотят быть приписаны к естественнонаучным факультетам, боятся людей и изображают из себя учёных. В результате всё превращается в магию. Вместо нормальных измерений делают опросы, вместо экспериментов собирают личные впечатления, статистику делают так, что даже биологам было бы стыдно.

Плюс есть две базовых проблемы:

1. Всё интересное происходит внутри коммерческих фирм, а они не отдают наружу информацию о чём-то отрицательном. (Как правило, и наверх тоже не отдают, пряча всё на местах.)

2. Если делать эксперименты честно, надо проводить опыты на профессионалах, а не на студентах. Это во-первых стоит очень дорого, а во-вторых подопытные слишком обидчивые. То есть, опять же, практически нереально получить отрицательные результаты.

Если судить по статьям и популярным течениям, где-то с середины девяностых вся компьютерная наука в гуманитарной части превратилась в окучивание волшебных слов и карго-культов.

Опять же, дальше углубляться не буду. Кто хочет, может прочитать по ссылкам.

Теперь пару слов про то, чего я такой умный только отпускаю едкие комментарии и не хочу на пальцах всё доказать.

Исходя из того, что человеческий мозг работает на преобразованиях Фурье, хороший код должен легко раскладываться по низким частотам, не забивая фон высокочастотными гармониками.

В принципе, разговор должен идти на этом уровне. Причём, даже при наличии этой базы он не тривиален.

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

Но тут опять же надо вспомнить, что длинные тексты программисты не читают. То есть, мало того, что это дофига работы, она ещё и бесполезна.

Остаётся только способ консультантов: «Лягушка зелёная. Крокодил тоже зелёный. Поэтому он плавает, а не летает.»

Да, если говорить про код, надо смотреть на время жизни от 20 лет в типичной индустриальной среде. Одноразовые вещи в тепличных условиях не интересны в принципе. Даже, если они очень круты для решения каверзных задач и прочей демонстрации своего интеллектуального превосходства.

Ещё я говорю не только о читабельности. Есть много других характеристик, которые называются не так занятно, но бывают на порядок важнее. Например, глобальная сложность словаря или локальная надёжность. Последнее - это способность проекта выживать при любых локальных возмущениях. Грубо говоря, защита от умелых ручек.

От этого не спасает даже строгая типизация, потому что вся ругань компилятора изобретательными людьми просто затыкается.