Как стать автором
Обновить

Комментарии 310

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
«Правило ясности: ясность лучше, чем мастерство.» Роб Пайк.
НЛО прилетело и опубликовало эту надпись здесь
Мне кажется, что собеседование является больше психологическим тестом, нежели техническим. И задача такая как раз позволяет увидеть человека в нестандартной ситуации.
Кстати, никогда не верил в экзамены. Знаю много людей, которые отличные работники и спецы, но под давлением экзамена просто не могут сосредоточиться.
НЛО прилетело и опубликовало эту надпись здесь
«Мне кажется, что собеседование является больше психологическим тестом, нежели техническим» — Если это «так», то автор еще и показывает себя как специалиста, далекого от понимания HR технологий. Из чашки пьют, из тарелки суп кушают, а не наоборот.
Для психологических тестов есть много других вопросов и тем, которые можно затронуть и обрисовать психологический портрет.
Обратная ситуация: знаком с несколькими людьми, спокойно отвечающими на экзаменационные вопросы (как говориться «наблатыкались»), при этом спецы из них нулевые. Для проводящего собеседование такие люди- главная опасность.
Тут, имхо, надо принимать во внимание, в каком режиме придётся людям работать. Весьма вероятно, что задачи будут возникать «вдруг» и решать их придётся именно быстро-быстро и в максимально стрессовом режиме.

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

Что, впрочем, совсем не отменяет остальных минусов описанного метода «проверки»
Если речь не идет об случаях, когда необходимо быстро исправить баг или о последних днях перед сдачей проекта, то
стресс и программисты вещи несовместимые. Работа творческая, а творить под стрессом невозможно.
В идеале — согласен. Но мир — увы — не идеален. Некоторые команды в таком режиме работают перманентно.
Задачка типичная, взята у Джоеля вроде, по крайней мере у нас где-то в тестах есть такая же для C. На мой взгляд она действительно простовата и ее интерпретация не вполне очевидна, надо разговаривать с кандидатом чтобы понять что он действительно умеет. На мой взгляд никакое из предложенных решений само по себе не указывает на то что кандидат плох или хорош.
Да, раздражает, когда на собеседовании тебя сначала спрашивают о хобби, отношении к бурям на луне и прочей ерунде, а потом разработчики пичкают тебя примерами обфускации, и задают непотребные вопросы, на которые гугл отвечает за 0,29 секунд. Это скорее выглядит как попытка потешить свое самолюбие.
хобби и прочее спрашивают для того, чтобы понять что вообще за человек (не работник) пришел. А остальное да — зло.
Как раз это часто раздражает, а старания ребят из HR (ничего против них не имею) нередко приводят к потере потенциально хороших работников.

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

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

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

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

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

Однако глупые вопросы так и остаются глупыми, а на том, что стоит быть деликатнее и искать здоровый подход к собеседованию, а не такой, что человека будет еще неделю трясти как после вскрытия, я все-таки настаиваю. Впрочем, для того HR и существует, но я уже далеко откланяюсь от темы, заданной уважаемым топикстартером :)
"… даже причинить некие моральные, не побоюсь этого слова, страдания подобным допросом."
Так и есть.
Я например после подобных собеседований могу заиметь бессонницу на пару дней, и вообще, на душе так погано становится…
Что им вообще от меня, в таком случае, нужно? Я пришел предложить им услуги, мне от них нужна соответственная зарплата, и все. А они меня унизить пытаются, какой-то бред спрашивают. А если я вообще о себе не люблю рассказывать, тогда что? Не гожусь?
ну, например, они не хотят таких отношений как вы описали. Т.е. им не нужен человек, который будет «оказывать им услугу а они будут платить за это деньги». С одной стороны, в этом нет ничего плохого, с другой стороны люди которые оказывают услуги обычно безинициативны, а возможно именно на это место им нуже инициативный человек, который не будет просто оказывать услугу и получать деньги, а будет всей душой болеть за проект и стремиться его улучшить.

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

«Девелопмент — игра командная!»
НЛО прилетело и опубликовало эту надпись здесь
Мммм… да что вы говорите?! А откуда такая информация, что экстравертам в рабочем коллективе нужны интроверты?

Сколько раз сталкивался с интровертами, всегда как-то получалось, что они предпочитают работать «соло». То есть чтоб их никто и ни по какому поводу не трогал. Тогда только и могут выдавать результат. А если человек при любом неосторожном вопросе может впасть в ступор… Брррр… А представьте, что вся команда состоит из таких. И всё рабочее время хотя бы 20% коллектива пребывает в ступоре. Ибо то заказчик забежит, то манагер, то ещё какой дизастер.

Ну, нафик!
НЛО прилетело и опубликовало эту надпись здесь
Что-то Вы сами плаваете в соционике. Может быть это Вам ее надо не просто почитать, а и изучить?

Степень коммуникации не определяется экстравертностью/интровертностью, но совокупностью ряда параметров.
В том числе и логикой, и этикой.

Дело в том, что не стоит воспринимать дуальность как идеал для рабочих отношений в коллективе. Очень часто отношения активации, ревизии — выгоднее для работы
Я всего лишь обсуждаю именно тот вариант «интровертов», которых описывал mr_gorbunov. Терминология, соответственно, не моя :)
Так вот люди, которые от вопросов «такого толка» впадают в ступор, далеко не в каждой команде смогут работать эффективно. Я, например, когда выбирал работников, на это обращал особое внимание, ибо микроклимат в коллективе разрушить легко, а наладить обратно — сложнее.
Был на собеседовании в одной организации, где мальчик-«прожект менеджер» задавал вопросы в таком стиле: «Что вы знаете про наследование?». Казалось бы вопрос простой, но заданный настолько топорно, что в голове крутилась навязчивая мысль на такие вопросы отвечать «Оно есть!».
Всегда нервничаю на теоретических экзаменах, от чего парень сидел с чрезвычайно раздутым ЧСВ. Но когда зашел разговор о практических навыках, молодой человек как то сдулся, видимо из-за отсутствия способности «доказать мне, что я верблюд».
В итоге о компании создалось предвзятое впечатление о компании, и на их предложения о работе ответил отказом.
Я бы на вопрос задачи сунул «нулевое решение» не задумываясь дабы впреть задание формулировали достойным образом. Формально решение полностью удовлетворяет условию задачи и является самым быстрым, в особенности на компилируемых языках.
Прям итальянская забастовка какая то… А если начальник начнет буквоедствовать?
Ну как-бы на собеседовании работник тоже же оценивает начальника, стоит ли ему с ним связываться… процесс в общем-то обоюдный
НЛО прилетело и опубликовало эту надпись здесь
ну не совсем. много раз пользовался. поэтому помню.
но я всегда для решение любой задачи иду читать мануал. делать свой велосипед не хочу.
НЛО прилетело и опубликовало эту надпись здесь
Я отказываюсь давать показания без адвоката.
НЛО прилетело и опубликовало эту надпись здесь
Я использовал для изменения ников на форуме на первое апреля.
НЛО прилетело и опубликовало эту надпись здесь
Видимо ежегодно :)
Это не он.
это можно использовать при поиске места для cat-а, например.
*cut-а
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
но только для 1 байтовых кодировок
гугл.
и по третей ссылке

