Serge Bobrovsky (sbobrovsky) wrote,
Serge Bobrovsky
sbobrovsky

"приходится мал-помалу вникать в ересь" (с)

На очередной итерации думания про то, как разрабатывать сверхсложные программные системы без ошибок, достиг очередного сатори (но пока не самадхи:). Случается это где-то раз в несколько месяцев. Очередной причиной послужил тут мой случайный натык (с последующим зависанием) на изумительный ресурс mathoverflow.net (существует с 2009-го, Карл! а пацаны и не знают).

В итоге, как говорится, "очередные кусочки паззла сложились", и уже где-то около 50% чего-то там (может чуть меньше, но может даже и чуть больше) выглядит достаточно целостно.

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




Главное -- это что выделение в процессе разработки понятий programming in small и programming in large ошибочно, и первый шаг в неверном направлении делает и всю последующую траекторию лишь уводящей от цели. Эта вот классическая фигня программирования по-маленькому и по-большому постоянно меня сбивала.

Моя версия:) : в любой крупной системе есть "движок", и есть "прикладная часть". К каждой из них предъявляются достаточно оригинальные и слабо пересекающиеся требования. Каждая из них создаётся с помощью качественно разных механизмов.

Движок -- это то, что в системе рассыпается при первой встрече с highload. Идеология его построения -- вертикальная изолированность (многослойность).

Прикладная часть -- это то, что в системе рассыпается при первой встрече с юзерами (что серверное, что клиентское, неважно). Идеология его построения -- горизонтальня изолированность (независимость модулей). Кроме того, прикладная часть обычно любит рассыпаться при встречах с программистами :)

...говорю поставьте цели себе на год. то молодежь еще пиздит шо там функциональщины хочет, типы хаскель. а те пару дебилов "пройти курс по жаве (и список из 3 курсов элементари)" второй говорит "переписать логинг с log4j под log4j-2" :-) говорю шо рыали? целый год тебе нужна цель поменять бездумно либы в проекте? ну пиздец короче синьоры
после этого я решил шо все
нахуй....

Да пацаны просто сидят: "ага счас напиши им планов, потом еще спрашивать будут, нашли дурачков"...


Посему, чтобы избежать ошибок при программировании прикладных модулей, надо (в частности) известными методами, регулярно очищать ум от загрязнений и неведения :) Ибо в противном случае причинами непрерывных багов будут упомянутые выше "беларусики". Это замечено ещё древними самураями, которые считали, что если сердце человека нечисто, он не сможет идеально-каллиграфически нарисовать сложный иероглиф одним росчерком: рука/моск обязательно дрогнет.

А вот движок надлежит создавать с максимальным привлечением математических методов и, типа, учёных (но не даже самых талантливых/просветлённых кодеров, специально для которых забацали Go -- это как раз для прикладной части).

"Фишка в том, что наши программисты гуглеры, а не ученые. Это обычно молодые, только выпустившиеся пацаны, которые возможно выучили Java, возможно даже C/C++ и может быть Python. Они не в состоянии понимать пробздетый язык, но мы все равно хотим, чтобы они делали хороший софт. Таким образом, мы даем им легкопонимаемый язык, к которому они быстро привыкнут"
(с) Роб Пайк

То есть правильный двиг -- это сплошная моноидальность, чистые лямбды, категориальные машины Кюрена, солверы для неограниченно вложенных сущностей, (ко)терминальные (ко)алгебры, кумулятивные вселеннные, индуктивные типы и вот это вот всё -- воплощённое в коде.

Как-то так:
http://homotopytypetheory.org/
Tags: инженерения, математика, программирование, сверхсложные системы
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 4 comments