Pull to refresh

Comments 247

Может и задолбали, но про числа и свитератого админа мне было интересно :)
Да про админа мне тоже понравилось, видимо не хотел что бы его заменили.
Хм, а «программеры в свитерах» начались с моего мессаджа в ICQ, который одногруппник на башорг запостил:
"№;%, тут такие программеры смешные… НАСТОЯЩИЕ! У меня то в основном фрилансеры были, они и одеваются более менее, и следят за собой.
А тут прямо классические кошерные программисты. С бородами, с усами… Свитор в джинсы запрвляют… Сразу видно – профессионалы.
"
От вашего «мессаджа» пошли, возможно, программисты в «свитОрах». А тру-программеры в свитерах пошли еще от папы Дяди Федора из мультика. И прототип башорга Шарик уже тогда только-только намалякал на печке.
Боюсь, что вы несколько запоздали на то время. «Бородатый компьютерщик в свитере» — «мем» (тогда слова такого не было в русском языке) задолго до термина «фрилансер» (в русском, касательно ИТ) появился.
Но широкое использование этих слов вместе и применительно к компьютерщикам получило именно на баше и именно после этой цитаты. Я даже как то поиском с сортировкой по дате проверял. =)
В любом случае, никому ничего доказывать не хочу и не вижу смысла. Не тот случай.

Орфографическая ошибка — уж как тогда хватило ума, так и написал…
Я же не спорю, что после этого оно пошло в амссы от ИТ далекие.
Про числа гениальная идея после собеседования явно не верна. (если перебором решать, то все чётные отсеяться на первой итерации и не будет перебора от 2 до sqrt(n), как следствие выигрыш будет куда меньше). Простите за занудство.
Мда, профессиональные знания и опты — это только четверть успешного интервь. Еще одна четверть — это опыт прохождения интервью и еще четверть — адекватность интервьера. Ну и без везенья не обойтись.
Причем, надо отметить, у самых хороших работников опыт прохождения интервью очевидно мизерный (на работе работают долго, их удерживают, а если начинают ходить по собеседованиям, их быстро переманивают), в итоге получается такой себе обратный эффект — лучше всего умеют проходить интервью те, кто работает не очень хорошо.
Но если последние «лучше всего умеют проходить интервью», то как выходит, что первых «быстро переманивают»? И в чём же тогда заключается «обратный эффект»? Тех, кто опыта собеседования не имеет, на собеседованиях и не видно, чего же их учитывать?
Те, кого переманивают, собеседование не проходят вообще. Им просто незачем. Про них и так знают, что они могут. Им работу и условия предлагают, и ответить нужно только «Да» или «Нет». Всё. Уж с этим-то вопросом можно справиться?
Я так и понял. И «обратному эффекту» в такой модели взяться неоткуда — «самые хорошие работники» до интервью не доходят, и отсутствие у них этого опыта на картину не влияет. А те, кто «лучше всего умеют проходить интервью», соревнуются друг с другом в знакомой обстановке.
Меня не раз пытались переманить (как я это понимаю) — обычно хоть какое-то очное собеседование всегда было «в программе». В лучшем случае оплачивали издержки типа перелета, гостиницы и питания, в идеале — экскурсии по городу. Пресловутый «недополученный доход» ни разу не предлагали компенсировать. А один раз было и смешно и грустно — приехал на собеседование (недалеко, порядка 18 часов на поезде), меня встретили, повезли в офис, сначала с «эйчаром» (образно) общался, она «пропустила», предупредив, что у них очень строгие условия типа NDA, потом типа с «техлидом» начал разговаривать, он несколько вопросов задал и попросил код показать. Я ему говорю: «как?»: во-первых меня не предупреждали и я даже на флэшке с собой не взял, во-вторых, там может NDA я не подписывал, но показав свой код в свете последних веяний по ПДн чуть ли не под УК могу попасть. Мне сказали «до свидания», почти сутки до ближайшего поезда пришлось тусоваться за свой счет. В итоге трое суток и несколько тыщ рублей потерял из-за того, что меня не предупредили о необходимости показывтаь свой код.
Ну потому надо показывать было гитхуб или битбукет. Ну или какой-нибудь кьюей-дебиан-орг.

З.Ы. Это не с издёвкой, это я просто прокомментировал, есличо :)
У меня там статусы типа watch или fork (в приват-реп). Форки под NDA в теории, на практике нет пулл-реквестов по моим соображениям — кто я такой, чтобы гуру указывать на субъективные недостатки фреймворка или либы, да еще требовать их мержа для всех? А не примут реквест — позора потом не оберешься на всех.

Были бы приват реквесты — рискнул бы, но не в паблик. Хватило пару раз свою критику к своему основному языку (PHP) высказать, чтобы пришлось мыло на gmail сменить. Чуть ли не убить угрожали за то, что предлагал синтаксис массивов типа принятого ныне в 5.4 во времена когда 5.0 к релизу только готовился. Просто PHP мой далеко не самый первый язык, но я старался привнести в него субъективно полезные практики из других языков, на которых я писал. Прежде всего из Си.
Вот как раз приватные нафиг-нафиг. Насчёт позора — зря так, в спорах рождается истина.
В общем, какое-то у Вас жуткое невезение.
В спорах — не спорю :). Когда сыпятся оскорбления — это уже не спор.

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

[holywar_material] у них, например, есть правильное CV [/holywar_material]
У вас есть такие знакомые, готовые передать опыт? За будущий процент от зарплаты :)
Я же не вам процент предлагал, а им. Типа персонального тренинга :)
Да я хотел себе процент попросить… а, нафик)))
Так знакомые есть или нет? :) Если есть, то можно договориться :)
Теоретически вы правы, но есть практические исключения (а значит теория яйца выеденного не стоит, максимум объективная коррелеяция наблюдений с какой-то погрешностью). Вы допустили как минимум одно «очевидное» допущение: «начинают ходить по собеседованиям — их „переманивают“ (видимо имелось в виду „удерживают“)». Я, бывало, начинал ходить по собеседованиям, но мои работодатели об этом не знали. Или увольнялся, только имея в виду хождение по собеседованиям. Я считаю, что тупо не о чем разговаривать с работодателем, не выполнившим свои обещания пускай не в конкретный, а в разумный срок. Или, как минимум, не сообщившему о том, что он их выполнять не собирается, потому что ты не выполнил свои обязательства.
«Эта теория верна, хоть она и не всегда срабатывает на практике.» Роберт Шекли, Оптимальный вариант :).
В теориях, касающихся людей, исключения есть всегда и много, психология человека уж очень сложная и многогранная область, чтобы подогнать ее под определенную простую теорию. Кроме того, выше уже было отмечено, что это четверть успешного интервью, а не весь успех.

«Переманивают» имелось в виду, что таких людей все-таки часто быстро берут на новую работу чисто по техническим знаниям, то есть опыт прохождения собеседований остается довольно низкий. Что, например, сильно может повлиять на вероятность устройства в тех фирмах, где первичное собеседование проводит HR, а не технический специалист.
Тут есть «соседний» топик про интровертов типа меня. Там (не везде, но часто), где меня оценивали по техническим знаниям (приглашали сами, фиг зная основываясь на чем, вернее на 99% на моих комментах на Хабре и в некоторых рассылках, пока было «хабререзюме») — я отказывался из-за того, что предлагали должности уровня «ведущий»/«Senior», предполагающие не только технические знания, а свою некомпетентность (имхо, врожденную) в деле делегирования ответственности, контроля и т. п. я оцениваю как крайне низкую: эффективнее мне поручить работу из расчета 16/7, чем «отдел» из пяти человек (кроме меня) 40/5.

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

Лучше не ходите к таким работодателям.
А как узнать какой он, пока к нему не сходишь. Да и на самом деле с возрастом всё чаще убеждаюсь, что пословица «по одежке встречают, а по уму провожают» имеет в виду «соблюдай „дресс-код“ для данного социума и тогда оценят твои личностные характеристики», а не «не обращай внимания на внешний вид, главное твои знания, способности и т. п.». Хоть, блин, на курсы модельеров иди, чтобы узнать, что классические «костюм-»тройка" и рваные (а после того удобные) кроссовки производят плохое впечатление на работодателей. Вернее чтобы узнать почему они это производят. Что производят я уже убедился, но недостаточно данных для анализа причин и синтеза благоприятного впечатления.
Поспрашивать отзывы, узнать кто там работает и сколько. В общем разведать ситуацию.
Честно сказать, никогда специально не готовился к собеседованиям. Приходил без какой-либо подготовки вовсе, в майке и шортах, иногда потный как неизвестно кто, потому как нёсся через полгорода на велосипеде, т.к. вышел на полчаса позже, чем ожидал, а на улице жара. Скажу так, негативные результаты получались только тогда, когда в фирме просто не было вакансий вовсе.
кажется мне, что
хорошие разработчики
при желании смогут перед собеседованием почитать и выучить маны именно по прохождению собеседования
Но смогут ли они их применить без практического опыта? Это же не архитектуру разрабатывать, тут знание психологии нужно…
это вам не в компьютере клацаться, тут думать надо…

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

