Портрет 4X_Pro
Был в Сети 27 апр. 2025 г., 00:09
Мультиблог
4X_Pro
Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb, slow lifer.

Социальные сети


Новости сайта в Telegram

t.me/4x_pro

О Сети и о жизни

Эффективный менеджмент в IT и его последствия

MadTechGuy

Предисловие

Речь пойдёт об одной из самых наболевших для меня (и, уверен, не только меня) тем в компьютерной области. О том, почему та область, которой я посвятил чуть ли не всю жизнь, начиная лет с 6-7, теперь уже вряд ли когда-то будет для меня основным источником дохода. В этом тексте я не преследую скрытых целей — поумничать, возвыситься над кем-то, оклеветать кого-то и т. п. Единственная его цель — в исчерпывающей и максимально доходчивой форме передать суть проблемы, с которой я лично столкнулся и в которой я вижу угрозу для себя. Голословные утверждения в духе «ты не прав» или «ты ничего не понимаешь» в качестве контраргументов не годятся, отрицание проблемы никак не поможет её решить.

DESCRIPTION

«Наша главная задача —
Молотьба и хлебосдача.
Хочешь быть передовым —
Сей квадратно-гнездовым!»

Коротко о хорошо забытых старых "универсальных" методах

Современные подходы в IT построены на вере в возможность существования некоторого набора шаблонных, но при этом универсальных методик, с помощью которых можно одинаково быстро и качественно решать любые задачи, независимо от нюансов задач и субъективного удобства методик для конкретного разработчика. То есть, методы решения задач фиксируются, вместо того, чтобы подгоняться под обстоятельства. Однажды мне дали на доработку сайт-одностраничник, сделанный «на Bitrix», который фактически состоял из index.html, одного JS-файла и таблицы стилей, а Bitrix, видимо, стоял для успокоения заказчика, который захотел «сайт на Bitrix», потому, что слышал, что это круто. Когда я смотрю на модные фреймворки, методики и прочие best practices, и то, с каким фанатизмом эффективные менеджеры пытаются в них впихнуть невпихуемое — всю разработку со всей её нешаблонностью, будучи уверенными, что лучше специалиста знают, как надо, превращая это в обязаловку фактически под угрозой для специалиста остаться без работы в случае его несогласия, у меня возникает ассоциация с фразой «прокрустово ложе».
Прокрустово ложе — ограничения или узкие рамки, под которые насильственно подгоняют не вписывающиеся в них явления, в ущерб чему-то существенному (по имени легендарного древнегреческого разбойника Прокруста, который укладывал захваченных им жертв на свое ложе и обрубал ноги тем, кто оказывался длиннее ложа, а тем, кто короче, вытягивал их).
Не это ли мы наблюдаем в современном IT? Только здесь ради прихотей дефективных менеджеров вытягиваются размеры, сложность и время разработки программы (включая время на изучение новых фреймворков) ради того, чтобы она была сделана на модном фреймворке по модным методикам, в ущерб её простоте и надёжности, а разработчику вместо рук и ног обрубается возможность пользоваться своими инженерными способностями, что тоже делает его в некотором смысле инвалидом. Теперь от разработчика больше не требуются его главные сильные стороны, которые раньше всегда его выручали — изобретательность и инженерное мышление, позволяющие находить наиболее удачные варианты реализации и просчитывать в уме её детали. Зато требуется идеальная память, повышенные работоспособность и стрессоустойчивость, чтобы бесконечно изучать новомодные фреймворки и методики, умение и желание бесконечно подстраиваться под них, бороться с их ограничениями и непродуманностью, делать костыли и кастомную логику там, где требуемая функциональность в их прокрустово ложе не вписывается. Теперь программисту можно похоронить все свои знания, умения и наработки, которые он нарабатывал лет 10-20. В реалиях современного IT они ему уже мало чем помогут, а за их использование его будет судить святая инквизиция в лице начальства и коллег. Как это он, инакомыслящий вероотступник, посмел сделать что-то по-своему? Неужели он возомнил себя умнее всех? И как же теперь будут разбираться в его коде другие разработчики, привыкшие делать всё по шаблонам и шарахающиеся от всего, что сделано не по ним? Вы не хотите идти в ногу с цивилизованным миром и использовать современные фреймворки? Вам они неудобны и только отнимают время и нервы? Значит, вы плохой разработчик, вы нам не подходите, увольняйтесь.

