Как стать автором
Обновить

Комментарии 864

Переходи на Linux, в частности я работаю на xUbuntu 20.04. Там намного экономней расходуются ресурсы. Проблему, что вы описываете не так ощущается. На простеньком целерончике данная система работает вероятно быстрее и отзывчивее, чем Винда на мощном железе с внешней видеокартой!

Вполне проявляется, достаточно попробовать собрать любой опенсоурс проект, он тут же потянет к себе миллиарды таких же опенсорсных библиотек. Из которых многие нужны только ради одной двух функций.

А та же винда 10 у меня работает на 12 летнем деле и ей нормально )

Зачем собрать опенсорс проект, если все можно поставить из готовых пакетов?

"он тут же потянет к себе миллиарды таких же опенсорсных библиотек" давайте на примере разберем, что именно вы собираете, и что у вас там подтягиватся под Linux?

А в готовом пакете бинарники, простите, собраны из чего? Не из такого же сонма инклюдов, на уровне исходников, а в скомпилированном виде всё равно тянущие зависимости от внешних бинарников от прочих библиотек? И всё это прыгает по экспоненте сall-ов. Если бы не SSD, доступная оперативка, и аппаратные инструкции в процессорах и их многопоточность, работа компьютеров под управлением любой современной ОС была бы печальным зрелищем.

По крайней мере в deb-пакете можно поставить зависимость, и эта библиотека не будет дублироваться для всех, кому она нужна.

На других системах тот же ICU системный так просто не заиспользуешь, и люди тянут свой, а это 30 МиБ только ресурсов (можно собрать урезанные для части локалей, но всё же), не считая мегабайтов самого кода. Потом curl (полмегабайта), openssl (более мегабайта), libpng и прочие аналогичные, zlib, OpenAL...

И ведь всё это не будешь самостоятельно писать (и лучше и не надо, без того же ICU почти наверняка локализация будет неправильной).

По крайней мере в deb-пакете можно поставить зависимость, и эта библиотека не будет дублироваться для всех, кому она нужна.

И сразу получаем DLL Hell в полный рост.

DLL hell — это всё же windows-специфичная проблема. Ад зависимостей может существовать и в linux'е, но для библиотек как правило всё хорошо. Да и разные мажорные версии утилит обычно могут быть установлены одновременно (тот же python).

для библиотек как правило всё хорошо

2 разные версии openssl, или libjpeg без танцев с бубном я бы не ставил.

Прямо сейчас:
dev-libs/openssl-1.1.1o - для современных приложений
dev-libs/openssl-compat-1.0.2u-r2 для старья. после окончательного перехода старья на новые либы (или выпиливания оного в пользу более нового функционального аналога) compat версия с очередным обновлением будет выпилена из системы. C libjpeg чуть иначе, но в целом ровно то же самое.
Установка штатная, танцев с бубном не наблюдается, обновление централизованное и штатное. Посчитаем сколько версий libjpeg в венде, проследим как, когда и чем они обновляются?

А зачем сравнивать с виндой? Что будет, если libbuka захочет новую SSL, libzuka — старую, и потребуется слинковать приложение с обеими?

Поясняю. Прямо сейчас (на тот момент) в системе стояли две библиотеки, старая и новая. С которыми слинкован прочий установленный софт. Ну собственно старую я поставил не из любви к искусству, её притащил по зависимостям слинкованный с ней софт. Т.е. ответ на ваш вопрос "Что будет" таков: софт стоит и работает.

Значит, или между библиотеками не возникло конфликта (например, по сигнатурам и семантике экспортируемых имён), или кто-то тщательно озаботился дополнительными подпорками по их совместимости (хотя бы через symbol versioning). Можно сказать — повезло. С другой — может не повезти

А что с ними должно быть, если это разные файлы?

Если они как по умолчанию в одном пространстве имён, может происходить такое: есть некоторое экспортированное на публику имя, которое в (продолжим называть это libssl) v2 имеет одну сигнатуру, а v3 — другую, и оно при этом используется из собственных же вызовов. В пространство экспорта попадёт только одна из них, и вызов из той версии, которая хочет другую сигнатуру, будет иметь непредсказуемые последствия.

Чтобы не было проблем от такого конфликта, надо заниматься уже специализированными играми, которые учитывают такую возможность: или с visibility (сложнее), или с symbol versioning (проще, но надо не забывать это делать раньше, не откладывая).

Этот давно не погружался в особенности сишной сборки, но разве пространство экспорта не индивидуальное у каждой библиотеки, и разве в момент динамического связывания lib1.echo() и lib2.echo() — не разные функции и не будут подгружены по разным адресам в пространстве импорта?
Не говоря уже о том, что библиотеки и не должны экспортировать все свои импорты.

> но разве пространство экспорта не индивидуальное у каждой библиотеки

В ELF — нет. Например, вы через LD_PRELOAD грузите SO в котором malloc() и free(), и все ссылки из libc теперь будут резолвиться в эти версии, даже если эти функции в той же libc (как обычно). Из других библиотек — тем более.
В общем случае, в одном пространстве символ (или символ+версия, если символ версионирован) — какой первый найден, тот всем и отдаётся на запрос импорта. А дальше те регулировки, что я упоминал.

> Не говоря уже о том, что библиотеки и не должны экспортировать все свои импорты.

По умолчанию как минимум с GNU ld — всё что не static — экспортируется. Регулируется или компилятороспецифичными указаниями в исходниках, или скриптом линкера.

Ага, спасибо за разъяснения.

DLL hell — это всё же windows-специфичная проблема

Только из-за аббревиатуры DLL, а не из-за принципа работы.

не нужно далеко ходить, посмотрите на NPM и Composer зависимости любого сайта.

Раньше из всего JS было достаточно JQuery, а сейчас ? npm папка запросто может достигать гигабайтов, а потом от слишком большого количества файлов глючить и падать сборщик, прекрасно.

По крайней мере в deb-пакете можно поставить зависимость, и эта библиотека не будет дублироваться для всех, кому она нужна
Ну да, если бы…

Скажите это Каноникал, которая везде продвигает Snap

Если вам не нравится Snap. Дело буквально двух команд.

Вот статья.

https://losst.ru/kak-udalit-snap-paket

Лично я сам удаляю на слабых машинах.

В snap насамом деле есть и плюсы и минусы. С одной стороны это контейнеризация, примерно как в docker. С другой стороны большее потребление ресурсов в совокупности с накладными расходами.

Самое главное, что это как опция, хочешь пользушься, хочешь отключаешь.

Ну как сказать — опция. В современном гуи убунты это основной способ установки приложений. Конечно, никто не запрещает написать apt install, но встроенный менеджер приложений устанавливает именно через snap

Ну а что разработчики должны, вместо того чтобы использовать, например, libpng, писать свою собственную альтернативу этой библиотеки и юзать её? Так проблему это тоже не решит, просто вместо libpng будет свой велосипед.

Только у автора скорее проблема с bloated приложениями на фреймворках типа Electron, а не из-за dll'ок. Так-то это нормально использовать для определённой функции какую-то библиотеку, реализующую конкретную функцию.

Хе-хе, PNG стандарт, пишите сколько хотите реализаций, а вот этот libpng для ленивых. Что, не хотите писать? Так может и PNG этот не особо нужен? Векторная графика покрасивше будет. Хотя нет, ASCII графика ещё лучше! И проще! И поддерживать не надо! Хотя нет, семисегментный индикатор куда больше полезной информации показывает! Зачем усложнять когда можно упростить?

Про PNG как раз случай был. Надо по png-картинке было понять её размер, да ещё всё мультиплатформенно сделать. Разработчик начал было искать библиотеки для парсинга PNG (ImageMagick отлично справляется с задачей), но оказалось - что по стандарту - надо прочитать несколько байтиков из заголовка файла.

Вот что лучше - тянуть огромную библиотеку, следить за ней, обновлять, или написать свой велосипед на 3 строчки кода?

Вот что лучше

Ну, если речь шла исключительно о png, никакие другие форматы обрабатывать не потребуется никогда в жизни, и ничего кроме размера этой пнгшки никогда не понадобится — то выбор очевиден.
Кто даст такие гарантии?


А в реальности нужно извлекать информацию из полдюжины форматов и в перспективе добавить к ним поддержку еще нескольких, иметь дело с экзотическими (вплоть до невалидности по спекам, но читаемости реальным железом/софтом) вариациями, поврежденными файлами и прочим.


А, тем временем, в соседнем отделе другой такой же гений пишет в соседний модуль того же приложения свою реализацию ресайзера с самописными вариациями бикубического фильтра и lancroz. На чистом lua.

НЛО прилетело и опубликовало эту надпись здесь

Никто.
И будет в итоге развесистая петрушка из либы для апскейла, либы для даунскейла, либы для загрузки/сохранения (этот не слишком оптимистичен, не? одной же хватит на все случаи жизни? ладно, возьмем по одной на формат) и кучка костылей для жонглирования байтами.


Потому что задача никогда не появляется одна, но если кушайц слона по слишком маленьким частям, то выйдет monkey patching в виде годовых колец.
И когда дойдет, что надо было сразу прикручивать imagemack — придется рефакторить вообще все.

Ну, если речь шла исключительно о png, никакие другие форматы обрабатывать не потребуется никогда в жизни, и ничего кроме размера этой пнгшки никогда не понадобится — то выбор очевиден.

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

А, тем временем, в соседнем отделе другой такой же гений пишет в соседний модуль того же приложения свою реализацию ресайзера с самописными вариациями

Было дело, был у меня алгоритм SuperOboyeUlutshatel, который пытался убрать шакаленные артефакты джпега (зная, что он использует квадраты 8x8 и обрабатывая только эти участки). Хотя это больше по фану было и не продакшен, просто вспомнилось в рамках обсуждения.

Ну, про сверхузкоспециализированный случай, когда ничего никуда никогда не растет и не дорабатывается, каджит, собственно, там же и написал.
Но такой случай — пекулярный, из выборки такие выбрасываются для повышения репрезентативности.
Это значит, что он не подходит ни как мерило, ни даже как пример.
Но узнать о таком курьезе забавно и поучительно, спасибо, что поделились.


Хотя это больше по фану было и не продакшен

Для себя исследовать какую-то область — всегда полезно ) Даже если получившееся решение непрактично, оно дает опыт.

lua разный бывает. На 4-ом пишет, или на 5-ом, который до сих пор не закончен?

А еще с jit'ом или без.
Но simd все равно быстрее в разы, а знание математики помогает дополнительно оптимизировать задачу. Одиночке будет крайне сложно переплюнуть труд сотен.
Особенно если настолько некопенгаен, что пилит свой велосипед, вместо того, чтобы взять готовую и отлаженную библиотеку, не имея против того серьезных возражений.

Миллиарды опенсорс библиотек это хорошо. Главное чтобы LTO работало.


Пусть в мире будет одна Идеальная Быстрая сортировка, Идеальный способ открыть файл, Идеальный способ отправить емейл через SMTP. И пусть этот идеальный способ экспортируется и распространяется как библиотека. Это приводит к тысячам библиотек? Да, и что плохого? Это неприятие велосипедов возведенное в абсолют. Это прекрасное будущее где ты создаешь только код который никто до тебя в мире ещё не написал, а потом им пользуются миллионы других разработчиков по всему миру.


Немного утопично, но это куда ближе к хорошему чем "если это реализовывать меньше 80 часов то напишем свой велосипед".

Для этого в опенсорсе должна быть модерация и голосование, какой пакет принять за основной. А потом основная библиотека перестаёт поддерживаться, появляются форки, и… ну вы поняли, было 11 стандартов, решили стандартизировать их все - теперь 12 стандартов.

А ещё основные библиотеки точно так же жиреют со временем в попытках сохранить обратную совместимость и вообще в экономии времени на оптимизацию, так что легковесные аналоги появляются и есть буквально для всего. И это не плохо, это, своего рода, конкуренция (хотя в опенсорсе… конкуренция?), но ни о каком "едином стандарте" речи быть не может.

А ещё мейнтейнерское "я так вижу, хотите свою фичу в моём пакете - делайте форк".

А ещё… продолжать можно долго.

Для этого в опенсорсе должна быть модерация и голосование, какой пакет принять за основной. 

И тут же возникает проблема на уровне, где система для опенсорса с голосованием за форки порождает альтернативную площадку с «легковесной» подачей и быстрой доставкой фич без голосования. И вот у нас и тут становится минимум 2 стандарта «правильной» разработки опенсорса.

Идеальная Быстрая сортировка?

У вас может быть задача отсортировать данные, которые помещаются в память, а может быть задача про данные, которые не помещаются в память, надо тогда работать с диском или ещё с каким-то хранилищем. И вот у нас уже две Идеальные Быстрые сортировки.

Данные которые не помещаются в паять не надо сортировать Быстрой, для этого есть другие способы. Так что это не проблема, да — кубики лего должны быть одинаковыми и хорошо сделанными.

Есть 100500 других особенностей. Где-то крайне дорог или невозможен обмен местами элементов. Где-то — очень дорогое сравнение, нельзя терять его результат, а конкретная реализация Идеальной Быстрой Сортировки проверяет только на <, а не на <=>. Где-то нужно уметь сортировать при наличии несравнимых элементов, несмотря на формальный запрет таковых (привет, float), где-то нет.
Говорить про пригодную для 99% случаев версию — ещё можно. Для всегда — нельзя.

Быстрая сортировка без обмена элементов существовать не может — это заложенно в её основе. Сравнение с несравнимых элементов — это так же не быстрая сортировка а видимо что-то типа NullQuickSort которая сначала выполняет некоторую логику (сдвигает нуллы куда-то), а потом уже сортирует оставшуюся часть нашей Идеальной Быстрой Сортировкой.


Так что как раз получается, что по опредлению такой алгоритм будет единственным, и уже поверх него можно городить доп. логику. Это и есть задача программиста. Взять готовый кубик (рабочую сортировку на множестве с определенным сравнением), и навесить на него сортировку флоатов.

> Быстрая сортировка без обмена элементов существовать не может — это заложенно в её основе.

Любая сортировка может быть сделана без обмена созданием массива индексов/указателей и перестановкой этих указателей вместо самих элементов. И это не зависит от того, она «быстрая», пузырёк или что-то другое.

> Сравнение с несравнимых элементов — это так же не быстрая сортировка а видимо что-то типа NullQuickSort

Возьмите массив float'ов, заполните случайными значениями и растыкайте среди них, например, процентов 10 NaNʼов. Дальше отсортируйте разными алгоритмами и посмотрите на результат. Получаются весьма забавные зависимости от подхода. Некоторые реализации вообще крэшатся на этом, но все известные мне сортировки из стандартных библиотек C и C++ выживают.
А вот Rust просто откажется такое компилировать — трейт floatʼа не помечен как допускающий total order.

Для разминки ума, кому интересно, может подумать об отвлеченной и более материальной задаче: сколько человечеству нужно узлов. Их ведь очень, очень много. И я, как простой "пользователь веревки", имею простые задачи вроде "привязать веревку к столбу прочно" или "привязать веревку к столбу и обеспечить сильный натяг". Но узлов - дохрена, и я так понимаю, что каждый из них иногда по своему хорош.

НЛО прилетело и опубликовало эту надпись здесь

Вот мне, как человеку достаточно далекому от дел флота, альпинизма и строительства, даже полторы сотни кажутся невероятно избыточным количеством. Проблема в узости нашего кругозора. Пока мы очень узко видим задачу (узлы нужны чтобы натягивать веревку сушить белье!) - нам кажется, что нужен всего один узел, и все прочее - от лукавого. Чуть погружаемся в тему, и оказывается, нам нужен еще узел, чтобы можно было очень туго подтянуть веревку, и предыдущий тут не подходит. Погружаемся еще ниже, оказывается, нужен еще узел, который будет легко развязываться. А потом - чтобы он еще развязывался удаленно (просто дернув за конец). Потом узел, который можно завязать на середине веревки, не имея доступных концов.

Наверное, если я подумаю еще - то еще 3-4 потребности в узлах напишу, а про остальные даже и вообразить не смогу, зачем они нужны.

Ой вы навыдумывали. Узел вам нужен один - шнурки завязать.

НЛО прилетело и опубликовало эту надпись здесь

Всю жизнь завязываю одним узлом, хоть в темноте за 2 секунды завязываю, а как они там называются мне без разницы. А у вас в голове много мусора, на простые действия десяток вариантов, и никаких действий в итоге, вся энергия в сотрясание и нагрев воздуха идёт.

НЛО прилетело и опубликовало эту надпись здесь

Ну так будьте проще. У меня всё просто, у вас в том же месте какие-то сложности. Я помню как меня родители учили шнурки завязывать, потом сам друга научил, и вас могу научить. А ещё вы удивитесь сколько народу на велике не умеет ездить. Только я один с десяток людей научил никому ничего не навязывая. И всё это потому что объясняю просто, а не ссылками швыряю и десятки вариантов предлагаю.

НЛО прилетело и опубликовало эту надпись здесь

Бла-бла-бла.

У вас может и все просто, но есть вот ужасные скользские жесткие шнурки которые если обычным способом завязывать развяжутся спустя пару км хотьбы, если не раньше.

Ну и? У меня то никогда не было скользких (: У вас тоже врядли, нагуглили небось какую-то дурость. Я себе скользкими шнурками скорее пальцы порежу чем завяжу их, и избавлюсь незамедлительно от такого счастья.

Видимо вам очень повезло, я несколько раз такие кроссовки покупал, а менять шнурки — это париться надо.

Это значит только то что вам продали обувь без шнурков, а на место шнурков какую-то леску натянули под видом шнурков, и вы зачем-то мучаетесь полумерами. Я бывает в магазине лечу людей, покупающих масло, мол это такое название продукта, "Масло 60%", если перевернуть и состав посмотреть то там будет уже молочный продукт или ещё какая гадость, а 60% масла просто не существует.

Оффтопик конечно, но качество обуви легко определить по шнуркам. Если производитель сэкономил на шнурках - не нужно это брать.

Если посмотреть контекст, то как раз ровно в этом и суть: нам, не-специалистам, нужен только один узел, а вообще их придумали несколько десятков для разных нужд. Аналогично и с алгоритмами: нам достаточно одного условного QuickSort, а вообще - совсем не факт.

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

Сортировки нужно две - устойчивая и не устойчивая

Умножьте на 2 для начала;). Массивы и связанные списки сортируются по разному.

Ну тогда нужна некая абстрактная перестановка местами двух элементов и абстрактное сравнение этих двух элементов в некоей абстрактной структуре данных. Каждой из этих абстракций автор библиотеки может докинуть аргументы по умолчанию. Так и совместимость с не абстрактным не потеряется, если первая реализация только для массивов, и чуть поправить можно. Но суть в том что всё это должно быть реализовано автором первоначального алгоритма, а не кем-нибудь относледовано и переделано. Т.е. Первоначальная задумка должна сохраняться, и при необходимости дополняться.

НЛО прилетело и опубликовало эту надпись здесь
а потом им пользуются миллионы других разработчиков по всему миру.

А это — нет.

Эм, почему?

НЛО прилетело и опубликовало эту надпись здесь

Ну вот, опять докопался до формализма необходимости/достаточности :(

А потом случится какая-то ерунда в твоей жизни и ты запилишь какой-нить баннер или зловред в либу и миллионы разработчиков от этого подгорят.

НЛО прилетело и опубликовало эту надпись здесь

А потом библиотека, подтягивающая другие библиотеки вместе с другой многоколенной библиотекой подтягиваются в сто пятую библиотеку. И вот уже экспоненциальный рост пожирания ресурсов обгоняет технологический прогресс, а еще чуть позже на неописуемой скорости врезается своей огромной массой в нерушимый потолок физических ограничений. Все, закон Мура не действует, производители больше не могут наращивать производительность на единицу процессорной площади. И придётся все переписывать заново, зато не изобретали велосипед

У вас от библиотек производительность будет лучше, а не хуже. Попробуйте собрать любое раст приложение — там в реальной аппке на пару тыщ строк вероятон будет пара сотен транзитивных зависимостей. Попробуйте теперь сказать, что код получился медленным и раст тормозит.

Полностью соглашусь

Для удаленки взял свой старый медиацентр. Что бы не занимать ноутбук. Athlon x4 640. Добил до 8гб + ssd. Поставил, windows 10 и lubuntu lts последнюю. Все же lubuntu побыстрее и меньший жор ОЗУ. И не так часто вижу в top'e загрузку проца под 100%. Серфинг одинаков на обоих осях.

Я бы разбил проблему на части

Разделяемые библиотеки

Разделяемые библиотеки как раз и созданы для того чтобы избежать дублицирования кода, поэтому ничего плохого в их использовании нет. Но для того чтобы этот потенциал был реализован более полно, нужно чтобы (1) их лицензия позволяла программам в системе их использование и (2) программы были собраны именно с установленными в системе версиями библиотек, а не требовали другие версии. В случае дистрибутивов Линукса, казалось бы, эти условия выполняются чаще и лучше.

Но это преимущество имеет, правда, и свои негативные стороны. Например, когда в дистрибутиве десятки тысяч программных пакетов, обновление программы имеющей сотни зависимостей становится достаточно сложным, особенно для программ с несвободной лицензией. И чтобы решить эту проблему придумали всякие snap и flatpak, что полностью нивелирует преимущества разделяемых библиотек, то есть как раз в области, в которой дистрибутивы Линукс могут проявить себя лучше.

Умножение системных процессов.

В системах на основе Линукс, как и в Виндосе множатся и плодятся системные процессы. Причём почему-то с каждой новой версией они становятся всё более прожорливыми, пожирая память и процессор. Я уже смирился, что даже в Линуксе какой-то демон, ответственный за вывод звука иногда может есть процессорное время даже когда никакого звука в системе не проигрывается. Конечно, это пока это не дошло до крайностей, описанных в статье, но надо признать, тенденция в Линуксе такая же как и в Виндос.

Раздутые приложения-монстры

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

Приложения на электроне

Эта беда проникла как в Виндос, так и в Линукс и здесь Линукс ничем не отличается от Виндос. Это просто фабрика монстров.

Список можно продолжать. Но ясно что беда затронула и Виндос и Линукс.

Я не программист, потому интересуюсь, а зачем скачивать всю библиотеку? Почему бы не скачать те самые 1-2 функции с меткой к какой библиотеке они принадлежат?

Потому что библиотека — минимальный уровень деления законченного и готового к распространению кода.
Функция может использовать другие функции, которые даже не будут экспортироваться. Портянка констант может составлять существенную часть библиотеки. Имена функций в разных библиотеках могут совпадать. Она может экспортировать вообще не функции, а интерфейсы.
Библиотека объединяет это все в одну логическую единицу, уменьшая сложность управления.

Не правильно выразился, так не делается потому что это технически сложно или потому что так просто никто не делает и нет готовых решений? Исключая описанные вами случаи когда действительно придется качать всю библиотеку. Условно говоря чтоб с готовым продуктом шли не все библиотеки целиком, а только нужные в данном случае части, чтоб не было такого чтоб из библиотеки идущей с продуктом используется процентов 10. Тот файл с тем же именем, но облегченная версия, внутри которого есть список того что было вырезано. В таком случае это не решит проблему , но облегчит ее.

В компилируемых языках при статической линковке библиотеки из неё выбираются только нужные элементы. При динамической линковке библиотека (.so, .dll) одна для всех и ничего из неё удалить невозможно.
В интерпретируемых языках также бывают сборщики проектов (например, gulp или webpack для JS). Они также умеют выбирать только используемые элементы модулей и библиотек.

Благодарю за пояснение

Господин не прав. Днесь пытался найти на ноутбук HP6110 с 32-разрядным процессором вменяемое ПО, при наличии 2-х гигов памяти. К удивлению своему - НИЧЕГО! Ничего, что бы вменяемо работало с Интернетом. Даже маленький Alpine - и тот уже не торт.

Пробовал множество линуксов.

Однако старая версия Runtu движется быстро и хорошо - прекрасна во всех отношениях - но не открывает современные сайты, и поэтому бесполезна...

при наличии 2-х гигов памяти

Мне кажется тут дело немножко в другом.

Попробуйте firefox + umatrix.

Вы про Alpine, а я про хUbuntu. У xUbuntu сообщество в сотни раз больше.

"Пробовал множество линуксов." Зачем пробовать, поставьте один вроде xUbuntu, и работайте. Хватит пробовать. Я вот запустил и работаю, уже лет 10

А чем Вам ОСь поможет то? Проблема в том, что сами сайты состоят из говнокода чуть более чем полностью и одна страница "весит" сотню мегабайт. Это на стороне сервера оптимизировать надо, иначе никак.

Потому что ОС, это основа всего. Если сама ОС вроде Виндовс, жрет памяти немеряно, то что останется на все остальное?

В Linux есть дистрибутивы например xUbuntu, которые очень легкие, и работают одинакого быстро и на простом железе и на хорошем.

Еще раз. Если с сервера в браузер приезжает жирный js-код, который выполняется на вашем процессоре, то не очень принципиально, сколько ест система, обычно это единицы процентов ресурсов процессора.

XUbuntu жрёт 600-1000 МБ просто загрузившись, для хоть какой-то работы ей надо 2 ГБ. WinNT Workstation запускалась и работала на 64 МБ, Win2K на 128, WinXP на 256. Ну, ОК, это не совсем честно, потому что NT/2K/XP были 32-битные, банально для CALL по полному адресу надо адрес 64-битный, но разница даже с WinXP в 8 раз. Справедливости ради - рабочая станция на Linux всё-таки больше условных 1-2 ГБ "сразу после загрузки" не съедает (тайловые ВМ - 0,5, голый KDE/xfce - 0,7-0,9, гном с навесами 1,2), а Win10/11 - запросто 3-4.
Ну и, да, согласен с @hyperwolf- основные ресурсы съедаются не голой машиной, а приложениями на ней. Браузер, IDEA, VSCode и куча других приложений съедают примерно одинаково (много) почти независимо от ОС. Да вот пример прямо в углу монитора у меня: Jetbrains Toolbox. Ёлы-палы, это же приложеньице для загрузки и обновления IDE. Оно съедает 200-500 МБ оперативной памяти. Штоа? Как это? Зачем? Ладно, у меня 48 ГБ в одной машине и 128 ГБ в другой и я почти смирился с тулбоксом, но всё-таки, я всё еще помню время, когда на сервере СУБД (СУБД, Карл!) в моей организации было меньше памяти, чем жрёт эта иконка в трее (то, что у тулбокса нет CLI раздражает больше).

Win10/11 — запросто 3-4

Ну, не совсем запросто


(впрочем, работать на этом компьютере всё равно немножко грустно)

Продукты JetBrains невероятно прожорливы. Ещё пару-тройку лет назад пересадили компанию на Rider при моем же участии. А на днях мне пришлось работать на докрымском ноуте. Райдер не смог. Он сожрал весь проц, разогрел его и дико тормозил на простом вводе текста. Запустил VisualStudio и на том же проекте смог комфортно работать. Был удивлен и много думал о том, стоит ли продлять лицензии.

Rider — молодец, умеет в многопоточность. На мощных системах он работает гораздо шустрее студии.

Я ненастоящий программер, но мне кажется — что у JB наиболее адекватная автоподстановка, уровня «я бы сам почти так думал подставить»

Так было. Мы сидели на решарпере, потом на райдере. Но время идёт, vs2022 просто дописывает всю строку кода за меня, невероятные подстановки. MS не стоит на месте, в отличие от. То, что предлагает райдер, в половине случаев приходится удалять. Ну и глюки эти вечные, при этом трудновоспроизводимые.

xUbuntu есть 400 мегабайт после старта!

"600-1000 МБ" Откуда вы такие цифры получили? И где вы нашли WinNT Workstation? Давайте с Windows 10 сравним, или с Windows 11.

"WinNT Workstation" - операционка которой уже больше 10 лет не существует, и на любом железе современном вы даже не запустите.

В таком случае нужен дистр минимально потребляющий ОЗУ. Что бы по серфинг оставить максимальное возможное количество памяти из 2-ух гигов.

У меня mint (xfce) вполне норм работает на eeePC c 2 Gb и 900 МГц "целероне", тянет офис и браузер, даже ютубчик в низком качестве при желании можно посмотреть. Разумеется я им не пользуюсь в повседневной практике, нет смысла никакого. Но как читалка, компактная печатная машинка, аудиоплеер, вполне норм.

Вот если все это поставить на нормальный комп! Сколько экономии в ресурсах произойдет, по сравнению с перегруженными системами. У меня стоит xUbuntu с xfce, все летает, никаких тормозов. Софт по сути одинаков везде. На xUbuntu стоят все те же программы, только ресурсов больше свободных.

Пробовал множество линуксов.

А какой был графический интерфейс? Я как-то разбирался, как ускорить работу Linux на старом компьютере, и обнаружил, что очень много ресурсов забирал на себя tracker, программа для индексации файлов. Причём вроде он работал даже если я использовал другое окружение рабочего стола. То есть, по сути компьютер работал бы быстрее, если бы я при установке просто убрал галочку напротив GNOME. Но, повторюсь, это касалось довольно старого компьютера, по логике вещей tracker нужен для того, чтобы ускорить работу (чтобы поиск был быстрее).

А ЗАЧЕМ на это старое говно пытаться что-то натянуть, как сову на глобус?

2005 год, простой Пентиум, да еще и М. Какие невероятные достоинства имеет конкретно этот ноут, чтобы пытаться им пользоваться? Его даже компактным не назвать, он весит почти ТРИ КИЛО, с отвратной TN-матрицей нижайшего разрешения. Его клавиатура тоже не представляет из себя — ничего особенного.

Практически по цене самовывоза можно найти ноут на Core2Duo и он будет отлично справляться с функциями пишушей машинки.
НЛО прилетело и опубликовало эту надпись здесь
То есть — ничего удивительного в том, что оно все унылое и еле шевелится :)
НЛО прилетело и опубликовало эту надпись здесь
Так пускай запускает на нем 98ю винду :)

Мне кажется в каком-то месте маркетолог у нас сменил и программиста и инженера поэтому размеры приложений выросли в сотни раз когда калькулятор может весить сто мегабайт, а игра больше ста гигабайт. А все потому что медленный софт подгоняет железо и наоборот быстрое железо позволяет забить на оптимизацию, все ради того чтобы продавать, продавать и продавать без учёта ресурсов. Одно потребление так же ведет индустрию в тупик.

Для эксперимента советую antix. Возможно взлетит.

Надо просто выкинуть это древнее говно, а не пытаться заниматься с ним роскомпозором. Ноут на Core2Duo можно купить тысяч за 5, который будет на порядки быстрее этого мрака мрачного на пне-м

Возможно автору нравится копаться в старом железе. И пытаться их восстановить для текущих задач. Почему нет:)

Тогда бы он знал — чего ждать от этой рухляди и не жаловался бы тут ))

Не такая уж и рухлядь. Смотрите на производительность одного ядра.

Толку от одного ядра, когда оно все в целом работает, включая hdd и 2 гига оперативки

В том ноуте проц вот такой: www.cpubenchmark.net/compare/Intel-Pentium-M-1.73GHz-vs-Intel-Core2-Duo-E8290/1160vs1790
Сравнил с типичным ноутным кор2дуо

Не обратил внимание просто смотрел массовый проц core2duo. Производительность конечно всратенькая:)

НЛО прилетело и опубликовало эту надпись здесь
Ноутный проц отсюда: habr.com/ru/post/673236/#comment_24468614
«ноутбук HP6110»

И моя рекомендация купить печатную машинку на c2d
НЛО прилетело и опубликовало эту надпись здесь
Но я то сравнивал ноут на старом пне, и к2д
Почитайте камент и посмотрите из чего тот ноут сделан
При чем тут райзен?
НЛО прилетело и опубликовало эту надпись здесь
Я без понятия) Спросил его о том же)

Перепутал я. Просто взял массовый проц core2duo. А нужно срравеивать с pentium m.

Говорили о проце pentium m. Но если сравнивать с десктопным e5500 производительность вполне себе. Но для серфинга будет боль.

Надо сравнивать сравнимое. Средненький ноут на пентиум-м и средний ноут на к2д

Посыл то был в том, чтобы выкинуть эту рухлядь, дорогую как память — и купить б/у, но на к2д. Там совсем другая архитектура и она на порядки быстрее того старого пня, а всех делов — 5к деревянных
НЛО прилетело и опубликовало эту надпись здесь
Потому я выбрал х260, 16 памяти, ссд — очень приятственно работается. Если чисто серфинг, то 11 часов выдерживает, а еще есть увеличенный внешний акк в запасе. Еще и матрицу воткнул в него 1080

х220-40 довольно унылы, там заметно устаревшее железо, а 270 и выше — уже профанация, откровенно неудачные модели, сильно перегревающиеся и вообще не оптимальны. Убили такое приятное семейство, закачивая в него мощности больше, чем нужно.
НЛО прилетело и опубликовало эту надпись здесь
Вопрос целесообразности, мне не нужен мощный ноут.

Для фотошопа у меня десктоп есть и с покупкой ноута я его почти перестал включать. Разве что в пубг погоняться, развеяться
НЛО прилетело и опубликовало эту надпись здесь
Ну, у меня пока так не получается…

Не соглашусь насчёт экономного расходования ресурсов. Отличие Linux только в том, что там принято ставить зависимости общими пакетами, а не тащить их каждый раз с собой. Ну да, небольшая экономия места на диске, но память всё так же будет забиваться.