function utf8_strrev($str){
    preg_match_all('/./us', $str, $ar);
    return join('',array_reverse($ar[0]));
}

source
комменты к функциям на php.net рулят
ru2.php.net/manual/en/function.strrev.php#62422
а на счет оптимальности этого решения на больших текстах у меня есть сомнения.
НЛО прилетело и опубликовало эту надпись здесь
Ну можно и не только xor'ом можно, еще и арифметикой =)
$a[$i] = $a[$i]-$a[$l-$i];
$a[$l-$i] = $a[$l-$i]+$a[$i];
$a[$i] = $a[$l-$i]-$a[$i];
все эти трюки с XOR знают даже школьники.

Но профессиональный программист эти трюки будет использовать только на уровне ассемблера, и только в случае нехватки регистров процессора.
вот-вот
на подобный вопрос в первую очередь поинтересуюсь что хотят получить в ответ:
— минимальное по длине исходника
— максимальное по быстродействию
— демонстрацию знания стандартных функций
— посыл куда подальше…
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Я бы с ним работать не стал. Если он восхищается «джедайскими техниками» подобного рода, то страшно представить какой код он пишет в реальных проектах.
Вообще судя по подходу ощущение такое, что он где-то подсмотрел, судя по тексту в MS, и теперь думает что это круто. Видал я таких людей, которые спрашивали подобные вещи, а сами в работе решают реальные задачи хуже нового работника.
Он восхищается не этими техниками, а увлеченными людьми, которые об этих техниках знают.

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

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

Подобные простые задачи позволяют отсеять совсем бездарей. У хорошего же спеца объяснение словами алгоритма займет пару-тройку секунд, а придумать адекватную причину для отказа написать это письменно всегда можно.
НЛО прилетело и опубликовало эту надпись здесь
Вот вам пункты, которые оправдывают работодателя в данном случае:
— У интервьюера может быть примерно такой план: легкая задача -> оптимизация ее -> разговор об оптимизации в целом -> разговор о проектировании ->…
— Легкая задача, кстати, позволит кандидату собраться.
— Если кандидат говорит нечто типа «В PHP это делается функцией из стандартной библиотеки, но если бы мне надо было бы написать эту функцию самому, то я бы сделал это примерно так ...», то это сразу говорит о том, что он не хочет терять время и при этом способен вести серьезный разговор.
— И, да, начальники тоже могут ошибаться. И, да, задача сотрудника — показать это. И, да, такая задача может быть еще и тестом на умение тактично объяснять что кто-то не прав.

Итого, остается только претензии по формулировке задачи и ее легкости. Что ж, об этом можно начать интересный разговор прямо на интервью, тем самым подняв себя в глазах у собеседника.
Перечитайте статью еще раз, в ней явно написано: знание стандартной ф-ции — не показатель. Т.е. по мнению автора предыдущей статьи все бездари знают стандартные ф-ции, а все «гении» пишут свои, игнорируя встроенные языковые на С?!
Зачем перечитывать статью, если у человека свое мнение? И вполне адекватное.
Я, например, согласен с каждым словом данного комментария.
Знание стандартной функции — это конечно плюс. При этом способность написать аналогичную функцию в рамках рассматриваемой задачи не является изобретением велосипеда.
Задание умышленно упрощено, чтоб не тратить значительное время.
О, да! Минус в рейтинг и в карму за вполне невинный коммент. Да здравствует умение воспринимать критику!

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

так что всё логично. для этого карма и создавалась.

удачного дня!
Каких личных оскорблениях? Теперь каждый чих без кучи слов «извините», «простите» и «пожалуйста не обижайтесь» — оскорбление?

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

Коммент про карму писался с пофигистическим отношением. То, что карма опуститься после него пунктов на 10, я прекрасно понимал.

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

 

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

Посмотрите на рейтинг комментариев тут: habrahabr.ru/blogs/artificial_intelligence/93223/. В интересном топике большие и развернутые комментарии почти никак не плюсуются. А вот дурацкий топик про фейсбук намного более активен.
Плюсанул бы, да по иным причинам меня самого вогнали в такой минус, что еще с месяц выкарабкиваться по комментам :)
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Скольких работников по вашей методике вы уже успешно наняли?
Неправильно понимаете. Этого интервьюера я никогда не видел и даже с похожими ситуациями на собеседованиях не сталкивался.
Бездари (а точнее просто не понимающие сути работы люди) — это те, кто пишут вот с такими джедайскими штучками:
Бездари (а точнее просто не понимающие сути работы люди) — это те, кто пишут вот с такими джедайскими штучками:
$a[$i] = $a[$l-$i]^$a[$i];
$a[$l-$i] = $a[$l-$i]^$a[$i];
$a[$i] = $a[$l-$i]^$a[$i];

А «бездари», которые отсеиваются на первом же этапе, потому что первой же мыслью возникает
$a = strrev($a);
и есть те, кто нужен на реальной работе.

Автор топика говорит именно об этом.
Задача как задача, не хуже многих других.
А вот за выводы интервьюеру реально хочется дать в ухо.
torbasov, Вас этот человек не взял на работу?:)
Тега иногда так не хватает :(
Тега joke
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Не согласен по поводу позиции номер пять. Во-первых, как это называется, когда работодатель даёт какую-либо задачу, а работник её не делает. В том числе, основываясь на гоноре. Т.е. с первых же секунд, ещё до приёма на работу, такой работник показывает себя конфликтным и ленивым. Во вторых, применительно к ситуации, мало ли какая специализация у фирмы. Может, написание поисковых систем, где всевозможные трюки со строками — обыденность. Такой отказ — это чистая профнепригодность. Не нужно говорить, что классный специалист с порога скажет, не буду. Классный специалист сначала выяснит подробности, зачем это нужно, какие ограничения и т.д… Классный специалист скажет, что есть несколько путей решения, у них есть достоинства и недостатки.
Как-то так.

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

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

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

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

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

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

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

Вы это про недостаточно ленивых людей. Тактически ленивых.

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


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

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

Заглянув в своё прошлое, подумал, что, наверное, самым удачным вложением, сделанным в свою лень, было изучение слепого десятипальцевого метода печати как на русском, так и на английском языках…
Я настаиваю на том, что описанное вами поведение называется не «лень», а как-то иначе. Затрудняюсь подобрать наиболее точный термин.
Опять же, вы не отказались бы решать задачу, просто перевели в другое русло, а автор оригинальной статьи ведёт речь о тех, кто отказался. Именно их я и называю ленивыми.
Предлагаю сойтись на введённых мною понятиях «тактической лени» и «стратегической лени», но не ругать всех лентяев скопом :)
Ладно. Лень спорить :)
Затрудняюсь подобрать наиболее точный термин.
Рационализация вполне подходит. А по-русски — «разумность».
Статья на мой взгляд освещает важную проблему, в тестовые задачи каждый закладывает свой смысл. Одни хотят посмотреть «что человек напишет в реальности», другие «насколько человек может изобретать велосипеды», некоторые и вовсе «насколько кандидат извращенец», но никто не оговаривает в начале чего он ждёт, от сюда и расхождения во мнениях. Т.е на собеседовании я уже ввёл для себя привычку спрашивать «какой ответ вы от меня ждёте, теоретический, практический, или развратный ?»

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

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

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

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

