Собеседование
Собеседовался я недавно в одну компанию на программиста. Они занимаются написанием игр: браузерки и под смартфоны. И меня там очень долго и с пристрастием трое допрашивали на тему множественного наследования. Причём не для случая реализации классом интерфейсов, а именно со всем ромбовидным хардкором, переопределением и перекрытием методов и так далее.
На предыдущем месте работы один мой коллега, которого я уважал как человека и программиста, как-то сказал фразу: "Множественное наследование имеет смысл использовать либо если ты гений, либо если долбоёб." На что я и указал собеседующим, но нейтрально, в стиле: "Просто не надо так писать". Но их этот ответ, конечно же, не устроил:
— А если уже так написано?
— Посмотреть, кто так написал, и спросить зачем.
— Нет, ну, давайте абстрагируемся, вот код...
Собеседования тем хороши, что самому тоже можно задавать вопросы. Это не экзамен, на котором профессор, мысленно теребя свой анус власти, с нескрываемым неуважением визгнет: "Здесь я задаю вопросы, а ты отвечаешь!" Поэтому после демонстрации невладения непрактичными механизмами я спросил:
— А вот как бы вы стреляли из пистолета, из дула которого вылетает всегда две пули: одна как обычно, а вторая - в противоположную сторону?
Повисла пауза. По глазам одного собеседующего было видно, что ему захотелось свести это к шутке, но я совершенно не был на это настроен.
— Зачем же его таким сделали?
— Ну, не знаю. Может, оптимизация для тех, кто хочет застрелить кого-нибудь, а потом покончить с собой. Это не имеет значения, давайте абстрагируемся, вот пистолет. Как из него стрелять, при условии, что самому бы пулю получить не хотелось?
— Ну, наверное, уклоняться.
— А целиться тогда как?
— Сначала можно прицелиться, а потом убрать голову и выстрелить.
— Но прицел ведь собьётся.
— Ну да...
Один из собеседующих, который всё это время молчал, загорелся идеей:
— А что если сзади пистолета поставить зеркало, а стрелять как бы сбоку?
— Ну, во-первых, целиться будет сложнее. Во-вторых, пуля, что вылетит сзади, разобьёт зеркало. В-третьих, вы собираетесь везде таскать зеркало? В-четвёртых, вы собираетесь стоять к опасному животному или вооружённому преступнику спиной или боком?
— Зеркало можно маленьким сделать, заведомо там, где в него не будет пуля попадать. Как вариант, можно видеокамеру с прицелом поставить...
Тот, что хотел свести к шутке, перебил:
— А можно изогнуть ствол с обеих сторон, как подкову. Получится что-то вроде двустволки, где обе пули будут лететь в одну сторону.
— Ну, я думаю, вряд ли получится изогнуть дуло. И курок нужно будет нажимать в другую сторону, изогнув руку. Да и прицела не будет.
— Ну, сделать новый прицел.
— А старый куда?
— Старый просто останется, не мешает.
Таким образом, программисты предлагали всё новые и новые варианты. В конце концов я сказал:
— А знаете как бы я поступил?
— Как же?
— Я бы не стал использовать такой пистолет вообще. Просто взял бы вместо него нормальный, обычный. И использовал его так, как его обычно используют.
— Ну-у, не, загадка ведь не в том была...
— Да нет, в том и была. Просто не нужно использовать такие вещи. Ствол не для того создан, чтобы с двух сторон стрелять. А зеркала, дополнительные мушки и гнутые стволы - это всё то говно, что вы сделаете, чтобы предыдущее говно работало. А можно было не творить говно просто в самом начале, отказавшись от его использования, не обрекая себя на замкнутный круг говна.
Да не, на самом деле я не спрашивал ничего. Я просто сфейлил по сложным вопросам, завалил собеседование, а потом плакался друзьям в личку, что все эти нюансы не нужны и говно.
-Автор: Иван Гладин (multiprogramm)