Добрался до формулирования пары идей, которые могут оказаться полезны кому-нибудь в деле профессионального роста и поиска работы. Речь идёт о программировании и офисной работе (про фриланс мне пока рано вещать), но приведённая информация может быть как-то спроецирована и на соседствующие или просто похожие сферы.
Cразу хочу сказать, что не считаю офис штампом, однако при любом раскладе работа в обычной штатной команде всегда объективно легче самостоятельных программных забегов, даёт в разы меньше свободы организации рабочего пространства, но вот в плане возможностей обучения обычно ничем не хуже — а именно это и надо использовать на максимум. К тому же, личное общение может сильно упростить взаимодействие и намного лучше любых ухищрений «виртуальных офисов» и скайпа. Кстати про обучение, есть мнение, что активно обучаться и копать несколько сфер (засиживаться в одной надолго вредно) надо быть готовым лет 15.
Итак. Проработав несколько месяцев в «Билайне», меня озаботил вопрос «когда начнут платить больше?». Это было год назад, в разгар кризиса 2009. Понятно, что добиться положительного ответа шансов особых не было: стартовая позиция с неплохой оплатой, размеры корпорации с множеством жаждущих, да ещё и грянувшие сокращения во всех департаментах. Вопрос был отложен, я стал вкладываться в интересный проект, всё было в порядке до апреля. В апреле происходит сильный демотиватор: проект, который наша небольшая команда делала 4 месяца, для которого был сделан хороший дизайн, удобный интерфейс работы с адресами и очень грамотная схема базы данных, завернули без подробного объяснения причин, как это часто и бывает. Вместо этого подкинули на всё лето жутко косой проект, построенный на IBM WebSphere (при многих плюсах, эта весьма косая вещь, с которой надеюсь больше никогда не связываться) — проект очень полезный в плане опыта, но совершенно уродский с точки зрения «как и что». В общем, в апреле я подумал, что пора бы новое место подыскать.
Тогда перед отпуском я накатал первое в своей жизни резюме, которое по замечательной традиции было просто ужасно: несколько страниц, куча ненужных подробностей, неумение выделить свои сильные и слабые стороны, и уверенность, что резюме неплохое. С этим резюме я сунулся по знакомству в одну программную контору, где ребята работают частично удаленно. В процессе продолжительной беседы всё, в принципе, было хорошо, тем более фирма, как оказалось, для «Билайна» некоторые проекты выполняет, так что мои знания были бы полезны. Но, так или иначе, сам я понял, что мне чего-то не хватает, да и предложения в итоге не поступило.
В связи с этим я выбрал простое поведение: наращивание своих профессиональных навыков в усиленном темпе. Тогда я перестал просто читать и гамать по вечерам, перешёл к активному программированию дома. Примерно тогда же я начал обучать Ниноко си-шарпу, появилась задумка проекта, который сейчас тестирую и готовлю к Сети. Я стал поднимать обратно к жизни большой пласт знаний, набранных с 2006 года в .NET и в разработке в целом, а главное, расширять и загонять всё в руки.
Примерно через полтора месяца повышения дисциплины у меня сформировался образ правильного резюме. Теперь это был всего один лист, аккуратное оформление и отличная отправная точка для беседы. Однако, собеседования и отклики на вакансии начались позже, когда обещанный в середине июля пересмотр оклада не состоялся. Я зарегистрировался на 5 сайтах вакансий, везде оформил резюме по полной программе и стал каждую неделю просматривать 2-3 десятка вакансий, откликаясь на 2-3 подходящих.
Примерно через пару недель я дождался второго приглашения на интервью. Это был феерический провал, верх моей самоуверенности. Я сам над собой ржал в душе, возвращаясь обратной дорогой. К тому интервью я перелистал кучу книг по архитектуре и высокоуровневым вопросам проектирования, перекопал все знания на эту тему в голове. А вот повторить простейшие вопросы программирования — разные мелкие детали наследования, такие приемы, как упаковка и распаковка — я попросту забыл. Т. к. тогда ещё многие приемы и знания я лишь начинал использовать в своей практике, всего этого не было на поверхности. После получаса отличной беседы, я попросту впал в ступор на первом же примере. 15 минут феерической тупизны и те чуваки, пожалуй, громко смеялись, когда я ушёл.
Вывод, как всегда, простой: тщательная подготовка. Даже если пишешь код постоянно, нужно понимать, что такое проверка знаний. Одна из основных особенностей человеческого мозга заключается в ограниченности знаний на поверхности, в быстрой памяти (хотя да, ее можно расширять, но это происходит очень медленно). Короче говоря, надо потратить немного времени и систематизировать, всё, что ты знаешь. Я пока обхожусь без brain map, но какие-то отметки веду. Как итог, я сделал 3 важных вещи:
- Снизил свои финансовые притязания на 18% (правда, двумя шагами по 9%), т. к. пришлось сделать скидку на очень небольшой профессиональный возраст (кодовое имя — карапуз).
- Стал интенсивнее писать код, при этом повышая его качество. Сейчас я предпочитаю лишний раз залезть в справочник и убедиться, возвращается методом nlil, какое-то особое значение или выбрасывается исключение в определённой ситуации — т. е. на любой момент времени требую от себя полного понимания происходящего в конкретной строке кода. Момент вроде бы простой, но очень важный для стыковки архитектурных навыков с прикладными конструкторскими.
- К следующему собеседованию подготовил детальный план его проведения. Написал я его как-то в маршрутке, пока ехал за город на похороны. План из простых пунктов вырос в анализ задач и целей обеих сторон.
Для полноты картины, приведу здесь этот текст с небольшими поправками (да, спите все, кому этот текст уже надоел, там ещё много впереди).
Примерный план собеседования (-ий)
Работодателю надо понять, на что я претендую и что я умею. Мне же надо присмотреть место с удобными для меня условиями и адекватным вознаграждением, соответствующим моим запросам.
В целом все это выясняется в течение одного или нескольких интервью. В любом случае сначала работодатель старается получить максимально полное представление о кандидате, чтобы сопоставить его с целевыми задачами вакансии. Поэтому то, насколько подробно опрашивается кандидат, и каков характер проверок, зависит от понимания работодателем круга ответственностей должности и степени формализации этой должности. Чем больше каких-то нормативов и критериев годности, тем выше описание требований и тем подробнее вопросы. В конечном счете, фирме нужно минимальное время втягивания новичка в работу.
В целом можно выделить следующие этапы. Они могут уложиться как в одно собеседование, так и в несколько:
Обзор моего рабочего опыта
В общем виде следует описать, чем я занимался ранее и как представляю своё развитие — в том же направлении или с какими-то поправками. Вряд ли с энтузиазмом воспримут желание внезапно переквалифицироваться из программиста Perl в архитектора .NET. Зато опытному разработчику .NET могут отдать анализ архитектуры, которую потом ему и его команде предстоит реализовывать. В любом случае это первый кирпич понимания: определение того, вписывается ли кандидат на должность по параметрам опыт/цели.
Обсуждение причины выбора фирмы и моего ухода с прошлого места
Это, пожалуй, самый простой, но в то же время самый щепетильный вопрос. Тут проверяется устойчивость кандидата к внутренним проблемам фирмы. Если человек сбежал с работы сразу же, как только ему не дали повышения или возникли серьезные трудности, то предпочтение, скорее всего, отдадут тому, кто сначала попробовал несколько подходов для достижения цели. Сюда остается добавить проверку на умение плохое обернуть положительными деталями (мне не дают то, что могу подкрепить умением и знаниями, так у меня теперь такие широкие перспективы, в т. ч. в вашей фирме) и нежелание выносить сор из избы. Тут важен баланс между шаблонной штукатуркой и индивидуальными чертами — нет ничего гаже простого а-ля клерка, который улыбается всем подряд.
Уточняющие вопросы
Выслушав историю кандидата, у собеседующих всегда найдется, что спросить, если интерес был подогрет. С учётом этого не стоит загружать их излишним объемом информации на предыдущих этапах: после легкого обзора вопросы должны идти просто, и должны быть именно те вопросы, которые интересуют работодателя. Также могут появиться некоторые вопросы для теста знаний и для проверки слов кандидата.
Практическое тестирование или тестовые вопросы.
По мне это самый противный этап. Характер вопросов может быть самый разный. Основной критерий: проверить любую заявленную кандидатом область знаний. Тесты зависят исключительно от собеседующих людей и могут включать как то, что имеет непосредственное отношение к должности, так и косвенное. Спорить о том, какие вопросы нужны, а какие нет, в каждом конкретном случае, бесполезно пока ты сам не оказываешься собеседующим. Главное здесь: по вопросам можно понять также степень компетенции возможных будущих коллег.
Уточнение рабочих условий и процессов разработки
Если предыдущие шаги прошли хорошо и работодатель заинтересован в кандидате, остаётся понять соответствие условий работы собственным критериям. Очень важно, чтобы показали непосредственное рабочее место, чтобы не было сюрпризов.
Согласование условий контракта
Это, наверное, ещё важнее всех предыдущих пунктов. Если дошли до договора, то его разбирать условия надо внимательно. Обычно никто не даёт почитать сам договор, но на вопросы ответить должны. Как выплачивается оклад (он может быть разбит на основную и премиальную части, возможно, простое изменение единственной и основной части)? Когда делаются выплаты? Какие есть нормы регулирования работы (наблюдение, логирование, ограничения Сети и т. п.)? Какие предусмотрены поощрения и наказания? Какой оклад на испытательный срок и какая его продолжительность? В общем, есть много разных мелочей, про которые лучше узнать сразу. В будущем, при прочтении договора перед подписанием, в идеале, надо помнить Трудовой Кодекс и обратить внимание на все отхождения от него. Да, я понимаю, что многое в работе не определяется бумажками и важны хорошие отношения в команде, но вот проблема: начальство, курс бизнеса, задачи отдела кадров могут сильно поменяться, а вот договор будет всё тот же; использовать же заложенные в него механизмы будут, соответственно, совершено разные люди и в разных целях.
И ещё. Важно согласовать время выхода на работу (скользкий момент, если ты еще не уволился), оклад и рабочее время. Если у нового работодателя серьезные намерения, он будет готов подождать даже месяц: это значит, что отбор серьезный, а будущий начальник понимает, что спешка с кадрами может погубить все сроки проекта в будущем.
Для себя
План обзорки
- .NET проекты. Упомянуть многопоточную смс-склейку и выгрузку из SFTP консольным приложением, разработка архитектуры в т. ч. Упомянуть бэкофисы на ASP.NET, в т. ч. для адресной базы, с применением ASP.NET AJAX. Однако нет опыта работы с DevExpress и Integris.
- Важно! Рассказать про багтрек и TFS, про UML диаграммы и про иерархический подход к документированию согласно UML.
- Знание Oracle и MS SQL на хорошем, но никак не мастерском уровне: умение писать процедуры и функции (с возвратом простых типов или таблиц). Умение писать запросы, но без алгоритмических экзерсизов, умение их оптимизировать, в т. ч. с подсказками планов выполнения.
- Java. Описать задачи по многопоточности и ETL.
- Докинуть дельфи на базовом уровне.
Подготовка
Мои слабые места: детали. Надо внимательно перечитать справочник по классам .NET на предмет стандартных функций и свойств (есть немало того, что я просто не использовал ещё), а также впитать иерархию компонент WinForms и WebForms. Плюс к этому поискать фишки языка, которые не докопал в прошлые выходные.
Заодно надо освежить память по T-SQL в плане стандартных запросов, хранимок и функций, а то уже слишком много Oracle в последние полгода.
UML и паттерны уже повторены. Можно еще покопаться в XSLT.
За этим последовало самое обычное собеседование со слишком толстым тестовым заданием. Объем был, мягко говоря наглый, поэтому я специально сделал только ядро и очень поверхностный GUI (веб). Конечно, дальше дело не пошло, но я лишний раз потренировался в быстрой разработке, подробной документации и многоуровневой архитектуре. Заодно изучил очередной офис себе на заметку (отличный новый бизнес-центр недалеко от метро «Тульская»).
Далее было ещё одно собеседование на почти полностью удалённую работу с небольшими и любопытными тестовыми заданиями, но предварительное предложение о работе сорвалось по чисто финансовым причинам. К этому времени я уже стал себя уверенно ощущать: код стал выходить из-под рук быстро и качественно, я перестал халтурить даже на задачках-примерах.
А вот затем стало интересно. Где-то в начале октября я получил приглашение на интервью в дочернюю фирму Касперского, занятую корпоративным рынком. Собеседование прошло на ура. Час с небольшим общался с тремя матёрыми специалистами, которые устроили вынос мозга проходом по всем аспектам .NET с плавным переходом к вопросам по алгоритмам (в т. ч. C++). Меня оценивали с точки зрения си-шарпера с возможностью «апгрейда» до программиста C++. К своему удивлению вспомнил особенности поиска по деревьям, даже формульное выражение сложности поиска. Огромное спасибо тем ребятам, хотя они вряд ли когда-то наткнутся на этот текст. С той встречи я вылетел с огромным зарядом бодрости, ощутив, что успешно двигаюсь в нужном направлении. Меня бы даже не расстроил отказ. Через неделю пообщался с менеджером команды, которого очень удивила моя манера общения, пришлось объяснять, что я и правда разработчик, а не юрист, например. Так или иначе, второй «тур» был пройден, но контора продолжала тянуть время, объяснив, что ещё мало кандидатов просмотрели.
К этому времени я обработал 50 вакансий, дал 4 отказа на интервью (банки и Java — не моё). И пока образовалась тишина, мне на почту пришло приглашение на ещё одно собеседование по вакансии, которой я даже не видел до того. Собеседование прошло спокойно, с небольшим спором про http модули и обработчики в ASP.NET, но ничего особенного от этого я не ожидал. Единственное отличие от предыдущих встреч — акцент на командной разработке. Через один день мне приходит предложение о работе. Об этом я аккуратно сообщил предыдущей конторе, после чего они внезапно разродились ответным предложением, подняв на 7% предполагаемый оклад.
Ну и теперь последний момент — как был сделан выбор. Первое: расстояние до дочерки Касперского было в разы больше второго (находится рядом со МКАД), 20 минут против часа с небольшим на дорогу. Каждый день, по 2 раза. Если бы дальнее предложение было бы на 20% выше, я бы все равно, скорее всего, отказался. Потому как важная деталь: в месте ближе к дому круг обязанностей скромнее за ту же оплату. Навостриться в C++ я могу и на досуге (чем и собираюсь заняться), а вот в более узком кругу задач я точно научусь куда большей специфике, т. е. полученные знания будут ценнее. И третье: корпоративная безопасность — это, конечно круто и мне давно интересно, но вот финансовая область мне ещё ближе. При всех рисках такой компании, я сделал ставку на то, что уже 3 поколения моих предков имеют финансовое образование и эта область мне очень интересна, к тому же прибыльна. К тому же безопасники рассчитывали, что я выйду на работу в ближайший понедельник, а у меня даже увольнение ещё не было запущено.
В общем, как итог, я уже на месяц раньше закончил испытательный срок, тружусь над вполне интересным проектом в неплохой команде. В первый месяц, изучив подробно несколько вложенных проектов, я настолько поднял свой уровень, что до того представить мог с трудом: рефлексия и дженерики, лямбда-выражения, XML в SQL Server, пара приёмов в оформлении кода, ASP.NET хендлеры — это только часть. И что меня радует ещё больше: всё ещё впереди.
Могу добавить только ещё пару вещей: спокойствие, спокойствие и не надо спешить. И никаких серых окладов.