Написание программного кода это не только «творчество» как многие из нас считают, но ещё и бизнес.
Пожертвовать даже 10% быстродействия (там где оно не критично конечно) ради экономии 50% времени на разработку и увеличив за этот счёт срок тестирования, будет и проще и выгоднее, а может ещё и надёжнее за счёт более тщательного тестирования.
Ну если уж извращаться, то лучше тогда сразу же заюзать устройство Даффа, чтобы у народа мозги поплавились.
> Итак, он унижает специалиста
Никого он не унижает. Задача поставлена и должна быть выполнена. Если в PHP уже есть такая функция и она простая, значит для программирования остались сложные задачи. А как человек будет их решать, если он не может решить даже эту простую задачку, которая уже за него решена.
> Погладь кота, сука!
NO U. Сам погладь, сука!
> Если даже ты какого чёрта не доверяешь диплому государственного образца
Вы давно учились в современных государственных образовательных учреждениях!? Просто интересно.
> что, вообще-то, на грани национальной измены
Из-за таких, кто говорит эти слова, в средневековье сжигали гениев за слова: «Я чувствую в нем злых духов».
> Ненормально в такой ситуации писать её реализацию самому, вместо того, чтобы глянуть в мануал, ибо изобретение велосипедов — большое социальное зло
См пункт 1.

Резюме: Минус обоснован
> Из-за таких, кто говорит эти слова, в средневековье сжигали гениев за слова: «Я чувствую в нем злых духов».

А нельзя ли поподробнее, какого такого гения за такие слова сожгли?
Поддерживаю. От простого к сложному. Специалист не будет вставать в позу, т.к. намного быстрее предложить адекватное решение. Хотя бы на словах.
Можно конечно сразу дать задачку из сложных, но во-первых это займет куда больше времени, во-вторых — не забываем, что решение пишется на коленке (многих смущает сам факт написания кода ручкой на чистом листе бумаги — ни исправить, ни отладить — жуть...).
НЛО прилетело и опубликовало эту надпись здесь
Тем не менее собеседование в любую приличную западную компанию включает в себя 5-10 задачек такого рода (даже эта наверное самая простая будет).

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

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

Но на собеседовании нужны основа что бы поговорить за код, стиль, оптимизацию, алгоритмы и баланс всего этого над эффективностью.
Да ну… эти «джедайские» техники в данном примере не говорят ничего о программисте. А мало того их использование говорит о незнании человеком специфики PHP. С точки зрения производительности, правильный ответ: юзать встроенную функцию, которая написана на Си, тогда не придется почем зря заниматься обращением к индексам, коих в джедайских техниках ну уж слишком много. От phpшника требуется хорошее владение ООП и умение работать со строками, а вовсе не оптимизация обработки данных. А код в этих джедайских техниках весьма прозрачен и вполне понятен, просто ноэффективен.
Это все в ответ на мое сообщение?

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

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

bool flag;
...
if (flag) {
    foo();
}

на

flag && foo();

и говорит, что привыкнуть к такому сокращению можно быстро, а читаемость не сильно пострадает.
НЛО прилетело и опубликовало эту надпись здесь
Можно дилетантский вопрос с большим смыслом?
А не придется ли переписывать строчку «flag && foo()», чтобы спустя год поставить else?
Придется, например, так:

flag ? foo() : bar();


А что сделаете, если нужно изобразить что-нибудь вроде следующего?

if( flag ){
foo();
}else{
bar1();
bar2();
}
Ну это уже совсем тяжелый случай)) Можно ветку else запихнуть в отдельную функцию, но вряд ли я стану так делать. Такие приемы можно оправдать только в применении к простым случаям, то есть либо для уже существующих функций, либо для кода, который без угрызений совести можно запихнуть в inline-функцию.
Я прицепился лишь потому, что сам лично не люблю такие подходы. Это не значит, что так нельзя делать. Делать так можно. Но развития коду это отнюдь не дает.
> Но развития коду это отнюдь не дает.

Почему? Что мешает во время «развития» перейти на if {} else {}?
Ничего, кроме сроков разработки.
Допустим да, что это меняет?
А разве что-то может измениться?
А если компилятор генерирует не ленивые вычисления?
В Си это требование стандарта.
у Джоэла Спольски есть прекрасная книга по подбору программистов. на собеседовании надо задавать вопросы, которые показывают, умеет ли человек думать — и даже неважно, решит ли он в конечном счете задачу (потому что за компом и с мануалами решит наверняка любой более менее адекватный). важно, в каком направлении пойдёт его мысль. вот таких вот джедаев я бы гнал в шею.
По-моему как раз Джоэл же Спольски в упомянутой вами книге говорит, что обычно дает кандидатам задачку на обращение строки. :)) На С только.
хм, надо будет дома посмотреть. я помню задачи, типа сколько бензоколонок в таком-то городе и т.д.
«For programming questions, I ask candidates to write a small function in C. Here are some typical problems I would ask:
— Reverse a string in place
— Reverse a linked list
— Count all the bits that are on in a byte
— Binary search
— Find the longest run in a string
— atoi
— itoa (great, because they have to use a stack or strrev)»

www.joelonsoftware.com/articles/fog0000000073.html
я вот эту книгу имею в виду. там он пишет другое :)
вот эту, простите, карма не позволяет теги использовать: https://www.ozon.ru/context/detail/id/3758439/
«in C» — не бросается в глаза? Ну Вы блин и сравнили, Джоел пишет правильно, но Джоел пишет про Си. Здесь же разговор о РНР. Надеюсь не нужно объяснять, что устраиваясь программером на асме, вообще неуместно задавать «Reverse a string in place», так как это целая программа получиться?! — это я к тому, что всему свое место и Ваша ссылка про собеседование на Си, не совсем (подчеркиваю, не полностью, а не совсем) уместна.
В целом, нет, не бросается. Или в 2010-м бедные С-программисты целыми днями на работе то строки обращают, то в числа переводят?.. :)
Речь не о том «что делать» а «где»!!!

