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

Я задал вопрос про язык описания и верификации аппаратуры SystemVerilog. На это кандидат сказал, что он еще не освоил SystemVerilog, вписал его в резюме на будущее, но вообще использовал Verilog-95 и немного Verilog-2001.

“Нет проблем”, - сказал я и задал вопрос по Verilog-95: “приведите примеры гонок (race conditions) при использовании верилога”.

На это кандидат сказал, что вообще его опыт был больше связан с VHDL. “Блин, как он выкрутился” - подумал я, ведь в VHDL нет гонок как в верилоге из-за дизайна языка.

VHDL так VHDL. Спросил: допустим переменная A имеет размер 10 бит, B 7 бит, а C 5 бит. Напишите как вычислить “A = B + C”.

Правильный кандидат, который знает VHDL, сразу бы спросил, может ли он использовать стандартную библиотеку ieee.numeric_std или проприетарную std_logic_arith от компании Synopsys. Далее правильный кандидат поинтересовался бы, являются ли A, B и C числами со знаком или без знака. После чего написал бы на доске что-нибудь типа:

A <= std_logic_vector (resize (signed (B), 10) + resize (signed (C ), 10))

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

Но кандидату не повезло. Когда я учился в 1986 году в 9 классе физматшколы номер 145 города Киева, мне попала в руки переводная книжка про Аду, я ее читал и даже писал ручкой в тетради на ней программы, так как компиляторов с Ады на Украине не было, первый я увидел только в Москве, в институте авиационных систем ГосНИИАС в 1991 году.

Короче я попросил кандидата описать мне механизм рандеву (rendezvous) в языке Ада. Это ключевая черта, одна из главных особенностей языка которая отличала его не только от Паскаля, от которого Ада развивалась, но и других языков типа Coral-66, применявшихся в ракетно-радарно-авиационном народном хозяйстве.

На это кандидат удивился и смущенно пролепетал что-то про язык Jovial, после чего посмотрел на меня с таким видом “А вот хрен ты хоть что-то про Jovial знаешь!”

И вот тут кандидату не повезло просто конкретно. Да, Jovial - это действительно редкий язык, который несколько десятилетий поддерживался какой-то конторой в Канаде для военных клиентов, у которых много древней легаси. Но я во все том же 9 классе прочитал упоминание про этот язык в культовой в СССР книжке Чарльза Уэзерела “Этюды для программистов”, а потом, уже в середине 1990-х, увидел книжку про Jovial в библиотеке Стенфордского университета, и с интересом ее пролистал.

Ну как вы поняли, я задал кандидату вопрос про Jovial: чем этот язык, который произошел от Algol-58, отличается от других языков своего времени, например более известного Algol-60? (Я прочитал про Алгол-60 в 8 классе в учебнике МГУ по программированию, а до этого - в 7 классе в книжке серии “Популярные лекции по математике”).

Выражение лица кандидата после этого вопроса было бесценным. (Правильный ответ, например “в частности в обработке строк” - он дать не смог.)

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