Я не очень понял почему вы сделали вывод о мантре с моего коммента. Я скорее имел ввиду ситуацию, когда классный специалист жалуется на проблемы на собеседовании(особенно не технической части), при это даже не попробовав посмотреть, а что собственно от него ожидают. Прочитать пару статей с форумов ейчаров, например. И понять принципы, по которым «могут» отсеивать. Этим можно свести конфликт на нет если не полностью, то хотя бы уменьшить его вероятность процентов на 50%.

Надеюсь, понятно выразился.
Ну не пишут на форумах эйчаров таких вещей, как прическа (вернее её остатки годовалой давности), грязь под ногтями, раздолбанные (пускай и начищенные) ботинки или рваные (не художественно) джинсы, заикании или потливости. Если подумать, сформулировать целевые запросы, то можно хоть как-то понять и намеки на это найти. О них хоть как-то эйчары могу сообщать. Но есть факторы вообще умом (имхо) не понимаемые, типа ногти пускай и чистые, но явно зубами чищенные, а не остальными достижениями современной цивилизации и оказывается, что это было причиной отказа, когда психолог «заставил» её признаться в этом самой себе (участвовал как-то раз в исследованиях квалификации эйчаров по заказу работодателей).
Вы всё правильно написали. По-хорошему так и надо: планомерно собеседовать соискателей, спокойно относиться к тому, что кто-то чего-то не знает. Но вы немного по-другому взглянете на вещи, когда пособеседуете десяток кандидатов. Из них девять окажутся странными людьми, которые программистами называются по какому-то недоразумению. Знаете, есть шутка такая про то, что программисту надо давать тестовое задание прямо на собеседовании — вывести числа от 1 до N, вместо делящихся на 3 выводить «FOO», вместо делящихся на 5 — «BAR», если делятся на то и другое, то «FOOBAR». На любом языке программирования. Ирония в том, что это не шутка. Вы удивитесь, сколько людей проваливают этот тест. Здесь нет ни капли сложной математики, ни каких-то супер знаний. Половина будет тупить и перебирать нелепые конструкции, половина оставшихся попросит справочник по PHP. Пост, на который вы отвечаете, это крик души программиста. Понятно что эйчары к этому давно привыкли, в конце концов, они в психологии что-то понимают. А программисту сталкиваться с этим очень неприятно. Знания кандидатов невероятно фрагментарны, целостного представления о том, как работает веб-приложение хотя бы в общих чертах, у них нет. Чем POST отличается от GET, они понимают только по тому, видны ли параметры в строке браузера. А во всём остальном даже не хотят разбираться.
вместо делящихся на 3 выводить «FOO», вместо делящихся на 5 — «BAR»,

Fizz buzz же! Игра у них такая есть, детская, от нее тест и произошел.
А, ну может. Не суть.
И что вы скажете по этому коду?
print(I,N) when I > N -> ok;
print(I,N) when I rem 5 == 0 andalso I rem 3 == 0 -> io:format("FOOBAR\n"), print(I+1, N);
print(I,N) when I rem 5 == 0 -> io:format("BAR\n"), print(I+1, N);
print(I,N) when I rem 3 == 0 -> io:format("FOO\n"), print(I+1, N);
print(I,N) -> io:format("~b\n", [I]), print(I+1, N).

main() -> print(0, 100).
Плохо. Не оптимально. Можно обойтись выводом «Foo» и «Bar».
Можно, но это будет уже не наглядно и не функционально. Это было на «на любом языке» — правильно сказать «на любом последовательном языке».
На функциональных это уже не так. Собственно, я написал близко к прологу, совсем на прологе это будет еще хуже выглядеть.

Тут вот в пределах одного предиката print это решить уже не получится, потребуется множество излишних усложнений, за которыми потеряется смысл.
Запустить не удалось:
* 1: syntax error before: 'when'

Впрочем, это не суть важно. Видно, что задача решена, и, похоже, правильно. Можно продолжать собеседование.
а вы пытались каким языком компилировать? :)
дописываем вверху
-module(a).
-export([main/0]).


Скрытый текст
datacompboy@nuuzerpogodible:~$ erl 
Erlang R15B01 (erts-5.9.1) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9.1  (abort with ^G)
1> c(a).
{ok,a}
2> a:main().
FOOBAR
1
2
FOO
4
BAR
FOO
7
8
FOO
BAR
11
FOO
13
14
FOOBAR
16
17
FOO
19
BAR
FOO
22
23
FOO
BAR
26
FOO
28
29
FOOBAR
....


ну и отлично видно, что задача решена неправильно ;) она запускается от 0, а не 1, как было по условию.
я бы сделал вывод — «автоматизм» и «невнимательность к исходной задаче».
Эрлангом, конечно. Но поскольку с ним никогда не работал, то и правильно запустить не смог. Соискателям даю компьютер в распоряжение, так что они сами компилируют и запускают. Вообще да, ошибка на ± 1 очень частая.
Ну так не интересно :)На erlang должно быть гораздо красивее.

[fun(A) when A rem 15 ==0 -> bizzbuzz; (A) when A rem 3 == 0 -> bizz; (A) when A rem 5 == 0 -> buzz; (A) -> A end(X) || X
Ну вот зачем на пастебин-то. Скопирую сюда:
[fun(A) when A rem 15 ==0 -> bizzbuzz; (A) when A rem 3 == 0 -> bizz; (A) when A rem 5 == 0 ->  buzz; (A) -> A  end(X) || X <- lists:seq(1,100)].
а можно ли родить без rem 15, именно из двух частей — rem 3 и rem5 только?
всё что я могу сообразить рожает просто отвратнейший код.
Или вы понимаете под «правильным» только такое:
for(i=1; i<=N; i++) {
   if(!(i%3)) document.write("FOO");
   if(!(i%5)) document.write("BAR");
   if((i%3)&&(i%5)) document.write(i);
   document.write("\n");
}
UFO just landed and posted this here
1) не выводит числа, которые не делятся ни на 3 ни на 5
2) FOOBAR не получается ни разу
3) работает на диапазоне [1;n] а не [0;n-1]
UFO just landed and posted this here
Дважды проверяешь — Fuuuuuuuuu!
как вариант
for(i=1;i<=n;i++)  document.write(( !(i%15)?'FOOBAR':!(i%3)?'FOO':!(i%5)?'BAR':i) +'&ltbr>');
А вы помните про того маньяка, который будет поддерживать код после вас? Помните, что он знает, где вы живёте?
Вы всё равно не сможете угадать уровень, на котором этот маньяк умеет читать код. Возможно, что фрагменты длиннее двух строчек он просто не воспринимает, а необходимость искать код среди коментариев немедленно приводит к обострениям?
Можете закидать меня помидорами, но я хоть убей не вспомнил бы на собеседовании как получить остаток от деления ни на одном из яп, просто потому, что использовал редко и давно, это де факто делает меня плохим программистом?
нет, речь идёт о том, как правильно записать условия, чтобы писать только FOO или BAR или число, при этом получалось вывести одновременно и FOO и BAR, но не получалос вывести FOO/BAR плюс число.
Не совсем понял, ваше объяснение, это решение является верным?

for($i=1;$i
Видимо я все таки плохой программист, ка только не оборачивал, нет результата

for($i=1;$i < =100;$i++){
if (($i%3==0) && ($i%5==0)){
echo «FOOBAR»;
}elseif($i%3==0){
echo «FOO»;
}elseif($i%5==0){
echo «BAR»;
}else{
echo $i;
}
echo "";
}
for ($i = 1; $i <= 100; $i++) {
    ... bleargh bleargh bleargh ...
}
тут я так понимаю главное суть, хотя остаток от деления во всех известных мне языках — %. но даже если не помните есть и другие способы проверить делится ли число на пять или на три
Где-то %, где-то div или `div`, где-то цикл с sub + bge/jge…
div? A не mod? Или где-то и правда div даёт остаток от деления?
Вы правы, в случае `div` — ошибка, там `mod`.

А насчет второго — в stdlib.h/cstdlib
typedef struct {
  int quot;
  int rem;
} div_t;

// ...

div_t div(int numerator, int denominator);
Или где-то и правда div даёт остаток от деления?
В ряде мест div даёт и частное, и остаток.
В качестве примеров с ходу выгуглились C stdlib, x86 и MIPS.
Точно. Я её и читал. Потом решил проверить ради прикола, и был шокирован.
Не совсем понял, а в чем сложность этой задачи, она же вроде элементарна?
^for[i](1;100){
    ^if(! ($i % 15)){
      foobar	
    }{
      ^if(! ($i % 5)){
        bar
      }{
        ^if(! ($i % 3)){
          foo
        }{
          $i
        }
      }
    }
}[, ]


кстати для эстетов проверку на 5 можно делать проверяя последняя цифра 0 или 5, а на три — сложив цифры числа )))
и еще удивляет почему «на пять и на три» буквально реализуют, а не проверяют на деление на 15
Как раз деление на 15 можно не проверять, лишний шаг.
Ну я имел ввиду там где пишут if (($i%3==0) && ($i%5==0)) и аналогично, можно проверять на деление на 15. Так то да, можно и не проверять. Кстати хотелось бы знать за что минусы, вариант же рабочий
Деление — операция не шибко быстрая, особенно если используемый процессор не имеет блока аппаратного делителя. То бишь получается что сначала поделили на 15, посмотрели остаток, если не угадали, то поделили на 5, снова посмотрели остаток, а если опять не угадали, то делим ещё и на 3. В итоге до трёх делений на итерацию, что, как бы, многовато будет.
void main(){
    int r3=0,r5=0;
    for(int i=1;i<=100;i++){
       int flag=1;
       if(++r3==3){ printf("foo"); flag=r3=0; }
       if(++r5==5){ printf("bar"); flag=r5=0; }
       if(flag) printf("%d",i);
       printf("\n");
    }
}
Весьма годно =)

