Это – повод не поспорить, а – подумать, обсудить, для чего нужно привыкнуть не находиться обязательно на одной из непримиримых сторон, а подвергать сомнению важные свои убеждения, попытавшись найти доводы против, чтобы получить целостную картину. Хотя речь пойдет о программировании, но суть могут понять и непричастные.
О чем речь? Есть определенная корреляция между двумя социально-культурными явлениями в вэб-тематике:
1. Создание блогов и более мощных ресурсов, выходящих в топ пользовательских предпочтений
2. Создание все новых форм и формочек в виде огромного числа конструкторов сайтов, cms и фреймворков.
В обоих случаях решающим для результата пользовательских предпочтений является место в иерархии: одиночка, команда, корпорация. В первом случае одиночки имеют шанс выйти в топ, если их тематика не занята командой, а команда может выйти в топ при наличии ниши, не занятой корпорацией. Точно так же – для продуктов в веб-программировании. Это – естественно, ведь корпорации привлекают огромные по сравнению с командами средства и ресурсы как для создания продукта, так и для маркетинга.
Какая-то малолетка начинает ворочать миллионными прибылями от блога, который по тематики востребованности находится вне каких-то других притязаний, но при этом у нее есть огромная аудитория, с восторгом принимающая ее все более углубляющуюся психопатологию.
У обоих явлениях – одна общая психофизиологическая проблема, которая определяет и многие другие патологические явления, но мы остановится на рассмотрении только двух.
Так в чем проблема?
В первом случае проблема обозначена во впечатляющем обобщении исследований наносимого соцсетями вреда (https://algorithm.lenta.ru/). Как оказалось, предоставление возможности самовыражаться на весь мир любым особям – очень вредно, это разносит индивидуальную шизу по умам в мировом масштабе с использованием базового механизма отзеркаливания чужого опыта.
Даже высказывания команд людей, стоящих за топовыми фигурами и транслирующими их ментальность в поле этических норм культуры – оказывает самое негативное влияние потому, что свое мнение с высоты своего достигнутого авторитета, начинают выражать совершенно безапелляционно в темах, где люди ни в коем мере не являются специалистами, способными в самом деле грамотно и адекватно реальности представить информацию по теме. Всякие артисты высказываются по всем вопросам этики понимания ситуаций, даже ученые, специализирующиеся в какой-то достаточно узкой области, вдруг начинают авторитетно высказываться по совершенно иным поводам. А в целях информационного тотального воздействия широко и столь же фейково высказываются популярные и авторитетные СМИ. И люди всем этим очень легко зомбируются (fornit.ru/50527).
Очевидно, что не допустить вред возможно только в случае профессиональной проверки подобных сведений перед выпуском их в публичный доступ. А это – типа недемократично и как бы даже цензура. Но одно дело – политическая цензура, ограничивающая высказывания оппонентов пользу других, а совсем другое – профилактика психопатологий и насаждения антиэтичных тенденций. Мало кто не согласится, что нужно ограничивать популярную активность педофилов, некрофилов, садо-мазо и других патологических филов, популяризацию антигуманных, фашистских, террористических, фанатичных и т.п. идей. Но не учитывать наносимый вред разгулом индивидуальной и командной пропаганды – не менее необходимо. Можно для этого придумать другое слов вместо “цензура”, так же как слова “вероломный обман” не применяют к военной хитрости.
Кардинальным решением было бы формирование общеразделяемой этики в культуре: высказывайся, если только уверен, что это – очень важно, а иначе промолчи. Ну, как у индейцев было такое на советах, иначе – всеобщее презрение.
Во втором случае (это уже про программистов) происходит то же самое, но только в своей, довольно темной для наблюдения и оценки специфике. Я несколько все проутрирую для пользы ясности обобщающей мысли.
Но сначала веб-определения, чтобы не было споров о словах.
Базовый язык программирования – скомпилированный до уровня исполняемых файлов (ассеблеровских кодов) интерфейс программирования, например, php, питон, ява и т.п.
Вторичный язык – скрипты, исполняемые во время прохождения, написанные на базовом языке и поэтому имеющие намного меньшую производительность. чем прямые вызовы функций базового языка.
Библиотеки – целевые функциональные системы, написанные на базовом языке или же вторичном языке или встроенные в базовый язык. Последние отличаются наивысшей производительностью, с которой не может сравниться библиотека, написанная на базовом языке.
Самописный код – полностью открытый и доступный для понимания код, написанный на базовом языке, в котором могут использоваться свои или чужие, но открытые для достаточно легкого чтения библиотеки.
Конструктор сайта – каркасная заготовка по типу детского конструктора: из готовых элементов собирается вся конструкция. Внутренний код элементов неизменяем и не читаем, в общем – черный ящик.
Фреймворк – общая для разработки сайта концепция представлений элементов программирования, как правило использующая свой особый синтаксис, отличающийся от синтаксиса базового языка программирования (фактически – свой язык). Внутренний код элементов неизменяем и не читаем, в общем – черный ящик.
CMS (система управления сайта) – движок сайта, написанный на базовом языке программирования. Код элементов движка, как правило, доступен для понимания, если только этот движок не использует фреймворков. Т.е. CMS – более общее понятие, чем конструкторы и фреймворки.
По определению понятно, что самописный код - это не фреймворк именно по критерию нечинаемости кода. Можно отслеживать алгоритм выполнения кода сайта и вдруг появляется функция, которая не позволяет без особых трудностей прочесть ее код. Это – или чужая локальная библиотека или – чужая концепция представлений, написанная своим языком. И высказывания типа: “ Что бы вы не писали - получится фрэймворк” – это наивное уклонение от определений. Так можно сказать, что все – атомы и использовать только слово “атомы”.
И вот история взрывоподобного развития самых разных новообразований на телах базовых языков.
Начиналось все по-библейски: не было никаких конструкторов, cms и Фреймворков. Все писали на “чистом” коде (вообще никому в голову не приходило, что может быть какой-то еще другой код), сохраняли свой опыт в личных библиотеках, инициативные команды выпускали подборки полезных классов и более структурированных библиотек. Гении и авантюристы пробовали по-всякому изощряться и другим бывало очень не просто разбираться в таких изощрениях, что настораживало и даже вызывало протест.
И вот пример того, как бы могла развиваться правильно такая идиллия, не позволяя отдельным рвущимся к признанию и влиянию дельцам выдавать все новые придумки.
Был стандарт HTML4, который реализовывался браузерами на уровне своего низкоуровневого и, значит, очень эффективного кода. Да, корпорации затеяли было войнушку браузеров из-за разной интерпретации такого стандарта и те, кто особенно постарался сделать свой код несовместимым с другими браузерами, первым же и проиграл, отойдя в небытие, а очень поучительный итог привел к жесткому единообразию интерпретаций на радость всем программерам, которым больше не нужно стало корячиться с поддержкой разных браузеров в отдельности.
Программисты некоторое время писали на чистом коде много таких вещей, которые не обеспечивал HTML4, оно все больше утрясалось в насущные проблемы и вышел новый стандарт HTML5 в котором самые полезные задумки реализовались, естественно и безболезненно дополнив возможности. Эта была очень большая радость и все самоделки были отброшены потому, что все нормальные люди понимают: сделанное на уровне ассемблера несопоставимо эффективнее сделанного на уровне вторичного кода.
И, казалось бы, что так и должно быть. НО люди проникают везде, где для этого оказывается не занятая ниша. Поэтому хитрогении придумали: а зачем мы будем всякий раз писать в большинстве однотипный код для типовых сайтов. Напишем-ка мы универсальный конструктор, и всем будет предлагать, как панацею. Ну, правда, зачем программистам нужно разбираться в чудом коде, если все будет так унифицировано и легко? Только дураки не заходят перейти на конструкторство. И появились всякие Джумлы, Друпалы и Вордпрессы. Это – из самых живучих, а вообще всяких конструкторов наделали видимо-невидимо.
Всемогущий маркетинг легко и массово надурил головы заказчикам так, что теперь сайт просто должен был сделан на каком-то конструкторе, неважно на каком именно, но если разработчик говорил, что пишет только на чистом коде, то его уже не слушали.
Получается такая картина.
Работник: “Здравствуйте, я водитель КАМАЗа!”
Работодатель: “Добрый день, к сожалению, в нашем автопарке только ЗИЛы, позовите следующего кандидата, пожалуйста!”.
Поисковики слабо отпротестовали простив такой шаблонизации. но примирились потому как у самих рыльце было в пушку.
Теперь, когда нужна была поддержка сайта, заказчики искали только тех, кто водит ЗИЛ освоил данный конструктор, что было не просто и нелогично: конструкторов наделали много, а действительно знающие программисты на чистом коде не могли толком с ними работать. Их гнали со словами: ага, вы сделаете сайт на своем только вам понятном коде, а мы с этим как будем жить?! Как будто нормальный программист не может разобраться в чужом коде, ну, если, конечно, он не из тех танцоров, которым все мешает.
Но конструкторы были настолько по своей гнилой сути не годными и проблематичными, что появились новые гении-хайповщики и придумали фреймворки – такие новообразования над базовым языком, которые заменяли его своей оболочкой (как и конструкторы по типу черного ящика) и со своим новым синтаксисом псевдоязыка.
И опять нормальные программисты на чистом коде не могут с налету войти в эту среду, а нужно изучать эту несомненно “более простую и ясную” систему. Все накрутки использовали все тот же исходный базовый язык, т.е. они были очевидными тормозами по сравнению с тем, как вели бы интегрированные в язык функции. Но тогда и нового синтаксиса бы не потребовалось.
При приеме на работу теперь возникает вопрос: а на каком фреймворке вы, милейший, программируете??
Такое повальное увлечение фреймворками наводит на сомнения, а вдруг эти люди в чем-то правы? Вдруг миллионы мух не могут ошибаться? Однако замечено: чем больше слетается мух, тем более привлекательной эта куча становится для других мух.
Но, о боже... самые-то крутые сайты написаны без этих фреймворков, не все, но большинство, особенно зарубежных серьезных сайтов. И как это они там читают самописные коды других своих сотрудников?! Это же чудовищно сложно!
Проблемы тут нет никакой: новенькие смышлено и быстро усваивают корпоративные правила и стандарты, а если случается сделать шаг в сторону с неприемлемым результатом, то такого мягко, но убедительно образумливают. Вот и все с проблемой читки чужого кода.
Любой добротно сделанный самописный движок обладает внятной, чёткой структурой, его программный код изобилует комментариями разработчика и сопровождается технической документацией с описанием назначения используемых функций и параметров — и это является стандартом программирования! Разобраться в таком коде может любой квалифицированный программист. Другой вопрос, что в коде «самописок» чаще всего не способны разобраться те, кто привык работать со стандартными движками.
Организации без такой наработанной корпоративной этики оказываются практически беззащитными перед массовым гоном и умело проведенным маркетингом. Авторитарное зомбирование никто не отменял, это – основа формирования личности, так что даже самые крутые программеры прониклись убеждением о незаменимости фреймворков и их несомненной пользе для унификации и понимания чужого кода. Ну и, столь активно заняв ниши программного продукта, новообразования начали теснить даже развитие базовых языков.
А между тем, как и конструкторы, некоторые фреймворки стали отмирать, а в лучшем случае, сильно меняться, принося стресс даже фанатам. Вот небольшой список устаревших фреймворков с рекомендациями не тратить время на их освоение, хотя сайты, в которых они внедрены, остаются брошенными беспризорниками:
Ruby-on-Rails, AngularJS (не следует путать с Angular, ведь AngularJS был заменен на Angular после второй версии), jQuery, EmberJS, Компоненты классов React, Deno, Svelte, Stenci, Hardhat, Truffle, Brownie. Что особенно нагло, - к устаревшим “фреймворкам” начали относить базовый язык, на котором написаны пока еще не устаревшие фреймворки (например laravel) и т.д.
Вообще полагаться на чужой код как черный ящик – всегда опасно, вот тут еще такая беда грянула, как закрытие лицензий для РФ пользователей для фреймворков, элементы которых писаны украинцами, что случилось в ангуляре. Одно дело – черный ящик базового языка, и совсем другое – новообразования, которые могут сгинуть в любой момент.
Тенденция не знать толком базовый язык, а полагаться на фреймворки – процветает и отупляет доверчивых программистов. Но по плачевным результатам все настойчивее раздаются трезвые призывы: Не учите фреймворки, учите архитектуру и Прекратите изучать фреймворк, станьте JavaScript-разработчиком!
Статей, пытающихся препятствовать повальному греху увлечения черными ящиками чужого кода, выходит все больше (например, вот, вот и вот), так что хайповщикам придется придумывать новые форматы охмурения, несомненно очень привлекательные и завораживающе облегчающие тяжкое программирование.
Фреймворки, как и модные гаджеты, появляются (в огромном количестве конкурирующих за топы), устаревают и тихо исчезают, оставляя сайты на них с неразрешимой проблемой потому, как нормальный “чистый” программист с ними не разберется, а программиста отжившего монстра уже не найти в природе.
Итак, надеюсь, что как проблемы, так и их психофизиологические причины показаны достаточно очевидно. Чтобы увидеть патологию исследователю вовсе не нужно побывать в шкуре наркомана, зомбированного и другого психа. Наоборот, чтобы увидеть неадекватность в системе, нужно выйти за ее рамки, в область более общей системы (интерпретация теоремы К.Геделя, а позже Р.Пенроуза), чего сами угорелые самоделкины все новых хайповых решений сделать в принципе не могут, мало того, многие корпорации так же увлеклись этим очень прибыльным делом, точно так же как увлеклись они строганием зомбирующих соцсетей. Оба направления – с одной и той же целью.