Также добавлю тенденцию пихать всё в snap и в docker.

Предлагаю сравнить скрины по количеству забитой и свободной памяти? На реальных примерах.

На примерах чего именно?


Вообще, меня больше напрягает Telegram, который аж больше 1 гига жрёт.

Не знаю, что за дистрибутив а у меня вот так. И это xUbuntu. Сама ОС, практически ничего не ест, и отзывы мгновенные. Причем куча свободной памяти, и работает на Целероне

.

Правильно ли я понял, что на экране мы видим 4 ядра и 8 гигов оперативы, как доказательство того, что «этот линукс летает даже на простеньком целерончике»?

Все верно. Легкий дистрибутив и куча свободных ресурсов. Не перегруженность графиков. Вот основа быстрой и оптимальной системы.

Я могу в ответ скрин со своего компа скинуть. Там тоже будет куча свободных ресурсов и не перегруженность графиков. Получится, что Windows 10 — офигенно лёгкий дистрибутив.

У меня i7, 32 оперативы и 2 ssd.На одном стоит минт с синнамоном, на втором в дуалбуте вин 10. Так вот, вин 10 по сравнению с линухом тормозит. Тормозит безбожно. После загрузки в нее минут 5 надо погулять, чтобы она там что-то себе пошуршала и начала, наконец, хоть как-то работать. Но даже после такой паузы работать в винде гораздо менее комфортно. Я даже не могу сказать что конкретно не так, просто какие-то раздражающие микрофризы, которые в целом создают ощущение, что "все тормозит" по сравнению с линухом. Например, запустил простую программу, а она не мгновенно запустилась, а через несколько секунд и т.д, Железо, я напоминаю, одно и тоже и совсем не слабое.

Попробуйте отключить антивирус.

Я не использую антивирусное ПО.

Если вы ставили Windows 10, и не тюнинговали систему после установки, то используете :)
Снести винду и поставить все заново. Стандартный совет для таких вещей. Можно даже не обычную винду, а LTSC — оно и места меньше займет, и куче всяких украшалок крутить в фоне не будет

Но чисто отклик интерфейса — у линукс всегда будет лучше. Винда и Макос выглядят тормознутыми часто именно из-за микро-фризов интерфейса, а не самих программ.
НЛО прилетело и опубликовало эту надпись здесь
Мой опыт показывает обратное. Отзывчивость интерфейса у линухов замечательная, винда и мсакось подлагивают. К этому привыкаешь, пока не пересаживаешься за линь и замечаешь разницу
НЛО прилетело и опубликовало эту надпись здесь
Тоже убунта. Все чуть быстрее, отрисовка окошек, элементов интерфейса, тп
НЛО прилетело и опубликовало эту надпись здесь

зависит от настроек ядра:


Preemptible kernel (low-latency desktop)
Voluntary kernel preemption (desktop)
No forced preemption (server)

а еще, возможно, от оконного менеджера/композера и видеодрайверов.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

у нас десктоп на убунте/минте тормозит больше, чем на вин10. Астра на дебиане и флай дм - летает на том же железе

Я от гнома отказался в самом начале перехода на linux. Мне нравится lxqt. Жручесть меньше. Скорость выше.

Согласен. Жирный плюс, что можно поставить любую DE.

Микрофризы в Linux у тех, кто его запускается чтобы посмотреть через виртуальную машину из другой Операционной системы :)

Но даже если так. поставьте в виртулке xUbuntu. Даже в виртуалке думаю фризов вы не заметите. Что говорить, про реальную установку, космос!

Если 7ка поддерживает то железо, можно для интереса сравнить и её :)

Ну а так, ниже правильно написали, если нужна 10ка, лучше взять LTSC — по дефолту там меньше всякого ненужного запущено. У винды ещё с XP была замечена тенденция по дефолту загружать разную блотварь, включая некоторые службы, но оно всё отключаемо.

У меня i7, 32 оперативы и 2 ssd

На одном стоит минт с синнамоном, на втором в дуалбуте вин 10. Так вот, вин 10 по сравнению с линухом тормозит. Тормозит безбожно. После загрузки в нее минут 5 надо погулять, чтобы она там что-то себе пошуршала и начала, наконец, хоть как-то работать. 

У вас какой-то неправильный ssd видимо, или может ОЗУ. Тоже i7, тоже 2ssd, и тоже 32 гига озу. 17 секунд и уже можно пользоваться. Где вы 5 минут умудрились найти? У меня даже виртуальная машина образ которой на HDD стоит, грузится минуты 2.

У меня даже на старом, не самом быстром SSD всё летало - грузилось полминуты, а потому сразу в бой. 5 минут это только на старых HDD винда могла себя так вести.

Ничего подобно не наблюдается даже близко и на Win10 и на Win 11, конфигурация очень похожа, всё летает

А вам есть с чем сравнивать? А то может то, что для вас "летает", для меня "тормозит"? :)


Как говорится, если вы никогда не пробовали другие туфли, то наши туфли самые лучшие (с)

Я на техническом ресурсе пишу, а не на пикабу, наверно понимаю о чём говорю

Скиньте, мы посмотрим.

Там ещё аптайм чуть больше минуты — может, не всё прогрузилось :)

Не, ну если я вместо KDE поставлю Xfce4, памяти тоже побольше свободной будет.
Но смысл?

Смысл примерно тот о чем пишут в статье. Компактный дистрибутив, компактное ПО, вот один из идеальных примеров, того как должен выглядеть софт, и прекрасно работать даже на слабом железе. Не потреблять излишнее количество ресурсов, память ГПУ и т.д.

Ради интереса перегрузился в Xfce. Потребление оперативной памяти снизилось на полгига, потребление видеопамяти же, наоборот, выросло на полгига. Интересно, почему?

Скрин пришлите, из приложения nvtop? У меня xfce не расходует видеопамяти совсем. Там будет видно какие процессы едят видеопамять и сколько.

Какой-то странный скриншот у вас, хотя бы один процесс Xorg обязательно должен быть. Это случайно не ноутбук со встройкой и оптимусом каким-нибудь?

Thunderbird = 497 Мб, верните мой 2007 The bat! :)

Outlook express из Windows 98 вполне закрывала все задачи электронной почты. Надо будет поставить на виртуалку, и проверить, насколько она актуальна сейчас…
Угу, кроме безопасности.

SSL/TLS.

Без шифрования ничего нынче не работает, хотя оно и нахрен не сдалось, ибо кому надо тевсе равно имеют доступ ко всему что передается и хранится.

Как раз к передается доступа нет.

Давайте я вам пример приведу, из той же категории. Claws Mail - легковесный почтовик. Не требует ресурсы. До сих пор поддерживается и обновляется, работает под Linux, и не только.

И как вы на нем будете открывать динамические письма с кнопками и анимацией?

Вообще, выполнение скриптов в почте — не очень хорошо для безопасности…

А в браузере можно?

В браузере — песочница

Кнопкой "Send to Trash", ибо ничего полезного в таких письмах по определению не приходит :-)


А вообще, он умеет в браузере HTML-письма открывать, что зачастую куда удобнее (и безопаснее), чем в почтовике.

А вы уверены, что браузер поддерживает динамические письма?

А что в них может присутствовать, кроме тройки HTML+CSS+JS? Вопрос без подвоха, я действительно исходил из того, что тело письма - это всегда не более чем веб-страница.

https://developers.google.com/gmail/ampemail/supported-platforms

Ну и, если уж на то пошло, кто может быть уверен, что почтовый клиент будет поддерживать ту или иную проприетарную технологию (если, конечно, это не клиент от владельцев технологии)?

Не туда смотрите, 497М — это только shared mem, а есть ещё resident на 1082М.
И да, Thunderbird — это, по сути, браузер.

А у меня Аутлук. Который не экспресс, а обычный, и более-менее современный, с календариками/планировщиками там всякими, хорошей интеграцией с другим софтом и т.д. Открыто два ящика на 5 гигов писем каждый, жрёт 65 метров памяти, 170 зарезервировано. Работает мгновенно. Старая школа :)

Предлагаю обмениваться не на словах, а прямо скринами с монитором ресурсов из вашей операционной системы, где в целом видно сколько памяти всего, сколько ест операционная система, сколько все остальное вроде Оутлуга. и будем сравнивать.

У меня на компе работает Visual Studio, три мессенджера, три сотни вкладок браузера, две виртуальные машины с убунтами и докер, а, ещё недоигранный Cyberpunk 2077 свёрнутый в фоне лежит. Что вы у меня сравнить сможете?
С точки зрения быстродействия как раз интересуют конкретные приложения. Голая операционная система жрёт несущественно, даже Windows 11. Но как только вы к ней, или к вашей xUbuntu добавите банально браузер, всё сразу поменяется.

"несущественно, даже Windows 11" - это 3 гигабайта, несущественно? или сколько.

Вот xUbuntu ест 400 мегабайт после старта. А дальше навешиваются приложуши. Давайте сравним кто больше ресурсов ест.

Я предлагаю фактами обмениваться!

Вот xUbuntu ест 400 мегабайт после старта. А дальше навешиваются приложуши.

Ну так в Win 11 из той пары-тройки гигабайт, которые она жрёт после старта, минимум половина — тоже необязательный софт. Выключите виджеты, антивирус, визуальные эффекты, всякие фоновые приложения, Teams, OneDrive и прочее барахло, и будет у вас ну не 400 метров, но под гигабайт вы её покромсаете. Больше — тоже можно, но уже ценой функциональности системы.

Я предлагаю фактами обмениваться!

… но показывать вам я это не буду, потому что на это надо время тратить, а я не настолько хочу вас переспорить ;)

Я привёл два скрина от разных "диспетчеров задач" - как раз, с "полновесным" MS Outlook - ну, скромные у него аппетиты... хотя да, пару лет как числится "неподдерживаемым", но... всего пару лет.

Это видимо ошибка какая-то. Наблюдал как память утекает в телеграм в Arch'е. В винде прямо сейчас - давно уже включенный телеграм 28mb занимает

Виндовый диспетчер задач показывает какую-то странную память, по ощущениям сильно далёкую от «реальности». Возможно, лучше смотреть какой-нибудь «рабочий набор» (но не уверен, там всё сложно)

Действительно, посмотрел в Process Hacker. 160Mb при запуске. Сразу пошёл проверять размер exe - 112Mb)

Диспетчер может и что-то не то показывает, но по процентам стабильно после 85% занятой памяти всё начинает тормозить(Диск hdd, 4Гб RAM)

Хотя конечно понятно было что он что-то не так показывает. Память кончалась быстрее, т.е. занято было всегда больше чем сумма занятой памяти которую он показывал, причём ещё до того как приложение подгружало данные из сети. Т.е. например до токо как в той же телеге я нажимал что-либо вообще

Но в линуксе что-то странное с телеграмом, похоже на утечку памяти. Я там просто листал текстовые сообщения и у меня htop всё больше показывал(прям мегабайтами росло)

Так конечно просто если чат с картинками листать то тоже расти будет. Не удивительно что можно хоть до 1Гб догнать. Не знаю будет ли он со временем их сжимать и/или на диск скидывать

Проверил. Полистал огромный чат в том числе с картинками, рядом поставил Process Hacker. Занятая RAM растёт медленно, временами уменшаясь.

Похоже в линуксе таки у него утечка.

При прокрутке чата вполне ожидаемо появляется нагрузка I/O, так что телега вполне хорошо оптимизирована. Немного печально что ей при запуске тоже надо 160Mb

Ну, вот более подробные сведения:

Всё равно, как-то скромнее:

А вы ~~на шкаф~~ залезьте на пару десятков каналов с картинками и видосиками. Он не только памяти нажрётся, но и крашнуться может. ;)

Если хочется узнать, что в действительности использует, надо отобразить Private working set.

Нет, он не включает страницы из свопа. У меня был случай, когда у процесса был слишком низкий приоритет, поэтому казалось, что мало памяти используется, а на самом деле было много, но всё в свопе (при том, что физическая память была свободна).

Да, поэтому надо смотреть на "Private Bytes".

Можно, конечно, но туда, по ходу, и просто memory-mapped files попадут… И вообще, там не обязательно то, что именно записано в своп, а то, что зарезервировалось, но пока не используется.

А вообще всё, что процесс захотел себе зарезервировать (включая shared), отображается в commit size.

Ключевое слово "захотел". Часто бывает, что процесс закоммитил с десяток гигов, а реально пользуется только парой гигов, остальное — нулевые страницы. С другой стороны, в Windows нет overcommit, поэтому да, commit size — хороший способ изменения памяти.

меня больше напрягает Telegram, который аж больше 1 гига жрёт.

Специфика аллокатора в glibc, если верить этому. На других ОС такой проблемы нет.

Интересные, конечно, утечки памяти у телеграма на линуксе, на винде у меня сейчас 80мб private working set и если не смотреть в нём видео, примерно так и будет, ну, может ещё на +100мб разрастётся в процессе (а видео добавляет ещё около 200 на время просмотра). Правда, не официальный клиент, а 64Gram.
> Вообще, меня больше напрягает Telegram, который аж больше 1 гига жрёт.

По которому из показателей?
> cat /proc/16454/status
Name:   telegram-deskto
...
VmHWM:   1109904 kB
VmRSS:    866900 kB
RssAnon:          700264 kB
RssFile:          159744 kB
RssShmem:           6892 kB
...

Как минимум, можно на RssAnon посмотреть.

Как Ваш Telegram смог столько сожрать?!?!

Не Linux, конечно, но:

Оперативки "итого" 8 ГиБ, занято менее трети, запущено 2 браузера (FF и Edge) с парой десятков вкладок в каждом (в одной из них данный комментарий набираю), почтовый клиент (да, Outlook у меня немолод, но он мне нравится больше более новых), WhatsApp, Telegram, Skype (прости, господи), играет Я.Музыка, 1С, встроенный антивирус и ещё куча всякого хлама...

Кажется у нас еще один конкурент Твиттера, хотя по функционалу он не очень далеко ушел от той же аськи. Видимо программисты там создают иллюзию деятельности.

Ну давайте сравним. На 10 летнем десктопе дома win10 сильно меньше кушает. Прекратите верить, что десктопный линукс с гуями - это некое чудо, которое не есть ресурсы.

Это Гном небось 20ГБ отъел? У меня вон KDE Neon с двумя месяцами аптайма гораздо лучше себя чувствует, ресурсы отжирают в основном браузеры и кое какие проги на Electron. Сами кеды при этом потребляют вместе с системой где-то полгига всего.

Мне кажется вы тут, что то под шаманили )) Чтобы нам показать фейк. Список процессов бы показали и отсортировали по потреблению.

Вот как у меня на другой машине.

Это еще при условии, что у меня куча докер контейнеров уже запущено и работает.

Вот, пожалуйста, старый добрый браузер. Там еще миникуб крутится где-то, докер, постгря, но браузеры нынче жутко жрущие до памяти. И да, тут не 100500 вкладок, но штук 30 будет.

Отображение потоков стоит выключить, чтоб не мешались


Ну и мой скриншот, чтоб коммент не был пустым

Это не потоки, это модный snap + браузер, который на каждый чих плодит процесс.

$ ps auxf | grep firefox | wc -l
28


Зелёный цвет в htop — это потоки. Я не отрицаю большое количество процессов, но отображать в htop потоки, которых ещё больше, всё равно ни к чему

Да, вы правы. Редко пользуюсь htop, спасибо. Без тредов:

Ну да, небольшая экономия места на диске, но память всё так же будет забиваться.

А можно поподробнее раскрыть идею? Ведь если используется одна и та же разделяемая библиотека, то код ее и все константы будут разделяться между всеми приложениями, использующими эту библиотеку. То есть допустим у нас запущено 20 приложений KDE, каждое из которых используют 50 мегабайтный Qt с кучей плагинов, если бы каждое приложение использовало бы свою копию Qt на полную, то в результате у нас ~1ГБ оперативки ушел бы на всю эту фигню. А за счет того что Qt одна, страницы памяти разделяются и получаем экономию.

Это не совсем так, so (shared objects) на то и shared, что переиспользуются в памяти между всеми процессами их загрузившими. Отсюда и большие значения в колонке SHR.

У меня есть подходящий пример по поводу 'простенького целерончика'. А именно, легендарный (в своё время) asus eeepc 900, с гигабайтом памяти (и апгрейдом до ssd накопителя).

OS - NetBSD, которая сильно легче линукса -- одно ядро раз в 10 меньше.

Сборка GCC -- не хватает гигабайта памяти и вываливается в своп немного.

То же самое, если попытаться ходить по интернету браузером palemoon (разновидность firefox) -- gmail, wiki, google -- уже тоже начинает из гигабайта вываливаться в своп и конечно же жутко тормозит. В остальном -- работает нормально (иксы, без DE и лёгкий WM типа fluxbox).

Так что нет, гигабайта памяти и скорости легких целерончиков уже совсем не хватает.

я на eeepc 1015 веб разработкой занимался, хром + IDE, разумеется что-то свопилось, но в принципе это было весьма комфортно (если не принимать в рассчет не стандартное разрешение)

тогда правда и хром был по легче

Для wiki и google (в смысле, именно поисковик) palemoon более 200-300мб памяти не будет жрать, вот с gmail, как и всё, что «веб-приложение» уже проблема, да.

У gmail есть режим простого html, в 99% случаев мне его хватает - грузиться и работает моментально. Даже под firefox. В хроме полный вариант грузиться/работает заметно лучше, чем в фаерфоксе.
Не смотря на достаточно мощный комп использую этот режим

Работаю сейчас над проектом, который запускается в Linux.
Основной бинарник первого компонента занимает 250 мегабайт. Бо́льшая часть из них там нафиг не нужна, это последствия включения нескольких толстых библиотек.
Ну и код написан так, что, например, чтобы собрать 3 параметра с кучи объектов, вся куча объектов пробегается по 1 разу на каждый параметр (с массой копирований...)
Но поскольку ресурсов хватает, это никого не волнует.
PS: Оно ещё и собирается и работает в докерах на основе древнего RHEL. Протестировать локально невозможно. Разработка замедляется на порядок. Зато стильно-модно-молодёжно-Linux.
PS[2]: я за Linux. Но я к тому, что убить преимущества можно у всего, и стандартные корпоративные подходы делают это влёгкую.

На Си пишешь и собираешь или на другом языке?

C++ (относительно низкоуровневый, смесь C-с-классами и 11).

Поставьте на вашу убунту простенький Миднайт коммандер. Сколько пакетов он потянет за собой?

Совсем немного пакетов потянет. Midnight Commander - очень легкая, памяти почти не потребляет, регулярно пользуюсь, очень удобно.

А вы проверяли, сколько он пакетов тянет с собой? Они действительно не нужны и не используются, но сколько их? Насколько я помню, он по-дефолту требует Xorg и кучу пакетов из гнома. Консольный файловый менеджер. И именно об этом говорит автор статьи. Неважно, винда у вас, линукс, полуконский полупес... В современных реалиях при установки любого программного пакета вы установите кучу ненужного хлама, который просто будет лежать и занимать место. Под виндой - больше (не факт), под линуксом - меньше, но этого хлама будут тонны.
Сколько занимает сейчас glibc? Вот вы делали 10 лет назад программу, которая использовала этот пакет. Функционал этот программы нисколько не изменился. Но при установке этой программы вы притянете к ней glibc, размер которого увеличился минимум в 10 раз. Вот это - проблема.

А вы проверяли, сколько он пакетов тянет с собой?

На Ubuntu Server вот столько

andreymal@ubuntu:~$ sudo apt install mc
Следующие НОВЫЕ пакеты будут установлены:
libgpm2 libslang2 libssh2-1 mc mc-data
Обновлено 0 пакетов, установлено 5 новых пакетов, для удаления отмечено 0 пакетов, и 1 пакетов не обновлено.
Необходимо скачать 2 567 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 9 943 kB.
Хотите продолжить? [Д/н]

это вы пробуете на своей конкретной системе (где уже установлено что-то). А на чисто ОС? Мне правда лень ковыряться в пакете, но раньше там было очень много зависимостей на гноме-окружение.

Это чистый Ubuntu Server, никакого гнома на нём отродясь не было

А чего в нем ковыряться, если можно просто взять и посмотреть зависимости через apt:


~$ apt show mc
<cut/>
Depends: libc6 (>= 2.15), libext2fs2 (>= 1.37), libglib2.0-0 (>= 2.59.2), libgpm2 (>= 1.20.7), libslang2 (>= 2.2.4), libssh2-1 (>= 1.2.8), mc-data (= 3:4.8.24-2ubuntu1)
Recommends: mime-support, perl, unzip
Suggests: arj, bzip2, catdvi | texlive-binaries, dbview, djvulibre-bin, epub-utils, file, genisoimage, gv, imagemagick, libaspell-dev, links | w3m | lynx, odt2txt, poppler-utils, python, python-boto, python-tz, xpdf | pdf-viewer, zip
<cut/>

Все, что может потребовать иксов, находится даже не в Recommends.

Откуда у mc в требованиях xorg? Отлично работает на серверах, где вообще никогда не было иксов…
Есть GUI-сборки mc. Может, у него как раз такая.

На самом деле, все проще. Я никогда не пользовался убунтой в повседневной работе, мне генту был ближе. А там все работает интересно - если в системном х.конф прописаны иксы, то миднайт ставит свои иксовые приблуды. При этом его даже не сильно волнует, что у меня настроено xfce - он ставит всякую гномовскую требуху.
ЗЫ. И, опять же, у меня данные сильно устаревшие, я уже лет 7 не пытаюсь использовать линуксы в качестве десктопных систем - корпоративными стандартами они не предусмотрены, а

Там тоже все плохо. Держу вот тут ностальгии ради архивный форум конца нулевых, но нынче с постоянными переездами решил перекинуть на микро-виртуалку с 256мб оперативки. В свое время и побольше вещи крутили, даже на роутерах с 32мб оперативы. Но нынче даже после всех возможных оптимизации все равно с OOM периодически крашится. А все потому что всякая мелкая ерунда раздулась до невероятных мсштабов. systemd-jourald отъедает 2мб на то чтобы просто писать логи в файл, logind 1.65мб на... просто так, snapd под 10мб чтобы засирать диск устаревшими копиями приложений, альпиновский скрипт проверки наличия обновлений системы работает на питоне и выедает под 30мб, вместо курла по крону, который тоже кстать на 800кб раздулся, это уж не говоря про апач и mysql которые в таких ограничениях просто говорят "кря".

А если попробовать найти что-то без systemd?

К сожалению, на выбор есть лишь центось, федора, дебиан и убунта. Вроде, говорят, можно наживую его выкорчевать, но я пока не рискую. Ну и не особо это спасет от раздувания софта в целом. Если сегодня скрипт проверки обновлений столько отъедает, завтра столько же будет жрать пакетный менеджер, и чтобы обновить пакеты придется выключать бд.

Alpine, Artix.

Gentoo на крайний случай

Это можно рассказывать как анекдот: перешёл на убунту ради экономии ресурсов компа

Все зависит от задач. В ряде случаев CoW дает существенный выигрыш оперативной памяти и производительности.

Да это пусть себе даёт. Я имел в виду, что авторы убунтовских дистрибутивов, скорее всего, не вполне руководствовались идеей экономии ресурсов. Может, даже и вовсе не руководствовались

Специальный инструмент загрузки на сервер, которым я пользуюсь сегодня, суммарно имеет 230 МБ клиентских файлов и задействует 2,7 тысяч файлов для управления этим процессом.

Проблема есть, но все вовлечены в процесс раздувания, разворота не видно. Сами работодатели всех заточили на фреймворки, спрашивают и там и тут. Там из этих 230 мб, можно целый CRM наверное сваять.

Ну и условно всех учат собрать Теслу из выданных компонентов, а реальные задачи от работодателя, это собрать из этих компонентов - фонарик.

230 мегабайт это больше чем windows 2000 или windows 98.
это целая операционная система 32 и 16 битная одновременно.
еще 20 лет назад.
с тех пор ничего не поменялось в пользовательском опыте работы.
(не игр)

Всё-таки Вы слишком категоричны в "ничего не поменялось в пользовательском опыте". Поменялось очень многое, начиная от более удобных и интуитивно понятных интерфейсов, не требующих чтения учебных пособий по ним, заканчивая возросшей функциональностью программ.

Я не отрицаю проблему, которую поднял ТС, и сам солидарен с его позицией. Но это цена за то, что разработка становится дешевле, а значит у пользователя появляется намного больший выбор ПО, которое он может использовать. Можно писать программу максимально близко к железу и упарываться по производительности, иногда это оправдано. Но тут приходит какая-нибудь фирма, и говорит "сколько стоит написать сайтик корпоративный? 50 тыс. руб.?? а что так дорого?!" и разрабочик берёт готовый фреймворк (раздутый потому что универсальный) и быстро пишет на нём этот сайт.

разработка точно не становится дешевле, и тем более чем 20 лет назад.

Ох, если всё время придумывать новый способ организации данных (виндовс, машем ручкой всем твоим разновидностям диалогов, некоторые до сих пор из 98/nt4. Кстати, это эталонная помойка, за которую часто любят ругать линуксовые смешивания kde/gnome приложений).

Хороший пример "удорожания" разработки - 20 лет назад приходилось брать 3D модель, делать развёртку и рисовать в каком-нибудь фотошопе текстуру по этой развёртке. Сейчас, в том же блендере можно взять картинку и тупо рисовать частью этой картинки в текстуру, используя проекцию окна. Это просто фантастика для 2000 года. Я уже молчу про перевод из фоток в 3D в каком-нибудь Meshroom. Да, там надо редактировать и делать по сути новую сетку, но! это уже очень легко делается по готовым поверхностям в пространстве. 3D скульптинг - тоже "магия", когда с планшета просто "рисуешь", а не кропотливо решётку с нуля фигачить.

Но смысл изначально был в другом. У вас новый функционал, полезный и разнообразный. Хоть и раздутый код для его реализации. Я не знаю, может быть в фотошопе это оправдано, но калькулятор, который раньше ел меньше мегабайта, а сейчас за раз отъедает за 150 мегабайт оперативной памяти при таком же функционале - это действительно просто неприлично уже. В посте это и рассматривается, что крохотная приложенька делала то же самое, что и 200+ мегабайт и 2700 файлов.

Калькулятору 20-летней давности не приходилось думать о hidpi, 4k, мультимониторных конфигурациях, тач-управлении, поддержке десятка тем интерфейса, синхронизации в облако, подгрузке из интернета курсов валют и еще вагону функционала, который отдельному пользователю может и не нужен, но нужен другим пользователям, а писать 100500 версий под каждого юзера нерентабельно.
Дело в том, что современному калькулятору тоже не приходится об этом думать. Все эти темы/тачи/hidpi и иже с ними — всё это разруливают библиотеки операционной системы. А в плане функционала он не слишком ушёл от калькулятора 20-летней давности, зато жрёт ресурсов примерно как AutoCAD или MathLab 20-летней давности
Вот именно этими библиотеками, входящими в состав калькулятора, и набираются те мегабайты, которые в этой теме хейтят.

Они же в составе ОС, зачем они отдельно? Да и крайне сомнительно, что поддержка тача увеличит код на 40-50 мегабайт

НЛО прилетело и опубликовало эту надпись здесь
Давайте посмотрим на ваш код. В нем вы юзаете огромный telegram.ext только ради Updater и CommandHandler.
Почему не написали свою обвязку? Это же пара сетевых вызовов, ради которых вы инклюдите в проект большую библу, функционал которой на 99% не используете.

В соседнем файле для парсинга даты фиксированного формата вы юзаете dateutil.parser. Это вместо того, чтобы написать простой regexp. А ради парсинга пары аргументов запуска, юзаете argparse в котором еще тонна ненужного вашему софту функционала.

Вы когда этот код писали, вам кто на ухо мантры для остановки размышления начитывал? :)
НЛО прилетело и опубликовало эту надпись здесь
А кто-то из посетителей этого поста запускает ваш бот и причитает, что автор раздул свой софт на ровном месте и заюзал большие библы там, где не стоило и поэтому оно теперь жрет много памяти и диска :)

Репа, кстати, не форкнута :)
НЛО прилетело и опубликовало эту надпись здесь
Хотите сказать, что если этот ваш проект начнет использоваться некоторым количеством человек, то вы вложите в него свои ресурсы (финансовые и временные), чтобы все переписать без зависимостей?
НЛО прилетело и опубликовало эту надпись здесь

Я понимаю, сторонние пакеты, но чем вам argparse-то не угодил? Он же в стандартной библиотеке, так что по-любому есть всегда и нисколько не увеличивает конечный объём приложения — глупо отказываться от предоставляемого им функционала даже «ради парсинга пары аргументов запуска».

А какая разница стандартная или нет? Если представить, что мы собираем дистриб для распространения, то в него будет включено только то, что мы заюзали, а не всё, что с питоном прилетело. В рантайме аналогично — оперативу есть будет только то, что мы подключили, а не все, что есть в стандартной библе.
Если отложить в сторону рантайм, а распространять скриптом/исходником, а не инсталлером/дистрибом, исходя из того, что питон (со стандартной библой) есть на целевой тачке, тогда ваше замечание в тему, но такое распространение — это частный случай. Ну и тут больше про win приложения, кмк, топят. Ну и весь мой коммент был не более, чем примером на скорую руку, но надеюсь суть я донес :)
НЛО прилетело и опубликовало эту надпись здесь
Покажите ваш современный коммерческий код :) Пошаримся в нем на предмет сторонних библов :) Уверен, что найдем оч много :)
НЛО прилетело и опубликовало эту надпись здесь
С вашего коммента.
Вы где грань проводите что еще можно, а что уже нельзя? К примеру, если telegram.ext можно, а qt нельзя, то как этому прийти?
НЛО прилетело и опубликовало эту надпись здесь
Вам показалось сложной в разработке реализация запросов к серверам телеги и вы взяли telegram.ext. Кому-то показалось сложной в реализации аналогичная штука — запросы к биржам за курсами валют для калькулятора и он взял готовую библу биржи. Еще кому-то показалась сложной своя реализация поддержки hidpi и он переехал на qt.
При этом свой кейс вы оправдываете, а про остальные язвительно пишете "«Ты что! Не лезь! Сложно же, там тач, хайдипиай, конверсия валют и другие какие-то штуки важные»", удобряя это заключениями об остановке размышления современных программистов.
НЛО прилетело и опубликовало эту надпись здесь
Вы покажите ваш сегодняшний код и тогда будет понятно :) Я уверен, что в нем вы не пишете свою реализацию гуёв, а берёте тяжелый qt. А ваши олдовые пользователи жалуются, что раньше гуи столько не жрали :)

Вот это одна из главных причин (и на мой взгляд - уважаемая причина) неоптимизированного кода. Код нужен не чтобы красиво исполняться, а чтобы решать какие-то задачи, зарабатывать деньги. Если неоптимизированной код есть 4Gb RAM вместо 64Kb, и это стоит лишние 10-20 баксов в месяц (а приносит 10-20 тысяч баксов в месяц) - да и пусть!

Гораздо важнее стоимость разработки. И оплачиваемые человеко-часы, и скорость получения результата. Кривая и немного глючная криптобиржа, которую вы запустите в 2010 году покорит мир и принесет миллиарды долларов. Эталонная, которую вы бы начали в 2010, и допилили к 2022 - была бы мало кому не нужна, потому что рынок уже поделен.

Я для себя решил забивать не ресурсоемкость (хотя и люблю арендовать low-end VPSки за копейки), писать на Python. И для проектов с парой сотен пользователей - это вполне норм! Будет миллион пользователей - тогда, может быть и денег будет достаточно на железо или же перепишу 1% кода (самый ресурсожрущий) на чем-то более шустром.

Если неоптимизированной код есть 4Gb RAM вместо 64Kb, и это стоит лишние 10-20 баксов в месяц (а приносит 10-20 тысяч баксов в месяц) — да и пусть!

А если неоптимизированный код стоит лишние 300 баксов в месяц ресурсов облака, и это 3600 в год? Это ведь куда более частый кейс…

А разве при распространении дистрибутивом стандартная библиотека режется? По-моему, она просто рядышком вся упаковывается, вот и всё.

Это, наверное, смотря как паковать. Я не настоящий питонист, но кажется мне, что возможность не паковать всю stdlib в нем должна быть. Там ведь каждый модуль в отдельном файле. Просто оставить нужные, вроде, ничего не мешает.
Если мы говорим про рантайм, то пофиг где лежит библа на диске (в составе ОС или не в составе), она будет в памяти процесса и будет увеличивать размер занимаемой оперативки.
Если мы говорим про размер дистриба, то чтобы ваша софтина поддерживала нужные фичи, вам придется заюзать какой-ить qt и прочие .net-ы, что увеличит размер дистриба.
Ну или можете написать все это сами.
Только что запустил виндовый калькулятор — 5,6 мегов в оперативке занял

Откуда 150?

Безотносительно потребления памяти - но я отчётливо помню как "новый" калькулятор в вин8 меня поразил в самую пятку, когда при запуске показал крутилочку пока загружался UI. Честно признаюсь, память не замерял

Запустил калькулятор - около 20 мб, потыкал, скачал курсы валют, построил графики - 80 мб. В свернутом состоянии 3,5 мб.

