Вопросы на собеседовании #6

Попробую сгрести интересные и достаточно простые задачи, некоторые относятся к типу "out of the box", некоторые решаются с помощью простой математики.

1. Про торт

Задача: Как поделить торт на 8 равных частей 3мя разрезами?

Делим на 4 части двумя разрезами перпендикулярно друг другу. А дальше есть как минимум 2 варианта продолжения:

  • Ставим кусочки друг на друга и режем их пополам одним разрезом
  • Разрезаем торт попрек сбоку

Т.о. получиться ровно 8 кусков одинакового размера, ну или почти, смотря как у вас работает рука и глазомер.

2. Про мешки

Задача: Как сложить 100 картофелин в 2 мешка так, чтобы в одном было в 2 раза больше чем в другом?

Банальной системой или математикой тут не решишь. Складываем 50 в один мешок и 50 в другой, после чего один мешок засовываем в другой и задача решена.

3. Про возраст

Задача: Встретились 2 ребенка и стали рассуждать о своем возрасте. Один из них сейчас старше другого в 3 раза, но всего через 2 года он будет старше всего лишь в 2 раза. Сколько детям лет?

Конечно задачу можно решить подбором, но попробуем подойти со стороны простой школьной математики 7ого класса(может уже и раньше). У нас однозначно есть 2 неизвестных:

  • X — возраст одного ребенка
  • Y — возраст второго ребенка

И есть 2 соотношения:

Сейчас один ребенок старше другого в 3 раза:

y = 3*x  

Через 2 года, один будет старше другого в 2 раза

y + 2 = 2*(x + 2)  

Получаем систему уравнений:

y = 3*x  
y = 2*x + 2  

Подставляя одно в другое, получим

x = 2  
y = 6  

И действительно, когда детям станет на 2 года больше разница будет всего в 2 раза

x = 4  
y = 8  

4. Про пруд

Задача: Вы владелец пруда. В одном его углу начинают бурно размножаться кувшинки. Каждый день их становится вдвое больше. Через 30 дней вы обнаруживаете, что ими заросла уже половина пруда. Вы достаточно ленивый товарищ, поэтому не хотите дергаться раньше времени, но если с кувшинками не бороться, то они все заполонят. Вы решаете, что хотите вмешаться только в последний день, перед тем как они полностью заполнят ваш пруд. Какой это день?

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

Кстати если кто-то знает интересные задачи, то с радостью готов их услышать, только не надо тащить их из книжек наподобие "Как сдвинуть гору Фудзи", я думаю её уже все читали.

Прочитать

[Отзыв]: Цель. Процесс непрерывного улучшения

Прочитав отзывы коллег(1, 2) по поводу этой книги, не мог пройти мимо и прикупил её.

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

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

Книгу осилил за 3 вечера, она действительно захватывает с первых страниц, но я бы не сказал, что открыла мне глаза на что-то, по крайней мере про основную цель как-то сразу ясно. Очень интересно было узнать про некие количественные показатели, на которых можно основываться когда делаешь выводы об успешности своей компании. Это я думаю было самым полезным из всего, что я там вычитал. С первых страниц у меня сложилось впечатление, что эта книга еще и призвана стимулировать вас на работу и поиск решения после, но прочитав однажды "Атлант расправил плечи" для меня уже сложно будет найти более крутую книгу-мотиватор.

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

"Цель. Процесс непрерывного улучшения" Элияху М. Голдратт, Джефф Кокс - The Goal: A Process of Ongoing Improvement ISBN 978-985-15-2181-0"Цель. Процесс непрерывного улучшения" Элияху М. Голдратт, Джефф Кокс - The Goal: A Process of Ongoing Improvement ISBN 978-985-15-2181-0

Прочитать

[Отзыв]: Программист-прагматик. Путь от подмастерья к мастеру

Закрывая очередной пункт из нашего списка "must-read" книг в компании, напомню, как я и писал ранее, это будет последняя чисто техническая книга на ближайшие пару месяцев.

Сие произведение вызвало у меня достаточно противоречивые чувства. Во-первых, оно приятно удивило хорошими сравнениями и внятными разъяснениями что есть что, во-вторых, поразило обилием орфографических ошибок и опечаток, настолько некачественно изданную книгу я давно не видел. Ну и в конце оно все-таки свалилось к капитанским вещам.

На счет сравнений и умных мыслей -- писал пару статей(1, 2) по поводу того, что рассматривается в этой книге. Мой совет прочитать первые 2 части, их интересно читать, все остальное в той или иной мере уже где-то было и написано достаточно скучным языком.

