Embedded 2018

Не сразу сформулировал словами, а сейчас решил уже доформулировать до эссе, расширив вопрос: а что может нравиться в embedded low level? Ответ напрочь лирический, состоит из двух причин. Причины, конечно, мои. Ещё я люблю пельмени, пиво и белый шоколад (что ни фига не шоколад).
Оставлю вне обсуждения темы количества, разнообразия и оплаты работы в этой области, оно (как и везде) ситуативно и колеблется от копейки до миллиона. Хочу про романтику. Чем оно может радовать, воодушевлять, восхищать, удивлять, удовлетворять. Также ограничу embedded до MCU категории «дорого-богато» (в районе single-board ARM computers (SBC) плюс-минус). Да, это удобный чит, который ставит под вопрос сам «термин» embedded, ибо остаётся всего шаг до «ну а чё, давайте тогда разработку на Android запишем, там те же платы», но… есть какой-то психологический водораздел, пожалуй.
Ещё требуется обозначить low level, что тоже получится не строго. Допустим, речь про asm / C / C++, а область технических задач при разработке максимально близка к железу. С другой стороны, если вы в контексте IoT на каком-нибудь Orange Pi в Python-коде будете работать с GPIO, оно тоже в какой-то мере low level. Наверное.
В общем, границы плавают, у каждого своя линейка, особенно если подходить к теме со стороны программирования. Железо может быть внутри класса вполне high level (та же Raspberry Pi 3B/B+ «просто» компьютер же), но писать для него строго на asm, шевеля руками каждый бит портов. Ну вы поняли.

Допустим, вы романтик и тонко чувствующая гармонию мира личность. И вас штырят компьютерные 1970-е. Тогда железо было железным, лампы мигали, не было шшшаблонов, отцов их, проектирования. Эпоха рассвета идей (на которых по сию пору живём) и решений. Тогда были созданы PDP-11 и Cray-1, вышла на пик популярности БЭСМ-6. Начала восход Intel со своим первым Intel 4004, за ней в кильватер вошла AMD. Включилась ARPAnet. Вылез из детских штанишек UNIX. IBM сотворила сначала флоппики, потом винты (кстати, «винт» потому, что внутреннее название проекта было «Winchester»).
1101650402_400
Обложка TIME, 2 апреля 1965 года
Программисты не отставали. Ритчи разработал C, народ осваивал пришедший в разум ALGOL (который 68), FORTRAN начал завоёвывать планету (его далеко не сразу приняли), COBOL вообще поглотил всех, Prolog, Pascal, Smalltalk, BASIC, LISP, Forth — всё это либо создано в 1970-х, либо к тому десятилетию вошло в полную силу. Фактически 90% современного программирования тогда уже было реализовано. А если не реализовали, то описали на бумаге и отложили. Особый спорт — спрашивать в барной болтовне, мол, как думаешь, когда появилось ООП, когда ты уже мог ООПисать код? Многие считают, что в 1990-х, рубеж категории «ну, когда Ленин умер, а Сталин всех карал».
Короче говоря, эпоха, в которую все окончательно смирились с тем, что компьютеры всерьёз и надолго, а сделать с ними можно всё, что ночью в сухую голову приходит. Интересное время, к которому фиг прикоснёшься руками. И железок не осталось почти (только маленькие шкафы в музеях и у энтузиастов), и эмуляторы фигня какая-то без вкуса и запаха. Всё не то. Но до меня вдруг дошло.
Посмотрите ассортимент и возможности современных SBC. Посмотрите ассортимент и возможности компьютеров 1970-х. Одно и то же! Пусть флопсы и похожи на средних сферических попугаев по больнице, но давайте сверим старое с, например, Raspberry Pi. Raspberry Pi 3 B+ — это класс Эльбрус-2 и Cray-1. А, скажем, Arduino — БЭСМ-6 и CDC 6600. Хорошо, по флопугаям железо близенько. Сейчас на нём торренты и видео делают, а 45 лет назад космос и физику осваивали.
Окей, что с языками? Ну… 1970-е — эдакий рубеж. Если ты хотел сделать что-то хардкорное с максимальной оптимизацией, использовал ассемблер. Если не хотел (а и такой хардкор многих подзадолбал), использовал высокоуровневые ЯП, коих уже был целый зоопарк (и половина программистов планеты только тем и занималась, что переносила компиляторы с одной платформы на другую). Но, мне кажется, современный даже RISC-ассемблер представляет собою язык высокого уровня первого поколения, так сказать. Ну, да, мнемоники не так натуральны, как keywords C или Java. Но если в БЭСМ-6 было около 60 команд, то в ARM их почти 180 (и это не считая condition code). Т.ч. любой каприз реализуем с достаточным комфортом. А, ну и да, OS уже тоже вовсю были, к их процедурам из кода тоже уже обращались.
Окей, что с вводом/выводом? Сейчас всё круче, конечно. Никаких тебе перфокарт или магнитных лент, результат работы тоже не на принтере выбивается. Однако, первый популярный emacs (ещё не GNU) Столлман написал в 1976 году. Да и вообще, уже в 1964 году у DEC был расчудесный Precision CRT Display Type 30 (PDF), фотографию которого ниже я взял со страницы computerhistory.org.
DEC Precision CRT Display Type 30
DEC Precision CRT Display Type 30
Иными словами, хоть с некоторыми условностями, но заход по ssh на плату и редактирование асм-кода в каком-нибудь nano / vim с последующим выводом результата на текстовую консоль тоже неплохо напоминает работу в старых терминалах. Собственно, это и есть терминал, просто более модный и с минимизированной рутиной подключения, листания, просмотра истории и т.д. Если на то пошло, то Xerox Alto с его GUI появился уже в 1973 году.
Наконец, периферия. Бери железку, подключай, читай даташит, мигай диодами, верти мотором. Да и то не очень аутентично будет, т.к. драйвера умели писать уже тогда, потому конечные потребители всё же редко работали с внешним оборудованием настолько хардкорно. Тем не менее, при желании можно и так развлекаться.
Что в итоге? SBC 2018 года по всем показателям (кроме размера, надёжности и энергопотребления) здорово близки ЭВМ 1970-х. Хочешь почувствовать себя в шкуре чувака, который сначала в тетрадях писал программу кодами / мнемониками, потом собирал, запускал и пырился на портянку текста (затем чертыхался и дампил регистры) — запускай ChtoNibud Pi и вперёд. Романтично. Хардкорно. Почти аутентично. Захотел побыть сумасшедшим инженером из старого фантастического фильма — будь им, можно даже сотню диодов приделать, чтобы красиво и нарядно.

