ebanoe.dev
0
legacy_Жук_-··1 перегляд

В Comodo соискателям ебут мозги, предлагая за два дня написать антивирус на C++

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

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

Итак, поехали. Один мой коллега, так уж вышло, начал поиски работы по вакансии Middle/Senior C++ developer. Да-да, есть жизнь за пределами ангуляров. В какой-то момент к нему постучалась hr и предложила “интересную” вакансию в Comodo. Для тех, кто вообще «не в кугхсе», компания разрабатывает продукт Comodo Internet Security и достаточно
известна в мире кибербезопасности (не так известна, как ProtectMasters, но всё-таки):

https://ru.wikipedia.org/wiki/Comodo

И чуть больше про сам продукт можно найти здесь:

https://ru.wikipedia.org/wiki/Comodo_Internet_Security

У компании есть офис в Киеве, куда, собственно, она и хотела бы нанять ещё девелопера (или нескольких). Всё складывалось вполне обычно, но ВНЕЗАПНО закрутилось с новой силой.

Описание вакансии и требований

Для начала ознакомимся с описанием вакансии и требованиями к кандидату:

https://www.work.ua/ua/jobs/2118094/
http://telegra.ph/MiddleSenior-C-Developer-08-02

Первый мелкий факап бросается в глаза практически сразу:

картинка не сохранилась в архиве

Что же это за требования такие, в которых опыт работы от 2-х лет, а опыт коммерческой разработки под винду минимум 3? И я молчу про 5 лет опыта в плюсах. Но не будём доёбываться, в целом глянем на требования:

картинка не сохранилась в архиве

Если кратко, то кандидат должен знать C++, многопоточность, STL, COM/ATL. Остальное – будет плюсом.

“С хуя ли мы так всё детально обсасываем?” — спросит любознательный читатель. А потому, что комодо даёт кандидатам тестовое заданьице. И не какое-нибудь там на 30-40 минут, а, сука, целый проект.

Тестовое задание – напиши антивирь

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

Как правило, да что там – в 99,99 % такой код показать вы нихуя не сможете, потому что педалили продакшн за бабки и под NDA. А, значит, если покажете, то нарушите условия договора со своим предыдущим заказчиком. Контрибьютить в опенсорц за “спасибо” любят немногие. А даже если и любят, то фикс бага в три строчки вряд ли покажет твоё неимоверное владение паттернами и новым стандартом плюсов. Была тут статьейка на ебаненьком, как гнобить разработчиков – читай про опен репозитории там.

Вот мы и подходим к тому, что показать ты можешь только своё еблище в скайпе. Рекрутёру очень-очень жаль. Но выход есть – тестовое задание. Тебе-то с твоим опытом и навыками его сделать – как два пальца! И щедрая компания комодо готова ждать даже несколько дней, всё для тебя. Бери весло и хуярь только. И вот оно – тестовое – уже летит тебе в скайп:

You need to develop simple malware detector.

Scanner

Scanner is core component implemented as shared library (DLL). Scanner component must be able
to:
— Scan file by path
— Scan array of bytes
— Load signatures file

Implement appropriate methods in the scanner interface.
Malware detection algorithm is the following: if scanned file contains any of predefined byte
sequences, it is considered infected.
The sequences are stored in the regular text file separated by newlines, in the following format:
HexString.{GUID}

Examples:
01ABEDFF55.{ab306a70-0fd2-4b4b-84fe-f9ebd899d90f} EE21DEAD827739ACCD028FFC.{5c34b10f-3f6d-4bbb-b9ec-2faa1ee07660}
If appropriate sequence is found, scanner must return its GUID. Use file mapping to increase
scanning performance.

Client

Client is UI or console application. Client application must be able to:
— Uses Scanner component to recursively scan specific folder.
— Scanning progress must be displayed.
-Scanning must be performed in the thread pool (2 threads per CPU core).

Bonus tasks (optional)