Если «джедайские» техники в ASM это оптимальный способ пересылки данных при отсутствии лишних регистров, то попытки делать также в РНР тоже самое что вместо трактора цеплять плуг на болид F1 (и то и другое имеет 4 колеса и руль)
Вопросы Джоэла — на понимание алгоритмики. :) Алгоритмы, пожалуй, должны знать все программисты, от асмистов до друпалеров. Это как бы не только моя точка зрения. А с Джоэлом можно поспорить на его сайте, ссылка выше.
Тогда это надо обговаривать в задании, т.е заранее пояснить что ответ «есть готовая функция» не катит, и что вопрос сугубо алгоритмический, не привязанный к конкретному языку.

Потому что написание «джедайскоко» кода на РНР говорит скорее наоборот о недостатке знаний у программиста. (Технику решения сфеерических задач в вакууме он знает, а вот специфику языка на котором пишет нет.)
Не могу не согласиться.
НЛО прилетело и опубликовало эту надпись здесь
А что, для программирования на PHP не нужен мозг? А ведь тестирование именно на это, а не на знание PHP.
Мозг нужен, но склад ума нужен совершенно другой. (это как баян и скрипка, и то и другое музыкальный инструмент, но техника совершенно разная)
Какой «другой»? Мы с вами на разных планетах живем? Программировать надо не на языке, а с помощью языка. На С/С++ надо управлять памятью? Это +много знаний и опыта, но никак не другое мышление.

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

 

Ваш сайт из вашего профиля отдает неверную кодировку в заголовках HTTP ответа. В итоге в Firefox кодировка ломанная (в других браузерах не проверял). И насколько серьезно предлагаете относится к вашим словам после такой ошибки на вашем домашнем сайте?
Программировать надо с учётом особенностей языка. Но речь даже не столько об этом.

А вот то что это «тестирование именно на знания алгоритмов, а не на знание PHP» и есть та причина по которой автор сего опуса и возмущается, он (и я его в этом поддерживаю) считает что если тестируется не знания ЯП то это надо пояснить, ибо когда нормальному программисту дают задачу он старается её решить (на том языке на котором надо) а не заниматься развратом…

В РНР есть особенность, это ОГРОМНОЕ количество готовых функций, и любой опытный человек рано или поздно приходит к тому что в РНР изобретать свои функции практически не нужно, почти всё что надо есть в мануале.

Ну а на правах офтопа, (если уж вам интересно) сайт свой я уже 2 года как не трогал, и наверное не буду. Это скорее заглушка а не сайт, просто чтоб было, впрочем и раньше я на нём просто тренировался вёрстке. (Забил на него именно тогда когда хостер стал рекламу пихать и решать за меня какие заголовки мне нужны)
Чего еще пояснять? Мозг кандидату зачем дан? Ему не понятно зачем какая задача дается? Кроме того зачем кандидату дано умение говорить? Что, так сложно задать уточняющие вопросы интервьюеру? С каких пор собеседование стало допросом?

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

А то топик на уровне детского сада: «я не понимаю принципа найма программистов и не способен задать вопрос „зачем“ на собеседовании, поэтому надо написать большой бесполезный текст, чтобы обосрать принимающего».

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

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

Если спрашивающему надо посмотреть на то «как человек реализовал бы данную функцию если бы её не существовало» то пусть это и спрашивает, а когда просят «нарисовать вертолёт» а потом говорят «простите, но вы должны были посмотреть сегодняшний гороскоп и понять что на самом деле мы хотели чтоб вы нарисовали унитаз» это не понятно даже такому извращенцу как мне (и это при том что я знаю толк в извращениях, я даже на QBasic иногда пишу)
Вас кто-то сильно обидел на собеседовании? С чего вы взяли, что за правильный ответ, но не такой, что предполагает интервьюер, вам скажут «вы свободны»? Я неправильно понимаю процесс собеседования? Может, там должен сидеть Гитлер, расстреливающий кандидата при каждом неправильном ответе?

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

ЗЫ и естественно ответом на эту задачу должны быть встроенные функции (если для _конкретной_ задачи они работаю быстрее)

ЗЗЫ и спеца по языку берут на неполный рабочий
Интересная статья :) в любом случае.

Из собственного опыта:
Мы просим вебов написать коннект к мускулу, сделать выборку из него и вывести ее на экран. Естественно просим написать код на бумаге ручкой. Успешно выполняющих эти действия 30-40%. А вы говорите об унижении. Унижение это когда интервьювер просит вас раздеться и нагнуться, а это обычный фильтр, который помогает интервьюверу экономить время, нервы и деньги.

Если вы не хотите проходить «эти глупые тесты» никто не просит вас, вам предлагают.

Меня лично всегда нервировали громоздкие тестовые задания, на которые надо потратить больше дня. Вот это действительно напрягает, когда ты находишься в поиске работы и денег особо то и нет (а уж тем более времени).
Я бы никогда не прошел ваше тестовое задание :)
Если конечно вы не примете за верный ответ что то вроде
$db = new DB(Config::DB_HOST, Config::DB_USER, Config::DB_PASSWORD, Config::DB_NAME) or die("error");
$arData = $db->getRowSet("SELECT data FROM table WHERE 1") or die("select error");
foreach($arData as $v) {
echo $v['data'];
}


уже и не помню когда последний раз работал с нативными функциями php для работы с mysql… Без мануалов под рукой — на бумажке — не написал бы.
Просим написать как удобно, если объяснения и обоснования целесообразности того, чем вы пользуетесь прилагаются :)
у чем ваш вариант лучше простого функционального с mysql_* или ORM или хотя бы так
try {
$db = Db::getInctance('first');
$data = $db->fetchAll(«SELECT data FROM table») or throw new EmptyListException('Таблица пуста');
} catch(MysqlException $e) {
// обработка исключения
}
хотя, мы бы взяли, лучше всё равно на рынке особо не найдёшь :(.
p.s. пользуясь случаем, очень нужен в Минске адекватный специалист с минимумом необходимых знаний (php, html, jquery) и опыта на поддержку сайтов, с последующим переходом к более возвышенным проектам.
Ну хотя бы тем что у меня меньше функций чем если использовать mysql_

Просто я привык работать с такой оберткой над базой данных (привычка с тех времен когда я работал с phpBB 2.*) Там $db это глобальная переменная, поэтому нет необходимости в синглтоне.
Ну и в зависимости от выбранного типа базы данных соотвественно это может быть mysql, postgre и т.д.

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

Да и вообще, я не говорил что мой пример чем то лучше :)
страчек получается столько же, особенно если вынести mysql_connect+select_db в глобальную переменную, да и конструкции не такие громоздкие, управляемость больше. мифическая пользо от смены хранилища ничем не окупает оверхед из кучи абстрактных классов и интерфейсов. да и раз уж лапшакод с запросом и выводом, то лучше использовать
$result = $db->query();
while($row = $result->fetchRow())…
таким образом не засоришь память толстой выборкой.
и у меня не синглетон, а его смесь с реестром amdy.su/mix-singleton-and-registry/
у тебя проблемы не с работой с базой, а с лишними or, которые обязаны били заменить исключениями.

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