Ну разве что в качестве придирки:
1) r3 и r5 никогда не будут больше 3 и 5 соотв., так зачем под них отдавать целых 2+ байт (в зависимости от компилятора). Аналогично с int flag
2) r3, r5, i, flag не могут быть отрицательными по определению, так зачем они signed?
3) читабельность %)
1) они всё равно лежат на стеке, так что по 4 байта на них выделится почти наверняка (хотя это надо проверить).
2) в общем случае зависит от процессора. Был бы тип native (с гарантированным диапазоном 0-127), имело бы смысл использовать его… на Z80 это бы почти наверняка был unsigned char. Других процессоров, на которых беззнаковое сравнение эффективнее знакового, я не помню. Попытки уместить r3 и r5 в один байт ни к чему хорошему не привели:
  unsigned char z=53;
  for(unsigned char i=1;i<=100;i++){
     z+=17;
     if(!(z&136)) printf("%d",i);
     else{
         if(z&8){ z-=3; printf("foo"); }     
         if(z&128){ z-=80; printf("bar"); }
    }
    putchar('\n');
  }

3) вот теперь видно, что предыдущий код был ещё читабельным :D
1) А у некоторых МК нет стека как такового. Например у некоторых МК от Microchip есть стек на 32 адреса, в котором хранятся только адреса возврата из функции и больше ничего там хранится не может.
2) Так там же нет сравнения типа «больше-меньше». Используется сравнение типа ==. То бишь тут проще вычесть одно из другового и смотреть выставился ли флаг Z или нет. Так что эффективность сравнения, как мне кажется, немного притянута за уши.
3) Ну запихивать их в один байт, это уже перебор =) А что касается читабельности, то если переписать числа в hex-е, то станет горяздо нагляднее что делается с nibble'ами %)

1) Согласен. Код переписывается на регистры (не считая печати, которая вообще зависит от железа), а если регистры 8-битные, то байт лучше.
2) Там вообще знаковость притянута за уши: все операции — либо проверка на равенство, либо сложение. А им всё равно, знаковая арифметика или беззнаковая. Кроме сравнения i<=100 (которое легко меняется на i!=101).
3) Смотря сколько регистров доступны. Мне нужны три, а если есть операция BIT — то вообще два. Опять же не считая печати. Кстати, там не нужно 4 бит на r3 — хватит 3. И получается:
  unsigned char z=031;
  for(unsigned char i=1;i!=101;i++){
     if(!((z+=011)&0104)) printf("%d",i);
     if(z&4){ z-=3; printf("foo"); }     
     if(z&0100){ z-=050; printf("bar"); }
    putchar('\n');
  }

Интересно, кто-нибудь сейчас про такой формат помнит? ;)
Это понятно, просто в задаче ничего не говорилось про оптимальность.

$d3($i % 3 == 0) #true|false
$d5($i % 5 == 0) 
^if($d3 && $d5){...}


Так будет оптимальнее же? На пять тоже делить не обязательно, наверняка i.right(1) == 5 || i.right(1) == 0 будет работать быстрее. Но вопрос в том требовалось ли задачу решить каким то определенным образом или это проверка на логику?
Вообще говоря, задача оптимизации не ставилась. Классическая «работа на результат», а по памяти последнего топика на эту тему — не все даже результат выдали (тесты не прошли бы). Имхо, первая задача программиста — выдать результат для основного workwlow. Дальше зависит от работодателя/заказчика.
суть деления на 5 и 3 повторяемое, чтоб компилятор мог вынести и сделал сам «невидимую переменную».
деление на 15 отдельное это всегда лишняя операция.
Магическая константа получается :) Вот 3*5 написать другое дело :)
ну ясное дело :)
правильно обернуть в функцию и не 3*5, а k*m, которые передавать параметрами :)
Если тупо обернуть (на языке типа PHP) — это будет не чистая функция :) И тут напрямую встает вопрос к тестирующему: «а по каким критериям будете оценивать?».
Я хоть и не программист, но всё же попробую ради интереса…
Вот функция на Си которая у меня получилась:
void foobar(unsigned int n) { unsigned char is_mul_of_3; unsigned char is_mul_of_5; unsigned int i; for (i = 1; i <= n; i++) { is_mul_of_3=!(i%3); is_mul_of_5=!(i%5); if (!is_mul_of_3 && !is_mul_of_5) { printf("%d", i); } else { if (is_mul_of_3) printf("Foo"); if (is_mul_of_5) printf("Bar"); } putchar('\n'); } }
Теперь собственно говоря почему так, а не иначе:
1) Первым проверяется вариант что число не является кратным ни 3, ни 5. Если посмотрите выборку от 1 до 1000, то получите таких чисел 533, против 467 случаев появления «Foo», «Bar» или «FooBar». Так что проерка на Foo и Bar будут проводиться только в том случае, если хотя бы одно из условий верно.
2) Флаги is_mul_of_3 и is_mul_of_5 вынесены по большей части только для красоты и читаемости, любой современный компилятор всё равно бы оптимизировал повторный вызов !(i % 3). И вообще, целый байт использовать на хранение одного флага не есть гуд, вдруг у нас какой-нибудь микроконтроллер =) Но пусть будет так.
3) Строки «Foo», «Bar» выводятся без символа переноса строки на конце, таким образом строку «FooBar» мы получим автоматически, когда число кратно 3 или 5. puthar в конце сделает нам перенос в любом случае.
4) printf тоже использовать для такой задачи не самая светлая мысль, здесь будет достаточно write. Но так смотрится «читабельнее» и привычне что-ли. Приходилось наблюдать как какой-то компилятор сам менял вызовы printf без параметров на вызов write.
5) Считать начинаем с единицы, а не с нуля, как многие здесь пытались, см. условие задачи.
6) Строки «Foo» и «Bar» должны выводиться _вместо_, а не вместе с числом, опять таки см. условие задачи.
Парсер съел форматирование =\
Случайно использовал тег code вместо source.
Ещё раз:
void foobar(unsigned int n) {
	unsigned char is_mul_of_3;
	unsigned char is_mul_of_5;
	unsigned int i;
	
	for (i = 1; i <= n; i++) {
		is_mul_of_3=!(i%3);
		is_mul_of_5=!(i%5);
		if (!is_mul_of_3 && !is_mul_of_5) {
			printf("%d", i);
		}
		else {
			if (is_mul_of_3) printf("Foo");
			if (is_mul_of_5) printf("Bar");
		}
		putchar('\n');
	}
}
Не целый байт, а целых восемь байт на хранение флага на современных машинах. Выравнивание, всё такое. Зависит от компилятора, конечно. Но с такой дотошностью нужно было флаги в массив положить, чтобы не выравнивались :-)
Определенно, для этого нужен jquery! Скорее всего даже есть плагин…
Я не программист, но ностальгия по ZX Spectrum не дает покоя:)

10 INPUT N
20 FOR I=1 TO N
30 LET A$=""
40 IF I/3=INT(I/3) THEN A$=A$+«FOO»
50 IF I/5=INT(I/5) THEN A$=A$+«BAR»
60 IF LEN A$ THEN PRINT A$
70 IF NOT LEN A$ THEN PRINT I
80 NEXT I
60 и 70 можно соптимизировать на:

60 IF NOT LEN A$ THEN LET A$=STR$ I
70 PRINT A$

