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


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


Оформление вакансии


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


Для начала, никогда не указывайте зарплату — соискатель должен мечтать работать в вашем стартапе ООО "Горим", и для него не должно быть важно, сколько денег ему заплатят. И вообще, зачем вам меркантильные сотрудники?


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


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


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


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


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


Обязательно напишите, что скоро вы переезжаете в США или куда-нибудь ещё, куда обычно хотят программисты. Это безопасно. "Скоро" — это понятие растяжимое, обычно означает "как только мы внезапно получим кучу денег и будем купаться в них как Скрудж Макдак". Ну и что, что это в лучшем случае в перспективе пары лет. Может же случиться. Везёт же некоторым! Так что ваш стартап — убийца Фейсбука и Гугла одновременно — обязательно взлетит.


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


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


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


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


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


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


Не забудьте написать в описании вакансии, что у вас есть печеньки. А ещё Agile и Scrum. Это так оригинально!


Автоматическое письмо откликнувшемуся


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


Поиск соискателей


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


  • Не совпадает зарплатная вилка в два раза? Не беда — вдруг он завышает требования или очень захочет работать в вашем стартапе?
  • Хочет на ведущего разработчика, а у вас вакансия Джуниора? Ну так пускай губу закатит.
  • Хочет заниматься бэкендом, а у вас фронтенд? Ну так выше же говорили, что разработчик должен быть только фуллстыком (или как оно там. Короче, должен уметь Windows переставить и кофемашину починить).

В общем, у вас и так мало времени, а ваш KPI измеряется количеством соискателей, которые вы найдёте. Шлите всех, и пускай там уже высоколобые разработчики разбираются, подойдёт ли Javascript разработчик под Java, или 1C разработчик под C#.


Работа с соискателем


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


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


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


Тестовые задания


Помните про тестовые задания! Надо же как-то людей фильтровать. Принято давать три категории тестовых заданий:


  1. Типовое задание, скачанное с интернета. Не беда если оно скучное — соискатель к вам не развлекаться идёт. Не имеет значения, что решение уже опубликовано на сотне ресурсов — наверняка же искать не станет. А на случай если станет — добавьте в тестовое задание таймер — все говорят мол “креатора дедлайн возбуждает”.
  2. Какое-нибудь сложное задание, чтобы соискатель показал себя во всей красе. Рассчитывайте, чтобы он потратил на него дня 2-3. В конце концов, он хочет у вас работать или нет?
  3. Последняя категория, которая в последнее время теряет популярность — взять некую текущую задачу вашей компании и попросить соискателя её сделать. Так сказать, протестировать в условиях приближенных к боевым. А на самом деле, можно использовать такие задания как бесплатный аутсорс. Круто же! Странно, что в последнее время вижу такие тестовые задания всё реже.

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


Личные собеседования


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


  • Вы же знаете, что в гости прилично опаздывать на 15 минут? Ну и здесь так же. Начинайте собеседование через 15-30 минут после назначенного срока, это даст кандидату лучше подготовиться и успокоиться.
  • Если собеседование подразумевает подключение дополнительных людей, начинайте их искать в момент наступления собеседования. Не надо людей отвлекать заранее.
  • Для собеседования нужно хотя бы 4-5 человек, кроме самого соискателя. Им же потом вместе работать, так что пускай его оценивает вся команда, на первом же собеседовании. Они же просто сидят на стульях весь рабочий день — так пускай потратят его с пользой. Если вы привлекаете 5 человек и проводите хотя бы 3 полуторачасовых собеседования в неделю, то за неделю они проводят с пользой уже 3х5х1.5=22 часа, то есть почти три человеко-дня.
  • Не стоит тратить время на то, чтобы заранее вспомнить или приготовить резюме кандидата. В первые полчаса все и так вспомнят, кто он, на какую позицию пришёл, и он расскажет своё резюме ещё раз. Чтобы замаскировать то, что вы потеряли его резюме, можно попросить рассказать его резюме своими словами. Это солидно и многое покажет, в том числе кандидату.
  • Плох тот программист, который не готов писать код на бумажке. Пускай покажет, что может не только писать код в среде, которая всё за него делает. Причём писать обязательно нужно рабочий код на вашем конкретном языке, а не какие-то там Блок схемы (ну причём тут Александр?).
  • Наверняка соискатель пришёл к вам с ощущением, что он крутой и достоин многого. Даже если так, вам явно не хочется за него переплачивать — так что найдите в его резюме что-то, чем он занимался десять лет назад, и задайте вопросов посложнее. Пускай поймёт, что у вас он может только унитазы чистить.
  • Собеседований обязательно должно быть несколько. Например, первое происходит с HR, второе с разработчиком, третье с лидом, четвёртое со всей командой, и пятое — с генеральным директором. Никуда не торопитесь, соискатель — он не волк, в лес не убежит.
  • Делайте длительные паузы между каждым этапом собеседования, лучше не менее недели. Это даст возможность тщательно оценить кандидата и покажет, что у вас серьёзная компания, а не какая-то шарашка.
  • Если нужно перенести время собеседования, то сделайте это за полчаса до прихода кандидата. Ну нельзя же учесть заранее все возможные факторы.
  • Если кандидат сказал что-то, что вы не ожидали, то можно дружно посмеяться. Это очень разряжает атмосферу!
  • Если собеседование удалённое, то попросите соискателя включить камеру, а сами не включайте. Это ведь вы на него смотрите, а не он на вас.
  • Всякая роскошь вроде гарнитуры совсем не обязательна для собеседования. Эхо, шумы офиса, переговоры вокруг — это нормальная рабочая обстановка.
  • Если вам потребовалось во время собеседования выйти — смело делайте это. Можно оставить кандидату задачку и уйти на час-два. Пускай неспешно её решает и попьёт растворимый кофе из стаканчика, который ему любезно предложили.
  • Обязательно первым делом спросите у кандидата, что он знает о вашей компании. Если он не производил изыскания с получением информации о всех её продуктах и людях — значит, он в вас не заинтересован! В таком случае, не рассказывайте ничего сами.
  • Чуть не забыл. На любом собеседовании обязательно нужно спросить про паттерны. И попросить реализовать синглтон. Ну или хотя бы попросить написать какую-нибудь рекурсию или что-нибудь про числа Фибоначчи. Все серьёзные компании это спрашивают. Наверное, нужно было поставить это первым пунктом.

Обязательно запросите рекомендации кандидата на текущем месте работы от его руководства. А то мало ли что.


Если вам понравился кандидат, и вы во всём сошлись, то не забудьте поторговаться. У вас ведь в описании вакансии указано “до ххх”. Так что вы никого не обманете, если предложите “ххх:2”. Люди — это как арбузы на рынке, только люди. Принципы торговли те же. Если после вашего предложения соискатель пропал — ну, значит, он просто не мотивирован с вами работать и сам виноват.


А если кандидат не соглашается принять ваше предложение, то расскажите, что ситуация на рынке сложная, работу найти не так просто, и у вас уже есть другие согласившиеся на это место кандидаты — пусть испугается и примет ваши условия!


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


Лайфхак: в письме кандидату можно задать кучу вопросов и даже попросить рекомендовать кого-нибудь, и если в конце написать "Заранее спасибо", то можно уже не тратить время на ответ!


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


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


Следуйте этим советам, и вы обязательно не найдёте себе нужного разработчика!




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


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


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


Указывайте в комментариях свои антипаттерны — давайте дополним список!


UPD. Дополнено антипаттернами от kyb27, White_Scorpion, samuelsh, Idot, yefrem, michael_vostrikov, santanico.

Со сколькими из указанных антипаттернов вы уже сталкивались в поиске работы?

Проголосовало 648 человек. Воздержалось 276 человек.

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