— Use modern C++11, C++14
— Implement Scanner and Client as separate processes with an IPC.
— Implement Scanner component as COM object in an in-process or out-of-process COM
server using ATL. Use ATL classes in Client application.
— Unit tests for Scanner classes.
—————————————————————-
You are free to refer to any documentation/internet etc.
Task estimated time: 1 — 2 days.

В сухом остатке – новый стандарт, а также ATL/COM – не являются обязательными навыками, но будут плюсом. Про WinAPI не говориться вообще.

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

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

Выполнение тестового

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

Была сделана динамическая библиотека и исполняемый файл. Система сборки cmake, поддерживаемые оси – винда, мак и убунту. Было решено, что антивирус должен поддерживать как можно больше платформ, потому от решений типа COM/ATL стоит отказаться. Использовался новый стандрт С++ а также QtCore. Код покрывался тестами (gtest).

По функциональности всё было реализовано (сканирование, обход директорий и поддиректорий, отображение прогресса и т.д.) и работало на винде и убунте – за пару дней успел протестить только их. Было потрачено 4 вечера. Конечно, всё было не идеально, но товарищ отправил то, что было. Стал ждать фидбэка.

Для тех, кто не в курсе, что есть COM:
https://ru.wikipedia.org/wiki/Component_Object_Model

Простыми словами – это срань, прибитая к винде гвоздями и разработанная очень давно. В современных продуктах от неё отказываются, т.к. абсолютно непереносима на другие ОС.

ATL – срань, которая выходит из предыдущей срани, и нужна для использования первой:
https://ru.wikipedia.org/wiki/Active_Template_Library

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

Сука, фидбэк

Наконец, настал этот день – день фидбэка. Он пришёл – вот он:

Добрый день!Спасибо, получили Ваше тестовое задание. По нему уже пришел фидбек:
usage of QFile instead of native file mapping and QThreadPool instead of STL or native windows threads as well as many controversial design decisions force us to think candidate is not suitable for our project

Всё! 4 вечера были проёбаны. И теперь ты знаешь, что после создания экземпляра QFile всё пошло по пизде. Если прочитать более вдумчиво, то парни хотят, чтобы вместо кроссплатформенных решений ты юзал API операционной системы. И если с файловым маппингом это ещё куда ни шло, то с потоками в Qt был реализован паттерн map/reduce, который в новый стандрат STL пока ещё не вошёл. Есть только предложение, парни, proposal:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3446.pdf

Про many controversial design я вообще не понял – что это, блядь, за срань? Человек потратил 4 вечера, хули вы тут взагали по загалям пишете? Где нормальный фидбэк?

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

Фидбэк 2 – перезагрузка

Более полный фидбэк содержит на несколько строчек больше – рассмотрим их все.

1) Checker.cpp: Checker::Knuth_Morris_Pratt() throw std::runtime_error("Pattern not found");
Why «throw» instead for the «return bool»?

Для поиска сигнатур использовался алгоритм Кнута-Морриса-Пратта. И пацанов вообще не смутило, что использовался именно он. А должно было, ведь для поиска сразу нескольких сигнатур он не подходит, а подходит Ахо-Корасик:
https://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_algorithm

И парни из Comodo могли бы это заметить, но увы. Доколупались они к генерации исключения вместо возврата кода ошибки. Да будет вам, хлопцы-комодцы, известно, что «Чистый код» Роберта Мартина советует как раз генерировать исключения, ведь это добавляет в наш код наглядности. В общем, эта тема весьма холиварна, а вот эффективность алгоритмов – нет. Парень не успел реализовать Ахо-Корасик за 4 дня, а вы нихуя не отстрелили этого в своём же тестовом.

2) Dispatcher.cpp: void Dispatcher::SetGuid(const std::string& Guid) { memset(guidMemory, 0x00, GUID_SIZE); memcpy(guidMemory, &Guid[0], Guid.length()); }
What happened when Guid length will be greater then GUID_SIZE?
(Да, этот метод вызовется лишь после проверок на валидность строки
гуида, но все же)