При этом страничка данной статьи в браузере - 2гб.

Поменялось очень многое, начиная от более удобных и интуитивно понятных интерфейсов

По-моему интуитивной понятности стало меньше. Но это, конечно, моя субъективная оценка.

НЛО прилетело и опубликовало эту надпись здесь
В пользовательском опыте ничего не поменялось.
Графический интерфейс.
Все офисные программы в графике.
Мышка все дела.
Броузер тоже уже был и там все работало.
По работе обычного офисного планктона ничего не поменялось.

разработка иде тоже была и вполне работала.
автоподстановка тоже была.
весь Delphi7 весил меньше чем сейчас один голый редактор.

именно пользовательский опыт рабочего места специалиста не изменился.
тот же 1с его дизайн сейчас в 2022 хуже чем был в 2002 когда вышла 8 версия.
тоже графический)

На Делфи не писал. Но самое простое и юзабельно в плане разработки GUI, с чем я сталкивался - это VB6. IDE, маленький бинарь. Потом я перекатился на C#, и там уже все тянет за собой целый .NET, и Qt, который тоже немаленький.

Еще был (есть) C++ Builder, в котором был и редактор форм, и целая хренова туча виджетов, втч всяких сложных. И еще помню были всякие пакеты компонетов для C++ Builder. Эх, времена.

Что касается GUI, то чем более новая технология, тем она сложнее и выше порог входа.

VB6. IDE, маленький бинарь. Потом я перекатился на C#, и там уже все тянет за собой целый .NET

Бинарь маленький, но не самодостаточный. А .NET встраивается в винды начиная с версии XP. Обе технологии используют виртуальные машины (интерпретирующие P-код и CIL, соответственно) и обе же требуют сред исполнения.

Посыпаю голову пеплом.

А .NET встраивается в винды начиная с версии XP

Насколько я помню, там либо не было .NET, либо был очень-очень старый (чуть ли не 1.0)

Во времена до появления usb флешек любили хаять Delphi[1-2-3] за большой размер exe-шника, который не влазил на дискету. Олды плевались от vcl и говорили, что ванильный winAPI рулит :) Теперь Delphi7 — ориентир для отсчета :)
У Delphi 4 пустое приложение весило килобайт 350, если мне память не изменяет, и очень хорошо архивировалось. Ну т.е. на дискету много чего было можно всунуть :)
За пустое приложение зачет не поставят :) А еще ресурсов напихать надо! Но архивировалась эта балалайка хорошо, да!

Умельцы даже сделали для дельфи библиотеки KOL/MCK, которые реализовывали графический интерфейс на винапи, сохраняя удобство VCL. Такие приложения весили от 12 кб.

VCL действительно тормозил на старом компьютере и жрал память как не в себя.

Чтобы сделать хороший "интуитивно понятный интерфейс", надо уметь делать хорошие интерфейсы. Это почти никак не связано с кодом.

Почему бы не совместить быструю разработку и адекватный по ресурсам фреймворк? Фреймворк это абстракция над ниже лежащим уровнем. Ситуация больше похожа на строительство абстракций над абстракциями. К примеру CMake генерирующий текста для разных билд систем. С каждой версией становится больше и сложнее и не удивлюсь если скоро выйдет новая тулза, которая генерирует текст для CMake, так как это проще, чем юзать сам CMake. Сама по себе задача, по сборке программ не изменилась, собрать программу, ну ок дополнительные телодвижения по интеграции, прогонов тестов(если они есть:))

Поменялось очень многое, начиная от более удобных и интуитивно понятных интерфейсов, не требующих чтения учебных пособий по ним, заканчивая возросшей функциональностью программ.

Вы знаете, вот по поводу более интуитивно понятных интерфейсов - не соглашусь! Взять "простейший" LightRoom или Krita - без чтения учебных пособий там даже файлик открыть не все в состоянии.

И да, лично был свидетелем, как парень лет 18-ти не смог сдать экзамен в ГАИ, где на экзаменационных местах, кажется, был запущен официальный портал с билетами в режиме киоска. Бедолага просто впервые увидел компьютерную мышь - первые пару минут он пытался тыкать пальцем в экран, а на рекомендацию тыкать не пальцем, а мышью, просто погрустнел лицом и вышел из аудитории. Вот такая интуитивная понятность бывает.

Давняя мудрость гласит, что действительно интуитивно-понятный интерфейс только у соски. А все прочие "интуитивные" вещи - уже основаны на каком-то обучении, культуре, традициях...

Бедолага просто впервые увидел компьютерную мышь

Ну если он к 18 годам не побывал даже в компьютерном классе в своей школе, и побоялся взять мышь в руки и попробовать ей воспользоваться, все вокруг только выиграли от того, что этот человек не будет выезжать на дорогу в качестве водителя, и он сам в том числе :)

Уверен, что Гагарин тоже компьютерную мышь никогда не видел ;)

Но, конечно, в непонятной ситуации всё бросать и уходить - всем лучше, если этот человек права не получит.

НЛО прилетело и опубликовало эту надпись здесь
В последнее время developer experience считается едва ли не самым важным. Типа, код красивый, писать мало/удобно, вот это всё. А то, что оно тащит за собой грёбаный браузер, и вообще, писать полноценные приложения на макросах для гипертекста не может быть адекватной идеей, никого не останавливает. Продукт побочен и вторичен, важен исключительно сам процесс.

Прикиньте если бы почти все популярные клиенты мгновенных сообщений были написаны на макросах word, на бейские, и поставлялись бы с копией ворда. Электрон — это вот настолько же нелепо.

whatsapp для компьютера - это электрон

Пользователю глубоко пофигу, на чем написано, лишь бы работало. А с копией ворда есть немало плюсов взаимной интеграции. Можно отправку сообщений из ворда автоматизировать не через гребанный API, а напрямую, например. Можно дорабатывать клиент под требования бизнес-процессов.

Так оно и работает, только херово. У пользователей планка качества просто уже под землю ушла, поэтому они когда видят что-то, что работает быстро даже на старом железе и не занимает под сотню мегабайт, реально удивляются.

тут цепная реакция - новое ПО наращивает объем кода, пользователю приходится наращивать железо, как правило, с излишком от требований ПО. Новое ПО закладывается под излищки - нефиг оптимизировать, если ресурса и так полно, и на какой-то этапе ресурс исчерпывают, пользователь покупает новое железо.

А если не покупает и сидит на старых версиях - то начинают лезть вопросы совместимости форматов, сценариев, обязательно требуют для просмотра/проигрывания файла прикрутить свистоперделку, которую или не поставишь на старое железо\ОС, или жрет ресурс как не в себя.

А на деле даже в 2022 году сам Microsoft продаёт типа современные ноутбуки Surface Go, которые начинаются с 4 ГБ оперативной памяти, ставишь туда такие Slack, Discord и прочие шедевры и всё - приехали.

У меня оперативки 64, но дискордом всё равно пользуюсь в браузере. Отличий от отдельного приложения вообще никаких, UX такой же бесячий, но хотя бы не обновляется по 5 минут с 3 перезапусками без возможности отключить обновления.

Меня больше бесит Teams, который суть — обёртка над браузером.
Но если аналогичные сервисы Google прекрасно работают из браузера, в т.ч. и из Firefox, то Teams не работает и требует запуска через приложение. Пусть горят в аду.

В смысле «не работает»?

Собственно, в браузере он мне нравится больше, чем стэндэлон.

P.S. При открытии ссылки на конференцию Zoom тоже требует скачать программу без вариантов. Если обновить страницу, появляются варианты. Может, и тут так же.

В смысле: нельзя устроить аудио/видеоконференцию.
Zoom — нативный клиент, а Teams — Electron, поэтому ограничения кажутся искусственными.

Несмотря на то, что у Zoom нативный клиент, отличий в UX в браузерной версии я не нашел. Допускаю, что они есть, не суть.

Я, видимо, чего-то не понимаю, но... в браузерной версии Teams, точно как в десктопной, назначаю встречу, присоединяюсь и провожу видеоконференцию. С демонстрацией экрана.

Микрософт тупо проверяет User Agent. Если подставить юзер агент от хрома, то звонки магически начинают работать. Я сейчас точно не помню, я так делал примерно 2 года назад, но кажется проблемы были только с расшариванием экрана.

Вот это и отвратительно. Поменял User Agent — и действительно, стало лучше. К слову, по неведомой причине, родной клиент Teams в Linux позволяет шарить только весь экран, а браузер — отдельные окна.

Пару недель назад Микрософт наконец включил Teams в Firefox на Линукс. Расшаривание и всего экрана, и отдельных окон работает нормально.

Насколько я помню, клиент электронной почты Outlook до сих пор рендерит html в письмах с помощью движка Word. Такие дела.

Видимо браузер, в итоге, оказался лучшим решениям для построения кроссплатформенных приложений. Что там конкурирует?

Мёртвые Adobe Flash/JavaFX?

Безумно фрагментированные Microsoft'овские штуки, которые появляются и умирают каждый год? Да так, что уже видно что это тенденция и не хочется инвестировать время в то, что через год закопают. Сколько их было и есть? Silverlight, WinForms, XAML, Xamarin, Avalonia, вот сейчас всех на MAUI перетягивают. Ждём следующую MS THE CURRENT THING, которая, конечно, опять будет лучше и на которую надо будет всем переползать, выбросив в мусор инвестиции своего времени в изучение всех предыдущих THING. Уверен, что забыл ещё с десяток "вот теперь точно последних кросс-платформенных фреймворков для создания приложений" от одних только MS. Они там вообще ку-ку?

Qt с их неудобными и дорогими лицензиями? И в целом есть ощущение, что проект перестал развиваться.

Гуггловый Flutter? Похоже, единственный адекватный вариант на замену электрону. Только за чей счёт будут переписываться тонны того, что кодеры сейчас ставят из npm - большой вопрос.

А не надо делать кроссплатформенные графические интерфейсы. Меня за такое, может, и заминусуют, но я считаю, что либо нативно, либо никак, а кроссплатформенных графических интерфейсов — таких, которые сами рисуют контролы и реализуют поведения — существовать просто не должно. Они всегда выглядят и работают достаточно чрезжопно. Зато, конечно, да, разработчикам время экономят, а пользователи страдают, но кого это волнует. Разработчики же важнее пользователей.

Безумно фрагментированные Microsoft'овские штуки, которые появляются и умирают каждый год?

Конкретно под винду — WinAPI работает и будет работать всегда. Тут как я с андроидом: все бесятся и носятся и обожают все эти гугловые абстракции и прочие jetpack compose, а я просто беру и использую всё системное.

Вы считаете так. А те, кто платят деньги за разработку, чтобы зацепить как можно больше пользователей и не имеют столько же бабла, сколько Uber или Facebook - считают иначе. :) Заплатить один раз на условном Unity/Flutter/Adaptive Web или заплатить много раз на iOS, Android, Win, Mac, Web - хм, что же выбрать?

WinApi работает. Но работает только на винде. Вопрос "только на винде" не стоит, потому что в мире существует не только винда. И ещё вопрос - зачем тогда Microsoft ТАК мечется? Есть же WinApi.

Вы считаете так

Да нет, все считают так. В мире приложений почти все ходовые приложения - нативные. Уже даже стартапы сразу пишут нативные приложения, потому что их потом при росте не нужно будет переписывать на нативные (а пользователи и разработчики обязательно попросят). Самые известные примеры - AirBnb (выкинули React Native) и Slack (переписали с Electron целиком).

В мире игр вообще кроссплатформенности почти нет. На моем маке могу запустить только 10% библиотеки Steam. Если "все считают", что кроссплатформенность нужна, то где версия под мак? Или под линукс без Proton?

Вы только что привели пример Slack, которые изначально писался как раз на Electron, чтобы писать код только один раз - для Web, а потом использовать его везде. Потом они заработали бабла и смогли себе позволить нативные приложения. Это уже опровергает тезис, что «все считают так». Именно Slack считал, что пока бабла нет, его надо экономить.

Не знаю насчёт AirBnb, они стартовали с React Native, или пытались удешевиться и ускориться за счёт него. Если пытались удешевиться и ускориться - значит всё не так прекрасно с нейтивами? А если же стартовали - это, опять же, опровергает тезис что «все считают так». Именно, что «все» (если не брать уже богатые компании или стартапы с бесконечным финансированием) сначала экономят деньги. А потом, когда денег становится много - пишут нэйтивы. Собственно, пример со слаком именно об этом. Насчёт AirBnb не возьмусь судить, не знаю истории.

Тут ещё вспоминается ClubHouse, который изначально был под iOS только. И много других iOS-only приложений, которые потом заходят на Android. И не пишут сразу на обе платформы, потому что денег делать одно и то же по 2 раза, наступать и исправлять двойные грабли (а в случае когда надо много платформ - многократные) просто нет.

Slack (переписали с Electron целиком).
Разве его переписали на натив? Я помню, что читал, что да, они его переписали, но всё на том же чёртовом веб-стеке. Типа, вместо 2 гигов оперативки он теперь жрёт 500 мегабайт. Офигеть достижение для клиента мгновенных сообщений.

Кто будет оплачивать этот банкет?

Это всё прекрасные рассуждения, но ответьте: сколько будет стоить в описанном вами случае разработка одного приложения, которое должно работать как минимум под Linux, MacOS и Windows? А если оно же должно работать ещё и под Android? Как в этом случае помогает факт всегдашней работы WinAPI?

Безумно фрагментированные Microsoft'овские штуки, которые появляются и умирают каждый год? Да так, что уже видно что это тенденция и не хочется инвестировать время в то, что через год закопают. Сколько их было и есть? Silverlight, WinForms, XAML, Xamarin, Avalonia, вот сейчас всех на MAUI перетягивают.
Silverlight — не предназначался для разработки настольных приложений, это плагин для браузера, его закопали вместе с другими плагинами для браузеров.
WinForms — уже 20 лет живёт и развивается, но он никогда не был кроссплатформенным, это изначально обёртка над классическим WinAPI.
Xamarin — для мобил, переродился в виде MAUI с поддержкой десктопа.
XAML — это язык разметки, который до сих пор используется в том же MAUI.
Avalonia — не имеет отношения к Microsoft.

Ну и надо не забывать что WPF жив здоров, хотя и не особенно приятен, но черт возьми, его пережил только winforms.

А зачем MS столько много всего для, по сути, одного и того же?

Интересный вопрос. А зачем насоздавали столько фреймворков для JS за последние 20 лет? Даёшь jQuery во все поля!

Нет, их создавали не для одного и того же. WinForms был тонкой обёрткой над WinAPI. Оно было создано во времена, когда у всех была одна и та же плотность пикселей, и справлялось плохо с нестандартными DPI. Классические API не позволяли вытворять всякие безумные вещи типа вращения контролов, ну назрела проблема с поддержкой нестандартных DPI, поэтому запилили WPF на базе DirectX. В WPF первая буква от слова Windows, оно тоже не планировалось кросс-платформенным (хотя это и осуществимо). UWP был (провалившейся) попыткой сделать новые нативные API и подсистему для Windows с системой прав как в Android и iOS, а не так, что всем приложениям сразу доступно почти всё. WinUI — библиотека новых нативных для Windows контролов, здесь опять ничего про поддержку других платформ.

Xamarin был разработан не в Microsoft, его купили и сделали бесплатным, когда Microsoft изменила курс на кроссплатформенность, но он был только для iOS и Android, и там надо было отдельно дизайнить приложение под разные платформы с использованием нативных контролов (самый правильный подход, ИМХО), только внутренняя логика приложения могла быть общей. На основе Xamarin был создан Xamarin.Forms для тех, кто не хотел отдельно дизайнить интерфейсы под iOS и Android. Этот проект оброс поддержкой десктопных платформ и переродился в виде MAUI — это первая разработка от Microsoft с заявленной кроссплатформенностью в том числе и для десктопных платформ. На Windows MAUI использует WinUI 3 для отображения контролов.

Кстати, Electron тоже принадлежит и разрабатывается в Microsoft, хоть и был изначально создан вне её. Microsoft достаточно большая, чтобы поддерживать и развивать сразу несколько технологий для кроссплатформенного GUI.

Спасибо за ликбез! Может есть ещё какие-то кросс-платформенные попытки от MS для десктопа?

В любом случае, судя по всеобщему огорчению, что много софта на электроне, электрон пока лидирует в деле кросс-платформенных десктопов... И на то есть причины, которые не решают другие фреймворки.

Как и Flash, можно было запускать вне браузера, но это не было основным предназначением. Если кому надо было десктопное приложение, брали полноценный WPF или WinForms.

Ну и поддерживался Silverlight аж до октября 2021 года, то есть 14 лет. Правда, последние обновления с новыми фичами были в 2012, а потом только обновления с фиксами багов. Я сам рассматривал испольлзование Silverlight для админки CMS в 2010 году, но уже тогда было понятно, что он не жилец (как и Flash), поэтому мы взяли за основу популярный тогда Ext JS.
Если кому надо было десктопное приложение, брали полноценный WPF или WinForms.

А если кому надо было мультиплатформенное, то им предлагали Silverlight. Поэтому некорректно утверждать, что Silverlight не предназначался для разработки настольных приложений. Он пытался стать электроном своего времени :) Правда, даже flash больше преуспел. Ну так в том и претензия в комменте yokotoka была, что MS бросает развитие кучи своих продуктов.
Запуск вне браузера для Silverlight никогда не было основной фичей. Эта функция даже появилась только в Silverlight 3 в 2009 году. Да и Linux оно не поддерживало. Был неофициальный Moonlight на базе Mono, но он еле работал.

Ну так в том и претензия в комменте yokotoka была, что MS бросает развитие кучи своих продуктов.
А смысл развивать объективно ненужные продукты типа Silverlight? Он был изначально мертворожденным. Тут Microsoft сильно просчиталась. 5 лет вливала деньги в совершенно бесперспективную технологию (упорные!), и потом ещё 9 лет латали в ней дыры.

По-вашему она должна была закрыть глаза на реальность, что Silverlight провалился, что его почти никто не использовал даже после 5 лет вливаний денег? Они должны были не замечать, что что разработчики браузеров взяли курс на отказ от сторонних плагинов типа Flash и Silverlight, и упорно развивать технологию, которая вскоре просто не сможет выполнять свою основную функцию? Зачем? Чтобы оно работало только в IE на Windows?
Падажжите! :) Разговор вообще в сторону ушел. Суть в том, что Silverlight был не просто плагином к браузеру, а костылем для кросс-платформенной разработки тоже. Почему он там не взлетел и т.п. — оффтопик.
Не взлетел, оказался не нужен — его закопали. Логично. В чём претензии то?

Avalonia

Эцсамое, мы не Microsoft, мы сами по себе. Вот прям совсем отдельно, в порочащих связях с корпорациями замечены не были, беспощадны к врагам опенсорса. Не надо нас в очередь на кладбище проектов со всеми остальными ставить.

Прошу прощения, не знал, что Avalonia без MS. Тут пожелаю проекту только долгой и яркой жизни, развития и всех благ! Разделяю убеждение, что кросс-платформенный инструмент не имеет права быть не опенсорсным и принадлежать корпорациям.

Это вы с Avalon'ом попутали. Который в «девичестве» был Avalon, а потом его WPF назвали.
Для построения кроссплатформенных приложений лучше взять не интерпретируемый язык программирования и компилировать под каждую платформу нативный код. И да, интерфейс под каждую платформу должен быть тоже нативным. Телеграм ведь как-то справляется…
Телеграм ведь как-то справляется…

У Telegram ни разу не нативный интерфейс.

По желанию можно конечно включить что-то типа use system window frame и частично станет «нативным», но таки да… много своего нарисовали.

Видимо браузер, в итоге, оказался лучшим решениям для построения кроссплатформенных приложений

Ну и пусть себе будет лучше. Почему это нельзя разделить хотя бы на рантайм и приложения, как у того же Net Framework? Программы вроде редакторов markdown весом за 200Мб, или лаунчер приложений Ueli весом за 400Мб - это не нормально. Собственный код всех этих приложений даже до мегабайта дотягивать не должен.

WebView?

WebView — это не совсем рантайм. Если взять, например, Андроид, там WebView устроен как нехитрый прокси для системного движка Хромиума. Т.е. это вполне себе целый браузер со всеми вытекающими. С другой стороны, я и альтернативы не вижу. Если мы хотим полноценно отображать веб-контент, нам для этого нужен полноценный браузер.

Ну да, в данном случае в качестве рантайма требуется браузерный движок. Просто согласен, что совсем не обязательно его пихать прямо в само приложение, он может быть и разделяемым.

Вот да, на флаттер более менее надежда. Конечно не идеал далеко, но если выбирать между ним и веб технологиями — то однозначно флаттер.

да сейчас почти везде когда что либо пишешь, то подтягиваешь для 1-2 функций еще либу либо модуль либо фреймворк, даже тот же вордпресс автора на лишнего кода 90% никогда не используемого фунционала.
В плане программирования мне нравится подход @MarcusAurelius - пишет чистый код, без кучи хлама. Основная мысль - часто чтобы разобраться с какой либо либой, по времени дольше, чем самому написать 1-2 функции, которые тебе нужны.

Бывают случаи оправданного раздутия, я как реверсер(с написанием оперсорсного аналога) это могу сказать. Оригинал - exe игры на 1мбайт, но там код по сути С, с самодельным ООП. После реверса, переноса частей на С++ и std контейнеры - код в exe раздулся мегабайт до трёх(из-за шаблонов и дублирования кода под реализации). А вот мультиплатформенность добавляет ещё 100+ мб dll'ок, т.к. вместе с портирование добавилась возможность использования ресурсов в различных форматах(ffmpeg, sdl_image), а не только пары как в оригинале, да и уже установлены в систему пользователя(dshow кодеки в системе, d3d/ddraw тоже). Конечно можно было оставить только форматы оригинальных изображений и разделить код - под никсы ffmpeg, opengl, openal, sdl, а под win - d3d, dsound, dshow, но это добавит больше проблем, в виде ещё кода абстракций и возможно тормозных решений по конвертации данных под платформу. Поэтому была ориентация на никс-стек, как более универсальный, а вин-сборки, да, толстые.

НЛО прилетело и опубликовало эту надпись здесь

В продолжение темы - статья Абстракции и наследование в Си — стреляем по ногам красиво

Согласен, но! Это огромные монолитные библиотеки. К примеру ffmpeg тянет +100500 форматов видео и аудио. А вам нужен один для видео и музыки. SDL_Image та же ситуация. Если это возможно скомпилить статически игру только с нужным функционалом, получится небольшой бинарник, только с тем, что реально юзается.

Не, там смысл ещё как раз в том, чтоб добавить возможностей модерам, а не запирать в устаревших форматах.

Такой подход предпочтительнее ещё по одной причине. Притягивая функционал из раздутых фреймворков, программисты вряд ли задумывались о том, что придётся их постоянно обновлять при обнаружении уязвимостей. Тем более если фреймворки с открытым кодом.

Возникает вопрос, действительно ли компания так беспокоиться о безопасности сервиса?

В таком случае, я думаю, стремились бы как-то сократить базу кода. На деле же, как это часто бывает, потребность показать дейтельность и привнести фунционал наверняка решалась кратчайшим способом в лоб

Все верно, но все это жуткое нагромождение абстракций - цена скорости прогресса.

Именно потому, что практически каждому так или иначе доступно написать код, создать какой-то MVP даже и из чужих компонентов, мы и имеем всякие фаанги, приложения для телефона и телевизора, миллиард криптовалют и так далее.

А этот прогресс, как мне кажется, и толкает в свою очередь вперед прочие отрасли, вроде разработки новых лекарств на основе анализа молекул с помощью ИИ.

Волнует ли больного что тот ИИ является нагромождением программного кода и собранных по всем возможным сусекам данных, и не факт что его разработчики до конца понимают как это все работает? Думаю совершенно не волнует.

Все верно, но все это жуткое нагромождение абстракций — цена скорости прогресса.

Нет. Это цена непрофессионального отношения к работе. 20 лет назад я точно так же мог склепать за короткий срок на коленке MVP из чужих компонентов, который делал бы всё то же самое, что делают современные MVP. Только весил бы он 5 мегабайт, а не 200. Продуктивность программистов за это время не выросла. Всего лишь упало качество библиотек.

О том и речь. Талантливых и высокопрофесииональных людей меньше чем вообще людей с идеями.

> я точно так же мог склепать за короткий срок на коленке MVP из чужих компонентов, который делал бы всё то же самое, что делают современные MVP.

Нет! У вас бы не было вжух-вжух и красивых градиентных кнопочек со скругленными краями!

/sarcasm
Так градиентных кнопочек сейчас почти ни у кого нет, потому что «не модно». А тогда были!

Но. Весь мусорный код этих кнопочек в библиотеках остался. И есть подозрение, что выполняется -> проверяется что это уже не модно -> перерисовывается как модно.

И очень плохо, что нет. Раньше кнопка выглядела, как кнопка. А теперь тыкаешь во все что можно пытаясь понять, где тут кнопка, а где просто модный прямоугольник..

Неправда :Р
image
Скорее, появилось наплевательское отношение ко всему. Лично я считаю, что нельзя добавлять в проект библиотеку без хотя бы базового понимания её внутренностей. Проблема в том, что мало кто с этим согласен. Очень часто происходит так, что кто-то ради какой-то одной элементарной функции, которую можно было бы просто скопипастить, тянет библиотеку с пятью зависимостями. Люди не просто не понимают абстракции, они осознанно не желают их понимать. Нет этой пытливости и любопытства, есть лишь желание чтобы начальник отстал как можно скорее. Операционные системы и браузеры для них сделаны из магии.

осознанно не желают их понимать

Почему осознанно?

А как назвать подход "Я не хочу разбираться, что там внутрях, для этого есть другие люди"?

Лень, халатность, недальновидность? :)

Если не копи-пастить, а пользоваться библиотекой, то любое изменение надо отдельно тестировать и адаптировать свой код. А так автор библиотеки развивая проект тестирует и этим обеспечивает работоспособность использующих её программ. Ну или делает это в идеальном мире.

НЛО прилетело и опубликовало эту надпись здесь

Та же ситуация что и с автомобилем, зачем мне знать что там под капотом я же на нем просто езжу, иногда выходит боком.

И оно бы запускалось на Windows, Linux, macOS, iOS и Android? И на любом железе — ARM, под M1, под x86/64?
Все эти абстракции приходится городить именно потому, что у нас в IT-индустрии фактически нет никаких стандартов, полная анархия. И сделать за приемлемое время софт, который бы хоть как-то работал на всей этой сборной солянке, невероятно сложно. Фреймворки просто перекладывают цену этой разработки на самого же пользователя, вынуждая его оплачивать работу многочисленных слоёв абстракций.
Сам как-то столкнулся с ситуацией, когда надо было уже готовую обученную нейронку распространять в качестве автономного приложения. И вдруг оказалось, что никаких кроссплатформенных решений для этого не существует, кроме… да, вы угадали, Electron! Да, нейронка. На Javascript (фреймворк tensorflow.js). Звучит как безумие, но сделано за три дня и работает везде, тогда как попытка сделать это нативно под весь набор платформ потребовала бы не менее трёх месяцев. А потом ещё кучу времени на отлов багов, связанных с проблемами совместимости, которые разработчики Electron решили за нас.
И оно бы запускалось на Windows, Linux, macOS, iOS и Android? И на любом железе — ARM, под M1, под x86/64?

Да, само собой. Если бы мне нужно было не слишком производительное, но кросс-платформенное решение 20 лет назад, я бы взял Java или Qt. Это лучше, чем Electron, чесслово. Даже сегодня.

Qt - просто дорого, да и спецов мало, итого - ТТМ стремится к бесконечности

Java - может, и хорошо, пока не начинаются пляски с версиями JVM (известно многим разработчикам, сидящим на М1), да и специалисты недешевые...

Electron - осилит любой джун+ на JS, итого - дешево и минимальный ТТМ

Просто миром разработки давно рулит маркетинг, все остальное - лишь следствия

SDL вполне себе кроссплатформенный.

UI на голом SDL? Брутальненько.

imGui поверх SDL например

Lazarus + Freepascal

Но виноваты то не программисты, а сам бизнес. Вот чем определяется рыночная ценность сотрудника и его шанс полпасть на денежную вакансию? Эффективностью кода? Да ни разу. Знание списка модных фреймворков и библиотек решает всё. Чем больше модных технологий - тем больше ЗП. Без того же докера Вас и джуном никуда не возьмут. Самые продвинутые ещё на "читабельность" кода смотрят - но и её возвели в ранг культа. Оптимизация и читабельность - зачастую взаимоисключающие явления. Да и "не говнокодить" в наше время нереально - на действительно детальное изучение всего требуемого стека жизни не хватит.

Тогда уж не бизнес, а потребители. Логика бизнеса простая и определяется законами рынка, бизнес делает то, что приводит к продажам и росту.

Здесь должен быть мем (сходу не удалось нагуглить, извините) про двух программистов, один из которых сразу программировал хорошо, а второй наговнокодил, быстро выпустил первую версию, собрал отзывы, выпустил вторую, в итоге заработал денег/получил инвестиции и нанял первого программиста рефакторить его говнокод ;)

Так что я бысказал, что пока пользователям наплевать на качество и подход "быстро загнать тяп-ляп mvp" работает, то ничего не изменится, в конце концов пользователи голосуют рублём за бизнесы, а уже эти бизнесы определяют стиль работы программистов. Программисты тут в конце цепочки и особо ничего не решают.

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

О, а в каком? Дайте ссылку, пожалуйста.

НЛО прилетело и опубликовало эту надпись здесь

Пользователи НЕ выберут быстрый и надёжный вариант. Они выбирают тот вариант, у которого сильнее маркетинг. И как итог, минимальные вложения в ПО и максимальные в маркетинг дают засилие говнокода везде.

минимальные вложения в ПО и максимальные в маркетинг 

может быть не так, а ближе к 50/50?

Ой ли ? 20 лет назад ? Оки, пример разбора строки (математического выражения) на С++ меня удовлетворит :)

вы сомневаетесь, что это возможно? Или что итоговый бинарник будет весить меньше 10 мб?

Так проблема даже не в тоннах кода — это кстати понятно и почти нормально (что бы там не думал автор), а в том, что это невозможно отладить!
Сейчас эра безоглядного (и бездумного) переиспользования чужого кода, надеюсь она скоро закончиться.
Погодите минуточку. Какое же безоглядное переиспользование, если код закрыт?
Имелось в виду библиотеки, фреймворки и т.д. Их часто используют не потому что «будет хорошо», а потому что «другое еще хуже».

Если каждый будет писать одно и тоже получится как с прошивками роутеров у каждого одинаковые баги с одной стороны и openwrt с другой.

Ну и вишенкой на торте ВЕБ разработка где без докера нынче вообще ловить нечего. Любой фреймворк тащит на себе 100500 депенденсов большая часть которых давно устарела и не соберется заново ни при каких условиях...

Это типа музыкант пишет песню, которую можно прослушать только в магнитоле из окна автомобиля определенной модели...

Да, я долго держался, но в конце прошлого года пришлось таки с докером связаться.
Слишком много софта стало идти в виде «ставь контейнер либо вот тебе тар.гз с исходниками без документации по сборке, раз такой умный»

 Любой фреймворк тащит на себе 100500 депенденсов большая часть которых давно устарела и не соберется заново ни при каких условиях...

Не любой, $mol не тащит, например.

Как там у вас с bus-factor'ом? Я как-то использовал в продакшене подающий надежды фреймворк famo.us. С громкими презентациями, оффлайн конференциями, светлым будущим. Который закрыли через год. И хотя он был в опенсорсе - последователь пожелающий возродить былое нашёлся аж один (infamous, ныне lume). И хотя проект вроде бы активный - он (меинтейнер) всё ещё один.

Примерно так:

AngularJS: был похоронен не дожив до 6 лет. Всем, кто на него подсел, предложили переписать код на другой фреймворк с похожим названием, в котором лишь через 5 лет вылечили детские болезни.

$mol: почти 7 лет не то устаревать не думает, а наоборот - продолжает внедрять инновации.

А басфактор повышается пользователями, так как разработка фреймворка ничем не отличается от его использования.

Всё просто - в 99.999% программист не несёт ответственности (материальной и юридической) за результат своего труда. Но хочет за свою работу немалых денег.

Он может, я думаю. Но стоимости такого решения будут астрономические — думаю, в ПО для космоса именно так. Но бизнес выбрал фичи вместо стабильности (в сущности это выбрали конечные потребители софта). Жаль, но за стабильность мало кто хочет платить.

Не, на самом деле вместо "быстро и качественно" бизнес выбрал "медленно и дорого". Ибо своей экспертизы не хватает, а у исполнителей иная материальная мотивация.

Вот только хотел сказать. Не так давно участвовал в совещании с заказчиком, где мы — субконтрактор. В совещании участвовал наш менеджер, наш тимлид, менеджер заказчика, менеджер собссно контрактора и продакт оунер заказчика. Мы час обсуждали добавление четырех полей на форму, чисто текстовых, без какой-то бизнес-логики. Срок на задачу поставили неделю. Я не знаю, сколько за неё контрактор возьмёт. Мы выставим наше время участия в совещании, время на оформление тасков, часы разработчика, часы тестера. Но контрактор стесняться не будет, он там удвоит и рейт, и расчасовку. Клиент заплатит и глазом не моргнёт, потому что ему там пару штук евро тоже ни на что в бизнесе не влияет.
А по факту, можно было просто добавить эти четыре поля ещё в то время, пока совещание шло, и это бы решило проблему. И так везде. Мы делаем и медленно, и дорого. Потому что так нам выгоднее, а заказчик готов платить.

