fisher (raa) wrote,
fisher
raa

Category:

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

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

Итак, по задачкам - если кратко, то за желание задавать большинство из подобных вопросов надо срочно что-то выправлять в головном мозгу, ну или как говорят кондовые программисты "лучше убивать при рождении". А причина очень простая - ну подумайте сами, что можно выявить при помощи подобных вопросов?
1) есть ли у кандидата хоть что-то в голове
2) нормальный ли он кодер
3) хорошо ли учился он в институте (помнит задачки) ну или просто знает ли он эти задачки

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

Второе - важно, но к современному программированию имеет все более хитрое отношение (особенно когда в качестве базовых инструментов скриптовые язык + субд). То, о чем я хочу сейчас сказать - это в целом тривиально, но я остановлюсь поподробнее. Мне могут всегда возразить - чувак, ты - просто зануда. Ты предъявляешь завышенние требования к программистам, а эти задачки рассчитаны в-основном на новичков. Поясняю: развитие и открытость технологий сейчас достигли такого масштаба, что для большинства девелоперов важнее знать, чем bitmap-индекс отличается от hash или btree, в какой базе эти вещи реализованы - чем уметь самому что-то написать с нуля. Важнее в какой-то момент вспомнить о такой-то фиче и через день у тебя готовое решение, а конкуренты в ахуе (блядь, NDA, мать его - ярких примеров из личного опыта не приведу, думаю и у вас таковые в избытке имеются). Уже все меньше и меньше остается отраслей, где все пишется с нуля, а не собирается из разных "кубиков". И уж ни в коем случае не следует путать этот подход с Путем Паковщика по Алану Картеру. Паковщик must die. Просто изменение акцентов, поскольку ни одна самая полная карта не поместится в мозгу обычного человека. В этом смысле даже Яндекс, который в последнее время нанимает в-основном с++ девелоперов, а не скриптописателей, в первом же пуле вопросов, которым они осуществляют отсев звать/не звать, не просят обойти дерево или перевернуть строку выделяя дополнительно минимум памяти - они просят выбрать из списка общеизвестных методов те, которые дадут скорость поиска как O(lnN). Почувствуйте разницу. Кстати, о математиках. Вот уж где любители программирования ради программирования. Когда мне в школе (на уроке математики!) задали вопрос, что больше больше exp степени pi или pi в степени exp - первое что я подумал: идите нахуй, и то, и то - примерно десять (update: десять, двадцать - не суть. примерно одинаково). Убей в себе математика. Просто запомни про скорость поиска :) Книжки Кнута читать невозможно, не обманывай себя! Однажды года четыре был на собеседовании в одной крупной конторе, ребята программили на перле-пхп, просто делали какие-то веб-проекты, никакой там не рокет сайнз. Начали спрашивать про алгоритмы - я честно говорю хуй чего помню надо будет погуглю или возьму Кнута. Один грит (огонь в глазах!): дык Кнут у нас - вообще настольная книга! В общем, я приложил очень много усилий, чтобы не ответить: ну и мудак.

О пункте два можно говорить долго - я не спорю, что кодером надо быть хорошим. Но в это понятие для меня больше входит культура кода, его понятность и правильность, нежели умение где-то изъебнуться так, что это поймут 10 человек во всем мире. Очень хороший текст для С++-программистов здесь, я процитирую из него в вольном изложении. Подумайте, какая мотивация у человека, который открыл ваш код и хочеть что-то изменить. Вряд ли он хочет охуеть от вашей крутости. Вряд ли он хочет получить массу фана, разбираясь вашем хитровыебанном рокет сайнс. Он хочеть прочесть, понять, поправить и чтоб все быстро заработало. Таким образом, если уж мы говорим о коде, то акценты должны быть другие. Поэтому куда правильнее просить прислать кусок кода, чем набрость что-то на доске за пять минут.

Наконец, я хочу особенно отметить то, что надо выявлять на интервью в первую очередь. Тут был флейм дурацкий, про скорость явы и с++, и я написал как-то очень резкий пост на эту тему (а кто-то из френдов даже слил эту ссылку г-ну dz и мы даже малость подискутировали). Так вот, где-то там dz говорит охуенно правильную мысль. Типа, я может кодер-то и не самый лучший, но я умею строить правильные модели. Умение строить правильную модель - вот основное качество интеллекта девелопера. Именно поэтому очень хорош пример Джоела про бензоколонки. Ссылку не помню - ну, классическая задача, у нас есть город, сколько надо поставить бензоколонок. Причем - как обычно в традициях физиков - дано всё, что тебе понадобится. Сам строй модель, сам решай, что нужно - что нет. Ах, вы говорите. это должен делать аналитик? Ага, отвечаю я, а программировать по его спецификациям в Бангалоре. Не надо. То есть может и надо, почему нет, но без меня, пожалуйста.

Короче, под конец я тут приведу пример - малость фашистский (в плане отношения к людям) - но зато честный. К вопросу о моделировании и об отношении. Короче, это шутка - и расценивайте ее как шутку, в которой есть доля шутки. Все деления конечно условные. В-общем, манагер (заказчик) обычно приносит же какие-то писульки, программисту никогда ничего до конца не известно - у него всегда задача с миллионом вариационных параметров, и это - обычное дело. Вот приходят значит к программисту и говорят: чувак, собирайся, мы идем в горы. Ну и далее самое смешное - четыре реакции.
1) Тупой программист: в горы? ну значит в горы.
2) Всех заебавший программист: какие нахуй говы ебаныйврот! ну какие ещё нахуй в пизду блядь горы вы под стол блядь ходить научитесь а они уже в горы блядь долбоебы блядь. В горы они собрались олухи блядь. Пидарасы блядь.
3) Старый программист (про себя): гоооры... вот ведь блядство. затем, обращаясь к манагеру (ну или кому там) - голосом, как разговаривают с румяной пятнадцатилетней соседкой: друг мой, а что мы собираемся делать в горах? что-то поищем, верно? а как долго? какие у нас будут горы? высокие? низкие? какие погодные условия?
4) Угарный программист поворящиваясь к монитору, открывая vim, занося руки над клавой как моцарт, с взъерошенниыми волосами, в пол-оборота оглядываясь с ухмылкой: Итак, нарисуем горы v0.1 ...

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

Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 18 comments