Мне одному хочется объяснений, почему писать код на бумаге ручкой — это естественно? =)
Вообще говоря у нас три этапа отбора:
1. Собеседование, на котором выясняются как личные качества кандидата, так и профпригодность (хотя бы малая ее степень)
2. Тестовый день. Вы приходите и работаете целый день в команде, с которой придется работать в будущем.
3. Испытательный срок (уж за месяц-два мы поймем стоит ли иметь с вами дело или не стоит)
ИМХО тестовый день — тоже не лучшая идея. Не всякий человек за первый день на новом месте сможет вообще хоть что-то осмысленное сделать. Вы, конечно, можете сказать, что «нам как раз такие и не нужны», но скорость адаптации к коллективу, новому рабочему месту, писаным и неписаным правилам — практически ничего не говорит о работоспособности и производительности сотрудника.

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

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

PS задание на тестовый день рассчитано именно на день :)
как такой тестовый день оплачивается?
Из расчета одного дня по предварительной договоренности по оплате за месяц.
Я написал 'естественно', но забыл поставить вокруг слова кавычки, тогда бы все уловили долю сарказма в моей реплике :)

Эх, а так все минусуют и хмурятся :) Такие суровые дядьки :) Я даже представил — Хмурые, лысеющие, толстые и невероятно суровые дядьки жмут на минусы — цвет хабра :) Я польщен :)
>Мы просим вебов написать коннект к мускулу, сделать выборку из него и вывести ее на экран.

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

Нет цели приглашать человека а потом валить его, ну не будем же мы работать себе в убыток :)
Нужно конечно, но если различных оберток над этим делом тысячи, тем более что можно же не только к мускулю коннектится. Понимаю там еще сразу проверить понимает ли человек как запросы составлять и как их потом обрабатывать, но спрашивать может ли он без мана сходу вспомнить как называется функция коннекта к мускулю mysql_connect(); или mysqli_connect или еще как весьма глупое занятие.
Согласен ))) Но никто не просит его четко, как на ЕГЭ отвечать и не пугает что это будут проверять роботы :)

Все люди, всем всё видно. Уверяю, если человек начинает фыркать и вякать насчет этого вопроса (в смысле негативно реагировать), он сразу будет послан к другому работодателю.
А фраза насчет унижения меня очень удивила. Унижение я уже описал, все остальное испытание.

Еще раз позволю себе описать мысль о том, что не важно какая задача ставится, важно как вы ее выполняете, и в как лично я вкладываю всё что я могу заметить за соискателем. Все вопросы подобраны мной, специально для меня, и мне удобно их задавать. Так же я думаю у любого hr-a. Раз мне удобно их задавать, следовательно я вижу по тому, как человек отвечает, то что хочу увидеть. А рассуждения на тему того, какие неправильные вопросы задают hr-ы считаю бессмысленными. Именно потому что описал выше.
ЗЫ
А что часто приходят такие счастливые люди, которые считают, что база данных это манна небесная?
Поток небольшой, однако приходят и такие. Всякие приходят. Здесь просто многие оценивают ситуацию однобоко — со стороны программиста. Я могу оценить ее и с той и с другой стороны.

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

PS Большинство, последнее время, рассказывают как использовать всякие обёртки, как вы выразились, однако в этом тоже нет ничего страшного — все равно видно что человек понимает, а что нет.
Каков объем знаний вы этим проверяете? Какой уровень у ваших работников? Если разговор о людях, для которых эта работа — первая, тогда вопросов нет. Давать же такую задачу людям с опытом работы на этом ЯП — бессмысленно.
А в чем измеряется объем знаний? Если вы о фактических знаниях я писал об этом тут. Уровень достаточный. То что бессмысленно — обоснуйте. Спасибо :)
Этой задачей вы проверяете только это:
> В процессе решения этой задачи видно понимает ли человек, что с СУБД надо коннектиться, как это делать и какие параметры необходимо передать чтобы коннект произошел.

И все.

Все это знает любой человек, кто хоть раз работал с БД. Причем эти знания необходимы для разработки на PHP, но отнюдь не достаточны.

Как этот вопрос проверяет насколько кандидат умен? Как этот вопрос проверяет насколько он целеустремлен? Как он проверяет…?
Очень просто :) В тесте в общем еще 30 вопросов на самые разные темы по php/js и остальным используемым нами технологиям.
Скажу честно: я не очень хорошо умею разъяснять свои мысли, тем более в письменно форме. По поводу тестов, как и по поводу много другого на собеседованиях, очень хорошо написал Джоэл Спольски: russian.joelonsoftware.com/Articles/Interviewing.html, с кем я очень во многом согласен.

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

Если будущий работник занимался последние пол-года какой-то специфической штукой, которую не затрагивает 90% ваших вопросов, то он провалит тест, несмотря на то, что может являться очень ценным кадром. К примеру, crawler на PHP с базой, отличной от MySQL.
Я понимаю. Остальные вопросы и направлены на выявление как можно большего количества полезной информации. Но согласитесь, 99% всех вебов работают с mysql, и помнить алгоритм коннекта должны как минимум 80%. Этот вопрос направлен как на отсеивание 19% непомнящих, так и на выявление понимания работы php с mysql и предыдущего опыта работы с субд.

С другой стороны если человек занимался совсем другим, и совсем не помнит ответов на наши вопросы — зачем нам такой кандидат. Ну работает человек с какой-нибудь sqlite, ну зачем нам тратить время и обучать его работе с mysql? Да пусть он хоть семьпядейволбугугляхуэплкрутой чувак. Он не сможет выполнить задание на тестовый день.
Я не говорил, что кандидат не работал до этого с вашими технологиями. Такого вы должны были отсеять на этапе прочтения резюме. Я говорил о том, что все в голове держать не возможно. Что если к базе коннектился всегда без указания порта, то не факт, что вспомнишь о том, что это надо указывать.

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

hr-консалтинг… круто :) свяжусь с вами вечером насчет тестов, если позволите.
Никакого консалтинга, что вы! Ни мне, ни вам не нужен. Да я в любом случае и не смогу его дать.

