У вас много денег? Перестаньте быть снобами

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

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

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

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

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


    Но знаете что? Через год я прошел собеседование на примерно похожую должность в Cisco Systems. На английском. В три этапа. Не в Российский офис. Ну и с зарплатой, да.
    И Cisco Systems меня импортировало в Европейский офис. Глупо, наверное, упрекать их в том, что плохо понимают, кого берут на работу и вообще везут всех подряд. Просто на их интервью все пошло глаже и лучше. Так вышло. Врядли мой уровень так кардинально вырос за год.

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

    P.S. А вот еще забавный случай, ну это из совсем молодости. Лет 6 назад я ходил на собеседование, где свитератый админ согнал целый отдел смотреть, как он будет разделывать меня вопросами и заставил меня компилять ядро для линукса из исходников. И потом полчаса унижал по каждой неточности, которую я сделал в настройках make menuconfig. Типа того, что не включил RTC без которого SMP не будет эффективно работать, и так далее с пояснениями, как надо. Перед пятью или шестью я даже не понял кем — приличные люди в рубашках и галстуках. Они просто молча сидели и смотрели на него как на бога. А он сидел весь окруженный серверами, собранными из обычных компьютеров на самодельных полочках, безусловно с линуксом на них и вещал. Интервью было на его место на должность админа в маленькую редакцию журнала типа того, который кидают в ящики с рекламой. В офис из 20-ти человек подерживать почтовый сервер и выход в интернет. Больше у них и не было ничего.
    Метки:
    Поделиться публикацией
    Похожие публикации
    Реклама помогает поддерживать и развивать наши сервисы

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

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

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

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

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

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

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

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

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

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

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

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

                                Fizz buzz же! Игра у них такая есть, детская, от нее тест и произошел.
                                • +1
                                  А, ну может. Не суть.
                                • –9
                                  И что вы скажете по этому коду?
                                  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).
                                  • –5
                                    Плохо. Не оптимально. Можно обойтись выводом «Foo» и «Bar».
                                    • –3
                                      Можно, но это будет уже не наглядно и не функционально. Это было на «на любом языке» — правильно сказать «на любом последовательном языке».
                                      На функциональных это уже не так. Собственно, я написал близко к прологу, совсем на прологе это будет еще хуже выглядеть.

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

                                      Впрочем, это не суть важно. Видно, что задача решена, и, похоже, правильно. Можно продолжать собеседование.
                                      • +1
                                        а вы пытались каким языком компилировать? :)
                                        дописываем вверху
                                        -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, как было по условию.
                                        я бы сделал вывод — «автоматизм» и «невнимательность к исходной задаче».
                                        • 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
                                      • 0
                                        Черт парсер съел половину :)

                                        pastebin.com/KkwHAjeu
                                        • +1
                                          Ну вот зачем на пастебин-то. Скопирую сюда:
                                          [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)].
                                          • 0
                                            а можно ли родить без rem 15, именно из двух частей — rem 3 и rem5 только?
                                            всё что я могу сообразить рожает просто отвратнейший код.
                                        • 0
                                          Или вы понимаете под «правильным» только такое:
                                          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");
                                          }
                                          
                                          • –9
                                            for(i=0;i<n;i++)
                                                document.write( !(i%3)?"FOO":"" + !(i%5)?"BAR":"" );
                                            


                                            А что это за язык, на котором вы первый вариант написали?
                                            • +2
                                              1) не выводит числа, которые не делятся ни на 3 ни на 5
                                              2) FOOBAR не получается ни разу
                                              3) работает на диапазоне [1;n] а не [0;n-1]
                                              • –3
                                                Я не дочитал условие, тогда так:

                                                for(i=1;i<=n;i++)
                                                    document.write(  !(i%3)?"FOO":"" + !(i%5)?"BAR":"" );
                                                    if(  (i%3)&&(i%5) )
                                                        document.write(  i );
                                                

                                                Почему не получится FOOBAR не понял.
                                                • +2
                                                  Дважды проверяешь — Fuuuuuuuuu!
                                                  • +1
                                                    как вариант
                                                    for(i=1;i<=n;i++)  document.write(( !(i%15)?'FOOBAR':!(i%3)?'FOO':!(i%5)?'BAR':i) +'<br>');
                                                    • +3
                                                      А вы помните про того маньяка, который будет поддерживать код после вас? Помните, что он знает, где вы живёте?
                                                      • 0
                                                        Вы всё равно не сможете угадать уровень, на котором этот маньяк умеет читать код. Возможно, что фрагменты длиннее двух строчек он просто не воспринимает, а необходимость искать код среди коментариев немедленно приводит к обострениям?
                                            • –11
                                              Можете закидать меня помидорами, но я хоть убей не вспомнил бы на собеседовании как получить остаток от деления ни на одном из яп, просто потому, что использовал редко и давно, это де факто делает меня плохим программистом?
                                              • 0
                                                нет, речь идёт о том, как правильно записать условия, чтобы писать только FOO или BAR или число, при этом получалось вывести одновременно и FOO и BAR, но не получалос вывести FOO/BAR плюс число.
                                                • 0
                                                  Не совсем понял, ваше объяснение, это решение является верным?

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

                                                      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 "";
                                                      }
                                                      • +1
                                                        for ($i = 1; $i <= 100; $i++) {
                                                            ... bleargh bleargh bleargh ...
                                                        }
                                                        
                                                  • +1
                                                    тут я так понимаю главное суть, хотя остаток от деления во всех известных мне языках — %. но даже если не помните есть и другие способы проверить делится ли число на пять или на три
                                                    • 0
                                                      Где-то %, где-то div или `div`, где-то цикл с sub + bge/jge…
                                                      • 0
                                                        div? A не mod? Или где-то и правда div даёт остаток от деления?
                                                        • 0
                                                          Вы правы, в случае `div` — ошибка, там `mod`.

                                                          А насчет второго — в stdlib.h/cstdlib
                                                          typedef struct {
                                                            int quot;
                                                            int rem;
                                                          } div_t;
                                                          
                                                          // ...
                                                          
                                                          div_t div(int numerator, int denominator);
                                                          
                                                          • +1
                                                            Или где-то и правда div даёт остаток от деления?
                                                            В ряде мест div даёт и частное, и остаток.
                                                            В качестве примеров с ходу выгуглились C stdlib, x86 и MIPS.
                                                      • +2
                                                        <sarcasm>(($i/5)==(int)($i/5))</sarcasm>
                                                      • +2
                                                        Про это здесь даже статья была.
                                                        • 0
                                                          Точно. Я её и читал. Потом решил проверить ради прикола, и был шокирован.
                                                        • –7
                                                          Не совсем понял, а в чем сложность этой задачи, она же вроде элементарна?
                                                          ^for[i](1;100){
                                                              ^if(! ($i % 15)){
                                                                foobar	
                                                              }{
                                                                ^if(! ($i % 5)){
                                                                  bar
                                                                }{
                                                                  ^if(! ($i % 3)){
                                                                    foo
                                                                  }{
                                                                    $i
                                                                  }
                                                                }
                                                              }
                                                          }[, ]


                                                          кстати для эстетов проверку на 5 можно делать проверяя последняя цифра 0 или 5, а на три — сложив цифры числа )))
                                                          и еще удивляет почему «на пять и на три» буквально реализуют, а не проверяют на деление на 15
                                                          • +1
                                                            Как раз деление на 15 можно не проверять, лишний шаг.
                                                            • 0
                                                              Ну я имел ввиду там где пишут if (($i%3==0) && ($i%5==0)) и аналогично, можно проверять на деление на 15. Так то да, можно и не проверять. Кстати хотелось бы знать за что минусы, вариант же рабочий
                                                              • 0
                                                                Деление — операция не шибко быстрая, особенно если используемый процессор не имеет блока аппаратного делителя. То бишь получается что сначала поделили на 15, посмотрели остаток, если не угадали, то поделили на 5, снова посмотрели остаток, а если опять не угадали, то делим ещё и на 3. В итоге до трёх делений на итерацию, что, как бы, многовато будет.
                                                                • +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");
                                                                      }
                                                                  }
                                                                  
                                                                  • 0
                                                                    Весьма годно =)

                                                                    Ну разве что в качестве придирки:
                                                                    1) r3 и r5 никогда не будут больше 3 и 5 соотв., так зачем под них отдавать целых 2+ байт (в зависимости от компилятора). Аналогично с int flag
                                                                    2) r3, r5, i, flag не могут быть отрицательными по определению, так зачем они signed?
                                                                    3) читабельность %)
                                                                    • 0
                                                                      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
                                                                      • 0
                                                                        1) А у некоторых МК нет стека как такового. Например у некоторых МК от Microchip есть стек на 32 адреса, в котором хранятся только адреса возврата из функции и больше ничего там хранится не может.
                                                                        2) Так там же нет сравнения типа «больше-меньше». Используется сравнение типа ==. То бишь тут проще вычесть одно из другового и смотреть выставился ли флаг Z или нет. Так что эффективность сравнения, как мне кажется, немного притянута за уши.
                                                                        3) Ну запихивать их в один байт, это уже перебор =) А что касается читабельности, то если переписать числа в hex-е, то станет горяздо нагляднее что делается с nibble'ами %)

                                                                        • 0
                                                                          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');
                                                                            }
                                                                          

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

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


                                                                    Так будет оптимальнее же? На пять тоже делить не обязательно, наверняка i.right(1) == 5 || i.right(1) == 0 будет работать быстрее. Но вопрос в том требовалось ли задачу решить каким то определенным образом или это проверка на логику?
                                                                    • 0
                                                                      Вообще говоря, задача оптимизации не ставилась. Классическая «работа на результат», а по памяти последнего топика на эту тему — не все даже результат выдали (тесты не прошли бы). Имхо, первая задача программиста — выдать результат для основного workwlow. Дальше зависит от работодателя/заказчика.
                                                                    • +1
                                                                      суть деления на 5 и 3 повторяемое, чтоб компилятор мог вынести и сделал сам «невидимую переменную».
                                                                      деление на 15 отдельное это всегда лишняя операция.
                                                                  • 0
                                                                    Магическая константа получается :) Вот 3*5 написать другое дело :)
                                                                    • 0
                                                                      ну ясное дело :)
                                                                      правильно обернуть в функцию и не 3*5, а k*m, которые передавать параметрами :)
                                                                      • 0
                                                                        Если тупо обернуть (на языке типа PHP) — это будет не чистая функция :) И тут напрямую встает вопрос к тестирующему: «а по каким критериям будете оценивать?».
                                                                  • 0
                                                                    Я хоть и не программист, но всё же попробую ради интереса…
                                                                    Вот функция на Си которая у меня получилась:
                                                                    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» должны выводиться _вместо_, а не вместе с числом, опять таки см. условие задачи.
                                                                    • +2
                                                                      Парсер съел форматирование =\
                                                                      Случайно использовал тег 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');
                                                                      	}
                                                                      }
                                                                      
                                                                      • 0
                                                                        Не целый байт, а целых восемь байт на хранение флага на современных машинах. Выравнивание, всё такое. Зависит от компилятора, конечно. Но с такой дотошностью нужно было флаги в массив положить, чтобы не выравнивались :-)
                                                                      • +26
                                                                        Определенно, для этого нужен jquery! Скорее всего даже есть плагин…
                                                                        • +3
                                                                          плагин для прохождения собеседований ;)
                                                                        • +3
                                                                          Я не программист, но ностальгия по 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
                                                                          • 0
                                                                            60 и 70 можно соптимизировать на:

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

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

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

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

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

                                                                                      • +2
                                                                                        Ясно. Тогда лучше в строчку вывести, а на экран пусть печатают другие
                                                                                        	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
                                                                                        
                                                                                        • +1
                                                                                          (подбираю челюсть)

                                                                                          А на PDP-11?
                                                                                          • +3
                                                                                            Примерно так:
                                                                                            	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
                                                                                            

                                                                                            Но в деталях синтаксиса я уже не уверен.
                                                                                • +2
                                                                                  Эх… а я админ(
                                                                                  #!/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
                                                                                  
                                                                                  • +3
                                                                                    > Эх… а я админ(
                                                                                    Так это тоже хорошо =)

                                                                                    Только для таких целей, как мне кажется, 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 ""}}'
                                                                                    

                                                                                    Ибо не пораждает кучу процессов с последующей проверкой статуса выхода, а соответсвенно работает гораздо быстрее. А так на вкус и цвет, конечно же.
                                                                                    • +1
                                                                                      Знаю. Но к моему стыду, магию awk пока не освоил (не буду говорить, что не освою никогда, не правда это, я смогу!). Так что полностью согласен.
                                                                                      • 0
                                                                                        тогда уж лучше perl.
                                                                                        • 0
                                                                                          Спорно. awk есть практически в любом UNIX-шелле, и как правило, по умолчанию. И он есть даже в BusyBox. Просто затащить perl на embedded железку, у которой всего 4 Mb DataFlash-а вряд ли выйдет.
                                                                                    • 0
                                                                                      Вариант на питоне слишком банально, да кому он сдался когда тут для спектрумов и 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
                                                                                      
                                                                                      • 0
                                                                                        Вроде фишка оригинального задания, чтобы в коде не было команд типа print 'foobar', нужно оперировать только print 'foo' и print 'bar' не забывая про то, что в одной строке консоли или foo, или bar, или foobar, или число.
                                                                                        • 0
                                                                                          Фишка оригинального задания в том, что кто-то не может написать работающее решение. Так быстро определяют стоит ли возиться с кандидатом вообще.
                                                                                    • +4
                                                                                      Я бы начал на листочке код MVC CMS писать, потом попросил бы еще листочек для написания модуля перебора чисел.
                                                                                      • +4
                                                                                        <?
                                                                                           require 'controller.php';
                                                                                           require 'model.php';
                                                                                           require 'view.php';

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

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

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

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

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

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

                                                                                                              Ввожу в сёрч ник, программер смотрит мои проекты и коммиты минут 10. Сижу, весь от стыда красный. Там код, который я чуть ли не в школе писал. Все, больше вопросов не было, на следующий день приняли :]
                                                                                                              • 0
                                                                                                                У меня схожее было, только не на github (его в то время не было), а учебные проекты на флешке. Естественно все делал сам, не совсем без быдлокодерства конечно, но флешка с этими проектами до сих пор со мной :)