Сегодня посетил собеседование на должность c++ developer.
Вроде все нормально: компания понравилась, готов там поработать.
Пообещали прислать тестовое задание. Я в целом не против небольшого тестового задания, которое поможет оценить мою культуру кода, но то, что мне прислали — попахивает каким-то издевательством. Пришлось сразу отписаться, что не готов я столько времени убивать на задания, которые должны выявить непонятно что.
И почему-то мне кажется, что собеседующие будут докладывать начальству о том, как сложно найти программиста, ибо даже за тестовое задание мало кто способен взяться.
Разработать C++ приложение под операционную систему Windows, которое следит за кликами мышкой и передает информацию на сервер о том, куда был сделан клик (ярлык, приложение, кнопка и т. д.).
Приложение должно иметь диалоговое окно содержащее две кнопки: «Старт» и «Стоп»:
При нажатии на кнопку «Старт» приложение начинает следить за кликами мышки в системе. При каждом клике приложение должно определять, где был произведен клик с точностью до элемента, если это возможно (например — Рабочий стол — Ярлык «Мой компьютер»). Информация о каждом клике должна отправляться на сервер. Для этого необходимо выполнить HTTP POST запрос на url. На этот запрос должны отправляться данные в формате JSON (в переменной json) следующего вида:
{
«operation»:«save»,
«click»:«место, где был совершен клик»,
«time»:«время, когда был совершен клик»
}
В ответ от сервер придет JSON пакет следующего вида:
{
«status»:«1»
«message»:«OK»
}
если запрос был успешно обработан
{
«status»:0,
«message»:«Wrong request»
}
если запрос был ошибочным.
Каждое взаимодействие с сервером необходимо логировать. В лог должна попадать информация о то, что отправлялось на сервер и что было получено в ответ.
При получении ответа в лог необходимо занести успешен ли был запрос или нет
При нажатии на кнопку стоп процесс наблюдения за кликами должен быть остановлен.
Для разработки пользовательского интерфейса разрешается применять: WinAPI, WTL и подобные технологии. Запрещается использование сторонних библиотек типа Qt.
Собственно вопрос: для себя я оценил это задание часов на 8 — 10. Но меня сильно смутило вот это —
приложение должно определять, где был произведен клик с точностью до элемента, если это возможно (например — Рабочий стол — Ярлык «Мой компьютер»)
Здравствуйте, xednay89, Вы писали:
X>Сегодня посетил собеседование на должность c++ developer. X>Вроде все нормально: компания понравилась, готов там поработать.
X>Пообещали прислать тестовое задание. Я в целом не против небольшого тестового задания, которое поможет оценить мою культуру кода, но то, что мне прислали — попахивает каким-то издевательством. Пришлось сразу отписаться, что не готов я столько времени убивать на задания, которые должны выявить непонятно что.
X>И почему-то мне кажется, что собеседующие будут докладывать начальству о том, как сложно найти программиста, ибо даже за тестовое задание мало кто способен взяться. X>[q]
У тебя какая цель ? Устроиться в компанию, которая понравилась или научить уму-разуму собеседующих ? Если второе то ты своего, возможно, добился, если первое — то нет.
Здравствуйте, xednay89, Вы писали:
X>обоснованно ли мое недоумение?
Тут зависит от того — на что ты готов ради компании. К примеру, я не выполняю тестовые задания из принципа, НО если компания типа MS, находящаяся от меня через дорогу, предложит — я пошлю свои принципы подальше
Теперь про задание — мне нравится:
1. Требуют минимум GUI — это приятно, т.к. тратить на него время...
2. что они увидят — работу с win service (хотя вроде не обязательно), работу с файлами, работу с server-client, много поточную работу и все это действительно в простом задании (я имею ввиду, что реально будет только код — никакой графики, защиты и т.п.)
По поводу куда кликнул, ну а что тут таково вытащить побольше информации из активного окна? Думаю даже не важно, что вы вытащите — возьмите просто свойство Caption и думаю им будет достаточно, т.к. умение работать с WinApi вы покажите.
Я бы оценил часа в 4, при условии, что почти все мне надо вспоминать и google — лучший друг .
AD>По поводу куда кликнул, ну а что тут таково вытащить побольше информации из активного окна?
Вопрос в точности определения элемента.
Вернуть заголовок окна или кнопки — мелочь. Или название пункта меню.
Но все остальное — это просто гиблое дело. Например, тулбар, вкладки и пр. включая кастомные контролы.
Эти 4 часа уйдут только на ресеч с целью оценки времени.
Но можно взять исходники похожих опен-сурсных проектов и подглядеть, как там сделано. Но даже с его помощью не уложится в 4 часа.
Другой вопрос, что, может быть, им и не нужна такая точность, это стоило обсудить.
N>Эти 4 часа уйдут только на ресеч с целью оценки времени. N>Другой вопрос, что, может быть, им и не нужна такая точность, это стоило обсудить.
Обычно раздающие тестовое задание оставляют контакты, если надо спросить что то, да и сомневаюсь что им нужная такая точность, иначе сделали бы ставку только на нее. Но если вы правы, то да это займет намного больше времени, т.к. возможно придется бегать по дереву окон-контролов и т.п.
хорошее "взрослое" задание. покажет все что надо. последний нюанс — скорее посмотреть как вы поступите, чем конкретное требование. как требование — сформулировано не совсем четко. я такие формулировки в задание обычно использовал, чтобы посмотреть, будет ли кандидат уточнять требования или загасится наглухо и будет интерпретировать и отсебятину сочинять. уточнение требований и коммуникация — такая же часть нашей работы как написание, тестирование и документирование кода, удовлетворяющего требованиям
Задание не выглядит сложным, скорее довольно простое. Но оно слишком объемно , особенно если не работал последние годы с WIN API и не знаешь аббревиатуры типа JSON
Здравствуйте, Alex Dav, Вы писали:
AD>Здравствуйте, xednay89, Вы писали:
AD>2. что они увидят — работу с win service (хотя вроде не обязательно), работу с файлами, работу с server-client, много поточную работу и все это действительно в простом задании (я имею ввиду, что реально будет только код — никакой графики, защиты и т.п.)
просто я бы с удовольствием показывал эти навыки и умения на собеседовании. Иначе зачем оно?
Здравствуйте, xednay89, Вы писали:
X>Пообещали прислать тестовое задание. Я в целом не против небольшого тестового задания, которое поможет оценить мою культуру кода, но то, что мне прислали — попахивает каким-то издевательством. Пришлось сразу отписаться, что не готов я столько времени убивать на задания, которые должны выявить непонятно что.
Я выполнял тестовое задание два раза в жизни. У меня тогда было мало опыта, мало лет возраста и не было вышки, зато в резюме была частая смена мест работы, а на дворе был разгар кризиса. В ответ на второе из заданий от "специалистов" пришел сначала вопрос "а что такой #include <boost/shared_ptr.hpp> ?", а потом резолюция "в решении есть утечки памяти", которых — я уверен — там не было. Ощущение было как в известном анекдоте: "Слушай Билли! А тебе не кажется что мы с тобой только что бесплатно говна наелись?" С тех пор зарекся их выполнять и решил при поиске работы отодвигать всех работодателей с тестовыми заданиями в самый конец списка и делать их только когда со всех остальных будет получен офер или отказ.
Опять же, расскажу как это выглядит изнутри.
Если в компании ведется командная разработка, то довольно важна культура кода в принципе.
И есть примеры того, что человек неплохо показывает себя на собеседовании -- решает тесты, отвечает на вопросы по теории, но по каким-то причинам творит что-то дикое в коде.
И в связи с этим, мы просто обязаны посмотреть человека "на практике". Обычно бывает достаточно примеров кода. Но бывают случаи, когда в примерах кода люди присылают хелло, вролд или вообще отказываются, говоря об NDA. И вот в таких случаях ничего, кроме тестового задания, мы предложить не можем. Если у Вас есть альтернативные варианты того, как решить эту проблему -- расскажите, мы будем крайне благодарны.
Здравствуйте, dimaka, Вы писали:
D>уточнение требований и коммуникация — такая же часть нашей работы как написание, тестирование и документирование кода, удовлетворяющего требованиям
Я, в общем, считаю, что задание не шибко сложное, но — объемное. А ведь упомянутые уточнение требований и коммуникации — это затраты времени кандидата, которые тоже должны быть включены в общие затраты времени на выполнение задания. И вот это-то "уточнение" запросто может скушать очень и очень немало времени.
Короче, вопрос опять сводится к тому, сколько времени кандидат готов потратить на данную фирму, включая сюда все "уточнения требований и коммуникации"....
Здравствуйте, tomasmor, Вы писали:
T>И в связи с этим, мы просто обязаны посмотреть человека "на практике". Обычно бывает достаточно примеров кода. Но бывают случаи, когда в примерах кода люди присылают хелло, вролд или вообще отказываются, говоря об NDA.
NDA это бич программерского мира. Кстати, люди которые легко нарушают NDA, даже по пустякам, посылая куски кода из комерческих проектов, не очень надёжны. ИМХО. T>И вот в таких случаях ничего, кроме тестового задания, мы предложить не можем. Если у Вас есть альтернативные варианты того, как решить эту проблему -- расскажите, мы будем крайне благодарны.
Просто пересмотрите своё тестовое. У вас оно мутноватое, о чём, кстати, на этому форуме был небольшой флейм.
04.10.2012 19:36, Alex Dav пишет:
> Я бы оценил часа в 4, при условии, что почти все мне надо вспоминать и > google — лучший друг .
Ну то-бишь, твою оценку можно умножить на 4-5. Уверен, это будет
реальный срок, за который ты уложишься.
05.10.2012 9:02, tomasmor пишет:
> предложить не можем. Если у Вас есть альтернативные варианты того, как > решить эту проблему -- расскажите, мы будем крайне благодарны.
Зачем? Вы же вполне осознано проводите свою политику набора сотрудников
и отбираете тех, кто вам наиболее подходит. Зачем вам те, которые вам не
подходят?
Например, я вам не подхожу.
Здравствуйте, xednay89, Вы писали:
X>Пообещали прислать тестовое задание.
Какое-то оно... Смущает, что кандидата можно послать, а код использовать в коммерческих целях. Например, если кровь из носа надо решить такую задачу, а нужных сцецов нет.
Здравствуйте, MescalitoPeyot, Вы писали:
MP>пришел сначала вопрос "а что такой #include <boost/shared_ptr.hpp> ?", а потом резолюция "в решении есть утечки памяти"
Здравствуйте, tomasmor, Вы писали:
T>И есть примеры того, что человек неплохо показывает себя на собеседовании -- решает тесты, отвечает на вопросы по теории, но по каким-то причинам творит что-то дикое в коде.
Если это всего-лишь вопросы стиля, то решается постепенно code review, другого способа нет. Плюс дать почитать ваши внутренние правила оформления кода, но они редко где есть.
В задании используется как-то довольно много всяких технологий. По нормальному я бы оценил время реализации на неделю. Если рассчитывают, что надо ещё что-то у них уточнять и контактировать, то 2, т.к. окажется, что вечером, когда ты готов задавать вопросы у них уже всё разбежались. А утром ты занят.
В общем попахивает каким-то неуважением к кандидату и его времени. Либо ищут человека, который будет хорошо работать в условиях соковыжималки.
Здравствуйте, Mystic, Вы писали:
M>Какое-то оно... Смущает, что кандидата можно послать, а код использовать в коммерческих целях. Например, если кровь из носа надо решить такую задачу, а нужных сцецов нет.
а не проще на фрилансе нанять человека ?
Здравствуйте, dimaka, Вы писали:
D>хорошее "взрослое" задание. покажет все что надо. последний нюанс — скорее посмотреть как вы поступите, чем конкретное требование. как требование — сформулировано не совсем четко. я такие формулировки в задание обычно использовал, чтобы посмотреть, будет ли кандидат уточнять требования или загасится наглухо и будет интерпретировать и отсебятину сочинять. уточнение требований и коммуникация — такая же часть нашей работы как написание, тестирование и документирование кода, удовлетворяющего требованиям
так то оно так, только был у меня случай.
удаленное собеседование.
первое собеседование с hr-ом. где-то около часа.
потом собеседование с будущим начальником и hr-ом. где-то в районе 2-х часов. меня предупредили, что будет задание.
потом получаю задание из совершенно незнакомой области. подумал-прикинул, полез в гугл, разобрался, сделал, сдал. ушло где-то часа 4.
потом мне отвечают, что сделал я не правильно. причем я уверен, что сделал я правильно. больше того, я дал ссылку в сети на материал, который доказывал мою правоту.
есть нюанс: я шел на позицию, которая подразумевала введение в компании новых методов работы и ломку старых процессов.
моя позиция в вопросе: или они проглатывают то, что я им отправил, или мы начинаем бодаться, но я должен их продавить, потому что мне их потом все время надо будет продавливать.
их позиция: я должен вступить в переговоры и выяснить, что они имели ввиду под "не правильно" (смотрите, это точно Ваше). и мне даже было уточнено, что дополнительно они смотрят на мое желание еще поработать для них, без гарантированного результата.
результат: разошлись в разные стороны. собственно я и сейчас считаю, что я их понял правильно изначально, а вот они похоже остались слегка в ступоре.
и еще. они, как и Вы, говорили, что я должен показать свои коммуникационные скилзы. на что я ответил, что 3-х часовое личное собеседование, должно было покрыть этот вопрос полностью и окончательно.
вот тут я не понимаю: если нужен человек, который долго будет ходить вокруг да около и вползать в кабинет начальства на карачках неделю с одной и той же бумажкой... то зачем вообще искать профессионала? возьмите любую б... гм... желающую с улицы, и она это все будет делать за гораздо меньшие деньги. во
05.10.2012 12:23, alzt пишет:
> В общем попахивает каким-то неуважением к кандидату и его времени. Либо > ищут человека, который будет хорошо работать в условиях соковыжималки.
Ну да. Открытым же текстом написано кого ищут с таким заданием. И найдут
— такие люди есть.
05.10.2012 12:44, bastrakov пишет:
> удаленное собеседование. > первое собеседование с hr-ом. где-то около часа.
Это круто, о чем с ней, с ним можно час беседовать, да еще удаленно?
> вот тут я не понимаю: если нужен человек, который долго будет ходить > вокруг да около и вползать в кабинет начальства на карачках неделю с > одной и той же бумажкой... то зачем вообще искать профессионала? > возьмите любую б... гм... желающую с улицы, и она это все будет делать > за гораздо меньшие деньги. во
Они себе считают профессионалами и поэтому тоже ищут профессионала
(такого же).
Здравствуйте, tomasmor, Вы писали:
T>Но бывают случаи, когда в примерах кода люди присылают хелло, вролд или вообще отказываются, говоря об NDA. И вот в таких случаях ничего, кроме тестового задания, мы предложить не можем. Если у Вас есть альтернативные варианты того, как решить эту проблему -- расскажите, мы будем крайне благодарны.
Варианты есть у нас:
1) Если совсем уж без тестового не определитесь, то давайте маленькое тестовое задание, на пару часов работы, не больше.
2) Дайте кандидату кусок говнокода и попросите отрефакторить этот код, либо выписать всё, что ему не нравится в этом коде с предложениями сделать лучше, и почему это будет лучше.
3) Сделайте оплату за тестовое задание. Чтобы не оплачивать всем подряд, нужно чтобы до тестового задания доходили кандидаты, у которых есть неплохой шанс быть принятыми. Тогда фирма не обеднеет, если например оплатит 3-5 кандидатам выполнение тестового задания. Этот небольшой расход будет только на пользу всем — о вашей компании будет позитивное впечатление, кандидат не откажется от выполнения задания, и у вас больше шансов не потерять, а получить в команду хорошего разработчика.
Здравствуйте, Vzhyk, Вы писали:
V>Ну то-бишь, твою оценку можно умножить на 4-5. Уверен, это будет V>реальный срок, за который ты уложишься.
Моя оценка уже завышенна и учтено, что я не помню большую часть WinApi и давно не работал с С++,
НО задачи настолько простые, что из гугла можно будет целые куски вставлять — перехватить нажатие мышки решают на первом семестре по WinApi, туда же получить активное окно и взять с него инфо (хоть сейчас лабараторку открывай за 2 курс). Писать сервер не надо, значит никаких очередей, секьюрити и т.п. берешь любой класс уже реализовавший и используешь Post метод — скорее всего даже один (на все это час от силы)
Что осталось? оформить два потока — делаем простейший mutex или критическую секцию или чтото с read-write locker-ом (наверняка уже готовые куски есть — читать-писать в файл двумя потоками) (30 мин — код же в инете есть 100%)
Оформить все как сервис? еще 15 мин — в любом пособии для новичкой есть готовый шаблон.
итого 2 часа, но конечно будут не предвиденные ошибки, нестыковки + потестировать.
T>И есть примеры того, что человек неплохо показывает себя на собеседовании -- решает тесты, отвечает на вопросы по теории, но по каким-то причинам творит что-то дикое в коде.
Вот тут я не соглашусь — есть множество случаев, когда на работе на красоту кода плюют, т.к. надо срочно и уже завтра — ты сидишь пишишь, а сзади уже релизинженер стоит и ни о какой красоте и стукрурированости вопрос не идет.
Опять же, если человек начнет в таком примере городить абстактные фабрики и т.п. — у него или до фига времени или он не адекватен, т.к. напихивание всего всего из буста, Qt ... в пример Hello world...
Тут надо быть честными — послали функционал — его и проверяйте, хотели посмотреть паттерны — так и пишите перевернуть строку символов, использую паттерн стратегия.
05.10.2012 15:02, Alex Dav пишет:
> итого 2 часа, но конечно будут не предвиденные ошибки, нестыковки + > потестировать.
Да, да, да. Знаешь, я уже столько шапкозакидывателей насмотрелся..., а
как дело, так в 10 раз затянут и код после них проще сразу на помойку.
05.10.2012 14:50, Kernan пишет:
> Ты хотел сказать "профессионала "?
Каждый под оным словом понимает нечто свое, именно поэтому и кавычки не
использовал.
05.10.2012 14:58, MozgC пишет:
> 3) Сделайте оплату за тестовое задание. Чтобы не оплачивать всем подряд, > нужно чтобы до тестового задания доходили кандидаты, у которых есть > неплохой шанс быть принятыми. Тогда фирма не обеднеет, если например > оплатит 3-5 кандидатам выполнение тестового задания. Этот небольшой > расход будет только на пользу всем — о вашей компании будет позитивное > впечатление, кандидат не откажется от выполнения задания, и у вас больше > шансов не потерять, а получить в команду хорошего разработчика.
А жаба?
A>Если это всего-лишь вопросы стиля, то решается постепенно code review, другого способа нет. Плюс дать почитать ваши внутренние правила оформления кода, но они редко где есть.
Стиль -- не совсем правильное слово. Культура -- скорее
Здравствуйте, MozgC, Вы писали:
MC>Варианты есть у нас:
MC>1) Если совсем уж без тестового не определитесь, то давайте маленькое тестовое задание, на пару часов работы, не больше.
Ну наше тестовое задание занимает,в среднем у людей 2-6 часов работы. Мы же не можем заранее сказать, займет оно 2 часа или 20. Было у нас дурацкое задание, которое действительно вызывало много консернов, но мы его больше не даем.
MC>2) Дайте кандидату кусок говнокода и попросите отрефакторить этот код, либо выписать всё, что ему не нравится в этом коде с предложениями сделать лучше, и почему это будет лучше.
Результаты еще печальнее
MC>3) Сделайте оплату за тестовое задание. Чтобы не оплачивать всем подряд, нужно чтобы до тестового задания доходили кандидаты, у которых есть неплохой шанс быть принятыми. Тогда фирма не обеднеет, если например оплатит 3-5 кандидатам выполнение тестового задания. Этот небольшой расход будет только на пользу всем — о вашей компании будет позитивное впечатление, кандидат не откажется от выполнения задания, и у вас больше шансов не потерять, а получить в команду хорошего разработчика.
Это, конечно, дело хорошее, но наша бухгалтерия откусит нам голову за такие решения. Не потому что денег нет, а потому что сам факт передачи денег какому-то непонятному человеку тоже сомнителен.
Ну и, опять же, когда человеку платить деньги за задание, а когда нет? Писать тз? Или платить всем, кто присылает что угодно?
В общем, идея хорошая, но, на мой взгляд, не реализуема.
Здравствуйте, Alex Dav, Вы писали:
AD>Вот тут я не соглашусь — есть множество случаев, когда на работе на красоту кода плюют, т.к. надо срочно и уже завтра — ты сидишь пишишь, а сзади уже релизинженер стоит и ни о какой красоте и стукрурированости вопрос не идет.
Мы пишем ответственный софт, которым пользуются тысячи людей. И есть вещи, которые недопустимы при любых дедлайнах. AD>Опять же, если человек начнет в таком примере городить абстактные фабрики и т.п. — у него или до фига времени или он не адекватен, т.к. напихивание всего всего из буста, Qt ... в пример Hello world... AD>Тут надо быть честными — послали функционал — его и проверяйте, хотели посмотреть паттерны — так и пишите перевернуть строку символов, использую паттерн стратегия.
Мы честно пишем, что просим продемонстрировать красоту. Ну и есть вещи, которые недопустимы при любом раскладе.
Плюс к этому, могу сказать, что у половины заданий траблы с функционалом.
05.10.2012 16:30, tomasmor пишет:
> Мы пишем ответственный софт, которым пользуются тысячи людей. И есть > вещи, которые недопустимы при любых дедлайнах.
Уже это говорит, что к вам нет смысла устраиваться: будет много понтов и
мало денег, плюс постоянные авралы.
05.10.2012 16:30, tomasmor пишет:
> Мы честно пишем, что просим продемонстрировать красоту.
По телеку видел некую передачу. Там девка была — уродина, уродиной, но
был парень, который ее безумно красивой считал.
Здравствуйте, tomasmor, Вы писали:
T>Но бывают случаи, когда в примерах кода люди присылают хелло, вролд или вообще отказываются, говоря об NDA. И вот в таких случаях ничего, кроме тестового задания, мы предложить не можем.
D>хорошее "взрослое" задание. покажет все что надо. последний нюанс — скорее посмотреть как вы поступите, чем конкретное требование. как требование — сформулировано не совсем четко. я такие формулировки в задание обычно использовал, чтобы посмотреть, будет ли кандидат уточнять требования или загасится наглухо и будет интерпретировать и отсебятину сочинять. уточнение требований и коммуникация — такая же часть нашей работы как написание, тестирование и документирование кода, удовлетворяющего требованиям
Это не просто борзость, а борзость в квадрате. Мало того что даешь задание, так еще и умышленно даешь нечеткое задание. Тебе на работе за уточнее требований и коммуникации деньги платят. А ты (ну или твой работадатель) платите деньги кандидатам за задание а также за уточнения требований? Это тратить время и на программирование, и на обмен имейлами и потом еще встретиться с кучей чуваков у каждого из которых свое видение как надо программировать и которые зачастую не могут найти общий язык друг с другом.
Пока что видно неумение поговорить на интервью (и спросить что-нибудь из технологий если надо) и желание вые...нуться что я профессионал и я тут решаю насколько профессионально кандидат подходит к задаче.
Выполни задание и не морочь голову. Главное в тестовом задании — это
чтобы оно не было коммерческой задачей (работа под видом теста), всё
остальное — нормально.
Кто хочет сделать — ищет способ. Кто не хочет — причину. Они правы, не
взяв тебя — к работе отнесёшься так же. Будешь искать причину, а не способ.
Здравствуйте, Alex Dav, Вы писали:
AD>Моя оценка уже завышенна и учтено, что я не помню большую часть WinApi и давно не работал с С++,
Ну-ну. Начнем с того, что сделать диалог с кнопками тоже время надо, особенно если на чистом АПИ.
AD>НО задачи настолько простые, что из гугла можно будет целые куски вставлять — перехватить нажатие мышки решают на первом семестре по WinApi,
Глобальный хук делается в отдельной Dll. Ее тоже надо сделать и как-то привязать к основному приложению. Хотя готовый проект можно нагуглить.
AD>туда же получить активное окно и взять с него инфо (хоть сейчас лабараторку открывай за 2 курс).
AD>не активное, а по координатам. И извлечь всю иерархию. Несложно, но тоже время надо.
AD>Писать сервер не надо, значит никаких очередей, секьюрити и т.п. берешь любой класс уже реализовавший и используешь Post метод — скорее всего даже один (на все это час от силы)
Очередь все же нужна — в функции хука мы не можем делать сложную обработку, и тем более слать запросы на сервер. Берешь любой класс и используешь Post — это берешь что-то типа libcurl и прикручиваешь за 15 сек? Или пишем с нуля на WinInet функциях?
AD>Что осталось? оформить два потока — делаем простейший mutex или критическую секцию или чтото с read-write locker-ом (наверняка уже готовые куски есть — читать-писать в файл двумя потоками) (30 мин — код же в инете есть 100%)
В инете есть все 146%. Но это еще надо как минимум найти. Нужен парсер/сериалайзер Json — с нуля будем писать или прикручивать опенсорс либу? Нужно логирование — если более-менее нормальный логгер, то опять довольно много писать либо прикручивать оперсорс. Если я правильно понял задание, то ничего стороннего нельзя, и надо делать свою реализацию.
Нужна обработка ошибок и ситуаций когда сервер недоступен, или переполнения очереди запросов.
AD>Оформить все как сервис? еще 15 мин — в любом пособии для новичкой есть готовый шаблон.
Агащазкакже. Если в первый раз, то придется поразбираться, даже с готовой реализацией в ATL. А вообще про сервис никто не говорил, и взаимодействие сервиса с GUI это отдельная песня.
AD>итого 2 часа, но конечно будут не предвиденные ошибки, нестыковки + потестировать.
Здравствуйте, tomasmor, Вы писали:
T>Опять же, расскажу как это выглядит изнутри. T>Если в компании ведется командная разработка, то довольно важна культура кода в принципе. T>И есть примеры того, что человек неплохо показывает себя на собеседовании -- решает тесты, отвечает на вопросы по теории, но по каким-то причинам творит что-то дикое в коде. T>И в связи с этим, мы просто обязаны посмотреть человека "на практике". Обычно бывает достаточно примеров кода. Но бывают случаи, когда в примерах кода люди присылают хелло, вролд или вообще отказываются, говоря об NDA. И вот в таких случаях ничего, кроме тестового задания, мы предложить не можем. Если у Вас есть альтернативные варианты того, как решить эту проблему -- расскажите, мы будем крайне благодарны.
Я не делаю из принципа тестовое задание которое больше 1-2 часа. Бывает смотришь на задание и понимаешь, что там работы на ~8 часов, а надо еще блочные тесты, логирование, стратегию обработки ошибок реализовать — еще 2-4 часа...
И что? растягивать выполнение тестового задания на неделю и больше или гробить пару выходных? Нет уж...
Что делать что бы не давать больших тестовых заданий, но понять как кандидат пишет код? Дайте ему любую абстрактную задачу, пусть он ее вначале на бумажке в виде диаграмм изорбразит, а потом в коде на компьютере, но задач должна быть небольшой
Здравствуйте, nightcode, Вы писали:
M>>Какое-то оно... Смущает, что кандидата можно послать, а код использовать в коммерческих целях. Например, если кровь из носа надо решить такую задачу, а нужных сцецов нет. N>а не проще на фрилансе нанять человека ?
Так это же платить нужно, а так и работа сделана и человека смешал с грязью >у вас тут утечки памяти
Потом доказывай что ты не верблюд.
Здравствуйте, Mystic, Вы писали:
M>Здравствуйте, xednay89, Вы писали:
X>>Пообещали прислать тестовое задание.
M>Какое-то оно... Смущает, что кандидата можно послать, а код использовать в коммерческих целях. Например, если кровь из носа надо решить такую задачу, а нужных сцецов нет.
Здравствуйте, ResidentR6, Вы писали:
RR>Выполни задание и не морочь голову. Главное в тестовом задании — это RR>чтобы оно не было коммерческой задачей (работа под видом теста), всё RR>остальное — нормально.
RR>Кто хочет сделать — ищет способ. Кто не хочет — причину. Они правы, не RR>взяв тебя — к работе отнесёшься так же. Будешь искать причину, а не способ.
Ага На работу стараются брать тех, кто готов работать. По моим наблюдениям, подавляющие большинство разработчиков/тестировщиков готовы сделать тестовое задание. А остальные на сидят на rsdn и рассказывают о высоких принципах.
Что значит — подобные? WinAPI — интерфейс операционной системы, WTL — библиотека. Ответ, вроде бы, напрашивается — имеются в виду библиотеки Microsoft, но это лучше уточнить у нанимателей. Скажем, STL входит в поставку компиляторов C++ от MS, но вот "подобна" ли она WinAPI и WTL — вопрос.
X>Собственно вопрос: для себя я оценил это задание часов на 8 — 10. Но меня сильно смутило вот это — X>
X>приложение должно определять, где был произведен клик с точностью до элемента, если это возможно (например — Рабочий стол — Ярлык «Мой компьютер»)
X>обоснованно ли мое недоумение?
По сути — не такое уж и страшное задание. Конечно, сервисов тут никаких делать не надо — построение сервиса, взаимодействующего с GUI тянет на отдельную тестовую задачу, притом повеселее упомянутой в топикстарте. ATL, WTL или MFC для GUI хватит с головой — окно с двумя кнопками несложно изобразить и на чистом Win API, определение иерархии окон — опять таки, тот же Win API. Парсить ответ сервера тоже особо не нужно, достаточно найти нужные строки в кавычках. Ну, может быть, будет небольшая заморочка с асинхронным WinHTTP. "Логгирование" тут вообще тривиальное — простая запись текста в файл (я смотрю, тут уже разбежались некоторые — аж отдельные библиотеки для этого тащить).
Ещё вопросы, которые нужно бы задать нанимателям:
— Где задавать адрес сервера, в настройках или hard coded? И кстати, надо узнать сам адрес для тестирования.
— Что делать, если пропала связь с сервером? Прекратить слежение, буферировать данные (если да — то как долго), бросить сообщение об ошибке? Ещё что-то?
— Аналогичный вопрос по ошибкам логгирования — что делать, если диск переполнен, недоступен для записи и т.п.
Ну а в остальном надо просто аккуратно написать код, обязательно отследить статусы ошибок, снабдить достаточными комментариями. И всё, вроде.
"Коммерциализация" такого кода — ИМХО, дело невозможное, так что паранойю можно засунуть подальше.
Да, по поводу коммерциализации тестовых заданий. Мне значительно чаще встречались студенты, предлагающие свои курсовики или лабораторные под видом тестовых заданий — вот где смеху-то.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Олег К., Вы писали:
ОК>Это не просто борзость, а борзость в квадрате. Мало того что даешь задание, так еще и умышленно даешь нечеткое задание. Тебе на работе за уточнее требований и коммуникации деньги платят. А ты (ну или твой работадатель) платите деньги кандидатам за задание а также за уточнения требований? Это тратить время и на программирование, и на обмен имейлами и потом еще встретиться с кучей чуваков у каждого из которых свое видение как надо программировать и которые зачастую не могут найти общий язык друг с другом.
Странный вывод. Ну вот так там поставлен процесс разработки (если это можно так назвать) и им нужен человек который впишется, вот и ищут такого. И потом, откуда ты знаешь какая там предлагается зарплата ? Вполне может быть, что она все эти издержки покрывает.
Здравствуйте, xednay89, Вы писали:
X>Сегодня посетил собеседование на должность c++ developer. X>Вроде все нормально: компания понравилась, готов там поработать.
X>Пообещали прислать тестовое задание. Я в целом не против небольшого тестового задания, которое поможет оценить мою культуру кода, но то, что мне прислали — попахивает каким-то издевательством. Пришлось сразу отписаться, что не готов я столько времени убивать на задания, которые должны выявить непонятно что.
X>обоснованно ли мое недоумение?
Решил попробовать чисто для себя вспомнить как это программировать, ибо уже давно не брал в руки шашек так сказать. Получилось вот это. Код конечно тихий ужас, но я ж не претендую на гуру программирования (опыта разработки 0, в студенчестве курсачи ваял и на этом всё, дальше занимался админством-аникейством, программирование для себя как хобби скорее), так что какой есть. Весь "проект" сплошное читерство и откровенное упрощение, но это ж тестовое задание с которым слишком много времени тратить жаль (по факту я убил где-то 2 вечера + 1 ночь), т.к. много чего вспоминать пришлось и подглядывать в MSDN). Ваял я его с минималистичным подходом практически на голом API в стиле дилетанта в программировании и с кучей хаков.
И да, меня тоже смущает момент грамотного выяснения объекта клика с точностью до элемента. В мышином хуке мы можем отловить HWND окна, которое получит сообщение и экранные координаты курсора. А вот идентификацией конкретного элемента уже непонятки — можно выдрать класс окна (GetClassName) и его текст (GetWindowText), можно выяснить id процесса и потока которому принадлежит окно (GetWindowThreadProcessId), можно в иерархии окон покопаться (GetParent/GetAncestor/GetWindow/etc). Обработку конкретного случая с рабочим столом и ярлыками можно конечно захардкодить покопавшись со Spy++ и выловив конкретные нужные WM_NOTIFY (типа NM_CLICK, правда там уже простым мышиным хуком по идее не обойдёшься), но хочется ж универсально сделать, правда неясно как, например если это будет клик по какой-нибудь кнопке "Войти" в браузере (подозреваю что никак, ибо DOM в браузере — отдельная песня).
Плюс возникнут отдельные заморочки с правильной реализации этой аппликухи на 64 битных системах, ибо глобальный хук должен жить в dll, а 32 битная dll грузится только в 32 битные процессы, для "захучивания" 64 битных процессов нужна 64 битная dll (причём с другим именем), которую будет грузить 64 битная же версия аппликухи. Так что 32 битная версия аппликухи должна проверять битность системы и на 64 битных системах запускать ещё и свою облегчённую 64 битную версию (без GUI и т.д.), которая вместо непосредственной обработки кликов (запись в лог и отсылка на сервер) будет пересылать посредством какого-нить IPC (например через пайп) данные о кликах в 32 битную версию, в которой уже будет GUI и честная обработка всех данных как от 32 битных процессов так и из пайпа. Почему не честная обработка в 64 битной версии ? А чтоб 2 процесса в 1 файл лога ерунды не понаписали независимо друг от друга, хотя конечно вариант синхронизировать это дело. Управление 64 битным процессом из 32 битного по кнопкам старт/стоп можно реализовать например на событиях. Естественно это сложнее чем просто 32 битное решение, требует больше времени на разработку и отладку, а так же средств разработки поновее чем имеющаяся под рукой VS2003, которая из коробки под x64 компилить не умеет. Будем считать что отмазался почему на x64 нормально работать оно не будет
Так вот, собственно, у меня глупый вопрос — "доктор, я буду жить ?" — какие шансы устроиться начинающим программистом С++ в default city если учесть отсутсвие опыта разработки как такового, возраст 27 лет и небольшой вцелом опыт работы (аникейство). Ну и общие знания достаточные чтобы ваять г*внокод вышеприведённого стиля. Всякая шаблонная магия, современные веяния типа C++11, функциональщина и прочие крутые модные штучки — пока выше моего понимания и с наскока оно не поддаётся, возможно банально мозга не хватает. При этом WinAPI в целом понятно, базовые принципы функционирования системы Windows тоже. И если шансы есть, то как лучше их реализовать ? Ибо как показала практика на резюме без опыта разработки никто не смотрит, даже отказ ленятся прислать. Или лучше забить на эту идею и идти дальше админить-аникействовать ?
Здравствуйте, xednay89, Вы писали:
X>Я в целом не против небольшого тестового задания, которое поможет оценить мою культуру кода, но то, что мне прислали — попахивает каким-то издевательством. Пришлось сразу отписаться, что не готов я столько времени убивать на задания, которые должны выявить непонятно что.
Задание прикольное, но для тестового недостаточно маленькое.
Проблема в том, что если писать как положено, с разделением на компоненты, с тестами, да и
вообще с учетом многочисленных "но" и "а что если", то на него можно потратить уйму времени.
Намного больше, чем несколько часов. А если по-быстрому настрочить (чтобы отстали), то
получившийся код будет ужасным и никакие проверки не пройдет. Палка о двух концах.
Поэтому нужно либо отказываться от выполнения таких заданий вовсе, как тут это многие советуют,
либо выполнять, но тогда делать это качественно и дотошно, чтобы у экзаменующих не было шансов к
чему-то придраться. Либо, как советовал kaa.python вот в этой
теме, залить куда-нибудь на sourceforge или
github образцы своей "кодовой деятельности" и во время собеседований ссылаться на них.
И эффективно, и экономит время.
RU>Решил попробовать чисто для себя вспомнить как это программировать, ибо уже давно не брал в руки шашек так сказать. Получилось вот это.
RU>...поскипано...
RU>Так вот, собственно, у меня глупый вопрос — "доктор, я буду жить ?" — какие шансы устроиться начинающим программистом С++ в default city если учесть отсутсвие опыта разработки как такового, возраст 27 лет и небольшой вцелом опыт работы (аникейство).
Таки пошёл админить-суппортить, правда малознакомые *nix'ы и базы данных, но это поправимо.
Здравствуйте, 8bit, Вы писали:
8>лично я бы "повертел" их с таким тестовым заданием.
Тестовое задание как правило вообще ничего не гарантирует в плане трудоустройства. В моем городе есть одна фирма, там тестовое задание это такой себе мини проект на неделю работы, причем это только так сказать допуск к устному собеседованию. Был случай что после выполнения тз проверяли его одни люди из этой конторы, само собеседование проводили другие, которые выполненного тз в глаза не видели, а идти к HR за его копией просто отказались. После этого я наотрез отказываюсь делать тз. Хватит, задолбало.
Вот тебе простой вопрос по теме — каким образом ты достучишься до программ, которые работают в elevated-режиме в Висте+?
И таких деталей будет стотыщмильонов. 20-30 часов это куда более реалистичная оценка, хотя, учитывая, что "тебе всё надо будет вспоминать", то я бы рассчитывал на рабочую неделю...
Здравствуйте, kaa.python, Вы писали:
KP>GUI приложение на C++ под Windows уже звучит довольно трэшово. Но еще и без Qt... Это вообще финиш.
Ну тут ты ИМХО придираешься. Сваять одну формочку из двух кнопок даже на WinAPI займёт полчаса, если знаешь, как это сделать, и пару часов, если не знаешь. Но в "разрешённой" категории либ имеется WTL, на котором сваять такую форму вообще элементарно...