PS да, в 40 и 50 забыл LET :)
А, кстати, как в спектруме печатался символ? Была стандартная функция в биосе, или обязательно было самому прописывать битовые маски в видеопамять?
Емнип, было два режима — символьный (шрифт зашит в ПЗУ) и графический. При печати символа в графическом можно было переопределить знакогенератор (который в ПЗУ). А может я это с MSX путаю. Хотя там точно были полноценные спрайты.
В MSX было действительно два режима (позже появились другие) — в одном была таблица из 256 символов, шрифты (2Кб) лежали в определенном месте видеопамяти), а экран (768 байт кодов+768 байт цветов) — в другом. В «графическом» режиме таблица символов была своя на каждую треть экрана (6 Кб), экран занимал 768 байт на таблицу кодов символов+ещё 6 кб уходили на раскраску символов (2 цвета на строку).
А про Синклер я не знаю. Помню, что в нём была память с битовой маской, но единственный ли это режим, и был ли доступный биос, который бы помог с текстовым режимом — не представляю, никогда с ним не работал.
А-а, я в контексте MSX имел в виду «КУВТ Yamaha MSX-2 128k» (по памяти), где спрайты вроде бы (по теперешним оценкам) поддерживались аппаратно, но на уровне BASIC от EGA ничем работа не отличалась между символьным режимом и графическим — нужно было писать команду SCREEN… И везде по умолчанию знакогенератор был из ПЗУ для команд PRINT, но можно было его динамически переопределять путем прямого доступа в какие-то области памяти.

Ну это так, по воспоминаниям 15-20-летней давности. На моем первом более-менее полноценном компе вообще графического режима не было, а знакогенератор был прошит в отдельном (недоступном ЦПУ в принципе) ПЗУ. Я его тумблерами перепрошивал под свои задачи :)
Я тоже про YAMAXA MSX-2, но у неё было 80 К (64 RAM+16 VRAM), если не ошибаюсь. Поэтому какой-нибудь Screen 5 удавалось сделать только на 2/3 экрана.
Да, спрайты тоже были. Либо 32 спрайта 8*8 (двухцветных), либо сколько-то 16*16 (многоцветных) — но я последними не пользовался.
У нас было 128к на «ученических» (монохромных) и 256 на «учительском» (цветном). Причем их поддержка была на уровне «ОС» с суффиксом MSX, обычный CP/M-80 видел только 64кб ОЗУ, насколько я помню, без всяких банков памяти, переключаемых на видео при необходимости — это на асме или си нужно было делать, Turbo Pascal 3/0 слетал при попытка прямого управления ведопамятью.
В спектруме был только один режим. 256×192 пикселов, «расчерченных» на знакоместа 8×8, каждое из которых можно было раскрасить в два цвета. Причём в памяти всё это укладывалось весьма интересно:
Скрытый текст
строка #0 из 256 пикселов — 32 байта
строка #8 из 256 пикселов — 32 байта
строка #16 из 256 пикселов — 32 байта

строка #56 из 256 пикселов — 32 байта
строка #1 из 256 пикселов — 32 байта
строка #9 из 256 пикселов — 32 байта

строка #57 из 256 пикселов — 32 байта

строка #63 из 256 пикселов — 32 байта
Т.е. верхняя треть экрана укладывалась вначале первыми строками знакомест, потом вторыми, третьими и так до восьмой. Потом так же утрамбовывали середину экрана. Потом нижнюю треть. А потом шли 32×24 байт атрибутов.

Ну ещё был бордюр, на котором как бы нельзя было рисовать, а можно было лишь его весь перекрасить записью в специальный порт. Тем не менее, если писать в порт быстрее, чем происходит развёртка, то что-то показать на нём можно было: например, загрузчик с ленты на бордюр выводил бегущие разноцветные полоски.
То есть «обычного» символьного режима, когда можно занести код символа (например ASCII) куда-то (память, порт) и он автоматом отображался бы, не было? Только или попиксельно рисовать буквы самому, либо вызов стандартной либы, которая будет это делать так же как сам?
Ну не совсем попиксельно, это 8 команд пересылки в духе LDI. И да, можно позвать функцию из ПЗУ. А можно не звать.