Комментарии (230)


  1. hren_sobachiy
    09.05.2026 16:24

    Моя гипотеза как такие граждане выживают

    Всё просто: они работают, вывозят сложнейшие проблемы.

    А в викторинах на собесах "чем A отличается от B" процветают энциклопедические эрудиты. За них потом и приходится всё вывозить первым.


    1. FlyingDutchman2
      09.05.2026 16:24

      Вот я, например, недавно провалил техническое собеседование по языку C#. Один из вопросов, на который я не смог ответить: "Какой номер версии C#, с которым вы работали на последнем проекте?"


      1. YuriPanchul Автор
        09.05.2026 16:24

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


        1. rukhi7
          09.05.2026 16:24

          ответить на вопрос типа "какая была структура parsed tee в вашем парсере"

          это прям единственно правильное название? А lexical tree, token tree, ... и даже комбинация из этих tree нельзя? Без названия parsed tee распарсить не возможно?


          1. YuriPanchul Автор
            09.05.2026 16:24

            мне все равно как он это называет. Пусть опишет структуру, типы узлов, какая информация в них содержится. Если не может - он этого не делал. А это кстати не lexical tree. Лексический анализ в компиляторе и синтаксический анализ - это фундаментально разные вещи.


            1. rukhi7
              09.05.2026 16:24

              А это кстати не lexical tree

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


        1. YuriPanchul Автор
          09.05.2026 16:24

          набирал впопыхах, описка - parse tree


        1. stranger777
          09.05.2026 16:24

          parsed tee

          Аж загуглил, не отстал ли от шарпа. Parse tree. Не пугайте так :)


          1. YuriPanchul Автор
            09.05.2026 16:24

            Да, меня торопили когда я писал коммент


        1. Vladislav_Dudnikov
          09.05.2026 16:24

          Просмотрел кучу реализаций разных языков (в основном, конечно, не мейнстримовых, но и мейнстримовые тоже смотрел), и вот ни разу не встретил, чтобы использовали именно parse tree, обычно это ast, возможно с элементами синтаксиса для вспомогательных целей (типа как в Go, когда хранят токен с его позицией для диагностических сообщений и определении типа операций).

          А вот какой-нибудь ANTLR генерирует parse tree, да, но по-другому и быть не может, генераторы парсеров не знают семантику языка.

          А для ручных парсеров это просто лишний слой.


          1. YuriPanchul Автор
            09.05.2026 16:24

            Я не разделяю AST и parse tree, употребляю это как синонимы. Я это дело выучил в конце 1980-х на примере portable C compiler (PCC) 1977-го года от Стивена Джонсона, с которым я кстати потом встретился вживую и даже работал в одном офисе. У него в компиляторе было дерево ориентированное на абстрактный синтаксис, то есть AST, которое потом преобразовалось в дерево для генерации кода.

            https://en.wikipedia.org/wiki/Portable_C_Compiler


            1. hren_sobachiy
              09.05.2026 16:24

              Я не разделяю AST и parse tree, употребляю это как синонимы.

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


              1. YuriPanchul Автор
                09.05.2026 16:24

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


              1. aamonster
                09.05.2026 16:24

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


      1. MonkAlex
        09.05.2026 16:24

        Так, а как с этим вопросом можно провалиться?

        Я начал работать с шарпом лет 10 назад, тогда основными версиями были 4.0 и 4.5

        С тех пор шарп у нас перешел на неткор, и там любую лтс версию можно называть и не ошибиться (6-8-10).

        Если же вопрос внезапно про версии языка как такового, то я бы тоже завалился на вопросе, потому что языковые изменения незначительные и специфику новых конструкций редко использую, так что 5 версия наверно достаточна мне в 99% случаев, а актуальная где то на 12-14 версиях.


    1. YuriPanchul Автор
      09.05.2026 16:24

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


      1. Rive
        09.05.2026 16:24

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

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


        1. YuriPanchul Автор
          09.05.2026 16:24

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


      1. hren_sobachiy
        09.05.2026 16:24

        Подождите-ка, но он должен хоть что-то знать хорошо

        Знать != уметь вербализировать свои знания.

        Из ваших вопросов правильный только про “A = B + C”. Человек который знает, действительно просто возьмёт да сделает. И не сразу идеально и набело. Т.е. если чел сходу не спросил про знаковость, это ещё не значит что он некомпетентный. Реальная разработка не ведётся сразу набело, а проходит через множество итераций, в ходе которых и вспоминаются всякие ньюансы, и решения доводится до идеального.


        1. YuriPanchul Автор
          09.05.2026 16:24

          Вопрос про race condition тоже валидный. Это одна из типичных проблем отладки, особенно у людей с опытом менее 2 лет и не следующих определенному темплейту писания кода. Если он на это не нарывался - возникает вопрос сколько у него опыта. Если он сразу переводит стрелку на vhdl - возникает вопрос есть ли опыт вообще. После этого естественно переключиться в режим проверки валидности резюме.


          1. hren_sobachiy
            09.05.2026 16:24

            race condition это не проблема отладки, это проблема работы всего параллельного. Вон у нас уже тут недопонимание в терминологии.

            Если он сразу переводит стрелку на vhdl - возникает вопрос есть ли опыт вообще.

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


            1. YuriPanchul Автор
              09.05.2026 16:24

              В верилоге есть специфическая форма race condition, которая по сути баг языка (блокирующие присваивания в always @ (posedge clock) a = b; always @ (posedge clock) c = a;) что дает разный результат в разных симуляторах и может дать даже разный разультат до синтеза и после него).Это другое чем эквиваленты в софтверных языках. Против этого придумали делать неблокирующие присваивания <=, но глючный вариант оставили в языке.

              Насчет vhdl - если бы он ответил на a = b+c, я бы спросил что-нибудь по делу, например как организовать testbench для какого-нибудь моста из протоколов которые есть в резюме (скажем apb в axi)


              1. hren_sobachiy
                09.05.2026 16:24

                Насчет vhdl - если бы он ответил на a = b+c, я бы спросил что-нибудь по делу, например как организовать testbench для какого-нибудь моста из протоколов которые есть в резюме (скажем apb в axi)

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


                1. YuriPanchul Автор
                  09.05.2026 16:24

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


                1. devmargooo
                  09.05.2026 16:24

                  Ну он мог предложить объяснить на примере, кто ему мешал?


    1. YuriPanchul Автор
      09.05.2026 16:24

      На вопрос про отличие он меня вынудил сам, посколько довел до необходимости проверить, валидная ли информация у него в резюме. Если человек не знает про рандеву в Аде, то он языка не знает. Это как не знать struct в языке Си. Ада сделана для параллельных процессов.


      1. YuriPanchul Автор
        09.05.2026 16:24

        Более точная аналогия - это как не знать указатели в языке Си. Его главная фишка языка и если человек ее не знает это как использовать Си как Бейсик.


        1. hren_sobachiy
          09.05.2026 16:24

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

          Это не человек не знает про указатели в Си. Это задаваемые ему вопросы про указатели в Си требуют от него непонятно какого ответа. Зачастую на собесах получается так.


          1. umbral
            09.05.2026 16:24

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

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


            1. hren_sobachiy
              09.05.2026 16:24

              Т.е. предыдущим работодателям была бесполезна, но они всё равно за неё исправно платили много лет?

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


              1. umbral
                09.05.2026 16:24

                Т.е. предыдущим работодателям была бесполезна, но они всё равно за неё исправно платили много лет?

                Bullshit jobs, например.


                1. hren_sobachiy
                  09.05.2026 16:24

                  В таком случае более половины айти - bullshit jobs.


              1. GidraVydra
                09.05.2026 16:24

                Т.е. предыдущим работодателям была бесполезна, но они всё равно за неё исправно платили много лет?

                Добро пожаловать в реальный мир.


              1. devmargooo
                09.05.2026 16:24

                А это разве новость, что довольно большая часть айтишников ничего не делают работе (реально, ничего) и им за это годами платят деньги? :)


        1. KoCMoHaBT61
          09.05.2026 16:24

          Процентов 80 людей, которые пишут на С++ не понимают, что такое указатели.


          1. YuriPanchul Автор
            09.05.2026 16:24

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


          1. hren_sobachiy
            09.05.2026 16:24

            Но при этом всё у них исправно работает? Мне бы такое не понимание!


            1. IUIUIUIUIUIUIUI
              09.05.2026 16:24

              Судя по количеству сегфолтов (и то в лучшем случае), use-after-free, и так далее, работает не всё и не очень исправно.


              1. hren_sobachiy
                09.05.2026 16:24

                Дык, закономерный итог найма эрудитов.


                1. IUIUIUIUIUIUIUI
                  09.05.2026 16:24

                  А в чём они эрудиты, если в плюсах они не шарят?


                  1. hren_sobachiy
                    09.05.2026 16:24

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


                    1. IUIUIUIUIUIUIUI
                      09.05.2026 16:24

                      если они в плюсах не шарят

                      Самое главное — напрочь игнорировать, что пишет собеседник.


                      1. hren_sobachiy
                        09.05.2026 16:24

                        Самое главное - не понимать иронии.


          1. sic
            09.05.2026 16:24

            Очень смелое заявление. Я слышал, что 80% сеньоров не могу за пять минут написать работающий FizzBuzz и это может и гиперболизированная, но похожая на правду вещь. А тут... хочешь - не хочешь при изучении C++ с указателями ты столкнешься, и если мы про raw pointers, а не про более новомодные штуки как weak_ptr, то каких-то тонких, но рядовых особенностей, которые можно не понимать или как-то неправильно интерпретировать в них просто нет. Ошибаться легко, но не по причине непонимания, а по причине их неудобства и не безопасности.


            1. IUIUIUIUIUIUIUI
              09.05.2026 16:24

              Ну тут смотря что такое «понимать».

              Я вот уверен, что >80% людей, считающих, что они понимают указатели, не понимают provenance, например.

              Можно ли сказать, что ты понимаешь указатели, если ты как-то зыбковато знаешь, зачем именно нужен std::launder, например?


              1. zebulon_stumpf
                09.05.2026 16:24

                Пипец, первый раз увидел std::launder ! Думаю в aerospace code если такое увижу - будет интересная беседа с “применителем сего” :)


                1. IUIUIUIUIUIUIUI
                  09.05.2026 16:24

                  Думаю в aerospace code если такое увижу - будет интересная беседа с “применителем сего” :)

                  В aerospace code пишут код без указателей или собирают код без оптимизаций?


                  1. zebulon_stumpf
                    09.05.2026 16:24

                    В рабочем цикле память не выделяется с использованиeм custom allocators. Точнее не выделяется вообще. Стараемся использовать разумный баланс по когнитивной нагрузке. Возможно в каком то месте и придется использовать когда то… но точно будет 10 строк комментария - зачем это делается…

                    std::launder is rarely needed in typical application code, but it is critical for low-level library development, such as custom allocators or implementing containers like std::vector or std::optional


                    1. IUIUIUIUIUIUIUI
                      09.05.2026 16:24

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

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

                      с использованиeм custom allocators. Точнее не выделяется вообще.

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

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


                      1. zebulon_stumpf
                        09.05.2026 16:24

                        Подготовка есть, нормальные new/malloc, часть памяти в специальных BRAM блоках “выделяется/организуется”, с помощью статических темплайтов с проверкой в compile time.
                        Про HFT:
                        Если все пишет один или два супер профи то подход оправдан, правда я думал там (HFT) уже все на уровне железа, FPGA и даже hard-copy ASIC.


                      1. IUIUIUIUIUIUIUI
                        09.05.2026 16:24

                        Подготовка есть, нормальные new/malloc, часть памяти в специальных BRAM блоках “выделяется/организуется”, с помощью статических темплайтов с проверкой в compile time.

                        Ну вот, значит, и вам всё это нужно, и вы можете тоже выиграть от тех же кастомных аллокаторов — да хоть даже на стенде залогать и проверить статистику по распределениям, или что-нибудь такое :]

                        Если все пишет один или два супер профи то подход оправдан

                        Когда как. Впрочем, лучшие команды, что я видел — там в core infra код писало действительно 2-3 человека (из которых один был спецом по кернелу и сетевым карточкам, например, а остальные полтора были спецами по плюсам).

                        Чем больше команда, тем почему-то хуже код и результат в целом.

                        правда я думал там (HFT) уже все на уровне железа, FPGA и даже hard-copy ASIC.

                        Можно совмещать: маленькую линеаризованную модельку гонять на FPGA, а на большом x86 рядом крутить обновление коэффициентов этой линеаризации из большой нелинейной сложной модели.

                        Но, впрочем, у меня тут искажённая выборка, так как я в HFT-контексте позиционирую себя специалистом по плюсам и по DSL'ям, и FPGA-only задачи (да и команды в целом) проходят мимо меня.


              1. sic
                09.05.2026 16:24

                И смотря насколько глубоко понимать. О Pointer Provenance как по мне любой недавний джун имеет представление, когда по ручкам настучали за reinterpret_cast везде где хочется и нельзя. std::launder на фоне этого вообще не должен никаких проблем вызывать (только решать), но есть тонкость, что его в C++17 ввели и есть прекрасный шанс ни в одном проекте его не увидеть. Я, пожалуй, чаще видел людей, которые про Strict Aliasing не слышали. Сложно ли это? Да не особо, было бы желание.


                1. IUIUIUIUIUIUIUI
                  09.05.2026 16:24

                  О Pointer Provenance как по мне любой недавний джун имеет представление, когда по ручкам настучали за reinterpret_cast везде где хочется и нельзя.

                  Я знаю очень мало мест, где стучат по рукам за reinterpret_cast (или за union-style cast, или за прочие подобные финты) именно с мотивацией про provenance, а не про «ну тут static_cast был бы понятнее». По какому-то странному совпадению туда почему-то очень тяжко найти C++-программистов, и зарплаты там предлагают выше рынка раза в три.

                  но есть тонкость, что его в C++17 ввели и есть прекрасный шанс ни в одном проекте его не увидеть

                  C++17 свершился 9 лет назад, конкретно std::launder был предложен почти ровно 10 лет назад.

                  Хз, как это написать аккуратно, поэтому напишу неаккуратно: не знаю, как надо относиться к работе и к своему профессиональному развитию, чтобы вещи, которые случились десять лет назад в твоей сфере, списывались под предлогом «да этому всего 10 лет, шансы этим ни разу не воспользоваться [ни на работе, ни дома] весьма высоки».


                  1. sic
                    09.05.2026 16:24

                     не знаю, как надо относиться к работе и к своему профессиональному развитию <...>

                    Так мир программистов на C++ он очень разный, чуть ли не полярный. Куча проектов еще живут, которые стартовали на c++03 из соображений производительности, но не той, где наносекунды считают, а где джава рантайм таскать с собой никто не будет а дотнет тогда еле шевелился. Всякий десктоп, локальный энтерпрайз, какие-то модули-числомолотилки, в которых аллокаций вообще нет, специализированная техника, и так далее. Там сидят люди и во всем этом варятся и никакой необходимости в новых компиляторах у них нет, а уж тем более и в новых стандартах. Все равно целиком проект переписать никто не даст, а исправлять по частям смысла мало. Ну и железо все время становилось быстрее, так что если не используешь квадрат, там где n log n хватает - уже большой молодец, а даже если используешь, ну когда (скорее если вдруг) тесно станет, то кто-нибудь починит.

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


                    1. IUIUIUIUIUIUIUI
                      09.05.2026 16:24

                      Так мир программистов на C++ он очень разный, чуть ли не полярный.

                      Ну да. И тут мы возвращаемся к исходному тезису:

                      Процентов 80 людей, которые пишут на С++ не понимают, что такое указатели.

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

                      То есть, это не профессиональное развитие, это профессиональная смерть.

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

                      Исправлять — возможно, да. Но писать новый код с новыми вещами — почему нет?

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

                      Throttle backoff;
                      while (!success)
                      {
                        co_await backoff;
                        co_await makeRequest();
                        …
                      }

                      добавив две строки для адекватной обработки недоступности сервиса, вместо того, чтобы делать из этого классический асинхронный ужас в стиле C++03 (или даже C++17).

                      Добавили в C++20 (или 23? забыл уже, но какая разница) более продвинутые non-type template parameters, так что теперь строками можно нормально оперировать в компилтайме — переписал свой ORM-фреймворк на это, чтобы все запросы в компилтайме генерировались, в итоге бинари стали кратно меньше, и работать даже стало чутка быстрее.

                      Добавили в C++23 (или 26? забыл уже, но какая разница) structured bindings can introduce a pack — вроде мелочь, а шаблонное метапрограммирование стало ещё проще, из своего ORM-фреймворка (куда уж тырпрайзнее и десктопнее) можно удалить много кода и ускорить время сборки, всякая хрень вроде boost.pfr, макросни или magic_get больше не нужна.

                      А часть бывших коллег вообще на эту ерунду еще и дома время не тратили.

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


              1. hren_sobachiy
                09.05.2026 16:24

                Я вот уверен, что >80% людей, считающих, что они понимают указатели, не понимают provenance, например.

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


                1. IUIUIUIUIUIUIUI
                  09.05.2026 16:24

                  Для этого надо для начала уметь распознать проблему, а с этим, эээ, проблемы.


                  1. hren_sobachiy
                    09.05.2026 16:24

                    Распознать как раз проще всего: в C++ "по-дефолту" всё UB, пока сам не перепроверил. :)


    1. firegurafiku
      09.05.2026 16:24

      на собесах […] процветают энциклопедические эрудиты

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

      они работают, вывозят сложнейшие проблемы

      Я не совсем понимаю, зачем вы заочно защищаете людей, не знающих базы своего технологического стека? Каким образом из неспособности ответить на простейшие вопросы по языку следует успех в решении “сложнейших проблем”?

      Race conditions в Верилоге — это базовое знание для работающих с Верилогом, этому учат студентов сразу же после введения в синтаксис. Это примерно так же обязательно, как для разработчика на C знать, что порядок вычисления аргументов функции не предписан стандартом и на него нельзя полагаться.

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

      • есть несколько разных типов для целых чисел/битовых шин (signed, unsigned, std_logic_vector и др.),

      • они не приводятся неявно друг к другу.

      Поэтому приведённая в статье портянка с resize буквально обязательна и до боли знакома любому VHDL-практику просто потому, что без неё код не скомпилируется.


      1. olartamonov
        09.05.2026 16:24

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

        Это обычный защитный психологический механизм, из базовых.

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

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


        1. hren_sobachiy
          09.05.2026 16:24

          Если специалист, успешено решавший задачи в промышленных масштабах, не проходит собес, то может потому что проблема не в специалисте, а в собесе?


          1. olartamonov
            09.05.2026 16:24

             успешено решавший задачи в промышленных масштабах

            О чём мы абсолютно достоверно знаем с его собственных слов.


            1. beasty4ever
              09.05.2026 16:24

              У человека может быть свидетельство о регистрации программы(там указан язык программирования) и это может быть известный в узких кругах продукт.

              Всё ещё будете гонять его после этого на собесе по языку?

              За недостаточную глубину знаний он получит отказ? 


              1. olartamonov
                09.05.2026 16:24

                Всё ещё будете гонять его после этого на собесе по языку?

                Да.

                За недостаточную глубину знаний он получит отказ? 

                Да.

                У человека может быть свидетельство о регистрации программы(там указан язык программирования) и это может быть известный в узких кругах продукт.

                Ещё у него может быть диплом о высшем образовании, в котором указаны часы изучения языка программирования и итоговая оценка. «Вы ещё будете гонять его после этого на собесе по языку?».


                1. beasty4ever
                  09.05.2026 16:24

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


              1. YuriPanchul Автор
                09.05.2026 16:24

                Я чисто из опыта знаю что все дипломы можно спокойно игнорировать. У меня на интервью был студент из Стенфорда который 10 раз переписывал дизайн то ди gearbox то ли сумматора с контролем потока данных:

                https://github.com/chipdesignschool/systemverilog-homework/blob/main/08_flow_control/08_05_gearbox_1_to_2_fc/08_05_gearbox_1_to_2_fc.sv

                https://github.com/chipdesignschool/systemverilog-homework/blob/main/08_flow_control/08_07_a_plus_b_using_fifos_and_double_buffer/a_plus_b_using_fifos_and_double_buffer.sv

                А еще была девочка из <опустим название университета> образование в котором стоит 90 тысяч долларов в год, которая на вот такой вопрос (как добавить в однотактовый процессор команду умножения используя блок умножения с латентностью два):

                https://github.com/chipdesignschool/systemverilog-homework/tree/main/09_single_cycle_cpu/09_02_cpu_mul_with_latency

                написала:

                sr_cpu cpu ( .clk ( clk * 0.5 ),

                Я тут подумал "бедные родители, потратили полмиллиона долларов на обучение чадо, а выхлоп вот такой"


              1. IUIUIUIUIUIUIUI
                09.05.2026 16:24

                Всё ещё будете гонять его после этого на собесе по языку?

                После этого — да. Даже если у него там написано «C++», то, может, у него там C++11 какой-нибудь полуторадесятилетней давности, а нам тут нужно, чтобы человек комфортно себя чувствовал с идиомами C++26. Если код программы закрыт, то совершенно непонятно, что именно и как именно там написано.

                На самом деле даже после гитхаба гонять — не самая плохая идея. Я как-то собеседовал одного человека, который в резюме написал, что он автор альтернативной prelude для хаскеля… хотя лан, мы тут про железо. Представьте себе, что он написал, что он автор альтернативной STL для C++, и у него даже на гитхабе есть проект, где он (и кто-то ещё) коммитил эту реализацию. Только вот на интервью спрашиваешь его про, в рамках аналогии, remove / erase idiom, а он не знает. Просишь написать простенький итератор для обхода массива в порядке «первый-последний-второй-предпоследний-...» — а он не может.

                Что он там писал? Непонятно.


            1. hren_sobachiy
              09.05.2026 16:24

              О чём мы абсолютно достоверно знаем с его собственных слов.

              Для проверки его слов есть СБ, есть официальные документы типа трудовой и договоров ГПХ, рекомендации профессиональных сообществ которым мы можем доверять.

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


              1. olartamonov
                09.05.2026 16:24

                Вы сейчас великолепно описываете замену 3-4 часов живого общения (считаем несколько этапов интервью) на примерно впятеро больший объём бюрократии.

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

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


          1. IUIUIUIUIUIUIUI
            09.05.2026 16:24

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

            Собсна, в комментариях под литкод-интервью-постами обычно это и выясняется: люди сами пишут «я в промышленных масштабах занимался уточнением задач и склейкой разных систем, а вы у меня тут деревья какие-то вертать просите».


            1. olartamonov
              09.05.2026 16:24

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

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


    1. GidraVydra
      09.05.2026 16:24

      Всё просто: они работают, вывозят сложнейшие проблемы.

      Как это следует из неспособности ответить на простейшие вопросы по стеку?


      1. hren_sobachiy
        09.05.2026 16:24

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

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


        1. YuriPanchul Автор
          09.05.2026 16:24

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

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


        1. umbral
          09.05.2026 16:24

          А эрудитов со знаниями и аутистов без таковых не бывает, поэтому эти случаи рассматривать не будем. Аутистов берем, эрудиты – на выход!


          1. hren_sobachiy
            09.05.2026 16:24

            Ну почему. Аутистов - писать код. Эрудитов - ходить на конференции пиарить компанию. Всем работа найдётся. Главное не перепутать.


            1. umbral
              09.05.2026 16:24

              Аутистов - писать код

              А не аутисты пойдут писать код к вашим конкурентам.

              Рынок рассудит, чей подход лучше.


              1. hren_sobachiy
                09.05.2026 16:24

                А не аутисты пойдут писать код к вашим конкурентам.

                Да это просто праздник тогда какой-то будет!


    1. Dimmirslr
      09.05.2026 16:24

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


    1. SingleDigitIq
      09.05.2026 16:24

      ок, вот только как это объяснить типичному каргокульту айти


  1. diakin
    09.05.2026 16:24

    Внушает, да...