Второй аспект, но не менее значимый, такой: иногда хочется делать технически выверенные до последней точки продукты. Продуктики. Чтобы каждая инструкция в дело, чтобы оптимально было до упора, ни байта назад. А современные продукты для бизнеса часто делаются по другому принципу (настолько детально и настолько многократно озвученному со всех площадок за последние лет тридцать, что останавливаться для раскрытия не буду). Более того, нередко у вас и нет настолько плотного контроля над системой, чтобы обеспечить требуемую душе точность работы. Ну да, заопитимизировал ты функцию. А соседний вызов популярного фрейморка сожрёт и не подавится. Заоптимизировал и его. Окей, а теперь базу загнули, всё просело. С базой разобрался… ну блин, теперь оказывается, что фронтенд работает медленнее, чем отрабатывают вызовы API, потому настолько быстрыми им и не надо быть. В общем, всюду клин.
В SBC же (и прочей мелочи) оптимальный, плотный и выверенный код — требование техническое. Чуть ли не обязательное. Железку не интересуют ваши пламенные речи на тему того, как в современном мире важно и приоритетно быстро говнокодить. У неё, например, 512KB на борту, привет, шевели извилиной. Ну добро, возьмём Raspberry Pi 3 B+, там 1GB ОЗУ. Но если торкнет со всей силы, вы начнёте ваять мелкие поделки, на каждую из которых по $50 не напасёшься. А оно ещё и одноядерным будет. А и память не сверхбыстрая. И частота будет не в гигагерцах, ага. Кайф же!

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

Про Эльбрус

Тема российского «Эльбруса» мне интересна по множеству причин.
Во-первых, нравится думать, что ещё не все полимеры потеряны и в России остались коллективы, могущие делать железный hi-tech, особенно в области процессоров. Можно испытывать тот патриотизм, что приятен, а не фейспалм от ряженых с нагайками.
Во-вторых, сам по себе «Эльбрус» представляет из себя любопытную архитектурную альтернативу. И если на этапе развития отрасли зоопарк архитектур был тормозом прогресса (а в СССР ещё и привёл на неоднозначный путь IBM / ЕС), то в современном мире таки хочется больше зоопарка и разнообразия, но не лабораторного (чего хватало и хватает), а промышленного.
В-третьих, тема «Эльбрусов» представляет из себя замечательный психиатрический маркер. Часто достаточно лишь упомянуть эти процессоры, чтобы минут десять слушать монолог, по которому ставится диагноз. Тут и слепые патриоты, и «ненавижу всё русское», и «всё украли», и «да я такое на коленке за вечер сделаю», и «буква ‘Э’ не так нарисована, потому процессор плохой», и «мне не доложили». Бери попкорн и наслаждайся цирком. Особенно полюбил в последнее время чуваков класса «мне, Мишке Синичке, такой процессор не нужен, потому и другим он не нужен».
В-четвёртых, «Эльбрусы» заставляют задуматься (и копать глубже) о том, зачем государствам нужны свои разработки? Сколько стоит процессор построить? Что мешает и помогает популяризации процессоров? Как с этим всем в России дела и что дальше? Как теряются и сохраняются разработки (тут любопытно копнуть историю ИТМиВТ до и после 1990-х)? Вот перед глазами живой пример, а не гипотетическая фантазия.
Фигня в том, что доступной информации про «Эльбрус» катастрофически мало, потому в головах роятся глупости. Сам грешен, писал чепуху, только потом думал. После изучения публикаций и просмотра роликов получил ответы. Не на все вопросы, но на важные. И ответы вполне очевидные, лежат на поверхности.
Если кратко, проблем у МЦСТ хватает, но проблемы потихоньку решаются. Т.к. архитектура и команды «Эльбруса» совсем не x86, для раскрытия потенциала софт либо заново писать, либо пересобирать правильным тулчейном. Массовому рынку (Петя, Вася и Вахтанг) оно в таком виде нафиг не надо, потому МЦСТ туда и не идёт. Идут к тем, у кого софта мало (переделка обозрима) и кому просто нужен «Эльбрус» (те же военные и безопасные). Также нюанс с выносом наружу всякого — часть работ сделана в рамках работ для структур, которые всё покрывают бумажками ДСП.
Соответственно, у МЦСТ ваще нет приоритета работы с населением. У них и бухгалтерия на физлица не заточена, не умеют. А с юрлицами, как понимаю, работают в русле перспективы. Если «Точмашурюпком» разрабатывает на базе «Эльбруса» решение для дальнейшего продвижения (и расширения сбыта), процессоры получит. Если «ВасяВаре Ltd.» из любопытства одну плату просит, не получит. Но это уже из области догадок. Сервера, например, у них достаточно спокойно продаются, если не ошибаюсь. Только не по цене смартфона, конечно, и софт там своеобразный.
И… Если экстраполировать на МЦСТ опыт обычного, «Эльбрус» до состояния внешнего продукта не доведён. Т.е. нет толковой документации (не по зубодробительным ГОСТ) как разработческой, так и пользовательской. Нет возможности отдать всё нужное Васе, не утомив того объяснениями, почему у него софт работает так, а не эдак. Нет инфраструктуры сопровождения массмаркета (сайты, саппорт, подготовка и распространение патчей, гарантийное обслуживание тёти Вали, etc). Короче, «Эльбрус» сейчас — это основа для относительно штучных и мелкосерийных решений, которые можно индивидуально сопровождать, и на которых можно нарабатывать рынок и компетенцию.
Отсюда неутешительный вывод: «Эльбрус» в магазинах если и появится, то вряд ли скоро. Как минимум, пока не придумают, как массовому покупателю объяснить, нафига ему такой компьютер с такими особенностями (ну вот разве Microsoft даст переписать / пересобрать Windows, чтобы работало нативно, а не в режиме совместимости?), да ещё дороже привычных Intel / AMD раза в два.

Если не кратко, список основных источников ниже. В сети есть множество обсуждений и лоскутной информации, но не вижу смысла сюда тащить, легко нагугливается (вместе с горой мусора, впрочем).
Во-первых, свежее интервью DZ с Константином Трушкиным, директором по маркетингу МЦСТ. Трушкин на диво толковый, говорит хорошо и правильно, интервью интересное, 45 минут жизни не зря. Смотреть там нечего, только слушать, а жаль.
Во-вторых, на том же Youtube канал Максима Горшенина. Можно сказать, это новости про бизнес «Эльбруса» из Института электронных управляющих машин имени И. С. Брука. Фактически в интернетах 95% тиражируемых сведений о процессоре происходят от видео Горшенина.
В-третьих, книга [Ким А.К., Перекатов В.И., Ермаков С.Г. Микропроцессоры и вычислительные комплексы семейства «Эльбрус». СПб.: Питер, 2013]. Спасибо, доступна в разделе публикаций МЦСТ. Часть информации в ней устарела, всё-таки материалу лет шесть, но основные положения остались неизменными. Ну и история архитектуры есть.
В-четвёртых, интервью и доклады Бабаяна Б.А. Несколько одиозный дядька (другие дядьки с ним нередко в полемике), по текстам кажется, что он в корень задолбался доказывать «не верблюд», но зато раскрывает истоки и особенности. Текстов, впрочем, мало: раз и два — внутри PDF большая лекция, желающие могут посмотреть или послушать.