Просто текстового режима не было.
Имхо, нюансы это. Можно соотносит пиксель с битом, а можно с несколькими байтами. Смысл в том, что управляем программно (без разницы через ОЗУ или ПЗУ) пикселями или символами. В некоторых ПК (не IBM PC, а по советским нормам «ПЭВМ») того времени была кардинальная разница на аппаратном уровне. Как минимум была одна СБИС (в «чипсете» К*580*), позволяющая независимо от проца транслировать «символьное» ОЗУ в пиксели экрана.
Если синхронизироваться под тайминги конкретного клона спектрума, то народ чего только не делал на бордюре — и ротаторы и бегущие строчки (Rage by X-Trade: www.youtube.com/watch?v=rIncbxgg6Jk), а Alone Coder недавно еще и 2 битплана учудил на бордюре (http://www.pouet.net/prod.php?which=59447).
В ПЗУ спектрума есть процедура печати символа 8x8, ее и использует интерпретатор бейсика.
Для шрифта отличного от 8x8 процедуру надо писать самому.

Ясно. Тогда лучше в строчку вывести, а на экран пусть печатают другие
	ld	bc,305h
	xor	a
_1:
	add	a,1
	daa
	ld	d,a
	djnz	_2
	ld	b,3
	xor	a
	ld	(hl),'F'
	inc	hl
	ld	(hl),'o'
	inc	hl
	ld	(hl),'o'
	inc	hl
_2:
	dec	c
	jnz	_3
	ld	c,5
	xor	a
	ld	(hl),'B'
	inc	hl
	ld	(hl),'a'
	inc	hl
	ld	(hl),'r'
	inc	hl
_3:
	or	a
	jz	_4
	ld	a,d
	rrca	
	rrca	
	rrca	
	rrca	
	and	15
	jz	_5
	add	a,'0'
	ld	(hl),a
	inc 	hl
_5:
	ld	a,d
	and	15
	add	a,'0'
	ld	(hl),a
	inc 	hl
_4:
	ld	(hl),','
	inc	hl
	ld	a,d
	or	a
	jnz	_1
	dec	hl
	ld	(hl),a	
	ret
(подбираю челюсть)

А на PDP-11?
Примерно так:
	MOV	#3,R2
	MOV 	#5,R3
	
	CLR	R0
1$:
	INC	R0
	CLR	R1
	DEC	R2
	BNE	2$
	MOVB	#'F,(R4)+
	MOVB	#'o,(R4)+
	MOVB	#'o,(R4)+
	MOV	#3,R2
	INC	R1
2$:
	DEC	R3
	BNE	3$
	MOVB	#'B,(R4)+
	MOVB	#'a,(R4)+
	MOVB	#'r,(R4)+
	MOV	#5,R3
	INC	R1
3$:
	TST	R1
	BNE	4$
	MOV	R0,-(SP)
	DIV	#12,R0
	TST	R0
	BEQ	5$
	ADD	#60,R0
	MOVB	R0,(R4)+
5$:
	ADD	#60,R1
	MOVB	R1,(R4)+
	MOV	(SP)+,R0
4$:
	MOVB	#',,(R4)+	
	CMP	R0,#144
	BNE	1$
	CLRB 	-1(R4)
	RTS	PC

Но в деталях синтаксиса я уже не уверен.
Эх… а я админ(
#!/bin/bash
 for i in `seq 1 100`; do text=$( ( test `expr $i % 3` -eq 0 && printf "FOO"); ( test `expr $i % 5` -eq 0 && echo BAR) ); test -z $text && echo $i || echo $text; done
> Эх… а я админ(
Так это тоже хорошо =)

Только для таких целей, как мне кажется, awk лучше подойдёт:
awk 'BEGIN {for (i=1;i<=100;i++) { if ((i%3) && (i%5)) printf i; else {if (!(i%3)) printf "Foo"; if (!(i%5)) printf "Bar" } print ""}}'

Ибо не пораждает кучу процессов с последующей проверкой статуса выхода, а соответсвенно работает гораздо быстрее. А так на вкус и цвет, конечно же.
Знаю. Но к моему стыду, магию awk пока не освоил (не буду говорить, что не освою никогда, не правда это, я смогу!). Так что полностью согласен.
Спорно. awk есть практически в любом UNIX-шелле, и как правило, по умолчанию. И он есть даже в BusyBox. Просто затащить perl на embedded железку, у которой всего 4 Mb DataFlash-а вряд ли выйдет.
Вариант на питоне слишком банально, да кому он сдался когда тут для спектрумов и awk варианты выкладывают:
for n in range(1,100):
    if n%3 == 0 and n%5 == 0: print 'foobar'
    elif n%3 == 0: print 'foo'
    elif n%5 == 0: print 'bar'
    else: print n
Вроде фишка оригинального задания, чтобы в коде не было команд типа print 'foobar', нужно оперировать только print 'foo' и print 'bar' не забывая про то, что в одной строке консоли или foo, или bar, или foobar, или число.
Фишка оригинального задания в том, что кто-то не может написать работающее решение. Так быстро определяют стоит ли возиться с кандидатом вообще.
Я бы начал на листочке код MVC CMS писать, потом попросил бы еще листочек для написания модуля перебора чисел.
<?
   require 'controller.php';
   require 'model.php';
   require 'view.php';

??? :)
А модуль перебора чисел — как-то так:
    IGenerator numberGenerator = SimpleNumberGeneratorFactory::createGenerator(SimpleNumberMethod::ERATOSPHENE_SIEVE);
    auto numberList = numberGenerator.generate<long int>(1, 10000);
    for(auto item:numberList)
    {
        std::cout<<item<<std::endl;
    }

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

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

Продуктовым компаниям у нас тяжело, может потому и вконтактов с яндексами у нас нет, а только призовые места по продаже дешевой раб. силы.
Точно так же могу подписаться про Беларусь, у нас тоже один аутсорс и куча прыгунов по конторам — при прочих равных (читайте, одинаково дерьмовых клиентах и проектах), они хотят выбрать наиболее приличные офисные условия и з/п. Которых, собственно, и упрекать не в чем — к большинству компаний слово «компания» слабо применяется, просто горстка рекрутеров. Есть, конечно, и исключения типа епама, но таких единицы — в основном чистый торг дешевой рабочей силой, как вы говорите.
В Украине стараются красиво оформлять, офисы опенспейс, теннисные столы итд, и народу работает сотни или тысячи, т.е. структуры крупные доминируют. Но суть от этого не меняется, у меня немало знакомых в этой сфере, они хвалят офис, ЗП, корпоративы или тренинги но всегда стыдливо отмалчиваются, когда задаешь вопрос о том, нравится ли сама работа — то, что приходится разрабатывать. Единицы готовы об этом говорить с позитивной интонацией.

С одной стороны, продуктовая компания может занинтересовать интересной работой. С другой, кроме требований к ЗП, добавляются еще требования к гламурному офису, спортзалу, ресторану и теннисному столу прямо на работе. Что само по себе неплохо, но усложняет жизнь небольшим игрокам.
Мне кажется, и тут особо упрекнуть не в чем — если работать, грубо говоря, «на дядю», люди всегда будут выбирать просто по условиям работы. Если же заинтересовать людей чем-то другим, скажем долей в перспективном проекте или ну очень интересными задачами — пусть даже и за относительно небольшую ЗП и на квартире — многие талантливые люди могут отказаться от столов и спортзалов.
Ну, выбирая между унылым багфиксом в гламурном офисе и развитием интересного продукта в обычном, далеко не все выберут первое. Более того, те кто выберут, скорее всего, потеряны для сообщества.
Совершенно согласен. Другое дело, что развитие продукта со временем всегда превращается в рутину, и если лично_тебе нет выгоды от продвижения продукта, то со временем начинаешь смотреть в сторону офисов или других стартапов, в которых все только начинается. Инымы словами, даже самый наиинтереснейший продукт всегда превращается в более или менее унылый багфикс, и приходится выбирать при прочих равных.

С другой стороны если у тебя есть доля, пускай и не очень контрольная, тебе будет приносить удовольствие и фиксить баги, и обшаться с клиентами, потому что это твой продукт. Я только это хотел сказать.
Не понимаю вашей точки зрения. Есть продукт, в котором я имею 49% как соучредитель, да ещё «на еду» платят за работу над ним как сотруднику. Но я полностью демотивирован работой над ним, потому что не считаю бизнес-стратегию типа «введем кучу платных фич, за которые нищебродам нужно будет пахать годами» правильной. Мне не нравится фиксить баги и общаться с клиентами, потому что я считаю, что мы пользуемся их пороками, страстями, неконтролируемыми побуждениями и т. п. Тупо, я не считаю стратегию free-to-play моральной, особенно когда она направлена на усложнение игры «халявщикам», а не на направление «не задротов» на «донат». Имхо, возможности доната не должны превышать возможности игры 36 часов в неделю, учитывая возможность быть онлайн 2 раза в сутки ежедневно.
Простите, но я ничего не понял — с чем именно вы не согласны.
С тем, что если выгода есть, то работа над проектом будет приносить удовольствие. Выгода может быть, но работа приносить отвращение, но ради выгоды за нее держишься и от осознавания этого еще больше отвращения.
Исключения типа епама? Как тонко…
Это счастье, что вас в мэйл.ру не взяли. Сам до сих пор помню свой фейл в одной компании на собеседовании, когда меня спросили чему будет равен sizeof (int)… и я ответил 32 бита :) Им приспичило сделать это утром, это было собеседование ни о чем, мой мозг просто спал. А по факту, у нас просто менеджеров в стране нет нормальных, которые способны собеседования проводить. Эффект Даннинга-Крюгера свойственен ведь не только разработчикам. Это я как управленец уже говорю.
Если sizeof() — сишное ключевое слово, то 4 вернее. Но ещё вернее — «в разных местах по-разному».
А ведь еще можно спросить про sizeof(char) ;)
Смешной вопрос, если это про С :) А так — опять в разных местах по-разному, в C# сегодня это 2.
«А мы покупаем или продаём?» ©
Полагаю, что ответ «в зависимости от разрядности платформы» будет правильнее. Когда-то давно это было 2. Потом стало 4. В будущем, вероятно, ещё увеличится.
Данный ответ почему-то не сошелся с тем ответом, что был в голове у задавшего вопрос человека…
Думаю в проблеме неадекватных собеседований виноваты обе стороны, а не одни менеджеры (прежде всего эйчары). Никто не хочет (или не может, например не умеет) торговаться на настоящий момент и внятно обрисовывать ожидаемые перспективы. Все действуют на интуиции. Я вот придерживаюсь стратегии если хоть что-то мне не знакомо в вакансии из требований («знакомо» — не значит хелловорд или бложик написал) предлагать 20к рублей в месяц, имея в виду увеличение зарплаты когда освою — тупо даже не приглашают. Начинаю наглеть и требовать 40-60 (в СПб, а для Москвы 60-80) — приглашают и на собеседования, и на переезды денег предлагают, но мне совесть не позволяет брать деньги за то, что я не умею, если мне конкретно не озвучили «мы верим, что ты этому быстро научишься», не смотря на строчку в резюме «легко обучаюсь».
Я для себя решил, что лучше всего до собеседования просить прислать пример любого кода по выбору (или ссылку на гитхаб), это сразу говорит и об уровне задач, которыми занимался практически, и об уровне их решения. После этого и интервью будет более адекватным, что в конце концов позволит точнее оценить, подходит кандидат, или нет. Ну и испытательный срок никто не отменял, да.
Можно еще на stackoverflow.com я думаю.
Тут суть — посмотреть работающий код, который был наверняка написан под определенные требования и в ограниченные сроки. На stackoverflow условия немного отличаются от типично рабочих.
А если кандидат в ответ попросит тестовое задание — вышлите?
См. ответ выше. Тестовое задание скорее всего не покажет нужного.
«Вышла одна группа людей, и обвинила другую группу людей во лжи. Но вторая группа людей пришла со своими собственными обвинениями. Потом вышел пожилой человек, мы точно не уверены, но кажется это судья, и он сказал что первая группа людей была права, а все остальные обвинения полностью не обоснованы. Но он сам находится в розыске в 30 штатах за то что врал детям и женщинам только для того что бы практиковаться во лжи», каждый раз эта реплика вспоминается когда начинаются ответные посты.
UFO just landed and posted this here
У меня в свое время было, наверное, самое короткое интервью. Работал в тех.саппорте крупной корпорации. Предложили перейти на место SAP программиста. С cobol \ abap никогда дела не имел. Так, php, немного js, c#.
Собеседование:
-Пользуешься системами контроля версий?
-Да, на github несколько проектов есть.
-Введи-ка свой ник.

