На конференциях часто на стендах раздают подарки. Обычно нужно решить какую-то задачку.

Невинная головоломка


Некоторые из задач предусматривают решение головоломки с кодом, вроде такой:

Каким будет результат выполнения следующего кода:

public class Sum {

    public static void main(String[] args) {
        System.out.println(0123 + 3210);
    }
}

  1. 3293
  2. 3333
  3. Этот код не компилируется
  4. Этот код приводит к ошибке IllegalArgumentException
  5. Ничего из вышеперечисленного

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

Просто, но бесполезно


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

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

В обоих случаях следует оценить способности, а наиболее простым решением видят как раз тест-опросник с несколькими вариантами ответа. Конечно, если у человека нет доступа к IDE или Google, то это становится трудной задачей. Но что проверяется в вышеприведённом примере? Знание очень специфической ситуации, которая возникает при определённых параметрах. Это специфическое использование, которое в любом случае я запретил бы использовать в своих проектах по той же причине: это исключительная ситуация! А я не хочу, чтобы в моём коде встречались такие ситуации.

Другой пример


Вот ещё одна задачка, с которой вы можете столкнуться:

Какова корректная сигнатура метода service() в классе javax.servlet.http.HttpServlet?

  1. public void service(ServletRequest, ServletResponse)
  2. public void service(HttpServletRequest, HttpServletResponse)
  3. public int service(ServletRequest, ServletResponse)
  4. public int service(HttpServletRequest, HttpServletResponse)
  5. protected void service(ServletRequest, ServletResponse)
  6. protected void service(HttpServletRequest, HttpServletResponse)
  7. protected int service(ServletRequest, ServletResponse)
  8. protected int service(HttpServletRequest, HttpServletResponse)

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

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

Ключевая проблема


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

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

То же самое относится к сертификации.

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

Осуществимо ли такое? К сожалению тех, кто считает это утопией, такая система уже существует. Наилучший пример — Java EE Enterprise Architect. Хотя на первом этапе нужно пройти тест с несколькими вариантами ответа, другие этапы предусматривают выполнение заданий как в настоящем проекте и написание соответствующего эссе.

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