Конечная цель всего этого — низвести разработчика до уровня мелкого винтика в производственной системе ради стабильности бизнеса, сделав его легко и быстро заменяемым. Даже если это даётся ценой качества конечного результата. Вот реальная причина популярности большинства популярных фреймворков и методик, а не их техническое совершенство или какие-то заложенные в них гениальные идеи. «Лучшими» эти практики являются лишь для бизнеса, для разработчика же лучше использовать свои наработки и иметь дело с тем, что он знает досконально, чем вызубрить кучу фреймворков, не вызывающих доверия в плане безопасности ввиду огромных объёмов их кода и малореальности его изучения для одного человека (а без этого можно допустить уязвимость из-за незнания, какие механизмы безопасности реализованы во фреймворке и как). Так какой мне интерес их изучать, если я могу те же задачи за то же самое время (если не быстрее) решить без них, с использованием своих наработок, библиотек, фреймворков и т. д., при этом быть уверенным в качестве результата? Или мои интересы никого не интересуют, ведь «проблемы индейцев вождя не волнуют»? Ни одного вразумительного ответа на этот вопрос мне до сих пор никто не дал.

Я не против готовых решений и фреймворков как таковых. Я против бюрократизации разработки (когда «шашечки» становятся важнее, чем ехать), навязывания разработчику методов и инструментов выполнения его работы, использования фреймворков как «чёрных ящиков» (без понимания, что внутри них), бесконечного изучения новых модных фреймворков и языков, которые всё равно через несколько лет потеряют актуальность, вместо того, чтобы вкладывать свои время и усилия в то, что никуда со временем не денется. Но больше всего я против отрицания понятия «квалифицированный труд», отношения к разработчику как к бездушному, легко заменяемому трудовому ресурсу, а не квалифицированному специалисту, а к его труду как к чисто механическому. Есть люди, чей мозг лучше заточен под эффективное применение готовых решений, а есть те, у кого мозг заточен под создание чего-то нового в нетипичных ситуациях, когда подходящих готовых решений нет. И те, и другие одинаково нуждаются в стабильном доходе, но при этом вторые почему-то едва ли востребованы и вообще будто стали считаться лишними.

Свои библиотеки и микрофреймворки, которые я писал для себя, выполнены в соответствии с принципом KISS, то есть максимально простым и надёжным способом, с минимумом зависимостей от чего бы то ни было: дополнительного софта, каких-то пакетных менеджеров, Docker — в общем, всего того, что не обязано быть в системе из коробки и в чём конечный пользователь не обязан разбираться. Языки программирования я предпочитаю такие же. Это значительно снижает вероятность багов, повышает общую надёжность системы и облегчает отладку (без поисковиков и StackOverflow). А главное — экономит время, позволяет в процессе разработки освободить ресурсы своего мозга и направить их полностью на задачу, так как не требуется учитывать множество нюансов языка и фреймворка, соблюдать тщательно вызубренные сотни правил и формальностей (вплоть до требований к количеству комментариев в коде), боясь что-нибудь не учесть и чувствуя себя как на минном поле. Число Миллера, примерно соответствующее объёму кратковременной памяти нашего мозга, не такое уж и большое и в среднем равно 7 ± 2 элементам. Вместо того, чтобы думать обо всех этих формальностях, куда полезнее думать о более важном — что нужно учесть, чтобы не допустить багов, какие фрагменты кода в каких ситуациях как себя могут повести и могут ли привести к уязвимостям. А ещё я всегда исхожу из того, что, решая проблему, надо при этом не создавать другие. Если решая проблему ты создал другую (которую потом тоже придётся решать, тебе или кому-то), то суммарно ты ничего не улучшил. Эх, если бы в IT все этим руководствовались…

Отдельно стоит отметить явную избыточность слоёв абстракции в современном софте, к которой привела чрезмерная увлечённость фреймворками и готовыми решениями (которые в свою очередь тоже используют готовые решения, и так далее по рекурсии). Когда программа делает то же самое, что её аналог 15-летней давности, но при этом жрёт в десятки раз больше. Наглядный пример: мой Atom с плагинами занимает 431 МБ памяти, тогда как Geany (тоже с плагинами) — 7 МБ. Всё, чего мне не хватает в Geany — это несколько курсоров и сниппеты, как в Atom, в остальном же эти редакторы не сильно отличаются по функциональности. Или какой-нибудь современный интернет-магазин, у которого одна страница прогружается несколько секунд (около 750 запросов), требует процессор минимум уровня Core i3 для более-менее приемлемой производительности и хотя бы гигабайт свободной памяти. Тогда как раньше того же самого хватало для запуска нескольких экземпляров какой-нибудь 3D-игры. Если сравнивать, как было и как стало, то это можно назвать разве что усложнением, но не прогрессом.