А заказчик готов платить не потому что это 4 поля, а потому что труд разработчика это карнавал масштабирования.

Представляете, если бы у вас был токарный станок, который мог бы обслуживать (почти) неограниченное количество токарей одновременно? Сколько бы вы не посадили за него специалистов - все бы они были заняты, не мешали друг другу и единственное бутылочное горлышко которое в у вас было бы - отгрузка готовых деталей! Сколько бы вы были готовы заплатить за такой станок или за добавление лампочки на нём?

А с программными продуктами такое работает - маленькая CRM написаная на коленке и раскрученная на "Малинке" может занять работой целый стадион продаванов! Только подноси списки телефонных номеров и выгружай лидов из воронки! Гипотетически, убер может прямо завтра открыться в 10 странах сразу! Потому "пара штук евро" действительно "ни на что в бизнесе не влияет"

При этом я не оправдываю то, что творится в разработке. Более того, когда мне попадаются случайные заказы на поддержку старых продуктов - я только радуюсь - они простые и понятные! Да - местами надо добавить очистку пользовательского ввода, да - местами надо перестать хранить пароли в открытом виде, да - с газзлом гораздо удобнее делать запросы к сторонним API чем руками. Но это маленькие поправки - бизнес работает и без них уже очень продолжительное время!
А когда я вижу магию middleware в Laravel я начинаю чесаться в самых нескромных местах!

Вам, возможно, платят так же и за решения не добавлять бесполезный функционал, либо реализовать его в другом виде, либо заполнять поля в базе автоматически, используя какую-нибудь инфу. Клиент заплатил за то, чтобы вы проанализировали все варианты и действительно увидели, мол, ага, без полей никак.

Ещё клиент заплатил за UI/UX, — то, где будут поля находиться, какого цвета, какие валидации (фронт/бек) и так далее и так далее.

Нет. Нам платят просто за добавление полей. «Проанализировали все варианты» — это термин больше из менеджерских комментариев к счёту, которые впишет подрядчик, выставляя клиенту круглую сумму. По факту оптимальное решение в таких «линейных» задачах, как автоматизация бизнес-процессов, чаще видно сразу в процессе обсуждения, по крайней мере, если вы эту систему увидели не недавно, а уже сопровождаете длительное время.
В 99.999% случаев никакой работник не несёт материальной и тем более юридической ответственности. Чтобы он работал качественно, необходимо и достаточно не карать его материально, а всего лишь обучить и просить переделать, если налажал.

Почему -"просить"?. Из этого "просить" и растут проблемы.

Если у вас обнаружится дефект тормозной системы вашего автомобиля - (ошиблись при разработке, с кем не бывает) то вы будете "просить" чтобы починили и ездить с дефектом? Или "требовать" немедленного ремонта?

Ты не учитываешь, что программист ни за что не отвечает, потому что ему никто этой ответственности не даёт - всё решают за него, и до него, ответственность у вышестоящих лиц, сам он лишь мелкий винтик в современной индустрии. Ему дают задачу и время, и главное - уложиться в отведенный срок, а результат не особо важен.

В следующий раз (или в этот — если получится сделать юридически) получите огромный счет. А также — ограничения на то как это можно использовать вида "так, установка ЛЮБОГО обновление не протестированного разработчиком — лишает гарантии, то что какая то там MS орет что это срочный патч и отменить установку невозможно — ваши проблемы. Наличие на компьютере ПО которое меняет стандартный функционал ОС и/или перехватывает системные вызовы — лишает гарантии, то что вы хотите Касперского поставить или там AdGuard или там FRAPS'а — ваши проблемы. Неработа интернет-канала до указанных в приложении №1 сетей и dns-имен с характеристиками не менее таких то — лишает гарантии, роскомнадзоры это ваши проблемы. Поддерживаются процессоры Intel Core 4-го поколения (если хотите другие — с вас отдельные деньги). Для запуска в виртуальной среди разрешается использовать только согласованный с разработчиком гипервизор конкретной версии а иначе лишение гарантии.
Мобильная версия разрабатывалась под Apple iOS 14.5 на iPhone SE 2-го поколения. Использование другого железа или другой версии ОС — лишает гарантии, то что у вас iOS сама обновилась — это ваши проблемы, новую версию приложения выпустим скоро, да — обновление не будет бесплатным если у вас подписки нет"
И так далее.
А то ишь — моду развели — ставят на все начиная с WinXP до Win11 кучи разных версий (это я еще линукса не касаются — flatpak и snap совсем не на пустом месте родились), на черт знает какое железо и требуют чтобы работало.

в 99.999% программист не несёт ответственности (материальной и юридической) за результат своего труда

А с чего это за все косяки начальства решившего экономить и на рефакторинге и на тестировании должен статья козлом отпущения именно программист?

Но хочет за свою работу немалых денег

Именно, начальство решившее экономить и на рефакторинге и на тестировании получает больше всего денег, а то что получает программист это, так крошки с барского стола.

PS судя по тому, что ты считаешь, что программисты должны работать за еду будучи козлами отпущения за чужие косяки, ты @Dr_Faksovи есть тот самый менеджер, считающий что и рефакторинг и тестирование - "напрасная трата времени".

НЛО прилетело и опубликовало эту надпись здесь

Уважаемый @Jian


Во-первых, я больше по железу. Если и программирую, то исключительно для себя и друзей.

Во-вторых, для меня программист\программисты - люди которые создали данный программный продукт. И мне пофиг кто за что отвечает и сколько получает при его создании. Если вы покупаете плохой хлеб, то для вас в этом виновата пекарня "Три корочки", а не конкретно пекарь Толя, поленившийся прогреть молоко.

В-третьих, я считаю что любая выполненная работа должна быть оплачена. Именно выполненная. А не та, которую попытались выполнить, но не смогли. У морских (и не только) спасателей есть замечательное правило: "Нет спасения - нет вознаграждения". Абсолютно не имеет значение, сколько ресурсов вы потратили на спасение. Судно утонуло - значит вы работали за свой счёт. Даже если вы при этом утопили весь свой спасательный флот.

А давайте так же всех адвокатов заставим работать?
А то они тоже любят брать деньги и прямо говорят что будут стараться.
А вариант с оплатой за результат не очень любят.

"Нет спасения - нет вознаграждения"

Тогда уж лучше сразу по схеме "сделай мне сайт, а я тебе заплачу как он начнет деньги приносить".

У морских (и не только) спасателей есть замечательное правило: «Нет спасения — нет вознаграждения»

Оно у них вынужденное — они так и не смогли ни одного утонувшего человека уговорить заплатить им за работу.
Если сейчас (по консервативным оценкам) 99% ресурсов наших PC тратится впустую, мы впустую тратим и 99% потребляемой компьютером энергии. Это абсолютно преступно. И для чего же эти траты?

Эти траты нужны для понижения порога вхождения в отрасль написания программ, ускорения разработки, обеспечения работоспособности всего написанного и т.п.
Не хочется — не тратьте, выбор есть. От вас не требуют использовать эдж, вордпресс и т.п. Баш, нано, линкс…

На велосипеде тоже можно ехать. Как и пешком ходить. Но люди в массе почему-то предпочитают машины и самолёты, хотя их надо обслуживать, заправлять, искать место для парковки и т.п. И на тех, кто ездит на велосипеде от Москвы до Владивостока, смотрят с непониманием.
Эти траты нужны для понижения порога вхождения в отрасль написания программ, ускорения разработки, обеспечения работоспособности всего написанного и т.п.

Нет. Эти траты имеют одно-единственное происхождение. Кто-то когда-то написал код для библиотеки, потом к нему добавился ещё код, потом ещё, потом ещё. Старый уже легаси, про который все забыли, но он там сидит, а каждый год к нему ещё докидывают, и так далее. Потом библиотека подтягивает к себе зависимости из других, точно так же растущих библиотек… и вот так оно годами наслаивается и растёт в геометрической прогрессии. Никакой положительной корреляции с ускорением разработки, снижением порога и т.д. оно не имеет. Наоборот, имеет некоторую отрицательную корреляцию, т.к. тяжёлые и сложные библиотеки имеют под капотом и недокументированные «особенности» и побочные эффекты, и просто становятся сложны для изучения.
Так это и есть снижение порога. Не нужно тратить время на рефакторинг, приписал новую функцию сбоку — и в продакшн. Ресурсы условно не ограничены, производители железа об этом заботятся — им тоже надо каждый год впарить вам новый ноут или телефон.
Так это и есть снижение порога. Не нужно тратить время на рефакторинг, приписал новую функцию сбоку — и в продакшн

Ну это же не бесплатно. Сегодня мы приписали новую функцию сбоку, завтра с другого боку, а послезавтра мы тратим неделю на то, чтобы отрефакторить всё это разом, потому что третьего бока уже не нашлось.
Послезавтра ставим костыль, иначе сроки сорвём.
Конечно, рано или поздно эта система костылей и подпорок развалится, но это уже будет не при нас. Наверное.
Да, но в большинстве случаев система не доживает до этапа, когда это становится дорого. А если доживает — есть деньги на рефакторинг.

Все верно - порог входа снижается, соответственно снижается квалификация программистов (в среднем), на выходе имеет такой говнокодинг.

О чем собственно и статья.

Но если бы порог не был низок, то такого количества кода просто не было бы.
Да, конечно, хорошим программистам противно на всё это смтреть, но оплачивают музыку не они.

то такого количества кода просто не было бы

И это было бы очень здорово.

 Кто-то когда-то написал код для библиотеки, потом к нему добавился ещё код, потом ещё, потом ещё. Старый уже легаси, про который все забыли, но он там сидит, а каждый год к нему ещё докидывают, и так далее. Потом библиотека подтягивает к себе зависимости из других, точно так же растущих библиотек… и вот так оно годами наслаивается и растёт в геометрической прогрессии.

Ну так тут описан Open–closed principle. Убрать слои абстракций и выкинуть лишнее - нельзя как можно. Сломается же что-нибудь. Причем, действительно, скорее всего сломается - принцип не на пустом месте возник.

Порог вхождения сейчас выше чем в 2000. Нет, ну серьезно, вы думаете, что разобраться в каком-нибудь ангуляре проще чем в php 4? Про десктопные приложухи я вообще молчу.
вы думаете, что разобраться в каком-нибудь ангуляре проще чем в php 4?
А написать на php4 что-то, что займет пару дней на ангуляре (при нулевых знаниях там и там) сколько дней займет?
Я слабо представляю, что осмысленное можно написать на ангуляре за пару дней при нулевых знаниях в нем. Хелло ворд? Ну минут 30 наверное на пхп с перекуром.
что осмысленное можно написать на ангуляре за пару дней при нулевых знаниях в нем
Много чего можно. С нулевыми знаниями же в ангуляре, а не в программировании как таковом.
Хелло ворд? Ну минут 30 наверное на пхп с перекуром.
Мультиплатформенный и симпатично выглядящий хелло-ворлд на пхп4 за 30 минут? Удачи:)
Есть один плюс, который часто упускают из вида. Это требования к кроссплатформенности. Чтобы этот код запускался на куче непохожих друг на друга архитектур, в такой же куче непохожих друг на друга окружений, работал с языками, которых разработчик даже в глаза не видел (юникод), а еще бы был многопоточным, чтобы использовать многоядерные архитектуры. В старом софте этих требований не было и поэтому можно было использовать что-то специфичное для одной архитектуры, но эффективное.

Ну и вторая большая часть проблемы — мы умеем распространять код крупноблочно — библиотеками/фреймворками, а вот как выдернуть отсюда нужную функцию с десятком зависимых, а все остальное не подключать — это нерешенная пока что проблема. И даже в идеале еще глубже — вот есть функция, вместе с зависимыми функциями она поддерживает 3 фичи, из них вам нужна 1, а остальные вы точно знаете, что не будут использоваться никогда — вот как выкинуть поддержку этих 2х фич и подключить только нужный код для 1й фичи — это пока невозможно.
Есть один плюс, который часто упускают из вида. Это требования к кроссплатформенности

Ну вот смотрите: есть кросс-платформенные приложения на .NET Core, относительно молодом фреймворке, и есть кросс-платформенные приложения на Java, на старом фреймворке. По функциональности они сходные, но вторые значительно «тяжелее». А есть ещё веб-приложения, которые вообще некорректно называть кросс-платформенными, т.к. их платформа — три браузера и нодежс, которые более-менее придерживаются одного стандарта исполняющей среды, и которые вообще на порядки тяжелее.
Да, в том или ином виде все языки верхнего уровня хотели достичь кроссплатформенности. Даже С. Но «веб-технологиям» удалось это лучше всего пока что (имхо). Естественно, ценой производительности.

То что, к примеру, я пишу на С для одной ОС и потом переписываю для другой не делает конечную библиотеку больше.

Если взять тот же Qt с требованиями "разработать с использованием QML", прицепить базу данных и использовать сервисы ОС (погода, положение, и тд) - это будет гиговый дистрибутив в отдельном каталоге не считая библиотек операционной системы. Но при статической линковке это всего лишь 12 мегабайт. А если взять весь функционал напрямую из ОС то приложение будет не больше метра.

Не будем также забывать про существование KolibriOS.

Всего. Лишь. 12. Мегабайт.

Я может не умею собирать Qt, но у меня получается где-то 16-35 MB занимает один исполняемый файл простенького проекта.

В .NET Core, кстати, при публикации приложения есть опция выбросить из dll заведомо неиспользуемый код. Программа худеет раза в два.

Стоит отметить что при работе с рефлексией могут быть нюансы и такой код нужно дополнительно "помечать", но в целом вы правы. Вот бы еще этой опцией люди начали пользоваться)

Это, конечно, здорово. Но вот я собрал win10-x64 self-contained консольное приложение (.NET6) с единственной строчкой «return;» Получилось ~19Мб (single-file ~11Мб). Смотрю на получившийся ворох dll-ок и недоумеваю — неужели они все действительно нужны для приложения, которое ничего не должно делать?

Большая часть этих файлов — рантайм, нативный код.
Непосредственно .NET код — 2 мегабайта. Не всё так плохо.

return размером в 2 МБ - не очень хорошо.

В тред призываются хаскелисты, чтобы рассказать, что в хаскеле система типов выразительная, косвенные эффекты контролируются, и т.о. подобные проблемы давно решены.

Кстати, да. Захотел я поставить утилитку — pandoc, так она с собой весь хаскель потащила. В итоге люди вот так извращаются:
https://aur.archlinux.org/packages/pandoc-bin

Кстати, спасибо.

по второму вопросу - static linking умел это еще во времена DOS, а вот это вот все - dll

Да, оптимизация у компиляторов есть, в том числе и удаление неиспользуемого кода. И все это хорошо работает пока не вышло за код вашей программы. Вот нужно вам из openCV подключить 2 функции, а ваш проект на java и варианты «не тащить лишнее» как-то сразу исчезают.

Хороший повод не писать на Java?

Т.е. ради одной фичи переписываем весь проект? Э - эффективность.

Хороший повод сразу писать на нормальных языках?

Неа. У вас уже есть готовый проект. Неважно на чем, хоть на языке Ада или на Фортране.

К счастью в мире больше одного языка программирования.

У меня нет проектов на яве.

А у других - есть. И часто это проект бизнеса, а не ваш. И бизнес не будет менять технологический стек без крайней на то нужды

Хороший повод поменять техдира, что выбрал такой стек.

Почему? Наш условный проект на Java существует, приносит прибыль. Разработчиков найти можно для работы с ним. Все еще не вижу проблемы.

Потом приходит конкурент, которому хватает 1 сервера вместо 10, 1 разраба вместо 10, 1 дня на разработку вместо 10, за счёт чего демпингует по цене, и вы разоряетесь.

И разраба этого зовут Исаак Ньютон;)

Вылизывание кода требует человеко-часов. "1 разраба вместо 10, 1 дня на разработку вместо 10" - так не выйдет. Выйдет наоборот. .

Вылизывание архитектуры требует человеко-дней. Разгребание последствий кривой архитектуры в коде требуется человеко-лет.

Первое правило ремонтника "Не ремонтируй то, что работает".

Ну подумаешь искрит иногда, квартира ж ещё не сгорела.

Если искрит - уже не работает.
Вы не путайте "работает", "в основном работает" и "иногда работает"

Ну а раз техдир уже не работает, то и платить зп ему уже не обязательно.

НЛО прилетело и опубликовало эту надпись здесь

Хороший повод сразу писать на нормальных языках?

Например?

Тогда почему вы пишите на JS/TS (судя по профилю)?

Я много на чём пишу. Но для браузера толковых альтернатив пока нет.

Ну вот в том и проблема, что далеко не всегда есть возможность выбрать тот язык, который нравится. Зачастую выбор обусловлен ограничениями платформы и/или наличием легаси кода, который никто не будет переписывать ради того, чтобы внедрить одну новую фичу правильным путем.

За пределами браузера ограничений практически нет, кроме инертности мышления.

За пределами браузера ограничений практически нет, кроме инертности мышления.

Вы можете выбрать любой стек, который позволит решить текущую задачу оптимальным способом. Но через N спринтов, когда уже написаны сотни тысяч строк кода, у приложения появилась куча активных пользователей, к вам внезапно прибежит заказчик с горящими глазами и заявит, что ему кровь из носа нужно интегрировать в приложение, ну хотя бы, тот же OpenCV, не суть важно. Тут и возникает два варианта: угробить еще тысячи часов и кучу денег на переписывание кода и миграцию, либо раздуть дистрибутив на лишних 100 Мб. Как думаете, что выберет бизнес?

Ох уж эта выученная беспомощность. Тут мы возвращаемся к исходному тезису. Не берите "любой язык", берите тот, что не создаёт вам проблем на "тысячи часов".

Тогда и я возвращаюсь к исходному вопросу: какой брать?

Потому что любой из известных мне языков, не дает гарантий, что подобной ситуации не произойдет.

НЛО прилетело и опубликовало эту надпись здесь

Да тут дело не столько в производительности. Вы можете выбрать, скажем, Go или Rust и запросто влететь в такую же проблему через какое-то время. Тут даже не столько в языке дело, сколько в современных методологиях разработки, которые подразумевают работу с очень маленьким горизонтом планирования. Когда вы начинаете создавать MVP, вы имеете весьма расплывчатое представление о том, что с ним будет через год или два.

Это не ответ. Ни один из перечисленных там языков не решает проблемы.

Какую проблему не решает язык, на который я дал ссылку?

Проблему возникновения требований, которые на этом языке не решаются без возникновения вышеупомянутой дилеммы.

И какие же там проблемы не решаются?

Какую проблему не решает язык, на который я дал ссылку?

Что там подразумевается? D конкретно или LLVM в общем?

Вот потребуется вам, например, в проект интегрировать какую-нибудь существующую Java-библиотеку. Как D решит эту проблему?

НЛО прилетело и опубликовало эту надпись здесь

Потому что нужная вам библиотека есть только на Java, и времени портировать ее на нужный язык нет. И это пример не с потолка взят. Мне как-то на заре карьеры пришлось интегрировать Scala-библиотеку, реализующую алгоритм PLSA, в C++ проект. Тот кошмар с JNI до сих вспоминается, но это был самый быстрый способ из доступных.

https://github.com/jtransc/jtransc

Любопытно. Надо бы поиграться на досуге. Хотя у меня сейчас нет JVM проектов.

Использование альтернативы на компилируемом языке / Портирование / транспиляция / поднятие JVM в воркере.

Альтернативы есть не всегда. А портировать - это долго и дорого. Никто не будет с ним заморачиваться, если есть возможность сделать пусть немного криво, но быстро и, что важнее всего, дешево. Исключение - достаточно крупные игроки, которые могут себе позволить потратить кучу человеко-часов на качественное решение.

А есть ли вообще такой язык, который при любом изменении требований не создаст "проблем на тысячи часов"? И может ли он существовать хотя бы теоретически, или для любого наперёд заданного языка может найтись требование заказчика, которое поставит разработчиков раком?

Или: существуют ли отдельные предметные области, где создание таких ЯП возможно?

Посыл в том, что проблему решить можно. Не всегда и не во всех условиях - но можно. А вы заявили безаппеляционно "это пока невозможно.".

Есть еще и другие варианты - самый простой это OpenSource. И хоть на джаве оно все будет - можно все порезать.

Посыл в том, что проблему решить можно. Не всегда и не во всех условиях — но можно. А вы заявили безаппеляционно «это пока невозможно.».

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

Есть еще и другие варианты — самый простой это OpenSource. И хоть на джаве оно все будет — можно все порезать.

Вот ваш стэк, допустим, java. А opencv на c++, вы развернете окружение для сборки, сделаете форк и вырежете лишнее на незнакомом для вас языке? Боюсь, это может занять времени больше, чем само ваше приложение целиком.

А потом, когда из обновленного opencv захочется применить какой то важный багфикс - пройти этот квест ещё раз.

По поводу кроссплатформенности меня расстраивает вот какая ситуация: много софта, у которой установка по умолчанию через веб-инсталлер. Почему в этот инсталлер не встроить что-то типа CPU-Z/GPU-Z и собрать (если такой сборки ещё нет на сервере компании) со всеми ключами, чтобы шустро работало именно на моей машине? CI/CL уже не диковина, билд-сервера жирные... Скорость растет, размер, в том числе за счет dead code elimination, падает, пользователь доволен, для производителя затраты не очень высокие. Видимо, я чего-то не понимаю.

Вы хотите иметь на своем компьютере сборку, которую производитель никак не тестировал?


(а то, что билд-сервера жирные — ну это когда как, некоторые продукты до сих пор минут 40 собираются, вы готовы добавить это время ко времени установки?)

Вы хотите иметь на своем компьютере сборку, которую производитель никак не тестировал?

Лично мне для развлекательной программы автотестов хватит, для остального телеметрии и крашрепортов хватит, зря их встраивают в таком количестве, что ли? Пусть я не думаю, что -march может что-то сломать, но вдруг, а как падают тесты на разнице -Os, -O0 и -O2 видел, поучительно, кстати. Небольшой оффтоп: в статьях про VLIW пишут, что для того, чтобы шустро работало, надо фактически переписать программу. Дык и чтобы старая программа шустро работала на новых процах, используя их возможности (avx, sse, интрисики) её тоже очень мощно перелопатить нужно, но это игнорируется.

некоторые продукты до сих пор минут 40 собираются, вы готовы добавить это время ко времени установки?

Я - готов. Но вполне разумен сценарий, когда тот же браузер через час-день-неделю вешает попап "Псст, мы собрали версию, идеально подходящую под твоё железо. Хочешь установить?".

Лично мне для развлекательной программы автотестов хватит

Вот только чтобы запустить автотесты, нужно такое же железо, как у вас. Откуда оно у производителя?


И это еще не считая того, что автотесты, вообще-то, легко превращают затраты производителя из "невысоких" в "что-то уже пожалуй не буду".

чтобы запустить автотесты, нужно такое же железо, как у вас. Откуда оно у производителя?

Хотел сказать про QEMU, но так правда получается дорого + баги эмулятора. С другой стороны, разработчики мобильных приложений как-то же тестируют хотя бы на самых популярных моделях смартов?..

автотесты, вообще-то, легко превращают затраты производителя из "невысоких" в "что-то уже пожалуй не буду"

Странно, считал, что иметь автотесты хороший тон, хотя бы под каждую поддерживаемую платформу. Ну не лапками же тыкать, дорого, долго и ненадежно.

С другой стороны, разработчики мобильных приложений как-то же тестируют хотя бы на самых популярных моделях смартов?..

Ну так они тестируют либо общую версию, либо версии, собранные для этих смартов. То есть оно уже собрано.


А вы хотите версию, собранную под ваше железо.


Странно, считал, что иметь автотесты хороший тон, хотя бы под каждую поддерживаемую платформу.

Иметь автотесты — да. А вот прогонять их каждый раз когда пользователь себе что-то устанавливает — уже дороговато.

Мобильщики, которых я видел и знаю, держат парк в 2-3 десятка основных смарфонов и тестируют на них.

Псст, мы собрали версию, идеально подходящую под твоё железо

Удачно сделал Гугл, перейдя с APK на AAB (что позволяет сразу выкинуть неиспользуемые ассеты) и внедрив Android Runtime c компиляцией байт-кода непосредственно под целевую платформу.

Но гугловская модель имеет недостаток - приложения слишком изолированы друг от друга и не могут использовать общий код. Если 10 вашим приложениям нужен OpenCV, то у вас на устройстве окажется 10 копий этой библиотеки, причём самых разных версий и без возможности обновления. Поэтому обязательно необходим менеджер пакетов, как в настольных линуксах.

А менеджер пакетов, как в настольных линуксах, приводит к тому, что требуются мейнтейнеры, которые разруливают зависимости, чтобы всё в репозитории зависело от одних и тех же версий библиотек. Что приводит к хорошо известным проблемам: трудности с обновлением на более новые версии, кучу работы мейнтейнеров и вообще превращение всего дистрибутива и репозиториев под него в огромный монолит.

К сожалению, в 2022 году настольные линуксы плохо умеют в решение DLL hell

НЛО прилетело и опубликовало эту надпись здесь

Gentoo не использовал, поэтому не знаю, как оно там. У Gentoo там есть еще механизм слотов, возможно, там все совсем хорошо.

Как пользовтаель Arch не испытываю проблем с обновлениями, потому что роллинг и репозиторий оперативно обновляется на свежие версии. Хотя суть остается - использование разных версий зависимостей в системе - боль.

Эти проблемы на мою жизнь особо не влияют, почему нужно о них задумываться?

Это из разряда рассуждений о вечном и прекрасном :)

НЛО прилетело и опубликовало эту надпись здесь
Проблемы, по большей части, не в ключах оптимизирующему компилятору, а в архитектуре и подходе к разработке приложений. Ущербные решения в этой области несут на порядки большие издержки, с которыми уже не всегда справляется экспоненциальный рост производительности.
НЛО прилетело и опубликовало эту надпись здесь
Вообще, есть нормальный софт, работающий на десктопах с разными ОС, это, в основном, опенсорс, вот только не на мобилках. Впрочем и у мессенджеров для мобилок совершенно отдельные нативные приложения.

По второму вопросу можно посмотреть на Unison

как выдернуть отсюда нужную функцию с десятком зависимых, а все остальное не подключать — это нерешенная пока что проблема

Статическая линковка и LTO. Вот вторая проблема куда сложнее, для этого библиотеки надо специально для этого проектировать, а так мало кто делает.

То же нытье, что и 5, 10, 20 и 30 лет назад.

Сейчас оно куда более обоснованное. Потому что 20 лет назад к росту софта ещё и новые фичи прилагались в соответствующем объеме.

А сейчас фичи только выпиливают, а те, что остаются - страшно глючат.

Движение в произвольную сторону проще подать как прогресс. В крайнем случае можно начать убирать/исправлять глюки

Что-то в этом есть...
"Обленилась молодежь - не хочет в машинных кодах писать, Ассемблер им подавай!"

Вспомнились некоторые вещи из фантастики далекого будущего. Насколько мы далеко сможем забраться в высокоуровневых абстракциях? Уже сейчас специалисты, которые помнят-знают-умеют в низкий уровень, являются штучным раритетом в мире.

Потому что они и нужны в штучных экземплярах. Рыночек порешал, как обычно. Когда появится высокий спрос на низкоуровневых программистов, такие специалисты начнут появляться всё больше и больше. Бизнесу, который создаёт спрос и платит разработчику зарплату, не нужно 100500 операционных систем, а вот интернет-магазинов, мобильных приложений и прочего нужно как раз 100500.

Вы можете написать программу, которая загружает файлы на сервер надёжно,
быстро и безопасно, и для этого потребуется двенадцатая часть от этого
количества кода. Это может быть один файл, просто единственный маленький .exe.
Ему не нужны сотни и сотни DLL. Это не только возможно, это легко, и
такое решение будет более надёжным, эффективным и удобным в отладке, к
тому же (подчеркну) оно на самом деле будет работать.

Как же сильно пахнет Delphi. :)

Я бы сказал, тут пахнет старопердунизмом :)

Даже интересно, насколько низко автор предлагает спуститься. Использовать FTP? Упороться и сделать свой более лутший протокол? Там чем ниже, тем больше будет все более и более интересных вопросов возникать, про которые раздуватели кода даже и понятия не имеют.

Но да, зато быстро. Наверное.

Использовать FTP?

А почему нет? Бизнесу надо чтобы быстро, дёшево и работало. FTP работает, все инструменты уже есть (нулевые трудозатраты на их создание) и свободные (нулевая цена). Ну ладно, надо ещё гуй к клиентской части сляпать. Хотя на самом деле надо просто как сетевую папку примонтировать и обойтись без гуя вообще (для ftp такие решения тоже есть). Ой, но тогда негде фирменный логотип показать, вот беда.

Ой, но тогда негде фирменный логотип показать, вот беда.

Команду лепил занять нечем, пускай пилят пока веб морду на новом фреймворке, как до беты дойдет там уже пожирнее фреймворк выйдет, будут сразу на него переписывать.

А почему нет?

Потому что FTP не безопасный, и если вы хотите что бы ваши файлы не перехватил сидящий со сниффером кулхацкер, нужно как минимум SFTP. Сами вы реализацию TLS не напишете (в лучшем случае будет дырявое решето), поэтому придется добавлять OpenSSL.

Реализацитю FTP сами будете писать? Уверены что напишете в соответствии с RFC? А все кейсы учтете или для 5% пользователей ваша реализация не будет работать? Ага, подключаем ftplibpp...

А что там со сжатием, или будет заливать на 30% медленнее чем у конкурента? Ага, подключаем zlib...

И это мы даже не дошли до интерфейса.

Проблема не в том что "разработчики плохие". Проблема в том что задача менеджмента зависимостей и дублирования библиотек сегодня не решена для десктопного да и любого ПО. Мобильные ОС решают чуть-чуть лучше.

Реализации ftp с TLS уже давно написаны, о чём вы?

Сжатие популярным форматам файлов не особо надо.

На самом деле я вот сейчас зашёл в яндекс.диск через webdav. Просто нажал на закладку в файловом менеджере и всё открылось. Без специального гуя, без клиентского софта от яндекса, только используя инструменты общего назначения, реализующие общепринятые стандарты. Это возможно. Никакой проблемы нет. Просто надо делать по-человечески.

Не по теме поста, но — попробуйте теперь через этот webdav залить в яндекс файл размером пару гигабайт :)

Яндекс доступ через webdav всячески троттлит и ущемляет. Потому что им хочется, чтобы я их троянца поставил. Но это не техническая проблема, а бизнесовая. Технически и webdav и ftp работают.

К счастью, пока что можно и без троянца, просто через браузер, там не тротлит…

Тут выше приводили притчу про двух программистов, но почему-то, когда защищается принцип, что можно делать быстро и экономно, про нее забывают… и все подавай уже сразу

Почему бы не завернуть обращение к FTP в VPN?
НЛО прилетело и опубликовало эту надпись здесь

Мы все ещё рассчитываем обойтись без раздутых либ :)?

VPN не обязательно встраивать в приложение, соответственно и библиотеки для этого в самом приложении не нужны.

Как вы считаете, сколько сейчас пользователей хабра сидят через VPN?

Вы будете всем пользователям объяснять что для их безопасности надо использовать VPN? А без VPN как, приложением пользоваться запретите? А объяснять то что бесплатные VPN так же воруют траффик, тоже будете?

А когда у известного блоггера украдут его/ее фотки которые он залил на ваш сервис, будете говорить что "он сам виноват потому что не было VPN, а если был то нет тот"?

Как Вы думаете, имел ли я ввиду, говоря о VPN, использование его в конечных приложениях, работающих у пользователей? Конечно же нет.
Речь о том, чтобы не усложнять архитектуру сервисных приложений, работающих на инфраструктуре компании-разработчика как то: между зданиями, городами, ЦОД.

Если мы говорим о приложениях, которые работают непосредственно у конечных пользователей, то тут совершенно другое дело.

Чтобы не усложнять архитектуру добавлением ещё одного элемента, мы добавим в неё ещё один элемент.

Пример: Сервисное приложение просто работает с неким FTP и не занимается никакой аутентификацией запросов и прочими вопросами безопасности, просто гоняет файлы туда-обратно.

Admin/DevOps настраивает VPN канал и маршрутизацию от хоста приложения до FTP.

Итого: данные между приложением и FTP ходят без лишних усложнений в САМОМ приложении, но канал защищён VPN.

Сложность приложения мало кого волнует. Волнует сложность системы. Теперь, чтобы настроить систему, нужно на 1 участника больше. Чтобы диагностировать проблему в системе, нужно на 1 участника больше..

И в этом нет ничего страшного, потому что эти участники так и так уже наняты. А настроить готовый и хорошо опробованный протокол куда проще и надёжнее, чем реализовывать безопасное взаимодействие внутри приложения (пусть даже через ничуть не менее опробованные и надёжные протоколы), с риском сломать это в будущем при внесении каких-либо изменений.

P.S. в любом случае должно быть описание как, что и с чем взаимодействует, и не важно где у вас шифрование — внутри приложения или за его пределами.