Из самой последней части понравилось несколько идей:

Пользователи приходят к нам с некоторым видением того, чего они хотят. Оно может быть неполным, противоречивым или технически невыполнимым, но оно принадлежит им, и подобно ребенку в Рождество, они вкладывают в него некоторые эмоции.

Пользователей надо восхищать. Обладатели устройств от Apple, вспомните с какими чувствами вы открываете коробочку со своим i что-то, как будто подарок от Деда Мороза лет в 7. Вот именно к этому и надо стремится, чтобы человек приходил к вам и чувствовал себя ребенком, который готов радоваться и удивляться! Но яблочный гигант на самом деле делает еще круче, он как бы "управляет" нашими ожиданиями, т.е. говорит нам, на самом деле ты хочешь эту штуку, потому что она вот настолько крута! А когда мы открываем, то находим еще чуть чуть того о чем нам не сказали и восхищаемся еще больше.

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

В точку! Я даже не знаю что тут еще можно добавить... Просто вся суть работы в этих строчках.

В общем-то все, что я хотел сказать по этой книге. Осталось добавить только ссылку:

"Программист-прагматик. Путь от подмастерья к мастеру" Э. Хант, Д. Томас  
The Pragmatic Programmer: From Journeyman to Master ISBN 5-85582-213-3"Программист-прагматик. Путь от подмастерья к мастеру" Э. Хант, Д. Томас The Pragmatic Programmer: From Journeyman to Master ISBN 5-85582-213-3

Прочитать

[Книги]: Что почитать.

Читая последнюю книгу, отзыв, о которой скоро выложу, понял что уже надоело изучать техническую литературу с достаточно общими высказываниями и подходами о программировании и IT, поэтому на ближайшие 2 месяца зимы переключусь на несколько другие области. В эти выходные мне придут аж целых 5 книг + есть 1 на примете, которую стоит прочесть.

Собственно список:

"Цель. Процесс непрерывного улучшения" Элияху М. Голдратт, Джефф Кокс - The Goal: A Process of Ongoing Improvement ISBN 978-985-15-2181-0"Цель. Процесс непрерывного улучшения" Элияху М. Голдратт, Джефф Кокс - The Goal: A Process of Ongoing Improvement ISBN 978-985-15-2181-0
"Искусство системного мышления. Необходимые знания о системах и творческом подходе к решению проблем" Джозеф О'Коннор, Иан Макдермотт - The Art of Systems Thinking: Essential Skills for Creativity and Problem Solving ISBN 978-5-9614-1589-6"Искусство системного мышления. Необходимые знания о системах и творческом подходе к решению проблем" Джозеф О'Коннор, Иан Макдермотт - The Art of Systems Thinking: Essential Skills for Creativity and Problem Solving ISBN 978-5-9614-1589-6
"Теория ограничений Голдратта. Системный подход к непрерывному совершенствованию" Уильям Детмер - Goldratt's Theory of Constraints: A Systems Approach to Continuous Improvement ISBN 978-5-9614-4973-0"Теория ограничений Голдратта. Системный подход к непрерывному совершенствованию" Уильям Детмер - Goldratt's Theory of Constraints: A Systems Approach to Continuous Improvement ISBN 978-5-9614-4973-0
"Руководство фасилитатора. Как привести группу к принятию совместного решения" -  Facilitator's Guide to Participatory Decision-Making ISBN 978-5-905955-05-1"Руководство фасилитатора. Как привести группу к принятию совместного решения" - Facilitator's Guide to Participatory Decision-Making ISBN 978-5-905955-05-1
"Найти идею. Введение в ТРИЗ - теорию решения изобретательских задач" Генрих Альтшуллер - ISBN 978-5-9614-4976-1"Найти идею. Введение в ТРИЗ - теорию решения изобретательских задач" Генрих Альтшуллер - ISBN 978-5-9614-4976-1
"Источник" Айн Рэнд - The Fountainhead ISBN 978-5-9614-5081-1"Источник" Айн Рэнд - The Fountainhead ISBN 978-5-9614-5081-1

Прочитать

Языки

Продолжаю черпать из умных книг всякие мысли:

Границы моего языка есть границы моего мира.

Людвиг фон Витгенштейн

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

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

Это в продолжение темы портфеля знаний и необходимости изучать хотя бы по одному новому языку в год. Этим вы расширяете не только свой кругозор, но и свою способность увидеть проблему и знать её решение заранее. Именно поэтому стоит прочитать хотя бы одну книгу про функциональный подход, чтобы хотя бы понимать о чем это и зачем это.

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

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

Прочитать