Ввожу в сёрч ник, программер смотрит мои проекты и коммиты минут 10. Сижу, весь от стыда красный. Там код, который я чуть ли не в школе писал. Все, больше вопросов не было, на следующий день приняли :]
У меня схожее было, только не на github (его в то время не было), а учебные проекты на флешке. Естественно все делал сам, не совсем без быдлокодерства конечно, но флешка с этими проектами до сих пор со мной :)
UFO just landed and posted this here
Не всегда повышение предлагаемой зарплаты помогает найти сотрудника. Иногда может даже и помешать. Часто бывает, что на большую зарплату идут люди с завышенным самомнением и жадные до денег. Отсюда, кстати, и неутешительные результаты собеседований. А слишком высокая(2*среднюю по рынку и больше) зарплата может даже отпугнуть адекватных спецов. Надо объяснять, почему?
UFO just landed and posted this here
Значит надо объяснять. Дело в том, что специалист — это чаще всего человек, который интересуется тем, чем занимается, даже в случае, если ему за это не платят дополнительно, и его высокий заработок интересует всё-таки во вторую очередь, а в первую — профессиональное развитие. Если он конечно, достаточно дальновиден. Кроме того, он всегда знает, что именно он пока не знает, и чаще всего недооценивает свои возможности. Для него слишком высокая зарплата = много геморроя, зачастую неоправданного (в т.ч. и связанного с собеседованиями) + риск подводных камней, о которых никто не говорит до момента приёма на работу.
UFO just landed and posted this here
>специалист != дауншифтер
Согласен, я не пытаюсь объяснить поведение ВСЕХ кандидатов. Я просто пытался сказать, что высокая зарплата в вакансии — не панацея, а передозом вообще можно возбудить подозрения в чём угодно, вплоть до мошенничества(а вы вообще эти деньги платить-то собираетесь?).
UFO just landed and posted this here
Вполне могут быть рассуждения типа: я работаю и получаю N, повышать отказываются, в принципе и так средняя по рынку эта N и есть для моей квалификации. А тут 2N предлагают, а значит ожидают куда большей квалификации, настоящего гуру. Среднему специалисту просто невдомек, что менеджеры той компании не рассчитывают на гуру, а хотят условно говоря переманить его, потому что все средние работают и уже получают N, а на вакнсии с N отзываются тольео те, кого ещё учить и учить.
Согласен. Смотришь на вакансии, везде 70, 80, 100, 110 рублей. И думаешь — «моя работа примерно 100 рублей стоит, буду искать за эти деньги». А рядом вакансия за 150 рублей, её пролистываешь с мыслями «не, это, наверное не мой уровень, им там какой-то монстр всезнающий нужен»
UFO just landed and posted this here
Вот быстрый способ получения списка простых чисел даже на слабых компьютерах от одного до миллиона:
wget http://kry127.ucoz.ru/txt/from_1_to_1000000.txt
Я искал работу. И приходил на собеседование в мейл.ру, например. Да, меня в итоге не взяли и, наверное, так же смеялись между собой

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

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

Отдельно стоит выделить собеседования проводимые HR менеджерами по телефону, когда они по листику зачитывают технические вопросы кандидатам, в которых они сами не разбираются, сравнивают ответы с записанными же у них на листике, и, на основании этого принимают решение о том, достоин ли человек проходить следующее собеседование с техническим специалистом или нет.
На самом деле, всё это ясно и понятно. Лично я себя никогда не причислял ни к талантливым ни даже к хорошим разработчикам. Так, середняк. Но даже мне ясно, что на всю эту канитель следует смотреть позитивно. Я себя часто спрашивал после отказов в приёме на работу к таким работодателям: «А оно мне надо работать с теми, кто на собеседовании просит пересказать API, который можно посмотреть там-то и там-то для таких-то систем?» Коллеги, такой подход к интервью — показатель одной из двух вещей: 1) возможно, компания ищет космически крутого разработчика и мы таки не дотягиваем до их требований/ожиданий (кого-то же всё-таки нанимают); 2) контора состоит из неадекватов (как минимум тех, кто принимает, а они — лицо компании). Вы действительно хотите работать с теми, кто из второй категории? Я — пас, ребят.

P.S. В жизни был всего один случай, когда на собеседовании было прям неприятно. В основном, как мне кажется, интервьюеры скромно думают про себя мысли вида: «ну, не знает этого/не подходящий кандидат/спрошу ещё вопрос и я свободен!» Но однажды я встретил на техническом интервью персонажа, которого мои_некомпетентные_ответы™ раздражали, а потом и вовсе взбесили. В результате, этот гуру многопоточного программирования встал и вышел, кинув: «ничего не знаете, а ожидания...» Коллега его извинился потом (собеседовали меня двое).
Я прекрасно знаю, что у меня есть определённые белые пятна в знаниях. Прежде всего это отпечаток проектов, с которыми я работал и моя не очень хорошая память. Но я убеждён, что как бы неграмотен ни был кандидат человек, надо оставаться быть людьми и быть хотя бы вежливыми. Да, дело было было в конторе, чьё название начинается на Лю.
Ну раз второй коллега извинился, значит это было неприятное исключение, а не правило. Догадываюсь о какой компании идет речь, но там, насколько я знаю, практикуется совершенно другой подход к собеседованиям.
Я, собственно, и не утверждал, что это для компании правило. Только лишь сказал, что случалось и такое. А в той компании работали как минимум два моих знакомых. В целом, не жаловались. Так что тут просто кому как повезёт. В конце концов, даже у нервного парнишки мог быть просто плохой день или проблемы дома. Все мы люди, так что я на него и не злился долго.
> заставил меня компилять ядро для линукса из исходников. И потом полчаса унижал по каждой неточности, которую я сделал в настройках make menuconfig. Типа того, что не включил RTC без которого SMP не будет эффективно работать, и так далее с пояснениями, как надо.

Я бы на вашем месте сказал спасибо и заплатил за каждый потраченный на ваше обучение час его времени.
UFO just landed and posted this here
А в обычные дни — каждый отвечает сам на свои, что ли??
тогда как другие сталкиваются с этим настолько регулярно, что уже ждут повторных поступлений новой информации.

О! Так вот как называется эффект, когда я листаю комменты и думаю «сейчас будет коммент Мицгола».
Я вам более того скажу, про попадание на работу.
Одна моя знакомая однажды прицельно пробивалась на некую конкретную вакансию, в конкретную компанию Вакансия висела сравнительно долго (пару месяцев, и она засылала на нее резюме трижды (!)
Только в третий раз (за полтора месяца отсылок) ей ответили, она сходила, ее взяли сходу, и потом она несколько лет была одним из самых ценных сотрудников компании, на нее объективно нарадоваться не могли.
Однажды она все же спросила, почему ее пригласили только с третьего раза. "- С третьего? Тебя?"- были поражены в HR-отделе, «Быть того не может!»

Два раза резюме просто сразу летело в корзину.

Отсюда мораль: Не считайте, что прием на работу, собеседование или что там еще — «точная наука». Это типичная лотерея. Десять раз не повезло, а потом — раз, и повезло. Из этого не следует, что вы плохо подходили в 10 предшествующих успешному случаю. Может да, а может — у собеседующего (или у разбирающего резюме) вышел плохой день, у него болит голова, он поссорился утром с девушкой (парнем), он отвлекся, или вообще не в духе, он сегодня прочитал статью на Хабре, про то, какие идиоты все эти нынешние айтишники ;). Десятки причин.
И совсем не потому что вы в Компании А (М) показали себя лучше/хуже, чем в Компании Б (Ц).
Если бы вам довелось использовать Save/Load, и вы бы могли провести ваше собеседование на том же месте еще несколько раз, я уверен, вы бы в этом убедились воочию :)
Да, после некоторых собеседований остается отчетливое ощущение, что интервьюер поссорился со своим парнем.
UFO just landed and posted this here
Хм. Я практикую (неудачно) абсолютно противоположную позицию. Именно затачиваю резюме под требования конкретных вакансий, типа «опыт разработки на RoR — 3 дня», если опыт программирования вообще в требованиях не упоминался, невзирая на что с в 80-х программирую, более менее серьезно на пяти языках (если считать Basic и VisualBasic, а так же С и VC++ за отдельные, а PHP 3 и 5.4 за один, а SQL за язык вообще не считать). А профессиональные рекрутеры советует мне не упоминать об опыте фриланса и контрактов, намекая на то, что пропуски в стаже мне лучше объяснять причинами типа «открыл свой бизнес с Ит связанный слабо, но „кровавая гэбня“ бизнес отняла» или «развод, и как истинный рыцарь весь бизнес жене отдал».
UFO just landed and posted this here
Я к тому, что заточка действует прямо противоположно ожиданиям. Вижу требования «опыт разработки на RoR — будет плюсом», я пишу «3 дня опыта на RoR», «забывая» про 10+ лет разработки на PHP (плюс эпизодическая разработка на то C++, то VB, то Python, с освоением по верхам то Qt/PyQt, то чего-то-там из стэка MS), не считая предыдущих 10+ лет на асме, C, Pascal, dBase, 1С, в общем всё что считал по «слухам» оптимальным для той или иной задачи осваивал. То есть в резюме с одной стороны правда — 3 дня на RoR, а с другой то, что 20+ лет программированием занимаюсь как-то опущено вообще, и что перейти на другую платформу (без вникания в нюансы *-way и освоения либ и фреймворков) буквально несколько дней занимает.