А если допустим тот FTP (или аналог) для решения простой задачи:
есть читалка книг на андроиде, с синхронизаций позиции между разными экземплярами.
Еще и VPN городить с андроида к конкретно нужному серверу?
(кстати есть читалки с таким подходом — Moon+ Reader например, только там вшитая поддержка Dropbox/Google Drive/WebDAV)

Еще и VPN городить с андроида к конкретно нужному серверу?

Поставьте задачу девопсу. Он же всё равно есть ;)

Почему Вы передёргиваете мои слова?

Я разве говорил о конечных приложениях на устройствах пользователей?

Значит, этот подход плохо масштабируется, и вместо раздувания кода требует раздувания штата. К каждому клиентскому устройству должен подойти специальный человек и чего-то настроить. Так себе решение.

Причём здесь масштабирование и клиентские устройства?

Я предложил решение завернуть обращение к FTP в VPN в строго ограниченных условиях: сервисное приложение, которое работает на стороне компании-разработчика и взаимодействует с FTP-сервером в его же собственной инфраструктуре.

Конкретно в таком случае, это будет неплохое решение, позволяющее не усложнять разработку, но сохранить приемлемый уровень безопасности и надёжности.

Я не утверждал, что это универсальное решение. Можете прочитать ветку от начала, чтобы убедиться в этом.

Поворчать, это конечно весело. Но давайте спустимся на землю.
В реальном проекте, если бы я увидел, как кто-то пишет свой обход JS'овсвского объекта, вместо использования lodash - я бы немного РАССТРОИЛСЯ. И да, вроде как те же аргументы: обойти-то просто, из библиотеки нужно 2,5 функции. Только вот ты не один обычно над проектом работаешь. Один написал свой обход так, другой - эдак, третий - придумал еще что-то. В результате, у вас 100500 реализаций обхода объекта, чтобы просто получить значение свойства, причем каждый реализует по своему. А затем приходит еще один человек, он видит эти 100500 этих функций, в результате не понимая, чем они отличаются - делает свою и у вас 100501 функция.
И да, на истории про то, что у вас должны быть ревью, должна быть архитектура, диаграммки UML, четкая документация, чтобы все знали что уже есть, чего нет, как нам с этим работать, кто-то должен следить и т.д. Ну, да. Только вот как-то так получается, что в реальном мире - никто особо не хочет ревьюить чужой код, особенно, когда есть свои задачи; архитектура не успевает за хотелками; диаграмки - устаревают и никто их не поддерживает; документацию пишут недостаточную; вся информация о проекте в несколько миллионов строк не держится в голове; а нанять сертифицированного следителя за порядком - бизнес не хочет. А потому - нужно выбирать решения, которые стандартны, которые проверены и бить по рукам тех, кто будет без острой необходимости свое писать.

А что там в lodash такого небесполезного?

И, кстати, из lodash, вроде, deepEqual можно вытащить условно-отдельно ;)

Вот, собственно, тут мы и наблюдаем причину всё увеличивающихся тормозов и раздувания. И она не в том, что скорость/размер софта меняется на скорость/надёжность разработки. И даже не в том, что нет времени искать лучшее решение. И даже не в том, что лучше найти не удаётся. А в том, что даже когда тычешь человека носом в тех анализ и бенчмарки, всё, что он может сделать - это дизлайк поставить, и идти говнокодить дальше.

  1. Я lodash привел как пример. Его все знают и понимают что оно делает и зачем нужно.

  2. Если говорить, что нам всегда критична скорость и размер. Ну давайте откатимся к си, откажемся от жутко тормознутого HTTP, который даже с HTTP3 - будет проигрывать кастомному бинарному протоколу под конкретные задачи. Ну а что? Скорость работы и размер - самое важное. Взяли си в зубы и пошли хендлерами обмазываться, да свои алокаторы писать, потом запилили свой очень быстрый клиент на OpenGL. Скорость и размер - главное. Такое вот решение будет пару КБ весить и летать на компьютере 30 летней давности. А то что потом никто поддерживать и развивать не сможет - ну, да и фиг с ними, своего времени не жалко, денег заказчика не жалко, пользователей, которым это все инсталлировать - тоже не жалко, так что напишем еще раз с нуля, желательно, сломав обратную совместимость.

    Да, тут я ерничаю. Но вот вы прицепились к lodash, будто суть поста была в его рекламе. Я лишь говорил о том, что чтобы писать свой велосипед - нужны веские основания, потому что свой велосипед это дополнительные траты на поддержку, развитие, введение в курс дела новых разработчиков, и далеко не факт, что ваш велосипед будет лучше чем тот, который уже есть.

И под С/C++ есть свой lodash. И не обязательно откатываться к си. И писать прям с нуля, свой гуй, потом реализацию протокола, потом компилировать вселенную и т.д не ребуется.

НЛО прилетело и опубликовало эту надпись здесь

Его все знают и понимают что оно делает и зачем нужно.

Ну я вот не знаю его. А глядя в его код, не понимаю зачем оно такое нужно. Это ж груда кода, которая делает простые вещи сложным и медленным способом - квинтессенция современной разработки.

Я лишь говорил о том, что чтобы писать свой велосипед - нужны веские основания

Чтобы использовать низкокачественные решения нужны веские основания, независимо от того кто их автор.

Число итераций в секунду, время выполнения итерации, число итераций, потребление памяти на одну итерацию, потребление памяти на все итерации. Всё это для холодного и горячего запуска.

Вопрос был не совсем в этом :) Ну да неважно

Так были же и альтернативы. Например, CppCms - быстрая и эффективная CMS, написанная на плюсах. Но проект сейчас заброшен - очевидно, оказался никому не нужным...

Необходимо учитывать ещё непостоянные требования пользователей, которые реализуются в рамках проекта. А когда они становятся не нужны их просто хоронят в коде.

Вот, писали мы одно простое приложение, которое считавало адреса проводов со схемы и, по требованию пользователя, записывало их в таблицу Excel. Раз десять уточнили, точно ли они хотят именно файл Excel. Формат в ТЗ прописали. Дошли до сдачи проекта, а там требуется обычный текстовый файл с разметкой csv. Спрашивается, и на кой, мы обращались к Excel?

Естественно, код обращения к Excel удалять не стали, просто закомментировали. Потому что csv из Excel быстрее выгрузить.

И так, курочка по зернышку клюёт.

Это естественный результат развития аппаратного обеспечения. Пока мы (были) на экспоненциальной части S-кривой ничего не изменится. Когда мы окажемся на логарифмической, вот тогда бережливые программисты будут нарасхват.

<зануда mode> Не могу не отметить, что вообще то "этита" помещалась в 48 Kb памяти, причем ещё около 6 КБ из этих 48 были выделены под "экран", и, таким образом, не использовались для хранения кода.

А вообще - Синклер был прекрасной машинкой, которая - в то время - многому меня научила.

До сих пор проходят (под эгидой Яндекса, если что) соревнования по написанию игр для Синклера. Финал-в декабре! Ещё можно успеть...

А ссылку дадите? На соревнование?

Вероятно имеется в виду вот это: https://rgb.yandex.ru/

Это уже не bloatware и не оверинжиниринг, а абсолютное, совершенное, очевидное, наглядное безумие.

Да, безумие, и всем плевать. Менеджменту плевать, потому что он очень далек от этого всего, а программистам просто западло озвучивать проблемы, потому что в современном мире говорить о проблемах это уже токсичность. А токсичность - это самый страшный современный грех. Пускай прод регулярно падает, пускай юзеры матерятся в техподдержке - главное чтобы внутри команды все было модно/молодежно/позитивно.

Меня поражают намного более приземленные вещи. Возьмем двух программистов:

  • Один программист пилит фичу 5 дней, потом в ней находят 2 бага, которые исправляются за 2 дня [7 дней суммарно]

  • Другой программист пилит фичу 2 дня, потом в течении года в ней находят 20 багов, которые он правит за 10 дней [12 дней суммарно]

Казалось бы, с точки зрения логики первый программист лучше - суммарно и времени потрачено меньше, и ошибок меньше - т.е. более довольные клиенты.

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

Это потому, что второй быстрее доносит Value до рынка, и бизнес быстрее начинает зарабатывать деньги на фиче :)

Миром разработки рулит маркетинг, это давно свершившийся факт

Это потому, что второй быстрее доносит Value до рынка, и бизнес быстрее начинает зарабатывать деньги на фиче :)

Нет, это потому что менеджер второго быстрее получит премию за выполненную задачу. А для бизнеса по факту проблемная фича зачастую может и убытки приносить вместо прибыли.

Неверно :)

Фича выпускается только тогда, когда ее качество достаточно до донесения Value и, соответственно, получения прибыли

Терминальные случаи статистики не делают и быстро из оной выпадают :)

Фича выпускается только тогда, когда ее качество достаточно до донесения Value и, соответственно, получения прибыли

Неа. Иногда, в некоторых компаниях — да. Но обычно менеджер имеет заявленные сроки и не имеет возможности достоверно оценить, достаточен ли уровень качества фичи для получения прибыли, или нет. Тем более что его KPI обычно завязано не на Value, а как раз на эти самые сроки.

Вы выпустили из внимания последнее предложение в моем предыдущем посте ;)

В целом, процессы планирования и, как следствие, выставления KPI, в частности - обычно, достаточно выстроены в любой нормальной компании

"Ненормальные" же - живут интересно, но недолго :)

Вы выпустили из внимания последнее предложение в моем предыдущем посте ;)

Я ему не придал значения. Проблемный релиз — это не терминальный случай. Это обычный типовой кейс сейчас, на 100% соответствующий вышеописанной ситуации про
Один программист пилит фичу 5 дней, потом в ней находят 2 бага, которые исправляются за 2 дня [7 дней суммарно]

Другой программист пилит фичу 2 дня, потом в течении года в ней находят 20 багов, которые он правит за 10 дней [12 дней суммарно]

А что касается процессов планирования, ну, я много компаний повидал. В целом между качеством планирования и жизнью компании особой корреляции не могу проследить. Рынок ИТ сейчас такой, что прокормит кого угодно, даже полнейших бездарей, лишь бы у них отдел продаж работал.

Я ему не придал значения

А напрасно - это ключевой момент :)

Проблемный релиз — это не терминальный случай.

Проблемный релиз в проде - это именно терминальный случай

Это обычный типовой кейс сейчас, на 100% соответствующий вышеописанной ситуации про 

Нет, не соответствующий :) Ибо в течение года компания получала профит, который, обычно, порядково превосходит затраты на фиксы

А что касается процессов планирования, ну, я много компаний повидал.

Ну, а я много где участвовал в этих процессах :)

В целом между качеством планирования и жизнью компании особой корреляции не могу проследить.

Мне остается только посочувствовать :)

Рынок ИТ сейчас такой, что прокормит кого угодно, даже полнейших бездарей, лишь бы у них отдел продаж работал.

Вы почти подтверждаете мой тезис :)

Если бездари производят то, что можно продать, а прибыль от продажи покрывает расходы - то это и есть то, о чем я говорю :)

Если бездари производят то, что можно продать, а прибыль от продажи покрывает расходы — то это и есть то, о чем я говорю :)

Нет, речь не про это :) Продаётся продукт, а не релиз, не фича. Релиз может быть сколь угодно проблемный, фича может сколь угодно тянуть вниз расходами на поддержку и исправления. Речь про том, что сейчас это в порядке вещей, а менеджер все равно получит свою премию, а расходы на исправление проблем лягут в операционку, и никто там резкость наводить не будет.

Продаётся продукт, а не релиз, не фича

Фича - часть продукта

Даже бесплатная - может увеличить продажи

Это, в общем-то, азы, наверно, не надо их объяснять :)

Релиз может быть сколь угодно проблемный, фича может сколь угодно тянуть вниз расходами на поддержку и исправления.

Это те самые терминальные случаи, которые я предлагал не использовать как основу для статистики ;)

Речь про том, что сейчас это в порядке вещей,

Именно

Я ж так и сказал - разработкой рулит маркетинг, как и бизнесом в целом

Это теперь в порядке вещей

менеджер все равно получит свою премию

Не за выпуск релиза же, что вы )

За выполнение роадмапа, например

Или за рост DAU/WAU/MAU

Или за рост retention

Или за выполнение любого другого операционного показателя, который прямо связан с его KPI

расходы на исправление проблем лягут в операционку, и никто там резкость наводить не будет.

Это норма

Техдолг любого коммерческого проекта - история грустная. И, очень часто, весьма объёмная :)

Это, в общем-то, азы, наверно, не надо их объяснять :)

Да, но я думал, для вас очевидно, что ещё фича может никак не повлиять на продажи (это, кстати, очень частый кейс), а может увеличить расходы, а может оттолкнуть пользователей своей реализацией. Фичи — они все разные, понимаете ли.
Это те самые терминальные случаи

Терминальные случаи — это нечто, бывающее редко, и служащее надгробием какому-то процессу. Нечто весьма обыденное и проходящее бесследно, терминальным случаем не может быть по определению :)
Это норма

Да. И это — отстой.

Да, но я думал, для вас очевидно, что ещё фича может никак не повлиять на продажи (это, кстати, очень частый кейс), а может увеличить расходы, а может оттолкнуть пользователей своей реализацией.

Нет, не очевидно :)

Ибо реализация любой фичи - это затраты, которые должны окупаться, прямо или косвенно, а продажи - далеко не единственная метрика :)

Что же до "оттолкнуть пользователей" - это все благородно, но решит все MAU, а не недовольство отделных пользователей

Фичи — они все разные, понимаете ли.

Ваш намек на некую снисходительность в тоне выглядит забавно :)

Особенно, на фоне демонстрируемого понимания процессов, отличных от собственно разработки ;)

Фичи - они разные на вид, о реализация любой фичи имеет ту самую ценность, Value, ради которой и запускается ее разработка. Бизнес рассчитывает на тот или иной профит в результате ее реализации - иначе и быть не может

Терминальные случаи — это нечто, бывающее редко, и служащее надгробием какому-то процессу. 

Вы преувеличиваете :)

Нечто весьма обыденное и проходящее бесследно, терминальным случаем не может быть по определению :)

Бесследно? Как легко вы списали затраты на разработку ;)

Да. И это — отстой.

Вообще, нет. "Отстой", как вы выразились, это как раз то, что вы называете отстоем ситуацию, в которой вам платят деньги за работу :)

Понимаете ли, любой наемный программист нанят не для самореализации и креатива, а для выполнения той работы, результат которой нужен заказчику и плательщику - это нормально и закономерно. Кто платит - тот и заказывает музыку :)

Ибо реализация любой фичи — это затраты, которые должны окупаться, прямо или косвенно, а продажи — далеко не единственная метрика :)

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

Эм. Легко, и тут я готов подписаться под каждым своим словом. В большинстве случаев в ИТ менеджмент спокойно засунет под коврик все свои ошибки. Это штатная ситуация, возникающая везде и регулярно. Да и не только в ИТ. Бизнес по определению имеет риски. И если бы всех наказывали за ошибки в бизнесе, никто бы в бизнес не шёл работать.
Понимаете ли, любой наемный программист нанят не для самореализации и креатива, а для выполнения той работы, результат которой нужен заказчику и плательщику

Понимаете ли, я это понимаю, и ни разу в жизни не оспаривал, и нигде в моих вышестоящих комментариях не написано, что я в этом сомневаюсь :)

Понимаете, я в этой отрасли очень давно, третье десятилетие как. 

Ну так и я не первый десяток лет уже :)

Но их как минимум, нет ни в одной из компаний, где я работал, и нет ни в одной партнёрской компании, с которыми я сотрудничал. 

У меня совершенно противоположный опыт - везде было именно так :)

у меня нет оснований считать, что моя выборка недостаточно представительна.

Ну, как минимум, есть моя выборка :)

И даже если есть бизнес-план, в нём всегда будет достаточное количество условных цифр, которые помножат на ноль точность планирования.

Как это "даже если есть"? Кто ж без бизнес-планов с роадмапами денег даст на разработку? :)

Это штатная ситуация, возникающая везде и регулярно. 

Ну, вообще, это как раз НЕштатная ситуация :)

И, если она возникает регулярно - то гнать надо тех, кто занимается управлением в этой части

Бизнес по определению имеет риски.

Бизнес имеет как риски, так и риск-менеджмент, если он здоровый

Грамотное планирование и следование планам как раз один из инструментов, в частности, минимизации рисков

И если бы всех наказывали за ошибки в бизнесе, никто бы в бизнес не шёл работать.

Очень странный вывод

Во-первых, в бизнесе наказывают за ошибки :)

Во-вторых, причина "пойти в бизнес" - не в безнаказанности

У меня совершенно противоположный опыт — везде было именно так :)

Ок, я принимаю, но своим глазам все равно верю больше, чем вашему опыту. Хотя бы вот на основе этого:
Как это «даже если есть»? Кто ж без бизнес-планов с роадмапами денег даст на разработку? :)

… потому что вы не замечаете, что в подавляющем большинстве компаний, которые ведут какую-то ИТ-разработку, «даст денег» и «предлагает реализовать фичи» одно и то же лицо или группа лиц. Слона вы не заметили :)
В ИТ на одного отлаженного гиганта или вымуштрованного стартапа, который бегает питчить инвесторов, приходится сотня вот таких компаний.
Бизнес имеет как риски, так и риск-менеджмент, если он здоровый

Да. И не имеет, если он обычный
Грамотное планирование и следование планам как раз один из инструментов, в частности, минимизации рисков

Да. И как любой инструмент, может применяться, а может не применяться. А ещё бизнес может работать в условиях недостатка информации для грамотного планирования.
Во-первых, в бизнесе наказывают за ошибки :)

Вы забыли добавить слово «иногда», и тогда это не пойдёт в противоречие с моим тезисом.
Во-вторых, причина «пойти в бизнес» — не в безнаказанности

… и это тоже ему не противоречит никак :)

Ок, я принимаю, но своим глазам все равно верю больше, чем вашему опыту.

Ваше право, конечно :)

… потому что вы не замечаете, что в подавляющем большинстве компаний, которые ведут какую-то ИТ-разработку, «даст денег» и «предлагает реализовать фичи» одно и то же лицо или группа лиц. Слона вы не заметили :)

Эм. Очень интересно про слона :)

Вообще-то, я прямо писал, что деньги дает бизнес :) Соответственно, роадмапы и заказ фич - это именно то, что хочет и за что платит бизнес :)

Так что, еще вопрос, кто что не заметил ;)

В ИТ на одного отлаженного гиганта или вымуштрованного стартапа, который бегает питчить инвесторов, приходится сотня вот таких компаний.

Зачем приводить в пример нежизнеспособное? :)

Процессы продумываются не от излишка времени и денег, а для повышения эффективности и, как следствие, конкурентноспособности бизнеса

Выживет тот, кто эффективнее

Да. И не имеет, если он обычный

Тогда его ждут сюрпризы, чаще - неприятного характера :)

 А ещё бизнес может работать в условиях недостатка информации для грамотного планирования

Бизнес - не может, в долгосрочной перспективе

"Бизнес" - возможно, останется жить

Вы забыли добавить слово «иногда», и тогда это не пойдёт в противоречие с моим тезисом.

Нет, не "иногда" :) Для бизнеса

А кавычки надо добавлять только вместе с окавычиванием "бизнеса" - тогда все будет похоже на правду :)

Вообще-то, я прямо писал, что деньги дает бизнес :) Соответственно, роадмапы и заказ фич — это именно то, что хочет и за что платит бизнес :)

Ну ок. Это утверждение ортогонально тому тезису, на который вы отвечаете. А зачем бизнес будет сам себе писать и защищать бизнес-план, если он, кхм, небольшой, и например, состоит из одного босса и команды разработчиков?
Зачем приводить в пример нежизнеспособное? :)

Вы правда считаете нежизнеспособными те предприятия, которые вам готовят еду, убирают вашу квартиру, шьют вам одежду и т.д.? Многие из них переживут половину современных крупных компаний.
Бизнес — не может, в долгосрочной перспективе

Может сколь угодно долго, если он некрупный, и им руководит достаточно толковый человек (это, кстати, единственное необходимое и достаточное условие успеха, а отнюдь не форматы бизнес-процессов).
Не надо быть заносчивым в отношении тех компаний, которые работают по более простым бизнес-процессам. У них есть как свои недостатки, так и свои достоинства — например, они намного быстрее адаптируются под изменения рынка, и отсутствие планирования с лихвой компенсируется короткой обратной связью с рынком и быстрым принятием решений.

А зачем бизнес будет сам себе писать и защищать бизнес-план, если он, кхм, небольшой, и например, состоит из одного босса и команды разработчиков?

Чтобы стать крупнее, например? :)

Вы правда считаете нежизнеспособными те предприятия, которые вам готовят еду, убирают вашу квартиру, шьют вам одежду и т.д.?

А они являются ИТ-предприятиями? :)

По-моему, речь шла про них

Не надо быть заносчивым в отношении тех компаний, которые работают по более простым бизнес-процессам. 

Не надо придумывать за собеседника ;)

Нет никакой заносчивости, вам показалось

например, они намного быстрее адаптируются под изменения рынка, и отсутствие планирования с лихвой компенсируется короткой обратной связью с рынком и быстрым принятием решений.

И у вас есть примеры? :)

Чтобы стать крупнее, например? :)

Нет. Бизнес сначала становится крупнее, а потом пишет бизнес-планы. В обратную сторону это не работает. Если инвестор, лидер и менеджер в одном лице начинает уходить в самобюрократию, на управление ему уже времени не остаётся. Поэтому сначала он делегирует часть своих функций наёмным менеджерам, а уже потом это начинает обрастать планами и отчётностью.
А они являются ИТ-предприятиями? :)

Часть из них являются заказчиками ИТ-услуг, теми самыми, кто просит фичи и платит деньги. Часть (бОльшая, к слову) ИТ-предприятий являются таким же мелкими, с точно так же выстроенными бизнес-процессами.
Не надо придумывать за собеседника ;)

«Бизнес» в кавычках — это разве не заносчивость? Возможно, спутал с пренебрежением. Прошу прощения, бывает :)
И у вас есть примеры? :)

Да. И у вас тоже есть, если по сторонам посмотрите чуть внимательнее :)

Бизнес сначала становится крупнее, а потом пишет бизнес-планы.

У вас какое-то бинарное понимание процессов роста :)

Он может стать крупнее - и стремиться стать еще крупнее, это нормально для бизнеса ;)

Часть (бОльшая, к слову) ИТ-предприятий являются таким же мелкими, с точно так же выстроенными бизнес-процессами.

У вас, конечно же, есть статистика, которой вы можете подтвердить свои слова? ;)

«Бизнес» в кавычках — это разве не заносчивость?

Нет :)

Возможно, спутал с пренебрежением.

Совершенно точно перепутали :)

Да. И у вас тоже есть, если по сторонам посмотрите чуть внимательнее :)

То есть, у вас нет примеров, я правильно понимаю? :)

Иначе - что мешает вам обосновать свои слова оными примерами? :)

У вас какое-то бинарное понимание процессов роста :)

Эм… я прошу прощения, но в обсуждаемом вопросе нет ветвлений. Если мы с вами изначально говорим про организацию, в которой принимает решения и финансирует один и тот же человек (а мы именно про это и говорим, если вы посмотрите наш диалог), то направление роста там ровно одно. Вы нечаянно подменили предмет вопроса, или специально воспользовались известным приёмом? ;)
У вас, конечно же, есть статистика, которой вы можете подтвердить свои слова? ;)

Да. Вы правда без меня не сможете нагуглить, что примерно четверть ИТ-работников сейчас работают в компаниях размером 1-9 человек, где в принципе не может быть многоуровневого менеджмента, и четверть — в компаниях 10...49 человек, где максимум два уровня, причём один обычно технический?
Совершенно точно перепутали :)

Ок, поменяйте в моей исходной фразе «заносчивость» на «пренебрежение».
Иначе — что мешает вам обосновать свои слова оными примерами?

Лень. На это надо намного больше времени, нежели просто написать вам ответ, а переспорить вас мне не настолько важно :)

Вы нечаянно подменили предмет вопроса, или специально воспользовались известным приёмом? ;)

Вообще-то, это именно вам я указал, что ограничивать понятие "роста" некорректно

Вы правда без меня не сможете нагуглить, что примерно четверть ИТ-работников сейчас работают в компаниях размером 1-9 человек, где в принципе не может быть многоуровневого менеджмента, и четверть — в компаниях 10...49 человек, где максимум два уровня, причём один обычно технический?

Извините, конечно, но в приличных местах принято обосновывать свои утверждения - а вы старательно этого избегаете

Ок, поменяйте в моей исходной фразе «заносчивость» на «пренебрежение».

Про "пренебрежение" я сказал чуть ниже в том же посте

Лень

Это плохо кореллирует с объёмом ваших постов

На это надо намного больше времени, нежели просто написать вам ответ, а переспорить вас мне не настолько важно :)

"Я три дня бежала за вами, чтобы рассказать, насколько вы мне безразличны" (с)? ;)

Увы, пока я вижу много ничем не подтвержденных слов от вас, которые противоречат и здравому смыслу, и общемировой практике

Вообще-то, это именно вам я указал, что ограничивать понятие «роста» некорректно

Ну да, я вообще-то заметил, что именно вы подменили вопрос и указали мне, что после подмены вопроса к нему появились замечания. Я потому и спросил вас, зачем вы подменили вопрос?
Извините, конечно, но в приличных местах принято обосновывать свои утверждения — а вы старательно этого избегаете

Это было слишком тривиальное утверждение, чтобы мог допустить мысль, что вы, человек явно не с улицы в ИТ-бизнесе, не смог бы быстро и самостоятельно проверить. Но если вам тоже лень — вот, с первой же страницы гугла на запрос «Distribution of software enterprises in the ICT industry by company size»
Отличная статистика (пусть и не свежайшая, но пятилетней давности тоже вполне сгодится, распределение по занятости с тех пор существенно не изменилось), где вы можете посмотреть и количество предприятий в ИТ, и статистику по их открытию/закрытию, и по количеству занятых. И главное — бесплатно.
publications.jrc.ec.europa.eu/repository/bitstream/JRC106589/jrc106589(1).pdf
Это плохо кореллирует с объёмом ваших постов

Я захожу на Хабр почитать и потрепаться, а не работать аналитиком.
ничем не подтвержденных слов от вас, которые противоречат и здравому смыслу, и общемировой практике

Хм. Странно, а с моей стороны я вижу оппонента, который мне написал множество ничем не подтверждённых заявлений, которые противоречат и здравому смыслу, и общемировой практике, и моему опыту. Если у вас есть основания полагать, что ваша точка зрения верна, жду от вас ссылок.

Ну да, я вообще-то заметил, что именно вы подменили вопрос и указали мне, что после подмены вопроса к нему появились замечания.

Поясните с цитатами, что и на что я, по-вашему, подменил

Это было слишком тривиальное утверждение, чтобы мог допустить мысль, что вы, человек явно не с улицы в ИТ-бизнесе, не смог бы быстро и самостоятельно проверить.

Это было ВАШЕ утверждение, ничем не подтвержденное, увы :)

publications.jrc.ec.europa.eu/repository/bitstream/JRC106589/jrc106589(1).pdf

Интересно, вы смотрели этот документ сами? :)

Про количество занятых - не подскажете, в какой таблички или на каком графике вы смогли найти те процентовки, которые пытаетесь этим документом обосновать?

Я захожу на Хабр потрепаться, а не работать аналитиком.

Это было ожидаемо :)

Странно, а с моей стороны я вижу оппонента, который мне написал множество ничем не подтверждённых заявлений, которые противоречат и здравому смыслу, и общемировой практике.

Например?

Если у вас есть основания полагать, что ваша точка зрения верна, жду от вас ссылок.

Вы знаете, "сам дурак" - это тоже демагогия :)

НЛО прилетело и опубликовало эту надпись здесь

Пожалуй, вы правы, сорри

Далее никакого смысла в казуистике и демагогии не вижу

Да, пожалуй хватит. Мне печеньки тоже не дают за то, что с вами общаюсь, а не знаю как насчёт бизнеса, но в демагогии вы точно эксперт 85 уровня :)
Просто когда создают технологии для разработчиков (яп, фреймворки, библиотеки и т.д.) думают примерно так: «дадим им все возможности, а там они сами разберутся», что на практике приводит к тому, что короткий путь — самый бажный, а надежный — самый длинный. А надо было думать так: «дадим им единственный путь, самый надежный», что привело бы к упрощению инструментария, а значит и к сокращению времени разработки. И тогда было бы и надежно и приемлемо быстро.

После прочтения таких статей, ради самоуспокоения всегда напоминаю себе о том, как возросли наши требования как пользователей:

  • все разучились управлять информацией. Никто больше не ценит простые инструменты, вроде иерархической файловой системы в целях создания порядка. Тех, кто раскладывает музыку во FLAC-е по сотням папочек, считают душными дедами. Все пользуются поиском на стриминговых сервисах.

  • ладно, не все разучились. Кто-то не умел с самого начала, и вряд ли бы научился. Ведь мы пригласили пользоваться информационными технологиями своих родителей, своих друзей. Им нужны более интуитивные интерфейсы, анимации, подсказки.

  • теперь мы рассчитываем на информационные технологии ГОРАЗДО сильнее, чем ранее. Многие уже забыли, что такое BSOD и фарш на файловой системе просто при наборе текста в Word. Согласитесь, даже ненавистная Винда сегодня куда более стабильная, чем её древние предки 95/98/Me.

  • многие вещи, вроде уже упомянутого Юникода, воспринимаются как должное. А за это тоже нужно платить сложностью. Тот же протокол TLS, который по меркам 90-х - супернавороченная вещь уровня дорогущего банковского ПО. А сейчас мы боимся даже картинку скачать по HTTP, вдруг куки/токены угонят.

Ну т.е. если подумать, у софта было достаточно причин стать сложнее.

Конечно, ситуация с JS, вебом и этими вашими Электронами - это другое (c). Это просто одна немаленькая корпорация выиграла битву за программную платформу, и мы пожинаем плоды этой победы. Надеюсь WebAssembly когда-нибудь свергнет JS с должности платформы, "под которую лучше писать по-умолчанию, чтобы дотянуться до максимального числа пользователей". Мне кажется, это самое большое легаси во всём IT на данный момент.

НЛО прилетело и опубликовало эту надпись здесь

Так винда стояла и стоит на 95% пользовательских машин. Значит то, что было на ней и было нормой.

НЛО прилетело и опубликовало эту надпись здесь

Всех машин в истории не надо смотреть, надо смотреть "машин, что видели люди в тот конкретный момент". А насколько я помню в те времена мейнфреймные терминалы отошли в прошлое, сервера большинством машин быть не могут, большинство домашних и офисных машин были персоналками. Если еще во времена винды 1-3.11 можно говорить, что под досом больше народу сидело, то 95-Ме уже ой.
В итоге, для массовых пользователей остаются вин, OS/2, НетВарь, никсы, дизайнерская экзотика (саны и маки).
Среди этого зоопарка кажется винда в абсолютном приоритете.

НЛО прилетело и опубликовало эту надпись здесь

нестабильности подобной тому, что была в краткий миг доминирования 95-98 винды.

Стоило почистить кулер, и какое-то время все работало как часы.

НЛО прилетело и опубликовало эту надпись здесь

Добавлю что еще все думают об "обработке моего хорошего правильного файла" и совершенно забывают, что файл могут прислать хз какой. Как думаете сколько дыр и ошибок даже не появляется при использовании готовых библиотек? Все же готовые библиотеки раздуты еще и потому, что там стоит 100500 ifelse на проверки всяких условий корректности входящих данных, непропускания абракадабры, обработки всяких граничных условий и т.п.

Я как тестировщик только с какими "глупыми" ошибками не сталкивалась даже у очень опытных программистов. А какое разнообразие эффектов это дает!

Кому доверите написание своего софта: тому кто за год научился пользоваться готовыми библиотеками или тому, кто за два года научился писать что-то низкоуровневое и быстрое? Даже не зависимо от сроков и цены разработки. Главный критерий: программа стабильно корректно работает на среднепользовательском железе.

НЛО прилетело и опубликовало эту надпись здесь

Вам кажется. Чем больше всяких штук надо учесть, тем больше шансов наделать неочевидных багов. А если вы собрались писать все сами и без либ, то учитывать придётся ну ОЧЕНЬ много всего.

Ну если делать во первых свою, во вторых маленькую задачку - то ОЧЕНЬ много и не надо. Правда при попытке масштабировать или расширить сразу все это вылезает самым неожиданным образом и оказывается, что не все библиотеки были написаны дураками.

Я за технологичную избыточность, где при всем желании трудно наделать критических ошибок. Какой бы области это не касалось.

Я боюсь, в итоге победит не webassembly, а мобилки. Уже сейчас у целой кучи бизнесов нет своего сайта или есть только простейший лендос, но зато в каждом сторе по полнофункциональному мобильному приложению.

Понятно, почему так произошло - веб очень плох и сильно запоздал и со стандартизацией, и с отображением на устройствах, но к чему это приведет, страшно даже гадать. Вместо единого протокола и единой среды, где можно качать/смотреть/делать что угодно, вам придется приседать и качать приложения, над которыми у вас нет никакой власти. Даже банально текст не сможете выделить и скопировать :) А ещё в разы вырастет (да уже выроста) власть владельцев сторов, потому что они на раз могут одним щелчком мышки заруинить любой бизнес просто удалив приложение из своего стора. Всё же с вебом такое было проделать куда сложнее.

