Я намерено пишу свои заметки бытовым языком, чтобы снять налет мистики, который есть на программировании. Именно поэтому, в качестве сравнения я использую стиральные машинки и строительные товары.
Программирование – это инженерная дисциплина (по крайней мере, я пишу именно об инженерной деятельности). В любой инженерной деятельности есть свои уникумы, дяди Васи, которые с помощью доброго слова и кувалды могут сделать шедевр, и практиканты Коли, которые из двух стальных шаров в замкнутом помещении один шар сломают, а другой потеряют.
Но посредине, между этими униками, нет ничего мистического. Программирование может и должно быть последовательным и управляемым созданием хорошо работающих программ.
Мистика в программировании – «а черт его знает, как это работает», «визит эффект», блуждающие ошибки, недетерминированное поведение, и что там еще бывает – это следствие непонимания (кого-то или между людьми) или плохих инструментов.
Когда я делаю программу в своей среде разработки, я могу найти причину любого сбоя, потому что мне все открыто, и я все понимаю. Это редкий случай, обычно программист имеет дело с огромным количеством таинственного мусора.
Старый пример, делаем на Дельфи пустую DLL, размер кода килобайтов 20. Что там напихано? А черт его знает, что-то, наверно, важное, что в какой-то самый неподходящий момент сработает непредсказуемым образом.
Кто-то когда-то знал, зачем нужен этот код и что он делает, но следы (и знания) давно утеряны, так как спецификация этого кода не является (по какой-то дикой причине!) частью самого кода.
Почему на какой-нибудь зарядке для телефона обязательно наклеена табличка со спецификацией разъема? А на программной компоненте вовсе не обязательно…
Мы сами творим мистику, и из этого можно извлечь позитивный вывод – если мы не будем вносить мистику в программирование, то мистики станет меньше.
Постоянная ссылка
Непонимание может быть следствием еще и объективной сложности. Не помню, кто из великих (Дейкстра? Кнут?) это сказал, но сказал примерно, что сложность средней реальной программы превышает сложность всей математики.
Постоянная ссылка
Да, может. Объективную сложность никто не отменял. Но вот что удивительно, в программировании принято превозносить сложности, а не пытаться её уменьшить. Интересно, почему?