На мой взгляд, самая моя слабая сторона, как разработчика, это очень посредственное знание базовых алгоритмов и структур данных. Из университета я вынес только: массивы, списки, стеки, двоичные деревья и сортировку пузырьком. Не густо, мягко говоря. Потом уже, работая по специальности, я разобрался с быстрой сортировкой и сортировкой слияниями, хэшами, узнал кое-какие детали про сложности алгоритмов и дальше по-верхам. Что уже лучше, но на мой взгляд все равно не достаточно. Те же красно-черные деревья для меня темный лес, что однозначно не радует.
Само собой, я не раз планировал "сесть и разобраться", но всегда находилось что-то более срочное, более интересное и т.д. Как не крути, в работе эти знания совершенно не нужны, а на большинстве собеседований ничего сложнее "развернуть список", "подсчитать число слов в строке" или "написать itoa" не спрашивают, а такое любой вменяемый программист напишет не задумываясь.
Вобщем, тянул я с алгоритмами тянул, и тут приглашает на интервью Майкрософт. Теперь, наконец-то, у меня появился стимул укрепить мою последнюю слабую сторону!
Ну а сегодня я пообщался по Skype с чуваком из Майкрософта, перед тем как пригласить на собеседование, они делают небольшой отбор. Я, по началу, ожидал что будет что-то типа интервью с Гугло-индусами, когда на другой стороне провода шуршат листочком и требуют дать ответ как можно ближе к тому что на нем записано, но нет, чувак был предельно адекватен. Поговорили про опыт и завершенные проекты; поговорили про потоки, гонки, дедлоки; решил элементарную задачку "подсчитать сколько выставленных в 1 бит в числе"; ну и просто о жизни потрепались. Мне даже понравилось.