Делаю исключительно мобильную веб-версию, желающих предложить мне запилить под мой небольшой проект «мобильное приложение» шлю… Пока нормально.

Кстати, тот же Альфа банк был вынужден из-за удаления мобильного приложения из-за санкций перенести всё в веб. Вроде тоже пока норм.

В общем, если не давать пользователю выбора, нормально он будет работать с мобильным сайтом.
Пользователи просто не смогут и не будут ставить по приложению для каждого веб-сайта, так что в этом плане не победит.
Да в жопу эти беспконечные мобильные приложения, 99% которых — тупо обертка вокруг вебвью.

К слову, ни одно приложение-маркет типа всяких озонов — не позволяет сделать «поиск по странице», как обычный браузер. Это просто навскидку

Изменения будут только тогда, когда большой размер и тормоза будут вызывать общественное "фи!". Но как этого добиться я не знаю. Возможно, кто-то крупный должен демонстративно это показать. Ну или просто вводить для программистов телесные наказания за неоптимизированный или кривой код. С такими огромными зарплатами можно и требовать много, и наказывать за неисполнение качественно, чтоб неповадно было.

Какими огромными зарплатами? Уже не раз обсуждалось, что в России у всех остальных профессий зарплаты ниже плинтуса, а не у программистов огромные.

Общественное фи будет, если общество будет уметь отличать качественный и быстрый софт от шлака.

Но как бы его научить?

Я раздумываю, что может стоит активнее следить за друзьями/знакомыми и чаще им демонстрировать: "Смотри, программа X, которой ты пользуешься для решения своей задачи, очень толстая и неповоротливая. Программа Y для этого же гораздо шустрее". Чтобы нарабатывался вообще навык, что можно требовать, чего ожидать. Кроме нас объяснить это некому. Что думаете?

Да достаточно просто кому-то популярному это продемонстрировать. К примеру, есть два популярных онлайн-магазина, конкурирующих между собой, у обоих сайты еле ворочаются. Но тут один вкладывается в переработку своего сайта, и его сайт начинает открываться за считанные десятые доли секунды, как обычные HTML-страницы. При примерно равных ценах покупатели подсознательно не захотят идти на тормозной сайт, а пойдут и купят там, где всё быстро. Тогда и конкурент вложится в оптимизацию, не забыв прорекламировать это, а дальше всё само пойдёт.

Мне кажется, что это должны быть не единичные спайки, а достаточно регулярные волны на протяжении длительного времени, чтобы общество, так сказать, уловило паттерн.

Рискну предположить, что в 90% случаев ответ будет "да, она тормозит, но я ж, если на Y перейду, буду с ней десять лет учиться работать и не факт что вообще научусь, а X уже вдоль и поперёк знаю".

Если Y решает поставленные задачи и способен корректно открыть уже существующие файлы от X, то перейдут очень быстро.

Но так не решает же. Нет, когда "умный компьютерщик" садится и показывает, то всё решает, конечно, а когда сами - тут кнопочка потерялась, которая в X была вот там, тут сообщение непонятное вылезло, и так далее и тому подобное и так далее. Может, конечно, у меня перекос восприятия из-за собственного опыта с "юзверями", может, это исключение, а не правило.

Идём на официальный сайт DELL, сапорт, драйвера, XPS 15 9520, Realtek Audio Driver, скачать. 428 MB (449,775,856 bytes). 400 всратых мегабайт на драйвер звуковой карты? Какого черта?

Вспомнилась IBM MQ, ~800MB

Скорее всего, в драйвере множество драйверов для разных аудиокарт. Как пример драйвер nvidia или amd. Драйвер 1, но в нем большое количество дравйверов видеокарт выпущенных в течении 5-ти лет + поддержка разных версий windows 32 и 64.

Несколько вопросов к вашему коду:

  • вирусы в файлах искать умеет?

  • конфигурировать какие типы(размеры) файлов можно какие нельзя умеет?

  • без проблем масштабируется на несколько дата-центров?

  • держит нагрузку в 100500 рпс?

  • поддерживает разграничение доступа?

  • может предоставить статистику по любым параметрам за любые сроки?

  • в случае проблем - умеет отсылать нотификации в различные мессенджеры?

  • тарификационная сетка на оплату есть?

  • ну и т.д. и т.п

Вы не представляете как около-сервисные навороты способны раздувать кодовую базу...

Я вам более того скажу, ничем подобным и критикуемый автором клиент в принципе не обладает :)

Все так и есть, уровни абстракции постоянно повышается.
~20 лет назад надо было долго изучать С или, упаси бог, ASM, набить кучу шишек и лет через 5, может быть, получится написать что-то достойное.
А сейчас нет этих 5-и лет, вот нету и все. Пока будешь писать идеальный код на чистом C, чтобы быстро работало и мало весило - школьник на питоне с 20-ю библиотеками решит поставленную задачу за пару дней. Вот и все. А то что варианту на C нужен калькулятор, а варианту школьника core i9 и 32 гига оперативы.. да кого это волнует сегодня? Бизнес, в большинстве случаев, не волнует - купить железо быстрее и дешевле, чем ждать супер-эффективный вариант на С и оплачивать его разработку. А если потом ни дай бог требования меняться начнут? А новые версии? То все, пиши пропало, конкуренция сожрет мгновенно.
Так что по сути, основная причина - сугубо экономическая, все остальное вытекает из этого.
Я не к тому что это все правильно. Меня тоже бесит, что современный софт занимает дохрена места, а электронные таблицы и текстовый редактор и в windows 3.11 не плохо работали, так то.
Но как есть. Какая то логика в текущем варианте развития тоже присутствует.

~20 лет назад надо было долго изучать С или, упаси бог, ASM, набить кучу шишек и лет через 5, может быть, получится написать что-то достойное.

~20 лет назад вам надо было изучать C#, Delphi, PHP или Java. Как и сейчас, с тем же порогом входа и с тем же сроком выхода на рынок. Ассемблер или С в нишевых решениях засели уже даже 30 лет назад :)

Ну ок, ок, с годом я немного ошибся. Но думаю суть вы уловили.

20 лет назад был 2000 год. Эпоха Delphi и PHP. Написать приложение на дельфях было проще, чем сделать формочку на электроне. Написать страничку на пэхапэ было проще, чем сейчас даже на какой-нить джанге.
Расскажите еще про экономические причины. Современный говнософт вредит не только экологии/здравому смыслу. Он и вашей любимой экономике вредит.

Почему экономика любимая? Я просто описал почему так случилось.
Спрос на разработку сильно вырос, а порог вхождения в профессию снизился.
В том числе за счет всех этих фреймворков, библиотек и прочего барахла которое тащит с собой любое приложение, а использует 1% от всего этого барахла. Но писать стало быстрее. Выигрывается время, а время - деньги, как известно.
С технической же точки зрения - это ппц, конечно.

Так здесь и выпячен парадокс, что бизнес вроде как свои деньги считает, но мнение потребителей его почему-то не волнует.
Так писать быстрее стало, или порог снизился? Потому что «все эти фреймворки, библиотеки и прочего барахло» не снижают порог вхождения, а вовсе даже наоборот безбожно задирают. Потому что в них во всех ну хоть чуть-чуть, а как-то надо разобраться.

А время то может и выигрывается, за счет кроссплатформенности, например. Но так это и не секрет, что принцип «тяп-ляп и в продакшн» всегда позволяет выиграть время в краткосрочной перспективе. И ничего плохого в этом нет, когда мы говорим о специализированных прикладных вещах — их так и нужно писать, чтобы успеть за требованиями бизнеса. Но вот библиотеки, то что повторно переиспользуется сто миллионов раз — вот это должно быть написано и оптимизированно хорошо. А не как сейчас, когда библиотеки тянут за собой библиотеки и это замкнутый круг.
Могу выразить только своё субъективное. С Delphi7 я разобрался за неделю. На Dart + Flutter + Android Studio у меня ушло сильно больше месяца. Тут, конечно, дело ещё и в том, что я не молодею, но всё же я не ощутил снижение порога входа…
НЛО прилетело и опубликовало эту надпись здесь
Ну, не совсем так. Delphi как инструмент весьма сложна и имеет много «уровней прохождения». Но архитектурно она действительно элегантнее современных фреймворков. Сейчас, например, чуть ли не индустриальным стандартом является реактивность. Это сложный механизм, который имеет один огромный недостаток: если не вы писали этот код, вы задолбаетесь разбирать, как он работает. Ну потому что нет прямой связи между тем, что происходит на форме и тем, что это вызвало. Вы видите текущее состояние, а какое действие вызвало переход в это состояние — идите, ищите. В Delphi же простая и сразу понятная событийная модель, вы сразу можете отследить всю цепочку действий, которая привела к текущему состоянию. Ещё плюс в том, что в Delphi практически нет многоуровневых зависимостей пакетов, причём это негласное правило соблюдалось всеми разработчиками пакетов. Каждый пакет является архитектурно автономной единицей, и зависит лишь от стандартной библиотеки или от соседних пакетов в том же наборе компонент, и не тянет за собой кучу другого барахла.

Не, это крайне простой механизм. Реактивность как раз таки позволяет снизить сложность, так как всё, что надо знать - это только текущее состояние, а не текущее состояние + то, как мы в него попали. А кто инициатор изменения состояния, если что, отслеживается обычный брейкпоинтом.

Это самообман :) В бизнес-логике приложений не бывает такого, что нам нужно знать только текущее состояние. Нам обычно нужно знать и то, как мы в него попали, и лучше видеть это явно, чем не видеть.

Это 25 лет практики. Если для БЛ важно "как мы сюда попали", это должно быть отражено в текущем состоянии, а не быть размазано по стеку.

В первую очередь, это ещё одна архитектурная фича, читабельность и логичность которой не заложена «by design», а перекладывается на разработчика. Это — плохо. Я тоже был когда-то молодым и задорным, и мне казалось крутым, что чёрный ящик делает свою работу, я вот тут модельку поменял, а там всё автоматически сработало. С опытом я понимаю, что реактивное программирование имеет достаточно узкие рамки применения, как правило это хорошо лишь в роли шаблонизатора для UI. В остальных случаях это просто технологичный способ сделать код нечитабельным и нелогичным.

То есть по ссылке вы не ходили, я правильно понимаю? Что именно в обычных объектах с мемоизированными методами нечитабельного и нелогичного?

Простите, но меня не нужно учить правильно программировать, и тем более, понимать, как работает реактивность, мы этим пользовались ещё задолго до того, как появился такой термин. Мои претензии не про то, что я не знаю, как правильно программировать, а про то, что реактивный фреймворк легко даёт возможность забить на все best practices и написать нечитабельный и несопровождаемый код, чем многие успешно пользуются.
UPD. Вижу, вы дописали комментарий. Объясняю, что нечитабельного и нелогичного.
Вот пример условного императивного кода (на каком-то языке):
this.Amount = getSomeAmount();
...
property Amount { set: (value) => { txtAmount.text = value; updateTotals(); } }

Вот пример реактивного кода:
state.Amount = getSomeAmount();
state.TotalAmount = calculateTotalAmount();
setState(state);
...
какой-то шаблон
<amount>{Amount}</amount>
<total>{TotalAmount}</total>


Разница в том, что в первом случае вы сделали действие и сразу видите, какие у него последствия — что оно меняет, на что влияет. Во втором случае у вас нет прямой связи между действием и его последствием. Вы установили состояние, а где-то там в шаблоне что-то произошло. Взять и просто отследить эту связь вы не можете, вам надо смотреть шаблон и искать, где же там изменённые вами атрибуты состояния используются.

Вот пример реактивного кода:

@mem Amount( next = 0 ) {
	return next
}

@mem Total() {
	return this.Amount() * this.Price()
}

@mem view() {
	return <>
		<amount>{ this.Amount() }</amount>
		<total>{ this.Total() }</total>
	</>
}

Любая IDE умеет в Find Usages, так что искать глазами нет необходимости.

А то, что вы написали - интерактивный код. По мере роста приложения он превращается в тормозное (из-за лишних апдейтов), глючное (из-за забытых апдейтов), нагромождение лапши (из-за условных апдейтов и множественных зависимостей).

Но не мне вас учить, да.

А то, что вы написали — интерактивный код.

Интерактивный код — это редактор IDE с подсказками :) Парадигму программирования с таким названием не изобрели. Ну или может быть, вы сами её придумали, т.к. вы тоже активно статьи пишете. Но по крайней мере, она не распространилась дальше ваших материалов.
А то, что я написал — это такой точно реактивный код, как и ваш, просто с другим шаблонизатором. И да, именно так, абсолютно любой код по мере роста приложения может стать таким:
тормозное (из-за лишних апдейтов), глючное (из-за забытых апдейтов), нагромождение лапши (из-за условных апдейтов и множественных зависимостей).

… но императивный код сохраняет цепочку действий, а реактивный — нет. И это значительно усложняет его сопровождение.
Ок, понял, термин «интерактивный код» сказал другой автор в какой-то другой книжке. Ну в общем, он перепутал. Это — императивный код, а не интерактивный. Императивный, потому что действие передаётся явным указанием. А интерактивный — это редактор IDE с подсказками.

Ага, эти ребята тоже всё напутали: https://en.wikipedia.org/wiki/Interactive_computation

И интерактивный код, и реактивный являются императивными, так как описывают алгоритмы, а не результат.

Эм…
interactive computation is a mathematical model for computation that involves input/output communication with the external world during computation.

А какое отношение это имеет к обсуждаемому нами вопросу, кроме того, что там слово «интерактивный» встречается? Если вы уж решили погуглить пример «интерактивного программирования», то не кидайтесь в меня первой попавшейся ссылкой, прочтите хотя бы что кидаете :)
И да, реактивный код не является императивным. Реактивный темплейт — это чистой воды декларативное программирование.

Никакого. Это имеет отношение к пробелам в вашем кругозоре, где интерактивным может быть только UI, а ничего другого "с таким названием не изобрели". С пониманием императивности/декларативности у вас тоже беда. Я бы предложил вам почитать, но вы ещё предыдущую статью не осилили. Продолжать терминологические споры мне не интересно.

Ок, можно было и раньше прекратить. Я не знаю, послушаете ли вы моего совета, но…
а) Если вы хотите как-то аргументировать своему оппоненту, не кидайте ссылки на статьи и книги. Ваш оппонент не будет тратить время, выискивая в том тексте, что вы там конкретно имели в виду. Если вы что-то конкретное хотите сказать, дайте цитату из своего источника. Если цитаты нет, а вся суть вашего посыла «учите матчасть», лучше промолчите. Никакого аргумента — это в 100500 раз лучше, чем плохо завуалированная грубость. И
б) тем более не приводите в качестве аргументов свои собственные статьи. Если ваш собеседник сомневается в вашем знании «матчасти», вес ваших статей для него, знаете ли, by default околонулевой.

Но при дебаггинге все-равно надо знать как и почему вы пришли вот в это сломанное состояние. Как иначе его починить?

  • 20 лет назад был 2002 год

  • Delphi - да, PHP - еще нет, как массовое явление статика на чистом голом HTML. PHP — это еще ~+5 на календаре, вторая половина нулевых

  • Экономике bloatware пока не вредит так, чтобы это было ощутимо в цифрах (и тезис "вредит" лучше все же доказывать, потому что аксиоматичность его под большим вопросом), потому процесс и продолжается

Уверен, что никто из кодеров не представляет, почему это происходит, а
код в его основе — это просто куча раздутого скопипащенного навоза.

Скорее всего кто-то представляет.

Проблема не в том, что код хреновый. Проблема в том, что на фиксы таких мелочей не выделяется время. Нужно деливерить фичи. Закончили одну фичу, тут же начинается следующая, потому что она была распланирована еще на позапрошлый месяц. Все некритичные проблемы, промахи и т.д. отправляется в категорию тех. долга. Если проблема становится критичной она фиксится. Иначе она существует годами до смерти фичи.

Это типичная история любой крупной компании, любого долгоиграющего проекта.

Это происходит не только потому, что кодеры не пишут низкоуровневого эффективного кода для достижения своей цели: они просто никогда не видели низкоуровневого эффективного, хорошо написанного кода.

Проблема более комплексная. ИМХО она вообще в другой плоскости. Я бы сформулировал так:

Подавляющее большинство программистов пишет тупой процедурный код. Говорят ООП, а на самом деле гоняют тупые ДТО между функциями. В таком коде сложно выделить абстракции, определить границы. Все связано со всем.

При увеличении требований и сложности продукта это приводит к экспоненциальному росту количества кода. Получается порочный круг. Код сложный для понимания - он обрастает костылями. Костыльный код становится сложнее понимать.

В такой системе низкоуровневый код невозможно поддерживать. Потому что он не отделен строгой границей. Его начинают копировать, подгонять под требования. И получаем проблему о которой говорил автор.

Проблема в том, что на фиксы таких мелочей не выделяется время.

Слушайте, ну я не слишком ошибусь, если скажу, что в 95% проектов никто там за спиной у разрабов с таймером не стоит. Видишь что-то корявое, возьми и исправь по ходу дела, никто ругать не будет, а коллеги похвалят. А менеджер потраченное тобой время не моргнув глазом в счёт клиенту впишет, а клиент оплатит. Просто всем пофигу.

Я говорю больше о продуктовых компаниях. Тут свой набор проблем. Можно статью писать. Навскидку:

  • Фичи планируются на несколько месяцев вперед. Первая фича ломает весь график, и остальные уже делают в режиме "на вчера". И так до бесконечности. Планирование то делают не инженеры. Их только ставят перед фактом дедлайнов.

  • Даже небольшое изменение кода требует больших ресурсов на анализ и тестирование. Потому что код пишется с учетом существующих проблем. И фикс проблем создает новые проблемы. Гейтинг не панацея.

  • Промо культура требует импакта. Вот прям так. Получается, что выгодно сделать фичу побыстрее, набрать тех. долга, а другие разберутся. Плюс важно уметь продавать свои заслуги. Можно делать полнейшую фигню и получать повышения. А можно делать важные вещи, но не презентуя их правильно, получать отказы. Очень выгодно заделиверить фичу, набрать тех. долга, а остальные потом разберутся. И каждый разработчик думает "а чем я хуже", и круг продолжается.

Я тоже раньше читал статьи про ужасную культуру разработки в Гугле и прочих, и думал, что это все фигня, и зависит от команды. Попав в Калифорнийскую компанию, я понял, что, к сожалению, все реально так плохо.

Ага, Promo Driven Development. Все, как вы описали.

Чем напомнило? БСП не нравится? Про Inversion of Control не слышали?

Это проблема прикладных разработчиков на местах, а не разработчиков БСП и типовых конфигураций. И проблема эта, по большей части, заключается в том, что большинство прикладных разработчиков на платформе 1С ничего, кроме Радченко и Хрусталёвой, не читали.

В мире 1С всё нормально. Для контраста можете пойти поработать в какого-нибудь интегратора на его внутренней самописной платформе на языках общего назначения с возможностями, по сути, такими же, как у платформы 1С, но без документации и с гораздо более низкой скоростью доставки новых фич. Отчёты на каком-нибудь JasperReports после СКД трудно воспринимать как что-то удобное в разработке.

Вот была хорошая статья на тему: https://habr.com/ru/post/480658/

Очень много времени приходится тратить на изучение зависимостей, которые ты хочешь использовать в проекте. Сравнение доступных вариантов, изучение их истории, перспектив, в идеале состояние кода.

Не понятно наличие картинок из Elite. Игра с процедурной генерацией вряд ли предполагает процедурную генерацию требуемого кода по запросу и некоторой экономии таким образом. Тут скорее бы подошёл какой нибудь пример из демосцены, где с ограничением по памяти умещают большой функционал и могут это просто показать.

Когда-то были (а может и сейчас есть) соревнования по программированию в размере 1024 байта. Чего только туда люди не всовывали. Мне запомнился почтовый клиент и уровень от Castle Wolfenstein. Забыл сказать - исполняемый файл - COM, операционка - DOS.

Несть числа раз видел, как много раз упомянутый выше "эффективный и талантливый" код приходилось полностью нах выкидывать и переписывать с нуля, потому что кроме его эффективного и талантливого автора (к тому времени уже свалившего в закат) в этом коде никто нихера не мог понять. Наверное все были просто недостаточно эффективны и талантливы для этого.

Ну, если код работал ка надо, а вы не понимаете "как" значит ваш уровень ниже уровня автора кода. А люди обычно не любят (мягко выражаясь) тех, кто талантливей их.

А равняться по тупейшим - путь в никуда.

Ваш комментарий поднимает старый вопрос: программирование - это искусство или ремесло? Если ремесло и автомобильный конвейер - ближайший аналог, то лучше выстраивать процесс, ориентируясь на добротного середнячка-исполнителя, именно он будет фиксить баги и точить новые фичи. И именно он будет читать код предыдущих программистов. У вас просто не будет столько гениев, чтобы заполнить конвейер (ну, если вы не Google, конечно).

Да нет тут никакого "или". Программирование может быть и искусством, и ремеслом и ими обоими одновременно. Все дело в контексте, и без него рассуждать на эту тему глупо. Программирование - оно про масштабирование процессов за счет автоматизации, и продать миллион раз код, написанный одним гением, может быть проще, чем продать один раз код, написанный миллионом бездарностей за конвеером. В определенном контексте, опять же.

НЛО прилетело и опубликовало эту надпись здесь

Вовсе не значит.
Понятный код писать сложнее, требуется выше квалификация.
Понятным код делают несколько вещей:

  • Правильное разбиение на абстракции. Они должны быть максимально похожи на предметную область.

  • Сокрытие сложности. Инкапсуляция. Чтобы каждый кусок кода был не слишком сложным, и было понятно что происходит с теми обьектами что в нем используются.

  • Понятные названия. Сделать понятное название всегда более трудоемко, чем назвать x и y.

Плохо написанный код, где смешаны уровни абстракции, где недостаточная инкапсуляция, как попало названные переменные - может отлично работать. Но если там баг то найти его сложно, потому что понять что там вообще делается сложно.

Если перенаследовать библиотечные классы и перегружать некоторые методы, то сложность увеличится на порядок, потому что тут уже минимум 2 разных человека поработали, т.е. Ещё и автор кода в идеале должен быть один, а не как в линуксе каком-нибудь, суть которого шизофрения из 1000 личностей.

Тут, вот ещё что надо отметить. В такой ситуации ( непонятный, но работающий код) есть два способа поведения с заказчиком:

Первый - честно сказать что создатель кода был очень талантлив, а вы не настолько. Но постараетесь разобраться и помочь.

Второй - сказать что код писал конченный придурок, всё было на грани катастрофы, но вот пришли вы и теперь можно не волноваться - мир спасён.

Лично я думаю, что дальше всё будет только хуже <...> Просто для того, чтобы сложить два числа, понадобится 32 DLL, 16 служб Windows и миллиард строк кода

Проблема (хотя есть те, кто не считает это проблемой) может быть рассмотрена шире. Безудержное потребление - классика современного общества.

Есть большое количество нытиков, про то, что современные программисты уже не те. Однако, эти нытики, почему-то, не заваливают рынок своими сверхэффективными решениями, созданными за кратчайшие сроки... Напишите современную "элитку" в несколько килобайт, от которой глаз не будет дергаться... да вам памятник поставят! Но нет, тишина... К чему бы это? В целом, я согласен, проблема раздутости всего и вся, в современной разработке, имеется. Но причину стоит поискать в чем то еще, кроме вот этого "а я то, в советские времена, уууууууу!" Современное ПО, как и раньше, создается в условиях ограничений. Просто ограничения эти, давно вышли за пределы коротенького списка из процессора и памяти.

640 КБ должно хватить всем

Как правильно заметили выше. Статья автора - сплошное нытье, ничем не отличающееся от нытья других людей до. Мне больше жаль переводчика, что он свое время потратил.

А если говорить ближе к сути, то количество зависимостей растет, а тенденции их отсекать, как садовник ухаживая за розами, - нет. Отсюда все эти многотонные программы, которые под капотом используют "проверенный годами" софт, который используюет старые библиотеки, которые... И так далее, с щепоткой утрирования

Вопрос что делать?
У нас контора сидит на аутсорсе. Приходит задача, надо сделать такую «пиндюрь», напишите соклько времени надо и делайете. Ок пишем время начинаем делать. Тут же прилетает со стороны заказчика, а чегойто так долго, а может вы возьмете вот эту либу? Нет не возьмем нам быстрей самим написать, чем разбираться с чужой. Ой да вы всё врете нам свой прогер сказал там всё просто(ага тока сам делать не стал). Давайте либу. Блин мы пока переписывались своё почти сделали. Вот и зря переходите на либу у неё 3.5 разработчика, и целое сообщество(9 человек). Ок переходим убедили. Тратится ещё неделя, хотя работы оставалось на день. Получам «пиндюрину» с левой либой, заказчик рад, ура вот как либа помогла, как наш «имярек» хорошо подсказал, а то бы вы ещё день писали код, а тут за неделю всё готово. Только смотрите тут вот хрен, тень не отбрасывает, добавьте хренотень. А выбраная вашим «имяреком» либа хренотень не поддерживает. Начинаем патчить левую либу под хренотень… А вы знаете тут вот ещё есть либа может она хренотень поддерживает, или её проще пропатчить, наш «имярек» говорит вроде проще(сам правда он этого не делает). По началу дико бесило. Но заказчик платит за хотелски, ну и пусть будет доволен. То что проект вы итоге из кучи непонятных либ, уже все давно пофиг. Идёт-едет, заказчик доволен, деньги платют. Я бы и рад по другому, но не дают. Стыдно стынд, но платют хорошо, а стыд я побороть смогу.

Вообще, насколько я знаю, эта проблема давным-давно известна. И имя ей - ООП. ООП - одна из форм добра, которое стало злом. Теперь его суют в каждую дырку без всякой надобности, просто потому, что по неизвестной причине у многих в голове сидит большой таракан с именем "ООП". И эти тараканы множатся с геометрической прогрессией. А любая самая простая процедура, являющаяся методом класса тащит за собой всю иерархию класса. И не понятно, почему компилятор не вырезает из кода всю неиспользуемую часть мусорного ДНК этого класса, оставляя только исполняемый код.

Например, в Дельфи пытались избавиться от дурной наследственности. ООП, создав KOL.

я вас уверяю, что 500 Мб современного текстового мессенджера - это не от иерархии наследования

Мне в этом смысле ближе множественное наследование только от абстрактных классов, каждый из которых сам-по-себе (ни родителей, ни абстрактных потомков).

У абстрактного класса могут быть и абстрактные родители и абстрактные потомки.

Могут быть, но это уже избыточное наследование, а следовательно зло.

А есть ли "раздувание кода"? Конкретные проблемы, описанные в статье, касаются Windows, которой приходится тащить за собой кучу костылей. Другие системы (macOS/Linux) просто выбросили всё наследие ценой совместимости со старым ПО.

Если же смотреть реально, то мы ушли от якобы "оптимизированных" утилит, которые работали только на одной ОС с однобайтовой кодировкой, да ещё и с ограничением по объёму данных — тот же Outlook когда-то имел ограничение в 2ГБ для PST-файлов, потом оно выросло до 20ГБ, но кто-то всё равно упирался в это ограничение.

Так что объёмы данных растут. Увеличивается и размер самих файлов, так как они хранят больше информации, чтобы отображать содержимое качественно на современных средствах вывода. И не важно что это — текст, изображения, видео, аудио, etc.

Современные ресурсы позволяют получать приложения быстрее, а не ждать их годами. Тот core-функционал, что годами прорабатывали в старых приложениях, теперь обязателен в MVP, на который есть значительно меньше времени. Теперь не надо десятилетиями ждать версии для Linux или macOS, тот же FAR Manager сейчас всё ещё портируют под Linux, вот только кому он теперь нужен? Надо было вместе с версией для Windows выпускать.

А качество кода растёт. Я сейчас смотрю на внутренности старого продукта (который меньше ресурсов требует) и ужасаюсь. Новый требует на порядок больше ресурсов, но его возможности на голову выше, чем у старого, да и кодовая база там теперь приведена в порядок. За счёт этого продукт удалось за два года перевести на Linux (требование настоящего времени), а со старым такое не получится.

Оптимизация всегда имеет свою цену в виде зависимости от архитектуры процессора, версии ОС, библиотек, etc. Но самое главное — ограничения в расширениии функционала. Можете посмотреть на nginx и попытки реализации QUIC в нём. Продукт отличный, но рынок требует новых возможностей, в том числе для оптимизации объёмов трафика.

Нет же. Основные проблемы не в обратной совместимости, а в том, что стали тащить веб-технологии на десктоп. Просто надо использовать технологии по назначению, иначе продукт в итоге будет одинаково негодным, что на Windows, что на Linux…

Как раз в ней и проблема. Делать 100500 верий под разные API или его ревизии никто не будет. Особенно на общем тренде отказа от десктопов. Тот же SDK Apple позволяет быстро сделать версию для нескольких платформ, а теперь уже даже запустить нативную версию с iOS на macOS, поэтому на ней реже встречаются приложения на базе Electron. В основном страдают от этого подхода Windows и Linux. Первый, потому что у пользователей зоопарк версий ОС на устройствах, второй — потому что нет единого графического API. А так, в целом, софт очень даже оптимизируется. Firefox перестал адски жрать память после внедрения компонентов на Rust, да и Chrome'у тоже порезали аппетиты по ресурсам. Чудес, естественно, не будет, чтобы это работало на 2-4ГБ ОЗУ, да и не нужно, когда она достаточно дешёвая. Про 32-бита вообще пора бы забыть окончательно.

Ну и ещё один фактор — финансовый. Тот же Telegram старается, чтобы были нативные приложения, под какие-то платформы даже есть выбор из двух. Но что-то никто не побежал массово оплачивать премиум, чтобы отблагодарить разработчиков. Все хотят всё бесплатно, да ещё и чтобы под их хлам десятилетней давности что-то оптимизировали. Может пора начать платить за софт? Или обновить железо хотя бы?

Так что проблема "раздутости ПО" раздута. Да, есть такие приложения, но прям массовой проблемы нет. Софт сейчас вполне себе оптимизирован, особенно платный.

А почему о 32 битах нужно обязательно забыть? Для огромного количества задач их более чем достаточно.

То что достаточно, не означает, что надо упарываться этим. Поддержка 32-bit-only окружения просто добавит лишней работы. Даст это какие-то плюсы в экономии ресурсов на устройстве? Сомнительно. Да, знаю, что некоторые специально ставили 32-битные ОС на устройства, которые в целом и 64-бит поддерживают, объясняя это фразой "так меньше будет ресурсов жрать". Какой-то технической базы под эти ритуалы предоставить не смогли. И да, мы сейчас не про совсем микро-микроконтроллеры говорим для тех же SIM-карт и прочего. Там уже давно всё написано, да и у ребят свой путь. В остальных системах (в том числе встраиваемых) не вижу смысла в 32-бит, просто очередной повод придумать себе проблему, которую потом будут героически решать.

Если говорить о более приземлённых вещах, тех же Atom'ах, которые тут вспоминали, то им давно пора на помойку. Неудачная попытка Intel вкатиться в мобильные устройства. Сейчас есть ARM64-процессоры, которые лучше во всём. Если же надо что-то на x86, то у Intel и AMD есть целые линейки процессоров с низким потреблением. А стюардессу пора закопать.

Если поставить 32-битный браузер, то он в одно лицо больше 2 GB не скушает. Он конечно лиц запустит по одному на вкладку, но тем не менее.

У меня был опыт с 32-битным браузером в 64-битной системе. В результате он регулярно падал. Да, открыто 100500 вкладок, но это не особо помогло ему экономить память системы. В 32-битной системе мало что изменится, разве что swap будет насиловаться чаще.

Если уж так надо, чтобы приложение не потребляло больше N ГБ, то его надо проектировать исходя из этого. В том числе задавать жёсткие ограничения на объём входных данных. Но никто этого не будет делать, так как память дешёвая, а ухудшать пользовательский опыт — очень плохо.

Ну, в линуксах — да, наверное, ведь не все дистрибутивы тащат с собой 32-битные библиотеки. А так — ничего закапывать не надо, 32-битный процесс технически жрёт меньше памяти, чем 64-битный (особенно заметно на браузерах), в этом и преимущество.

p.s. у меня 32-битный браузер не падает. Наверное, потому, что я не пытаюсь использовать больше памяти, чем ему может быть доступно :)

Нет. Это так не работает. Память не жрёт тот софт, что спроектирован в определённые лимиты. И он одинаково не будет жрать ресурсы как в 32-битном виде, так и в 64-битном, разве что 64-битные регистры могут помочь ему в улучшении быстродействия (больше данных обрабатываем — быстрее завершаем работу и высвобождаем память). В реальности 32-битный браузер просто будет чаще падать, если будет открыто много вкладок, а техподдержка будет отвечать, что "ставьте 64-битную версию". Скорее всего 32-битная версия проходит только автоматические тесты и редко используется пользователями, значит её проблемы будут реже решать. Так что никакого преимущества нет.