Весь код не приводится здесь, как вы помните. Поэтому я кратко поясню ситуацию. У нас есть буфер фиксированоого размера, в него копируются данные из строки. Размер строки не фиксирован, поэтому для его определения используется метод length(). Здесь возможны 3 случая:
— строка длиннее буфера (то, чего парни опасаются), тогда может быть переполнение буфера;
— строка и буфер одинаковой длины, это нормальное поведение;
— строка короче буфера (парни не учли этот вариант).

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

Комодцы, рекомендую вам курс:
https://www.coursera.org/learn/software-security

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

3) Mapper.cpp: Mapper::Mapper(const char* fileName) auto tmp = file.map(0, file.size()); if (!tmp) { throw std::runtime_error("Unable to map file"); } buffer.reset(new uint8_t[file.size()]); — Недопонимание идеи маппинга файла?
memcpy(buffer.get(), tmp, file.size()); — А что если память для
buffer не выделилась?

Парней здесь смутило, что товарищ маппит файл в память, а потом из замапленного куска делает копию. Дескать, маппинг уже отображает файл в память, с ним и работайте. Давайте и тут разберёмся. Во-первых, такое копирование, даже будучи избыточным, вполне корректно работает. Во-вторых, ни один антивирь сейчас не работает с маппами только для чтения, потому что ему нужно делать эмуляцию, деобфускацию и всякого рода преобразования с исходным файлом. С маппингом для чтения не получится в него что-то записать – он же для чтения. Маппинг на запись похерит оригинал. Но! Тут ещё как-то
можно согласиться, что конкретно для этой задачи было лучшее решение. Тем не менее, представленное решение тоже было рабочим!

Теперь вторая их претензия, что будет, если память не выделилась. Комодцы сами говорят про стронг скиллз в плюсах, и так косячат. Если память не выделилась – будет исключение, и до memcpy дело не дойдёт. Почитайте, комодцы, вам будет полезно:
http://www.cplusplus.com/reference/new/operator%20new/

4) Scanner.cpp: const char* GetInfectedFileGUID(const char* path) Can return nullptr, valid GUID string and empty GUID (0000-0000-...)
And all these results will be printed as founded matches.

А вот этот пиздёжь даже комментировать тяжело. Как вы помните, антивирь работал, его тестировали. А значит – он собирался и запускался. Если бы комодцы достали руки из жопы и запустили эту поделку, то увидели бы лог, в которого таких “founded matches” почему-то не было. Возможно, потому, что они нихера не могут читать в статике код. Парни, что это – недопонимание С++?

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

Вывод.

1. Мопед не мой, я только написал статейку на ебаное. Сам код тестового я не писал, его писал другой человек. Но он положил на вас, Comodo, хуй, и я бы положил, если бы вы не начали стучать мне в linkedin с этой сраной вакансией.

2. Убеждаюсь, что делать какие-то тестовые, не поговорив с техническими специалистами “до” — пустая трата времени. Также как и трата времени – общение с фриланс рекрутерами. Конечно, хотелось бы общаться с рекрутерами компании напрямую, если уж без рекрутёров никак. Но могу сказать из своего личного опыта, что рекрутёры в больших компаниях заняты рассказами друг другу о том, как они на выходных в клубешниках с причмокиванием сосали писюны. На работу времени не остаётся. Вот и приходится нанимать сторонних фрилансеров.

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

4. Читатель, если ты захотел в Комодо, возможно, тебе не стоит тратить своё время на людей, у которых цель – просто поебать тебе мозги?

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

6. Рекрутёр! Не трать своё время – эта вакансия будет висеть вечно.

7. Редакция, жду ваших комментов. Интересно мнение со стороны. Кто виноват, кто прав, что
делать?

Комментарий ебаной редакции