Поделиться с друзьями
-->

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


  1. habradante
    20.06.2017 14:48
    -3

    Недавно соискатель приходил. Рассказывал как он увлечен блокчейном, биг датой и другими модными технологиями. Рассказывал про самостоятельную реализацию библиотеки для MapReduce, про всякие интересные домашние проекты. З/п хотел под стать увлечениям.
    А потом я спросил чем абстрактный класс отличается от интерфейса. И стало неинтересно, скучно, и дальше как-то не заладилось.


    1. zagayevskiy
      20.06.2017 15:30
      +17

      чем абстрактный класс отличается от интерфейса

      а в каком языке?


      1. mayorovp
        20.06.2017 15:40
        -8

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


        1. zagayevskiy
          20.06.2017 15:44
          +12

          Они будут отличаться даже для Java 7 и 8. Если уж говорить не про "ну, примерно вот так они отличаются", а про чёткий полный ответ.


          1. mayorovp
            20.06.2017 15:59
            +13

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


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


            Что я забыл?


            1. svr_91
              20.06.2017 16:12
              +3

              > не являющиеся полями
              А статическое константное поле? Или это не считается полем?


              1. mayorovp
                20.06.2017 16:23

                Статический член — он почти глобальный, просто привязан к классу. Поэтому когда говорят о члене класса, обычно подразумевают именно нестатические члены. Да, статические константные поля в Java вроде как допустимы, как и в C++.


            1. zagayevskiy
              20.06.2017 16:20
              +3

              Сказали лишнего и не раскрыли исключений (про java 8 и С++). Ну и вы, вероятно, не знаете все языки в мире. Я, например, не могу точно сказать, что исключение только java 8. А в С++ вообще нет интерфейсов. Ну и так далее. Лучше уточнять, о каком языке идёт речь сразу.


              1. mayorovp
                20.06.2017 16:25
                -3

                В С++ обычно интерфейсом называют абстрактный класс, все члены которого являются открытыми чисто виртуальными (=абстрактными) методами.


                1. zagayevskiy
                  20.06.2017 16:30
                  +9

                  Ну вот видите, мой первый вопрос


                  а в каком языке?

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


                  1. freeart
                    21.06.2017 09:47
                    +5

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


                  1. il--ya
                    27.06.2017 12:58
                    +1

                    Мне кажется, что одна из целей собеседования в этом и состоит — убедиться, что работодатель и работник разговаривают «на одном языке». Так что такой открытый вопрос, или даже точнее тема для обсуждения, на собеседовании — это нормально, при условии, что ответ оценивает специалист, а не HR по бумажке.


                1. lagranzh
                  21.06.2017 03:57
                  +2

                  pure virtual method может иметь реализацию. просто он обязательно требует перегрузки.


                  1. zagayevskiy
                    21.06.2017 12:19

                    А можно поподробее? pure virtual — это же


                    virtual void f() = 0;

                    Давненько не писал на С++, но вроде она не может иметь реализацию в этом же классе.


                    1. svr_91
                      21.06.2017 12:24

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


                      1. zagayevskiy
                        21.06.2017 12:49
                        +2

                        Действительно.


                        Код
                        #include <iostream>
                        class c {
                            public: virtual void f() = 0;
                        };
                        
                        void c::f() {
                            std::cout<<"c";
                        }
                        
                        class d: public c {
                        public:
                            void f() {
                                c::f();
                                std::cout<<"d";
                            }
                        };
                        
                        int main() {
                            d x;
                            x.f();
                            return 0;
                        }
                        

                        Вывод: cd


              1. tundrawolf_kiba
                20.06.2017 16:34

                Вроде в Kotlin в интерфейсе тоже можно описать реализацию методов, если память не подводит.


              1. DistortNeo
                21.06.2017 12:07
                +1

                А в С++ вообще нет интерфейсов

                В C++ Builder, интерфейсы, кстати, есть.


                1. zagayevskiy
                  21.06.2017 12:15
                  -1

                  Instead of using the class keyword, interfaces are declared using interface. interface is a macro that maps to the class keyword. It is not necessary, but makes it clearer that the class is intended to act as an interface.
                  http://docwiki.embarcadero.com/RADStudio/Berlin/en/Inheritance_and_Interfaces

                  Я так понимаю, никто не запрещает вам в этом "интерфейсе" делать всё то, чего делать в нём не надо.


                  И даже больше:


                  #define __interface struct


                  http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Delphi_Compatibility_Macros#interface

                  И это ещё раз подтверждает мой тезис — важен контекст(конкретный язык). Потому что "программист на С++Builder"(а встречаются и такие) скажет, что ничем они не отличаются.


                  1. DistortNeo
                    21.06.2017 13:45
                    +1

                    Разница в реализации компилятором. Для MSVC, GCC интерфейсов, понятное дело, не существует.


                    В Delphi же есть отдельная сущность — interface. Чтобы на C++ Builder можно было писать код с тем же функционалом, что и на Delphi, в C++ Builder абстрактные классы, удовлетворяющие признакам "интерфейса", обрабратываются специальным образом.


                    1. zagayevskiy
                      21.06.2017 13:54
                      -1

                      Где пруфы, Билли?
                      Я свои пруфы привёл — если судить по офф докам, то ничем они не отличаются, и компилятор тут вообще не при чём.


                      1. Jef239
                        21.06.2017 15:05

                        Интерфейс в Java, Delphi и С++Builder — это COM-interface. То есть под капотом — там всякие QueryInterface, AddRef, Release, своя собственная (стандартная для COM) vTable и так далее.

                        А то, что C++ Buider опознает интерфейсы по INTERFACE_UUID — это детали реализации. В любом случае для Delphi и С++Builder интерфейс — это класс со второй таблицей виртуальных методов, выполненной в стандарте COM. И минимум 3 метода, неявно добавленных в класс — QueryInterface, AddRef, Release,

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


                        1. zagayevskiy
                          21.06.2017 15:15

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


                          оффтоп

                          Какое счастье, что я ушёл от этого. Делфи, билдер, бррр. Ура.“


                          1. Jef239
                            21.06.2017 15:41
                            -4

                            Угу. Насколько я знаю, в Java каждый класс является COM-интерфейсом.

                            А сказать что простую вещь. Не лезьте в бутылку при виде #define __interface struct. COM-интерфейсы опознаются по INTERFACE_UUID. И к обычным языковым интерфейсам имеют небольшое отношение.

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

                            Наследовать реализацию вы можете у класса. У интерфейса нету реализации. Интерфейс, в понимании Delphi — это COM-interface, то есть таблица методов. Канонически оно записывается на IDL. В билдере — это будет специфческая структура с GUID.

                            А класс — это реализация интерфейса.

                            Я понимаю, это сложно. Особенно в варианте билдера.

                            Но это намного проще, чем работать с COM-интерфейсасми из чистого Си.


                            1. zagayevskiy
                              21.06.2017 15:43
                              -1

                              Вы мне что доказать-то хотите?


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

                              бинго.


                            1. zagayevskiy
                              21.06.2017 15:54
                              +2

                              в Java каждый класс является COM-интерфейсом.
                              Первый раз такое слышу. Технология от MS в Java? Вы точно ни с чем не путаете?


                              1. Jef239
                                21.06.2017 16:57
                                -6

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

                                Но пруфа я вам быстро не найду. Сам где-то читал лет 15-20 назад.


                                1. zagayevskiy
                                  21.06.2017 17:02
                                  +3

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


                                  1. Jef239
                                    21.06.2017 17:31
                                    -4

                                    Судя по вики — 2 года назад ещё была вполне жива.

                                    По аналогии: атомные ледоколы и подводные лодки — в России. Хотя лишь в нескольких поселках городского типа (вроде Гаджиево) вы можете их увидеть воочию.


                                    1. zagayevskiy
                                      21.06.2017 18:10
                                      +3

                                      Cудя по вики,


                                      Microsoft settled the lawsuit with Sun and discontinued its Java implementation.

                                      Это не называется "2 года назад была жива". Кроме того, это какая-то сторонняя реализация, не имеющая ничего общего с миром Java. Кончайте нести чушь, в общем. А то я могу тоже написать свою реализацию JVM и в ней навертеть всякого, и потом таким как вы впаривать — в Java есть то и это.


                                      1. Jef239
                                        21.06.2017 18:59
                                        -7

                                        Ну тогда впаривайте дальше, что в России нету атомных ледоколов и космических ракет лишь потому, что ни в одном крупном городе вы их не увидите. :-)

                                        Вы — не микрософт. И ваша личная реализация JVM никому интересна не будет.

                                        Судя по вики "Microsoft began bundling a standalone JVM in the Minecraft video game in September 2015", так что 2 года назад была вполне жива.

                                        В любом случае, мне неинтересен «мир Java». COM-интерфейсы вроде ни в один язык программирования не вошли в качестве стандарта. Они всегда в реализации. И только — под windows. Что настолько противорчеит идеями Java, что ни о каком «мире Java» речи не идет.

                                        COM-интерфейсы — это «мир Windows». И именно об реализациях COM-интерфейсов в языках программирования я вам и писал.


                                        1. khim
                                          21.06.2017 19:06
                                          +6

                                          Судя по вики "Microsoft began bundling a standalone JVM in the Minecraft video game in September 2015", так что 2 года назад была вполне жива.
                                          А чукча читать умеет, нет? Вы бы окончание этой фразы прочитали, что ли: The JVM included in Minecraft is based on an official Oracle distribution

                                          Нет никакой Microsoft'овской JVM уже давно. Sun заявил что именно из-за того, что Microsoft сдлела классы Java COM-обьектами его поделие нарушает лицензию на Java, называться Java не может и должно быть отозвано. Microsoft согласился.


                                          1. Jef239
                                            21.06.2017 19:14

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


                                        1. zagayevskiy
                                          21.06.2017 19:11
                                          +1

                                          Вы влезли со своими СОМ-интерфейсами абсолютно не в тему. При этом заявили, что они используются в Java. Если вам не интересен мир Java — не надо делать заявлений о нём на основании какой-то странной реализации JVM. JVM — это не Java. К Java ваши ненаглядные СОМ-интерфейсы отношения не имеют. К интерфейсам, обсуждаемым в треде — тоже.


                                          1. Jef239
                                            21.06.2017 19:13
                                            -5

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


                                        1. zagayevskiy
                                          21.06.2017 19:18

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


                                          1. Jef239
                                            21.06.2017 21:23
                                            -5

                                            Вы утверждаете, что того, что вы не видели вживую — не существует. Так вот, ни атомных ледоколов, ни космических ракет — вы не видели вживую. По вашей логике их нет?

                                            И ещё раз повторю, что COM-интерфейс — это классический пример интерфейса. Причем независимый от языка программирования.


                                            1. mayorovp
                                              21.06.2017 21:37
                                              +1

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


                                              1. Jef239
                                                23.06.2017 22:43
                                                -1

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


                                            1. zagayevskiy
                                              21.06.2017 22:17
                                              -1

                                              Я такого не утверждал. Подмена понятий. См. мой комментарий про ракеты.


                                              Мне плевать на ваш СОМ, за державуджаву обидно.


                                  1. webkumo
                                    23.06.2017 15:40

                                    Sun в своё время запретило чужие jvm из-за таких вот казусов...


                                    1. khim
                                      23.06.2017 16:24
                                      +2

                                      Sun никогда не запрещал «чужие» JVM. IBM J9, JRockit — живут и здравствуют (последнее, кстати, теперь стало немного напоминать шизофрению, так как сейчас её продаёт Oracle).

                                      Что Sun запретил — так это вот как раз то, про что тут говорил Jef239: классический EEE — «зачем для этого городить новую технологию, если есть собственная?» (держа мысль «в скобках» — не лучше ли послать всех, у кого «своей собственной технологии» в жопу и занять весь рынок?)

                                      Договор у Sun (теперь у Oracle) всегда был следующим: добавлять какие-то фичи — имеет полное право. Менять (и, уж тем более, удалять)? Ни в коем разе…


                                      1. webkumo
                                        24.06.2017 00:55
                                        +1

                                        кхм… вы правы — не совсем точно выразился. Запретила sun не реализации jvm вообще, а различные кастомы, не соответвующие спекам.


                                    1. Jef239
                                      23.06.2017 22:45
                                      -3

                                      Dalvik запрещен? Теперь буду знать, что у меня в мобильнике — запрещенный софт. :-)


                                      1. DrPass
                                        23.06.2017 23:28
                                        +2

                                        Фишка в том, что Dalvik — не JVM.


                                      1. khim
                                        24.06.2017 00:10
                                        +1

                                        Скорее всего у вас в телефоне ART, а не Dalvik — и да, это не JVM, как вам уже сказали. И да — Oracle очень старался доказать, что это — запрещённый софт, но… не смог. Потому что в отличие от Microsoft при разработке Google всё делал независимо и никаких договоров с Sun'ом не заключал…

                                        Был бы договор — скорее всего произошло бы то же самое, что и с MS JVM…


                                        1. Jef239
                                          24.06.2017 02:24
                                          +1

                                          ART впервые появился в Android 4.4,, а у меня — Андроид 1.5 (!!!), зато с QWERTY.

                                          Гик-порно для некрофилов
                                          image


                                          1. DrPass
                                            24.06.2017 18:42
                                            +3

                                            Хорошо, это не «виртуальная машина Java» (JVM), это «виртуальная машина, выполняющая код на языке JAVA»

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


                                            1. Jef239
                                              24.06.2017 19:33
                                              -1

                                              Вы хоть одну виртуальную машину писали или правили? :-)))

                                              Байт-код виртуальной машины, ровно так же, как и код реальной машины — языконезависим в очень широких пределах. Сколько там языков умеет исполняется стандартным байткодом JVM? про пяток я точно слышал. И это не компиляция в java, это компиляция именно в стандартный байт-код.

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

                                              Так что это именно VM, предназначенная для исполнения кода на языке JAVA. Просто исполняющая байт-код своего стандарта.

                                              P.S. я соавтор нескольких FORTH-систем, а в форте — нету стандартного бйаткода. каждая реализация — делает его самостоятельно.


                                              1. DrPass
                                                24.06.2017 19:56
                                                +2

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

                                                Вы ошибаетесь :) Правильный ответ — ноль. Байт-код никакие языки не поддерживает, и не исполняет. Это, по сути, машинный язык абстрактной ЭВМ, ну или точнее, язык ассемблера (в каком-то бинарном представлении). Язык ассемблера ведь не умеет исполнять С++? Вот и байт-код ничего про Java не знает.
                                                С другой стороны, Java может и частично транслироваться в нативные инструкции процессора.

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

                                                P.S. я соавтор нескольких FORTH-систем, а в форте — нету стандартного бйаткода. каждая реализация — делает его самостоятельно.

                                                Я не буду с вами спорить про реализацию FORTH-систем, чесслово. Но я точно вижу, что про реализацию JVM вы не в курсе ;) Не нужно их путать. В FORTH-системах язык и исполняющая среда, насколько я помню — одно целое. Верно? В JVM/.NET/Dalvik исполняющая среда не связана с языками программирования вообще. Это просто некий абстрактный компьютер, который умеет выполнять набор команд какого-то низкоуровневого языка, будь-то байт-код JVM, MSIL для дотнета или байт-код Далвика. Спецификация каждой машины определяет этот самый набор команд, допустимые типы данных и т.д. В ней нет ни джавы, ни сишарпа.
                                                А всё остальное, на чём пишутся программы живыми человеками, это уже отдельная от машины штука, компилятор с высокоуровневого языка в набор команд виртуальной машины.
                                                Вот Dalvik — это другая виртуальная, с другим набором команд, с другой спецификацией, поэтому она не имеет ничего общего с JVM. Ну да, для неё тоже написан компилятор с языка Java. В принципе, вы можете, как и упоминали, сделать компилятор с языка Java напрямую в x86. Это технически возможно, юридически не запрещено, на практике, наверное, будет невостребовано, но just for fun почему бы и нет.


                                                1. Jef239
                                                  24.06.2017 20:14
                                                  -1

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

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

                                                  В FORTH-системах язык и исполняющая среда, насколько я помню — одно целое.

                                                  Не всегда. Как пример — игрушка Ну-погоди из моего детства. Там только исполняющая среда форта.

                                                  В JVM/.NET/Dalvik исполняющая среда не связана с языками программирования вообщe

                                                  Не понимаю, о чем вы спорите, я вам ровно это и написал.

                                                  Ну да, для неё тоже написан компилятор с языка Java.

                                                  Насколько я знаю, вы ошибаетесь. Трансляция в Dalvik идет со стандартного байткода. Если отвлечься от тонкостей, "Dalvik Virtual Machine способна переводить байт-коды Java в коды своего собственного формата и также исполнять их в своей виртуальной среде. "


                                                  1. DrPass
                                                    24.06.2017 20:40
                                                    +1

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

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

                                                    Нет, Dalvik байт-код JVM не понимает. Просто в SDK есть кросс-компилятор.
                                                    Как пример — игрушка Ну-погоди из моего детства. Там только исполняющая среда форта.

                                                    Хм. Интересно. А где про это можно почитать?


                                                    1. Jef239
                                                      24.06.2017 21:26

                                                      Нет, Dalvik байт-код JVM не понимает. Просто в SDK есть кросс-компилятор.

                                                      Пруф я вам дал. И не вижу ничего нереального в JIT-компиляции. Скорее всего так и было раньше, а потом — решили, что удобней компилировать все сразу. Вот вам ещё цитата "Сейчас Android-код выполняется в Java-машине, созданной Google специально для мобильных устройств, при этом он «на ходу» преобразуется в аппаратный (Just-In-Time Compilation)"

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

                                                      А если интересна технология, как получить только исполняемое приложение — то это как раз просто.

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

                                                      Ассемблерное ядро форта — это 3 килобайта кода. Все остальное — на самом форте. Так что сократить 14 килобайт полной форт-системы с редактором и компилятором в 6-7 килобайт приложения — не так сложно.

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

                                                      Можно ещё и выкинуть имена из словаря и оставить только код. Это тоже не сложно.

                                                      P.S. Для понимания. Слово форта — это процедура + её имя + поле для линковки слов в список.
                                                      Словарь — это связный список слов, то есть набор программ. Выбор нужной программы — это набор её главного слова (аналога main).


                                              1. khim
                                                24.06.2017 20:42

                                                А если запретить часть языковых возможностей — то можно вообще получить исполняемый модуль в нативных инструкциях процессора.
                                                Если «запретить часть языковых возможностей» — то это будет уже не Java. В частности в Java есть такая штука, как ClassLoader, который позволяет вам, ну, например, генерировать классы «на лету» и исполнять их (причём это не теоретическая возможность, есть библиотеки, которые это реально используют, в частности библиотеки работы с регулярными выражениями это делают).

                                                Dalvik и Art ничего этого не умеют и потому JVM не является. На них нельзя запускать произвольные программы на Java — только ограниченное подмножество.

                                                С тем же успехом можно говорить, что какой-нибудь Microsoft C 3.0 — это компилятор C++17. Ну да, часть фич не реализована — ну так и что теперь?

                                                Так что это именно VM, предназначенная для исполнения кода на языке JAVA. Просто исполняющая байт-код своего стандарта.
                                                Так не бывает. Бывает VM исполняющая код на языке Java, а бывает — исполняющая байт-код своего стандарта. Но если ваша VM не умеет исполнять байт-код Java, то это — не JVM.


                                                1. Jef239
                                                  24.06.2017 21:37

                                                  Если «запретить часть языковых возможностей» — то это будет уже не Java

                                                  Если вам отрезать палец — это будете вы или уже не вы? А если ногу? Сколько нужно вам отрезать, чтобы это были уже не вы? :-)))

                                                  Диалект языка — это не отдельный язык. Например полный паскаль — огромная редкость. Самый распространенный диалект паскаля — не имеет пары операций (get и put с записями на файлах). И тем не менее — все его зовут паскалем.

                                                  На них нельзя запускать произвольные программы на Java

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

                                                  Так что возвращаемся к примеру с пальцем. :-)

                                                  Бывает VM исполняющая код на языке Java,

                                                  Не бывает. JVM исполняет байт-код и достаточно независим от языка, с которого этот байт-код компилился. Java — это не BASIC, исполнения исходного кода в режиме интерпретации каждой строки не будет.

                                                  Это некоторая условность, что если байт-код как у Sun — так это JMV, а если нет — это VM for Java (VMJ). Тут важнее юридический смысл — то есть как обойти лицензионные ограничения sun. И вот юридически — да, это не JVM, это VMJ.


                                              1. khim
                                                24.06.2017 20:49
                                                +2

                                                Сколько там языков умеет исполняется стандартным байткодом JVM? про пяток я точно слышал.
                                                Вы не в ту сторону импликацию поставили. Вопрос не в том сколько языков может быть всунуто в байткод Java, а в том, сколько байткодов должна принимать JVM.

                                                Ответ: как минимум один — стандартный Java-байткод должен приниматься, так как без этого вы java.lang.ClassLoader не реализуете. И вот ровно-таки этого, обязательного требования ни Dalvik, ни Art «не умеют».


                                                1. Jef239
                                                  24.06.2017 22:29

                                                  Ответ: как минимум один — стандартный Java-байткод должен приниматься, так как без этого вы java.lang.ClassLoader не реализуете.

                                                  Но разве кто-то требует, чтобы JVM была монолитной? Без разделяемых библиотек, без вызова другого софта…

                                                  Не вижу проблемы в реализации java.lang.ClassLoader сделать компиляцию в свою VM. Или сделать её JIT, то есть в ходе исполнения.
                                                  И вот ровно-таки этого, обязательного требования ни Dalvik, ни Art «не умеют».

                                                  Пруф дайте, пожалуйста. Потому что я лично вижу, что на андроид этот класс есть. Кроме того, есть dalvik.system.DexClassLoader — наследник от java.lang.ClassLoader


                              1. Jef239
                                21.06.2017 17:25
                                -5

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

                                Ну и другие печеньки, типа вызова методов из Visual BASIC. Как известно из истории — BASIC — это самое любое детище Гейтса.

                                Но пруфа нет, просто где-то прочел о том, что они идеально наложили COM


                                1. khim
                                  21.06.2017 19:08
                                  +1

                                  Все равно отладчику надо уметь обозревать классы и их методы и члены. Так зачем для этого городить новую технологию, если есть собственная?
                                  Затем что лицензия на Java требует реализации технологии от Sun (теперь, понятно, от Oracle).

                                  Как известно из истории — BASIC — это самое любое детище Гейтса.
                                  Было. До вызода .NET Visual FRED его фактически убил.


                      1. DistortNeo
                        21.06.2017 15:22

                        Читайте документацию внимательнее. По вашей же ссылке написано:


                        In C++Builder, the compiler recognizes classes that have only pure virtual methods and no data members as corresponding to Object Pascal interfaces.


                        1. zagayevskiy
                          21.06.2017 15:46

                          Угу, интерфейсов нет, есть классы с чисто абстрактными методами, и есть макрос __interface.
                          Ну и всё это имеет какое-то отношение к интерфейсам из делфи.
                          Всё, вы меня утомили своим билдером. Я больше на эту ересь отвечать не буду.


                          1. DistortNeo
                            21.06.2017 16:13

                            Да я, что, спорю? Никакими ухищрениями типа CRTP, множественного виртуального наследования невозможно в С++ достичь того же, что доступно в тех же C# и Java. Просто есть нюанс, что конкретный компилятор может "соптимизировать" интерфейсы. Семантика от этого не меняется, меняется лишь представление в памяти.


            1. vintage
              20.06.2017 16:46
              +13

              Всё проще.


              Интерфейс — протокол коммуникации.
              Абстрактный класс — класс, предназначенный для наследования, но не инстанцирования.


              1. Alesh
                21.06.2017 20:59
                +1

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


                1. il--ya
                  27.06.2017 13:12
                  +1

                  Я бы только, наверно, уточнил: не «протокол коммуникации», а «описание протокола коммуникации», поскольку «протокол коммуникации» может подразумевать конкретную реализацию.


          1. bigfatbrowncat
            21.06.2017 14:34
            +2

            Я бы на этот вопрос ответил так:

            Интерфейс — описание некой общности. Без конкретной реализации.

            Абстрактный класс — частичная реализация, требующая уточнения, чтобы стать классом.

            Оба понятия идут непосредственно из концепций ООП и никак не связаны с конкретным языком.

            Остальное — нюансы, определяемые синтаксисом языка.


        1. Alesh
          21.06.2017 19:12
          +1

          Если расскажете чем отличаются абстрактные классы и интерфейсы на примере JavaScript, плюсану сюда и в карму)


          1. mayorovp
            21.06.2017 20:39

            Все просто. Интерфейсы в Javascript существуют только в документации. Пример чистого интерфейса — ChildNode, вы не найдете переменной с таким именем в рантайме.


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


            Пример абстрактного класса в Javascript — HTMLElement (в документации написано что это интерфейс, но это не противоречит тому что это еще и класс — в Javascript в силу слабой распространенности instanceof-проверок любой класс является еще и интерфейсом).


            1. Alesh
              21.06.2017 20:57
              +1

              Шикарно. То есть основное отличие — это названа та или иная сущность интерфейсом в документации или нет? А я бы все таки сказал, что понятия абстрактный класс и интерфейс не применимы к языку с архитектурой подобной JavaScript.
              А что вы скажете о Python, там ситуация еще более интересная)


              1. mayorovp
                21.06.2017 21:00

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


                1. Alesh
                  21.06.2017 21:21
                  +1

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


                  1. mayorovp
                    21.06.2017 21:33

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


                    1. Alesh
                      21.06.2017 21:41
                      -1

                      В С++ есть чистый интерфейс, это не экзамен) Просто хочу понять мысль.


                      1. mayorovp
                        21.06.2017 21:42
                        +1

                        Не слышал о таком понятии в С++.


                        1. Alesh
                          21.06.2017 21:58
                          -1

                          Короче, вы еще больше запутали, а что тогда означает «чистые интерфейсы не существуют в коде и в рантайме»?
                          Разве я не могу через «чистый интерфейс» (полагаю имеется ввиду что-то типа COM интерфейсов) обратиться к объекту? Если так, то он и в коде есть, и в рантайме, пусть в виде некой структуры, но есть.


                          1. mayorovp
                            21.06.2017 22:03

                            Все просто. Интерфейсы в Javascript существуют только в документации.

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

                            При чем тут "что-то типа COM интерфейсов"?


                            1. Alesh
                              21.06.2017 22:20
                              -1

                              Ну все понятно теперь, но не троллинга ради) вернемся к вашему первому утверждению «Это общие понятия, там ответы будут очень похожими для любых языков где есть абстрактные классы и интерфейсы»

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


                              1. mayorovp
                                21.06.2017 22:21

                                Интерфейсы — зависят. Понятие интерфейса — общее.


                                Напомню, вы спрашивали про чистые интерфейсы.


                                1. Alesh
                                  21.06.2017 22:34

                                  Вообще-то я спросил про JavaScript, а там оказались не простые, а как мы выяснили «чистые интерфейсы». Согласитесь разница между логическим понятием «чистые интерфейс» и например интерфейсом реализованным как часть языка C# имеется, и весьма приличная.


                                  1. mayorovp
                                    21.06.2017 22:44

                                    Так там никаких противоречий и не было. Интерфейс — это свойство (или набор свойств в понимании JS), которым обладают объекты. Что в C#, что в Javascript.


                                    Только если в C# надо рассказать о нем компилятору прежде чем можно его будет использовать — то в Javascript описывать интерфейс в коде не нужно, интерфейсы описываются в документации к коду.


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


                                    1. Alesh
                                      21.06.2017 23:06

                                      Ладно, закроем тему, а то уже пошло обсуждение «вопросов веры» и «трактовки священного писания». В этом похоже вы выиграли, судя по минусам у вас есть как минимум один последователь)


          1. f0rk
            27.06.2017 11:38

            Как-то так:


            /** @interface */
            class BuzzerInterface {
              constructor() {
                throw Error('Can not instantiate BuzzerInterface');
              }
            
              buzz() {
                throw Error('Not implemented');
              }
            }
            
            /** @abstract */
            class AbstractClass {
              constructor(a) {
                if (new.target === AbstractClass) {
                  throw Error('Can not instantiate AbstractClass');
                }
            
                this._a = a;
              }
            
              getA() {
                return this._a;
              }
            }
            
            /** @implements BuzzerInterface */
            class ConcreteBuzzer extends AbstractClass {
              constructor(a) {
                super(a + 1)
              }
            
              buzz() {
                return `${this.getA()} buzz buzz`
              }
            }


      1. habradante
        20.06.2017 15:52
        +3

        А какая разница про какой язык он не смог ответить?


        1. RomanArzumanyan
          20.06.2017 17:31
          +3

          На некорректно поставленные вопросы зачастую лучше не отвечать. Ибо всякий ответ будет равносилен вбросу.


          1. habradante
            20.06.2017 17:41
            +3

            А с чего вы взяли что вопрос был поставлен некорректно? Соискатель-то знал про какой язык речь идет.


            1. basili4
              20.06.2017 17:59
              +3

              Скорее всего речь идет о php. Меня на каждом собеседовании спрашивают об этом.


              1. habradante
                20.06.2017 18:16

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


              1. bask
                21.06.2017 14:20

                Такой вопрос задают для всех языков: C++, Java, C# и т.д. При чём здесь PHP?


      1. kpakozz96pyc
        21.06.2017 14:25

        Очевидно, в указанном в вакансии.
        А если не уточнили — то с точки зрения ООП на этот вопрос есть вполне конкретный ответ.


        1. zagayevskiy
          21.06.2017 14:31
          -1

          Только вот есть проблема — в ООП нет понятий "абстрактный класс" и "интерфейс" в том виде, в котором их можно сравнить.


          1. kpakozz96pyc
            22.06.2017 07:56
            +1

            Абстрактный класс в объектно-ориентированном программировании — базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс может содержать (и не содержать[1]) абстрактные методы и свойства. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Абстрактные классы представляют собой наиболее общие абстракции, то есть имеющие наибольший объём и наименьшее содержание.

            Интерфе?йс (англ. interface) — программная/синтаксическая структура, определяющая отношение между объектами, которые разделяют определенное поведенческое множество и не связаны никак иначе. При проектировании классов, разработка интерфейса тождественна разработке спецификации (множества методов, который каждый класс, использующий интерфейс должен реализовывать).


            В каком месте их нельзя сравнить? Уверяю вас, даже если вы привёдете просто определение и того и другого — 99% интервьюэров этого хватит.


    1. yorick_kiev_ua
      20.06.2017 18:13
      +21

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

      Такие вопросы в лучшем случае являются лёгким тролингом, но обычно говорят о том, что вы вообще не понимаете, кто вам нужен.


      1. habradante
        20.06.2017 18:26
        -7

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


        1. JekaMas
          20.06.2017 19:59
          +6

          Может стоило все же посмотреть? Вдруг код хороший.


          1. dom1n1k
            20.06.2017 20:22
            +1

            чудес не бывает


          1. habradante
            20.06.2017 20:27
            +3

            Ну так он его и не показывал. И в открытом доступе, как он сказал, его нет. Да и, как верно заметили в соседнем комментарии, чудес не бывает.


            1. copist
              21.06.2017 09:21

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


          1. Stasgar
            21.06.2017 08:00
            +1

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


        1. yorick_kiev_ua
          20.06.2017 23:27
          +27

          А вы не бойтесь и не представляйте, а возьмите и посмотрите код. Вам за это деньги платят вообще-то. Собеседование — процесс обоюдный, надо готориться и вам тоже.
          Вообще это цирк с конями какой-то. «Проект на ГитХабе является плюсом», но проект мы смотреть не будем, а то вдруг он основ не знает.

          >>но не знает основ

          О да, моё любимое. Вы поди каждый день абстрактные классы пишите. Вот сколько от вас абстрактных классов ушло в продакшн?

          Если перед вами «боевой командир» с опытом в 10+ лет, проектами на Гитхабах и прочим, то на подобные вопросы он может не ответить только потому, что он это забыл за ненадобностью. Какой вообще практический прок от этого знания? Только не надо закатывать очи горе и рассказывать про «основы». Привидите пример из жизни, когда это сакральное знание на что-то может повлиять.


          1. HomunCulus
            21.06.2017 00:55
            -7

            10+ опыта и забыл про абстрактные классы? А что он 10 лет писал, FizzBuzz?

            Я не о том уместен или неуместен вопрос, а об отмазке забыл за 10 лет. А в прод он Визуал Бейсик запускал?


            1. yorick_kiev_ua
              21.06.2017 01:26
              +18

              Было озвучено ДВА простых вопроса: «сколько от вас абстрактных классов ушло в продакшн» и «пример из жизни, когда это сакральное знание на что-то может повлиять».

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


              1. zagayevskiy
                21.06.2017 13:57
                -1

                Эм. В смысле? Много, я не считал. Знание и понимание того, зачем нужен абстрактный класс никуда пока не делось.


              1. kpakozz96pyc
                22.06.2017 09:21
                -1

                Знаете, вот по «сколько от вас абстрактных классов ушло в продакшн» — уже можно докапаться и сделать вывод, что вы не понимаете зачем нужны абстрактные классы. Имхо, гораздо правильнее спросить «сколько от вас классов ушло в продакшн, которые унаследованны от какого-либо абстрактного класса?» — и вот тут будет ответ — процентов 50 классов, написанных мной на бекенде.

                Пример: делал когда-то сайт на ASP.Net — был в отпуске. Дали на поддержку какому-то фрилансеру, он изменил(вместо оверрайда на конкретной странице) метод PageLoad базового класса прямо на продакшене, что привело к недоступности сайта на 3 часа.


                1. HomunCulus
                  25.06.2017 11:56

                  Судя по тому как заминусовали, я могу сделать вывод о текущем уровне части читателей Хабра. Если утверждение о том, что за 10 лет в индустрии про абстракт классы можно забыть (мы говорим о разработчиках и архитекторах) то по сути, здесь уже не о чем говорить. О конкретных количествах абстракт классов ушедших в прод тоже. Я не считаю. Концепция абстракт классов это инструмент, инструмент для лучшей борьбы со сложностью, DRY и все такое. Не вижу смысла вести дискуссию с людьми, кто не понимает элементарных вещей. Я думаю на собеседовании этот вопрос по прежнему остается актуальным. Кто бы что не говорил.


                  1. il--ya
                    27.06.2017 13:34
                    +1

                    Забавно, я вообще в основном embedded и драйверами занимаюсь, на C примусы починяю. ООП пользую редко и не очень люблю, в middleware и applications стараюсь не лезть без нужды и экспертом ООП себя не считаю. Но я всё же слегка прифигел от количества плюсов на комментах yorick_kiev_ua и минусов на ваших. Если человек претендует на знание ООП чуть дальше азов, то вопрос на понимание сути интерфейсов и абстрактных классов не должен его смущать. Это абсолютно нормальный вопрос, если на работу нужен ООП разработчик, а не быдлокодер, который прочитал пол книжки.


                    1. HomunCulus
                      27.06.2017 23:08
                      +2

                      На самом деле, когда проводишь какое то количество собеседований, то очень видно как огромное количество людей, позиционирующих себя как серьезные девелоперы инженеры, отсеиваются на азах. Отсюда и попаболь которая сквозит во всех этих удивленных вопросах, о том зачем это надо, я фулл стек инженер, и мне не надо знать ни абстракты, ни структуры данных, я пользуюсь готовыми. В любом серьезном бэкэнде, особенно критичном по скорости или обьему, таких вопросов даже не ставится. Это кирпичики, и инструменты для разбиения сложности. Со сложностью можно по разному бороться, но ООП в принципе и было представлено как адекватное решение многих проблем. В этом плане интересно написал Б. Страуструп в своей культовой С++, расказывая о проблемах и сложностях кодовой базы в десятки тысяч строк кода. Я сейчас проектирую большие API и проблемы борьбы со сложностью там встают как нельзя больше, код готорый мы генерируем из схем весь абстрактный, то есть все классы абстрактные, расширение функциональности происходит от наследования от них. Это все тонкие вопросы и серебряной пули нет.
                      Здесь в ссылке есть отличный пост на эту тему.
                      https://blog.codinghorror.com/why-cant-programmers-program/


                    1. DrPass
                      28.06.2017 00:55
                      +3

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


                      1. mayorovp
                        28.06.2017 09:27

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


              1. HomunCulus
                22.06.2017 14:16

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


            1. Shifty_Fox
              21.06.2017 12:28

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


              1. zagayevskiy
                21.06.2017 13:57
                +2

                Если в вашем языке нет отдельного понятия "интерфейс" — ок. А если есть… всё плохо.


              1. White_Scorpion
                21.06.2017 17:15
                +2

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


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


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


                1. vintage
                  21.06.2017 20:00
                  +5

                  обеспечь архитектектурное решение по ограничению доступа к ресурсу по принципу: в одну единицу времени только один любой экземпляр объекта может иметь к нему доступ — запросы других объектов блокируются/должны обождать выполнения текущих процессов

                  Это мьютекс.


                  реализуй синглтон, для доступа к ресурсу

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


                  1. White_Scorpion
                    22.06.2017 08:47
                    -3

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


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


                    1. vintage
                      22.06.2017 20:49
                      +4

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


                1. Shifty_Fox
                  21.06.2017 20:28

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


                  1. il--ya
                    27.06.2017 13:47

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

                    Одно другому не мешает. Можно и вопросы позадавать, и тестовое задание дать, чтобы код посмотреть. Первое — чтобы проверить теоретические знания, второе — практические.


          1. danl
            21.06.2017 11:10
            +6

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


          1. habradante
            21.06.2017 11:25

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

            И да, интерфейсы и абстрактные классы я пишу довольно часто. И почти все они в продакшене.
            А этот «боевой командир» просто балаболка. Он это не забыл за ненадобностью, а просто не знает.

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


            1. fukkit
              21.06.2017 11:34

              Если Греф на такую зарплату придет, конечно возьмут, даже если он аджайл от блокчейна отличает только по цвету папки. Хотя, возможно, и после тщательного медицинского обследования.


              1. habradante
                21.06.2017 11:53

                Не, ну не такую зарплату. Ему надо платить больше, ведь он знает такие умные слова )))


          1. JPEG
            21.06.2017 13:39
            +1

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


            1. bigfatbrowncat
              21.06.2017 14:40
              +2

              Вы, когда пишете программу, скажем, на C# или Java, написали слово public, а какое за ним слово писать — «interface» или «abstract class» — как определяете?

              Вот это и спрашивают :)

              Вы не знаете, в чем разница? А вы точно знаете язык?..


        1. kuznetsovin
          21.06.2017 23:22

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


          1. habradante
            21.06.2017 23:27
            +1

            А кто сказал что он все это знает? Он ни про алгоритмы, ни про проектирование ничего не говорил. Только про то что это классно, что ему этим интересно заниматься, что за этим будущее и пр. Если бы он все это знал, то я бы не стал спрашивать такие простые вещи.


            1. kuznetsovin
              21.06.2017 23:30

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


      1. EviGL
        20.06.2017 19:47
        +3

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


        1. yorick_kiev_ua
          21.06.2017 01:28
          +4

          Как часто вы рефакторите абстрактные классы? Как часто незнание отличия абстрактного класса от интерфейса приводит к проблемам?

          Примеры кода — бесценно.


          1. EviGL
            21.06.2017 06:35

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


            1. copist
              21.06.2017 07:33
              +2

              Скажите, а вас что держит в месте, где полно унылых задач? Что компенсирует вам то распространяющее вокруг вас ощущение уныния во всём. Что даёт свет в тоннеле?

              Знание абстрактных классов и интерфейсов?


          1. bo0rsh201
            21.06.2017 10:58
            +1

            Мне кажется, или вы перегибаете?
            Это настолько же базовые вещи, как разница между if и for.
            И да, практически в любом языке с моделью ООП а-ля java, без них никуда


            1. Shifty_Fox
              21.06.2017 12:31

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


              1. khim
                21.06.2017 13:48
                +2

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


            1. olsamurai
              21.06.2017 12:40

              Я бы сказал, что это больше разница как в do… while и while… do, на крайний случай for. Или как цикл и рекурсия. Но не оператор цикла и ветвления. В C++ нет интерфейсов, поэтому «маємо, то что маємо». А так как в Jave нет множественного наследования, то и замена интерфейса абстрактным классом выглядит подозрительным. Я бы спрашивал не теоретические отличия, а практический смысл в этом.


      1. Femistoklov
        21.06.2017 07:30
        +2

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

        Где-то надо допилиливать какую-нибудь легаси систему на миллионы строк, которая писалась 20 лет и со временем только обрастает костылями, потому что рефакторинг займёт ещё 10 лет. Где-то надо каждый месяц клепать новый проект для «иностранных заказчиков», используя устоявшийся конвейер из модных фрэймворков, шаблонов и чёрт знает чего ещё. А где-то тебе просто скажут: «Вот наша студия поймала очередной заказ с upwork-а, выполняй».

        Где-то хряк-хряк — и в продакшн, потому что «надо вчера», лишь бы работало. Где-то вылизывают каждый класс и над строчкой кода можно думать по часу, а на code review обсуждают Макконелла и best practices (нет).

        Где-то надо будет придумывать, как решать сложные задачи, используя результаты научных исследований и наработки флагманов индустрии. А в другом месте говорят: «Вот у нас есть то-то и то-то, надо ещё примерно такого же 50 штук, вперёд!».

        «Кто нужен-то и для чего?» — вот какой вопрос у меня теперь постоянно возникает, когда я вижу очередные статьи и комментарии о human resources.


      1. DrPass
        21.06.2017 13:47

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


      1. bigfatbrowncat
        22.06.2017 13:34
        +2

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

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


    1. antik21
      20.06.2017 21:49
      -2

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


      1. zagayevskiy
        21.06.2017 14:20

        Опять вы говорите про конкретный язык (или несколько языков). А правильный вопрос я уже задавал выше.


        1. antik21
          23.06.2017 15:51

          Где я говорю про конкретный язык?

          Вы понимаете что интерфейс можно написать даже на С. (Не на С++).

          Что такое интерфейс? Интерфейс это контракт описывающий целостную грань поведеиня объекта (чем бы он ни был) компоненты или класса посредством перечисления доступных действий. При этом никак не определяет реализацию. Здесь целостная грань — это архитектурное представление, а не формальное описание и означает что берется какой-то аспект поведеиния целиком не разбиваясь на подгруппы.

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

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

          У интерфейсов кстати есть один некритичный недостаток. Интерфейс определяет набор действий но не задает их последовательность. А иногда это не обходимо.


      1. Alesh
        21.06.2017 20:05

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


        1. antik21
          23.06.2017 11:39
          -5

          Не ужели! Век живи — век учись. Правда «При этом где-то это огрнаичения языка а где-то хорошие практики.» как-то не отпечаталось в сознании.
          Да… за ваш ответ вы бы ушли с моего собеседования улицы мести.
          Формальная возможность языка не значит что так и надо делать.
          Множественное наследование в практичеких случаях либо не возможно либо бессамысленно. Потому что скорее всего ваши абстрактные классы уже имеют общего предка.


    1. copist
      21.06.2017 07:38
      +4

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

      Поговаривают, что любовь к абстракциям у него появилась после ZCE и я сразу расхотел его сдавать :)


      1. zagayevskiy
        21.06.2017 14:21

        Бред какой-то. Что именно "ВСЁ!" там на интерфейсах и абстракциях? А то может проблема не в нём, а в вас?


      1. Garret
        21.06.2017 14:32
        +3

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


        1. bigfatbrowncat
          23.06.2017 12:32

          А ну его, энтот «мотан»! Мы — люди простые, мы университетов не кончали, но сами кого хошь жить научим.

          То, что вы называете «верой в догматику», а данном случае — простая грамотность. Это не значит, что надо «порождать из примитивной задачи монстров на несколько десятков тысяч строк кода». В каждый конкретный момент надо думать над задачей, а не над теорией. Это правда. Но это не отменяет необходимость знать теорию. Ну хоть немного. И уж точно отсутствие понимания теории — не предсет для гордости разумного человека.


    1. Scf
      21.06.2017 08:44
      +2

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

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


      1. copist
        21.06.2017 09:27

        Предполагаемый диалог в ответ на вопросы «Чем отличаются И и А»
        — Я вам отвечу про отличие интерфейса от абстрактного класса (эссе на 200 слов или таблица для PHP), но прежде вы ответьте, зачем бы вы их использовали? В каком случае можно обойтись без них, а в каком без них обойтись нельзя?


    1. Cim
      21.06.2017 13:56
      +3

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

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

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


      1. habradante
        21.06.2017 14:35
        +2

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


        1. Cim
          21.06.2017 14:59
          +2

          Увы, и многие собеседуемые, и многие собеседующие — идиоты.


          1. habradante
            21.06.2017 15:12
            +1

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


    1. kolemik
      21.06.2017 15:59
      +1

      а вот и герой нашей заметки! :)


    1. UndeadDragon
      22.06.2017 01:21

      Где, говорите, работаете?


  1. saw_tooth
    20.06.2017 15:05
    +1

    Пока HR не будут видеть разницу между HTML и языком программирования — ничерта не изменится.

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

    ЕЕЕЕ… просто самый вкусный момент… зачем вообще заставлять человека пересказывать свое резюме?
    Неужели нельзя подготовить какие то целевые вопросы по резюме и просто их спросить? В итоге, из Х времени на собеседование Х/3 я рассказываю где я был и что я там делал, но окей — у меня всего 3 места работы, но есть люди с большим послужным списком? Зачем Вам знать что я там писал на Делфи на первой работе, при том что сейчас я какой нить JS Developer или верстальщик?


    1. zagayevskiy
      20.06.2017 15:33

      Я обычно рассказываю про 1-2 последних мест работы. Зачем вы рассказываете про делфи — я не знаю.


      1. saw_tooth
        20.06.2017 15:51

        Обычно вопрос звучит так: Расскажите о своих местах работы, проектах, технологиях (учитывая что ровно все это описано в самом резюме)


        1. ad1Dima
          20.06.2017 16:05

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


          1. alterpub
            20.06.2017 16:27

            Кмк, у каждого есть какие-то задачи, которые он считает достижениями или просто сложные и крупные проекты/задачи, обычно люди в резюме указывают именно их. А вам очень хочется знать про рутинные задачи? Зачем? Они по определению унылое говно, даже если вы работаете на урановом руднике — это интересно послушать ровно один раз, дальше будет тоже самое.


            1. zagayevskiy
              20.06.2017 16:31
              +1

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


            1. ad1Dima
              20.06.2017 16:41
              +3

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

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


          1. saw_tooth
            20.06.2017 16:53

            Я обычно не рассказываю, о том что уже и так написано, если HR или кто там еще, пол А4 листа резюме, то мне тратить 1 час своей жизни на такое собеседование не особо хочется.
            Второй момент, в резюме я стараюсь кратко изложить все, возможно важные детали которыми занимался на проекте, а в процессе «повествования» на собеседовании, в плане пересказа своего резюме, я обязательно могу что либо пропустить.
            Третий момент, читая резюме и видя какие то знакомые слова в резюме, в голове интервьюера, могут всплывать вопросы по тем или иным пунктам, которые он хочет бы спросить, и получается если я что то не расскажу на собеседовании, то интервьюер не спросит об интересующих его вещах (очень часто интересуются за тестирование СУБД, и реально часто я забываю это рассказать, помещая это просто в лоад-тестирование, то есть вопрос рождается уже в процессе совершенно других разговоров).


            1. zagayevskiy
              21.06.2017 11:36

              если я что то не расскажу на собеседовании, то интервьюер не спросит об интересующих его вещах

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


              1. saw_tooth
                21.06.2017 14:31

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


      1. jehy
        20.06.2017 16:00
        +1

        Про Delphi начинают рассказывать, если про это начинают спрашивать. В статье я упомянул, что многие любят посмотреть работу 10 лет назад и задавать по ней вопросы. Вам и мне понятно, что практическую ценность обычно имеют последние 2-3 года работы.


        1. zagayevskiy
          20.06.2017 16:24

          Дык даже куча примеров про составление резюме — не надо на 3-4 листа и все места работы указывать. Достаточно последних 2-3 и указания общего опыта работы. Точно так же не надо указывать технологии, которые вас сейчас не интересуют (зачем JS Developer указывает Delphi? Для увеличения объема?). Рекомендуется даже иметь 2-3 резюме с разными технологиями, если вы имеете опыт в разных областях и рассматриваете разные позиции.


          1. jehy
            20.06.2017 16:34

            С одной стороны — да. С другой — часто рекрутера интересует некий "общий стаж", а так же компании, в которых вы работали, и роли, в которых вы там выступали. А ваша текущая сфера специализации и ожидания в любом случае указываются отдельно. Опять же, даже Node.JS разработчику может быть частично релевантен опыт работы с Delphi, если он использовал в Delphi проектах, например, реляционные СУБД.


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


            1. zagayevskiy
              20.06.2017 16:36

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

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


              1. copist
                21.06.2017 13:28

                О, это идея. Специально в резюме написать — «После этой черты можно выкинуть, если детали неинтересны» )


            1. Myosotis
              21.06.2017 12:24

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


          1. michael_vostrikov
            21.06.2017 12:04
            +1

            зачем JS Developer указывает Delphi

            Как дополнительные сведения, что он знаком с компилируемыми языками и WinAPI, а значит лучше представляет, как браузер работает "под капотом". А для серверного разработчика на любом языке навык работы с сильной статической типизацией это тем более плюс.


            1. fukkit
              21.06.2017 12:08
              +6

              зачем JS Developer указывает Delphi

              это как шрамы у мужчин


            1. zagayevskiy
              21.06.2017 14:26
              +1

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


              1. michael_vostrikov
                21.06.2017 14:56

                Я имел в виду общие сведения касательно устройства Windows-приложений и разных видов типизации, а не знание того, как написать компилятор JS самому или автоматическое знание C++)


                1. zagayevskiy
                  21.06.2017 15:02

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


                  1. Danik-ik
                    21.06.2017 19:09
                    +2

                    Поддерживаю. Умение создавать решения на Дельфи само по себе не делает человека программистом. Фреймворк, не побоюсь этого слова TApplicstion защищает программиста от жизненного цикла приложений. VCL целиком — обёртка, защищающая от знания WinApi. А благодаря некоторым моментам реализации программист не только защищён от приснопамятных синглонов, но даже и много больше — многие "программисты" не представляют даже, что их формы можно инстанцировать во множественном числе.
                    Ну так тем больше стОит Дельфи-программист "с понятием".
                    P.s. Сам пишу на Дельфи. И вижу, что в этой нише зачастую умение решать задачи бизнеса важнее умения программировать.


                  1. michael_vostrikov
                    23.06.2017 10:44

                    Я ж не говорю про всех программистов) Если ваше собеседование пройдут 2 человека, у них примерно одинаковый уровень знаний фронтенда, но один кроме JS других языков не знает, а другой писал на Delphi, кого вы выберете? А кого выберет большинство работодателей — более узкого специалиста или у которого кругозор шире? Вот потому и пишут.


                    1. zagayevskiy
                      23.06.2017 10:45
                      +1

                      Я не буду выбирать их по строчкам в резюме. И знание делфи плюсом не будет.


    1. copist
      21.06.2017 13:26

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


  1. maxru
    20.06.2017 15:13
    +1

    del
    UPD. Сорри, не понял, что это сарказм


  1. E_STRICT
    20.06.2017 15:52
    +12

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


  1. gearplex
    20.06.2017 15:54
    +1

    В чем ценность этой статьи и для кого она действительно предназначена?


    1. jehy
      20.06.2017 15:57
      +10

      Для рекрутеров в IT. Это реальный список того, с чем я сталкивался — причём и сам выступая в роли соискателя, и нанимая людей через рекрутинговые агентства. Можно использовать как чеклист. Конечно, есть нюансы, но если рекрутер видит там несколько знакомых пунктов — это значит, что что-то пошло не так.


      1. gearplex
        20.06.2017 16:23
        -8

        Простите, но (имхо, конечно) для этого стоило бы написать список полезных советов (и не употреблять слово «антипаттерн», который рекрутер не знает)? А не писать полные сарказма «вредные советы».

        Не забудьте написать в описании вакансии, что у вас есть печеньки. А ещё Agile и Scrum. Это так оригинально!

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


        1. jehy
          20.06.2017 16:28
          +6

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


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


  1. KamiSempai
    20.06.2017 15:57
    +2

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


    1. jehy
      20.06.2017 16:04
      +4

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


      1. KamiSempai
        20.06.2017 16:34
        +2

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


        1. JPEG
          21.06.2017 13:48
          +1

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


    1. RomanArzumanyan
      20.06.2017 17:35
      +9

      Программисты бывают разными. Тем, кто работает на низком уровне, паттерны зачастую безынтересны.


    1. zenkz
      20.06.2017 19:54
      +18

      Знаю отличных разработчиков, которые не знают паттерны. В то же время знаю тех, кто провалил собеседования, но назвал с десяток паттернов с примерами.

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

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


    1. sic
      21.06.2017 04:29
      +3

      Мне кажется, ничего удивительного. Если на мидла собеседовали, то хорошим уровнем было бы просто распознавание паттернов, навроде «это вот что» — «это фабрика», «а это что» — «это итератор», большего на какое-то время и не нужно. Гораздо хуже, когда человек недавно выучил «паттерны для чайников», и пытается всюду их приплести. Иной раз лучше бы и не знал.
      Ну а для синьора зарплата вызывает сомнения.


      1. KamiSempai
        21.06.2017 12:30

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


    1. BOM
      21.06.2017 07:59
      +1

      Зачем вообще специально учить паттерны, если большинство из них и так интуитивно понятны при достаточном понимании архитектуры языка и достаточном уровне квалификации и опыта? Зачем мне знать название для решения, которое я сам спокойно придумал и прекрасно осведомлен о его плюсах и минусах? Что мне оно даст, слово это? Я открою статью с названием паттерна и внезапно узнаю о каких-то невиданных и доселе неизвестных мне свойствах абстрактных классов, наследования или композиции?


      1. michael_vostrikov
        21.06.2017 11:51
        +5

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


        1. mrsantak
          21.06.2017 12:13
          +8

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


      1. KamiSempai
        21.06.2017 12:22
        +1

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

        «Зачем мне знать название для решения, которое я сам спокойно придумал и прекрасно осведомлен о его плюсах и минусах?»
        Можете ли вы быть на 100% уверенным, что ваше решение не будет антипаттерном? Сколько времени вы потратите на поиск собственного решения?

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


    1. rfq
      21.06.2017 10:02
      +2

      про паттерны я обычно отвечаю, что я как господин Журден, который не знал, что разговаривает прозой. Но как-то удосужился просмотреть список паттернов и нашел в нем только полтора, которые следовало бы изучать — Visitor и MVC. Остальные нормальный программист переизобретет, как только они ему понадобятся.


    1. KumoKairo
      21.06.2017 17:49
      +1

      Я помню собеседовался как-то на вакансию с запросом зарплаты в 100к рублей.
      Меня спросили про то, какие я знаю паттерны. Я спросил все ли мне по списку перечислять или лучше что-то конкретное на примере рассказать? Спросили про синглтон и про то, в каком случае лучше всего использовать именно его. Я ответил что обычно нет случаев, когда можно использовать только синглтон и ничего другого. В любом случае есть разные варианты, а злоупотребление синглтонами некоторые считают антипаттерном. Рассказал немного про strategy и композицию вместо наследования, про template method. Из рабочей практики кроме этих вещей вспомнить ничего больше не смог, хотя в своё время прям балдел от этих паттернов (тот самый период паттернов головного мозга), прочитал Head First и оригинальную книжку банды четырёх.

      В конце общения тоже спрашивал вопросы у собеседующих и один ответ вспоминаю до сих пор.
      Вакансия — Unity / C# разработчик на мобилки.
      Мой вопрос был такой — какие основные причины утечек памяти по ресурсам (текстуркам и мешам) можно выделить при работе с Unity.
      Ответ — про Unity я не знаю, но вот в Marmalade / C++ мы делали вот так… (и далее собственно ответ про ресурсы, я не запомнил все подробности. По-моему это был лид команды разработки на Unity).

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


    1. Alesh
      21.06.2017 20:39
      +1

      Скорее всего это означает просто, что ваше собеседование для него было первым)


    1. kuznetsovin
      21.06.2017 23:51

      А как коррелируют паттерны и уровень з/п? По моему личному опыту чуть меньше, чем никак.


  1. ad1Dima
    20.06.2017 16:12
    +2

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


    1. jehy
      20.06.2017 16:19
      +3

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


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


      1. ad1Dima
        20.06.2017 16:32
        +1

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

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

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


        1. Goodkat
          20.06.2017 21:16
          +4

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


        1. val-ka
          21.06.2017 07:59
          +1

          Всё же спорное решение.

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

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


          1. ad1Dima
            21.06.2017 08:06

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

            И я не говорю про написание целого проекта, я говорю про обход дерева, которое пришло на вход, например. Задачки на пару вложенных циклов.


            1. val-ka
              21.06.2017 15:28
              +3

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

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

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

              В крайнем случае можно использовать доску. Так и нагляднее для всех участников собеседования, и пространство заведомо ограничено, что гарантирует компактность задачи, стереть можно на ходу что-то. А главное доска – вполне распространённый в командной работе инструмент, человеку есть смысл это уметь. А ручкой я, например, 10+ строк буду писать через физическую боль. Печатаю быстро, рисую охотно, а вот мелко писать что-то длиннее предложения давно разучилась. Руку сводит.

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

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

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


              1. ad1Dima
                21.06.2017 15:43

                В крайнем случае можно использовать доску. Так и нагляднее для всех участников собеседования, и пространство заведомо ограничено, что гарантирует компактность задачи, стереть можно на ходу что-то. А главное доска – вполне распространённый в командной работе инструмент, человеку есть смысл это уметь. А ручкой я, например, 10+ строк буду писать через физическую боль. Печатаю быстро, рисую охотно, а вот мелко писать что-то длиннее предложения давно разучилась. Руку сводит.
                Листок тоже заведомо ограничен, для меня удивительно что вам принципиально неудобнее писать на бумаге, чем на доске.

                Ну и под «писать на листочке» я уже в нескольких комментах написал что вполне допускаю Notepad или специально предназначенные для этого сайты.


                1. val-ka
                  21.06.2017 16:33
                  +2

                  Листок тоже заведомо ограничен, для меня удивительно что вам принципиально неудобнее писать на бумаге, чем на доске.
                  Характер движений разный. Доска – это движение «от плеча», в меньшей степени «от локтя». Буквы крупные, поэтому даже кистевые движения относительно размашисты. Примерно так же нагрузка распространяется при рисовании на бумаге, которую я очень охотно использую для этих целей.

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

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


                1. webkumo
                  23.06.2017 17:29

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

                  самый главный недостаток бумаги (и достоинство доски): с доски


                  стереть можно на ходу что-то

                  Ну реально, опечатки (описки), изменения по алгоритму (когда понял, что можно написать лучше) и прочие мелкие улучшения… я на бумаге это не смогу!.. Ну а если вы потребуете всё-таки писать на бумаге — то вы ССЗБ. Писать нормальным почерком я не умею (хоть и читабельно, но к нему привыкнуть надо), а вот обидеться на неадекватную постановку задачи и написать кеглем 1.5-2мм — вполне осилю. Вероятность адекватной постановки задачи на бумаге я допускаю, но считаю её чрезвычайно маленькой.


      1. eugenebb
        20.06.2017 17:14
        +5

        Мы так делаем.

        Есть код сделанный так как не надо делать (из реальной легаси системы) и просим рассказать что в нем не так, как поправить и почему.

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

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


        1. kloppspb
          20.06.2017 23:29
          +3

          нравиться

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


        1. Alexeyslav
          21.06.2017 15:20

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


          1. eugenebb
            21.06.2017 16:27

            Пример
            image


            1. eugenebb
              21.06.2017 17:13
              +2

              ссылка сломалась в предыдущем комментарии

              Пример
              image


              1. Alexeyslav
                21.06.2017 17:28
                +1

                Из всего в глаза бросились SQL-запросы… особенно если это веб-приложение, становится как-то стрёмно. И пароль к базе прямо в коде захардкожен…


                1. Scf
                  21.06.2017 18:14

                  И SQL injection, и строки в HTML не ескейпятся, и клевый способ проверки на наличие прав админа. Да и вообще на наличие прав.


                1. eugenebb
                  21.06.2017 18:24

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

                  Ну и самое интересное начинается когда задается вопрос «как правильно?» и «почему?»

                  Можно попробовать посчитать для этого кода пункты для вопроса «Что в нем не так?».
                  «Не так» — это не значит что это обязательно ошибка, но то что можно улучшить или в неявных случаях объяснить когда так делать ОК.

                  SqlConnection sqlConn = new SqlConnection(«Data Source=localhost;Initial Catalog=DD;Username=user;Password=P@ssw0rd;Pooling=false;»);

                  1. sqlConn локальная переменная, нету закрытия соединнения и высвобождение ресурсов
                  2. Использование hard-coded connection string

                  form id=«Form1»

                  3. Иногда лучше использовать meaningful имена для элементов

                  ul class=«dataList» style=«width: 531px; margin-bottom: 0; border-bottom: 0;»

                  4. Явное использование inline style

                  <strong class=«email»><% = filterBy %></strong>

                  5. XSS

                  SqlCommand sqlCmd = new SqlCommand(«SELECT * FROM Groups WHERE GroupName LIKE '%» + filterBy + "%'", sqlConn);

                  6. SQL injection
                  7. SqlCommand IDisposable но нету using
                  8. Возвращает *, но далее видно что используем только одно поле

                  все что в цикле while (rsGroups.Read())

                  9. может имеет смысл заменить на asp:repeatable

                  <td><%= rsGroups[«Name»].Value %><td>

                  10. XSS

                  if (Request.Cookies[«IsAdministrator»].Value == «true»)

                  11. Security flaw, неправильный дизайн системы доступа

                  SqlCommand command = sqlConn.CreateCommand();

                  12. SqlCommand IDisposable но нету using

                  command.CommandText = «EXEC sp_UserName UserId = » + Request.Cookies[«CurUserName»].Value;

                  13. SQL injection
                  14. Security flaw, неправильный дизайн получения ID текущего пользвателя

                  string s = "<h3>Пользователь:</h3><div>" + result + "</div>";

                  15. XSS
                  16. Использование динамически генерируемого HTML без реальной надобности

                  наверное еще пункты можно подтянуть, типа проверок всяких, именования переменных и т.п.


                  1. eugenebb
                    21.06.2017 18:32

                    для

                    command.CommandText = «EXEC sp_UserName UserId = » + Request.Cookies[«CurUserName»].Value;

                    17. нерекомендуемый способ вызова stored procedures


                  1. kloppspb
                    24.06.2017 17:56
                    -2

                    самое интересное начинается

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


                    1. eugenebb
                      28.06.2017 16:50
                      -1

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

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

                      может специалиста посетить?


    1. ivashkevitch
      20.06.2017 16:36
      +2

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


      1. ad1Dima
        20.06.2017 16:58
        +2

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

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


        1. Goodkat
          20.06.2017 21:21

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


          1. ad1Dima
            20.06.2017 21:23
            +1

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


          1. Femistoklov
            21.06.2017 09:46
            +1

            Иногда пишешь код и коммитишь без возможности проверить и запустить — реальная жизнь обширна и разнообразна :)
            Тогда вы НЕ МОЖЕТЕ быть уверены в том, что ваш код корректен. Я серьёзно. Обратная связь бесценна. Дробите ваши монолиты, от которых IDE виснет на полчаса, настраивайте распределённую сборку (где-то тут видел статью), но обеспечьте хотя бы проверку на синтаксис, сиречь компиляцию.


            1. ad1Dima
              21.06.2017 10:32
              +1

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

              Т.е. код можно скомпилировать, и даже запустить, но практической пользы это не дает. (синтаксис, конечно, проверяется).


            1. jehy
              21.06.2017 11:30
              +1

              Зря так на ad1Dima накинулись — скилл писать без дебаггинга действительно порой востребован. Например, у меня были случаи, когда нужно было через цепочку RDP+TeamViewer+SSH на проде внести мелкие правки при помощи vim. Другой вопрос, что если это не единичный случай, а система, то бегите из компании со всех ног.


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


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


              1. Femistoklov
                21.06.2017 13:02

                Я говорю про отсутствие всякой проверки написанного кода, кроме как в голове у программиста. Типа написал где-то в блокноте или vim-е — применил этот пресловутый супер-скилл дебаггинга взглядом — удостоверился, что всё правильно.

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

                Вообще, призываю сторонников чёткого ТЗ. Они объяснят, что все ваши задачи, интерфейсы, сигнатуры и операции с чёрным ящиком должны быть специфицированы, а если написано «на вход пришло А и Б — выдать В и Г», то должно быть так и никак иначе.


                1. jehy
                  21.06.2017 13:18
                  +1

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



                  1. Alexeyslav
                    21.06.2017 15:44
                    +1

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


            1. Goodkat
              21.06.2017 11:34

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


              1. Femistoklov
                21.06.2017 13:34

                Спасибо, кэп.
                Всегда пожалуйста.
                Я написал это не как инструкцию для организации работы программистов, а пример того, как это бывает в реальной жизни.
                Да, мир не идеален. И всем, кто говорит про «реальную жизнь», у меня к вам огромная просьба. Давайте вы будете в своих вакансиях сразу писать (убеждать ваших тимлидов и HR-ов писать) про эту нелёгкую жизнь в ваших компаниях, как у вас всё бывает порой печально IRL. Это было бы очень здорово.


                1. Goodkat
                  21.06.2017 13:48
                  +1

                  Да и так программистов по полгода ищут, а если честно всё написать, то кто работать будет? :)


    1. KamiSempai
      20.06.2017 16:55
      +2

      Тут я с вами частично согласен. Но данный подход применим к программистам уровня Senior+ или Guru. И если уж вы дали такое задание, вы должны четко понимать для чего вам это нужно. Так же неплохо было бы дать это понять и соискателю.
      В большинстве же случаев, в этом нет необходимости. Иной раз доходит до смешного. Одному моему другу, Java разработчику, дали бумажное задание на Паскале! Что еще более забавно, через месяц, когда он уже нашел себе работу, ему позвонили и сказали, что он прошел на второй тур.


      1. ad1Dima
        20.06.2017 17:06
        -6

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

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


        1. zenkz
          20.06.2017 20:08

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

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


          1. ad1Dima
            20.06.2017 20:11
            +1

            Проектировать приложение это другой уровень. И меня вполне спрашивали такое.


        1. pm_wanderer
          20.06.2017 21:48
          +1

          А чем написание кода на бумажке отличается от написания в IDE?
          Если условились не придираться к синтаксису, то и разницы нет никакой получается. Что на бумаге пишем логику на псевдоязыке, что в компьютерной программе пишем эту же логику, но только с подсказками от компьютера по синтаксису (который мы в расчет не берем и так)


          1. lagranzh
            21.06.2017 04:13
            +3

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


            1. ad1Dima
              21.06.2017 05:29
              -6

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


            1. MurzikFreeman
              21.06.2017 10:36
              +4

              Именно поэтому, когда меня на собеседовании попросили написать код на бумажке я начал имитировать работу IDE прямо на этой бумажке. Я писал длинные и понятные названия классов и переменных, но в местах где их использовал не дописывал их названия до конца, рисуя стрелку к месту объявления и подписывая к ней слово «автокомплит». Части кода я писал на самоклейках и клеил их к месту на котором писал Ctrl+V. Кончились мои интервьюеры когда я переписал на отдельный листок часть кода, свернул лист так, что скрыл её и попросил кусочек скотча для операции Ctrl+X-Ctrl+V. А ещё я подчёркивал места где пропускал приведения типов волнистой линией, жаль красной ручки не было.


          1. ad1Dima
            21.06.2017 05:28
            +1

            А если нет разницы, то почему все так против? может потому, что разница есть? Выше я написал, что текстовый редактор типа Блокнот тоже подойдет.


            1. michael_vostrikov
              21.06.2017 11:32
              +1

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


        1. yefrem
          20.06.2017 22:00
          +2

          Все же на бумажке и «без IDE» — довольно разные варианты. Непонятно, чем именно бумажка лучше простого редактора с подсветкой. Да и непонятно, чем IDE помешает, кроме того, что плохо подходит для маленьких задачек. Неужто автокомплит помешает проявить навыки? Если принципиально знание конкретных методов, то проще их и спросить (хотя это тоже антипаттерн имхо).


    1. Femistoklov
      21.06.2017 05:54
      +1

      Хороший программист должен уметь писать код на листочке!
      О5 25. Холивар «IDE vs листочек», наверно, даст фору табам против пробелов. Впору опрос проводить, сколько программистов умеют писать код на листочке, и как это умение коррелирует с профессионализмом.


      1. ad1Dima
        21.06.2017 05:57

        такой опрос не поможет, потому что многие, кто умеют. давно уже не пробовали.


        1. Femistoklov
          21.06.2017 06:09
          +1

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


          1. ad1Dima
            21.06.2017 06:30

            что многие вообще никогда не пробовали либо пробовали неудачно
            и при этом умеют


            1. Femistoklov
              21.06.2017 06:34

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


              1. ad1Dima
                21.06.2017 06:44

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

                1. Умение решить простую задачу
                2. Умение составить алгоритм
                3. Умение выразить этот алгоритм в (псевдо)коде.
                4. Умение мыслить на несколько итераций вперед
                5. Умение без помощи спецсредств просчитывать граничные условия
                6. Умение дебажить без помощи спецсредств

                Первые 4 пункта — навыки которые можно получить в школе (по крайней мере в программе старшей школы они есть уже 20-25 лет).
                5й и 6й — уровень техникума для программистов.
                Если человек имеет эти навыки, то написать код на бумажке не составит никакого труда. Так вот, скажите мне, какой из этих навыков программисту не нужен?


                1. funca
                  21.06.2017 07:27
                  +3

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

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


                  1. ad1Dima
                    21.06.2017 07:32

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

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


                1. Femistoklov
                  21.06.2017 09:31
                  +2

                  1. Задача решается в IDE гораздо наглядней. Код написан, скомпилировался, корректно отработал и выдал верный результат на тестовых данных — задача решена.
                  2. Чтобы написать код в IDE, как раз и надо сперва знать или составить алгоритм. Автокомплит для алгоритмов пока не придумали.
                  3. Так в псевдо- или в коде? Если в коде, не вижу причин не использовать IDE.
                  4. О каких итерациях идёт речь, алгоритма или написания алгоритма? Если написания алгоритма, то это совершенно ненужное умение, т.к. в IDE всегда можно что-то поправить, прежде чем показать код интервьюеру или отправить в продакшн либо ещё куда.
                  5. А какие спецсредства здесь могут что-то подсказать? Разве есть такие?
                  6. Зачем? Зачем дебажить без отладчика? Можно и шуруп вкручивать без помощи отвёртки, например плоскогубцами, навык закручивания шурупа это никак не показывает. Ясен пень, если человек умеет дебажить, то он догадывается, что операторы и функции выполняются не в рандомном порядке.


                  1. ad1Dima
                    21.06.2017 10:40

                    1) расскажите это олимпиадникам, ага.
                    2) МС как-то демонстрировал возможность Roslin с помощью экстеншена, который втраивал код из ответов SO в проект.
                    3)…
                    4) Удачи с дебагингом по невоспроизводимым шагам
                    5) Да, статический анализатор кода называются
                    6) Выше есть несколько примеров Все так привыкли к дебаггеру, что даже не представляют что его может и не быть по разным причинам.


                    1. Femistoklov
                      21.06.2017 13:25

                      Хорошо, допустим, вы собеседуете кандидата. Отрубите интернет, раз вы сами взяли вашу задачу оттуда и не хотите, чтоб соискатель нагуглил решение. Или чтобы не спросил на SO, хотя я сомневаюсь, что он успеет получить ответ. Предоставьте ему просто IDE, без статических анализаторов. И озвучьте запрет на дебаггинг (хотя я бы при этом мысленно покрутил пальцем у виска). Так и скажите грозным голосом: «Вам запрещается запускать и отлаживать своё решение!» Ну и следите, как он кодит ваши пузырьки или фибоначчи, да пусть даже ханойские башни. Вот чем, скажите, в такой ситуации бумажка выиграет у IDE?


                      1. ad1Dima
                        21.06.2017 14:20

                        Вы предлагаете убрать IDE из IDE и сравнить его с бумажкой/Notepad'ом?


                        1. Femistoklov
                          22.06.2017 05:04

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

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


                          1. Alexeyslav
                            22.06.2017 09:15

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


                    1. 0xd34df00d
                      23.06.2017 00:00

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


                1. Alesh
                  21.06.2017 19:26

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


                  1. ad1Dima
                    21.06.2017 19:35

                    И еще раз скажу, что что 1) больше 10-20 строк и не надо. 2) под «писать на листочке» в моем понимании Notepad тоже попадает.

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


                    1. Alesh
                      22.06.2017 00:00

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

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

                      Ну и просто замечание: Кстати печать на клаве двумя руками разве не эта самая моторика?


                      1. ad1Dima
                        22.06.2017 09:45

                        Я уже видел, что вас уговорили на Notepad)
                        Никто меня не уговаривал. Просто в моей голове, что на листочке, что в редакторе типа блокнот отличаются лишь умением человека пользоваться ручкой, не более того.

                        Кстати печать на клаве двумя руками разве не эта самая моторика?
                        ваши болящие руки и есть ответ на этот вопрос.


                        1. val-ka
                          22.06.2017 14:56

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

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


                        1. Alesh
                          22.06.2017 23:12

                          ваши болящие руки и есть ответ на этот вопрос

                          Можете шире выразить свою мысль, я вас не понял.


                1. 0xd34df00d
                  22.06.2017 23:58

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


                  Кроме того, если я исповедую TDD (которое type-driven development), и серьёзно полагаюсь на тайпчекер в процессе написания кода и иногда даже продумывания алгоритмов (если инварианты или что-то этакое удаётся выделить в виде типов), то на бумажке мне будет очень больно.


                  Кстати, ещё можно просить в процессе написания кода танцевать (проверяет многозадачность и координацию движений) или декламировать Бородино (проверяет, опять же, многозадачность и память).


                  1. ad1Dima
                    23.06.2017 06:05
                    -1

                    Кроме того, если я исповедую TDD (которое type-driven development), и серьёзно полагаюсь на тайпчекер в процессе написания кода и иногда даже продумывания алгоритмов (если инварианты или что-то этакое удаётся выделить в виде типов), то на бумажке мне будет очень больно.
                    Ну вы можете обход дерева или массива делать через TDD, если так сильно хочется. Написать десяток тестов, классы нагенерировать для алгоритма на 10 строк… Все во имя того, что вы исповедуете.


                    1. 0xd34df00d
                      23.06.2017 06:33
                      +1

                      Ну вот, я же даже в скобочках специально расшифровку написал, а вы её не прочитали :(


                      1. ad1Dima
                        26.06.2017 09:23

                        Это не отменяет того, что для обхода массива это оверкил.


        1. Alesh
          21.06.2017 19:24

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


      1. fukkit
        21.06.2017 10:17
        +5

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

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


        1. ad1Dima
          21.06.2017 10:41

          Я знаю пару компаний, гда даже кодить уметь не надо, чтоб программистом работать.


          1. fukkit
            21.06.2017 10:56
            +2

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


            1. ad1Dima
              21.06.2017 19:37
              +1

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


          1. Danik-ik
            21.06.2017 22:38

            Хех, на первом месте, куда я устроился программистом семнадцать лет назад, мне обещали, что если хорошо буду работать, дадут компьютер. Через два месяца дали. Как раз к моменту, когда все работники из отпусков вышли, а вы что подумали? Кстати, на собеседовании, делая тестовое задание, первый раз притронулся с Visual Basic (задание сдал успешно). Так что безвыходных ситуаций не бывает. Будет надо — и ручкой напишу, но предупрежу, что код не скомпилируется и предложу интервьюеру исправить ошибки так, чтобы скомпилировалось с певого раза. Ручкой, без IDE. Торгуйтесь, господа соискатели, многое зависит именно от вас!


        1. fireSparrow
          21.06.2017 11:41

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

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


          1. mad_nazgul
            21.06.2017 12:35

            Автодополнение…
            Я например в упор не помню chain-функции для работы со строками.
            IDE как раз дает мне подсказку, и я выбираю ту функцию которая мне нужна.


            1. ad1Dima
              21.06.2017 12:39

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


              1. mad_nazgul
                21.06.2017 15:47

                Ну как сказать… Могут ведь и прикопаться :-)


                1. ad1Dima
                  21.06.2017 16:00

                  Ну фигово тогда. Я бы не стал в такой конторе работать.


                1. fireSparrow
                  21.06.2017 17:19

                  Я на том собеседовании, о котором писал выше, забыл две вещи: 1). порядок аргументов в одной функции и 2). какой оператор используется в питоне для побитового XOR.
                  Просто сказал об этом собеседующему, никто не стал прикапываться, просто подсказали и я продолжил писать код.

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


          1. fukkit
            21.06.2017 12:50

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


          1. dklein
            21.06.2017 13:23

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


            1. mad_nazgul
              21.06.2017 15:48

              Ну как сказать.
              Я спокойно отношусь к написанию кода на листочке.
              Но таки проще, на ноутбуке написать код. :-)


          1. Alexeyslav
            21.06.2017 15:56

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


    1. nolled
      21.06.2017 09:09
      -2

      не надо придираться к синтаксическим ошибкам

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


      1. ad1Dima
        21.06.2017 09:27
        +3

        Все время от времени забывают ';', мало практической пользы помнить порядок в `public static partial override async void MegaFinction()`. Помнить все перегрузки ToString() тоже не критично.

        Я говорю именно про придирки, особенно про придирки к опечаткам


    1. Alesh
      21.06.2017 19:19
      +1

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


      1. ad1Dima
        21.06.2017 19:39

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


      1. 0xd34df00d
        23.06.2017 00:04

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


        1. ad1Dima
          23.06.2017 06:06

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


          1. 0xd34df00d
            23.06.2017 06:33

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


  1. pnovikov
    20.06.2017 18:13
    +7

    Я добавлю:
    — звоните соискателю, обещайте золотые горы и пропадайте. Вообще. Капитально. Соискатель сам напишет если вдруг что — у вас есть дела и по-важнее
    — ни в коем случае не смотрите на github и прочую опенсорсную активность кандидата. А если вы и уделяете этому внимание — то контрольными вопросами должно быть «сколько человек пользуется вашей поделкой?» и «как часто вы выпускаете новые релизы и общаетесь с коммьюнити?». Что ж это за соискатель такой, что даже не может раскрутить свой проект водиночку. Вам же нужен разработчик с навыками маркетолога, ведь правда?
    — не доверяйте соискателю. Вообще. Он — грязное и хитрое создание, которое пришло похитить у вас деньги. Поэтому лучше вообще не говорите ему чем занимаетесь до подписания NDA, которое лучше заставить подписать прямо с порога. Помните что соискатель абсолютно ничего не понимает ни в своей профессии, ни в вашей системе, поэтому любые его предложения относительно, например, архитектуры систем надо рассматривать свысока, цокая языком, а еще лучше — обсмеивая.
    — выше уже было про рассылку писем-автоответов. Я хотел бы добавить изюминку: обязательно дописывайте в конце, что по всем возникшим вопросам соискатель может не стесняться писать или звонить вам. Укажите что вы всегда готовы ответить на все вопросы. Желательно дать несуществующий e-mail и неактивный номер телефона.
    — отличным ходом является дать соискателю ссылку на автоматический входной тест знаний. Сделайте его в самой убогой системе тестирования — в Moodle например. К вопросам особых требований нет. Спросите про его настрой, психологический профиль, дайте задачку на решение уравнений, накидайте вопросов по сетевым технологиям и программированию. Само собой, тест по времени стоит ограничить — ибо нефиг. Соискателей, отсеенных по результатам автоматического тестирования сразу добавляйте в бан-лист и больше никогда не рассматривайте. Автоматизация-с! И да! Ни в коем случае не предупреждайте соискателя о тесте и не предоставляйте подробностей о вопросах. Интригу надо сохранить, а хороший соискатель должен быть всегда ко всему готов. Как пионер. Больше чем пионер.

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

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


    1. Idot
      20.06.2017 20:54
      -6

      Сиськи — залог успешного найма!

      Трапы с сиськами (и членом), что тоже встречаются?


  1. santanico
    20.06.2017 21:47
    +4

    Ещё пара советов:


    • после неудачного собеседования никогда не сообщайте о результатах, во-первых это требует очень много времени, а во-вторых кандидат может обидеться;
    • в письме потенциальному кандидату можно назадавать кучу вопросов и даже попросить рекомендовать кого-нибудь, но если в конце написать "Заранее спасибо", то тогда можно уже не тратить время на ответ потратившему время бедолаге;
    • рассказав о проекте, попросите кандидата пересказать услышанное, задайте ещё пару вопросов, чтобы точно убедиться что он внимательно вас слушал;
    • ну и наконец, если кандидат не соглашается принять ваше предложение, начинайте рассказывать, что ситуация на рынке сложная и работу найти не просто или что у вас есть другие уже согласившееся на это место кандидаты — пусть испугается и согласится!


    1. michael_vostrikov
      20.06.2017 22:17
      +3

      после неудачного собеседования никогда не сообщайте о результатах

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


      1. pnovikov
        21.06.2017 00:24
        +5

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


  1. serginhold
    20.06.2017 21:47
    +2

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


    1. pnovikov
      21.06.2017 00:28
      +4

      Да да да! Еще важный совет. Надо давать больше заданий а-ля «что выведет на экран этот код?». Недостижимый идеал здесь — дать код, запускающий несколько потоков с подозрением на мертвую блокировку, но по факту содержащий синтаксическую ошибку (не компилирующийся). Ведь вы нанимаете не программиста, вам нужен профессиональный решатель ребусов. Здесь профессионалы порекомендуют дать соискателю поразгадывать кроссворд, но пока что эти технологии никем не освоены — станьте первым!


    1. spetr78
      21.06.2017 08:07
      -7

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


      1. serginhold
        21.06.2017 10:35
        +6

        балбес это ты и твои соратники,
        есть такое понятие, как уважение, «балбес» тоже к этому относится, так вот, если хочешь показать свою какаху будущему работнику, которая ничего общего не имеет с реальным миром, то уж хотя бы распечатай ее в моноширинном шрифте, а-ля Consolas. А если твоя какаха, это реальный код из реального проекта, то говори об этом сразу, чтобы можно было развернуть и уйти, не теряя свое время. Программисты не пишут код в блокноте Windows с использованием Times New Roman. Речь больше об этом, а не об умении читать что там на листочке.


        1. copist
          21.06.2017 13:51
          +1

          Читать и «компилировать» код в голове — это хороший навык. Позволяет разбираться в ответах на SO, а не копировать всё подряд к себе в проект. Позволяет понимать код коллег. И свой собственный, через месяц-два.

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


          1. OlegZH
            21.06.2017 18:06

            А мне не дадите кусок кода, который можно исследовать, выявить и исправить все проблемные места? На любом языке программирования! (Даже будет интереснее и увлекательнее узнать для себя что-то новое.) Но! Желательно (если такое возможно по техническим/этическим соображениям), чтобы это было из реального проекта (для реальной задачи). Ну, или, по мотивам оного. Хочется попробовать свои силы.


            1. jehy
              22.06.2017 11:21

              Пожалуйста, вот вам простая функция транслитерации на яваскрипте. Сразу оговорюсь, что автор не я.


    1. Myosotis
      21.06.2017 12:44
      +1

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


      1. yefrem
        21.06.2017 13:55

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


        1. yefrem
          21.06.2017 13:59
          +1

          омайгад, экономиТСЯ, конечно же


  1. yefrem
    20.06.2017 21:47
    +4

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


  1. Vald3r
    20.06.2017 21:47
    +6

    Статья скорее грустная чем весёлая т.к. в ней описано 80% нынешних вакансий.


  1. bo883
    20.06.2017 22:16

    Читал статью и вспомнилось недавнее собеседование у одной норвежской компании. Я очень хотел у них работать, но кол-во собеседований отбило все желания, онлайн-собеседований около 4-5, тестовых заданий 4(разных по объему и сложности), личная встреча на часа 2 и все это растянулась приблизительно на месяц. Короче жесть.


    1. nolled
      21.06.2017 09:03
      +1

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


      1. bo883
        21.06.2017 16:50

        Надеюсь причина была именно в этом(боятся ошибиться).


  1. kloppspb
    20.06.2017 23:22
    -2

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

    Да.


  1. grossws
    21.06.2017 03:27
    +1

    Увидев опрос пробежался по статье ещё раз и вариант "более 8" антипаттернов набрался где-то в середине. Смешно и грустно.


  1. Idot
    21.06.2017 04:05
    +7

    Самый стрёмный вариант — это звонить на текущее место работы, и просить у оxyевшего от такой наглости начальника рекомендацию на сотрудника.


    1. cumontvstar
      22.06.2017 16:25
      +2

      Недавно столкнулся с вариантом покруче: СБ банка, куда человек устраивался, позвонила директору текущей компании и уточнила, правильную ли зарплату на текущем месте работы указал соискатель в своем резюме.


  1. KoToSveen
    21.06.2017 06:12

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


    1. funca
      21.06.2017 07:33
      +1

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


  1. JC_IIB
    21.06.2017 06:46
    +1

    Фуллстеков все хотят по очевидной причине — зачем платить двоим за то, что может сделать один?
    Это ужасающе, честно говоря. «И швец, и жнец, и на дуде игрец».


  1. kuraga333
    21.06.2017 08:09
    +1

    Еще обязательно необходимо, чтобы HR настойчиво утверждал, что вам нужен data scientist, и только на собеседовании вы должны сказать соискателю: «Ну как же, Вашей квалификации должно быть достаточно, чтобы понимать, что сначала нужно собрать данные. Да, C/C++ и парсеры в ближайшие два года, точно.»


    1. 0xd34df00d
      23.06.2017 00:37

      Написание «C/C++» уже само по себе маркер.


      1. kuraga333
        23.06.2017 00:47

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


      1. Alesh
        23.06.2017 01:00

        Написание «C/C++» уже само по себе маркер.

        Почему интересно? В С++ очень много задач — это написание классов которые так или иначе являются обертками на системным API, и понимание С для этого требуется, в той или иной мере.


        1. 0xd34df00d
          23.06.2017 01:15

          Ну, лично я в своей практике системные API (и вообще какие бы то ни было сишные API) оборачиваю очень редко. Куда чаще приходится понимать, как именно работает процессор, как происходит синхронизация кешей, как работает конвеер и что такое порты в процессоре, но это же не повод писать C++/Assembler или, не знаю, C++/Verilog.


  1. Scf
    21.06.2017 08:45

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


    1. jehy
      21.06.2017 08:58
      +5

      Хорошее отношение к работникам показывают завтраки/обеды и фрукты в офисе. А так же всякие варианты компенсации спорта. Печеньки это дёшево для работодателя и дорого для попы программиста. А ещё это часто не физические печеньки, а "cum to the dark side" (опечатка не случайна).


  1. kyb27
    21.06.2017 09:19
    +2

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


    Лучше всего начать с фразы
    — А теперь расскажите все своими словами.


  1. SbWereWolf
    21.06.2017 09:23
    +2

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

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

    да да :)

    очень хорошо знаком с написанным в статье, регулярно раз в 2-4 месяца и сам нанимаю и сам нанимаюсь,

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


  1. samuelsh
    21.06.2017 09:31
    +3

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

    Фибоначчи и рекурсию тоже обязательно :)


    1. Danik-ik
      21.06.2017 22:54
      +2

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


  1. tronix286
    21.06.2017 09:32

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


    1. tronix286
      21.06.2017 09:37
      -2

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


  1. White_Scorpion
    21.06.2017 09:35
    +2

    К вопросу о количестве собеседований надо ещё добавить антипаттерн:


    • Обязательно разносите собеседования по времени — не меньше полутора месяцев между собеседованиями! А лучше два или три!

    =)))))


    1. kyb27
      21.06.2017 09:52

      А реагировать на отклик на вакансию нужно минимум через 6 месяцев. Кандидат же хочет работать только у нас!


    1. Scf
      21.06.2017 10:04
      +4

      картинка
      image


      1. artivashenko
        21.06.2017 11:22

        угу, позвонили мне, поговорили, пригласили и пропали… совсем :)


        1. White_Scorpion
          21.06.2017 13:59

          У меня была ситуация, что:


          1. Декабрь — ознакомительное с HR
          2. Февраль (конец) — техническое
          3. Май — позвонили "да, вы нам подходите, но надо прийти и поговорить насчёт желаемой зарплаты" (в это время я уже второй месяц как работал в другой компании) =)))


  1. kostus1974
    21.06.2017 10:40
    -1

    чёткие пацаны пишут на go и при этом используют NoSQL

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


    1. 0xd34df00d
      23.06.2017 00:39

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


  1. mrobespierre
    21.06.2017 11:06
    +2

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

    вот тут прям слёзы навернулись (навеное от смеха, но это не точно) — вакансий для джунов (по крайней мере тех, в которых явно указано) сильно меньше 10%, и во всех требуется 1-3 года опыта работы и несколько «законченных коммерческих проектов»


  1. unabl4
    21.06.2017 11:47
    +3

    Так, абстрактный класс vs интерфейс уже обсудили.
    А как же круглые крышки люков и иные охренительные вопросы? :)


    1. mad_nazgul
      21.06.2017 12:37

      А разве они в тренде?
      Вроде бы сейчас эти вопросы не в моде…
      Только если на должность какого-нибудь эникея в СТО находящийся посреди тайги. :-)


    1. japan007
      21.06.2017 13:14

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


    1. dmitry_ch
      22.06.2017 23:46

      А еще хорошо смотрится «есть вопрос, я в книжке про гугл прочитал, и ответа не помню, но посмотрим на ваш ход рассуждений» )


  1. Myosotis
    21.06.2017 12:55
    +2

    Ещё антипаттернов в копилку:


    • Встретьте соискателя фразой: «Вы знаете, у нас таааак много кандидатов на эту позицию!». Это чтобы он не выпендривался.
    • Проводите соискателя словами: «Если через месяц вы не получите от нас вестей, значит, вы нам не подходите». Даже если вы сразу поняли, что он вам не подходит, пусть ждёт и надеется.


    1. White_Scorpion
      21.06.2017 13:54
      +2

      Второй пункт у вас — это стандартное "Мы вам перезвоним". Используйте его чаще =).


    1. dmitry_ch
      22.06.2017 23:45

      Усугубим: не просто «мы вам не перезвоним», а «сначала соберем фидбек с коллег, потом проведем ранжирование» (больше слов, больше щеки!), а потом «если никто из коллег не перезвонит, тогда сами меня наберите, я их попробую толкнуть, чтобы они отписались».

      Сплошная забота о кандидате, но концов не найти, это ли не признак серьезности разделения обязанностей в компании? А то, и правда, скажет «шарашка»!


  1. n_elloco
    21.06.2017 13:14
    +2

    А еще при поиске кандидатов на всяких рекрутинговых площадках предлагать свою вакансию всем. Не важно, что у чувака в профиле написано С++ developer, он с тем же успехом справится и с NodeJS и с вёрсткой и с ReactJS, которые используются на вашем проекте


  1. edejin
    21.06.2017 13:48
    +1

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

    И конечно, писать в объявлении, все известные библиотеки, фреймворки и остальные инструменты, начиная со времен создания языка и самые новые, находящиеся в версии 0.0.0.1 alpha pre alpha.


  1. choupa
    21.06.2017 14:27
    -6

    Оптимум лежит наверное где-то посередине между вашими антипатернами и требованиями работодателей.

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

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

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

    «Попасть на работу в Москве, как-нибудь закрепиться. А потом уже найду другую „хорошую“ работу.»
    (девушки): «Надо бы найти приличного интеллигентного мужика из программистов».
    «Уволили с работы, полгода балдел, деньги кончились. Надо срочно на работу, а то кушать нечего».

    Это всё нездоровые мотивации, таких на работу брать не стоит.


    1. fukkit
      21.06.2017 15:21

      девичью-то мотивацию — это вы со зла в нездоровую записали


    1. Alesh
      21.06.2017 19:57
      +3

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


    1. mad_nazgul
      22.06.2017 15:56

      А какая вам разница что за мотивация у соискателя устраиваться к вам на работу?
      Вам работу надо работать, а не устраивать психологические исследования.
      А чтобы понять как работает человек достаточно испытательного срока.
      Он как бы для этого предназначен.
      Думаю трех месяцев вполне достаточно, чтобы понять соответствует он вашим требованиям или нет.
      А влезать в «скрытые» мотивы это контрпродуктивно.
      Т.к. затрат много, а результат будет близок к нулевому. :-)


      1. DrPass
        22.06.2017 17:22
        +1

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

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


        1. khim
          22.06.2017 19:03

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

          Не нужно путать ремень безопасности с тормозами — они вообще для разных вещей…


  1. SergioPredatore
    21.06.2017 15:30
    +8

    Много эпичных примеров встречал в своей практике, но есть один очень любопытный и показательный на мой взгляд.
    Собеседуют меня значит технари (двое их было), предварительно дали несколько тестовых задач, которые естественно предлагалось закодить на бумажке. Придрались к ошибке в одной конструкции, моё объяснение что я таких конструкций каждый день не пишу, а среда собственно подскажет мне об ошибке, восприняли с подозрением.
    Но дальше был эпик. Попробую это воспроизвести в виде диалога.
    — Эта задача решена не правильно.
    — А что не так?
    — Вот тут в постановке написано… А Вы сделали…
    — Эм… вообще то я бы сказал что это не совсем однозначно, то что я прочёл в постановке я воспринял именно так.
    — Но тут же всё совершенно очевидно!
    Со смехом подключается второй: — Ни один ещё правильно не прочитал.
    — Может быть если я не один такой, то проблема не в нас, а в постановке?
    — Да нет же, тут всё совершенно очевидно.


    1. DrPass
      21.06.2017 16:04

      Справедливости ради, не видя постановки, сложно что-то судить. Ситуация, что десять соискателей (по крайней мере, на должность джуниора) подряд не действительно не могли понять действительно простую и очевидную задачу — это совсем не редкость, уж поверьте. :)


      1. jehy
        21.06.2017 16:10

        У меня есть такая задача "на засыпку" для кандидатов, которые говорят, что хорошо знают SQL. Задаю простой вопрос:


        Что будет результатом запроса select * from a, b где a и b это некие таблицы?

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


        1. fukkit
          21.06.2017 16:16

          Может быть, потому что так стараются не писать?


          1. DrPass
            21.06.2017 16:31
            +2

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


            1. fukkit
              21.06.2017 16:39

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


              1. mayorovp
                21.06.2017 20:55
                +1

                JOIN — это соединение, а не объединение.
                Потому что объединением называют UNION


            1. mrsantak
              21.06.2017 16:49

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


            1. unabl4
              21.06.2017 18:08
              +2

              «Скажи мне — и я забуду, покажи мне — и я запомню, дай мне сделать — и я пойму.» ©


        1. DistortNeo
          21.06.2017 16:44

          Да, этот вопрос просто показывает любознательность.


          1. DrPass
            21.06.2017 17:35
            +2

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


            1. DistortNeo
              21.06.2017 18:11

              Почему же? Он просто напишет JOIN вмето запятой. Существует очень много вещей, незнание которых не будет влиять на выполнение практических задач. Например, я не верю, что существует человек, который знает все нюансы C++17. Детали реализации сборщика мусора в Java или C# тоже в подавляющем большинстве случаев не нужны разработчику.


              1. OlegZH
                21.06.2017 18:21

                JOIN, говорите? Придётся всё заново изучать. И учиться всю оставшуюся жизнь, не переставая…


              1. DrPass
                22.06.2017 00:37
                +1

                Почему же? Он просто напишет JOIN вмето запятой.

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


                1. grossws
                  22.06.2017 02:28

                  В чём сложность понимания джойнов? Кроме того, это к реляционной теории (если про принципиальное понимание того, что получается в результате) и к реализациям (которые и в чистом человеческом программировании те же самые, и в NoSQL), а не к SQL. А детально помнить несколько вариаций SQL-синтаксиса, если не имеешь дела с sql-базами почти никогда — явно лишнее.


                  1. DrPass
                    22.06.2017 10:15

                    В чём сложность понимания джойнов?

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


                    1. jehy
                      22.06.2017 10:25

                      Отвечаю как преподаватель. Сейчас на СУБД обычно выдаётся один семестр. Этого катастрофически не хватает для полного понимания, и даже из усвоенного студенты забывают половину к моменту трудоустройства.


                      1. mayorovp
                        22.06.2017 10:29

                        Все-таки надо не в семестрах считать, а в часах. Их может быть как 8 в неделю, так и 1.


                        1. jehy
                          22.06.2017 11:13

                          Две пары в неделю — одна на лекции, одна на практику.


                        1. ad1Dima
                          22.06.2017 11:39

                          насколько я помню, стандартный семестровый курс — 72 часа


                      1. DrPass
                        22.06.2017 13:37
                        +1

                        Я вот с вами не соглашусь. Я и сам в недавнем прошлом преподаватель, правда, не ВУЗовский, вёл профессиональные курсы, и два десятка лет назад учился в институте, где «Модели и структуры данных» тоже занимали один семестр. Для данного курса одного семестра предостаточно. Кортежи, атрибуты, отношения, операции реляционной алгебры — всё это прекрасно вмещается в три-четыре лекции. Потом лекция по видам СУБД, и дальше детальный разбор одной РСУБД на примере чего-то популярного. Потом ключи, индексы, нормализация, можно (и даже желательно) даже нырнуть во внутреннюю кухню вроде В-деревьев, и остаётся еще месяц на погружение в SQL. Просто нас, например, на проработках гоняли и в хвост, и в гриву на построение хитрых запросов а-ля «Выбрать в список для отчисления всех студентов, у которых с позапрошлого семестра есть более двух непогашенных задолженностей». А многие преподаватели своих птенцов жалеют, не напрягают их мозги :)


                        1. jehy
                          22.06.2017 13:45

                          Тут есть очень толстый нюанс в том, что вы не ВУЗовский преподаватель. Студенты профессиональных курсов гораздо больше настроены на обучение, и впитывают информацию в разы быстрее и больше.


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


                          Ну и как написали выше — в семестре может быть разное количество часов на курс. У меня вот было 2 пары в неделю, итого 2х1.5х18=54 часа.


                          1. mayorovp
                            22.06.2017 14:06

                            2х2х18 = 72


                            Откуда у вас множитель 1,5 взялся, если речь идет об академических часах (тех что по 45 минут?)


                            1. jehy
                              22.06.2017 14:15

                              А, так ad1Dima про них писал. Пардон. Я в стандартных человеческих часах считал — отсюда и расхождение.


                              1. ad1Dima
                                22.06.2017 14:35

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


                    1. DistortNeo
                      22.06.2017 14:14

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


                      Но для того, чтобы рассказать и показать, что такое JOIN, достаточно одного семинара, и при этом не нужна все эти нагромождения с нормальными формами, с релционной алгеброй, с атрибутами и т.д. Можно всё то же самое объяснить на порядок быстрее и понятнее.


                      1. mayorovp
                        22.06.2017 14:15

                        Нормальные формы тоже нужны, для других целей.


                        1. DistortNeo
                          22.06.2017 14:35
                          -1

                          Да, например, для задания вопросов на экзаменах.


                          И если уж рассказывать про нормальные формы, то с упором на практическую сторону: денормализация для повышения производительности, как использутся нормальные формы в NoSQL и т.д.


                          1. mayorovp
                            23.06.2017 07:04

                            Не подскажете, в каком именно NoSQL используются нормальные формы?


                            1. DistortNeo
                              23.06.2017 10:54

                              А что, без пояснений непонятно, что это провокационный вопрос?


                      1. ad1Dima
                        22.06.2017 14:37

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

                        В каких? У меня в Колледже при НГУ все было как положено: лекции и лабораторные.


                1. DistortNeo
                  22.06.2017 03:56
                  +2

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

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


                  Конечно, можно заменить FROM ... JOIN ... ON/USING на FROM ... , ... WHERE ..., но зачем?


                  1. DrPass
                    22.06.2017 10:13

                    Ну вот я не знал, потому что SQL использую довольно редко, а CROSS JOIN ещё ни разу не был нужен

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


                    1. jehy
                      22.06.2017 10:28

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


                    1. DistortNeo
                      22.06.2017 14:32

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

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


                      1. jehy
                        22.06.2017 14:45

                        Ну не стоит прям обобщать SQL на фуллстек по всем технологиям. В 80% вакансий по бэкенду требуется именно хороший SQL плюс знание какого-то конкретного языка разработки. Хотя сейчас этот процент падает потихоньку.


                      1. DrPass
                        22.06.2017 17:37

                        SQL, это же не какая-то прерогатива фулл-стеков. Это нужно и чистым бэкендщикам, и BI, и OLAP, и собственно разработчкам БД.
                        Да и, честно говоря, не понимаю я этот скепсис по поводу фулл-стеков, как будто это какая-то сложная специализация. Любой веб-разработчик легко может освоить какую-нибудь серверную платформу, будь-то близкий ему node.js, будь-то далекая от него WebSphere, всего лишь при желании и некотором времени на обучение и практику.


                        1. DistortNeo
                          22.06.2017 20:34

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


        1. OlegZH
          21.06.2017 18:11
          -1

          Простите, а в запросе нет синтаксической ошибки? А то таблица b как-то нехорошо «повисает в воздухе». Я забыл точный синтаксис SQL-запросов (запятая в запросах применяется в очень ограниченных случаях), и меня терзают сомнения относительно выполнимости такого запроса.


          1. mrsantak
            21.06.2017 18:30
            +2

            Это один из вариантов синтаксиса cross join. На выходе получим декартово произведение.


            1. DistortNeo
              21.06.2017 18:46

              Кстати, является ли это официальным стандартом SQL? Или просто синтаксический сахар по типу #pragma once в C++ — все компиляторы эту директиву поддерживают, но она все равно считается нестандартной?


              1. mrsantak
                21.06.2017 19:35
                +2

                Да, это стандарт ANSI-89.
                Но в ANSI-92 этот же запрос будет уже иметь вид select * from a cross join b.


              1. khim
                21.06.2017 21:04
                +1

                Это оригинальное написание. Использовать не рекомендуется (лучше писать JOIN), но… из песни слова не выкинешь — а вот из SQL'я запросто.

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

                P.S. Кстати приоритет у JOIN и запятой разный, так что брать и тупо производить поиск с заменой не стоит…


                1. PsyHaSTe
                  28.06.2017 12:29

                  А можно насчет приоритета поподробнее? Всегда считал это просто алиасом.


                  1. mayorovp
                    28.06.2017 12:50
                    +1

                    A, B right join C on X = A, (B right join C on X)
                    A cross join B right join C on X = (A cross join B) right join C on X


                    Если, к примеру, в таблице A 2 строки, в таблице C — 1 строка, а таблица B — пустая, то первый запрос вернет две строки, а второй — одну.


        1. lagranzh
          22.06.2017 11:42

          а я для развлечения спрашиваю что тако байт. Еще никто не ответил.


          1. ad1Dima
            22.06.2017 12:24
            +3

            А какой ответ вы ждете? 8 бит? Единица измерения информации?


            1. Alexeyslav
              22.06.2017 13:16

              бывают и 7 битные байты, и 12 битные… 8-битные просто лучше прижились.


              1. jehy
                22.06.2017 13:19
                +2

                Если у вас программируют на Минск-32, то без этого никак!


              1. khim
                22.06.2017 13:26

                8-битовыми они стали на IBM/360, а потом — да, уже везде стали такими…


              1. grossws
                22.06.2017 13:31

                Ещё вопрос в каком контексте. В том же c99 и c11 байт просто не меньше 8 бит (исходя из диапазона -128..127), но ничего более конкретного не оговорено. На некоторых архитектурах он будет 32 бита без особых проблем.


                Часто специально применяют термин октет, чтобы говорить про 8 бит.


            1. khim
              22.06.2017 13:25
              +1

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


              1. lagranzh
                22.06.2017 14:16

                бывают байты переменной длины?


                1. khim
                  22.06.2017 19:07

                  Криво высказался. На PDP-10 длина байта и позиция его в машинном слове задавалась в команде. Окуда, кстати, все эти «битовые поля» в C/C++ приехали (через BCPL) — там они были реально быстры и дёшевы.

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


                  1. lagranzh
                    22.06.2017 19:45

                    Мы с вам по-разному понимаем, что есть байт, про это и был вопрос :).


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


                    1. khim
                      22.06.2017 21:20

                      В моем понимании, размер байта это количество бит между адресом n и адресом n + 1. а сам байт, это то что лежит по адресу n длиной в размер байта.
                      Какого размера будут байты если у вас тегированая память, как в Эльбрусе?


                      1. lagranzh
                        22.06.2017 22:10

                        Не знаю. Может в этом случае размер байта совпадает с размером tagged union?


                        1. khim
                          22.06.2017 23:19

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

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


            1. lagranzh
              22.06.2017 14:16

              Я знаю ответ "минимально адресуемая единица памяти". я неверно знаю?


              1. grossws
                22.06.2017 15:40

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


                1. lagranzh
                  22.06.2017 17:26

                  значит на первых машинах байт будет 32-х битный, а на вторых — однобитный.


          1. DistortNeo
            22.06.2017 22:05

            Берём ISO/IEC 2382-1:1993 и смотрим:


            01.02.09. Byte
            String (04) that consists of a number of Bits (01.02.08), treated as a unit, and usually representing a Character (01.02.11) or part of a character.
            Note 1: The number of bits in a byte is fixed for a given Data processing system (01.01.11).
            Note 2: The number of bits in a byte is usually 8.


  1. Alesh
    21.06.2017 19:43

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


    1. mrsantak
      21.06.2017 20:50

      У вас там оригинал паспорта что ли просили? Без него ипотеку оформить не получится.
      Насчет обилия документов — насколько я понимаю, компания не может просто так взять и перевести деньги рандомному человеку, нужно заключать договор.


      1. Alesh
        21.06.2017 21:24

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


        1. mrsantak
          21.06.2017 21:33

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


          1. Alesh
            21.06.2017 21:37

            Да, но номер, серия, дата, фамилия имя, должны быть реально существующими. Да и ксерокопия пасторта должна лежать в папочке. К тому же нужен еще один документ. С меня был запрошен СНИЛС.


            1. DistortNeo
              22.06.2017 03:05

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


              1. Alesh
                22.06.2017 23:19

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


                1. khim
                  22.06.2017 23:45
                  +1

                  Я писал об оплате тестового задания.
                  Именно.

                  Если вы готовы предоставлять все эти документы кому-то кто не будет нести никакой ответственности в случае их использования в криминальных целях, ну это ваше право)
                  Что значит «не будет нести ответственность»? За нарушения законов, насколько я знаю, ответственность таки предусмотрена.

                  Да и потом. Описанная информация (ИНН, СНИЛС, паспортные данные) обязана присутствовать в договоре. Если вы до сих пор работали только в компаниях, которые всё делали с нарушением закона и даже идея всё сделать так, как это требуется вызывает у вас дрожь в коленях, то это — ваше право, но как бы законного способа вам после этого заплатить у компании просто нет.


                  1. Alesh
                    22.06.2017 23:51

                    Читайте плиз комменты до конца, прежде чем писать свой ответ, ниже уже есть ответы на интересующие вас вопросы)


      1. Alesh
        21.06.2017 21:34
        -1

        Если нужен договор, и то, да сё. Может надо об этом сразу говорить? Да даже не стоит предлагать, во всяком случае, если речь идет о не особо сложном синтетическом задании. А то создается впечатление, что цель была именно в получении персональных данных.


        1. mrsantak
          21.06.2017 21:40

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


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

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


          1. Alesh
            21.06.2017 21:46

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


            1. mrsantak
              21.06.2017 22:41

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


              1. Alesh
                22.06.2017 00:10

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


              1. Alexeyslav
                22.06.2017 09:37

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


                1. mrsantak
                  22.06.2017 10:44
                  +1

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


                  1. Alesh
                    22.06.2017 23:23

                    На Бали что сотрудника почты, что сотрудника НR будет найти будет не просто)


                    1. ad1Dima
                      23.06.2017 06:13

                      А что, бали не выдает туристов, или вы еще и загран прикупили?


                      1. Alesh
                        23.06.2017 21:32

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


                        1. ad1Dima
                          26.06.2017 09:26

                          Чтоб на Бали уехать надо паспорт показывать. Чтоб не нашли, надо не свой паспорт показывать. Вот и все. Среднестатистических сотрудник ПР едва ли знает, как купить качественный поддельный паспорт.


                          1. Alesh
                            26.06.2017 16:52

                            Я причем тут?


        1. DrPass
          22.06.2017 00:45

          Если нужен договор, и то, да сё. Может надо об этом сразу говорить?

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


          1. Alesh
            22.06.2017 23:32

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


            1. khim
              22.06.2017 23:49

              Да и было бы странно заключать договор на несколько тысяч, не считаете так?
              Что значит «странно»? На основании чего они должны были бы вам заплатить в отсутствии договора? И как? Без договора они вам и рубля заплатить не могут!


              1. Alesh
                22.06.2017 23:57
                -1

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

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


                1. khim
                  23.06.2017 00:20
                  +1

                  Вы меня сейчас пытаетесь жизни учить или тролить?)
                  Я вам пытаюсь обьяснить что в природе существуют-таки компании, работающие в соответствии с требованиями закона. Как бы сложно ни было вам такое представить.

                  А может вы всегда только по договору деньги получали?
                  Последние 10 лет — да. А в 90е — всякое бывало, но так сейчас на дворе 2017й, а не 1997й…

                  Вы наверно не знаете что очень многие даже зарплату до сих пор в конвертах получаете?
                  Знаю прекрасно.

                  Вы в какой стране живете?)
                  А какая разница? Ситуация в разных странах принципиально не отличается. И в Германии и США и в России есть «нелегалы», получающие чёрную зарплату — и во всех странах с ними борются.

                  Я уже написал, не нужно обещать оплачивать, если это связано с такими проблемами.
                  Какие проблемы? Где? Оформить договор по закону — это уже проблема?

                  Я вас уверяю: если эта компания была устроена так же, как одна из тех, в которых я работал последние 10 лет — то там ни у кого даже на секунду не возникло и мысли о том, что формальности, которые для этого требуются — могут кем-то быть восприняты как проблема! Честно.

                  P.S. Хотя на самом деле с вопросом «вы в какой стране живете?» вы «не в бровь, а в глаз» попали: у меня также есть знакомые до сих пор получают «деньги в конверте» — и трясутся над тем, чтобы свой паспорт кому-то показать. И вот при общении с ними у меня часто возникает ощущение, что мы с ними живём в разных странах. Их почему-то всё время обманывают, «кидают», «подсиживают»… Меня — нет. Иногда реально возникает ощущение, что мы вроде ходим по одним улицам, а живём — в разных даже не странах… в разных, параллельных, вселенных…


                  1. Alesh
                    23.06.2017 00:28

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

                    Какие проблемы? Где? Оформить договор по закону — это уже проблема?

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


                    1. khim
                      23.06.2017 00:37

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

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

                      И более того, никаких проблем нет, я бы сделал и бесплатно, мне не понравился сам факт запроса ПД.
                      Мне это тоже не слишком нравится, но, увы — таковы реалии российского законодательства.

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


                      1. Alesh
                        23.06.2017 00:46
                        -1

                        Вы уверены? А для чего тогда с вас собирали все эти данные? Как вам это обьяснили?


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

                        В описываемом случае было просто письмо, что бы оплатить вам работу, пришлите по списку…

                        что я не понимаю и почему мне это должно было понравится?


                        1. khim
                          23.06.2017 02:00
                          -1

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

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

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

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


            1. DrPass
              23.06.2017 00:16

              Ни о каком договоре речи и не было. Да и было бы странно заключать договор на несколько тысяч, не считаете так?

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


              1. Alesh
                23.06.2017 00:21

                Почитайте что я ответил @khimkhim


                1. khim
                  23.06.2017 00:30

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


                  1. Alesh
                    23.06.2017 00:37

                    Пожалуй и вам копипастну)

                    И если вы так уж радеете за законность, то шаги со стороны представителей НR должны выглядеть так
                    1) Послать мне договор в который бы мне осталось только вписать свои паспортные данные и расписаться. А дальше уже СНИЛС и все что им нужно еще для оплаты.

                    А не слать на деревню дедушке свои ПД
                    Я все верно написал?


                    1. khim
                      23.06.2017 00:40

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

                      Я все верно написал?
                      В этом месте — да.


                      1. Alesh
                        23.06.2017 00:49

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


                    1. DrPass
                      23.06.2017 01:21

                      1) Послать мне договор в который бы мне осталось только вписать свои паспортные данные и расписаться. А дальше уже СНИЛС и все что им нужно еще для оплаты.

                      А не слать на деревню дедушке свои ПД
                      Я все верно написал?

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


                      1. Alesh
                        23.06.2017 01:26
                        -2

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


        1. basili4
          22.06.2017 20:21
          +1

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


          1. Alesh
            22.06.2017 23:25

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


            1. khim
              22.06.2017 23:55

              В каком моем посте вы это увидели?
              В самом первом. Вот тут:
              Есть еще такое. Тестовое задание. Оплачиваемое!
              Фирма не может заплатить вам за работу без заключения договора.

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


              1. Alesh
                22.06.2017 23:59

                «Вот тут» нет ни слова про договор. Не надо прикидываться шлангом.


                1. khim
                  23.06.2017 00:25

                  «Вот тут» нет ни слова про договор.
                  Там было написано что вы собирались получить за свою работу деньги.

                  Как вы это себе представляете в отсутствии договора? Ну как? Вы всерьёз думаете, что все, абсолютно все живущие в России сознательно нарушают закон? По умолчанию? Автоматически? Мне страшно представить себе мир, в котором вы живёте… нет, честно.

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


                  1. Alesh
                    23.06.2017 00:30

                    Мне страшно представить себе мир, в котором вы живёте… нет, честно.

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


                  1. Alesh
                    23.06.2017 00:36
                    +1

                    И если вы так уж радеете за законность, то шаги со стороны представителей HR должны выглядеть так
                    1) Послать мне договор в который бы мне осталось только вписать свои паспортные данные и расписаться. А дальше уже СНИЛС и все что им нужно еще для оплаты.

                    А не слать на деревню дедушке свои ПД
                    Я все верно написал?


  1. kuraga333
    22.06.2017 10:35

    А как кто думает — как соискателю реагировать на эти антипаттерны? И сиюминутно, и в целом?


    1. jehy
      22.06.2017 11:08
      +2

      It depends.


      1. Даже у самой замечательной компании могут быть печальные HR процессы, так что соискателю не воспринимать этот список как "увидел хоть один пункт — беги".
      2. В списке есть несколько спорных моментов, которые на самом деле могут означать разное (на мой взгляд, 2-3, хотя это мой же список).
      3. Если вы сознательно идёте работать в организацию вроде банка с большим количеством бюрократии, то нужно быть готовым встретить минимум 5 пунктов из списка.
      4. Часто организация использует HR на аутсорсе, в этом случае все ошибки имеют отношение не к компании, а к аутсорсерам.
      5. Никто не совершенен, и некоторые косяки случаются просто потому что случаются (shit happens). Так что не стоит воспринимать первый же антипаттерн как сигнал о том, что всё плохо систематически. Люди заболевают, опаздывают, забывают, у всех есть свои личные обстоятельства — так что иногда нужно просто, например, напомнить о себе. У меня такое случалось довольно много раз, и HR потом извинялись и отлично вели коммуникацию дальше.

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


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


      1. kuraga333
        22.06.2017 11:55

        Спасибо за столь развернутый ответ!

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

        Спустя пару лет, теперь, когда уже не совсем джуниор, задумываюсь — а как можно (не нужно, а просто можно) адекватно отреагировать в тот самый момент? См. мой комментарий, например… Ну и вот как реагировать в тот момент? Промолчать? Сразу уйти (зачем тратить время и свое, и чужое)?

        А если тебе звонят через три месяца после собеседования, как писали другие, — промолчать, или ответить юмором? Я вот человек с юмором, и сейчас, глядя на свое резюме, я понимаю, что на юмор право имею… Но ведь чертов этикет…


        1. jehy
          22.06.2017 12:15

          а как можно (не нужно, а просто можно) адекватно отреагировать в тот самый момент?

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


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


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


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


        1. mrsantak
          22.06.2017 12:48
          +1

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


          1. kuraga333
            22.06.2017 12:53

            У меня вызывает недоумение действия не руководителей и технических специалистов, а именно HR. Особенно с учетом расшифровки «HR».

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


            1. mrsantak
              22.06.2017 13:03

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


              1. khim
                22.06.2017 13:34
                +2

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

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


            1. jehy
              22.06.2017 13:28

              Вам навскидку несколько примеров того, с чем сталкиваешься с этой стороны рекрутинга:


              • Кандидат молча не приходит на встречу.
              • Когда пытаешься выяснить, чем занимался кандидат на прошлой работе, отвечает несколько раз односложно "Внедрял!"
              • Кандидат не может найти офис при условии того, что у него есть адрес и прикреплённая карта.
              • Кандидат не может предоставить никакой образец кода, мол "всё под NDA". Тестовое задание брать тоже отказывается.
              • На вопрос о удобной дате встречи, кандидат предлагает дату через полтора месяца.
              • Несмотря на то, что в вакансии трижды написано, что работа только в офисе, кандидат продолжает гнуть линию, что будет работать из дома или из своего города. Если ему говорят, что этот вариант не подходит так как у нас PCI DSS, то в ответ начинает говорить, что мы застряли в каменном веке.
              • У части пришедших кандидатов нет разрешения на работу. Иногда вообще приходят нелегальные эмигранты. Что характерно, об этом человек готов рассказать только после собеседования.
              • Внезапно оказывается, что "ну, я могу приезжать только к 12. И уезжать надо в 17. И вообще могу приезжать только по средам в чётные числа".

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


  1. dmitry_ch
    22.06.2017 23:39
    +1

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

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


    1. ad1Dima
      23.06.2017 06:25

      Что интересно, NDA на английском должно дублироваться на русском. Я не уверен, но кажется его можно будет признать несущественным в РФ.


      1. dmitry_ch
        23.06.2017 07:08

        Вы совершенно правы. Насколько я знаю, в России и доказать «срабатывание» NDA — та еще задача, так что, очевидно, на этапе собеседования (а точнее — еще до него) это всего лишь средство «запугивания», и попахивает детским садом. Но мы про антипаттерны, так что NDA стоит взять на вооружение!


  1. ZloyHobbit
    27.06.2017 10:42
    +3

    Не забудьте написать в описании вакансии, что у вас есть печеньки. А ещё Agile и Scrum. Это так оригинально!

    Вот тут не соглашусь, про печеньки надо писать, если они есть. А то я как-то пришел в офис, уже договор подписав, и только там выяснилось что печенек нет! Теперь всегда смотрю в вакансии, есть ли в офисе печеньки.


    1. il--ya
      27.06.2017 14:09
      +1

      Серьёзно, печенек нет? Пипец. Ну хоть Agile-то у них был?


      1. DrPass
        27.06.2017 14:51
        +4

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


  1. vbif
    27.06.2017 10:48

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