Просто пока что я не видел ни одного удачного теста. Но мне интересно мнение, отличное от моего. Если ваш вариант окажется хорош, то я легко признаю вашу правоту.
Договорились :) Вечером скину :)
И что такое ваша задание покажет? Что человек знает наизусть несколько функций mysql_*? Я, к примеру, с базой работаю через ORM феймворк и без документации ваше задание не решу.
Ответил на ваш вопрос выше.
Там три комментария, можно конкретнее?
НЛО прилетело и опубликовало эту надпись здесь
А я не считаю что писать код на бумажечке — абсурд :) Какая разница на чем писать код? Да хоть на заборе, главное чтобы он корректно работал.

А вот использование справочников в процессе работы — совсем не абсурд — согласен. Но это не работа. Это собеседование. Здесь мы видим как человек рассуждает, что он вспоминает и т.п. А главное — базовые вопросы — смотрим как он разбирается в различных областях (именно потому что знания в этих областях будут необходимы ему для работы).

Реально существующую на данный момент задачу человек получает на испытательный срок.

я так давно писал на бумаге, что подчас свой собственный почерк не разбираю
:) не пора ли вам написать чего от руки?
На заборе код работать не будет
Вы совершенно правы.
а на бумаге будет?
К сожалению нет. Есть еще туча материалов, поспрашивайте, вдруг вам повезет ;)
Жесть ) От руки же опечатки запросто бывают.

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

Когда надо, открываю SYNOPSYS и вспоминаю )
Тут два варианта.

Либо человек использует IDE которая упрощает ему жизнь настолько что он даже не помнит как написать пару строк кода который встречается в каждом проекте использующим СУБД, а таких 99%.

Либо человек просто не знает как этого делать.

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

* Писать такое приходится один раз, а вот поддерживать уже написанный код — постоянно.

Кроме того, если вспомнить, как я работал с базами данных последние три месяца:

* Один раз работал с CouchDB, совершенно не похоже на SQL;
* Один раз работал с DataMapper (core etc.);
* Один раз работал с Sequel;
* Один раз писал с использованием mysql gem на низком уровне, а потом перешёл на mysql2 gem;
* Один раз использовал node-mysqlclient
* etc.

Мне попросту лень помнить всё это барахло :)
Согласен, но еще раз напишу (уже писал кому-то в ответе) нам нужно чтобы человек понимал.

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

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

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

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

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

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

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

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

Кроме того, и Google, и документация — неотъемлимая часть работы.

Те же сайты на простом php уже давно никто не пишет. Есть всякие CMS/CMF, у которых свои методы работы с данными…

Для решения всех реальных задач на php самое лучшее — поискать в гугле «как решить такую-то задачу php»

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

Это задача студента.

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

Результатом похвастаться не могу — из 4-х взяли 2-х, один не сработался с коллективом. Зато оставшийся радует своей работой.
Например показывал сайт и задавал вопрос «что бы вы в нем улучшили?», причем воспринимались все ответы
А если реализацию простой функции рассматривать как сайт в Вашем примере? Тоже всего лишь навсего поле для разговора. Функция маленькая, а сказать есть чего.
Без конкатенации :)

<?php
$a = 'abcdefgh';
// Напишите здесь недостающий код,
// чтобы результатом работы скрипта
// была строка $a, повернутая наоборот

// начало
for ($i = strlen($a)-1; $i>=0; $i--)
echo $a[$i];
$a = '';
// конец

echo $a;
?>
В копилку:
<?php
$a = 'abcdefgh';
// Напишите здесь недостающий код,
// чтобы результатом работы скрипта
// была строка $a, повернутая наоборот

// начало
$a = $a[7].$a[6].$a[5].$a[4].$a[3].$a[2].$a[1].$a[0];
// конец

echo $a;
?>
(Кстати непонятно, может $a у нас по спекам всгда имеет фиксированную длину, тогда вариант не так и страшен)
еще можно было в начале открыть output buffer и тогда ваш вариант был бы абсолютно рабочим
ну в смысле в таком виде как сейчас он тоже рабочий, но буфер позволил бы загнать перевернутую переменную в $a
интересно, это ждедайский метод? :)
Проходил собеседование у вышеупомянутого Алексея Колупаева. Очень адекватный человек.
Задача на подумать. Причем думать пару секунд. Не согласен с автором.
Нападайте.
В посте столько сласти: извините, Вы что только что начальство в попу поцеловали?
Я написал свое впечатление от общения и работы с человеком. Он был моим начальником два года назад.
Так что вы зря язвите.
$a = 'abcdefgh';
ob_start();
for($i = strlen($a)-1; $i>=0; $i--)
{
echo $a[$i];
}
$a = $ob_get_clean();
Кстати, когда-то меня собеседовали, сразу в три команды, и как раз лидер одной из команд давал такую задачку…

Конечно, ерунда полная, хотя, конечно, в голову пришло сразу
join('', reverse(split(//)))


Потому что это естественный путь.
Если это perl — то просто reverse (скалярный контекст).
Но наверное вы это и так знаете, просто я не так вас понял )
Дальше вот этого можно не читать:

> Если даже ты какого чёрта не доверяешь диплому государственного образца (что, вообще-то, на грани национальной измены)
Это был, типа, юмор; даже не замаскированный. У меня самого диплом-то вовсе не программиста.
Я поддерживаю

$a='hgfedcba';
Мда… какие-то слабые у вас «джедаи». Если уж говорит что сишник то и думать надо как сишник:
$a[$i]^=$a[$l-$i]^=$a[$i]^=$a[$l-$i];

А вообще это скорее тест на остроту ума, а не на верность принципам командной разработки и тд. Вы что-то тоже комментариев не вставили, да и своего варианта не предложили. Хотя задачка из школьного уровня. И обсуждать ее здесь да еще и так пафосно…
Это UB в Си.
Отчего ж UB. Тут все однозначно, все операции выполняются строго.
В Си, пересказывая стандарт, изменение одной и той же переменной несколько раз между двумя sequence points — UB.
Смотрите внимательно. Именно, здесь нет этого. Sequence points здесь на ^=. Это абсолютно идентично
 a^=b;b^=a;a^=b;
Пункт стандарта в студию. 6.5.16.2 Compound assignment — нет sequence point на ^=.

GCC со мной согласен:
$ cat aaa.c
#include <stdio.h>

int main()
{
  int a = 0, b = 2;
  a ^= b ^= a ^= b;
  printf("%d %d\n", a, b);
  return 0;
}

$ gcc -W -Wall aaa.c
aaa.c: In function ‘main’:
aaa.c:6: warning: operation on ‘a’ may be undefined

Именно в стандарте есть некоторая неопределенность:
The assignment operator(=) and the compound assignment operators all group right-to-left. All require a modifiable lvalue as their left operand and return the left operand as an lvalue. The result in all cases is a bit-field if the left operand is a bit-field. In all cases, the assignment is sequenced after the evaluation of the left and right operands, and before the evaluation of the assignment expression.

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

блин, вот:

$a = 'abcdefgh';
//
$length = strlen($b=$a)-1;
for($i=$length,$a=$b[$i]; $i>=0; $i--, $a=$b[abs($i)])
//
echo $a;
Какие ж это извращения…
for($i=strlen($b=$a)-1; $i>=0; print($a=$b[abs($i--)]));
Один только вопрос, зачем тут $b?
$b нужна, чтобы $a использовать как времнную переменную в последней строке, которая, благодаря этой нехитрой конструкции, стала частью цикла.
Хехъ :) Не понял… Так же лучше:
for($i=strlen($a)-1; $i>=0; print($a[$i--]));
а echo $a куда девать?
и модуль…
Даже на Питоне можно написать труъ-джедайский код! Внимание, не повторяйте этот трюк в рабочих условиях… :)
>>> 'abcd'[-1::-1]
'dcba'
Фу, как скучно и шаблонно.
reduce(lambda *a: operator.add(*reversed(a)), "abcde")
Виноват!
>>> ''.join(zip(*sorted(enumerate('somestring'), reverse=True))[1])
'gnirtsemos'
можно еще джедайскее:
>>> 'abcd'[::-1]
'dcba'
Решение точно по условиям задачи:
Парадоксально, что демонстрируемый им подход соответствует сему посылу с точностью до наоборот.

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