Дорогой Анонимус! Спасибо за отличную статью. Шарящих в «плюсах» в редакции нет, поэтому по технической части остается лишь поверить на слово. Касательно тестовых заданий на несколько дней, то здесь, конечно, тонкий вопрос. С одной стороны, время всегда жалко, поэтому неплохо бы таки перед приступлением к заданию пособеседоваться с технарем, чтоб вы друг друга поняли и чтоб не было явного кидка. Большие задания (больше, чем на полдня, а то и на несколько дней) — это настоящая роскошь, несколько часов/дней жизни. Как правило, стороны понимают это, поэтому действует негласное правило — если решение худо-бедно работает, контора не ебёт мозги и берет человека на работу. Ведь по сути это работающая программулина, законченный мини-проектец. Даже если никто его никому впаривать небудет, это завершенный кусок работы, на который были затрачены личное время и усилия — это уже достойно уважения. Исходя из вышеперечисленного, можно сделать вывод, что либо у Комодовцев нет опыта в найме, либо им не горит и они перебирают кандидатами, пренебрегая их лояльностью и особо не парясь. Что ж, ну, будут, значит, и дальше разрабатывать своё Комодо ограниченными ресурсами. Другу же совет — если речь идет о драгоценном времени — лучше по сто раз переспросить HRшу на предмет контакта с технарем и четко дать понять, что личное время — на вес золота.

З архіву ebanoe · Опубліковано 17 серпня 2017 р.

Коментарі (272)