В России такие услуги встречал анонсированными, даже раза три денег платил (10-30$), но реальной пользы не видел, скорее даже наоборот. Если самостоятельно на собеседование приглашали где-то раз на десяток резюме, то с ними хуже было. А чтобы в сотни долларов ценник подобных услуг измерялся как-то не встречал.
UFO just landed and posted this here
Спасибо. Пускай некоторые слова только из контекста понял, и не со всем согласен (очередной «императивный» шаблонизатор я за пару дней освою, вплоть до разработки расширений, и реально фриланс губит навыки работы в команде и вообще общения — ядаже с девушками разучился знакомиться за 8 лет, сидя по 120+часов в четырех стенах), но в следующий раз перечитаю.
Жена сильнее губит навыки общения с девушками, чем домашняя работа! :)
Ну, у меня «случайно» совпали развод и увольнение по собственному.
зНачит, и правда есть проблемы с коммуникативными навыками и игре в команде.
> А профессиональные рекрутеры советует мне не упоминать об опыте фриланса и контрактов, намекая на то, что пропуски в стаже мне лучше объяснять причинами типа «открыл свой бизнес с Ит связанный слабо, но „кровавая гэбня“ бизнес отняла» или «развод, и как истинный рыцарь весь бизнес жене отдал».
По мне, так очень похоже на bullshit. Чем они это объясняют?
Негласными требованиями компаний, которые им заказы на поиск работников дают.
По-видимому, вокруг слова «фрилансер» у каких-то работодателей уже сложился негативный образ необязательного и неумелого малолетнего придурка :/
Я скорей не про фриланс как таковой, а про оправдания. Оправдывать перерывы в стаже «бизнесом, не связанным с IT» — очень сомнительная рекомендация. Возможно не стоит упоминать фриланс в резюме(учитывая вышесказанное), но на собеседовании временные проекты можно и нужно упоминать(если не стыдно за них, конечно). У меня вот в трудовой перерыв в 1,5 года — эти полтора года я работал на одном из федеральных телеканалов за штатом. И не стыжусь этого абсолютно.
Ну, ещё может быть вариант отсутствия навыков командной работы. Привычка к отсутствию критики качества кода. Плюс подозреваю, что компании всё же имели негативный опыт работы с фрилансерами.
Здесь должен быть анекдот про двух кадровиков и резюме неудачников.
UFO just landed and posted this here
Я так почти прошел в AMD. 3 собеседования, везде прошел, за исключением последнего: чел понял что у меня опыта нету, так бы писал сейчас драйвера на видеокарты :) Секрет в 2-х недельной подготовке: почти полностью прочитал хорошую книгу по DDK, да не всю :) на том и попался :)
UFO just landed and posted this here
Ну на одной из предыдущих работ нам всегда обещали новичков т.к. не хватало рабочей силы..обещая повышение и их в качестве новых подчиненных. Нанимали крутого HR на пол года. За пол года так никого и не наняли, больше полтыщи наверно собеседований провели. И доводилось слышать от ведущих что-то типа такого «да он не знает даже теорему Коши. Вот смешно да» ( для примера утрирую, но что-то типа этого ), хотя сами до собеседования ничего об этом не знали. Было даже такое, что перед собеседованием спрашивали: «Леха, а какая сложность пирамидальной сортировки? », записывали ответ и шли собеседовать очередного «неудачника»… потом приходили и смеялись между собой какого же они тупицу собеседовали сегодня. Бывает, что люди тупо повышают свою самооценку на этих людях.
UFO just landed and posted this here
Мне однажды примерно так в ЦФТ на собеседовании сказали, что типа лох полный, если не знаешь методов сравнительно эффективного решения задачи коммивояжёра. Самое забавное, что вакансия была на должность внедренца-сапортера. С тех пор не раз радовался, что в ЦФТ не работаю.
Несколько лет назад приходил программист, устраиваться на работу в нашу контору. Собеседование проводили я и мой коллега.
Как-то сама собой получилась сценка с добрым и злым полицейским. У меня вопросы были из серии «что делал?», «чем занимался?», «если бы все на свете было бесплатно, чем бы занялся?» — одним словом, лирика и романтика. А вот коллега хорошо подготовился. Он задал несколько задач, причем все непростые, с подковыркой, чувака посадили за стол с ручкой и бумажкой — решай. Тот выдал какие-то версии решений, не все оптимальные и не все правильные. Мой коллега без объяснений, не показывая правильные решения, отшил его — «вы нам не подходите».
Вечером того же дня, я получаю письмо от этого претендента примерно следующего содержания: «Я знаю, что я вам не подхожу, но задачки были интересными, и вот, я добрался до интернета, немного поискал-почитал, и вот какие решения я нашел...» Далее следовали решения всех задач самыми оптимальными способами. Это был именно тот результат, который требовался, и по-моему, ничего страшного, что он для ея воспользовался таким иструментом как итернет.
В итоге, я его взял на работу, и ни разу не пожалел об этом, хотя мой коллега, который его завалил, был очень против и с пеной у рта доказывал, что в интернете решение каждый дурак найти может.
Но это всего один частный случай из миллиона, наверное мне повезло с конкретным человеком. Тот самый коллега, например, вскоре уволился — характерами не сошлись, хоть и специалист он хороший.
UFO just landed and posted this here
Просто ваш коллега — м***дак!
Ничего страшного, такие люди встречаются.
я думаю что если этому «плохому» полицейскому самому устроить такое же собеседование, он бы сам завалился.
Извиняюсь, за пять минут только Паскаль и вспомнил
Program FizzBuzz; Uses crt; var i integer begin i := 1; while (i <= 100) do begin if (i mod 3 = 0) then write("FIZZ"); if (i mod 5 = 0) then write("BUZZ"); if ((i mod 3 != 0) and (i mod 5 != 0)) then write(i); writeln(); inc(i); end; readln(); end.
UFO just landed and posted this here
UFO just landed and posted this here
Пусть он хоть на пяльцах здорово вышивает — ценность его для данной конкретной конторы от этого выше не будет.


На пяльцах, конечно, ценность не увеличит, но, например, требуются вам от сотрудника знания Mongo, есть два кандидата — один вообще с NoSQL не сталкивался, а второй работал с, например, Couch. По-моему, очевидно, что ценность второго для компании выше — его меньше придется обучать. Но если вы задали вопрос «Mongo знаете?» и получив отрицательный ответ не задали «А вообще с какими-нибудь NoSQL работали?», то вы об этой ценности не узнаете.
UFO just landed and posted this here
Mongo довольно распиаренное название, по этому о нем специалист мог слышать и смог бы расширить вопрос, но давайте будем честными сами с собой, все ли технологии, библиотеки и ПО используемые в наших проектах на столько широко известны, чтобы в условиях ограниченного времени и ограниченных источников информации можно было сходу найти им альтернативы и вычленить те из них, которые сам использовал?
UFO just landed and posted this here
Собеседование может быть сильнейшим стрессом для человека, буквально в ступор вводящим.
UFO just landed and posted this here
Я про работника. А работодатель стресс не распознает и наводящие вопросы задавать не будет.
UFO just landed and posted this here
Некоторые работодатели вводят в стресс начиная задавать вопросы не о профессиональных аспектах.