P.S. Кстати о задаче «переворачивания строки» если она дается без фиксированного языка: пусть существует язык Reverse, в котором строка задается так: 1 бит направления и 31 бит длины, за которыми следуют собственно символы. Только операция переворачивания строки состоит в инвертировании первого бита и выполняется за константное время. :)
Лучше пусть существует язык Reverse2: где переменная a — исходная строка, и надо просто сделать "-a" :)
Впрочем синтаксически это может быть пойдет и для Reverse :)
Точно.

Итак, язык Reverse начинает жить…
НЛО прилетело и опубликовало эту надпись здесь
Ага и собеседование растянется из получаса в марафон: сначала час — решить оптимальным путем, и потом пару суток соревноваться в оптимизации…
НЛО прилетело и опубликовало эту надпись здесь
Какой процент кандидатов проходит дальше?
Одно дело посидеть порешать на досуге, и совсем другое на собеседовании написать в короткий срок что-то осмысленное.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Это простейшее задание, так сказать защита от дурака. Фильтруются те кто «ничего» не может и написал сказки в резюме.
Естественно после него будет полезно не забыть пообщаться на более глубокие темы.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
«Первый джедайский» на самом деле самый очевидный и вменяемый при условии невозможности использовать стандартные функции или грязные хаки вроде нулевого.
Фейерический пипец.
Автора таких заданий не любит его женщина по ходу.
Вот он и отрывается :)
IMHO, если кандидат не знает что есть функция strrev, значит он не программист знаюший PHP, а веб-мастер с окладом в 25 штук в каком-нибудь убогом проекте.
Однако $a='hgfedcba' вполне катит, поскольку задачка сформулирована криво.

Попросили бы лучше объяснить как работает система ссылок в PHP и что такое refcount…
> Попросили бы лучше объяснить как работает система ссылок в PHP и что такое refcount…

А зачем? Я например знаю про метод подсчета ссылок, знаю его ключевые недостатки, знаю что надо сделать (и что никто не делает, злодеи), чтобы в Си++ этот метод работал эффективнее, и что? Где это нужно? А тем более в PHP.
Мне кажется без понимания принципов работы PHP, на нем невозможно писать красиво и грамотно.
Видать минимум 4 человека таки не знают :-)
уважаемые, никто не обратил внимания что статья которую люто (и на мой взгляд заслуженно) ненавидит автор датирована 2008 годом… поскольку с тех пор никакого мега-проекта г-н Колупаев так и не создал (по крайней мере я не нашел такой информации) — время рассудило все само…
Можно в копилку докину пищи для размышлений?

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

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

Я сказал: режьте по горизонтали. Меня не поняли.
Нужно было более четко сформулировать — режьте поперек на уровне h/2 от нижнего коржа, где h — расстояние от нижнего до верхнего коржа :)

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

И да, с utf-8 конечно хорошая подстава вышла.
А я бы например спрашивал более реалистичные вопросы, например в чем недостатки Zend framework и почему популярные OpenSource ORM не пригодны для веб-разработки.
Этот Алексей Колупаев конечно неправ, но в с автором топика я тоже не везде согласен. Все-таки если человек, претендующий на роль программиста, не может написать такой простой алгоритм, то назвать его профессионалом или специалистом у меня не повернулся бы язык, уж простите.
Само собой.

Бывает, правда, что на собеседовании так переклинит, что простейшие вещи в голове не складываются. Я как-то не смог ответить, чем HAVING от WHERE отличается в SQL; притом, что на работе (коя у меня тогда была) обращался с этим несчастным HAVING'ом активно и осмысленно. Но тут мозг забастовал и решительно скрыл познания от интервьюера (в итоге, к лучшему: место было не ахти).
Господа, я уже давно на всех собеседованиях дают вариантов 5 на все случаи жизни. Проблемы разве что с анкетами, всегда геморой ответить не умнее и не глупее составителя анкеты.
Скажем, в случае с этой задачкой, ничто не мешает высказать все вышеуказанные варианты и соображения по очереди. Когда собеседуются у меня, мне самое важное в такого рода задачах, это как раз умение проанализировать условие и построить полное поле решений задач, чтото такое стараюсь предоставить на собеседованиях и сам. Скажем, классический пример, — это задача с самолетом на транспортере.
Начиная со второй половины (оптимизации), я согласен.

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

Наибольшие понты от собеседуемого исходят всегда, когда он ни на что не способен, и это 70% приходящих.
Я ещё не видел ни одного человека нормального уровня, который бы пошёл по варианту номер 5.

А про испытательный срок это вообще ерунда. Кто будет три месяца чинить огрехи за этим человеком?
>>> попробуйте провести пару собеседований
Пробовал. Неоднократно.

Меня интересовало одно «сколько человек учит данный конкретный язык»
— две недели (не пишет код, а плачет и уходит)
— два месяца (пишет код класса $a[$i] = $a[$l-$i]^$a[$i]; потому что заюзал гугл и думает что это меня впечатлит)
— два года (просто посылает меня нафик, и говорит что не будет изобретать велосипед, потому что есть готовая функция)