Сортування:ТопНовіСтарі
  • legacy_Фронтендер_от_Бога

    А шо такое C++?

    • legacy_Хипстер

      Язык для инвалидов умственного труда

      • legacy_Руби_лучше_всех

        я не пидар

        • legacy_БОГ_1

          Ты можешь написать что угодно, но мы знаем правду

          • legacy_фыв

            отвечу на поставленный собой же вопрос:
            1. Пункт «Описание вакансии и требований». Глупый наезд на требования к соискателям — он уныл более чем полностью. АМ считает, что за меньше чем 5 лет можно стать помидором в С++? Флаг ему в одно место, и пожелаем ему чтобы он с такими помидорами-С++ сам работал всю свою никчемную жизнь.
            2. Удивление что надо портатить «кучу» своего времени и сделать тестовое…. RLY? — кто считает также как и автор — можем поспорить на тему тестовых отдельно
            3. Удивление временным периодом — 1-2 дня — как будто кто то ожидает что надо будет прогать 24-48 часов — то что в тестовом задании пишеться за 4-8 часов с написанием черновика, его причесыванием-рефакторингом, и вылизыванием кода
            4. «Гарантии трудоустройства никто не даст»? RLY?
            5. Удивление что задание выдал HR — а кто его должен выдавать? Может тот кто раскажет как его делать? Если мозга не хватает понять что просят …
            6. Кандидат проебал 4 вечера — хотя срок был 2 дня. Кто ему доктор?
            7. Кандидат мог взять 2 выходных — если понимал что не успеет за 2 дня. Но он взялся за тестовое сразу, а не попросил тестовое на выходные (полное право кандидата, когда ему делать тестовое).
            8. Кандидат взял какую то Qt срань для низкоуровневых вещей, хотя про Qt в задании ничего сказано не было, а наоборот было пожелание использовать stl в котором всё это есть в новых стандартах, которые просили применять.
            9. Кандидат получил объективный фидбек, но к сожалению ЧСВ не позволило ему принять его (тем более ему расписали что к чему)
            10. Про алгоритмы я молчу — раз разрабы это не упомянули — там был вопрос не как эффективно накатать — а посмотреть что сможет сделать чувак вообще, а не как написать супер эффективно
            11. memset & memcpy в C++ коде? RLY? да ещё и с откровенной дырой и затиранием памяти. Ну и кроме того что есть замечательный класс boost::uuid, чтобы не передавать строку, на крайняк прописать std::array
            12. исключения в софте требующем быстродействия отключаются (но конечно вопрос спорный, тут вероятно если бы не было факапов выше, они могли бы поспорить на дальнейшем техническом собесдовании-обсуждении)
            13. Отсутсвие проверок кодов ошибок и состояния файлов и выделения памяти (в случае если код компилиться с отключенными исключениями)
            14. Чувак выделывается знанием cmake вместо знания С++

            Итог: то есть чувак прислал им код, повыделавывшись знанием Qt вместо запрашиваемого stl, но при этом у него в С++ коде всякие memcpy, memset и тот самый пресловутый new, и выдав в итоге нагора код, который может многократно «выстрелить в ногу»

            Вкратце для многих на будущее Qt — это для GUI, stl > boost > qt — если уж пошло, и надо стараться минимизировать использование последних, и брать только то, чего нет в stl

            ну кто так пишет на плюсах то в 2017?

            так что я могу сказать как С++ — КГ/АМ, ё-айти не хватает технического редактора чтобы не пропускать этот позор

            • legacy_фыв

              на тему тестовых:
              если ты реально крут (а это означает что ты с ЛЕГКОСТЬЮ выполнишь тестовое, знаешь за сколько, и знаешь что успеешь в запрашиваемые сроки), то это означает, что ты и правда его сделаешь, пройдешь этот тест и получишь офер, и вот этот офер ты можешь легко пододвинуть на свой собственный рейт * на количество часов потраченных. И получишь за год на целых (12*рейт*количетсвоЧасов) «убитых енотов» больше.

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

              но обычно тестовые больше 4-8 часов не даются, а я написал что подобные задания (как в тексте) делаются за 4-8 часов, что не так много — особенно если взять их на выходные (все равно на выходных кодить ты будешь — какая разница что?)

              и на последок, потратить 1.5 часа на техническое собеседование с малопонятными вопросами по скайпу и кодингом в google docs, а потом на ещё одно и скорее всего уже у доски лично + дорога, намного больше гемора и меньше удовольствия чем покодить «для себя» тестовое, развернувшись по полной — создав свою архитектуру, используя любимый кодинг-стайл и т.д.

      • legacy_Капитан_Говна_1

        Ангулярский выпиздок, нахуй пошел!

      • legacy_Ангулярщик

        Теперь я понял, почему Рыба и Жук не признались, что они кресты знают!

        😀😀😀

    • legacy_Scala-гребец

      Вот тут годный совет есть: http://labor-union.wikia.com/wiki/Lifehacks

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

      И еще там куча годных советов:

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

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

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

      И так далее.

      • legacy_грєбун

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

        • legacy_Лактобактерия

          > Если не брать на себя интересной работы НЕ входящей в твой нынешний рейт то он будет стабилен как могильный камень.
          Это и есть:

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

      • legacy_ЯбудуУстанавливатьВСЕигры

        «Также не тратьте ваше время на женщин»

        Uspeh yaNeTrachuVremyaNaZhenshin = new Uspeh();

        Uspeh zhenshiniNeTratyatVremyaNaMenya = new Uspeh();

        boolean hozyainZhizni = zhenshiniNeTratyatVremyaNaMenya.equals( yaNeTrachuVremyaNaZhenshin );

        System.out.print( hozyainZhizni );

      • legacy_Danu

        Да это же школьник писал. К тому хе, тупой, как пробка. А работе не имеет ни малейшего понятия. Вот, несколько мною выбранных «перлов»:

        Если вас заставляют писать документацию к вашему проекту или к части проекта, то не стоит разжевывать все такого состояния, чтобы понял первый встречный.
        Также регулярно сливайте к себе домой исходные коды всех проектов компании, новые версии клиентских баз и так далее.
        От мыслей «Ох, что же подумает мой начальник» и «Ох, что же подумают мои коллеги» вам нужно избавиться раз и навсегда.
        Купите себе бумажную книгу «Трудовой кодекс Российской Федерации» и держите ее все время на вашем столе на работе. Во время обеденного перерыва или вынужденного простоя перечитывайте у всех на виду данную книгу, вызывая приступ лютой бессильной злобы у вашего руководителя.
        Как выжить в РФ инженеру? … Во-вторых, завести себе ИП, а еще лучше — ООО.
        И никогда не соглашайтесь работать в штате. Работайте как инженер только в качестве ИП или ООО «Иван Иванов Инжиниринг».

    • legacy_Ушат_Помоев

      а эта такой язык программирования, на котором написан браузер, в котором ты спрашываиш «шо жэ эта такоя»… о как!
      PS: надеюсь шо вапроса про «шотакое бравзер» нипаследуид…. гыгы.

  • legacy_Хипстер

    Крестоебы хуже обезьян

    • legacy_Плюсовик

      Хипстота хуже крестоёба.

      • legacy_дядя_вася_2

        COM/ATL — это же говно мамонта, 10 лет назад это было актуально.

        • legacy_лёгкий_Митин_клитр

          COM/ATL — это и не кресты, это клоунада.

          • legacy_старый_хер

            ATL поделка для visualC, типа упрощающая разработку COM серверов. COM/COM+/DCOM всего лишь спопсоб имея контракт,(интерефейс) дернуть имплементацию на сервере, ну и проч. DCOM — был мертв, т.к. были секьюритные дыры. CORBA убила DCOM.

    • legacy_Ушат_Помоев

      конечно хуже! теорема доказывается из аксиомы «люди хуже животных» прямой подстановкой….

    • legacy_пейсатель

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

  • legacy_Тамада_собачьих_свадеб

    Антивирусные галеры всегда выделялись неадекватностью

    • legacy_онаним

      как и их продукты.

    • legacy_Бенис

      Хули взять с виндового быдла?

      • legacy_КлятыйКацап

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

  • legacy_пициносец

    Я понимаю только как формы тыцкать, по выходным читаю мануал по ангуляру.

    Такой код я не понимаю, статья говно.

  • legacy_anon_28

    >> Task estimated time: 1 — 2 days.
    Ебался недавно тож с одним тестовым неск. дней, которое было оценено в 32 часа. Хз на кого оно было расчитано, учитывая что в описании вакансии не было ни одного требования связанного с тематикой заданий. Видимо времена такие.
    >> Почитайте, комодцы, вам будет полезно
    Понятное дело никто нихуя читать не будет, но теперь хотя бы ясно почему Комодо всё-таки больше известен своей малварой.

    • legacy_Москаль

      У них IDE неплохая есть.
      И даже ее free-версия Comodo edit

  • legacy_Хипстер

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

    • legacy_Ноулайфер_с_зп_200_испытывающий_счастье

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

      • legacy_Туалетная_бугага

        в 95% компаний при упомянании метапрограммирования или ебучей рефлексии на меня смотрели вот так О_о

        что блять все эти люди там делают? какой долбоёб их нанял? нет ответа

      • legacy_Вася

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

  • legacy_3д_дизайнер_умывальника

    я как-то делал тестовое для пидаров из Ulysses Graphics — проебал около 30 часов времени в итоге даже не удосужились сказать причину отказа.

  • legacy_Ангулярщик

    Нихуясе, первый раз код на ебаном вижу

    😀😀😀

    • legacy_Хипстер

      Это не код, а параша какая-то.
      Вот код:

      import { Component } from «@angular/core»;

      @Component({
      selector: «krestoeb-neudachnik»,
      template: «krestoebi {{ kto }}»
      })

      export class AppComponent { kto = «lohi»; }

      • legacy_Ангулярщик

        Два яблочных смузи этому господину!

        😀😀😀

        • legacy_я_твой_код_и_маму_шатал

          О! перепись фронтенд — пидаров?
          CSS-ку вам смазаную реактом в жопу!

          Кто вас за программистов считает — в приличной компании клавиатуру таким протирать бы не доверили!

  • legacy_Ноулайфер_с_зп_200_испытывающиймсчастье

    Сейчас самый востребованный работник – это офисный раб, подмечает Владислав Быханов, партнер хедхантинговой компании Cornerstone: «Он послушен, ответственен, толков, знает свое дело и место».

    Все работодатели давно перестроились и охуели. Теперь они открыто говорят, что им нужны лохи аутисты, которые не строят из себя выскочек, а молча жрут говно.
    Хотеть карьеру и большую ЗП стало плохо, т.к. это мешает владельцу купить новый 911й.
    В таких условиях тестовые задания перестроены лишь на одно: объяснить всем вокруг, что они недостойны даже 100 тысяч в месяц (раньше зп по 170 в мск были)

    • legacy_anon_28

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

    • legacy_Кек
      • legacy_Scala-гребец

        Оттуда:

        Галеры любят паразитировать на вузах, встраиваясь в процесс обучения за взятки деканам и заманивая студентов к себе. Менеджеры и тимлиды с галер тщательно скрывают от студентов свою паразитическую сущность, гордо именуя себя ведущими мировыми IT-компаниями и рассказывая, что основной офис у них находится в США. Галерное руководство скрывает от студентов тот факт, что галера их будет десятилетиями продавать иностранным клиентам с наценкой в 3 — 3,5 раза, навариваясь на них. Работа на галере преподносится для студентов как безальтернативный путь, потому что второй вариант — это работать на российских заказчиков за копейки. Про третий путь (самостоятельный поиск постоянной удаленной работы в США на long-term-проектах и удаленный консалтинг по контрактам) тимлид и менеджер никогда не расскажут студентам. Деканов факультетов эта ситуация устраивает по понятным причинам. Вузы вообще не учат тому, как студенту-программисту можно начать работать самостоятельно, как общаться с клиентами, находить их в США удаленно, вести переговоры посредством email или Google Hangouts, подписывать NDA, подписывать контракты. Вузы не учат юридическим аспектам самостоятельной работы на иностранных заказчиков, не учат тому, какими бывают контракты (time and materials, fixed-price, cost-plus). Вузы не учат тому, что, например, три друга-студента, ударившиеся в различные смежные специализации, могут втроем начать вместе работать на американского клиента, минуя всякие галеры, либо же могут втроем устроиться на галеру, затем увести клиента (что ТК РФ не запрещает), затем сразу уволиться с галеры и продолжить втроем работать из своих квартир на того же самого клиента или его бизнес-партнеров.

      • legacy_Scala-гребец

        Еще оттуда:

        Никогда не прогибаться на собеседованиях и не снижать планку денежных требований, даже если тот, кто вас собеседует, открыл свежайший стандарт вроде C++14 и, читая его сверху вниз и задавая вам вопросы, обнаружил, что вы не знаете чего-то. Всего знать и помнить невозможно, и это нормально, ведь в реальной работе вы всегда сможете в случае необходимости открыть PDF-документ с тем же стандартом и быстро вспомнить или понять конкретную вещь. Сейчас во многих компаниях самый востребованный сотрудник — это аутист и офисный раб, который легко позволяет окружающим снижать его самооценку, поэтому вам никогда нельзя прогибаться ни под кого. Современные собеседования все больше напоминают ментовские допросы и представляют собой не отборы компетентных кадров, а акты психологического отбора рабов. На собеседовании специально обученные люди могут обвинить в незнании C++ даже Бьерна Страуструпа. Если вы поняли, что данной конкретной компании требуется не компетентный разработчик, а галерный раб, то тут же прерывайте собеседование и вежливо прощайтесь навсегда.

        • legacy_Кек

          Особенно это. Вангую, 95% программеров зафейлится на этом пункте:

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

          • legacy_уцкжцудьезщаьзацуа

            Дев, даже синьор, имеет такое же отношение к архитектору, как морская свинка к морю.

  • legacy_У_станка

    Исходя из написанной хуйни кандидата, «мидсеньора» блядь, прохуесосили совершенно по делу.

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

    • legacy_Ноулайфер_с_зп_200_испытывающий_счастье

      Написано слабо, но не в этом дело.

      • legacy_У_станка

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

    • legacy_Вася

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