Как мне кажется, «Эльбрус» сейчас находится в серединке между оценками дежурных хейтеров и фанбоев. Нет, у МЦСТ не всё плохо — просто они себя не продают и [за небольшим исключением] продавать не стремятся. Да и не особо умеют, кажется. И нет, у них не всё хорошо. Им до массового рынка даже дорогих устройств ещё до фига всего сделать. Не понять, будут ли они этим заниматься. Ну вот серверные стойки для ЦОД — да, уже есть, но штука нишевая всё же.
Как-то так. Висит вкусная груша, нельзя скушать. На мнение завсегдатаев соцсетей МЦСТ в целом далеко и высоко чихает, и правильно делает. Надеюсь, что до доступного десктопа всё же доживу.
PS. Пожалуйста, короткометражку «Миру — мир» не смотрите. Оно такое кхм… Не понимаю восторга DZ, трижды (!) посмотревшего эту… это.

Raspberry Pi как платформа учёбы

Несколько лет посматривал на Raspberry Pi, но энтузиазма не вызывало. Первые модели были откровенно слабыми. Модель 3B уже интереснее, но как-то незачем было. Да, микрокомпьютер, но всё равно не совсем полноценный по субъективным ощущениям. Да и к ARM по незнанию относился снисходительно. Короче, Малинка — игрушка для тех, кто в Arduino наигрался.
Но сошлись звёзды.
В-нулевых, несколько раз достаточно болезненно для ЧСВ получил понимание того, что без знания железа и low level программистом могу лишь считаться, но не быть им. Ощущения не понравились.
Во-первых, до меня дошло, что ARM’ы вполне серьёзная и любопытная штука. Могло и раньше, конечно, но вот так. А те чипы, что вышли за последнюю пару лет, вообще конфеты.
Во-вторых, за 2016..2017 гг. появилась литература, хорошо укладываемая на мои привычки обучаться, да и в целом качественной информации стало заметно больше.
В-третьих, остальная техника дошла до того уровня комфорта (мощность, цена, качество, удобство, доступный работающий софт), что позволяет оборудовать учёбу так, как считаешь нужным, а не как приходится.
И вот тут я подзавис. Крайне сложно чему-либо учиться, когда по квартире носится почти двухлетка с реактивным двигателем ниже спины, разрушительным любопытством и уверенностью, что во всех папиных делах найдётся место не только папе. Испробовал несколько решений, всё не подошло. ТЗ на процесс жёстко давило: нет проводам (быстро доберётся), нет ноуту (громоздко и тоже ооочень интересно), нет выделенному пятачку с любым оборудованием. Спокойно кнопить можно только с планшета по ночам. Но как, если надо собирать, дебажить и запускать программы на ARM-асме? Да чтобы не потратить кучу времени и денег на обустройство.
Осенило. Вернее, сначала подтолкнули учебники, в которых ARM даётся на MCU A-серии, а не на моей почему-то любимой M. Отправился листать каталоги плат, споткнулся об Raspberry Pi 3B+. Внезапно это уже хорошая железка. Памяти всё так же убого 1GB, но остальное норм, особенно набортные Wi-Fi, Bluetooth и Ethernet. Достаточно мощный и полноценный микросервер, итить, за почти разумные рубли. Дальше голова пришла к тривиальному, банальному, очевидному, прямому и простому решению, которое должно приходить в голову сразу, но приходит после поисков и метаний ромашкой в проруби — почему бы не поднять в квартире ARM-сервер на Raspberry Pi, после чего ходить туда и радоваться? Бинго.
По шагам получилось следующее:

  1. Купить наиболее оптимальный для себя вариант. Вариантов овердофига.
  2. Собрать железку, залить свежий образ нужной OS.
  3. Поднять SSH.
  4. Поднять Wi-Fi.
  5. Дать static IP.
  6. Закинуть на полку у розетки.

Всё просто. Нюанс только один: делать это всё на headless Raspberry Pi, разделы мануалов читать соответственно нюансу.


Во-первых, купил Raspberry Pi 3B+ Official Starter Kit за 6К рублей. Просто потому, что мне влом было по закромам собирать к голой плате солянку из блока питания, карточки и корпуса, а потом подбирать охлаждение, но при желании всё это заметно дешевле, конечно, особенно из Китая (этот же набор там 4.7К, например). Очевидно мажорское решение с переплатой за тот же ненужный HDMI-кабель, зато удобное. Не советую так делать, если у вас есть время и желание сделать более правильно. В любом случае 6К — это вот максимум цены за решение. Также учитывайте, что под одним и тем же названием по миру разные наборы.
Во-вторых, сразу залил на карточку образ последней Raspbian Stretch Lite. Десктоп не нужен. Кстати, всё равно там не всё последнее, потому потом ещё обновил пакеты. После заливки в boot создал файл ssh (без расширения и можно пустой), так при загрузке впервые поднимется ssh, иначе он выключен. Ну и собрал железку (наклеить радиаторы, сунуть в корпус).
В-третьих, карту с образом в Малинку, Малинку к блоку питания, блок питания в сеть. Пока грузится, найти патчкорд и подключить к ноуту, благо, с обеих сторон есть Ethernet. Завелось. Заходим на pi@raspberrypi.local, пароль raspberry, его правильнее сразу сменить. Запустить raspi-config, пойти в настройки интерфейсов и включить там ssh. Всё, пункт выполнен. Нужен Wi-Fi.
В-четвёртых, в том же raspi-config идём в настройки сети и включаем Wi-Fi. Этот пункт несколько мимо многих мануалов ручной настройки, но с ним намного проще, т.к. эти же мануалы часто пропускают настройку страны, без которой не получается. Можно иначе, но проще и быстрее всё же вот так. В итоге появляется конфиг wpa. Правкой конфигов донастраиваете под себя, погрязая в ребутах и косяках на пустом месте (помогли не тупить два мануала: один и другой). В конце концов Wi-Fi заводится, железка получает IP, сеть есть, ура.
В-пятых, в админке роутера прибиваете Малинке static IP. Этот IP и сопутствующие изменения вносите в конфиги. Отстёгиваете патчкорд окончательно, проверяете. Завелось. Дальше находите место у розетки, закидываете корпус с блоком туда, включаете и всё.
Уверен, есть более прямой путь настройки, но я настолько давно делал подобное руками, что вместо 15..20 минут удовольствия убился на пару-тройку WTF-часов, потому в тексте есть разница глаголов «сделал» (сделал вовремя нужное) и «сделать» (то, что надо было сделать сразу вместо того, чтобы тупить).
Теперь планшет. У меня всё разработческое на Android’ном планшете, потому поставил Termius. Он же есть и на iOS, но сам не пробовал, хвалить не буду. Андроидный хвалю — всё подключается, гамма приятная, виртуальная клавиатура удобная [для vim’ера], работает всё шустро.
Готово. Пару часов обкатывал. Ну… Получилось круто. Из любой точки квартиры в любой момент под рукой полный комплект (планшет с читалкой, гуглилкой и терминалом) учащегося. В целом удобно, если не наслаждаться непереносимостью голой консольки без IDE и прочих кнопочек. Если наслаждаться, то это же Debian, с прямыми руками многое можно под себя подкрутить. Проработал 80 страниц учебника, доволен. Ровно то, что хотелось. Подозреваю, в будущем могу к Малинке подключить какой-нибудь STM32 Nucleo и удалённо играть с ним, не изобретая варианты для освоения M-серии.