Если работник оказался бы лучшим выбор, учти работодатель стресс, то это проблема и работодателя.
Достаточно, чтобы работодатель был заранее настроен на то, что соискатель пытается его обмануть, а соискатель — думать, что его пытаются завалить, и вместо того, чтобы просто отвечать на вопросы, пытался угадать, какой ответ хочет услышать работодатель. Тогда они расстанутся, оба укрепившись в своём мнении, даже если соискатель вполне подходил на эту вакансию.
UFO just landed and posted this here
В таком случае, у того, кто действительно годится на эту вакансию, шансов практически нет. И мне жаль эту планету :(
UFO just landed and posted this here
Нет, я считаю работодателей умными, опытными людьми, в совершенстве овладевшими игрой «раскрой обман соискателя». Когда к ним приходят соискатели, играющие в ту же игру, хоть и на другой стороне, они оказываются на одном поле и играют по одинаковым правилам. Но когда придёт человек, которому придумывать ничего не надо, то он оказывается в проигрышной ситуации: любая его заявка автоматически уменьшается на пару пунктов (ведь считается, что он «осознанно преувеличивает свою квалификацию»), и он быстро попадает в категорию «ничего не знает». Потому что игра идёт не по его правилам.
UFO just landed and posted this here
Но у других-то ответы на пару пунктов будут завышены, с точки зрения математики разницы нет — никому не занижают или всем занижают.
UFO just landed and posted this here
Какие баллы? Вы о чём? Использовалось слово «пункты». Если угодно, уровни знания и умения. Соискатель заявляет: «я умею то-то, то-то и то-то». Причём по направлениям, которые указывались в описании вакансии и могут пригодиться на работе. Но проверять, всё ли сказанное — правда, может быть слишком долго. И как вы поступите? Поверите ему? Проверите выборочно что-нибудь из перечисленного, и примете, что по остальным направлениям он завысил свой уровень так же, как по проверенным? Или решите, что он знает правила игры, и все заявки надо слегка понизить?
UFO just landed and posted this here
Грубо говоря, вам нужно 10 технологий, чтобы работник знал хотя бы на твердую 4 (по оценкам нормального вуза), но время собеседования позволяет проверить только 5. Все заявлены на 4. Вы 5 проверили, а там еле на 3 натянуть можно. Какой вывод сделаете об остальных пяти технологиях?
Неудачный пример — первая же «тройка» показывает, что кандидат не подходит (по формальным критериям). Правильнее такой: один кандидат заявил по всем технологиям «пятёрки», другой — «четвёрки». Проверка показала, что у первого по 4 из 5 проверенных технологий четвёрки с минусом, у второго — твёрдые четвёрки (пятую оба знают на «отлично»). Кого из них выбрать?
Другое дело, что было сказано «Буду вопросы задавать только об интересном для меня» — а не о том, что важно для работы… Но будем считать, что это одно и то же.
UFO just landed and posted this here
Более того, это рекомендуют делать рекрутеры и, бывает, даже сами работодатели.
Несколько примеров:
1. У Марка Твена есть замечательная книга «Старые времена на Миссисипи».
Там описывается случай, как один капитан нанял себе на корабль достаточно опытного лоцмана за половинную ставку, пользуясь тем, что тот находился на этапе хронического безденежья. И при этом имел наглость рассказать окружающим за сколько он его нанял, чем подорвал авторитет нанятого. Лоцман узнал об этом, но деньги всем нужны и пароход поплыл (вверх по течению). В процессе капитан замечает что лоцман держит корабль не у берега (где конечно опасно, но течение слабее, в результате скорость выше), а ближе к центру реки и их обгоняют всякие шаланды. Капитан, понятное дело, обеспокоился — не утопит ли с обиды. На что лоцман радостно ответил: «не извольте беспокоится. Я знаю ровно столько сколько положено знать лоцману за 150 долларов». Капитан намек понял.
Вывод: Если мне нужны деньги — я пойду к вам работать. Но работать буду «ровно на 150 долларов».
2. Есть дочерта соискателей, которые считают, что на работе им будут платить за весь набор навыков, и дочерта работодателей, которые считают что человека с нестандартным набором навыков найти просто и платить только за выбранное.
Давайте признаем, что Программист-бульдозерист (видел пару уникумов), гибридный Windows-Linux специалист, повар-каменщик, танкист-раллийщик с отличными навыками по обоим дисциплинам (не ниже Хорошо) — животное редкое. Как минимум потому, что рано или поздно человек выберет основную специализацию и вторая(третья, четвертая) начнет отмирать. И если Вы, уважаемый работодатель, делаете ставку на гибридных специалистов высокого класса — готовьтесь раскошелится. Эти люди понимают свою незаменимость. Их мало. И нужны они в двух случаях: в дальних экспедициях где каждый человек на счету, или на ранних стартах где чистых спецов надо пять штук, а работы на каждого по отдельности и на час в день с трудом наскребешь. Забыл про третий случай: HR — idiots.
И в завершение забавный случай: имею некий опыт (4 года) работы тестером/ немножко даже покомандовал — непонравилось. Году в 2009-м решил переквалифицироваться в админы. Успешно поадминил сеточку на 60 машин и решил ползти выше. На собеседовании произошел интересный диалог. Рекрутер меня поспрашивала и моем житье бытье, о работе. Рассказывал особенности тестирования веб-проектов, клиент-серверного ПО, прошивок и тут она меня спрашивает: «Что Вы можете рассказать про Quality of Service». Вы думаете я вспомнил про QoS? Щаззз… Я пошел соловьем разливаться по полям Quality Assurance и в частности комплексу орг мер по обеспечению этого самого Quality of Service, вообще и в веб-проектах в частности. Рекрутер погрустнела и больше мы с ней не виделись.
Так что даже в смежных областях гибридная специализация может сыграть против Вас.
А теперь вопрос для самотестирования:
Как вы расшифруете следующие аббревиатуры: WWN, NFS, VPN, VDI, SDG, NDA?
И еще теперь храню патрон для идентификации цискарей: Расскажите, что вы знаете про транкинг? :) (Намеренно сформулировано грамматически неверно, чтобы тот кто не знает, что у Циски называет транком — начал рассказывать про агрегацию каналов).
при слове транкинг у меня первая мысль — режим порта для пропускания тегированного трафика :)

Диагноз ясен. К хуавеям и джуниперам не подпускать без инструктажа :)
Рефлекс sh -> enter — у цискарей сильно развит. Только вот у хуавея, например, вместо show — нарисуется shutdown. В общем к дальней дороге это :)
А насчет транкинга… Всетаки правильно (по стандартам) — агрегация. А CISCO за их издевательства над терминологией — уши надрать нужно.
Цитата:
Link aggregation is a computer networking term to describe various methods of combining (aggregating) multiple network connections in parallel to increase throughput beyond what a single connection could sustain, and to provide redundancy in case one of the links fails. Further umbrella terms used to describe the method include port trunking,[1]link bundling,[2] Ethernet/network/NIC bonding,[1] or NIC teaming. These umbrella terms not only encompass vendor-independent standards such as Link Aggregation Control Protocol (LACP) for Ethernet defined in IEEE 802.1ax or the previous IEEE 802.3ad, but also various proprietary solutions.
Кстати про Etherchannel — ничего не написано :)
Беда, я и с джуниперами работаю:)
Но только я никогда не делаю sh->enter, делаю sh->tab, в джунипере и циске это работает на ура =)
про различия в терминологии — тут не поспоришь.
Устраивался на работу в три крупные компании
1) Одна из крупнейших западных компаний, техсппортом. На тесте от HR меня оставили одного в кабинете с листком вопросов и отошли (извинились и отошли). Я реально не помнил половину тех вещей которые были в тесте. Был телефон с инетом (GPRS в роуминге, на старенькой нокии) списал те вопросы, на которые забыл\боялся перепутать ответ. То что не знал совсем — оставил без ответа. Потом было еще два собеседования, одно из них с IT директором. Отработал там 2 года, ушел сам. Не смотря на то что списал — ни разу не было проблем с выполнение обязанностей.
2) Одна наша отечественная нефтекомпания. Также списал на собеседовании, прошел, но отказался сам.
3) Тоже крупная, международная компания, тоже в техподдержку. Собеседование было сразу с руководителем техподдержки, который по списку задавал вопросы, но сразу предупредил что бы я говорил что знаю по вопросу, и не так страшно что я чего то не знаю. В середине собеседования его позвали на какую то конференцию, он отлучился на 10 минут. Телефон — интернет, пару вопросов я уточнил в своей голове. Когда он пришел, я ответил на оставшиеся вопросы, правда оговорившись что в них я плаваю. В итоге меня взяли и как и в пункте 1, не было проблем с эффективностью моей работы. Более того, как сказали коллеги, я смог очень быстро влиться в работу и начать эффективно работать самостоятельно.

Для себя я вынес из этого несколько полезных моментов. Тест — не покажет эффективного сотрудника. В 1 и 3 пункте я общался с руководителем, который смотрел как я отвечаю на вопросы, задавал мне вопросы про мой опыт, про то чем я занимался. Если бы я не списывал на тестах — в пункте 1 я мог бы пролететь. Человек на это место хватало.
Неподходящий ли я сотрудник, раз списал на тестах? Нет, вполне нормальный. Не выдающийся, не плохой, просто сотрудник который решает задачу доступными способами :)
Я в одном таком тесте раздельно пометил ответы, которые знал заранее, и ответы, которые нагуглил.
Не взяли — прямолинейность, видать, программисту лишняя :D
Потому что человек от отрасли, вероятнее всего поймет, что всего знать нельзя и способность найти информацию — важно. Человек из подбора персонала подумает «ой в интернете я и сама могу посмотреть».
Про то, что можно просто выбросить из перебора четные числа вспомнишь только вечером.
Долго думал, как можно решето Эратосфена ускорить вдвое, выбросив чётные числа. Потом понял, что имелось в виду что-то другое. Что за алгоритм
в три строки перебором
имелся в виду? Я просто проще Эратосфена ничего и придумать не могу, наверное, потому что его знаю.
>>Долго думал, как можно решето Эратосфена ускорить вдвое, выбросив чётные числа. Потом понял, что имелось в виду что-то другое. Что за алгоритм
Вместо

For($i=1; $i<=1000000; $i++){}

написать
For($i=1; $i<1000000; $i = $i+2){}

В 2 раза правда это не увеличит скорость
Это для алгоритма как в комментарии ниже — с перебором всех делителей для каждого числа?
Да, все именно так.
Интервью было на админа, не на программиста. Вопрос «напишите скрипт ...» был один из многих и единственный на программирование чисто для проверки насколько кандидат шарит в автоматизации своей работы.
Как-нибудь так:
  for(int i=2;i<=N;i++){
      for(int j=2;j*j<=i;j++){
          if(i%j==0) goto _1;
      }
      printf("%d\n",i);
_1: ;
  }

Правда, не 3, а 6 строк, зато без массива.
Ускоряется вдвое, если сначала напечатать 2, а потом оба цикла пустить по нечётным числам. Если сохранять найденные простые числа до sqrt(N) в массиве, то будет ещё выигрыш, но не очень большой. А дальше — только решето, в котором нет делений.

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

Маттео Виллани, 700 лет назад
Sign up to leave a comment.

Articles