Популярные дистрибутивы Linux всё ещё тащят за собой 32-битные библиотеки, в итоге только путаница происходит из-за всего этого. За столько лет можно было всё пересобрать. Так что та же Apple всё правильно сделала, выкинув 32-бита. На примере Linux видно, к чему приводит обратное.

Память дешёвая. 16 ГБ — это современный минимум. Пора перестать мучить устройства с <4 ГБ. Их уже ничего не спасёт.

В плане выделения памяти под различные структуры, если их много, разница достаточно заметна. Конечно, если нужно использовать памяти больше, чем лимит для 32 бит, альтернативы 64-битным приложениям нет.

Apple же может себе позволить не то, что 32 бита выкинуть, а и на совсем другую архитектуру перейти, обратная совместимость это не их сильная сторона.

Память, может, и дешёвая, но иногда её просто некуда добавлять, т.е. альтернатива — купить новое устройство.

Ещё раз. От битности не зависит объём памяти выделяемой под структуры данных. Только от разработчика. Он может установить некий лимит их размера, и тогда они в обоих случаях будут занимать один объём памяти, но у нас будут жёсткие ограничения в ПО по каким-то возможностям. Либо он не делает так, тогда объём открываемых данных зависит от имеющихся ресурсов. Тут уже на нём лежит обработка ситуаций, когда их не будет хватать, и что ПО будет делать в таких случаях.

Наоборот. Как мы видим у Apple всё хорошо с обратной совместимостью, они два раза делали транслятор/эмулятор кода при переезде на другую архитектуру. И что-то я не слышу сожалений об "утраченном ПО эпохи PowerPC". Как раз отказ от 32-битных приложений дал пинка разработчикам, чтобы они обновили приложения. А Microsoft так и не достиг успехов в плане своей ARM64-версии Windows. Что более иронично, она лучше всего работает через Parallels на компьютерах Mac с Apple Silicon.

И да, покупка нового устройства — это самый логичный шаг. И суть даже не в том, что память не расширить. Сам процессор уже не справляется. В том числе из-за ограничений шин данных до других компонентов. Сложно требовать от какого-нибудь Core 2 Duo качественного воспроизведения 1080p, ибо очень он стар, да и из архитектур и чипсетов там тоже тот ещё бардак. Срок жизни устройства — 5 лет, в крайних случаях 7, этого вполне достаточно. Технологии всё же развиваются.

От битности не зависит объём памяти выделяемой под структуры данных.

То есть размер указателей, по-вашему, одинаков и в 32-битной, и в 64-битной среде?

НЛО прилетело и опубликовало эту надпись здесь

В двусвязном списке, например, их два аж три на каждый элемент данных: на сам элемент, на предыдущий и на следующий в цепочке.

НЛО прилетело и опубликовало эту надпись здесь

Это не единственная структура данных, в которой длина указателя может иметь решающее значение.
Define типичный рабочий набор.

НЛО прилетело и опубликовало эту надпись здесь

Это очень сильно зависит от языка и использованных алгоритмов. Для программы на Си и Ржави это должно быть большой редкостью, для Пайтона или Явы — скорее норма.

А ещё не только указатели, но и выравнивание структур до 8 байт, выравнивание стека (любой аргумент в стеке занимает минимум 8 байт).


Я помню, что в старые времена, когда у подавляющего большинства людей было не более 2 гигабайт памяти и когда 64-битные процессоры только входили в массовое обращение, утверждалось, что 64-битный код потребляет где-то на 25% больше памяти, чем 32-битный. И потому люди даже на 64-битных архитектурах ставили 32-битные системы.


Понятное дело, что 25% — грубая оценка. Те же графические ресурсы занимают одинаково. Но другой оценки у меня нет.

В те времена еще и в разных реализациях x64 работало с разной скоростью в попугаях, разница могла достигать трети на кодировании видео между красными и синими.

Там ещё добавлялось то, что практически весь софт был 32-битным и поэтому особого смысла ставить 64-бита и не было… Это уже потом подтянулись, со временем.

Проблема курицы и яйца. Нет смысла писать 64-битный софт, если им никто не пользуется, потому что все сидят на 32-битных система. Нет смысла ставить 64-битную систему, потому что нет софта.


Только когда возникла реальная необходимость в 64-битных системах (≥4 гигов памяти), тогда и пошли подвижки.

А если серьезно, есть где-нибудь статистика какой процент памяти типичного приложения занимают указатели?

Я не слишком ошибусь, если скажу, что это подавляющее большинство переменных в любом приложении. Указатель, это ведь не только штука, где вы вручную можете адресом шаманить. Любой управляемый объект — это тоже указатель. Да собственно, битность шины увеличивает размер практически всех данных, кроме тех, которые явно хранятся в сжатом виде. Те же целочисленные переменные, которые вроде как 32-битные, в 64-битных системах занимают 64 бита, ибо компилятор выравнивает их по границе машинного слова, потому что так к ним намного быстрее доступ.
НЛО прилетело и опубликовало эту надпись здесь
никогда не поверю в то, что до 50% драгоценного кеша могут выкинуть на какое-то выравнивание.

Кеш затягивает в себя данные страницами. Механизм кеширования понятия не имеет, что там на странице находится (я имею в виду семантику содержимого), он вытаскивает всё как есть. И да, если это страница с данными, оно вытянет их со всем этим выравниванием.
НЛО прилетело и опубликовало эту надпись здесь
Не страницами, а строками

Да, строками, каюсь.
но по вашей логике получается, что если я сделаю 10 интов по 32 бита, то у меня это 80 байт в памяти займёт

Да, именно так. Но если вы сделаете 10 интов по 32 бита в упакованной структуре, процессору для извлечения инта из младшего байта нужно будет дополнительно XOR делать, а для извлечения инта из старшего — битовый сдвиг. И в отличии от количества доступов к памяти, которое целиком и полностью зависит от того, что вы там в своём коде написали, эти преобразования нужно будет делать всегда.
НЛО прилетело и опубликовало эту надпись здесь
Это на каком процессоре так?

Да на любом. У вас нет физической возможности просто так взять и снять с шины 32 битное значение и положить в регистр, если шина 64-битная. У вас есть готовая инструкция в наборе, которая выполняет все эти операции за вас, но тем не менее, выполняет. И доступ к полям упакованных структур данных всегда медленнее, чем к полям выровненных по границе шины.
НЛО прилетело и опубликовало эту надпись здесь

Вы как-то слишком упрощаете современные процессоры. О какой именно шине идёт речь?


И разработчики процессоров не дураки: доступ к 32-битным данным в них такой же эффективный, как и к 64-битным.


Медленный же доступ к 8- и 16-битным данным, но это связано с сохранением верхней части регистра.

У вас есть готовая инструкция в наборе, которая выполняет все эти операции за вас, но тем не менее, выполняет

Обычно данные, все-таки, извлекаются мультиплексором. И ему совершенно все равно какой байт из восьми извлечь, это O(1).

Мне кажется, вы не очень знакомы с архитектурой современных процессоров. Да, есть архитектуры, где данные можно читать только 64-битными блокам. Но это не наш случай: и в x86-64, и aarch64 процессоры умеют эффективно работать и с 32-битными, и с 64-битными данными. Чуть менее эффективно — с 8- и 16-битными (поэтому лучше не использовать типы с размером меньше int без веских аргументов).


А вот что эти процессоры умеют не очень хорошо, так это в невыровненный доступ. Некоторые процессоры обрабатывают такие данные медленнее, некоторые же поднимают лапки и бросают исключение. И чтобы такого не было, данные надо выравнивать: значения типа int32 должны иметь адрес, кратный 4 (и на 32-битных, и на 64-битных архитектурах) а значения типа int64 — адрес, кратный 8.


То есть массив из 10 int32 будет занимать 40 байт, но никак не 80. А вот массив из 10 экземпляров структуры, состоящей из int32 и int64, будет занимать 160 байт.

И это прям существенная разница в полтора или два раза, чтобы тратить на это время и силы? Почти всё перешло на 64 бита, но находятся люди, которые выполняют некие шаманские ритуалы, потому что им кажется, что "потребляет меньше". А тебе потом приходится поддерживать 32-битные syscall'ы, потому что это всё выбросить не могут из системы.

Давно пора выбросить сборку 32-битных версий приложений. Надо — собирай сам.

1) Зависит, особенно заметно, если структур много (можно проверить через about:memory в чём-то firefox-подобном).

2) Если «обратная совместимость» заключается в том, чтобы на время добавить в ОС эмулятор предыдущей архитектуры и «дать толчок» на переписывание софта для новой… ну это такое. Самое стабильное в плане обратной совместимости сейчас, как ни странно — Windows…

3) В плане качественного воспроизведения 1080p это, скорее, к GPU (которые быстро развиваются и поэтому и устаревают быстрее). Причем, как я помню, это работало ещё на GTS 450, если это H264. Технологии, может, и развиваются, но требовать для софта выделения кучи ресурсов просто потому, что разработчик не смог в нативное приложение и написал всё под браузер… Нет, пусть лучше такие организации обанкротятся и их место займёт кто-то более вменяемый.

1) Но явно не стоит свеч в плане экономической выгоды. Я тоже занимался подобной фигнёй, но понял, что даже "гипотетические" сотни сохранённых мегабайт не стоят тех трат времени, что на это тратятся. Дешевле докупить памяти. Или вообще сменить устройство. Из всех компаний разве что Apple занимется оптимизацией ПО, лично ощутил на своём iPhone SE. Но в российском ИТ-сообществе принято считать технику оверпрайсом и не покупать её. Зато какой-нибудь ванплас на 100500 ГБ ОЗУ — это нормальное дело. Так что надо определиться, в какую сторону вы воюете. Хотите экономии ресурсов, оптимизации и долгий срок поддержки — придётся заплатить за это. Бесплатно вы не получите ничего.

2) Нет. Windows в плане обратной совместимости — это рандом на рандоме рандомом погоняет. На 10-ке и 11-ой сейчас не запустится приличная часть старого софта, то что ваши 3,5 приложения запустились — просто ошибка выжившего. Лучше тут себя 7-ка чувствует, но есть приложения, которые и на ней не запускаются, в таком случае приходится откатываться на XP или ещё ниже (тут как повезёт). Походите по тому же GoG и почитайте жалобы, что "на 10-ке не работает, или работает криво". То же самое с какими-нибудь визуальными новеллами (особенно времён нулевых). Корпоративный софт вообще отдельная тема, мне хватило плясок с бубном вокруг неподписанного ActiveX.

3) GPU умеет декодировать только определённые профили кодеков. Шаг влево, шаг вправо — и тут он говорит "кря". Про кодирование вообще можно даже не говорить. Именно поэтому нормальные стримеры кодируют на процессоре, иначе на "стандартных" профилях будет каша из пикселей. Ну и да, чтобы поддерживались современные кодеки (в том числе тот же AV1) вам просто придётся купить новое устройство, что опять же перечёркивает некрофилию с устаревшими железками.

И ещё раз. Я прям не вижу засилья ПО на Electron. Только Skype помню и всё. Нативные приложения будут там, где за них платят. в том числе по подписке. Бесплатно вам никто делать не будет.

долгий срок поддержки

Это точно не про эпл. Обратную совместимость они очень много раз ломали в своих продуктах.

На 10-ке и 11-ой сейчас не запустится приличная часть старого софта, то что ваши 3,5 приложения запустились

У меня десятка и коллекция софта с более чем двумя тысячами экземпляров, каждый из который запускался хотя бы раз. Значительная часть коллекции - заброшка и старые версии программ, вплоть до 30-летней давности. Разброс по категориям от десятков браузеров, плееров и офисного софта до всяких инструментов разработчика (например полусотни бейсиков), кучи метрономов, сотен эмуляторов, экранных линеек, и самой экзотичной экзотики. Не считая 16-битного софта, я еще не видел ни единой программы которая не работала бы на десятке.

Я прям не вижу засилья ПО на Electron

Просто ошибка выжившего. Существенная часть нового ПО выпускается на электроне или переводится на него. Взять например редакторы Markdown - 9 из 10 будут на электроне. Самый популярный сегодня редактор кода, VSCode - на электроне. Discord - на электроне. Slack, WhatsApp, Wire, Signal - все на электроне. Новые гит-клиенты GitHub Desktop и GitKraken на электроне. Microsoft Teams на электроне. И огромное множество других программ, в которых собственного кода в лучшем случае на мегабайт, которые почему-то суют в 200-метрового монстра.

Память дешёвая. 16 ГБ — это современный минимум.

Довольно спорное утверждение.

И всё же память реально дешёвая (особенно если не бегать за оверклокерскими вариантами) относительно остальных компонентов.

16 ГБ — это реально современный минимум, чтобы запустить пару небольших виртуалок, рабочие приложения и чтобы ещё браузеру осталось. Но кто-то не согласится и скажет, что вообще 32 ГБ надо. Для определённых видов деятельности вполне возможно.

Я помню старую рекламу Windows 7 от российского офиса (скорее всего этот пост тоже ссылался на неё https://habr.com/ru/post/68418/), где представители MS рассказывали, что 7-ке "гига достаточно", но это всё ложь, ложь и ещё раз ложь. 2 ГБ минимум, чтобы что-то вообще делать, а так 4 ГБ — это обязательный минимум, 8 ГБ для ресурсоёмких приложений. С того времени больше 10 лет прошло, так что 16 ГБ — это оправданный минимальный объём памяти для рабочих задач.

И к мобильным, и к десктопным версиям всё равно нужен свой нативный интерфейс, иначе будет одинаково плохо и на мобилках и на десктопах. Браузер здесь не подходит.

К счастью, пока проще забыть о веб-софте на десктопе, чем страдать от его тормознутости, кривого интерфейса и жора памяти (ну лично мне… может, где-то есть и безальтернативный такой софт, но пока не встречался).

Для мобильных уже есть PWA, но популярностью не пользуется, в том числе с подачи Apple и Google. Мобильникам меньше всего надо беспокоиться об отсутствии нативных приложений. Вот у десктопов всё плохо. Если macOS ещё может выиграть за счёт единого SDK и получать нативные приложения, то на ту же Windows забили. Linux тут в двойственном положении — с одной стороны есть независимые разработчики, которые пытаются писать свою реализацию, с другой владельцы сервисов в этой ОС ещё меньше заинтересованы. В целом, я пока только Skype видел, как пример очень плохого Electron приложения.

PWA это просто ярлык на рабочий стол для сайта, ну разница в том, что не электрон, а системный браузер будет отображать сайт. Нативное приложение это не заменит, если, конечно, не имелся в виду просто доступ к сайту через webview.

Тут уже зависит от разработчиков сайта. Некоторые из них (привет, Твиттер) умудряются тормозить даже на десктопе с его-то мощностями, что уж говорить о мобильных устройствах.

FAR Manager как и Notepad++ - софт написанный с использованием WinAPI. Поэтому его портирование куда либо настолько затруднено что проще написать новое приложение.

Проект far2l передаёт привет.

Да. Он даже называется иначе.

В случае FAR там и альтернативы нет, учитывая завязанность на сравнительно низкоуровневую работу с файловой системой, для портирования на другую ОС необходимо дописывать специфичный для неё код. Но в far2l решили постараться, да.

Проще вообще не портировать, так как там вся соль в плагинах, которые придётся переписывать с нуля (чем в итоге far2l и занимается). Легче потратить силы на развитие того же Midnight Commander, если уж так нужен двухпанельный файловый менеджер а-ля Norton Commander.

Проще — не значит лучше. Хочется пользоваться одним и тем же инструментом на разных системах, а не двумя разными.

Ну да, решил сейчас курсы пройти к примеру по тому же питону (да и все остальное) так там все "упрощенно" под стандартизацию. Возьмите для простоты понимания и создайте понятно названную переменную и запихните в нее значение и только тогда используйте одноразовую переменную, мол для более легкого понимания чтения вашего когда))) Оно конечно легче, но как представлю если бы на ассемблере все значения в регистры пихали бы да и переменные создавали чтобы один раз использовать))). И так почти во всем. Стараются сделать все настолько простым и универсальным, что оно просто увеличивает код и длительность его выполнения. Помню раньше такты считали и килобайты - сейчас такой фигней уже не страдают. Проще написать что-то новое за что заплатят, чем разобраться во всей этой здоровой мешанине. где никто ничего уже не понимает - ну да понятные переменные и названия функций - но вот логика работы же в них не описана. А описывать все значения, сравнения и прочее комментариями так никакого времени не хватит на код. А так найдут дырку в старом модуле - кое как исправят, а вот все остальное что было завязано на "правильной" работе модуля начинает иногда косячить))) Короче стало быстро писать но долго понимать доскональную работу. Впихнул всего и побольше - там функцию из того, там другую из этого и да получается как и написано в статье.

Раздувание ПО трогает только тех кто привык контролировать внутреннюю работу своих железок, знать что сколько ресурсов занимает, и скрупулезно следить за файлами и процессами.

Типичный современный пользователь об этом может вообще не знать, и когда сталкивается с отсутствием свободного места, проблема решается просто и относительно дешево - стереть лишнее или прикупить диск побольше. И то что новая железка (в купе с новой версией ПО) делает примерно тоже самое и примерно с той-же скоростью, для него не так важно. Зато это новая железка (в рекламе которой производитель показал лучшие цифры чем в прошлой) и новая программа (покрасивее, больше анимации и т. д.).

А с точки зрения бизнеса, все вообще хорошо, продажи растут, и надо продолжать в том же духе.

Типичный современный пользователь об этом может вообще не знать, и когда сталкивается с отсутствием свободного места, проблема решается просто и относительно дешево - стереть лишнее или прикупить диск побольше.

особенно пользователи смартфонов любят стирать лишнее и диски докупать. Особенно те, кто постарше. Так что не соглашусь. Типичный пользователь может не знать, что его трогает эта проблема, но это не значит, что она его не трогает на самом деле.

Собственно это последствия мира команд и менеджмента.

Одиночка имеет больше ответственности, более целеустремлён, имеет контроль над кодом. В командах ответственность размазывается, контроль удержать сложно, как итог в код начинает проникать мусор и ошибки, и ресурсов этого избежать часто нет. Особенно плохо, если в команде есть слабые коллеги: за них их часть работы никто не сделает, ресурсов на это не дают, а их код ужасен, но так навсегда в проекте и останется, будет кое-как работать, порождать сотни ошибок.

С учётом того что современная разработка построена на максимальной экономии и руководит процессом менеджер, который в этом ничего не понимает, приходим к фичегонке: оказывается для проекта важнее наклепать тысячу ненужных фич, чем остановиться и привести в порядок хотя бы одну из уже сделанных. Та же ситуация с техдолгом и качеством кода: на это никогда нет времени, вечное завтра.

Вот и получается, что на выходе у одиночки компактный рабочий код - он его сам писал, один, сам за все в ответе, сам все проверил, и результат прямо соответствует ему опыту: у новичков он плохой, у опытных хороший.

А на выходе у компании - урод, внутрь которого лучше не заглядывать: раздутая смесь из грязного кода, ошибок и костылей, которая каким-то чудом но частично работает. Там тысячи фич, но работает из них лишь часть, и работает не особо хорошо.

Особенно таким грешат крупные компании, где софт для галочки: его просто нужно выпустить, а как - не важно. Менеджер на менеджере сидит и менеджером погоняет, важны только отчёты и расходы, а главное, сам результат, никого не интересует.

Чтобы результат был хорош, нужно давать разработчикам свободу. А это в основном некоторые продуктовые компании, которые сосредоточены на результате, где можно взять и пилить одну фичу до тех пор, пока она действительно не будет готова, или где если заметил ошибку или неоптимальный алгоритм, ты можешь его взять и поправить.

Столкнулся с тем, что на некоторых компьютерах бывает "аппаратно зарезервированной памяти" больше половины оперативной т.е. из 8 Гб половина занята непонятно чем. После удаления драйверов видеокарты Nvidia зарезервированная память уменьшается до 200 с небольшим.

А как без драйверов жить?

Видимо сносить систему в ноль. Переставил человеку систему - зарезервировано аппаратно 1,5 Гб.

Да, столкнулся на ноуте с ryzen. При покупке в ноуте установлено 8 гб. GPU отъедается сразу 2 гб. В биосе поменять или уменьшить, данный объем возможности нет. Только добавлять память. Есть один слот.

Так это не заслуга райзена) т.е не от процессора зависит ,система всегда резервирует под себя озу ,так что это нормально, просто надо добавить озу, вам повезло что у вас есть слот. А одна планка озу на 8 гб не дорого стоить будет, зато получите + озу и двухканалку следом, что отразиться на повышении производительности

Актуально для 32-битных ОС без нормальной поддержки железом PAE. Здесь действительно лучше поставить 64-битную ОС.

А, ещё если видеокарта встройка — разумеется, ей надо откуда-то брать свою память.

На машине с 8Гб ОЗУ не может быть 32-битной ОС. Видеокарта PCIE, но соответствующая возрасту ПК, поэтому последняя версия драйвера за 2015 год что на сайте АМД, что ставится через обновления Windows.

Ещё как может. Почитайте про PAE: 32-битные Windows Server 2003 и 2008 поддерживают до 64 ГБ физической памяти.

Зачем это на машине с Win10Pro x64?

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

Вирусы?..

Вот где простор для оптимизации!

Как же мне нравятся такие статьи. Да, да, да полностью согласен с автором. Все огромное и тормозит. Справедливости ради, скорее всего в архиве с программой какой нить qt + картинки + локализации и справочная документация. Или вообще электрон засунули.

когда я нажимаю на значок громкости ноутбука Microsoft Surface, то вижу задержку: машина постепенно создаёт новый элемент интерфейса пользователя, разбирается, какие значки отрисовывать, а затем они появляются и становятся интерактивными. На это уходит время. Кажется, около половины секунды, что в масштабах времени процессора близко к миллиарду лет
Кто-то пробовал проверять слова автора?

В данный момент сижу за относительно древненьким x260, нажимаю на кнопки изменения громкости и… все происходит МГНОВЕННО. Я не замечаю никакой задержки между нажатием и отрисовкой элемента на экране. Не только 0,5 секунды — а вообще нет задержки. Никакой, абсолютно

Тогда вопрос
Это я такой крутой виндо-юзер, что смог все круто настроить и оптимизировать?
Или просто автор жопорукий долболюб, который непонятно чем и как умудрился засрать свой комп до полной невозможности им пользоваться?

Может и нет никакой проблемы?

Думаю, что у вас ssd. А у автора hdd. Я столкнулся с таким поведением на hdd. Особенно это заметно когда переходишь по окнам настроек. Задержки и шуршание винта. Задача без ssd не решаема, раньше как то решалась, на древнем железе, ну к сейчас с 5нм уже проблемы.:)

Да ладно! Отрисовка ползунка громкости происходит с задержкой 0,5 секунды — из-за HDD?
Ни за что в это не поверю

Возможно до кеширования данного элемента, это происходит. Даже на ПК с ssd. Я это замечаю. Стоит windows 10. Но только один раз при загрузке ПК.

Ок, щяс перегружу комп и снова попробую
Короче — вранье это все
Только что ребутнул ноут и сразу после появления рабочего стола — попробовал регулировать громкость

Как и ожидалось — все происходит МГНОВЕННО.

Стоит задуматься, может и остальное автор тоже выдумал? Может не все — но многое или выдумано, или дико утрировано.

Ну ок. У меня не мгновенно. Значит и вы придумали? Понятно, что информацию нужно проверять. У меня так происходит на ноуте с ryzen 5 и hdd. И ПК athlon x4 640 и новенький ssd kingston.

Что, реально 0,5 секунды между нажатием кнопки и отрисовкой ползунка?

Скорее вопрос в степени засратости системы. В случае задержки 0,5 — это 60й уровень :)

Возможно. Но лаг происходит один раз.

Кроме отрисовки, там ещё же и в реестре где-то обновленные параметры эквалайзера сохраняются. И ОС по всем окнам рассылает уведомление что параметры поменялись. Через слоев 100500 абстракций, конечно же. И где-то в этой цепочке что-то выгружается в swap.

Сову не жалко — пожалейте глобус.

Берется бритва Оккама и режется все под корень, если вместо попыток оправдать авторский бред — просто взять и подергать эту громкость самому.

просто взять и подергать эту громкость самому

У вас точно такая же нога но не болит? Рад за вас ;) Чтобы убедиться, что кто-то в интернетах неправ, мне нужно найти такой же комп, взгромоздить на него тот же набор софта (с антивирусниками, кряками и кейгенами).. Воздержусь.

ЗЫ: у меня воще linux лапки. :)

Вот я и говорю — автор загадил свой комп до полной всратости — а потом стал пенять на разработчиков. Может у него в автозагрузке 100+ программ и три антивируса борются друг с другом с переменным успехом
НЛО прилетело и опубликовало эту надпись здесь
Или запускают рендер в режиме максимального приоритета, когда даже прорисовку курсора мыши можно чуть не по пикселю разглядеть

Вопщем, все очень натянуто и наброшено
НЛО прилетело и опубликовало эту надпись здесь

Думаю, что у вас ssd. А у автора hdd.

ноутбук Microsoft Surface с hdd? - такие разве были?

Не знаю, что там у вас за х260, но, у меня Феном 2 х4 с 8 Гб ОЗУ и сразу после загрузки ОС, при первом нажатии правой кнопкой на любой папке на рабочем столе я ожидаю около 10-20 секунд. Да, что там папка? На рабочем столе правой кнопкой - то же самое.

Так что, я согласен с автором на все 100%. Считаю, что для продвинутых юзеров просто необходимо нормальное ПО, без всех вот этих вот наворотов в виде анимации и прочей бесполезной лабуды, с ГПИ на уровне 95 винды - как максимум, а как минимум - вообще без ГПИ, чисто на командной строке. А для остальных 95% юзеров пусть останется "плиточный 2д дизайн десятой винды", который ест ресурсов больше чем любая 3д игра из 2000 года.

Но, такого не будет никогда. Это только мечты.

НЛО прилетело и опубликовало эту надпись здесь

Нет.

НЛО прилетело и опубликовало эту надпись здесь

Как-то так.

НЛО прилетело и опубликовало эту надпись здесь
Только что ткнул правой кнопкой на десктопе, хотя не понимаю, зачем это надо, я десктоп практически никогда не вижу.

Все мгновенно, какие-то микросекунды на отрисовку эффекта плавного проявления меню — и все

x260 на мобильном i5, 16 гигов
ЧЯДНТ?

Не знаю. Вы просили проверить слова автора - я проверил. Но, такая задержка у меня только после включения. После первого нажатия срабатывает быстрее, но не мгновенно. Иногда 1-2 секунды. Громкость работает так же.

Ну, значит есть таланты, которые умеют засрать систему до невменяемых тормозов. Только виновата в этом не система и раздутый софт, как пытается доказать автор статьи

Не спорю, система у меня засранная, и винда старая, я её устанавливал ещё году в 2013. То есть она уже лет 10 работает. И софта всякого разного стоит очень много.

Но, тем не менее, софт реально раздут. Например Windows XP требовала 1,5 Гб ПЗУ и 128 Мб ОЗУ, а десятка - уже 20 Гб и 4 Гб соответственно. А прошло всего 15 лет. Куда это годится?

Думаю, сейчас рынку просто необходима небольшая офисная ОС с минимумом функционала. Потому что код винды уже близок к технологической сингулярности.

Как вариант кастомный Linux. К примеру есть Antix на старте где то 128 озу. + libre office 300 мб для запуска. Но юзать его очень неудобно(я особо не копал). Вариант сделать сейчас такой дистр на базе линукс есть. Даже самому. Поставить ubuntu и поменять DE. Правда он включает systemD, который не выпиливается.

Линукс, увы, уже тоже едет в ту же сторону. Если не хочется тратить кучу времени на настройку/подгонку, то берешь что-то мейнстримовое (Fedora/Debian/Ubuntu и т.п.), а там все идет туда же, куда и Windows - дистрибутивы с каждым новый релизом распухают все больше и больше. Нет, все же в FOSS еще много людей, готовых тратить время на оптимизацию, но поскольку основные дистрибутивы уже, по сути, управляются корпорациями, порочный подход постепенно занимает все больше и больше места.

С тех пор много воды утекло, стало на порядки больше фиксов для уязвимостей и поддержки разных фич. Винда только-только скидывает с себя бремя обратной совместимости от кучи старья

Перезагрузил, на глаз громкость с плавным выездом открывается за 0.5. Повторно примерно за 0.3.(Задержки уже нет) Это ко всем окнам относится. Wifi, настройки и т.д Но загрузка параметров экрана всегда одна секунда. Не мгновенно.

"совершеннейшее, совершеннейшее безумие. Именно из-за этого ничего не работает, всё медленное, нужно покупать новый телефон каждый год и новый телевизор для скачивания этих раздутых приложений для стриминга, в котором тоже прячется столь же плохой код."

А может быть именно это следствие и есть причина? Если код вынуждает каждый год покупать и покупать дорогущие вещи, то может потому он и приветствуется? Безумие для програмиста, но вполне разумно для бизнеса.

А это уже криптозоология

Да. Дёшево, быстро, чик чик и в прод. Как говорится а фигли нам бизнесменам:)

Все слои системы , которую я написал занимает порядка 250 кб + одна единственная Библиотека в 1 мб.

Предыдущий код , доставшийся в наследство занимал для этого же функционала около 150 Мб и десяток библиотек.

Вот думаю , а может ещё уменьшить ?🤭🧐

И я честное слово не считаю себя вообще программистом.

Если бы программисты делали программы свои из реальных материалов, из дерева там, или металла, процесс конечно можно было бы замедлить. Посмотрите сколько в прочих отраслях стандартов всего. Дафигалион шурупов, винтов, марок стали, разъемов, сопряжений, оригиналов и аналогов, даже систем измерений две. Возможно в будущем случатся попытки как-то зафиксировать хотя бы часть этого программного зоопарка. Условный список "жизненно важных" (по аналогии с лекарствами) приложений, то есть, один редактор текста, один редактор изображений, базовый (гос) месенджер, стандартный браузер для "госуслуг" и т.д. С ежегодным фиксом багов и некоторым обновлением функционала раз в 10 лет. И все это под такой же стандартный ПК и смартфон. Учитывая торможения прогресса в этих областях, то подобной сборки хватит лет на 50, а следующей, может и на все 100. Мало что ли "древнего железа" до сих в работающего, а то ещё и производящегося? Либо же все само как-то коллапсирует до чего-то подобного. Как-то раз в компании любителей фантастики шутили, что космические просторы будут бороздить корабли, в недрах которых будет оборудование и код возрастом в столетия, а обслуживающий персонал будет, хочет он того или нет, напоминать вархамерровское техножречество :)

НЛО прилетело и опубликовало эту надпись здесь

Ага, видал я функционал на больших проектах.

Помимо очевидного легаси, которое расширяется, всесто модифицирования, есть ещё один момент.

Аналитика и куча хотелок бизнеса. Вы просто загружаете файлы и понимаете, что они там где-то хранятся. На самом деле вы клиент. И ваши действия отслеживаются. Все возможные и нет. В каждой крупной компании есть десятки метрик для десятка сотрудников из разных сфер. От менеджеров и рекламщиков, до разработчиков и дизайнеров. Эти метрики нужно мониторить. Может быть - в реальном времени. Может, нужна возможность троттлить загрузку файлов в зависимости от загрузки кластера и уровня вашего пакета. Всё это уже многолетнее легаси на каком-нибудь паскале в перемешку с плюсами. И пока оно работает - никто не будет тратить невероятные ресурсы на рефакторинг. Это было и раньше и сейчас и будет в будущем, как бы печально не было.

А еще, я не заметил, чтобы автор упоминал дедупликацию. Хоть это и не побайтовое сравнение, но хэш все равно надо посчитать и сравнить.
НЛО прилетело и опубликовало эту надпись здесь

Ну, это похоже на неконструктивное положение какого-то обиженного ребенка.

Бизнес зарабатывает деньги. Никто не станет тратить деньги на бесполезные метрики. А если они полезные, то никто их не выкинет. На самого клиента им срать, насколько это возможно. Бизнесу, чтобы выжить, нужно быть наглым и цепляться на всё, что возможно. Тут нечего обижаться - вам тоже на них срать, по большому счёту.

Если вы платите деньги и недовольны работой сервиса, есть отличное лекарство - написать им, что ты недоволен вот этим, 1: ..., 2: ... и валишь к конкурентам. И валить к конкурентам...

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

Это скорее крик программиста, которому этого монстра поддерживать (откуда тогда известна внутренняя кухня??). Тут да - без вопросов, парню (а скорее всей команде) не повезло)

НЛО прилетело и опубликовало эту надпись здесь

если молчать — будет ещё меньше

Молчать никогда не нужно. Но ценности и т. д. сходят на нет через два-три уровня бюрократии.

Как вариант (опять же, большой напряг для бизнеса и не подходит в сильно коррумпированных обществах) - законы. Уже есть целая система, которая огораживает народ от кучи неприятностей. Например, одно только обязательство печатать состав съедобной продукции на её упаковке - это уже достижение, которое, без преувеличения, спасло (в прямом смысле) кучу народу.

А по факту как всегда - где-то посередине

Опять очередное нытьё оторванное от реальности. Мальчик в песочнице, которому не понятно почему дом строится так долго в отличии от его песочного замка.