Может возникнуть здравый вопрос: чувак, ты просто поднял малиновый сервер и ходишь к нему по ssh, нафига столько букв? Ну, технически да. Эмоционально нет, большой шаг для человека, если посмотреть на всё в комплексе. В 2018 году Raspberry Pi внезапно представляет собою вполне неплохой bare-metal server, сравнимый с t3.micro, только с портами и GPIO, и без ограничений AWS. В 2018 году внезапно ты можешь кодить для ARM с планшета, удобно устроив тело на диване, и при этом не особо страдаешь. Также радуют современные «бытовые» ARM’ы (Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz вот просто так, считай, Карл). И радует возможность не просто кодить с планшета, но одновременно на нём читать учебник, сверяться со справочниками, гуглить странное, дебажить программу и всё-всё-всё. А в руках у тебя устройство размером с брошюру. А на полке в прихожей лежит устройство размером с сигаретную пачку.
Наконец, меня долго терзал вопрос «нафига» в адрес Raspberry Pi. И долго не долетал лобовой публичный ответ «для обучения». А ведь действительно это отличная платформа для обучения. Стоит недорого. Возможностей [3B+] даёт уйму. Сегодня учи ассемблер. Завтра подключи датчики к GPIO. Послезавтра напиши какую-нибудь фигню на Python. Надоело? Сделай из Малинки полезный сервер к чему-нибудь. Учебников хороших уже немало (от железных до программистских). Важно, что это не просто обучение, но полноценное обучение, вполне промышленное. Всё, что осваивается, так или иначе, но пригодится.
Вот это в сумме и восхитило.

Про историческую конференцию SORUCOM

В поисках источников по истории информатики в СССР набрёл на международную конференцию SORUCOM, тематика которой звучит как «Развитие вычислительной техники в России и странах бывшего СССР: История и перспективы». Если кратко, раз в N лет вместе сходятся ветераны разработки железа и софта, делятся воспоминаниями, докладами, исследованиями, материалами. В результате публикуют «Труды SORUCOM-YYYY», где YYYY год проведения конференции. К настоящему времени их было четыре: 2006 (Петрозаводск), 2011 (Великий Новгород), 2014 (Казань), 2017 (Зеленоград). Описание (и дух) первого собрания можно прочитать вот тут.
Слава всем причастным, в сети есть материалы всех конференций:

К сожалению, за 2006 год PDF’ку (удобно для читалок) не нашёл, про HTML ниже. Только печатную обложку. Не понять, можно ли купить книгу.

На этом можно было завершить текст, но после прочтения 1000+ страниц этих текстов дополню.
Сборники очень эклектичны. Вы либо читаете / листаете всё подряд, либо точечно знаете, какой материал нужен (и потому игнорируете остальные). Под одной обложкой статистические доклады, небольшие биографические заметки, полемические доклады (вроде моей любимой темы о роли перехода на ЕС), микромемуары, рассказы про учреждения, даже почти справочные тексты про архитектуры машин. Солянка та ещё. Если не знать и после первых десятков страниц решить, что дальше так же, потеряется возможность узнать информацию из первых рук.
Нюанс ещё в том, что авторы… как бы так мягко… старой школы. Т.е. вот ни разу не поколение 140 символов. У них нет задачи развлекать или доступно донести, т.к. аудитория состоит из таких же докторов наук и профессоров, которым не надо подавать арифметику комиксами. Однако, если уж вы начали читать, значит, мотивации достаточно для преодоления первой непривычности.
Очень жаль, что о таких конференциях узнаёшь едва ли не случайно. Если бы я не листал подряд чуть ли не все страницы замечательного сайта Виртуального компьютерного музея, не добрался бы до материалов конференций, а там не обратил бы внимание на SORUCOM… Ну хорошо, что мимо не прошло. Если вдруг однажды вы захотите узнать / понять истоки некоторых событий и решений в нашей истории, вспомните про SORUCOM, стоит того.

Книга: Пять уроков Великого Магистра

magister
Виктор Рябченко.
Пять уроков Великого Магистра, или Повесть о том, как Петя Бочкин изучал программирование.
Омск, 1988.
Обычно подобные книги не вношу сюда в прочитанные, но эта меня поразила своей непонятностью, упоротостью (пардон) и не прекращающимся при размышлениях вопросом «нафига».
По задумке автора очень начальный текст о программировании, дающий базовое представление о том, что такое алгоритм. Чтобы незрелому читателю скучно не было, знание подаётся в антураже некой… фантасмагории, не могу назвать иначе.
У Пети Бочкина раздвигаются стены комнаты и к пляжу подплывает корабль, на котором матросы, чувак (Казимир) и девушка (Кристина). Девушка существует в двух ипостасях, девической и роботной. В робота вводят программу (феминистки вздрагивают), при этом Кристина в основном занимается едой (снова вздрагивают). Первое знакомство с процессом описано вот так:

Казимир снял с себя бескозырку и нахлобучил ее на голову Кристины.
— Клади программу под бескозырку, — приказал он.
Петя положил программу под бескозырку.
— Эту процедуру мы будем называть «вводом программы», — объяснил Казимир. В действительности программа вводится в машину несколько иначе, но в данный момент это несущественно.
Казимир обошел Кристину вокруг и с чувством удовлетворения пропел:
— Ар-лята! Учатся летать! — он взглянул на Петю и велел:
— А теперь трахни ее по голове кулаком!
— Зачем?
— Затем, что эту процедуру мы будем называть командой «Пуск».
Петя приблизился к Кристине и легонько хлопнул ее по бескозырке.
— Можно было и сильнее… — начал Казимир, но тут Кристина вздрогнула и монотонно заговорила:
— Программа не прошла. Программа не прошла. Программа не прошла.

Ну… кхм. Ну вот типа такого весь текст. То из пушки курицами стреляют. То в море бочки с капустой. То «Шаварган-трах-тарарах!» Иные абзацы перечитывал несколько раз. Вот ещё микрошедевр:

— Так вот, сегодня клипер «Котангенс» под командованием Великого Магистра и Пети Бочкина должен был отправиться на операцию. Нужно было подойти к берегам герцогства и подвергнуть его столицу бомбардировке солеными огурцами. Из всех орудий. Но кракелюры, хитрые бестии, что-то пронюхали. Они заминировали всю прибрежную акваторию. Сегодня, когда клипер шел сюда, в бухту, чтобы забрать на борт Петю («адмирала Бочкина», тут же поправил Казимир), пришлось пробираться по сплошным минным полям… Мины кракелюров представляют из себя дубовые кадушки, начиненные квашеной капустой. Кстати, это еще раз подтверждает собственное убожество кракелюров. Прочная логика! Они, мол, нас — огурцами, а мы их — капустой! Не выйдет, господа! Капусту мы любим, хотя квашеную, по правде сказать, не очень. Но никакого вреда она нам не приносит, неприятно только. Рванет такая мина под днищем, обляпает весь корабль с носа до кормы. Б-р-р… Противно!

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

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

Про Arduino

Писал другой текст, обнаружил, что слишком много объёма про Arduino, выделил в отдельное эссе. Тема, естественно, джихадная, потому заранее избавлюсь от части нападок: нет, я не впервые сталкиваюсь с Arduino, да, через мои руки несколько моделей прошло, да, положенные новичкам проекты делал, после чего железки отдал желающим и о платформе забыл. Но в 2018 году решил вспомнить, посмотреть заново уже на фоне достижений конкурентов.
N лет назад Arduino — платки на базе Atmel AVR. Спустя эти N лет появились как родные платы на ARM Cortex-M, так и мегалиард клонов и фиг поймёшь чего, что завершается на -duino и сделано в гараже дяди Ляо. Удобства изложения ради ограничусь в эссе решениями на Atmel AVR, конкретнее, на ATmega2560 как на топ ветки (если не ошибаюсь). Текущая ревизия платы Arduino Mega 2560 v3: arduino.cc. Цена в рознице Москвы озадачивает. Часть магазинов продаёт модель за около 900 рублей, часть за около 3500 рублей. Возможно, первый вариант паяли китайцы, а второй итальянцы. Во всяком случае, у итальянских официалов $38 на сайте, что наводит на размышления о происхождении 900-рублёвых плат.
a000067_featured_1_
Arduino Mega 2560 v3
В качестве оппонента выбрал STM32 Nucleo-F767ZI — топовую на данный момент плату линейки, с которой STMicroelectronics вышла в 2014 году на рынок Arduino-DIY. На борту каждой платы (а их сейчас 42, Карл) один из Cortex’ов, но צימעס‏‎ в том, что по пинам Nucleo совместимы с шилдами Arduino Uno V3. Цена F767ZI в рознице Москвы на уровне 2300 рублей.
nucleo-f767zi
STM32 Nucleo-F767ZI
Что сравниваем? Сам MCU (архитектуру и «мощность»). Обвес на плате. Экосистема: даташиты, книги, библиотеки, IDE, сообщество. Платы расширения. Потенциал.

Но сначала о пользователях. Что Arduino, что Nucleo — решения для обучающихся энтузиастов и ленивых на паяльник мейкеров. Чуваки, на форумах яростно дерущиеся на тему избыточности этих плат… ну, да, они избыточны для профессионального использования. Профессионалы, как понимаю, и не используют (разве что контора закупит коробку для экспериментов), у них свои линейки продуктов. Чему учатся на Arduino / Nucleo?
Во-первых, простой работе с железом. Тут макетка, там перемычка, здесь резистор с диодом, туда LCD и датчик влажности. Остаётся прокинуть к плате и по готовым проектам подкрутить, чтобы всё весело вертелось и радовало глаз. Я у мамы инженер. Часть специалистов относятся к такому занятию с иронией, да и напрасно. Именно такие простые действия пробивают порог «магии» внутри корпуса компьютеров, убирают страх работы руками, ну и вообще дико прикольно, когда ты чуть ли не сам своими руками заставил железку моргать лампочками.
Во-вторых, началу и завершению проектов. До меня не сразу дошло, но потом понял. У многих людей нет в жизни того, что есть у инженеров / разработчиков — проектов. Спланировать, начать, сделать, ввести в строй. Нами это воспринимается как естественные итерации в жизни, а у вашего соседа Пети этих итераций нет. Он просто живёт и просто работает, при этом испытывая тягу делать что-то законченное. Соответственно, бесчисленные каталоги DIY-проектов позволяют тягу удовлетворить, не убившись на год в углу балкона.
В-третьих, ассемблеру. В [Larry D. Pyeatt. Modern Assembly Language Programming with the ARM Processor. Newnes, 2016] автор на страницу толково объяснил, я перескажу кратко. Ассемблер x86 большой, сложный и страшный. Новички (да и не только) в нём быстро тонут, в лучшем случае осваивая маленькое подмножество команд без особой пользы для головы. Сами процессоры x86 тоже слишком сложные, чтобы их можно было комфортно изучить. Потому лучшим выбором являются относительно простые микроконтроллеры, на примере которых можно и RISC-процессоры освоить, и ассемблер, и успеть без испуга всё это в голову за курс уложить, да ещё и сделать что-то работающее.
В-четвёртых, низкоуровневому программированию [на C/C++]. Не понимаю, зачем извращаться и для таких железочек писать на каком-нибудь JavaScript (примером Iskra JS), самому себе укорачивая кайф вполовину. Как если бы выйти на пробежку, но сидеть в тележке, которую таскают вокруг поля. Как по мне, пустая трата головы и времени, если не хардкор.
Тут же замечу, что учиться делать embedded лучше не на AVR / ARM, для этого сектора есть замечательные PIC, они же почти идеальны для будущих простых IoT-экспериментов.

Что с MCU? Смотрим:

  • ATmega2560 (Arduino) — AVR, 8-битный, 16MHz, 256KB flash, 8KB SRAM.
  • STM32F767ZI (Nucleo) — ARM (Cortex-M7), 32-битный, 216MHz, 2MB flash, 512KB SRAM.

Бенчмарки MIPS/DMIPS гуляют по сети, числа не абсолютные, но везде одно — STM32F767ZI дальше ATmega2560 минимум на порядок, а если взять пару вырожденных случаев, получается что-то вроде 16 MIPS ATmega и 450 MIPS STM32. Чёт раньше не так ясно видел, насколько железно отстаёт AVR. Ну ок, теперь виднее.