Вывод


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

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


  1. forceLain
    31.08.2017 12:03
    +11

    если у него есть правильные ответы

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


    1. fillpackart
      31.08.2017 12:08
      -47

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


      1. Hardcoin
        31.08.2017 12:35
        +39

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


        1. fillpackart
          31.08.2017 12:56
          -41

          Опыт стоит достаточно много

          Нет. Опыт позволяет помнить готовые решения типовых задач, в то же время лишая разработчика возможности/желания подумать над этим ещё раз. Принято считать, что опытный разработчик by default лучше неопытного, хотя когда спрашиваешь, почему, то получаешь в ответ абстрактное «ну он сталкивался с кучей проблем и знает их решение». Только google тоже знает их решение, единственный важный показатель для разработчика — способность создавать (не брать готовое) решение, не зависит от его опыта. Кому нужны динозавры со своими 1000000 лет опыта на делфи?


          1. dimm_ddr
            31.08.2017 13:07
            +18

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

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


            1. qdb
              31.08.2017 14:01

              думаю, он имеет ввиду часть опыт вне «скилла» (умения). то что вы сказали можно отнести к умению.


              1. greabock
                31.08.2017 16:31
                +8

                Нельзя отделять одно от другого. Равно как и нельзя поставить === между этими понятиями. Эти вещи коррелируют, но не имеют прямой зависимости.
                Мне нравится такая формула:


                опыт       = количество_опыта * качество_опыта
                умение     =        интеллект * талант
                навык      =             опыт * умение
                полезность =            навык * мотивация


                1. monah_tuk
                  01.09.2017 09:17
                  +1

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


                  1. greabock
                    01.09.2017 11:57

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


                1. domix32
                  01.09.2017 11:52

                  Что есть талант?


                  1. greabock
                    01.09.2017 12:03

                    Некоторый "врожденный" коэффициент предрасположенности к чему либо.


                    1. saboteur_kiev
                      01.09.2017 14:47

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

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

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


                      1. dimm_ddr
                        01.09.2017 15:12

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


                      1. vedenin1980
                        01.09.2017 15:48

                        талант — не предрасположенность, а наработка

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

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


                        1. saboteur_kiev
                          01.09.2017 16:52
                          +1

                          Простите, но двухметровый рост это не талант, а габариты.
                          Еще никого в мире не называли «талантливый верзила», «талантливый дистрофик».

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


                          1. vedenin1980
                            01.09.2017 17:02
                            +1

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


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

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

                            Следовательно, логическое условие:
                            Нет врожденных коэффициентов, есть только опыт. Другой вопрос как опыт был набран.


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


                            1. saboteur_kiev
                              02.09.2017 01:40

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

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


                              1. vadimr
                                02.09.2017 11:14
                                +1

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


                              1. vedenin1980
                                02.09.2017 14:27
                                +1

                                Не так. Человек с любым ростом может гениально играть в баскетбол,


                                Даже если может игроку метрового роста будет играть намного сложнее чем 2 метровому (его банально заблокировать проще и ему сложнее закинуть мяч вблизи). А значит он потратить времени и сил намного больше при том же результате.

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

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

                                Вам любой тренер почти в любом виде спорта скажет, что когда к нему приводят 3-5 летних детей, он может уже 100% сказать у кого нет никаких шансов в профессиональном спорте (именно в этом виде спорта). Это не значит что все виды спорта закрыты, если генетически вам не стать спринтером, вы можете стать марафонцем и наоборот.

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


                      1. Neikist
                        01.09.2017 16:20
                        +2

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


                        1. Markscheider
                          01.09.2017 16:49
                          +3

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

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

                          Так почему же не все люди хорошо поют, хотя имеют и слух, и голос? Все просто: не отработано взаимодействие этих двух служб. Услышать ноту «ля» первой октавы могут все. А вот воспроизвести своим голосовым аппаратом соответствующий звук (440 Гц), т.е. «попасть в ноту» — не все.

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


                          1. Neikist
                            01.09.2017 17:04

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


                            1. saboteur_kiev
                              02.09.2017 01:41

                              Глухие люди это не отсутствие таланта. Бетховен.

                              Не путайте дефекты и талант.


                              1. Markscheider
                                04.09.2017 11:51

                                Опередили меня с комментом :) Добавлю еще пять копеек…

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


                                1. Neikist
                                  04.09.2017 12:55

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


                          1. Kealon
                            05.09.2017 13:13

                            То что способности нет, это конечно неправда. Но в реальности не у всех есть средства(деньги, время) опровергать диагноз «медведь на ухо наступил», этот просто экспертное мнение: «овчинка выделки не стоит». Вы вот как оцениваете соревнование с дельфином в плавании?


                            1. Markscheider
                              05.09.2017 13:34

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


                      1. greabock
                        01.09.2017 16:32
                        +2

                        Господа, вы слишком серьезно к этому относитесь.
                        Это же просто выдуманная формула для тайкуна.
                        Я не проводил никаких исследований по этому поводу.


          1. Varim
            31.08.2017 13:10
            +2

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


          1. Free_ze
            31.08.2017 13:29
            +9

            способность создавать (не брать готовое) решение, не зависит от его опыта.

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

            Кому нужны динозавры со своими 1000000 лет опыта на делфи?

            Кому нужны новички с амбициями, но без опыта?


          1. Hardcoin
            31.08.2017 14:47
            +1

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


            "Сталкивался с кучей проблем" — это понятие абстрактное для тех, кто не сталкивался. Для остальных оно конкретное. Знаешь, как работает менеджер пакетов apt? Можешь начать работать с npm за 5 минут, а не за час. Экономия времени. Знаешь, чем отличается hash и b-tree? В следующий раз выбираешь за пять минут, а не после боевой эксплуатации с проблемами и тормозами. Опять экономия. Таких вещей сотни. Гугл вам на вопрос "hash vs b-tree", конечно, даст ссылку на документацию, но если человек не знает про hash, он даже гуглить не будет.


            P.S. да, я смешиваю опыт и знания, потому что они частично взаимозаменяемы.


          1. shurutov
            31.08.2017 16:45
            +8

            У меня сложилось впечатление, что вы немного путаете стаж и опыт. Разница, если очень кратно:
            стаж: протирание штанов в офисном кресле, решение исключительно типовых задач путём механического копирования найденных решений схожих/подобных задач; развивается только навык слепой печати, да и то не всегда;
            опыт: решение задач путём использования головного мозга и имеющихся в этом мозгу знаний для анализа условий и формализации задачи с целью выработки пути решения; анализ имеющихся средств и способов решения для выбора наиболее соответствующего условиям задачи (средств и способов зачастую несколько); собственно решения задачи и, наконец, оформления отчёта о проделанной работе. Финальный пункт также включается в опыт, ибо Вы задачу решаете не только в своё удовольствие, но и, в подавляющем большинстве случаев, для использования Вашего продукта более другими людьми.
            Когда вы набираете опыт, мало того, что набирается некоторая база знаний, ещё и мозги развиваются, что весьма важно для решения сложных и трудоёмких задач.


          1. Aleks_ja
            31.08.2017 21:37
            +1

            Опыт, помимо прочего, развивает «чуйку».


            1. franzose
              01.09.2017 09:58

              Ага, когда вроде понимаешь, а словами объяснить не можешь.


          1. vedenin1980
            31.08.2017 23:59
            +6

            Кому нужны динозавры со своими 1000000 лет опыта на делфи?

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


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


            1. DistortNeo
              01.09.2017 00:13

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

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


              1. vedenin1980
                01.09.2017 00:30
                +1

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


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


                1. SirEdvin
                  01.09.2017 14:16

                  Где-то это правда, но им по крайне мере не нужно объяснять зачем сборщик мусора в принципе нужен.

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


                  1. depadep
                    01.09.2017 17:33

                    Я по своему опыту скажу: когда после 7 лет программирования на C++ переключился на C# сборщик мусора был сразу воспринят как божественная фича. Поскольку я на своей шкуре ощущал, сколько у нас проблем и багов вылезало из-за неправильной работы с распределением-освобождением памяти.


          1. Arbane
            01.09.2017 08:49
            +1

            Вы, наверное, путаете умение мыслить и решать задачу понятно с тыканием мышкой в экран. Я пишу на дельфи и на С#, и на JavaScript под Node.js и т.п. А человек, который знает методы, но не умеет думать или который выучил 100500 бесполезных ненужных никому сейчас «оптимизаций» С в стиле +(a++-c-)-b, мне в команду не нужен.


          1. franzose
            01.09.2017 09:56

            А при чём тут конкретно Delphi? Если Delphi позволяет адекватно решить поставленную задачу, то почему бы и нет? Это одно. А второе:


            единственный важный показатель для разработчика — способность создавать (не брать готовое) решение

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


          1. dovg
            01.09.2017 15:49

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


            1. tyomitch
              01.09.2017 17:15
              +2

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

              Делфи скоро тоже будет в этой нише :)


          1. i_visseri
            01.09.2017 18:31
            +1

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


          1. AndreyRubankov
            03.09.2017 14:32
            +1

            У опыта есть свойства: количество и качество, как greabock упоминает в своем комменте.

            Количество опыта – это время работы. Месяц, год, два… за это время на пути встречается большое количество проблем, которые как-то решаются.
            пример: 3 года работы с Фреймворком Х означает, что разработчик на своем пути столкнулся с множеством проблем. точка.

            Качество опыта – это время, потраченное на исследование проблем и их решений.
            пример: 3 года работы с Фреймворком Х совершенно не означает, что разработчик получил качественный опыт – он мог гуглить и копипастить «решения» без понимания, что происходит.

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

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


      1. L1ar
        31.08.2017 14:01
        +7

        Наверное, в каком-то вашем особом мире опыт ничего не стоит.
        Только с опытом разработчик будет знать, когда какие подходы применять, когда лучше сделать так, а не иначе. Чувак со скилом 100 только что из универа никогда не будет лучше чем разраб со скилом 90 и опытом лет 10. Точнее будет. Лет через 8.
        Ну это если разделять скил и опыт. Так-то опыт обычно в скил перетекает, если человек с мозгом, конечно (тех, кого опыт ничему не учит мы не рассматриваем).


        1. fillpackart
          31.08.2017 14:14
          -8

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


          1. Varim
            31.08.2017 14:20
            +3

            очевидно вся перепалка в том что вы упомянули скилл и опыт но не дали определения терминам.
            По русски скилл это наверное навык, а экспириенс это опыт.
            Тем не менее, что такое навык что такое опыт?
            Набить руку на кидание дротика, это навык, а что такое опыт? Вроде как память о сделанных ошибках и удачах (достижений)?


            1. fillpackart
              31.08.2017 14:40
              -10

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


              1. Hardcoin
                31.08.2017 14:50
                +1

                Опыт — это не то, что с тобой происходило (это "прошлое" или "воспоминания"), это то, что ты из этого вынес.


                Дурака жизнь не учит — про это. События происходят, а опыт не набирается.


                1. fillpackart
                  31.08.2017 14:58
                  -5

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


                  1. Aleks_ja
                    31.08.2017 21:47
                    +1

                    Вероятность существенно больше того, что программист со стажем 8 лет умеет больше чем программист со стажем 1 год.


                  1. playermet
                    01.09.2017 19:53

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


                  1. AndreyRubankov
                    05.09.2017 14:18

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


              1. Odrin
                31.08.2017 19:25
                +5

                Вы путаете опыт и стаж.


              1. Maccimo
                31.08.2017 21:21
                +6

                Вы путаете слова.
                «Низкоуровневый разработчик» это разработчик, работающий на низком уровне абстракций.
                Разработчик драйверов, например.
                Судя по всему, вы хотели сказать «низкоквалифицированный разработчик».


                1. Aleks_ja
                  31.08.2017 21:42

                  Значит, опытные программисты, программируют драйвера, а умелые — сайтики свои клепают :-)


              1. Color
                01.09.2017 01:08
                +2

                Уметь писать код — навык. Работать программистом — опыт

                Это как раз и есть то, что отличает джуниора от мидла, например.


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


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


              1. nightvich
                01.09.2017 09:09
                +1

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

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


      1. darkdan92
        31.08.2017 14:01

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


      1. 1coff
        01.09.2017 08:49

        Вы путаете понятие стажа работы и опыта. Опыт — это очень дорого стоит, возможно даже больше каких-то навыков. А вот по стажу работы о разработчике сказать ничего нельзя.
        Вполне могут быть ситуации когда один имеет стаж 8-10 лет разработки, второй 2-3 года, но при этом у второго опыта больше потому что работал с более разнообразными проектами, писал больше кода и на большее количество граблей наступил.


      1. saboteur_kiev
        01.09.2017 14:41

        «нет никакой корреляции между опытом и скиллом»

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


      1. GarfieldX
        01.09.2017 17:33

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


      1. fillpackart
        02.09.2017 15:47

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


        1. vedenin1980
          02.09.2017 16:07

          Даже в этом случии, выражение

          Вообще ничего, нет никакой корреляции между опытом и скиллом


          Неверно, так как корреляция это любое статистическое взаимоотношение двух случайных величин отличное от случайного. То есть если величина x = N, то величина y = M c вероятностью p, где p не совсем случайное.

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

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


  1. Varim
    31.08.2017 12:20
    +2

    нет никакой корреляции между опытом и скиллом
    fillpackart Поясните что такое опыт, а что такое скилл?
    Для вас опыт это количество отработанных лет?

    Упс, не та ветка.


    1. fillpackart
      31.08.2017 12:50
      -10

      Хотел сказать, что кол-во лет в разработке не связанно с умением её вести.


      1. balexa
        31.08.2017 19:19
        +4

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


  1. gbg
    31.08.2017 13:20
    +4

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

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

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

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

    А для языков, которые содержат возможность создания UB, данный скилл необходим (потому что тест на конкретном компиляторе будет невалиден), иначе количество отстреленных конечностей превратит ваш офис в уровень DOOM, на который кто-то забрел с бензопилой.


    1. mSnus
      31.08.2017 16:11
      +3

      "выстрелит себе в ногу из бензопилы" отдельный скилл))


      1. gbg
        31.08.2017 16:17
        +4

        А в чем собственно проблема?


  1. pm_wanderer
    31.08.2017 13:33
    +1

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


    1. spmbt
      31.08.2017 14:23
      +3

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


      1. pm_wanderer
        31.08.2017 16:26

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


        1. SADM
          31.08.2017 18:34

          Задачу на знание особенностей языка можно инвертировать: {кусок некомпилируемого кода} — Почему не компилируется? Ведь какая разница какой текст ошибки выбросит компилятор, главное заметить где ошибка.


        1. khim
          01.09.2017 01:23
          +1

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

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


          1. pm_wanderer
            01.09.2017 07:40
            -1

            Не совсем так. Он будет понимать, что код таит в себе потенциальную ошибку, но не будет помнить, что конкретно выведет компилятор. Взять к примеру JS. Если объявить переменную через var и через добавление к свойству объекта window, то они будут вести себя по разному в некоторых ситуациях. Не все знают в чем конкретно будет проявляться эта разница, однако есть рекомендация объявлять глобальные переменные только через var, следуя которой мы гарантированно не столкнемся со «странным» поведением среды исполнения.

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

            Кто из нас инвестирует свое время более мудро — покажет лишь время и уровень дохода в старости)


          1. Free_ze
            01.09.2017 11:47

            Ревью и юнит-тесты решают подобные проблемы.


            1. khim
              01.09.2017 13:55

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

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

              Вы правы говоря о том, что ревью и тесты снижают «остроту проблему» — но они отнюдь не делают подобное знание бессмысленным!


              1. Free_ze
                01.09.2017 14:03

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


                1. khim
                  01.09.2017 14:10

                  Серьёзно? Вы ринетесь упрощать кусок кода типа:

                    enum ProcessingLevels {
                      MinimalProcessing = 001,
                      SmallProceassing  = 015,
                      FullProcessing    = 123
                    };
                  

                  Да вы это даже не заметите, если у вас нет знания о том, что нуль в начале числа — это восьмеричная система! Ну выровнял автор константы — где тут криминал?


                  1. Free_ze
                    01.09.2017 15:06

                    Здесь — возможно. Хотя, это как-то слишком элементарно.
                    Я говорю о всяких хаках i+++++i


  1. shushu
    31.08.2017 13:47
    -6

    Первая картинка: 5 — ничего из вышеперечисленного.
    Какой то класс Sum, со статическим методом мейн (был бы class Main можно было бы предположить что восьмеричное число скоадывается с десятичным).
    Так вот, нигде не видно что вызывается метод main из класса Sum. Поэтому — 5
    Какой «правильный» ответ?


    1. soon
      31.08.2017 15:30
      +2

      А в чем проблема именно класса Sum? В java можно в любой класс засунуть метод main и выполнить его.


      1. sets
        31.08.2017 16:28
        -1

        Да, но на первой картинке его никто не вызывает.


        1. AlexNis
          31.08.2017 17:06

          Не знаю как в Java, но в C# статический метод Main является точкой входа. Когда запускаешь exe файл, то именно данный метод отрабатывает.


          1. Ritan
            31.08.2017 19:30
            +1

            Всё почти так же. В качестве Main класса можно указать любой класс, содержащий статический метод main(). Можно иметь несколько точек входа


            1. khim
              01.09.2017 08:57

              Есть важное отличие: при сборке C# программы вы явно указываете точку входа. Всегда. При сборке программы на Java это возможно в некоторых случаях, но практически почти никогда не используется — она указывается при запуске программы в 99% случаев.


              1. avost
                02.09.2017 23:13

                Что вы подразумеваете под сборкой программы на яве? Jar? Там необходимо указывать точку входа. Или вы "сборку" кучки .class-файлов имеете в виду? Так это не программа на яве в 99% случаев, а, в лучшем случае, запуск девелоперской версии внутри ide. Так что в 99% случаев ява-программы точка входа указывается явно.


                1. Ritan
                  05.09.2017 12:40

                  Я не слишком хорошо знаком с миром Java-разработки, но разве не приложения под Android/ какие-то серверные штуки являются основной частью? Standalone Jar я так понимаю не слишком часто встречаются.


                  Там необходимо указывать точку входа.

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


                  1. khim
                    05.09.2017 14:22

                    Но ведь есть целая куча Jar-библиотек, которые вообще не предполагается использовать для запуска
                    Это не так важно. Важно, что есть ещё куча тестов — и я ещё не видел никого, кто собирал бы их в отдельные JAR'ы с указанием «главного» класса.

                    Вот если бы avost сказал «99% программистов на Java собирали хоть раз JAR с указанием главного класса», то я бы согласился. Но ведь подавляющее большинство программ, которые они создают — не таковы.


        1. Maccimo
          31.08.2017 20:41
          +2

          Его вызывает строка «Каким будет результат выполнения следующего кода».


      1. shushu
        01.09.2017 05:47
        -1

        Можно, но для этого надо изменить строку запуска.
        Строка запуска не указана: поэтому я считаю её стандартной, а при стандартной метод Sum::main не вызовется.


        1. Maccimo
          01.09.2017 07:25

          Вы говорите загадками, о какой «стандартной строке запуска» речь?
          Более стандартную строку, чем java Sum вряд ли можно придумать, а она именно что будет искать класс Sum, затем метод main() в нём и вызывать последний.


  1. DarthVal
    31.08.2017 14:02

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


    1. SADM
      31.08.2017 18:57

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


  1. shurutov
    31.08.2017 14:02
    +2

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


    1. Serge78rus
      31.08.2017 16:03
      +3

      А какое отношение имеет форма записи константы в исходнике к внутреннему представлению чисел при вычислении?


      1. shurutov
        31.08.2017 16:51
        -1

        Я повторю, вдруг не видно было:


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

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


        1. Serge78rus
          31.08.2017 18:27
          +5

          Я тоже повторю:

          // Число 41 в десятичной системе
          int v1 = 41;
          //  Число 41 в шестнадцатеричной системе
          int v2 = 0x29;
          // Число 41 в восьмеричной системе счисления
          int v3 = 051;
          // Число 41 в двоичной системе
          int v3 = 0b101001;
          

          При этом переменные v1, v2, v3, v4 будут представлены в памяти абсолютно одинаково, и если человек задается вопросом
          умеет ли ява складывать два числа в разных системах счисления
          то как бы он не рассуждал, его уровень знаний, даже не конкретно Java, а вообще в области компьютеров, оставляет желать лучшего.


    1. Ayahuaska
      31.08.2017 16:07
      +2

      Какая разница в каком виде представленно одно и то же число?..

      Забыл обновить комменты -____-


      1. Varim
        31.08.2017 16:10
        -1

        Может там разные представления и разные числа?
        В Java с 0 какие числа начинаются, десятичные?
        Десятичное 123 и восьмеричное 123, это разные числа.
        Так же как десятичное 10 и двоичное 10, это десять и два.


        1. x67
          31.08.2017 17:19

          а в каких языках 0 является ключевым словом, говорящим о том, что число в другой системе счисления?


          1. gbg
            31.08.2017 17:23
            +1

            С и C++. А в них это пришло еще с PDP-11


          1. Varim
            31.08.2017 17:44
            +3

            Например, в Java и C#.
            Не словом, а символом.
            А пришло еще с ассемблера.


          1. khim
            01.09.2017 01:39
            +2

            Ва лучше скажите где 0 не используется подобным способом. Из распространённых языков, которые «на слуху» — разве что Pascal (Delphi) и разные диалекты Lisp'а (хотя можно ли их считать распространёнными?). А так… C и C++, Java и Javascript, PHP и Python, Ruby и даже Bash (это не совсем язык программирования, но 0123 там обозначет там тоже 83). Странный вопрос…


    1. netch80
      01.09.2017 09:18

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

      Я бы сказал чуть иначе — ответ (умение преобразовывать) не самое главное, главное — включится ли у кандидата «тревожная лампочка» при виде этого кода. Если он скажет в первые несколько секунд «ой, восьмеричка, зачем мне это <допустимое в обществе грубое ругательство>?» — цель уже достигнута, а пересчитывать 0123 в более привычное — можно и на калькулятор возложить. Возможен другой вариант реакции, главное, что он заметил «подставу».

      > сколько встречался с языками программирования — восьмеричная система счисления

      К счастью, эта диверсионная черта встречается далеко не всегда, и в новых языках стараются от неё отказываться.


      1. shurutov
        01.09.2017 09:55

        Вооот! Спасибо Вам за комментарий, у меня как-то не получилось эту мысль донести, растёкся по древу. :)


  1. hexploy
    31.08.2017 17:06
    +3

    Какова корректная сигнатура метода service() в классе javax.servlet.http.HttpServlet?
    1. public void service(ServletRequest, ServletResponse)
    ...
    Действительно плохой вопрос.
    В сигнатуру метода не входят ни модификаторы доступа, ни возвращаемый резльтат — только имя метода и аргументы (docs.oracle.com)


  1. avost
    31.08.2017 17:20
    +4

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

    К сожалению, это ваше утверждение эквивалентно утверждению, что 78.6% числовых данных в интернет-статьях берутся с потолка.


    Вот ещё одна задачка, с которой вы можете столкнуться

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


    System.out.println(0123 + 3210)
    Но в что проверяется в вышеприведённом примере? Знание очень специфической ситуации, которая возникает при определённых параметрах.

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


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

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


    1. balexa
      31.08.2017 19:30

      Этот пример ещё более надуманный. Скажите, вы реально с такими примерами сталкивались? И именно «повсеместно»? Можете привести хотя бы десяток компаний на собеседованиях с которыми давались такие задачки?

      Яндекс деньги, например.
      Там меня спрашивали сигнатуры методов апачевского http-клиента. Серьезно, не шучу. Для чего? Я не помню сигнатуры на память, тем более что там с каждой версией все меняется.
      И еще какую-то тупую задачу вроде того что вызовется первым при вызове test(0);
      Варианты ответов:
      • void test(int n);
      • void test(long n);
      • void test(Long n);
      • void test(Integer n);
      • void test(Number n);
      • void test(Object n);


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

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


      1. fukkit
        31.08.2017 20:51

        Самое смешное, разумеется — тип void у возвращаемого test.


        1. vedenin1980
          31.08.2017 23:44

          Самое смешное, разумеется — тип void у возвращаемого test.

          А что именно вы нашли смешным? Вполне обычный Java метод, это же не void get().


          Скажите, какой скилл проверяет этот вопрос?

          Знание правил перезагрузки Java методов (то есть основы языка Java), помню несколько случаев когда это приводило к хитрым багам, когда управление ушло не в тот метод, что ты ожидал (например, всякие ассерты в юнит тестам, которые неожиданно оказывались неравны хотя визуально с обоих сторон вроде бы одно и тоже число). В качестве разминочного вопроса про язык — нормально, ИМХО.


          1. balexa
            01.09.2017 01:11
            +1

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

            В качестве разминочного вопроса про язык — нормально, ИМХО.

            Да как бы проверить что человек не врет что он писал на джаве можно и более простым способом.


          1. VladVR
            01.09.2017 08:36

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


            1. vedenin1980
              01.09.2017 12:12

              Ну, например

                 // Где-то глубоко в нашем коде
                 private int getInt() {
                      return 2;
                  }
                  private short getShort() {
                      return 2;
                  }
              
                 // В юнит тестах
                 assertEquals("все пропало!", getInt(), getShort());
              


              Вопрос на засыпку, что вернет тест изначально и что случится если мы поменяем int getInt() на Integer getInt(), а если еще и short getShort() на Short getShort()?

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

              Знание как именно Java перегружает методы — позволяет предсказать такое поведение и никогда не писать сравнения int c short в ассертах.


              1. VladVR
                02.09.2017 12:05

                а assertTrue(getInt() == getShort()) даст тот же результат, что и assertEquals во всех этих случаях или будут расхождения?


            1. hssergey
              01.09.2017 15:28

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

              void doSome(Class1 obj) {
              ...
              }
              
              void doSome(Class2 obj) {
              ...
              }
              
              


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


              1. balexa
                01.09.2017 18:46

                И надо понять, какой конкретно код выполнился

                Чтобы такого не было, код первого метода должен выглядеть примерно так.
                void doSome(Class1 obj) {
                    doSome(convertToClass2(obj));
                }
                
                


              1. hssergey
                01.09.2017 20:50

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

                public class Test {
                
                	static class Foo { 
                	}
                	
                	static class Bar {
                	}
                	
                	public static void doSome(Foo foo) {
                		System.out.println("foo");
                	}
                
                	public static void doSome(Bar bar) {
                		System.out.println("bar");
                	}
                
                	public static void doSome(Object obj) {
                		System.out.println("Object");
                	}
                
                	public static void main(String[] args) {
                		Object a;
                		a = new Foo();	//тут пришли какие-то данные
                		doSome(a);
                	}
                }
                


                То есть попытка сделать универсальный вызов, который бы сам обрабатывал данные в зависимости от их типа. Думаешь, что тут должно вывестись «foo». А вот фиг, выведется «Object»…


    1. VladVR
      01.09.2017 00:23
      +1

      Этот пример ещё более надуманный. Скажите, вы реально с такими примерами сталкивались?
      Мне при приеме на предыдущую работу задали вопрос какой по умолчанию capacity у класса List. Очень полезное знание, помогало прям все четыре года работы там.


    1. tyomitch
      01.09.2017 17:19

      Как задачка для стенда, эта задачка исключительно хороша. Отсеивает совсем уж халявщиков :)

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


  1. ogoNEKto
    31.08.2017 19:58
    -1

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


  1. commanderxo
    31.08.2017 22:21
    +2

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


  1. Semenych
    31.08.2017 23:35
    +1

    Действительно, можно писать код не держа все это в голове, не заглядывая в документацию и читая StackOverflow где все подробно расписано. Но код в результате будет писаться много медленнее и намного менее надежный.
    Говоря же о викторинах на выставках — цель там скорее привлечь внимание и выдать приз тем кто соображает лучше.
    Чтобы писать хороший код к сожалению действительно надо знать много прямо из головы здесь и сейчас. Плюс есть проблема — я не знаю того чего я не знаю.
    В конце концов специально для тренировки ответов на такие вопросы есть сайт skillotron.com — и вот что интересно — люди которые там находятся в топе по любой из технологий почему сплошь достаточно матерые надежные синьеры, а вот как раз джунов там не видно. С чего бы это?


    1. DistortNeo
      01.09.2017 02:40

      Ох, надо им туда вопросов по C++ покидать, из SO language-lawyer.


    1. playermet
      02.09.2017 14:48
      +1

      В конце концов специально для тренировки ответов на такие вопросы есть сайт skillotron.com — и вот что интересно — люди которые там находятся в топе по любой из технологий почему сплошь достаточно матерые надежные синьеры, а вот как раз джунов там не видно. С чего бы это?
      Ну не знаю. Только что для интереса прошел полный набор тестов по питону, вообще без гугла и какой либо помощи. Занял 41 место в рейтинге. Да, это далеко не топ, но загвоздка в том что я за всю свою жизнь написал лишь несколько строк на питоне (правил плагин для саблайма), и никогда его не учил, лишь натыкался в интернете. Кто все эти люди которых я обошел?


      1. Semenych
        04.09.2017 13:20

        Те люди которых вы обошли примерно такие же :-)
        Заняли 41-ое место по питону я так думаю потому, что 1) хороший программист 2) питон достаточно «прямой» язык и в нем часто «как слышится, так и пишется»
        Ну и там всего людей в питоне не много может быть не больше сотни.


        1. playermet
          05.09.2017 15:59

          питон достаточно «прямой» язык и в нем часто «как слышится, так и пишется»
          Вопросов которые попали бы под эту категорию там не так и много. Большую часть правильных я вывел либо из знаний Lua, либо просто интуитивно угадал. Больше всего проблем было с вопросами типа «что питон делает, когда сталкиваются логически несвязные типы».
          Ну и там всего людей в питоне не много может быть не больше сотни
          Я между тестами пока набирал баллы один раз был за 150+.


  1. lxsmkv
    01.09.2017 02:10
    +1

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

    У нас сениоров заставляли сдавать сетификат по яве, так они выли от бессмысленности вопросов. «В какой последовательности можно ставить слова в public static void main ()», помню мне коллега жаловался. «Я, — говорит, — последний раз писал main() восемь лет назад, в универе»


    1. VladVR
      01.09.2017 10:17
      +1

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

      Истина где то посередине, видимо.


      1. khim
        01.09.2017 13:59

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

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


  1. mental3d
    01.09.2017 08:49

    После института попал на собеседование, первое в моей жизни. До этого писал небольшие проекты, обычно сам и крайне скептически относился к всякого рода тестам с «дурацкими задачками». На собеседовании мне начали давать «ребусы-загадки на С++» с вопросом «а что будет?». Я мягко говоря опешил, кое как ответил на часть, где-то удивился, что так можно, но лучше не стоит. Потом сказал, что такой код нельзя писать. С грустной улыбкой мне ответили, что такой код на самом деле не пишут.
    Теперь я знаю, что все гораздо абстрактнее и объемнее. И главное, сколько боли может сделать вполне логичный, невинный код, но никакой дебагер не может помочь.


  1. Markscheider
    01.09.2017 09:40

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

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


    1. khim
      01.09.2017 14:02

      Сейчас считаете что программу, которую можно написать за 45 минут можно (и нужно!) сразу писать «набело».

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

      Можно провести два интервью — на одном довести до кода маленькую задачку, на другом — поговорить о (но не писать код… разве что примеры) — большуо.


  1. pavlushk0
    01.09.2017 10:03
    +1

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


  1. Nickola75
    01.09.2017 11:04
    +1

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


  1. ogoNEKto
    01.09.2017 13:50
    +2

    Еще пришло в голову: характер вопросов / задачек на интервью больше говорит о компании и ее ценностях, чем о кандидате. У кого-то в почете сферические кони в вакууме для собственного успокоения или соревнований у кого (мысль) длиннее. А кому-то важно, чтобы на встречу приходили вовремя и код писался ДО дедлайна, хоть с костылями, хоть с велосипедами, хоть копи-паст…
    Так что вполне себе решение — прийти, получить идиотскую задачку, посмеяться и попрощаться.
    ЗЫ Однажды на вопрос к присланному собеседовать спецу почему мы пишем код на доске получил простой ответ: «Я вообще-то не с этого проекта/отдела, но мне надо же как-то кандидатов оценивать. Ато в резюме все такое пишут...» Так вот, бывает.


  1. SilicicArcher
    03.09.2017 13:18

    (isYouCompiler)&(isYouVirtualMachine)&(isYouSoftwareArchitect)&(isYouDataScientist)?You=ForwardLookingSeniorDeveloper: You=ImmortalJunior


  1. MacIn
    05.09.2017 12:48

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


    1. khim
      05.09.2017 14:26

      Не совсем так. Она, на самом деле — тоже, в основном, на соображалку. Начнём с того, что правильных ответов там не один, а два. Потому что javax.servlet.http.HttpServlet — это варинт javax.servlet.GenericServlet и, стало быть, у него не может быть только методов с HttpServletRequest'ом. Вариант с ServletRequest'ом обязан быть тоже. И он, как раз — будет публичным. И ничего не будет возвращать (тип void), у него ж целый ServletResponse в аргументах есть!

      А второй вариант — уже защищённый service(HttpServletRequest req, HttpServletResponse resp).З

      В общем — в этом классе всё логично и до всего можно дойти «исходя из логики». Ничего «тупо запоминать не нужно». Запоминать нужно там, где нелогично…


      1. MacIn
        05.09.2017 14:55

        Для меня это выглядит как «надстройка», дополнительная задача, тогда как основная — знание библиотеки. Вещи вроде «javax.servlet.GenericServlet и, стало быть, у него не может быть только методов с HttpServletRequest'ом» — как раз оно самое. Сугубо imho.