У меня не получилось объяснить этим вашим ГПТ, какую статью я хочу. Пришлось писать самому и мемы придумывать. Поэтому в статье, будет гиперболизация проблем в айти и в программировании в частности, передергивания, набрасывание на вентилятор, утверждения без пруфов и шутки про гладиолус ибо я олд.
Приветствую, читатели!
Немного о себе. Я скромный богобоязненный разработчик на С#. В основном моя работа связана с бэкендом, оптимизацией SQL запросов, разработка архитектур баз данных и сервисов для обеспечения высоких нагрузок. В разработке около 10-ти лет. За это время я видел такое, что вам, людям не программистам, и не снилось. Атакующие сервер пользователи, пылающие сервера за стенкой; Указатели Си и ошибки с ними связанные, разрезающие человека на пополам. Все эти мгновения затеряются во времени, как... байты на 8 тб жестком диске... Пришло время рассказать...
Предлагаю вам погрузиться в чарующий мир, рукожопия и всратости. Вы готовы? Погружаемся!
1. Примеры в программировании
В наш просвещенный век, с гигабитным подключением в каждый дом. Юниту планеты земля доступны тонны информации о всех возможных достижениях науки, исследованиях, книг и учебных материалов. Конечно же еще и смешные котики:) С развитием ютуба, все доступно в видео и аудио версиях. Немного отвлекся, я о чем? А я о том, что если какой нибудь джун типа меня, захочет войти в айти погрузиться в паттерны и практики хорошего кода, он незамедлительно столкнется с учебными примерами и вам скажу так, есть вещи всратее в этом мире, и примеры одни из них.
Особенно лидируют примеры объясняющие принципы S.O.L.I.D. А давайте создадим зоопарк, и будем наследовать ни в чем невиновного пингвина от слона! А для объяснения интерфейсов мы создадим интерфейс плавать и ходить.
Ещё адовый вариант был найден на ютубе. Автор показывал примеры паттернов на примере создания гамбургеров. Гамбургеров, Карл! Создаем фабрику гамбургеров и понеслась. И знаете, что я об этом думаю. Таки да, это всрато.
Я не понимаю, авторов данных эпосов. Вы думаете, что приходя на работу мы тут гамбургеры с пингвинами наследуем и строим иерархии млекопитающих? Почему нельзя дать нормальные жизненные кейсы? К примеру работу с отчетами. Отчеты это вообще отдельная культура программирования. Это и работа с разными форматами хранения и визуализации, это и способы хранить сжимать и пересылать данные. Отчеты бывают в pdf, html, excel, word(прости господи) и т.д Переложить кейс вывода и создания отчетов на S.O.L.I.D. было бы идеальным примером.
Примеры с реализацией бизнес процессов клиент->заказ->оплата->выдача. Примеры связанные с очередями, пересылкой сообщений и т.д
Но нет, у нас пингвины и гамбургеры.
2. Удобство софта и сайтов
Это бесконечная тема для фикалирования Но, что меня больше огорчает это фронтенд сайтов. Уверен многие сталкивались и сталкиваются с сайтами, где постоянно что то всплывает, вылазит с боку, оповещает пользователя о каких то левых событиях, а я лишь просто зашёл на сайт заказать корм для котика.
Бесит эта непродуманность и явное забивание на удобство со сторонны пользователя. Заходишь на сайт всплывает какой то там помощник, на мобилке тыкаешь закрыть окно, оно раскрывается ещё больше. Заходишь в онлайн банк, и тебе сразу экран рекламы, а так как ты на автомате уже тынкул пальцем она загружается, а закрытие в левом верхнем углу. Ох как бесит же. Всплывающие уведомления когда я нахожусь в приложении, не надо так делать, если мне интересно просто увеличте количество цифр на звоночке и всё, если мне интересно я сам зайду и посмотрю. Но не нужно мне пихать лишнюю не нужную мне и 99% пользователям информацию.
Здесь должна была быть картинка пользователя заходящего на сайт и отбивющегося от роя летающих членов:)
То кнопки на пол экрана, то маленькие и при нажатии происходит всё, что угодо но не как не закрытие всплывающего окна.
Покупаешь смартфон с большим экраном, фронтендеры просто адаптируют свои свистелки, что бы их больше влезало на экран.
В мире написано 100500 книг по юзер френдли дизайну сайтов. Проводятся конференции, многочасовые доклады. Но нет, наши ребята кладут свой никому не нужный и разражающий функционал, на каждый экран мобильного телефона съедая от экрана драгоценные пиксели.
Что же ребята с вами не так?
Назад к основам? Сорь вот правильный Джоэль.
Если вы читали Джоэля Спольски, он не об этом говорил.
История о Яндексе
Вы думаете, что всратее уже не сделать? Теперь и вы не угадали и даже не рядом. Все возможно:)
Мою жену не устраивает делать покупки на своём 15.6 ноутбуке с ryzen 5. На моём рабочем ПК с монитором 32 дюйма это и правда делать удобно. По многочисленным ее просьбам, что бы при открытии новой вкладки загружался по умолчанию поиск яндекс, стал искать расширения к хрому. Окей думаю я. У меня как у С# разработчика нет предубеждений в интернет поисковике:). Мне как C# разработчику хватает одного сайта. Скачал расширение: Поиск и стартовая — Яндекс, установил. Теперь при открытии новой вкладки по умолчанию загружается поисковик Яндекс. Что может пойти не так? Опережаю событие, всё. Я выключаю на ночь пк. Утром при загрузке хрома, я вижу одну отрытую вкладку яндкса, все мои 93 открытые вкладки не сохранились.
Хорошо, что хром способен восстановить недавно закрытые вкладки. Есть вкладки, которые висят неделями или месяцами и ждут своего часа когда я их посмотрю.Так вот вернемся к нашим разработчикам из яндекса.
Эти ребята по закону разработки 666, применив паттерн чик чик и в прод. Свояли вот такое расширение поделие.
Дорогие вы мои разработчики из яндекса, как такой функционал пришел к вам в голову? Мы живем в одном социокультурном обществе, вы смотрели в дестве теже мультики, фильмы, что и я. Мы пели одни песни в школе. Но что с вами не так? Человечество прошло через миллионы лет эволюции, покорила огонь, атом, космос, засрала планету и . Развитие микроэлектроники позволило автоматизировать тысячи производств и вручить каждому человеку удобное универсальное устройство поиска информации и не только. Что бы, что, создать недо расширение, с неожиданным сайд эффектом?
История третья, пдфная - драмматическая
Нечасто у меня возникает потребность объединить несколько сканов в один pdf. Использовать онлайн редакторы, такое себе конечно. Начал искать программу для оффлайн редактирования на ПК. Нашел неплохую программу pdf24.
Претензий к функционалу нет. Ну весит установщик 200 мб, после установки 700 мб, всего лишь установочный образ Windows XP. Удивительно, что не больше:) Комбайн, что тут скажешь.
Первый запуск я мужественно прошел. Тыкая в 100500 кнопок:)
Признаться к такому я был не готов, от слова совсем:)
Но есть раздражающий фактор.
Программа прописывается в авто запуск и висит в трее. После возни со сканами и переводом в pdf. Я решил закрыть программу из трея. Как это было...
Смеркалось, JordanCpp допивал свое вечернее кофе со сгущенкой. Стоял ноябрь, снег как любящая мать накрыла своим белым одеялом, землю. Еще оставались желтые листья приподнявшиеся сквозь белое полотно. Природа передавала спокойствие и умиротворение. Ещё раз, он окинул взглядом вид из окна и быстрым движениями подошел к столу, и сел. Ничего не предвещало неожиданного, загрузив браузер, перешел по нескольким вкладкам и увидел программу в трее. Его раздражала иконка овцы в трее, быстрым порывом руки и касанием пальца по правой кнопке мыши, вызвал меню программы. Он почувствовал свое превосходство и власть, над жалким пиксельным созданием. Ему хотелось быстрей покончить с ним. В этот же миг, появилось меню с вариантом "Закрыть PDF24"? но здесь произошло то, чего он не мог ожидать...
У наблюдательного зрителя сразу возникнет вопрос. Отвечаю.
-
Да, я до сих пор пользуюсь DAEMON Tools Lite, в конце 2023 года:)
Это программа явно считает человека обезьяной, которая нечаянно совершила механические действия с мышкой, напрягла 20 мышц кликнув на трей. Что это за рукожопие, в конце концов. Мне вообще безразлично на PDF24 Creator принтер я до использования программы вообще о нём не знал. Я лишь хочу закрыть программу и всё. Мне не нужны дополнительные диалоги, я хочу что бы софт работал ожидаемо. Спасибо завели.
В копилку добавлю программу msi afterburner. При закрытии из трея, спрашивает вы точно хотите закрыть прогу. Но это ладно. Главный цветочек в том, что при загрузке системы, если программа находит новую версию она спрашивает, хотите ли вы обновить версию. Я утвердительно отвечаю, нет. Но думаете разработчики этого поделия озаботились, где соханить моё пожелание. Конечно же, нет. При каждой загрузке Windows, msi afterburner снова спрашивает об обновлении. Как то так.
3. Что там у Microsoft'а
Не могу обойти данную компанию стороной:) Для своего проекта юзаю Visual Studio Community 2022. Кстати о нём я писал в данной статье. И как то в один из дней пришла идея скачать офлайн версию студии. Начал разбираться, что да как. Оказывается, что официального установщика для офлайн установки у майков нет. Хотя казалось бы. Переходим в инструкцию. Некоторые выдкржки:
Ни слова больше.
Ну окей ребята. Идем в инструкцию макета.
Короче там портянка из текста, шеловских скриптов и какой то там матери. Linux style edition. Хотя опять же, казалось бы. Да, да Microsoft ты предлагаешь мне заняться пердолингом. Спасибо, но я пас. История закончилась, тем что я нашел торрент сделанный кулибиным. Где нет привязки к локальному компьютеру. Майки вы движетесь явно не в том направлении. Вас любят, за юзер френдли инструменты, простоту и доступность. Но в 21 веке настолько усложнять процесс скачивания и установки дистра студии, это уже Gentoo Эребор:)
4. Что там по языкам программирования. Конечно же С++
Что можно сказать про С++. Он есть, каждые три года эволюционирует с учётом обратной совместимости. Становятся ли он проще с каждой версии, ну уж нет. Но программирование на нем, перекладывание идей в код, однозначно становится проще. Уже нет крутых поворотов на тропу диких указателей Си. Голые указатели "заменили" умными. Многословность упразднена auto.
Главная особенность С++ это совместимость с С кодом и библиотеками написанными на нём. Просто оборачиваем в extern "C" и тащим в проект. На старте языка, это дало очень сильный буст.
Программиста на С++ новые стандарты освободили от гнёта низкоуровневого кода. Теперь, он может творить "почти" как на C#. Что бы это не значило:) И не нужно учить 2000 страниц стандарта языка. Берем вам нужные фичи и используем. Код становится чуть надёжнее и проще. Вангую, что никто не знает полностью язык С++, даже сам создатель языка.
Но, что может пойти не так?
Оказывается со стороны не С++ программистов, много критики. Язык сложен, старый, многословен, нет единого пакетного менеджера, по умолчанию всё не const, мало функциональщины, нет сборщика мусора, Страуструп уже не тот... Ну вы поняли.
С++ программисты всегда ругали язык, но программировали. Все, что нас окружает это С/С++ в разных пропорциях. Си код собираемый С++ компилятором, местами С с классами для совместимости. Собственно о чём я, конечно же о Rust. Такое складывается ощущение, что утята дорвались до интернета.
Rust не плохой язык, свежие идеи по безопасности воплощенные в языке, стандартный пакетный менеджер. Сложность терпимая. Но, почему за ним идёт шлейф сектантства?
Особо ретивые ученики, уже отпраздновали кончину С++. Весь код в мире переписан на Rust. Но вот скажите мне, почему в Rust'е осилили безопасность, парсинг 100500 разных видов скобочек, но не осилили впилить исключения и нормальный ООП к которому все привыкли за 40+ лет. Это не безопасно?
Вы серьезно считаете, что ломание всего API с возвратом кодов ошибок и принуждением прокидывания их в каждом методе, избавляет программиста от ошибок? Нет вы не угадали. Это не безопасность, а пердолинг по правилам языка. Нет выбора, отсутствуют удобные механизмы обработки ошибок и это только одна из сторон языка.
Но нельзя сказать, что Rust это всего лишь, попытка. Rust решил одну проблему. Проблему lifetime'ов.
Время жизни - это конструкция, которую компилятор (или более конкретно, его анализатор заимствований) использует, чтобы убедиться, что все заимствования действительны. В частности время жизни переменной начинается с момента её создания и заканчивается когда она уничтожается. Времена жизни и области видимости упоминаются часто вместе, но они не совпадают.
То есть вы не сможете выделить память и просто забыть её освободить, тем самым вызвать утечку памяти. Когда программа, съела всю память и ОС ушла в свап. Компилятор Rust включит все эвристики и будет мучить вас до тех пор пока вы не гарантируете средствами языка, корректную и безопасную работу с памятью.
Но есть и другой вид ошибок, который не может решить не один промышленный язык.
А это:
-
Логические ошибки.
-
Численные переполнения.
-
Переполнение стека.
-
Проблемы с выравниваниями.
-
Сложные проблемы многопоточности.
Следущим на подходе это Carbon от Google. Что сказать, полно денег, может себе позволить:) Синтаксис как у Rust, ох и любят они эти ваши fn ->[i](чего то там). Даже пугают обратной совместимостью с С++, типа unsafe как в Rust только Cpp{ужасный код состоящий полностью из UB, разврата, похоти, всякого непотребства и крови девственниц}.
Как я реагирую на создание очередного языка, рекламирующего стать убийцей С/С++. Опять?
Насколько я помню, в начале была Java написанная на С++, так как иначе будет тормозить ещё больше:) Rust это LLVM написанный на.. Сами догадайтесь:)
Если подытожить, компиляторы и требования к экосистеме стали настолько сложными в реализации, что уже неважен синтаксис, главное экосистема и наработки. У С++ они есть, у других...
Возможно когда-нибудь С++ станет безопаснее и вберет дельные идеи и наработки из других безопасных языков, в том числе и Rust. Бремя совместимости с С и экзо килотонны кода, накладывает свои ограничения, на скорость и качество эволюции языка.
-
Что там происходит в современном софте? Всё в говне сэр!
Вы знали, что раньше весь софт который вам был нужен, умещался на одном CD диске + операционка? Это не шутка.
А если серьёзно, софт стал сложным, тормозным и не удобным. О windows даже вспоминать уже не хочу. Windows 11 не может нормально работать без ssd диска. Раньше сервера с базами данных читали и записывали информацию на hdd, обрабатывая десятки тысяч запросов, винда видите ли не может. Ей нужно передавать гигабайты телеметрии о пользователе. После установки она занимает 40 гб. Вы думаете в комплекте какие то вам нужные программы? Нет. Максимум сможете посмотреть фильм через медиаплеер и запустит калькулятор.
Что бы не быть голословным. Возьмём мой любимый дистрибьютив Lubuntu. Использую его лет 10. В основном использую LTS версии. Установлена на 2 ноутбука и 2 ПК.
Версия 16.04 LTS после установки съедает 300 мб RAM и содержит 100500 полезного софта. Редкаторы графики, документов. Просмоторщики картинок, браузер, и просто графические утилиты. Последняя актуальня версия 22.04 LTS уже съедает 500 мб ОЗУ. Но между выпусками прошло 6 лет. И за это время системные требования изменились на 200 дополнительных мб и дропнули поддержку 32 битных процессоров.
А что произошло с Windows 11?
Требования к оборудованию
-
Процессор: 1 гигагерц (ГГц) или быстрее с двумя или более ядрами на совместимом 64-разрядном процессоре или системе на микросхеме (SoC).
-
Память: 4 гигабайта (ГБ) или больше.
-
Хранилище: 64 ГБ или больше свободного места на диске.
Android 13
Компания Google повысила минимальные требования к устройствам, которые будут работать под управлением операционной системы Android 13.
Теперь смартфоны и планшеты, которые хотят получить новую операционную систему, должны иметь не менее 2 ГБ оперативной и 16 ГБ энергонезависимой флеш-памяти.
И тенденция только растет, с каждым годом старые 4, 8, 16 ядерные процессоры устаревают и каждый год маркетологи выдавливают из себя презентацию с графиками производительности в районе 1-2%. Убеждая нас о прорывах и рывках.
Но может мы получили сверх быстрый софт? Нет, нет и ещё раз нет. Каждая новая версия программы, операционной системы требует больше системных ресурсов.
Веб превратился в чёрную дыру системных ресурсов, она поглощает всё. Загружает процессоры, выжирает ОЗУ, браузер всё время, что то сохраняет на ssd. Сайты не пишут на js и html, их пишут на фреймворках разной паршивости и прожорливости. И по всему миру процессоры, мобильных устройств, домашних ПК просто греют воздух выполняя миллиарды лишних инструкций.
Просто оставлю эту картинку здесь!
-
Что у нас там по микросервисам?
Все мы знаем как на Хабре любят делиться историями по распилу монолита.
Обычно любая статья начинается с истории, как же разработчики страдали с монолитом. Комиты не комитились, абсолютно всё было плохо, релиз раз в месяц, ужасные миграции, девушки не давали телефон. Но вот вдруг они прочитали историю успеха. И как только монолит был распилен, жизнь и разработка преобразилась. А в итоге разработка усложнилась на порядки и вот почему.
Как работает монолит, есть БД + пару слейвов. Все запросы работают в едином адресном пространстве. Транзакция либо отработала, либо нет. Других вариантов просто не может быть. В проекте одна моно репа, что позволяет обновлять библитотеки и быть уверенным, что сервис использует именно эту версию библиотеки. Простое развертывание и тестирование. В основном используется реляционная БД + redis для кеширования. Простое профилирование, так как весь запрос как на ладони, требуется только использовать встроенные средства БД. Единая точка логов, что позволяет написать инструмент для визуализации и мониторинга.
Что у микросервисов? Полный набор болячек. Транзакций нет, теперь появились распределенные штуки. Запрос по сети должен обратиться к другим сервисам, "дождаться" ответа, собрать информацию, валидировать, убедиться, что все сервисы ответили, И только потом после всех этих действий, транзакция считается исполненной, это прям мега упрощение. Просто распилив монолит, на ровном месте приобретается проблема распределенных транзакций, конечно же она решается, за счёт дополнительного кода, дополнительных инструментов, дополнительных лагов сети, синхронизации и т.д Количество микросервисов растет, рассинхронизация по API между сервисами тоже. Как развернуть для тестирования и отладки, тоже непонятно. Как обновлять используемые библиотеки и быть уверенным, что они одной версии, вообще считаю неподъемной задачей, все равно приходится заводить некую монорепу для библиотек и тягать их в микросервисы. Абсолютно все стороны проекта при распиле или переходе на микросервисную архитектуру усложняются. Когнитивная нагрузкка возрастает. И срочно ищется >= 1 девочка ибо без него оно всё просто не взлетит.
Есть только один якобы довод. Каждый микросервис становится независимым и небольшим. И да я абсолютно согласен, только, что мешает из легаси монолита, сделать модульный монолит. Объеденив преимущества монолита и микросервисов, без микросервисов:)
А самое безумное, что микро сервисы не нужны 95% процентам компаний. Высокая производительность достигается на современном среднем сервере, без терабайт ОЗУ. Простым модульным монолитом. Просто время от времени, требуется обращать внимание на производительность и анализировать замедление. Если вы к примеру грамотно настроили конфиг того же Postgresql, это половина успеха.
Уверен, что данный тренд идёт на спад. И многие компании, опять возвращаются к монолитным решениям.
-
И что в итоге?
Вернуться к основам:)
У меня нет ответа. Менеджеры и бизнес, хотят быстрого выкатывания фич и самого продукта. Это влияет на прибыли. Капиталистический корабль айти, уже даёт течи и когда нибудь обязательно перевернется, но явно не в ближайшие годы. Поэтому у разработчиков нет никаких шансов, что то изменить. Прибыль будет всегда стоять во главе угла и сметёт всех и вся. Поэтому если вы читаете меня, вы и есть сопротивление:)
Но душа у меня болит за быстрый софт. Меня привлекает концепция имея малое, получить большее. И поэтому вне рабочего времени разрабатываю библиотеку LDL, это аналог заменитель библиотеки SDL. Но написана на С с классами и имеет единое API, для всех поддерживаемых систем, DOS, Linux, Windows.
Возможно, что не так уж и плохо в современном айти. Мы получили более современные инструменты, ускорили разработку. Получили очень мощное железо. Но часто, при очередном лаге на сайте или в программе, понимаешь, что оно не должно лагать, явно причина во фреймворках или библиотеках. Что элементарные задачи стали исполняться не пропорционально долго, обрабатываемому количеству данных. По простому, нечему тормозить. А когда представляешь, что миллиарды устройств по всему миру, без полезной нагрузки исполняют миллиарды инструкций, которые являются платой за некую простоту, то понимаешь, а какова цена. И на сколько ещё она увеличится со временем, есть ли этому предел.
Спасибо за внимание.
Автор: Евгений