Что с обвесом? Платы почти равны. Отмечу только наличие Ethernet у Nucleo (у Arduino, соответственно, его нет), ну и у Nucleo [заметно] больше пинов.
Что с экосистемой? Вот тут Arduino отрывается на десять корпусов. Я всё никак не мог понять, почему за настолько слабое и простенькое железо берут денег как за небольшой космолёт, но после изучения этого пункта понял: при покупке Arduino вы платите налог на обилие информации, на маркетинг, на конференции, на книги, наклейки, каталоги проектов, мейкерский движняк. Фактически вы словно попадаете в хорошо оборудованный первый класс — сразу с комплектом нужных учебников, с готовой партой, с толерантными и терпеливыми учителями.
Что с платами расширения? У Arduino гораздо больше доступных. Собственно, их и просто так больше-больше. Было бы. Но напомню: Nucleo совместим с Uno-шилдами. Вопрос их реального использования (наличие библиотек, удобство программирования с ними) открыт, но на уровне железа теперь такого отрыва нет.
Что с потенциалом? Ну… Я раньше не понимал причины, по которым был выбран AVR для Arduino. Читал любопытное мнение: AVR был выбран потому, что в те времена не было ARM’ов в DIP (а платформа предполагалась и для самосборки), а у PIC не было нормального общедоступного тулчейна. Похоже на правду. Фигня в том, что Arduino AVR мне кажется эдаким… заповедником экспериментов и учёбы, после которого всё равно надо будет переучиваться. Мало того, что сами железки по возможностям куцые относительно современных конкурентов, так и в промышленности и в практике массово используются другие решения. Учить AVR для того, чтобы сигнализацию потом делать на PIC, а сервер видеонаблюдения на ARM?
Наконец, смотрю на них… Ок, большинство программ маленькие и уместятся в десяток килобайтов. Но что делать, когда захочется большего? Я в первые же пять минут могу придумать десяток проектов, в которых найду, чем заполнить даже 512KB. В следующие пять минут ещё десяток, в которых потребуется быстрый процессор.

В итоге сам я от Arduino отказался. Это очень сопровождаемая учебная платформа, которая замечательно помогает сделать начинающим первый шаг и помогает избавиться от страха перед магическими технологиями. Что-то вроде локаций-песочниц в RPG — в противниках бабочки, соседи не дерутся, пастораль и благодать. Через час игры уходишь оттуда и не возвращаешься, выбросив тонкую рубашку первого уровня и прутик, что выдали вместо меча.
Да, ARM и PIC сложнее. Но в 2018 году многие былые сложности уже решены. Вчера я за пару часов осилил то, на что раньше могла уйти неделя — собрал в Ubuntu / Eclipse проект и залил его по USB в Nucleo. Т.е. да, всё так же раздражает, что на такую простую последовательность операций убил часы, но блин, раньше и этого не было, всё работало под Windows, остальные рыдали.
Литературы на пару порядков меньше. Но нужная литература есть. Вам не нужны десять мануалов по ассемблеру, достаточно пары-тройки имеющихся. Осилил? Всё, дальше уже по накатанной сам. Проекты при желании можно тырить из мира Arduino. Сообщества ARM и PIC тоже старые и большие, информации накопили много. В общем, в какой-то мере изобилие Arduino компенсируется достаточным минимализмом ARM’ов. Фраза звучит как «хорошо, что книг мало» (что нелепо), но так я пытаюсь сформулировать другое: по ARM есть хорошие книги, для обучения их хватает.
В общем, как-то фиг знает. Arduino тупиковая ветвь учёбы. Счётные палочки мейкерства. Есть чуваки, умудряющиеся этими палочками пейзажи рисовать, зажав коленом, но такой фанатизм не для всех.

Настоящие программисты

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

  • Знают ли разработчики историю профессии.
  • Умеют ли (хотят ли) от цитаты дойти до статьи.
  • Понимают ли контекст разработки разных периодов (статья 1972 года).
  • Понимают ли смысл, цели и причины цитаты / статьи такого рода.

Любопытство удовлетворил. Заодно подобрал типовую цепочку реакции, скажем так, ответ на которую попытаюсь дать в рамках темы. Итак (не досимвольно, исправил пару опечаток):

— Думаю, это самая цитируемая отечественная цитата о программистах за всю историю.
— Цитируется, потому что программистам нравится думать, что они особенные?
— Кто придумал это деление на программистов и просто кодеров? Это просто название профессии. Если в трудовой написано программист, значит, программист. Зачем придумывать словам новые значения?
— Кто такой настоящий программист? Повара, сантехники и проектировщики тоже делятся на настоящих и ненастоящих?

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

Начну с Ершова Андрея Петровича. О нём много статей и воспоминаний, потому кратко: один из первых программистов СССР, теоретик и практик, поднял Новосибирскую научную и практическую школу программирования, автор, глава, лауреат, инициатор, изобретатель и т.д. Во многом благодаря ему в школах появилась информатика. Плотно дружил с западными эквивалентами, был на диво выездной (хоть каждую поездку одобряли чуть ли не в ЦК). В общем, один из тех титанов, что это ваше программирование придумывал, когда программирования не было. Человек, с которым можно не соглашаться, но если он чего говорит о программировании, а вам на десятое прочтение в десятый раз кажется, что сказана чушь, читайте ещё и ещё, пока не снизойдёт просветление.
Продолжу эпохой. В 1960..1970 гг. программистов в СССР было мало, достаточно вспомнить справку 1970 года: «В СССР сейчас имеется порядка 3,5 тыс. ЭВМ и около 3 тыс. системных программистов». Это как если бы в современной России оставить только программистов Яндекса, остальных отправить на картошку. Почти все они были с хорошим высшим физмат-образованием, очень многие занимались тем, что сейчас можно с большой натяжкой классифицировать как системное программирование с одним важным уточнением. Если современный системный программист пользуется ассемблером и C, его коллега из прошлого создавал ассемблеры и C. Причина простая: многие модели ЭВМ поставлялись as is — вот железка, вот какой-нибудь базовый набор софта, дальше сами. К другу за чемоданом перфокарт не пойдёшь, т.к. у друга другая модель. А у другого друга третья. И документации мало.
В итоге с качеством, количеством и занятостью программистов тогда сложилась занятная ситуация: они часто и массово решали задачи «напередописать ОС», «напередописать язык» (транслятор, компилятор, интерпретатор) и т.п. По пути приобретали квалификацию, которая позволяла реализовывать собственные идеи (потому к 1980-м в СССР было 10+ диалектов Фортрана, например). Попробуйте сами: купите Arduino без ничего. Пока запустите на ней первую внятную программу, кандидатскую напишете.
Чем больше становилось компьютеров, тем больше становилось людей, решающих с помощью компьютера не задачи программирования, но задачи своих областей. Химики, физики, экономисты, биологи — все они учились программировать до уровня, который был достаточен, если хотели выполнение своих задач ВЦ. Биолог, моделирующий биоценоз подмосковного леса, не нуждался в знании того, как работает ЭВМ, не хотел возиться с нюансами выполнения разных команд, он хотел на ручки и работающую программу.
Интересный документ такого разделения — История Альфа-группы: «Это была первая группа, которая служила посредником между разработчиками и программистами». Обратите внимание на то, как первое поколение программистов в 1960-х начинает пополняться новыми классами. Появляется класс из предыдущего абзаца. Затем появляется класс программистов, которые уже не «разработчики [системных программ]», но сами по себе являются посредниками уже между, скажем, биологами (не желающими программировать) и программированием.
С годами слоёв «посредников» всё больше и больше. Вектор роста годовых колец — от разработчиков к «биологам». Каждое следующее кольцо по отношению к предыдущему поставляет пользователей. Очевидно, этот вектор на каждом слое избавляет разработчика от «лишних» знаний области программирования (информатики, кибернетики, etc). Всего спустя 45 лет между массовым разработчиком и знаниями с умениями, которые потребовались для того, чтобы этот разработчик мог программировать, находится огромная пропасть.