Есть такое суждение, хочешь проверить дуга дай ему денег в займы. Здесь также, хочешь понять почему, дай ему власть взаймы. Если бы данный персонаж имел свою фирму и попытался нанять команду , которая бы была в соответствии с его требованиями, то он бы быстрее поседел. А когда бы он потратил слишком много средств на проект, который в итоге не выстрелил, то его бы вовсе расстреляли.

Вроде бы и понятно и не поспоришь. Но из года в год, та же история, бизнес, фичи, рыночек и т.д То есть проблема все таки в рынке, который диктует свои правила игры. Жручие и толстые программы лишь результат болезни.

НЛО прилетело и опубликовало эту надпись здесь

Для изменения правил, нужно менять систему. Сделать ветку, внести изменения и сделать коммит;)

Даёшь лёгкие программы.

Долой засилье электрона.

НЛО прилетело и опубликовало эту надпись здесь

Хотелось бы поправить автора - первая Elite занимала не 64, а 48 килобайт, первые 16 кб - это было ПЗУ компьютера с неким аналогом операционной системы. И да, в 2004 году был у нас на работе Пентиум-3 533 МГц, и на нём прекрасно работала одна браузерная игрушка на Flash. Энтот самый flash-плейер имел нехорошую привычку обновляться пару-тройку раз в месяц, после каждого обновления он работал всё медленнее и медленнее, лет через 5 эта игра уже с трудом шла на 1700-м целероне.

И до сих пор интересно, как смогли уместить Elite в 48 килобайт?

Сейчас такую традицию андроид соблюдает. С каждым обновление и новой версией жручее становится. Для последней версии обновили спеку, что минимум 6 Гб.

Современные говнокодеры не понимают значения слова "оптимизация". Они считают, что если их божественный код не идёт на компе клиента - клиент должен поменять железо. Они никогда не пробовали что-нибудь написать на мк61. Про элиту отдельный разговор. Вот были программисты.

МК-61 это как-то слишком жестоко…
Б3-21 жестоко. МК-61 уже чуть менее :)
Ну, я бы начал с мк-52, там хоть не приходилось после каждого включения с бумажки все вбивать по новой )

Вот примерно такая же тема. Я всё удивляюсь ,какие школьники пишут сохранения для игр , что они по 100 Мб занимают. При том что там максимум 1000-2000 параметров. Как-то сам опенсорсную игру писал. Там халтурное всё , и AI и графика и конечно же система сохранения. Но больше чем на 100 Кб всё равно они не занимали даже после нескольких часов игры(а по хорошему можно и в 10 Кб уместить). В общем как пишут сохранялки , чтобы они 100 Мб занимали, для меня так и осталось загадкой. Может быть просто дамп памяти сгружают в файл? Или надо ещё какой-то дзен познать, чтобы такие делать?

Ну если там мир разрушаемый и можно увидеть следы, оставленные первом первого уровня, два года назад? :)

Ну если разрушаемый, то да. Но я видел в Master of Orion 3 , там до 300мб сохранения. Хотя там 100 планет. Там максимум жителей 20, для каждого специализация - это байт. Ну ещё зданий 20, тип здания это ещё байт. Ну и всего параметров 100 максимум. Это 10 Кб. Ещё 10 Кб на флоты всех фракций.

В Total war Shogun где-то 15 Мб сохранение. В Thrones of Britania наняли уже студент и стало 7Мб , хотя информация для сохранения примерно такая же.

В шутере Quake 4 тоже 7Мб сохранение, я не помню, чтобы там особо был разрушаемые уровни.

Добавлю в копилку. Недавно был у нас проект, ничего экстра ординарного, несколько сущностей, UI в виде табличек, требований к дизайну особо не было. Совсем недавно всё это делалось одним человеком на Yii2+bootstrap3 за месяц максимум, и работало надёжно как лопата. Сейчас же всё это считается устаревшим, включая подходы к backend/frontend. Так вот, теперь такой проект пилили 4 месяца 2 отдельных front/back - программиста, всё по современному typescript/nestjs на бэке, spa/vue/quasar на фронте. Естественно всё это с кучей зависимостей, в докерах и т. д, напоминает супер-пупер навороченный мото-культиватор.

По итогу картошку лопатой выкопал один человек за день, а с мотокультиватором двое за четыре)

Раньше можно было пойти в лес, поймать лису и сделать шубу бесплатно. А сейчас нужно подключить к созданию шубы кучу специалистов задорого. :)

Раз заказчик платит - значит, для него есть свои соображения, по каким технологиям создавать продукт. Или погонщики программистов таким образом подняли цену продукта. Должно быть рациональное объяснение.

Да-да, посмотрел бы я на вас, если бы вам выдали ружье, порох, вату на пыжи и кусок свинца на пули. Спички только в расширенном комплекте за донат. А потом отправили настрелять дцать лисиц, ибо из одной только шапка получится. Думаю, вы бы на третий день выползли к людям и стали просить еду :) Не подстрелив ни одной лисицы ))

Сегодня оптимизация кода это что-то ругательное. Если уже мигание курсора нагружает цп на и задействует гпу. Потому что тестирование кода не на железе, которым будет пользоваться типичный юзер, а избыточно мощном. Плохо оптимизированный код на таком будет незаметен. https://habr.com/ru/post/402601/?ysclid=l4tq71gzl1147975540

Я вот кино какое-то смотрел, там боевые машины восстали, а центральный взбунтовавшийся компьютер герои-люди так и не нашли. Потому что все было распределено по всем персоналкам в офисах . Вот так оно и есть. И во всех этих тысячах DLL, исходников которых живые люди не касались уже давно, и никто не помнит, кем и как они были написаны, располагается код SkyNet. Скоро бахнет )

Каждый год 31 декабря мы ходим баню. Каждые полгода должна быть статья про нерациональное использование ресурсов: https://habr.com/ru/post/596517/

Сам не кодер, но в универе было программирование. Грустно конечно.

Это тянет за собой такое же нерациональное использование материалов, из которых сделано железо, а многие из них редки и стоят недешево. Следующим вагоном сюда идет нерациональное использование труда по обслуживанию всего этого добра (софт, железо, генерация и поставка энергии). Ужас.

Есть тенденции не только в компьютерной техники. Набирают популярность различные универсальные блоки, функционал которых зависит от модели (лицензии), но при этом с технической стороны абсолютно идентичные.

Это сейчас касается всего мира,код и железо лишь одна из граней. Взять то же автомобилистроение все что предназначено для города у нас тоже идет по пути "смени машину раз в год на новую", хотя вполне можно увеличить ресурс лет на 10 более и под модернизацию устаревших частей. Про пластик и упаковку там вообще беда полнейшая.

Производитель авто и его смежники разорятся.

Что будет если машины будут будут вечными описано в «Кольцо вокруг Солнца» Клиффорда Саймака:

– Знаете, Джей, - произнес он. - Я не стал ремонтировать вашу машину.

– Я собирался в город, - сказал Виккерс, - но раз машина не готова…

– Я подумал, может, она вам больше не понадобится и не стал ничего делать. К чему напрасная трата денег.

– Но старушка совсем неплохо бегает, - обиделся Виккерс. - И хотя у нее потрепанный вид, она мне еще послужит.

– Что говорить, бегать она еще может. Но лучше купить новенький вечмобиль.

– Вечмобиль? Довольно странное название.

– Вовсе нет, - возразил Эб. - Машина на самом деле вечная. Поэтому ее так и называют. Вчера ко мне приходил один тип, все рассказывал о ней и предложил стать агентом по продаже этих вечмобилей. Я, конечно, согласился, а этот тип сказал, что я правильно сделал, потому что скоро в продаже других машин и не будет.

– Минуточку, - сказал Виккерс. - Хотя ее и называют вечмобилем, она не может быть вечной. Ни одна машина не может быть вечной. Она может служить от силы двадцать лет, ну поколение, но не больше.

– Джей, - перебил Эб, - мне этот тип сказал так. Купите машину, и пользуйтесь ею всю жизнь. Завещайте ее своему сыну, он ее завещает своему сыну и так далее. У нее гарантия- навсегда. Если что-то выходит из строя, они ее ремонтируют или дают вам другую. Вечно все, кроме скатов. Скаты придется покупать. Они лысеют, как и обычно. И окраска тоже не вечная. Гарантия на окраску- десять лет. Если она испортится раньше, перекраска производится бесплатно.

– Может, оно и так, - произнес Виккерс, - но я как-то мало во все это верю. Не сомневаюсь, что можно сделать автомобиль гораздо выносливей сегодняшних. Но какой здравомыслящий предприниматель станет создавать вечный автомобиль? Он же разорится. Да и такая машина будет слишком дорого стоить.

> Каждые полгода должна быть статья про нерациональное использование ресурсов

И это хорошо. 1) Надо напоминать про эту проблему. 2) Надо напоминать на свежих примерах, чтобы не было «а что это за статья про необходимость сокращения на 5KB на RT-11?»
(Точно так же пишут новые детективы, чтобы не надо было переводить с языка Агаты Кристи или Эдгара По на современный.)

Именно поэтому во многом и появился этот комментарий)

Представьте, делается железка с производительностью на 10 функций, но в зависимости от того, куда ее запихнут или от оплаченной лицензии (не суть) будет выполнять меньшее количество функций. Такая практика с большой вероятностью может стать мейнстримом. С точки зрения разработчика такой железки это удобно. Покупатель все равно платит за всю железку + лицензию или внешний обвес. С точки зрения ресурсной базы и всем, что за эти тянется - беда.

Это уже есть. Intel выкатила процы с возможностью разблокировки доп функционала при оплате. Думаю и другие компании со временем возьмут на вооружение.

А чего представлять-то? Практика давно известна и регулярно становилась мейнстримом в определённых суботраслях. Хакеры, правда, ломают эти ограничения, так что сейчас они работают в основном там, где разрешения регулярно подкачиваются из центра и авторизованы с подписями.

Но при этом вполне возможен вариант типа «купили фичу — качается библиотека её реализации»… не обязательно же всё сразу хранить.
(В железе — да, уже должно быть поставлено)

rigol ds1054z О нем пишете? Полоса пропускания вырастает вдвое после взлома, плюс куча демо обработчиков, доступных сутки, если память не изменяет. Понравился — оплати лицензию.

В целом про ситуация. Можно поискать примеры, но особо смысла нет.

Мне кажется, что могут появится такого плана устройства, которые будут очень массовыми.

Так они уже есть. А если сделать шаг вниз — они есть массово и давно. Как только вы ставите универсальный процессор для того, чтобы "мигать лампочками" вы оказываетесь именно в этой ситуации. Правда цена у производителя обычно фиксированная.
Но это все равно именно то, о чем вы пишете. Просто микросхема очевидно дешевле рассыпухи, а универсальный процессор дешевле специализированной микросхемы. Так что ничего плохого я в этом не вижу.

Отчасти видимо так. Но изначально речь шла все-таки об устройствах, которые могут делать больше того, для чего используются фактически. Универсальность все-таки не совсем то и в где-то более, где-то менее, но эффективна.

Просто на подумать: транзистор гораздо более унверсален ДО включения в схему. Схема радикально ограничивает его возможности, но позволяет извлекать некий полезный эффект.
Более того, произведенный транзистор существенно более ограничен, по сравнению с теоретическим, ради лучшего извлечения полезного эффекта в схеме.

Пример. Я приехал в магазин за трубой, но нужной длины не оказалось. Купил более длинную, лишнее отрезал и выкинул. Но была альтернатива поехать в другой магазин. А вот если производили условных труб перестанут производить их разной длины, а будут штамповать только длинные. Им то все равно заплатят за всю длину, а что с ней дальше будет им без разницы и тогда альтернативы уже не будет.

А с транзисторами какая альтернатива?

Так это же плюс, а не минус, оптимизация.

Более того, произведенный транзистор существенно более ограничен, по сравнению с теоретическим, ради лучшего извлечения полезного эффекта в схеме.

А вот если производили условных труб перестанут производить их разной длины, а будут штамповать только длинные

А они и производят их только длинные :) Режут на более короткие фрагменты их в дополнительном слое абстракций — у розничных дилеров или там непосредственно мастера при установке.

Поэтому и не хотел примеры приводить. Пусть каждый сам придумает, какой ему нравится. Наверное трубы не очень хороший:)

А вообще то, что отрезают не так плохо. Вот если будут гнуть...:)

А вообще то, что отрезают не так плохо. Вот если будут гнуть...:)

И отрезают, и гнут, и каких только переходников-тройников с ними не вытворяют ))

Так это же плюс, а не минус, оптимизация.

Ну, как оптимизация… были h₂₁э и частотный диапазон равны ∞, стали — конкретным (и довольно малым) числам. Были потери нулевые — стало греться на всю котлету весьма ощутимо, иногда и вода не спасает. Мало того, еще и от температуры параметры плывут.
Раздули, испортили, приделали ненужные функции и вот это вот все

Я за. Больше статей, хороших и разных. Сам писал похожую статью. Потому, что накипело. Проблема есть и ее не скроешь.

Наша ДНК так же накопила избыточный код. Практически все одинаково, сплошные аналогии по всем компетенциям этих проектов. Грех не воспользоваться опытом...

Предлагаю эту проблему назвать "Проблемой французских писарей". Есть легенда объясняющая, почему во французских словах в написании присутствует гораздо больше букв, чем произносится (иногда из 5ти букв произносится всего один звук) - в древности, когда грамотных было крайне мало, а бумажные документы уже были в обороте, писари брали с клиентов мзду за каждую букву. Так и накручивали неплохие суммы за написание простеньких текстов. Хитрожопые надутые индюки))). Это, конечно, лишь домыслы, но вполне логичные.

Кстати, насколько помню, Дюма в д'артаньяне платили за количество строк (как некоторым програмистам) и появился у него Гримо. Слуга который мало говорил, но строчки рожал. А уже в десять лет спустя платить стали по количеству слов - и Гримо заговорил, но, может-быть у него это было возрастное. Так, что французский след подтверждается.

Можно, также, назвать синдромом Дюма.

Если быть точнее, то оригинальная версия Elite занимала всего 22КБ. А вот ее версия для ZX Spectrum потолстела почти в два раза - до 40КБ. Но зато было добавлено множество разных звездолётов противников.

Тема довольно стара, но от этого не менее актуальна и сейчас.
Помнится, в конце 90-х ... начале 2000-х был подслушан разговор на одной из выставок, двух экспертов-программистов. Суть была в том, что в большинстве случаев, что на тот момент в объектах (ООП) не используются все свойства и методы, а именно используются в среднем всего несколько килобайт из тех сотен килобайт, которые есть у экземпляра класса.

У меня есть пример покруче. Чтобы выключить подсветку видеокарты aorus (торговая марка gigabyte) нужно поставить 0.5гб софта. При чём его нельзя удалять т.к. при некорректном выключении компа подсветка опять включается.

Забавно. А сколько весит установщик? И сколько занимает установленная утилита?

Установшик RGBFusion2.0 253мб.
В установке и удалении программ пишет 170мб занимает.
Откуда я взял 0.5 гб не помню, там 2 варианта:
1)возможно оно писало это при установке.
2)На самом деле там нужны 2 утилиты, при чём 2-я раньше как я понял была отдельной, а потом стала плагином к первой. Возможно 0.5гб это с плагином или со 2-й утилитой или это суммарный объём установщиков.
Уже не помню точно, с документацией беда, ставил методом тыка разными способами.

Скачаю утилиту, распакую и посмотрю, что внутри. Отпишусь в тему.

Насколько я помню правильная установка это когда ставишь утилиту, уже в ней пытаешься зайти в управление подсветкой видеокарты, и тогда она сама качает плагин для видеокарт.

Не прогадал, на старте установки

Установил. В каталоге программы, мегов на 100 dll и exe. Еще есть подкаталоги на 5 и 10 мб с dll. На диске занимает 178 мб. Возможно прога идет с UnrealEngine:) Но я не разработчик игр.

Я всё перепутал. Нашёл свой отзыв.
"Надо самому удалить RGB fusion. В противном случае aorus engine не будет ставить RGB fusion. А та, что ставится отдельно почему-то не работает. Конечно тот ещё говнософт... 400 мегабайт чтобы ВЫКЛЮЧИТЬ подсветку. "

Т.е. надо поставить aorus engine, и чтобы он уже поставил RGB fusion.

400 мегов, это примерно установочные файлы windows 2000 и функционала в ней немного побольше:) То ли еще будет.

Вот уж забавно, надо будет у Асус посмотреть как реализовано, на одной видеокарте точно было механически, но при сборе биоса все откатывалось, а вот на второй может и через биос подсветка глушится, а не только софтом, но кнопки уже нет.

Можно физически отключить кабель подсветки.

в моём случае для этого карту разбирать надо. стрёмно с гарантии слететь.

Жаль… на некоторых проводки можно отследить и отцепить, не снимая кожуха даже.

Может проблема ещё кроется в том, что бизнес требует работающего решения здесь и сейчас? И разработчику проще подключить готовую библиотеку, в которой нужна только 1 функция из 50, но это позволит уложиться в сроки.

Не 1 из 50, а 1 из 5000. Условия рынка диктуют правила. Ответ, очевиден и возможно, безальтернативен. Если бы не рост производительности, было бы все намного экономичнее. И причем укладывались и в текущие сроки. Выработали инструменты, подходы и т.д

Вот путь разработчик подключает библиотеку статически, а не тянет целиком so/dll в зависимости. И тогда оптимизация во время связывания включит в исполняемый модуль только одну эту функцию, а не всю библиотеку.

А в идеале предлагать оба варианта - со статическим связыванием и с динамическим.

Люблю я эту тему. Господи, эта проблема тянется с 2000х. С чего б начать-то?! Ну, можно просто вспомнить эксель от майкрософта - скоко там уже версий? Следующая версия точно полетит в космос, ха-ха.

Вы совсем недалеко от истины

А все вполне нормально. Разработка всегда идет от состояния А к состоянию Б по пути наименьшей цены на реализацию. И раздувание - один из побочных эффектов. Вот представьте себя владельцем компании с 2 тыс. человек: вам надо платить зарплату, налоги, аренду, рекламу и проч. А заказчики вам платят потому что ваши продукты лучше и дешевле чем у конкурентов. И всякий раз вы оказываетесь на распутье: разориться и кануть в небытие за счет чрезмерных затрат на написание идеального кода либо обойти конкурентов и продолжить работу. Разумеется, выбираете путь продолжения работы. Любыми возможными способами. И если один из способов ведет к увеличению объема кода и исполняемых файлов - то так тому и быть. Лучше так, чем небытие. Если у меня будет выбор между тем, чтоб иметь некачественный пакт тестового редактора, который весит 1 МБ и пакетом, который работает качественно и весит 1 ТБ - я выберу более качественный и докуплю железо.

И всякий раз вы оказываетесь на распутье: разориться и кануть в небытие за счет чрезмерных затрат на написание идеального кода либо обойти конкурентов и продолжить работу

Обычно у вас на распутье намного больше вариантов. Например, писать не идеальный, а обычный, нормальный код, который и не требует рукожопства, и позволит обойти конкурентов и продолжить работу.

Я бы маленькое уточнение добавил по поводу Elite: на спектурме все адресное пространство было размером в 64кб. Включая 16кб, занятых под ПЗУ (по современному - под операционную систему). И в это же адресное пространство входила и видеопамять размером порядка 6кб. То есть под саму игру было не 64кб, а всего 42кб.

Ну не все так однозначно, еще можно использовать стандартные программы из ПЗУ вроде вывода символов, отрисовки точек и тп.

Но видеопамять 6кб - это только чб, еще есть 768 байт это цвета знакомест (которые тоже нельзя использовать, т.к экран раскорячит) + 200 с чем-то байт системных переменных.

Автор, в это игре весом 64КБ нет текстур. Вся графика закодирована. Накиньте сюда кучу картинок для улучшения графики и вуаля! Весить она уже будет от 1ГБ и выше в зависимости от качества и разнообразия. Добавьте сюда красивые реалистичные эффекты (взрывы, блики, тени и тд), физику (столкновения, скольжения, отскоки и тд) и вам уже потребуется современный комп.

Это как в одной из статей человек недоумевал, что игра Марио весит меньше, чем скриншот экрана с этой игры.

А теперь про раздутый код. Это не вина программистов, это вина бизнеса. Вы говорите, что написать аггрегатор файлов это простая задача. Увы, это не так. Чтобы писать низкоуровневый код, нужно низкоуровневое понимание происходящего внутри вашего компьютера. А для этого надо долго и упорно в этом разбираться. В итоге, разработка всей этой, казалось бы, простой программки выльется в копеечку. Я уж молчу про поддержку и доработки. Намного быстрее и дешевле использовать наработки коллег, собранные десятилетиями.

Если привести аналогию, то для создания молотка нужно отдать чертеж рукояти в столярку и чертеж наконечника в литейную, затем скрепить вместе и все, можно продавать. А по вашей логике человек должен сесть, выточить из чурки рукоять (кстати, а чем он будет вытачивать, неужели придется взять готовый нож?), отлить наконечник, обработать на наковальне (а ее откуда откуда взять?), отшлифовать (чем?)... Это будет золотой молоток, его смогут позволить себе только те, кому он особо то и не нужен. К тому же, пока конкуренты выпустят 1000 молотков, вы осилите лишь один, а значит все вкусные контракты будут у них.

В общем я все это к тому, что пользоваться благами цивилизации - разумно. Главное пользоваться разумно. :)

А насколько разумны те или иные вещи, решает сегодня рынок, а не плотники, кузнецы и программисты.

А насколько разумны те или иные вещи, решает сегодня рынок, а не плотники, кузнецы и программисты.
Рынок всегда был и всегда давил на исполнителей, и быть его рабом или оставаться личностью — выбор за нами. Это борьба, которая как раз и формирует личность счастливого человека.

Достижение результата разве не есть цель, которая поощряется особым гормоном в мозгу? Знаете, если я не написал все сам от начала и до конца, я все равно получу удовольствие от того, что умело оркестрирую инструментами. Бизнес быстрее получит выхлоп. Интел быстрее продаст свой новенький процессор. Все в плюсе. Кроме пользователей :)

А вот если вы хотите сделать что-то для людей, это вам благотворительностью надо заниматься (писать приложения в свободное от работы время бесплатно).

Ну и кстати, для справки. Даже если приложение, с которым пользователь работает изо дня в день, откликается на каждый тык по секунде, в день тратит на раздумья около двух часов, это все равно быстрее, чем если бы пользователь делал это все вручную целый месяц вместо дня. Так что в плюсе даже пользователи.

Достижение результата разве не есть цель, которая поощряется особым гормоном в мозгу?
Этот гормон вырабатывается не только от результата, но и от процесса. И если человеку платить достаточно много за очевидно (для него) абсурдную деятельность, то через время он впадет в депрессию.
я все равно получу удовольствие от того, что умело оркестрирую инструментами
Ну так вот и я про то-же.
А вот если вы хотите сделать что-то для людей, это вам благотворительностью надо заниматься
Ну не знаю… Я не вижу причин, чтобы нельзя было работать за деньги и работать так, чтобы мне это всё нравилось. Просто здесь надо стремиться именно к этому, подводить окружающих к своему образу работы и т.д.

Этот гормон вырабатывается не только от результата, но и от процесса.

Увы, если процесс затягивается, начинается выгорание. К тому же, я бы не назвал обсурдной деятельность по созданию чего то полезного. Помните? Изначально у нас одна цель, просто вы говорите о другом пути.

Ну так вот и я про то-же.

Не знаю как вы, а автор говорит о том, что инструменты надо создать самому. Типа зачем тянуть за собой целую библиотеку math когда из нее нужна только функция sin(a).

Ну не знаю… Я не вижу причин, чтобы нельзя было работать за деньги и работать так, чтобы мне это всё нравилось.

И я не вижу.

Просто здесь надо стремиться именно к этому, подводить окружающих к своему образу работы и т.д.

Вы только помните, что окружающим это тоже должно нравиться. И бизнесу в первую очередь, ведь это они платят и платят не за то, чтобы вам что-то там нравилось ;)

Конечно, затягивание процесса удовольствия не приносит! Вот иногда просто чувствуется, что работа выполнена и ее надо закончить.

Мой основной месседж был в том, что заказчики всегда будут давить быстрее-быстрее, я тебе плачу, и т.д. Но надо этому сопротивляться! Может быть без деталей всей кухни (чтобы еще и советов наполучать), но убедительно выстраивать свои отношения с заказчиком. Тогда и код будет нравиться и выгорания не будет.

Да, возможно не всегда удастся сделать win-win, но если долго над этим работать, то от таких заказчиков можно будет и отказываться, или они, увидев такой подход, сами поймут, что так лучше для них самих.

А по поводу библиотек где-то здесь уже писали, что к сожалению редко можно вытянуть из них нужные функции. И вопрос — писать свой велосипед или тянуть всю библиотеку — хорошего ответа для меня не имеет.

заказчики всегда будут давить быстрее-быстрее, я тебе плачу, и т.д. 

Только неадекватный заказчик. Понятное дело, откровенное дерьмо писать не надо, но давайте будем честными, предела совершенству нет :)

Код можно улучшать до бесконечности.

А по поводу библиотек, они должны быть максимально декомпозированы. То есть создатель библиотеки должен позаботиться о том, чтобы можно было подтянуть минимум необходимого.

Согласен)

Мы ещё долго не останемся без работы! ]:->

А что если софт это темная энергия и он разбухает потому же почему постоянно увеличивается Вселенная? Тем более что и там и там рост экспоненциальный?

К сожалению все так. Во главу угла ставится скорость разработки без вникания в суть задачи. В итоге разработчики ради одной простой функции добавляют зависимость от библиотеки огромного размера, большая часть которой вообще не работает в его коде, но жрет память в которую размещается при загрузке.
Мало кто ставит задачу минимизировать требования к ресурсам.
Более того многие разработчики даже не знают какую цену платят за использование тонны стороннего кода и библиотек. Они даже не пытаются разобраться, а зачем? Все же просто как в конструкторе - тяп, ляп и собрал, скотчем замотал и вперед на танки.

https://www.youtube.com/watch?v=TGtaLl--NjU&ab_channel=АлександрНикитин

Графический редактор который прекрасно работает на процессоре 3мгц и занимает 48кб памяти. А почему фотошоп на 1ггц процессоре с гигом оперативы тормозит?

Возможно, фотошоп умеет немного больше, чем редактор от ZX Spectum?

Настолько больше, что требует более чем в 333 раза больше ресурсов процессора? И более чем в 21845 раз больше озу?

Это при том, что ArtStudio имеет довольно хороший функционал, включающий в себя заливку сплошным текстом, заливку текстурой, редактор шрифтов и многое другое.

И все это в приятном оконном интерфейсе

Настолько больше, что требует более чем в 333 раза больше ресурсов процессора? И более чем в 21845 раз больше озу?

Очень намного больше. Например, фотошоп умеет взять картинку размером 8К на 4К с четырьмя каналами цвета, в ней сделать кучу слоёв и каждый обрабатывать по-отдельности.
Это при том, что ArtStudio имеет довольно хороший функционал,

Вы знаете, когда мне было лет 16, я потратил где-то месяц на то, чтобы написать графический редактор для своего «Поиска-1.04». На Турбо-Паскале. Он по функционалу чуть-чуть уступал ArtStudio. Но не так уж сильно. Там текстурной заливки не было, а редактор шрифтов я стащил в виде готового чужого кода. Это месяц работы школьника, повторюсь. Так что я бы не преувеличивал возможности этой софтины, и не ставил бы её рядом с фотошопом :)

Давай даже проще. ArtStudio имеет функционал выше, чем у mspaint.

ArtStudio работает на 48кб памяти, но имеет версию под 128кб. 16384 байт памяти спектурма уходит под системные нужды. Прикидываем, что размер самого ArtStudio не более 112кб

mspaint в win10 занимает 965кб

Сравниваем цену 48 кб памяти Спектрума (8 *565РУ5 - сколько это стоило в 90-х, кто помнит? в любом случае это 8 DIP корпусов) и цену 1 мб памяти в плашке DDR4 ( 4 Гб разделить на 1 Мб - в деньгах это будет дешевле одного резистора).

Как тяжко жить. Мама, роди меня обратно. Лет через 20 на Марс полетим. Там не то что в этих Америках. Там воздух чище, границ нет, законов нет, делай что хочешь, живи как хочешь. Там глядишь и код раздутый забудем, всё новое будет, всё своё. А эта планета заражена человеками, её не спасти, эти ничем не выводятся, как клопы. Пусть и дальше пишут тут свой код до посинения.

Так иначе быть и не могло. В сфере изначально не было стандартизации, точнее она была, но потом появлялись люди со своим видением и новыми стандартами (языками, концепциями, осями и вообще), потом появлялись концепции объединения концепций, кроссплатформеннсти всякие и т.д. и т.п. Неуправляемый винегрет лег на благодатную почву бума распространения информационных устройств (благо железячники тоже не отставали в разнообразии подходов) и их пользователей с разношерстными требованиями и программистов с безграничной градацией квалификации. Всё приправилось практически неизбежной необходимостью в back compatiblе. Ну и рыночек - ему надо быстро, хищно и маржинально, а не идеологически правильно. В общем хомячок стал медведем и что с ним делать неясно, хотя в целом он очень даже мил :)

Я думаю лечится это всё только тотальной информационной диктатурой с единым сводом правил и системой оценки. Причем оценка должна быть ресурсно-энергетическая, а не просто субъективный код ревью, любой код внедряется только в том случае, если он укладывается в заданные рамки потребления энергии, материалов . В некоторых отраслях типа военки и космоса и сейчас так, а должно стать повсеместно. Наверно такие порядки настанут после технологического и/или энергетического коллапса. Неизвестно когда, правда.

Кстати всегда было интересно, почему столько разговоров про зеленую энергетику, глобальное потепление и все такое на высших уровнях, но при этом никого не заботит, что какой нибудь паразитный сервис работающий на сотнях миллионах устройств сжигает дохренища энергии. Почему об этом молчит Грета?

НЛО прилетело и опубликовало эту надпись здесь
Сколько там этот паразитный сервис сожрёт, десяток ватт максимум?

Если сервис уменьшает срок работы телефона на скромные 5%, и работает на 100 млн устройств, то за год он сожрёт несколько десятков мегаватт-часов в мировых масштабах. Ну как бы пространство для экономии есть…
НЛО прилетело и опубликовало эту надпись здесь
Это не только звучит много, но и стоит дорого. А ещё и углеродный след создаёт. Если можно такие расходы не создавать на пустом месте, их нужно не создавать.
НЛО прилетело и опубликовало эту надпись здесь

Это называется "экономия на спичках".

десяток ватт за год на десятке миллионов устройств - это много, вопрос не в том что есть сам факт потребления, а в том что оно паразитное (в отличие например от отопления, которое необходимо). А сколько такого рода паразитов заложено на всех уровнях - никто я думаю вообще не считал.

Потому что это другое, ну вы понимаете. Маркетинг и бизнес не имеет отношения к экологии.

Если взять в пример те же станки с ЧПУ то там удивительным образом нет такой деградации так как есть прямая связь между время=деньги. Поэтому и программы до сих пор легкие и при желании программиста даже читаемые.

А как выглядит программа для станка с ЧПУ? НЯП, это абсолютно линейный алгоритм, совместимость с 100500 разных станков от разных производителей не требуется, формат данных всегда один. Сортировка пузырьком тоже выглядит одинаково, что на древнем Фортране, что на современнейшем Python.

Бытовой пример оптимального и эталонного программирования это классическая игра Linage II. Минимальный объём кода при максимальной эффективности графики, производительности, онлайн заполненности игроков и оптимального использования ресурсов оси и железа. Многим современным програмистов до того уровня расти и расти.

Самые первые релизы 2002-2004 года. Ошибки и баги конечно здесь не учитываю. Сама реализаиця порясающая и для того времения и для нашего как эталон..

Вот не соглашусь. При большом количестве игроков начиналось знатное лагалово, и затыком становился именно клиент, причём проблема была не в отрисовке графики, а в обработке данных процессором и натягивании совы (Unreal engine) на глобус. Такое ощущение, что вместо нормальных коллекций и алгоритмов разработчики использовали простые алгоритмы с неоптимальной асимптотикой. И да, были утечки памяти: после нескольких часов работы клиента он начинал тормозить даже на простых сценах. Например, сервер частенько забывал отправить пакет, что объект пропал и его нужно удалить. В результате при многочасовой прокачки на споте в памяти клиента висели тысячи невидимых объектов, которые он был вынужден обрабатывать.


Я просто раньше занимался написанием бота-радара под Lineage II, видел всю дичь. Ещё я проводил стресс-нагрузку клиента: смотрел, что будет, если постоянно спавнить и удалять объекты. Нормальному клиенту было бы пофигу, но в родном клиенте начиналась утечка памяти.

Подскажите, пожалуйста, почему код, как написанный программистом текст, так сильно связан с кодом, как машинными командами?

Из-за этого все проблема. Почему разработчик не может писать много-много абстракций, а компилятор не будет разворачивать их в что-то простое для вызова?

Собственно ведь такой подход и применяется, только в ограниченном виде. Надо развивать промежуточные слои компиляции, вроде синтаксического дерева.

Грустное чувство возникает, когда видишь, как к Elite 84го ссылаются как к эталону эффективного кода, при этом зная, в каком техническом состоянии находится её наследница, Elite Dangerous.

Публикации

Истории