Итак, что мы видим в итоге? Во сколько раз современные фреймворки и методики упростили разработку, во столько же раз и усложнили её, вынуждая бороться с их ограничениями и сложностью. Во сколько раз увеличились объёмы памяти, производительность современного железа и скорости передачи данных, во столько же раз уменьшился и КПД современного программного обеспечения, компенсировав улучшения в железе. А по итогу мы решаем те же задачи и за то же время, что и 20 лет назад, только другими путями. Похоже на «Тришкин кафтан», о котором Крылов писал более 200 лет назад, не так ли? Но мало кто это замечает, все привыкли и уже мало кому это кажется чем-то ненормальным. Сюжет антиутопической комедии «Идиократия» уже не кажется таким смешным и всё более становится похожим на пророчество…

SEE ALSO

О памяти, Интернете и профессионализме

4X_Pro
Несколько дней назад на Хабрахабре наткнулся на статью "Программирование без Интернета". В ней поднимаются три взаимосвязанные темы, которые волнуют меня давно, и по поводу которых я хотел бы написать. Первая — это вопрос фрагментарности знаний и зависимости от "внешней памяти". Хотя я никогда не копирую код бездумно так, как это описывается в статье, а всегда разбираюсь в нем, все равно даже такой подход не заменяет систематического чтения мануалов, дающих более-менее целостную картину, а также возможность взглянуть на уровень (или даже несколько) вглубь, узнать какие-то тонкости или понимание на глубоком уровне, как система работает "изнутри". Но в условиях постоянной спешки и желания получить результат поскорее на такое вдумчивое изучение зачастую не оказывается ни времени, ни мотивации. С другой стороны, как написал один из комментаторов к статье, многие частные знания в компьютерной области имеют свойство быстро устаревать. И тут возникает вопрос, как провести границу между тем, что хорошо знать детально, и тем, что следует рассматривать только как справочную информацию.
Вторая тема — это зависимость от "внешней памяти". В частности, уже давно, изучая что-то, я улавливаю и запоминаю общие принципы работы, но плохо запоминаю детали, типа конкретных названий функций или порядка их параметров (тут, правда, отчасти влияет мой тип по типологии «Кроме людей»). Из-за этого получается, что даже на том же PHP, который я знаю лучше остальных языков программирования, есть много вещей, которые я когда-то делал, но не смогу воспроизвести по памяти, не заглядывая в справочник. Например, к таковым можно отнести работу с XML, CURL, SOAP. И это порождает определенное чувство беспомощности из-за понимания, что без Интернета я мало что могу сделать. Решения тут могут быть такие: во-первых, держать оффлайновые версии всех необходимых справочников (как и предлагалось в статье), во-вторых, завести что-то вроде блокнота, куда выписывать ключевую информацию (типа сигнатур функций). Это и даст возможность программировать с отключенным Интернетом (что часто помогает сосредоточиться и меньше отвлекаться), и запоминанию поспособствует, и открыть блокнот на нужной странице окажется быстрее, чем запускать справочник и искать там.
И третья тема заключается в том, а что же в наше время следует считать профессионализмом? Для меня всегда главными критериями профессионала было понимание им сути того, чем он занимается, причин происходящего, наличие знаний, почему следует применить именно это решение из множества возможных, умение сделать работу качественно, а также наличие знаний в голове, которые позволяют выполнять работу без книжки, по памяти. И еще можно добавить этический критерий: не пользуется некомпетентностью клиента для вытребования бо́льшей суммы денег, чем договаривались. Но в комментариях к статье столкнулся с совершенно другой точкой зрения: что профессионалом является тот, кто выдает предсказуемый результат в предсказуемый срок, даже толком не понимая сути того, что он делает (и в качестве примера такового приводился какой-то разработчик Telegram-ботов, который толком и программировать не умеет.) И, соответственно, возникает вопрос: а какой из этих критериев более правильный? Впрочем, могу еще допустить, что тут влияют соционические ценности: мой подход основан на ценностных БЛ+ЧИ, а противоположный — на ЧЛ+БИ.

Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.