Почему говнокодят программисты, объяснение для строителей
В посте "Чужой код" @fentanilgalotan задал вопрос:
почему в программировании так часто говорят о костылях, говнокоде, каких-то велосипедах изобретенных, неужели нет никакого стандарта кодостроения, приемки этого кода?
Первый вариант ответа был недавно уже на Пикабу "Просто оцени правильно время заранее". Разумеется ему там отвечали развёрнуто и интересно и другие пикабушники
Я же предлагаю свою более длинную версию ответа со строительными аналогиями:
Представьте, что проектировщику (инженеру, конструктору) сказали спроектировать 2хэтажный коттедж. Это можно сказать ТЗ на проект и не более. В котором учтены в том числе язык программирования, фреймворки и прочее материалы. Потом его передают разработчикам джамшутам. На этом этапе вроде всё гладко. Джамшуты приступили к стройке. Заложили фундамент, начали выкладывать стены, но тут хозяин говорит: "хочу подземный паркинг". Ну дажмшуты разрыли ему яму, проломили одну стену фундамента и совместили с помощью говна и палок с тем, что было ранее уже построено, в общем наворотили первого говнокода. Выложили стены кое-как. И тут заказчик говорит, что надо подземный гараж на две машины, а ещё дизайнер ему посоветовал круглые окна. Ну джамшуты начали городить костыли, подпирать швабрами гараж, в итоге кое-как расширили. Старые проёмы окно они где-то подломали, где-то подложили но поставили круглые окна. Тут приходит заказчик и говорит, что ему не понравились круглые окна, они не так открываются и хочет треугольные. Джамшутам ничего не осталось, как с помощью опять говна и палок переделать окна. Сделали второй этаж, положили крышу. Заказчик вроде доволен. Параллельно конечно же прокладывали коммуникации: газовую трубу. отопление, проводку. Вроде продолжили всё согласно проекту. Приступили к отделке. Но тут оказалось, что заказчик хочет не люстру в центре комнаты, а по периметру светильники, газ оказывается не получилось подвести к дому и всё отопление надо переводить на электричество. В будущем может и подведут. Но пока дырку от трубы закрыли тряпками, провели временную проводку к бойлеру.
И вот представьте. что такое постоянно, на каждом этапе. С отделкой тоже, то обои не понравились, то проем двери не там, мебель не встаёт, надо переносить. А главное: весь проект должен быть расширяемый, при чём расширяемый и переделываемый не только снаружи, но и изнутри.. Завтра заказчик может захотеть ещё и бильярдную с бассейном под гаражом. Стены дома из красного кирпича окажутся не в тренде и надо будет каким нибудь супер-пупер камнем выложить (не обложить). Потом его жена захочет... в общем в строительной теме даже фантазии не хватает придумать аналогий с теми, что бывают в программирование.
И всё это в один прекрасный момент может рухнуть! Времени и возможностей на переделку обычно нет. А часто ещё и "надо было вчера".
Разумеется в программирование очень много тоже джамшутов, которые криво кладут кирпич. Самоучек с самостроем. Но в программирование часто джамшут сам месит цемент, сам кладёт кирпичи и ставит окна, проводку и отделку дома. Вы часто встречали действительно специалистов сразу во всём? Думаю нет. Чаще всего есть специалист по кладке, спец. по электрике, по воде и так далее. В программирование часто это одни и те же люди. Разделение в основном идёт на фронтэнд (отделочники, они же электрики и прочее по отделке) и бэкэнд (каменщики и прочее по возведению коробки).
А проектировщики (те кто пишет ТЗ) и дизайнеры где-то отдельно и подключаются по необходимости.
Надеюсь понятно сравнил? А теперь вишенка на торте! Все технологии развиваются семимильными шагами. Новые инновационные материалы появляются не раз в год на выставках. А ежедневно! Ежедневно выпускаются новые материалы и инструменты с новыми характеристиками и спецификациями, ежедневно обновляются старые и постоянно надо быть в тренде. За год можно стать мамонтом. Те, кто программировал 20 лет назад - они уже сравнимы со строителями из соломы и глины, кто программировал 40 лет назад - сравнимы с теми, кто жил в пещерах (не в обиду ветеранам сказано).
Думаю хватит.