Это разумно, но мне почему-то кажется, что автор статьи не пробовал.
Кстати, у вас третий вариант это пункт не 5, а 4, то есть вменяемый человек.
кстати говоря, я один раз когда устраивался нарвался на одного студентика на собеседовании. там был вопрос про деревья — типа как лучше всего хранить деревья, пара тройка вариантов ответа (один «правильный» в духе через parent_id и последний «другой способ»). Я выбрал, конечно же, «другой способ» :) За что была предпринята попытка как раз принизить меня и восхвалить себя(прям как у автора первой статьи), короче меня ткнули носом и сказали, что как же так такой примитив не знаете — правильно через parent_id. После этих слов мне все стало понятно, я сказал — спасибо, до свидания, вы МНЕ не подходите, т.к. заниматься теорией у меня нет желания, а на практике все зависит от конкретной задачи. И parent_id иногда самый худший способ.

Это я к тому что иногда «мега гуру гении» пишут такую ересь в коде, что это просто звиздец потом разгребать. Зато гонора на целый отряд спецов. Мне хватило переделки всего одного проекта от такого «гения» (который себя так прям и считал гением, со всеми другими чуть ли не через губу общался), чтобы раз и навсегда понять, что с такими людьми лучше не связываться вообще — ни в качестве нанимателя, ни в качестве команды. ни за какие деньги.
Я бы ответил что деревья лучше хранить в сухом прохладном месте и брызгать жидкостью против древесных жуков.
А вот иерархическое дерево элементов в СУБД с признаками схожими с 13-тью правилами Кодда — лучше хранить одним из таких способов как Nested sets, Lists of adjacency, Materialized path… Выбор способа напрямую зависит от частоты выполнения типов выполняемых над иерархическим деревом операций.

А если студентег ничего кроме рекурсивной хранимой процедуры и parent_id не знает для выборки всех потомков… Пусть идет учить материальную часть, а потом уже смеет проводить собеседования.
Интересно, что автор задачи думает про такой метод:
$aLast = strlen( $a ) - 1;
for ( $pos = 0, $aHalf = $aLast / 2; $pos < $aHalf; $pos++ ) {
    list( $a[$pos], $a[$aLast-$pos] )	= array( $a[$aLast-$pos], $a[$pos] );
}
Интересный способ обмена значений.

Мне менее загруженным кажется вариант с while:
$len = strlen($a);
$cur = $len >> 1;
while ($cur--) {
    list( $a[$cur], $a[$len-$cur] ) = array( $a[$len-$cur], $a[$cur] );
}
Ваш код заставляет думать: думать о том, правильно ли он обрабатывает граничные значения. На первый взгляд неочевидно. А на второй — он всё таки с ошибкой. В последнем прогоне $while мы вылетим за границы массива в $a[$len-$cur].
Видимо, он не «джедайский», раз использует логично напрашивающиеся возможности самого языка.

Но — позор мне, что не вспомнил про list!
НЛО прилетело и опубликовало эту надпись здесь
Способность мыслить на бумаге на мой взгляд полезная вещь.
Способность проявить терпение и написать несколько строк тоже.
НЛО прилетело и опубликовало эту надпись здесь
похапе не знаю совсем, но:
посмотрев на
    $b = '';
    for ($i = strlen($a)-1; $i>=0; $i--)
    	$b .= $a[$i];
    $a = $b;

я понимаю, что оно делает. остальное — это какой-то ПЦ. не надо так, действительно :)
Такую задачку было бы интересно дать для языка, где строка является read-only и запретить использование конкатенации.
заковать руки в цепи и заставить писать код под водой с акулами, Копперфилд нервно курит.
И показать по телевидению, рейтинги были бы бешеные, на одной рекламе сорвали бы тонны бабла!!!
НЛО прилетело и опубликовало эту надпись здесь
ну дык создать новую строку, потом перекинуть ссылку с $a на новую строку, обращаться по индексам
хабрашколота с завышеным ЧСВ вылезла критиковать вменяемых интервьюверов? :)

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

и да меня тоже не устраивают дипломы государственного образца =)

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

Не ожидал, что у статьи повится «второе дыхание» через два года после ее написания.

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

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

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

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

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

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

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

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

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

Хороший ли он программист — я не знаю, вроде как задачи какого-то уровня решает. Стал бы я что-то делать с ним совместное не за оклад — 100% не стал бы. А на оклад тем более не взял бы.
Статью Вашу я прочитал давненько — и почувствовал себя говном. Медитация и учёба привели меня к выводу, что в этом я был, скромно выражаясь, не вполне прав. Теперь я немного отыгрался (и заодно заработал инвайт), за что, надеюсь, Вы не в обиде. В конце концов, это была пища для ума.
За автора поста не скажу, но мне не понравилось то что вы искали не там где потеряли, а там где светло.

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

Ну и само собой пояснить что это задача не реальная, а только «если бы не существовало готовой функции».
Тогда вы бы могли без труда отделить тех кто мыслит, от тех кто зазубрил. (Цель как я понял заключалась в этом.)
Трюкачество на PHP — это всё равно что лепить изящные скульптуры из говна. Простите.
Трюкачить нужно только на машинном коде, чтобы никто дизасемблировав не понял как программа работает.
А на упомянутый выше труд Мао ссылочку не дадите?
Беседа в день Праздника Весны (англ.). Есть выдержки по-русски, но цитату я брал из фразы, коя в этих выдержках отсутствует, но, пожалуй, целиком имеет отношение к обсуждаемой теме: «Our present method of conducting examinations is a method for dealing with the enemy, not a method for dealing with the people. It is a method of surprise attack, asking oblique or strange questions. This is still the same method as the old eight-legged essay. I do not approve of this. It should be changed completely. I am in favour of publishing the questions in advance and letting the students study them and answer them with the aid of books».
$a = 'abcdefgh';
$b = strlen($a);
while (isset($a[--$b]) && $c .= $a[$b]);
$a = $c;
print $a;
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
вообще мое мнение (а я был с разных сторон баррикад) — нужно смотреть на фронт работ которые человек успел проделать. не с нуля же он пришел. если с нуля, то каким-то компаниям и такие нужны, но это уже вопрос нужен ли «новичок» конкретно вам.

если брать в серьезный проект, то участие в opensource проектах — большой плюс. я начинал в свое время именно с opensource проекта и могу со 100% уверенность сказать, что если проект нормальный, то там человек прокачивает очень сильно по многим направлениям сразу — как в техническом плане, так и в плане участия в совместных проектах (начиная от общих правил оформления кода и закачивания многими другими более серьезными вещами). это мой опыт, мое имхо и пока оно не подводило.
НЛО прилетело и опубликовало эту надпись здесь
Знаете, что 75% людей отвечают «да» на вопрос, считают ли они себя принадлежащими к 5% самых умных людей?
Как переводится: Jedi suxx, Sith rules…?
Джедай — отстой, ситх — рулит ☺

Публикации

Истории