Здравствуйте, Sashaka, Вы писали:
S>Пришло письмо:
S>Дабы минимизировать S>Реализовать на языке C++ консольное приложение, принимающее 2 параметра S>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
Как тестовое задание — очень хорошо. Такое задание позволяет оценить сразу много вещей — способность выдавать рабочий и тестируемый код, обработку ошибок, умение писать простой (25 минут!) и в то же время расширяемый код (поддержка многих форматов в будущем), знание стандартных библиотек. Время тоже вполне адекватно. Если не мудрить — то его достаточно (еще раз перечитайте требования — два параметра, одно примитивное арифметическое выражение).
31.03.2011 18:05, 637 пишет:
> > Как тестовое задание — очень хорошо. Такое задание позволяет оценить > сразу много вещей — способность выдавать рабочий и тестируемый код, > обработку ошибок, умение писать простой (25 минут!) и в то же время > расширяемый код (поддержка многих форматов в будущем), знание > стандартных библиотек. Время тоже вполне адекватно.
Да, если у вас на конторе рабочие задачи сравнимы с этой.
Здравствуйте, Sashaka, Вы писали:
S>Еще раз — вопрос не в сложности задания, а в самой постановке вопроса "не более 25 минут". Вот кому-нибудь дают задания на работе на 25 минут?
Нет, задачу нужно оценивать в том виде, в каком ее дает руководитель, а не пытаться на простенькую программу обработки элементарных арифметических выражений накручивать заварку кофе с использованием Azure в нагрузку.
S>А если бы давали, долго бы вы так проработали? В чем смысл устраивать гонку? Как подразумевается оценивать время выполнения задания? От момента получения письма? Или время не контролируется и это такое предупреждение кандидатам о "ритме" работы в данной компании? Или присылают кусок говнокода на WinAPI, строк 100, надо добавить функциональность, найти баги и отрефакторить за 3 часа, в чем смысл?
Смысл — в отборе адекватных кандидатов, умеющих анализировать поставленную задачу и решать ее адекватными средствами. И не боящихся сказать "начальник, да ты гонишь!". По делу, разумеется.
S> Или вот еще задание, просто для того чтобы пригласили на собеседование:
S>Реализовать сервер обмена сообщениями. S>ОС Linux S>Требования: S>- регистрация и авторизация пользователя по логину и паролю S>- передача сообщения от одного пользователя нескольким S>- передача сообщения от одного пользователя другому (приватное сообщение) S>- тестовый клиент, позволяющий протестировать реализованный функционал
S>Обосновать выбор или реализацию сетевого протокола S>Обосновать выбор хранилища данных
На знание TCP/IP что-ли?
Не требуется реализовывать полноценную безопасность, не стоят требования по числу клиентов, масштабируемости и т.п. Да и задачка, судя по всему, навеяна ПМ-у чтением в далекой молодости чего-нибудь типа "Секреты TCP/IP", в которых очень любят именно настольные обменники сообщениями. В качестве примеров.
Чего не так?
- Простите, профессор, не пса, а когда он уже был человеком.
— То-есть он говорил? Это еще не значит быть человеком. (с) Булгаков
Здравствуйте, Vzhyk, Вы писали:
V>31.03.2011 18:05, 637 пишет:
>> >> Как тестовое задание — очень хорошо. Такое задание позволяет оценить V>Да, если у вас на конторе рабочие задачи сравнимы с этой.
это тест. fuzz-buzz. причем здесь реальные задачи?
Здравствуйте, Sashaka, Вы писали:
S>Пришло письмо:
S>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, S>но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни?
даже с учетом того, что программирование не есть моя основная деятельность, за 25 минут это можно написать даже постоянно сверясь со справочником по сишным функциям.
как бы это делал я.
1) переводим операнд через atol (strloul);
2) заводим массив структур типа: операция, указатель на функцию (для скорости написания можно отказаться от структр и просто массив указателей, где чередуются указатели на операцию с указателями на функцию);
3) ну дальше поиск операции в массиве.
это -- если писать предельно расширяемо.
25 минут это с отладкой и с подробными комментариями. а если через switch и без комментов, то тут и в 5 минут можно уложиться.
задание для джуниоров. вот если бы вас попросили калькулятор написать в стиле 1-2*3 то это да, 25 минут это только если вы точно знаете какие библиотеки вам помогут и как их юзать.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, tlp, Вы писали:
tlp>...Отсеивающий тех, кто не видит, что полноценого парсинга арифметических выражений в задаче не требуется. tlp>В текущем вариант условия действительно делается за полчаса.
Для идеальных данных, да. Но ты надеюсь видел, что требуется обработка ошибок?
Здравствуйте, olegkr, Вы писали:
O>Здравствуйте, Alexey_VL, Вы писали:
A_V>>Учитывая, что можно использовать библиотечные функции, вполне можно написать за 25 минут. O>Ну так напиши. Время пошло
Отличный ход — запустить время, пока чел не в курсе
Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, мыщъх, Вы писали: M>... М>>это -- если писать предельно расширяемо.
M>Даже близко нерасширяемо помоему. M>...
почему? {"+", add, "-", sub, "*", mul, "/", div, 0}.
добавление новых операций очень легко. как и удаление. как и добавление синонимов. например, мы хотим поддержать "3 плюс 2" -- просто добавляем -- "плюс", add, -- и все. big num элементарно поддержать. flot поддерживается прозрачно.
а ваш вариант увидеть можно?
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, minorlogic, Вы писали:
M>>Здравствуйте, мыщъх, Вы писали: M>>... М>>>это -- если писать предельно расширяемо.
M>>Даже близко нерасширяемо помоему. M>>... М>почему? {"+", add, "-", sub, "*", mul, "/", div, 0}. М>добавление новых операций очень легко. как и удаление. как и добавление синонимов. например, мы хотим поддержать "3 плюс 2" -- просто добавляем -- "плюс", add, -- и все. big num элементарно поддержать. flot поддерживается прозрачно.
А парсить ьсложные мат выражения?
М>а ваш вариант увидеть можно?
Здравствуйте, XuMuK, Вы писали:
S>>Реализация должна быть кроссплатформенной. Необходима полноценная обработка ошибок. Можно использовать любые библиотеки и любой компилятор
XMK>http://codepad.org/YEIooCr8 — поддержку форматов добавить за оставшиеся 10 минут =)
А можно ли считать буст кроссплатформенным? Я встречался по крайней мере с 2 платформами, куда он не портирован..
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, мыщъх, Вы писали:
M>>>Даже близко нерасширяемо помоему. M>>>... М>>почему? {"+", add, "-", sub, "*", mul, "/", div, 0}. М>>добавление новых операций очень легко. как и удаление. как и добавление синонимов. например, мы хотим поддержать "3 плюс 2" -- просто добавляем -- "плюс", add, -- и все. big num элементарно поддержать. flot поддерживается прозрачно. M>А парсить ьсложные мат выражения?
во-первых, про них в ТЗ ни слова. во-вторых, при моем подходе легко и мы сохраним максимум кода.
изначально мы имели тривиальный вырожденный "парсер", принимающий три аргумента. допустим, теперь нам нужно реализовать полноценный калькулятор. уже написанная часть кода _не_ измениться, т.к. после разбивки сложного выражения на последовательность простых и опрделения порядка их вычисления мы вновь возвращаемся к задаче "операнд-операция-операнд".
в парсер можно реализовать как _независмый_ фронт-энд к уже написанной функции или даже консольной утилите, вызывая ее с аргументами командной строки.
но при _любом_ решении ТЗ это можно сделать. это не демонстрирует (не) расширяемость и если говорить о расширяемости, то только в контексте прикрутить bignum, hex-ввод, float...
хотя, да, тут вы правы. на стадии прикручивая float возникает проблема, т.к. нам сначала надо определить тип операндов, а только потом -- выяснить какими функциями мы их будем обрабатывать. в принципе, мы можем захотить складывать и умножать строки. а вот вычитание и деление для строк бессмысленно. и тогла нужно плясать от
1) определяем тип операндов:
2) переключаемся на таблицу функций для данного типа операндов;
но, черт, возьми!!! даже в этом случае мое решение будет работать!!! уже написанный код обрабатывает целочисленку. если нужно прикрутить строки, то создаем таблицу функций для строк {"+", cat_str, "*", mul_str, 0}.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, Ytz, Вы писали:
Ytz>Здравствуйте, XuMuK, Вы писали:
XMK>>http://codepad.org/YEIooCr8 — поддержку форматов добавить за оставшиеся 10 минут =)
Ytz>Где обработка ошибок? Например деления на ноль? Откуда информация, что числа числа и операторы разделены пробелами?
Про деление совершенно не подумал, но это одна своя функция, а про пробелы из 1го поста, там они есть.
Здравствуйте, midcyber, Вы писали:
M>Здравствуйте, XuMuK, Вы писали:
S>>>Реализация должна быть кроссплатформенной. Необходима полноценная обработка ошибок. Можно использовать любые библиотеки и любой компилятор
XMK>>http://codepad.org/YEIooCr8 — поддержку форматов добавить за оставшиеся 10 минут =)
M>А можно ли считать буст кроссплатформенным? Я встречался по крайней мере с 2 платформами, куда он не портирован..
function и bind — да, тем более что они будут в С++B
Здравствуйте, minorlogic, Вы писали:
M>Здравствуйте, мыщъх, Вы писали: M>... М>>это -- если писать предельно расширяемо.
M>Даже близко нерасширяемо помоему. M>...
Плагинами забабахать!
+ лог-систему с подключаемыми каналами вывода, ошибки спамить как в std::cerr, так и в syslog!
+ парсер командной строки с дружелюбным выводом доступных опций из подключенных модулей
+ написать тесты для разных случаев
Можно взять готовое и связать воедино Тогда работа сводится больше к интеграции, нежели непосредственной разработке..
Неоконченная мысль всегда казалась Шри Япутре слишком
Здравствуйте, мыщъх, Вы писали:
М>Здравствуйте, Sashaka, Вы писали:
S>>Пришло письмо:
S>>Я не сомневаюсь, что есть люди способные выполнить это задание за 25 минут, S>>но лично я считаю это полным неадекватом. Может я что-то не понимаю в этой жизни? М>даже с учетом того, что программирование не есть моя основная деятельность, за 25 минут это можно написать даже постоянно сверясь со справочником по сишным функциям.
М>как бы это делал я. М>1) переводим операнд через atol (strloul); М>2) заводим массив структур типа: операция, указатель на функцию (для скорости написания можно отказаться от структр и просто массив указателей, где чередуются указатели на операцию с указателями на функцию); М>3) ну дальше поиск операции в массиве.
М>это -- если писать предельно расширяемо.
М>25 минут это с отладкой и с подробными комментариями. а если через switch и без комментов, то тут и в 5 минут можно уложиться.
Только в таком виде решение "зватьли на собеседование" было бы скорей всего отрецательным. Думаю всетаки хотели посмотреть на качество кода и архитектурные навыки, а не просто принципиальную возможность кое-как написать такую программку. А с ООП тут есть где развернуться ;) Вобщем вместе с проектированием и отладкой задача примерно на час.