В 1972 году такое развитие было ясно Ершову. Во всяком случае, я в этом уверен. Конец 60-х — раскрутка маховика тотальной ЭВМизации вместе с переходом железа на IBM System/360 (модели Ряда 1 вышли в производство уже с 1971 года). Массово поднималось обучение информатике в вузах, сам Ершов бульдозером двигал информатику в школы (и додвигал до 1985 года — тогда на высшем уровне приняли решение), требовалось всё больше инструментов (ОС, языков, программных пакетов) для тех, у кого нет возможности получить специальное образование с углублением. Отсюда в статье упоминание «конвейера», «работы ради работы» и «работы ради денег», наконец, финальным аккордом «Сделав искусство программирования общим достоянием, мы лишимся своей элитарной исключительности перед лицом повзрослевшего человечества» (NB: не поймёте message этой фразы, не прочитав всю статью).
Потому, думается, Ершов описывал идеального программиста, того инженера и учёного, которого хотел сохранить под грядущим валом массового программирования и неизбежной «конвейеризации». Началось размытие профессии, размытие понятия «программист» с размытием всего того, что делало программирование элитарным занятием. В 1950..1960 гг. определять эталон не требовалось. Почти любой программист самим занятием принуждался быть эталоном — умным, талантливым, образованным, изобретательным и энергичным. А потом всё, началось.
В книге [Нариньяни А.С. Перспективы развития вычислительной техники и интеллектуализация ЭВМ. Новосибирск, 1984] граница проведена уже чётче:

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

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

Обратите внимание на разницу: прикладной программист уже не обладает «профессиональной подготовкой» и не владеет средствами «разного уровня».

Прошло 30 лет. Современный прикладной программист представляет собою на историческом фоне любопытное создание. Профессиональная подготовка либо отсутствует, либо сугубо прикладная (учим языки, а не теории языков). Проблемная область от него зачастую настолько закрыта удобными абстракциями, что не вникает и на мизинчик (всё равно, что в базу сохранять, яблоки или запчасти Роскосмоса). Изобретательство… ну, как бы ловчее один готовый кирпич к другому пристроить, да чтобы вся стена трещинами не покрылась. Самоограничение (о да, я снова сегодня спорил на тему «знаний вне текущих задач») приводит к тому, о чём Ершов косвенно упомянул:

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

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


И вот тут каждый сам решает, кто он. Программист? Настоящий программист? Кодер? Не программист вовсе, но пользователь? Программист, который специализируется на написании DAO на языке XYZ определённых версий в определённых проблемных областях? В какой мере красивые слова Ершова применимы к вам? Всё это не так уж важно. Разве что для горячих дискуссий годится. Всё, мне кажется, за десятилетия уже на наших глазах выйдет на другой уровень того, с чего началось. Программировать станет настолько легко и просто, что это станет общим знанием. Собери из миллиона готовых кубиков типовое решение своей типовой задачи. Продавщица Люся в киоске в ожидании вечерних бухариков будет лениво таскать по экрану компоненты с очередными эмодзи, позитивно изображающими циклы и ветвления.
Но на горизонте в горах в высоких хрустальных башнях будут сидеть новые «системные программисты» 1950-х, только уже 2050-х.

Факультативное чтение для любознательных:

ССИ: Учебник советского военного программиста

Под шквалом разнообразных лидерских курсов может сформироваться впечатление, что в былые времена разработчики представляли собою участников броуновского движения, ни в малейшей степени не заботясь ни об организации собственного труда, ни о подготовке свежих кадров, ни о формировании корпуса руководителей.
С экранов всемирной системы видеовещания YouTube и трибун конференций в слушателя вливают тривиальные или давно известные утверждения так, словно они являются недавними открытиями, способными развернуть отрасль в новые, неизведанные и прекрасные дали. Особую опасность несут адепты так называемых Софт Скиллс (soft skills — англ. мягкие, нетвёрдые умения), уже самоназвание которых должно отвратить сознательного человека, но отвращает, к сожалению, не всех.
Потому книга, которую я почти случайно обнаружил при поиске материалов для цикла статей, потрясла уместностью и актуальностью изложенных методик.
Небольшой томик 1978 года издания предназначался для обучения руководителей нижнего звена, которых сейчас на американский манер принято называть тимлидами (team lead — англ. вожак, руководитель команды). Прошло сорок лет с момента, как текст вышел в свет, а под слоем несколько архаичного и непривычного языка буднично предлагается то же, что с таким запалом проповедуют нам евангелисты Софт Скиллс!
Ценность этого текста кажется настолько высокой, что в сторону были отложены другие статьи и эссе, и я направил все силы на публикацию находки.
После месяца кропотливой работы по восстановлению и оцифровке текста предлагаю обществу разработчиков ознакомиться с маленьким шедевром корпуса нашей профессиональной литературы — [Крыжановский С.В. Учебник советского военного программиста. СамСверсталИздат, 2018]: PDF

Про ответственность

Раз заговорили про ответственность, давайте глубже.
За кадром в интересах другого эссе оставлю тему «а за что же отвечает-то программист», ибо велика она, необъятна и по всей поверхности обмазана программистами, не желающими ни за что отвечать. Предположим, что общественность содрогнулась разумом и смогла сформулировать эти зоны. Скажем, раз ты эту строчку кода написал, ты за неё и отвечаешь. Раз ревьюирующий её вмёржил в мастер, он ТОЖЕ отвечает. И так дальше по цепочке до руководителей, пустивших код в продукт наружу. Утопия прям, ага.
Предположим, что в УК ввели статьи, предусматривающие наказание от 1 года до 15 лет за решёткой. А также ввели в культуру производства штрафы за то, что в УК не уместилось. Тут важно уточнить, что введут именно про программистов и для программистов, так-то и сейчас можно залететь на общих основаниях, если под режимом или по хитрому договору. А предположение затронет всех и везде. Твой код убил людей? Садись. Твой код привёл к простою завода на сутки? Штраф на пару пожизненных. Твой код продолбал миллион полезных чисел? Ну вот миллион и плати. Жёстко, угрюмо, но для модели самое то. К чему это приведёт?

