Есть миллион статей на тему "Как проводить технические интервью" и еще больше про то, как их проходить: списки вопросов, списки ответов, примеры задачек и т.п. К сожалению, у многих людей, которые только начинают свой путь профессионального программирования, создается впечатление, что нужно выучить типовые вопросы, решить типовые задачки и дело в шляпе.
Нижеследующие абзацы - это взгляд на интервью не с позиции интервьюера или кандидата, а скорее напутствие тем, кто ищет свою первую работу.
Не секрет, что IT рынок Украины растет: проектов становится больше, а количество людей свободных людей становится меньше и нанимать людей с рынка становиться тяжелей. Помню, как многие посмеивались с Серва и его тренинг-центра ("Кузница кадров", "Они учат - мы выбираем"), но прошло пару лет и уже в куче компаний открылись курсы подготовки, тренинг-центры, интернатура и прочие способы отбора талантливых новичков.
Данные и цифры ниже - это мои субъективные выводы, которые не претендуют на объективность.
Найти на рынке смышленого молодого (до года опыта) специалиста задача непростая и порой занимает не меньше, чем хантинг какого-нить зубра с надцатилетним стажем.
Задача попроще: отобрать интернов из числа смышленых студентов для стажировки на реальном проектах. Период стажировки - 3 месяца. Цель - качественный рост людей, подготовка квалифицированного персонала. Принято к осуществлению больше года назад, так и работаем.
Основная масса новых людей, которые приходят на рынок - это студенты 3-5х курсов, в основном технические специальности. Чему их учили в универах? Да там целый список из 20+ технологий, языков и прочего добра, но в лучшем случае человек имеет необходимый общий уровень знаний и немного стыкался с 1-2 языками программирования. Если видим человека, у которого в резюме список умений длиной со простыню, то он явно выписал все, что делал на лабораторных работах. Вывод первый:
Отбор людей идет в несколько этапов. Этап первый - базовый отсев. Задача - отсеять людей, которые не дотягивают до определенного "приемлемого" уровня. Способ - как правило, тестирование, реже - телефонные интервью. По статистике, процентов 80-85 потока отсеивается на этом этапе и именно этот факт сподвиг меня на написание сего опуса.
Прежде всего, в чем же причина такого провала? Как правило, студенты не имеют понятия чего от них, собственно, требуется. Кто-то прочел одну книжку по С и успокоился, кто-то сайт на HTML написал, но в целом со стороны университетов нет пинка в нужном направлении, а большинство студентов инертны и спохватываются уже тогда, когда все вокруг уже бегают со своими резюме по конторам и конторкам. Как и в любом другом деле, тут главное - начать. Я не фанат какого-либо языка, но всегда советую в начале своего пути программиста делать ставку на С/С++ и поясню почему: с них просто перепрыгнуть практически куда угодно. Будь то С# или Java, голый С или PHP - с С/С++ процесс переезда всегда проще, потому что:
Читайте книги, пишите программы для себя: найдите что угодно, что может быть вам полезно (автоматический рассчет курсовых работ по определенному предмету, к примеру) и пишите, ведь книгу прочесть - это одно, а вот ее правильно применить куда сложнее.
Хорошо, тесты пройдены, впереди -техническое интервью по С/С++. Теория + задачи - вот обычный план собеседования с молодым специалистом. Нужно быть готовым писать код на бумажке - главное тут не то, как вы напишете (хотя и это будет учитываться), но что написано и какие идеи двигали человеком. Мыслить вслух очень полезно - это показывает ход ваших размышлений и помогает составить о вас представление.
Типичный набор тем, к которым нужно быть готовым:
Книги, которые я обычно рекоммендую людям:
- А почему решил стать программистом?
- Да нравится мне программки писать.
- А что написал для себя, кроме лабораторных работ?
- Да ничего...
Надеюсь кому-нибудь из тех, у кого желание есть, поможет сей сумбурный опус.
Stay tuned!
Нижеследующие абзацы - это взгляд на интервью не с позиции интервьюера или кандидата, а скорее напутствие тем, кто ищет свою первую работу.
Не секрет, что IT рынок Украины растет: проектов становится больше, а количество людей свободных людей становится меньше и нанимать людей с рынка становиться тяжелей. Помню, как многие посмеивались с Серва и его тренинг-центра ("Кузница кадров", "Они учат - мы выбираем"), но прошло пару лет и уже в куче компаний открылись курсы подготовки, тренинг-центры, интернатура и прочие способы отбора талантливых новичков.
Данные и цифры ниже - это мои субъективные выводы, которые не претендуют на объективность.
Найти на рынке смышленого молодого (до года опыта) специалиста задача непростая и порой занимает не меньше, чем хантинг какого-нить зубра с надцатилетним стажем.
Задача попроще: отобрать интернов из числа смышленых студентов для стажировки на реальном проектах. Период стажировки - 3 месяца. Цель - качественный рост людей, подготовка квалифицированного персонала. Принято к осуществлению больше года назад, так и работаем.
Основная масса новых людей, которые приходят на рынок - это студенты 3-5х курсов, в основном технические специальности. Чему их учили в универах? Да там целый список из 20+ технологий, языков и прочего добра, но в лучшем случае человек имеет необходимый общий уровень знаний и немного стыкался с 1-2 языками программирования. Если видим человека, у которого в резюме список умений длиной со простыню, то он явно выписал все, что делал на лабораторных работах. Вывод первый:
Нет опыта - короткое резюме. Знаю алгоритмы, чуток работал с С++ и/или Java, слышал про потоки и процессы.Краткость - сестра таланта, от людей без опыта не ждут и тем более не требуют внушительного списка прикладных знаний. Есть что-то реальное - пишите, нет - тогда пусть лучше будет два абзаца.
Отбор людей идет в несколько этапов. Этап первый - базовый отсев. Задача - отсеять людей, которые не дотягивают до определенного "приемлемого" уровня. Способ - как правило, тестирование, реже - телефонные интервью. По статистике, процентов 80-85 потока отсеивается на этом этапе и именно этот факт сподвиг меня на написание сего опуса.
Прежде всего, в чем же причина такого провала? Как правило, студенты не имеют понятия чего от них, собственно, требуется. Кто-то прочел одну книжку по С и успокоился, кто-то сайт на HTML написал, но в целом со стороны университетов нет пинка в нужном направлении, а большинство студентов инертны и спохватываются уже тогда, когда все вокруг уже бегают со своими резюме по конторам и конторкам. Как и в любом другом деле, тут главное - начать. Я не фанат какого-либо языка, но всегда советую в начале своего пути программиста делать ставку на С/С++ и поясню почему: с них просто перепрыгнуть практически куда угодно. Будь то С# или Java, голый С или PHP - с С/С++ процесс переезда всегда проще, потому что:
- Вы знаете низкоуровневые основы (робота с памятью, указатели, биты/байты)
- Столкнулись с OOP
- С/C++ дает возможность выстрелить себе в ногу при неосторожном обращении с ним - нет песочниц, а взамен memory overrun, race conditions и еще куча приятных вещей.
Для обучения и набивания первых шишек я - за С/С++.Не хотите С++, ибо Java кросс-платформенная и там все намного круче? Нет проблем, но базовые вещи по работе с памятью, стеком и прочими вещами прочитать все-равно будет нужно.
Читайте книги, пишите программы для себя: найдите что угодно, что может быть вам полезно (автоматический рассчет курсовых работ по определенному предмету, к примеру) и пишите, ведь книгу прочесть - это одно, а вот ее правильно применить куда сложнее.
Хорошо, тесты пройдены, впереди -техническое интервью по С/С++. Теория + задачи - вот обычный план собеседования с молодым специалистом. Нужно быть готовым писать код на бумажке - главное тут не то, как вы напишете (хотя и это будет учитываться), но что написано и какие идеи двигали человеком. Мыслить вслух очень полезно - это показывает ход ваших размышлений и помогает составить о вас представление.
Типичный набор тем, к которым нужно быть готовым:
- Биты/байты, работа с памятью, указатели.
- Основы ООП (больше - лучше).
- Базовые особенности языка (к примеру, незнание понятия "конструктор по-умолчанию" - это плохо).
- Базовые алгоритмы и структуры данных. Понятие вычислительной сложности алгоритма, сравнение вектор-список, пара базовых алгоритмов поиска/сортировки.
- Большой плюс - процессы/потоки, синхронизация, межпроцессорное взаимодействие. Иметь полное понимание без опыта тяжело, но основы знать крайне желательно.
- Логика. Я не сторонник олимпиадных задач на собеседованиях, но умение на основе фактов делать логические выводы и искать нестандартные подходы для програамиста обязательно.
Кандидат справляется с базовыми вопросами - получает вопросы посложней, не для того чтобы загнать его в угол, а чтоб понять объем знаний.
Книги, которые я обычно рекоммендую людям:
C++ direction:
- Must-read:
- Stanley B. Lippman “Essential C++”
- Jeffrey Richter "Windows via C/C++"
- Optional (recommended for further reading)
- Steve McConnell "Code Complete"
- Scott Meyers "Effective С++", "More Effective C++
- Donald E. Knuth "The Art of Computer Programming" - по конкретному типу алгоритмов
- А почему решил стать программистом?
- Да нравится мне программки писать.
- А что написал для себя, кроме лабораторных работ?
- Да ничего...
Надеюсь кому-нибудь из тех, у кого желание есть, поможет сей сумбурный опус.
Stay tuned!
спс за статью:)
ОтветитьУдалитьИнтересная статья. Хотелось бы получить список рекомендуемой литературы по Java а не только C++.
ОтветитьУдалить