Кажется, существует ОГРОМНОЕ несоответствие между тем, что я ожидаю от кого-то, кто несколько лет изучал программирование в университете, и тем, что на самом деле знают.
Я не чувствую, что задаю слишком сложные вопросы в интервью. Некоторые из моих обычных вопросов:
В чем разница между ссылочным типом и типом значения?
Если кажется, что интервьюируемый действительно не понимает свой собственный ответ, или если он не знает терминологию, которую я использую, я попадаю в более подробные сведения, прося его объяснить мне, что происходит, когда я пишу int i = 0; в методе, как насчет объекта o = 0, объекта o = new MyClass () и т. д ...
По сути, я делаю все, что в моих силах, чтобы обмануть собеседника и рассказать мне о стеке вызовов, куче и т. Д., И я стараюсь придерживаться концепций, не зависящих от языка. Если собеседник скажет мне, что он много сделал на C, C ++ или C #, я углублюсь в конкретный язык и, возможно, в детали реализации.
При необходимости я спрашиваю собеседника о том, что такое колл-стэк или где хранятся аргументы, переданные функции на нужном им языке.
большинство опрошенных просто не имеют представления о том, что такое колл-стэк, не говоря уже о соображениях бокса и т. д.
В чем разница между абстрактным классом и интерфейсом. В каких случаях вы должны использовать один над другим?
Обычно я также прошу их представить дизайн небольшой библиотеки с вариантом использования, целью которого является использование некоторого наследования и некоторых абстрактных фабрик.
Большинство опрошенных не имеют ни малейшего представления о том, какой может быть истинная цель наследования. Они обычно знают некоторые ключевые слова (виртуальные, переопределить и т. Д.), Но не знают, когда их использовать, не говоря уже о том, что такое виртуальная таблица.
Несмотря на то, что я заранее просматриваю резюме, даже для людей с 5-летним опытом работы в реальных проектах со сложной архитектурой, я бы сказал, что менее 25% всех опрошенных могут правильно ответить на эти два вопроса. И когда я говорю правильно, я не имею в виду «углубленный» ... просто чтобы иметь приблизительное представление о том, что такое концепция.
Что касается юниоров, у меня все хорошо с тем, что я найму кого-то, кто не знает, как хорошо организовать свое время, или кого-то, кто, например, не привык к процессам промышленного строительства, но у меня такое чувство, что если кто-то не слышал этого слова " callstack "после нескольких лет изучения информатики он либо глуп, либо немотивирован, либо выбрал свой университет очень неразумно.
Вы думаете, я здесь слишком экстремист? Распространено ли изучать эти основные понятия после окончания университета? Вы знаете людей, которые не были знакомы с ними и через несколько лет стали очень хорошими разработчиками программного обеспечения? И вы думаете, что у моей компании могут быть проблемы с привлечением талантливых людей, или вы сталкиваетесь с такими же проблемами в вашем собственном процессе найма?
Редактировать. Что касается «немедленного типа», то это был просто буквальный перевод с французского на английский, как мы обычно делаем наши интервью на французском языке. Я исправил это в своем вопросе. Но, тем не менее, я думаю, вы все прекрасно понимаете, что я имел в виду, что делает мою точку зрения, не так ли?
Ответы:
Терминология является распространенным недостатком в ситуации интервью.
Вы задаете интервьюируемому вопрос с использованием терминологии, которая что-то для вас значит, но интервьюируемый может знать это по другому термину или может просто знать общую теорию без применения к конкретным языкам или средам. Недоразумения. Ни одна из сторон не счастлива.
На самом деле выясняется, что собеседник прекрасно понимает, что некоторые значения могут храниться непосредственно в регистре, а другие ссылаются на кусок памяти в другом месте, но поскольку вы задаете вопрос в определенном домене, то есть то, о чем вы спрашиваете, и То, о чем вы хотите, чтобы собеседник сказал вам, не очень понятно.
Может быть, вы попадаете во множество ситуаций, когда собеседник внезапно щелкает и говорит «О , это то , о чем вы говорите», а затем объясняет вполне адекватно.
Это сложный баланс, потому что программисты, не окончившие университет, не будут иметь разнообразного опыта, который дает им развитие в реальном мире в командной среде. Между тем, опытные разработчики нередко не будут помнить (или даже интересоваться) все то, чему они научились в университете, потому что это просто неактуально для их повседневного использования.
Эти два типа людей (да - это интервьюируемый и интервьюер) нужно научиться общаться с друг с другом , прежде чем вы можете узнать о друг друга. Ответственность за то, чтобы это произошло, лежит на человеке с большим опытом (интервьюер).
Не говоря уже о том, что некоторые люди получают полный сбой памяти в интервью. Я в том числе. Я помню, как меня попросили написать программу на C, и я не мог на всю жизнь вспомнить символ, используемый для доступа к члену по указателю (->), и мне пришлось кого-то спрашивать. Это было даже не для моей первой работы. Мальчик этот момент мучил меня последние 15 лет :-)
Гораздо полезнее, на мой взгляд, способность общаться, уметь эффективно и полно решать проблемы; подбирать вещи быстро; проявлять позитивное острое отношение; хорошо взаимодействовать с другими людьми и другими основными ценностями.
Не сдавайтесь интервьюируемым, потому что они не знают, что такое непосредственный тип. Двигаться дальше.
источник
Вы запрашиваете знания по конкретному языку, и используемые вами термины не используются на 100% одинаково на всех языках. Я, например, понятия не имею, что такое «непосредственный тип».
Кроме того, учтите, что в университете учат не тому, как использовать стандартный код в X, а изучению множества базовых концепций и рассмотрению различных парадигм программирования. Другими словами, это очень похоже на водительские права - даже если вы знаете основную теорию, вам все еще нужно много практических занятий.
источник
«Я слышу и забываю. Я вижу и помню. Я понимаю и понимаю». (И, по моему мнению, понимание ведет к лучшему удержанию памяти.)
Проще говоря, недавний выпускник не имеет большого опыта, поэтому, как заметил кто-то другой, у них не будет гораздо большего, чем необходимый минимум знаний, независимо от того, какой у них «выбранный» язык.
Я пошел в колледж, который был разработан специально для оптимизации обучения по выбранной специальности (так, например, у вас не было бы исторической литературы, если бы вы были магистрантом CS; самое близкое, что вы можете получить к исторической литературе - это научная фантастика), и Прямо из колледжа я не смог бы рассказать вам, в чем интерфейс, не говоря уже о его отличии от абстрактного класса, хотя мы и узнали об абстракции (и интерфейсов в .Net, технологии, которую я изучил, предостаточно). Мы могли бы затронуть интерфейсы, но они потерялись во всех других вещах, которые нам нужно было знать, чтобы пройти класс. Лишь после моей первой работы в колледже я узнал об интерфейсах, особенно осмысленным образом.
Вы упомянули о проведении собеседований на французском языке, что свидетельствует о том, что мы находимся в разных странах, поэтому ваш пробег может варьироваться, но здесь, в США, колледжи, как известно, отстают от времени, когда речь заходит о технологиях. Поэтому, если вы не имеете дело со зрелыми языками (C / C ++, COBOL и т. Д.), Вполне вероятно, что то, что вы использовали даже в течение многих лет, может быть недоступно в той версии, на которой изучали студенты. Например, в .Net 3.0 были представлены Entity Framework, WPF, WCF и множество других интересных вещей, но даже моя школа все еще застряла на .Net 1.1 и 2.0 (что означало застрять в ADO.NET и даже не изучать Object -Реляционное картографирование). Школа, использующая PHP, может застрять на (не ООП) PHP 4.
Имейте также в виду, что студент должен взять тонну информации, которая часто используется только в течение короткого периода времени. «Продвинутые» концепции, такие как абстракция, часто преподаются в конце урока, где у ученика может быть только неделя, чтобы поиграть с ним, в то время как он борется с другими уроками, которые он / она должен взять, и, возможно, на верхняя часть работы с частичной или полной занятостью. Объедините все это вместе, и это удивительно, что человек может вспомнить все , а тем более сохранить все это прямо.
По крайней мере, в США недавний выпускник, как часто полагают, не знает ничего, кроме общих основ (возможно, разницы между передачей по значению и передачей по ссылке), потому что понимают, что общая теория и решение проблем - это основная часть школа, не изучая все тонкости данного языка.
Я рекомендую использовать вопросы, которые у вас были больше, как показатель того, что вам нужно учить / переучивать их (помните, вполне возможно, что они просто не выучили термин, который вы пытаетесь использовать, даже если Вы думаете, что это вездесуще), в отличие от того, является ли собеседник "бесполезным". Объедините это с оценкой того, насколько они готовы учиться и каковы их общие навыки решения проблем (серьезно, дайте им загадку, чтобы решить и посмотрите, как они это делают), и вы вполне можете иметь будущую рок-звезду, которую вы возможно, упустили, потому что они не знали, что вы имели в виду под "callstack".
источник
У вас довольно много узких взглядов, и вы принимаете их неявно.
Насколько мне известно, нет университета, где люди изучают программирование в течение нескольких лет. Университеты предлагают курсы по информатике, одним из которых является программирование.
Правило большого пальца: если Лисп может обойтись без различия, это только беспорядок;)
Говоря о понятиях, не зависящих от языка, это хорошая идея. Однако ни куча, ни стек не зависят от языка.
Все эти языки имеют спецификации. Реализация не определяется языком. C и C ++ могут быть скомпилированы с использованием LLVM для запуска на Flash Player или любой среде выполнения JavaScript. Это делает ваши предположения о распределении кучи и стека недействительными.
С C # это почти то же самое. C # JITed перед выполнением с большой оптимизацией, что может быть сделано. Локальные переменные, которые захватываются замыканиями, в конечном итоге оказываются в куче, а не в стеке, тогда как анализ escape позволяет хранить локальные объекты области видимости (которые обычно должны попадать в кучу) для хранения в стеке. Правильное распределение регистров также значительно уменьшит необходимость выделения стеков.
Что бы вы спросили кого-то, кто имеет только большой опыт программирования на Haskell? :П
Основная идея автобокса заключается в том, что примитивы могут также рассматриваться как объекты (или, по крайней мере, значения, тип которых может быть обнаружен во время выполнения). В отношении этой абстракции есть три типа языков:
Я не понимаю, почему люди не должны использовать языки категории 1 (на самом деле это хорошая идея). Я не понимаю, почему люди, которые используют языки категории 2, должны беспокоиться. И я думаю, что каждый, кто использует язык категории 3, то есть тот, где основная семантическая функция просто нарушена, использует неправильный язык.
Это очень субъективно и действительно зависит от языка. C ++ не имеет интерфейсов. Objective-C не имеет абстрактных классов. Я бы сказал, что любой язык, который имеет оба, нуждается в редизайне. Многие современные языки используют черты, миксины, категории, роли и подобные конструкции, чтобы обеспечить гораздо более чистые решения для повторного использования кода, чем наследование частичных реализаций. Языки на основе прототипов вообще не имеют классов.
В конечном итоге это сложный и спорный вопрос. Интервью вряд ли является подходящим местом для решения этого вопроса, и я бы не стал претендовать на то, чтобы претендовать на младшую должность, чтобы не дать мне хороший ответ.
Существует ряд объектно-ориентированных языков, которые не используют наследование или классические таблицы.
Мой совет:
Важно то, что вы понимаете, как эти простые и разрозненные факты могут быть применены для разработки гибких и поддерживаемых решений сложных проблем.
Чтобы добраться до реального вопроса:
У всех компаний есть проблемы с привлечением умелых людей, кроме, возможно, крупных игроков. Это потому, что их мало. И из-за предположения, что университет делает людей умелыми. Это не так. Это делает их знающими (предположим, что и студент, и университет выдерживают свою часть сделки). Опыт - это то, что делает людей умелыми.
Есть несколько человек, которые накопили опыт до поступления в университет и продолжают делать это во время учебы. Потому что им нравится программирование и потому, что, когда они получают какую-то новую идею во время курса, они попытаются понять, как они могут ее использовать, в первую очередь они вернутся домой. Это те люди, которых вы хотели бы нанять. Но их мало.
Это страсть к программированию и самосовершенствованию, а также стремление сделать программистов хорошими. Во время.
Я думаю, что вы должны понимать, что, к сожалению, большинство людей поступят в университет и покинут его без достаточного опыта программирования.
В то же время наша отрасль остро нуждается в опытных программистах. Поэтому я считаю, что наша отраслевая миссия состоит в том, чтобы на самом деле попытаться вмешаться. И интервьюировать кандидатов на младшие должности, то, что вы реально ищете, это люди, которые хотят учиться и совершенствоваться. И вы должны тщательно выбирать, потому что вам нужно будет вкладывать много энергии, и вы не хотите, чтобы это пропало даром.
Думайте об этом как о найме свежей крови, чтобы стать гонщиком для вашей гоночной команды: Хороший гонщик обладает достаточным пониманием механики, чтобы лучше всего использовать свою машину, но одни только эти знания бесполезны (это даже не большая голова Начните). То, что вы ищете, это кто-то, кто готов усердно работать над своим собственным улучшением и хорошо работать с вашей командой.
источник
Независимо от термина «немедленный тип», о котором я понятия не имею (тип значения? Хорошо, я не был уверен, спасибо за обновление), я думаю, что вы правы в своих вопросах и абсолютно не экстремистские. Это ответственные вопросы, если кто-то выходит из школы. Тем не менее, я не буду увольнять кандидатов сразу, есть еще те, которые могут иметь потенциал, потому что они хотят учиться.
Чтобы продолжить аналогию с водительскими правами: некоторым людям все равно, что происходит, когда они вставляют ключ (или нажимают кнопку «Пуск»). Они просто делают это и едут. Это также не означает, что они бесполезны, просто им потребуется время, чтобы достичь славы ;-)
Просто личное замечание по поводу степени / диплома: в настоящее время я работаю с людьми с биохимией и промышленным опытом, которые имеют несколько лет опыта работы в области информационных технологий, а также с некоторыми «опытными» парнями с опытом работы в CS, и думаю, кто из них наиболее осведомлен о том, как работает двигатель автомобиля? Да, это не парни, которые изучали CS! Так что я просто испытываю тот факт, что диплом не всегда имеет значение!
источник
Обычно я не задаю конкретные вопросы о терминологии или определениях во время интервью. Как отмечалось в других ответах, у людей разные термины для разных понятий, и, хотя они могут концептуально понять предмет, они не могут передать это вам.
С юниорами я сильно сосредоточен на их стажировках или школьных проектах. Я задаю вопросы на вопросы о них, позволяю им формулировать ответы, и затем я начинаю углубляться в их реальное участие в проекте, что они узнали, что они чувствовали.
Как правило, если человек был в своем проекте, то он не может дать мне удовлетворительных ответов, так что обычно это довольно легко определить. Просто будьте осторожны, чтобы не принять нервного и замкнутого за бескорыстный и не вовлеченный.
Быть способным определить хорошего кандидата, который застенчив и замкнут, немного сложнее, но тогда культура, в которой я работаю, не будет полезна для замкнутого и застенчивого разработчика, поэтому, если они не смогут провести продуктивный подробный разговор со мной, тогда они не подходят
источник
Это очень несправедливо. Когда вы учитесь, все, что вы можете сделать, это выбрать университет с самым высоким рейтингом, в который вы попадете, или, может быть, тот, который рекламирует, позволяя вам играть с роботизированными собаками, играющими в футбол. Ничего больше. Вы можете оценить университетский курс только после того, как закончите его, затем ушли и проработали несколько лет в промышленности и создали несколько нетривиальных проектов.
Даже если на каждом из таких курсов вы увидели огромную неоновую вывеску с надписью «МЫ НЕ ОБУЧАЕМ СТЕКЛА ВЫЗОВА», то чего вы ждете от студентов? Проведите месяцы, исследуя его, чтобы они могли действительно понять, что это значит и сколько им понадобится того, кто научит этому? Для каждого курса с каждой комбинацией знаков?
Люди не могут выбрать свое образование, реально.
источник
При опросе новых выпускников я придерживаюсь тем, перечисленных в их резюме. Если они использовали Java, я спрошу их о Java. Если они использовали Blub, то я полчаса читаю о Blub и спрашиваю их об этом. Но я всегда спрашиваю, используя ключевые слова языка. Если это Java, то я буду спрашивать о «расширяет» и «реализует», но не «подкласс» и «наследует». Я ожидаю, что новые выпускники смогут говорить о некотором написанном ими коде, уметь решать простую задачу программирования и понимать основные структуры данных (хеш-таблицы и деревья).
источник
Как директор, который разработал процесс собеседования, я могу рассказать вам о том, что наша компания ожидает от новых выпускников: я ожидаю людей, которые могут читать документацию и применять знания. Таким образом, у нас есть несколько очень практических задач, которые мы просим их выполнить. Это простые задачи по написанию кода, не намного сложнее, чем обычные упражнения в колледже (опытные «хорошие» разработчики могут справиться с этим за 15 минут). Кандидату предоставляется рабочая станция с доступом в Интернет, компилятором (в нашем случае Visual Studio) и файлами справки.
Если они не могут написать код в этих условиях, они не получают вознаграждение за наем. Просто как тот. Простое оправдание «ну, я не знаю языка» никогда не шутило со мной, потому что каждый кандидат, который приходит сюда на собеседование, знает, что будет тест, он знает языки и инструменты, которые мы используем заранее. Вы можете скачать Visual Studio Express дома и сделать некоторые основы, прежде чем войти и пройти тест начального уровня, тех, кто не беспокоит ... ну, это то, что я называю красным флагом.
источник