Для пятницы, есть очень интересная задача, которую задают кадидатам на собеседованиях. Цитирую
сам любил задавать под конец собеседования тупые задачки типа "Буратино дали 5 яблок, потом 2 забрали, сколько яблок осталось у Буратино", но сразу предупреждал что задачки программерско-кодерские, и решение надо искать именно с точки зрения программерской.
Задачка оказалась совсем не простой. Главное в задаче что? Правильно — выбрать язык программирования и применить паттерны, показать так сказать класс программирования. Тут есть несколько походов.
1) Объектно ориентированный. Во первых надо создать класс Apple и переопределить оператор складывания яблок. Но ведь современные проги создаются по идеологии MVC а Apple это Model. Надо еще View — это будет класс AppleInspector и контроллер AppleAccountingBuratinoManager. Тут мы применили и объектно ориентированный дизайн и паттерны программирования. Не раскрыта тема метапрограммирования.
2) Метапрограммирование. В предыдущем случае мы написали класс Apple, но что будет если заказчику понадобятся груши? Правильно, класс Apple надо переименовать в класс AccountableAsset и сделать щаблоном. Во вторых, надо сделать инстанциацию количества ассетов на этапе компилляции, это на C++ делается через частичную специализацию когда у Буратино было 0 яблок, дали 5 и забрали 2. Частичная специализация шаблона даст нам частное решение на этапе компилляции. Общее решение останется в рантайме, но что делать, кто сказал что будет легко.
3) Функциональный подход. Императивные языки — вчерашний день. Компилятор сам должен вывести сколько у Буратино яблок. Мы должны задать только начальное состояние, представив подсчет яблок как совокупность последовательных состояний вычислительного процесса. Это же конечный автомат! Каждое добавление яблок изменят внутреннее состояние Буратино, каждый отъем яблок тоже сказывается на нем, причем отрицательно. Особенно полезен функциональный подход в связи с возможностью использования массового парралелизма, что позволит загрузить многопроцессорную систему.
Дальнейшие изыскания в объектно ориентированном дизайне показали — что буратино это контроллер! Тогда становится все ясно — яблоко это модель, Буратино это контроллер. Но контроллером яблок (в генерализованном виде AccountableAsset) может являться не только Буратино но и Бармалей. Тогда Буратино надо тоже генерализовать в виде ControllingActor. Ну осталось генерализовать View и у нас получается супергибкая модель, не не только Буратино может управлять владением яблок, но и Бармалей может владеть кокосами. Это же ахрененная гибкость получается, мы создали Univerasal Asset Management System. Это же практически архитектура логистического приложения!
Осталось только решить вопрос с финансированием. На месте кандидата я бы поинтересовался, готова ли контора оплатить дальнейшие изыскания в области управления ассетами. Вот, казалась бы простая задачка, а какая глубина за ней кроется!
Здравствуйте, Handie, Вы писали:
H>Для пятницы, есть очень интересная задача, которую задают кадидатам на собеседованиях. Цитирую
H>
H>сам любил задавать под конец собеседования тупые задачки типа "Буратино дали 5 яблок, потом 2 забрали, сколько яблок осталось у Буратино", но сразу предупреждал что задачки программерско-кодерские, и решение надо искать именно с точки зрения программерской.
H>Задачка оказалась совсем не простой.
Да ладно. Надо установить 1С, если русская контора, или SAP/R3, если нерусская, а дальше там все есть, с проводками и откатами.
H>сам любил задавать под конец собеседования тупые задачки типа "Буратино дали 5 яблок, потом 2 забрали, сколько яблок осталось у Буратино", но сразу предупреждал что задачки программерско-кодерские, и решение надо искать именно с точки зрения программерской.
Старая шутка. Правильный ответ — не знаю сколько, т.к. не понятно сколько их у него было. И мораль шутки — инициализируйте переменные перед их использованием.
P_A>Старая шутка. Правильный ответ — не знаю сколько, т.к. не понятно сколько их у него было. И мораль шутки — инициализируйте переменные перед их использованием.
Вы ищете причины, а надо искать решения. Объяснить почему задача не может быть решена — исключительно неправильный подход. Надо помочь заказчику нафти взаимовыгодное решение, улучшить бизнес процессы на предприятии. В идеале — надо убедить заказчика что старая система управления ассетами неадекватна и надо заменить на новую (предложив откат 50%). Нам нужно не решение частной задачи, а система которая будет работать на получение прибыли
_>Я бы человека не брал: исходную задачу не решил, вместо нее создал другую, которую решить легко не может и не исследовав рынок просит финансирование.
Блин, совсем люди не понимают пятничный троллинг. Это была пародия на многие реальные проекты, где действительно создаются классы типа AccountableAsset и ControllingActor и где метапрограммирование вызывает синдром Александреску головного мозга.
P_A>Старая шутка. Правильный ответ — не знаю сколько, т.к. не понятно сколько их у него было. И мораль шутки — инициализируйте переменные перед их использованием.
Модное решение на node.js
C:\>node > var apples
undefined > apples += 5
NaN > apples -= 2
NaN
Не знаю сколько — неправильный ответ. Правильный ответ — Not a Number!
H>сам любил задавать под конец собеседования тупые задачки типа "Буратино дали 5 яблок, потом 2 забрали, сколько яблок осталось у Буратино", но сразу предупреждал что задачки программерско-кодерские, и решение надо искать именно с точки зрения программерской.
Пример женской логики: вспоминая историю Буратины и обратив внимание на указание отрезка времени поистечении которого забрали яблоки — можно предположить, что он успел вырастить дерево и количество яблок у него не определено.
G>С таким подходом вам только диссертацию осталось написать про буратино и его яблоки
Народ не поймет. Это детство какое-то. Тему надо сформулировать примерно так "Неимперативные метаподходы к проблеме менежмента ассетов в условиях недетерминированных акторов при моделировании бизнес процессов".
Здравствуйте, Handie, Вы писали:
H>Осталось только решить вопрос с финансированием. На месте кандидата я бы поинтересовался, готова ли контора оплатить дальнейшие изыскания в области управления ассетами. Вот, казалась бы простая задачка, а какая глубина за ней кроется!
На месте работодателя, если бы мне кандидат предложил бы оплатить какую-то НЕХ вместо того, чтобы вычесть 2 числа, взял бы и у....л.
Здравствуйте, denisko, Вы писали:
D>Здравствуйте, Handie, Вы писали:
H>>Осталось только решить вопрос с финансированием. На месте кандидата я бы поинтересовался, готова ли контора оплатить дальнейшие изыскания в области управления ассетами. Вот, казалась бы простая задачка, а какая глубина за ней кроется! D>На месте работодателя, если бы мне кандидат предложил бы оплатить какую-то НЕХ вместо того, чтобы вычесть 2 числа, взял бы и у....л.
Вообще то я имел ввиду взял и у..л..ы..б..н..л. Интересно, сработает?
Здравствуйте, Handie, Вы писали:
D>>На месте работодателя, если бы мне кандидат предложил бы оплатить какую-то НЕХ вместо того, чтобы вычесть 2 числа, взял бы и у....л.
H>Унылые чуваки без чувства юмора напрягают
Понимаешь, ты сейчас веселишься, а потом появляется табуны программистов, которые считают, что для того, чтобы удалить гланды, надо разобрать человека, а потом собрать такого же но без гланд.
Здравствуйте, Handie, Вы писали:
H>Для пятницы, есть очень интересная задача, которую задают кадидатам на собеседованиях. Цитирую
и в результате, чтобы считать буратинкины яблоки, контора вместо калькулятора прикупила:
стойку с кучей мощных лезвий,
хороший бесперебойник,
SAN хранилище,
пучок админов, чтобы это все работало
и в результате переехала в новое крутое здание, потому что в старом такую тяжесть полы не выдерживали
а потом буратино поступил в универ, вместо яблок стал лакомиться кислотой и вдувать мальвинке яблоки жрать стало некогда
контора зачахла и разорилась, а программисты покончили с собой
Правильный ответ: 5-2=3, потому что демонстрирует умение работать в условиях неполных данных, когда значения неизвестных величин выбираются так, чтобы задача имела практический смысл. Все остальное — это заумствующая школота, которая завалит проект.
ТАК ТОЧНО!
Во-первых, работа программиста должна быть простой ровно настолько,
чтобы его продукт хорошо продавался. Изыскания из области философии
никто не купит!
И потом, даже зная "правильный" ответ, всё равно бы ответил 3. Потому
что НЕ ХОЧУ работать и дня в конторе, где программисты занимаются
ерундой, а людей ценят не за работу, а за "Буратин".
HR-а который попробует принять какое-либо решение на основе этой задачи
— ГНАТЬ В ШЕЮ как некомпетентного клоуна. В то время как организация
бьётся над созданием продаваемых продуктов и сервисов в сжатые сроки,
это возомнившее о себе чудо пытается умничать во время решения самого
ключевого вопроса — набора людей.
ЭТО — ЮМОР, людЯм без чувства юмора противопоказано.
22.06.2012 20:28, abibok написал: > Правильный ответ: 5-2=3, потому что демонстрирует умение работать в > условиях неполных данных, когда значения неизвестных величин выбираются > так, чтобы задача имела практический смысл. Все остальное — это > заумствующая школота, которая завалит проект.
Здравствуйте, abibok, Вы писали:
A>Правильный ответ: 5-2=3, потому что демонстрирует умение работать в условиях неполных данных, когда значения неизвестных величин выбираются так, чтобы задача имела практический смысл. Все остальное — это заумствующая школота, которая завалит проект.
это как раз демонстрирует не умение (или не желание) определять границы где считать данные полными или не полными.
данная задача как раз должна показать умение выявлять начальные условия и устанавливать границы.
правильным ответом 3 будет только если отвечающий начала скажет, что у Буратино в начале не было ни одного яблока, иначе 3 это только дельта.
а если задачу переформулировать так:
орбиту метеоспутника подняли на 5 км, а затем опустили на 2 км. на какой высоте находится аппарат, по твоей логике 5-2=3 км.
или клиент положил на счет 5килобаксов, а потом снял 2 килобакса, по твоим умениям работать в условиях неполных данных у клиента на счету осталось 5 килобаксов. Я бы программистов с такими умениями работать в условиях неполных данных к критическим расчетам и близко бы не подпускал.
Вот прикинь, у тебя на счету 15 т.р. подходишь к банкомату и кладешь 5т.р., а потом делаешь оплату на 2 т.р., и тебе на чеке банкомат печатает что баланс твоего счета 3 т.р., а где остальные 18 т.р. деньги что там должны быть? ... А это программист умеющий работать в условиях неполных данных банку подарок сделал
Здравствуйте, abibok, Вы писали:
A>Правильный ответ: 5-2=3, потому что демонстрирует умение работать в условиях неполных данных, когда значения неизвестных величин выбираются так, чтобы задача имела практический смысл. Все остальное — это заумствующая школота, которая завалит проект.
Ну если мне не изменяет память, то правильный ответ 5, т.к. Буратино лично заявил Мальвине, что яблоки не отдаст.
Здравствуйте, Handie, Вы писали:
H>Для пятницы, есть очень интересная задача, которую задают кадидатам на собеседованиях. Цитирую
H>
H>сам любил задавать под конец собеседования тупые задачки типа "Буратино дали 5 яблок, потом 2 забрали, сколько яблок осталось у Буратино", но сразу предупреждал что задачки программерско-кодерские, и решение надо искать именно с точки зрения программерской.
H>Задачка оказалась совсем не простой. Главное в задаче что? Правильно — выбрать язык программирования и применить паттерны, показать так сказать класс программирования. Тут есть несколько походов.
H>1) Объектно ориентированный. Во первых надо создать класс Apple и переопределить оператор складывания яблок. Но ведь современные проги создаются по идеологии MVC а Apple это Model. Надо еще View — это будет класс AppleInspector и контроллер AppleAccountingBuratinoManager. Тут мы применили и объектно ориентированный дизайн и паттерны программирования. Не раскрыта тема метапрограммирования.
H>2) Метапрограммирование. В предыдущем случае мы написали класс Apple, но что будет если заказчику понадобятся груши? Правильно, класс Apple надо переименовать в класс AccountableAsset и сделать щаблоном. Во вторых, надо сделать инстанциацию количества ассетов на этапе компилляции, это на C++ делается через частичную специализацию когда у Буратино было 0 яблок, дали 5 и забрали 2. Частичная специализация шаблона даст нам частное решение на этапе компилляции. Общее решение останется в рантайме, но что делать, кто сказал что будет легко.
H>3) Функциональный подход. Императивные языки — вчерашний день. Компилятор сам должен вывести сколько у Буратино яблок. Мы должны задать только начальное состояние, представив подсчет яблок как совокупность последовательных состояний вычислительного процесса. Это же конечный автомат! Каждое добавление яблок изменят внутреннее состояние Буратино, каждый отъем яблок тоже сказывается на нем, причем отрицательно. Особенно полезен функциональный подход в связи с возможностью использования массового парралелизма, что позволит загрузить многопроцессорную систему.
H>Дальнейшие изыскания в объектно ориентированном дизайне показали — что буратино это контроллер! Тогда становится все ясно — яблоко это модель, Буратино это контроллер. Но контроллером яблок (в генерализованном виде AccountableAsset) может являться не только Буратино но и Бармалей. Тогда Буратино надо тоже генерализовать в виде ControllingActor. Ну осталось генерализовать View и у нас получается супергибкая модель, не не только Буратино может управлять владением яблок, но и Бармалей может владеть кокосами. Это же ахрененная гибкость получается, мы создали Univerasal Asset Management System. Это же практически архитектура логистического приложения!
H>Осталось только решить вопрос с финансированием. На месте кандидата я бы поинтересовался, готова ли контора оплатить дальнейшие изыскания в области управления ассетами. Вот, казалась бы простая задачка, а какая глубина за ней кроется!