Разработка разделится на две части: «сажабельная» и «всем пофиг». Произойдёт распределение кадров между потоками, подавляющее большинство прыгнет в ту, где риска меньше. Так же распределятся и входящие в профессию. Образуется и пограничная область «не посадим, но штрафами ушатаем», но её судьба после десятка громких дел категории «Петя поставил лишний плюсик, а его за это в рабство! Ироды! Сатрапы!» будет равна «сажабельной».
И да, первые громкие дела будут болезненными. Мало внести изменения в УК, надо воспитать поколения, привыкшие к ответственности. Пока воспитываются новые, будут страдать старые, ползущие в будущее на старой инерции. Бунты будут проходить под лозунгами «мы всегда так делали!», «деды не тестировали и мы не будем!», «все ошибаются, сажайте страну!»
В «сажабельной» оклады будут выше. Просто потому, что кадров у них будет намного меньше. А во «всем пофиг» оклады могут упасть, т.к. они в свою очередь испытают резкий рост кандидатов, готовых работать даже с понижением (лишь бы не посадили). Но не сразу. Долгий период игры и контрактов по новым правилам. Не все работодатели и не сразу осознают, что уже через сутки без дополнительной мотивации у них вообще никто на работу не выйдет, потом от испуга задерут оклад до небес, потом индустрия обвыкнется и нормализует. Но эти качели с дикими индивидуальными случаями войдут в легенду.
Резко скакнёт вверх рынок сертификаций как софта, так и людей. Законодательство может не сразу успеть за практикой, но подтянется (уж что, а регулировать государства любят). Если можно будет делегировать ответственность на других, появятся как другие, так и плата за их услуги. Хотите использовать последнюю версию MongoDB? Либо на свой страх и риск используйте, либо ждите, пока сертифицирующий центр её проверит, поставит штампик «ОТК принял», после чего и. И даже если баги там окажутся, и даже если из-за них нанесён ущерб, вы уже не отвечаете, ответит центр.
Людей тоже начнут сегрегировать. Если Игорю во «всем пофиг», всем пофиг. А вот если в «сажабельную», работодатель захочет больше гарантий того, что ты не просто хипстер с клетчатой рубашкой, но действительно знаешь. Потому сертификации, тесты, экзамены по всем областям. Потому каждый год подтверждение квалификации. Это несколько формализует рынок труда и переведёт его в область «докажи дипломом, а не языком».
Программисты научатся говорить «нет», а бизнес научится их слышать. Тут в целом начнётся интересный психологический сдвиг. Одно дело со стороны рассуждать о том, что тебя не касается и не коснётся. Другое дело не встретить сегодня на работе Васю потому, что он в суде приговор выслушивает. А через месяц увидеть offline у Вани, который в бегах в тайгу подался, дабы не выплачивать огромный штраф. Пока снаряды за горизонтом, сарказьм сарказьмирует, но тут-то они в окошко постучат, сразу интереснее жить и думать.
Так вот. Нет досрочной выкатке в продакшены. Нет нарушениям цикла. Нет работе с низкоквалифицированными коллегами. Нет поблажкам на собеседованиях. Нет внедрению непроверенных решений. Нет «у нас сроки горят, потому катим как есть». Повторю, всё очень просто: если неудачная выкатка подведёт Игната под статью, Игнат предпочтёт потерять работу, отказавшись от выкатки, но не свободу. Если эта же выкатка тянет за собою по цепочке в посадку и руководителей, руководители начнут внимательнее слушать разработку.
Но так будет не со всеми. В Китае 46 преступлений, за которые смертная казнь (от коррупции до наркотиков), всё равно 5000 казней в год. В новой разработке тоже найдутся камикадзе. Первыми падут те, кто не понял, что шутки кончились. Ребята, которым надо пять раз сказать «не влезай, убьёт», а они всё равно на шестой раз влезут, т.к. надо было сказать семь раз. Падут оставшиеся под стрелой за бабло, но без умения обеспечить качество. Падут случайные и племяши знакомых, которых не успеют вычистить руководители. Также падут и руководители, переоценившие уровень своей разработки и решившие, что с той же пионерской бригадой можно жить в новом мире. Жатва будет собираться ежегодно, прореживая контингент.
Разделение пойдёт и в области прогресса. Чем толще регламент, тем медленнее повозка. Бойцы из «всем пофиг» так и будут выпускать по десять фреймворков в год, а вот «сажабельные» бойцы начнут осторожничать и предпочитать проверенные годами решения. Соответственно, снова захватится и рынок. Часть вакансий и кандидатов с условно устаревшим стеком, часть с опережающим здравый смысл. Более того, не все технологии пройдут сертификацию, потому и стек «сажабельных» будет заметно меньше. Правда, это компенсируется нуждой в хороших знаниях.
Возможно, активизируется рынок «заградительных» решений. Более тонкие анализаторы кода, многослойное автоматическое тестирование, автоматические проверки безопасности, легко разворачиваемые стенды проверки на отказоустойчивость. Это тоже может породить свою нишу, в которой специализированные конторы смогут предоставлять недорогие облачные решения и сервисы, прохождение которых тоже могут прикрутить к сертификату качества.
Но всё равно ошибки будут. Меньше на пару порядков, а просочатся. Каждый такой случай будет вызывать шумиху в прессе и в тусовочке, раз за разом поднимая волну. Но общество, обнаружившее, что в каждом углу по десять программ (от прошивки утюга до «прошивки» Боинга), за сбои в работе которых наконец-то можно кого-то наказать, будет так же раз за разом эту волну гасить.

В целом любопытная штука с непредсказуемым результатом. Пользователи могут получить возможность выбрать софт, который надёжнее, а не тестировать вместо разработчиков на себе. Разработчики могут выбрать между режимами жизни и отношением к. Работодатели получат более жёсткую выборку квалификаций без рандомного подбрасывания монетки. А может всё оказаться и наоборот, если звёзды сойдутся. Если разрабатывать программы под УК настолько медленно, что рынок не согласится столько ждать и публично подпишется на «мы готовы терпеть ваш говнокод, просто сделайте это вчера»? Или программисты массово сбегут в какую-нибудь Нигерию, в которой всем будет плевать на подобное законодательство?
Уверен в одном: что-то меняться будет. Толчком послужит всё большее вливание AI в быт. Роботы-хирурги. Роботы-такси. Роботы-няньки. Роботы-пожарные. Роботы-строители. Они тоже будут ошибаться, их ошибки будут приводить к смертям. И в какой-то момент накопится такое количество смертей, после которого общество захочет кого-нибудь посадить. И не один раз, а системно. Тут-то о программистах и вспомнят. И я чёт пока для себя никак не могу решить, в какую из контор после этого хотел бы пойти, в «сажабельную» или во «всем пофиг».