Окончание истории "бородатого эникея". Предыдущая часть
тут.
И я им все таки стал!
Уважаемые коллеги, вам наверняка стало понятно, какая древнейшая профессия вмешалась в мои планы. Разумеется, речь идет о политике.
Дела в фирме к тому времени обстояли «не очень»: увольнение разработчиков приняло массовый характер. Руководство сначала делало вид, что никакой проблемы нет, потом, в полном соответствии с положениями «прикладной мерфологии», начало проводить совещания, которые день ото дня становились все чаще, все длиннее и все бессмысленнее. Результатом совещания стало решение совещаться дальше... Когда оголились целые направления, были утрачены ключевые знания и из-за воцарившегося хаоса стали срываться сроки сдачи проектов, началась фаза «наведения порядка» и «закручивания гаек». И вот, во время моего отпуска руководитель разработки издал приказ, что для упорядочивания рабочего процесса, исключения дублирования чего-то и расширения повторного использования чего-то еще, разработчикам отныне запрещается контактировать с «внутренним заказчиком» напрямую, все коммуникации — только через руководителя и только в письменном виде, в соответствии с разработанным регламентом взаимодействия между… ну и так далее. Оказалось, «наверху» учинили большой разнос и потребовалось срочно изобразить кипучую деятельность. Все выглядело очень правильно и красиво, и была только одна загвоздка — «внутренним заказчиком», который работал с разработчиками напрямую, был я...
Ну что же, не в первый раз принимаются подобные решения, найдем управу и тут, хотя будет, похоже, непросто. Я сел было за очередную служебную записку с предложением созвать совещание, а потом вдруг понял, что вместо траты времени и сил на дискуссии и писанину, надо просто рискнуть и выложить резюме прямо сейчас, не дожидаясь реального проекта. Надеюсь, знаний, полученных во время реализации тестового задания, хватит.
Читал на нескольких форумах, в том числе на javarush, жалобы типа «выложил резюме — и не одного приглашения». Лично я ни разу не сталкивался с подобной ситуацией, и не только с резюме Java-разработчика, но и раньше. Правда, на написание резюме я тратил по два-три дня, многократно переделывая и улучшая текст. Всегда старался, чтобы резюме не превышало двух страниц и следовал правилу: компетенции и знания должны напрямую вытекать из списка выполненных работ. Иными словами, надо правильно себя позиционировать: пишешь «мидл» - покажи опыт работы и стек технологий, соответствующий мидлу. Не получается — значит ты пока еще не «мидл», нужны еще проекты. Опытный HR сразу увидит нестыковки и перед приглашением задаст уточняющие вопросы, а если дело все же дойдет до технического собеседования — еще хуже, получишь «черную метку» и на полгода-год про эту компанию можно будет забыть. Проверено на собственном опыте!
...Вот и первое приглашение. Зарубежная компания, расширяет в России свой центр разработки. Симпатичный лофт на последнем этаже бизнес-центра. Так, технического собеседования сегодня не будет. Приятно поговорили с HR, она показала презентацию о компании (все эти презентации, по-моему, делаются по общему шаблону). Фейс-контроль пройден успешно, теперь — тестовое задание. Ничего себе — аж несколько страниц текста, больше похоже на постановку немаленькой задачи. Нужно разработать веб-сервис со статистикой, чистый бэкэнд с явными признаками микросервиса, аутентификация, JSON, вроде ничего особо сложного, многое уже было в тестовом задании реального проекта, остальное — найдем. Погнали.
Сделал за пару дней, все таки не на пустом месте. С тестами, с описанием — все как полагается. Пауза… ответ. Отрицательный. Что бывает крайне редко, сами написали, что именно не понравилось. На мой взгляд — чистые придирки, это же тестовое задание, а не реальный код, но спорить, понятно, бесполезно. Посидел еще несколько дней, отшлифовал код, исправил придирки и добавил ссылку на проект в резюме, решил что лишним не будет. Так оно потом и оказалось.
Кстати, в этом проекте впервые в полную силу задействовал лямбды, изученные по книге «Java 8 Lambdas», эта тема совсем не затрагивается в курсе javarush. Между тем, по крайней мере на одном собеседовании это сыграло положительную роль.
Потом был крупный отечественный разработчик ПО — вроде положительно, но я вряд ли хочу там работать, шило на мыло… Разработчик в ИТ-отдел небольшого банка, допиливать чужую банковскую систему под их требования. Не хочу, наелся выше крыши доработкой типовых конфигураций 1С. Впрочем, и само собеседование слил подчистую, задачи похожи на своих тезок из сертификационного экзамена по Java от Oracle, из серии — а как сработает такой говнокод, а такой? В жизни так не напишу и другим не дам.
Еще один, теперь уже не очень большой, отечественный разработчик, но вроде продукт для зарубежного рынка. Скайп-собеседование, опять задачки. Ну не помню я, как sort() сортирует null-элементы. И писать так не буду, у меня будет NullObject, смысл городить кучу проверок на null в коде? Отказ. Полезный результат — разобрался со сравнением null-ов, да, это снова Java 8, которой не было в javarush. Но все равно не буду так писать.
Дальше возникла пауза в несколько дней, за которую я осилил книгу о шаблонах проектирования от «банды четырех» и начал книгу про принципы S.O.L.I.D. Не уверен, что смогу по памяти реализовать все шаблоны, но ответить на вопросы скорее всего смогу. Про S.O.L.I.D., кстати, ни на одном собеседовании не спрашивали.
Еще скайп-собеседование, о, пригодились шаблоны. Кстати, в книге названия шаблонов переведены, а в реальной жизни почти всегда используют только их оригинальные (англоязычные) названия. Какой самый часто встречающийся шаблон в Spring? Ответил — Proxy, вроде правильно. Еще пригодилась Java Memory Model, коллекции, многопоточность, Atomic-типы и ConcurrentHashMap. Все-таки умные люди делали javarush — 90% стандартных вопросов курс охватывает. Так, вроде положительно, но оказывается это было так, еще не собеседование, а основное собеседование будет с заказчиком. Неожиданный результат — прислали список вопросов, по которым мне стоит подготовиться. Это всегда готов, учиться я люблю и собеседования пока воспринимаю в основном как бесплатную учебу.
Подготовился. Много интересного узнал про SQL, про A.C.I.D., про Spring и про concurrency. Собеседование с заказчиком из другого города, по скайпу. Ух ты, как интересно, уровень собеседующего явно очень высокий. Сначала все стандартные вопросы, ну, на память не жалуюсь, все ответил без запинки. Дальше пошли уже незнакомые мне вещи. Например, всегда ли надо применять Atomic-типы, или синхронизация может оказаться быстрее? Ответил неправильно, но зато после собеседования узнал про LongAdder - еще одну часть concurrency из Java 8, не охваченная javarush. Этакий lock-splitting для счетчиков. Сколько же еще неведомого для меня есть в Java Core?
Потом были еще собеседования, очные и по скайпу, но как-то ничем они не запомнились. Вопросы были в основном стандартные, я к тому времени выучил их наизусть. После каждого собеседования проверял все ответы, в которых сомневался, но ничего особо нового больше не узнал. Были и какие-то офферы, но неинтересные, хотелось качественного скачка - попасть в сильную команду на интересный проект, чтобы развиваться дальше.
Скайп-собеседования отнимают меньше времени, чем очные, но зато при очных собеседованиях можно оценить время на дорогу с учетом пробок и попросить показать будущее (возможное) рабочее место. В основном везде openspace, хотя разных размеров — бывало и 15, и 50 человек в комнате. И плотность размещения совершенно разная — где-то набиты «как сельди в бочке», где-то вполне свободно. Когда приходишь в конце рабочего дня, можно понять — душно или вентиляции хватает, хотя как оно будет летом — еще неизвестно. Где-то есть комнаты отдыха, где-то нет — а ведь иногда хочется встать и немного походить-подумать. Потом начал нагло просить сделать мне кофе — и иногда узнавал, что обещанная кофе-машина «вот именно сейчас» в ремонте. Все это, конечно, мелочи по-отдельности, но позволяют составить довольно точное представление о компании.
На очередном собеседовании проверили мой уровень английского. Мда, на общежитейские темы мне разговаривать тяжеловато. Впрочем, мне показалось, что мой «экзаменатор» сам бы провалил подобный экзамен. Очередной опыт в копилку и очередной отказ.
Решил устроить себе «погружение» в языковую среду. Недели две про все, что видел вокруг, думал по-английски, сам с собой разговаривал по-английски и перечитал в оригинале какой-то детектив. Активно вспоминал слова и пополнял словарный запас. Все забывается, если не пользоваться постоянно, и английский — не исключение.
Параллельно с собеседованиями продолжал проходить javarush, дошел (уже честно) до 30-го уровня и пошел дальше, остановился где-то на 35-м. После тестовых заданий новых знаний было уже не очень много, но зато была постоянная практика в кодинге.
Собеседование в той фирме, где я и работаю сейчас, прошло как-то совершенно буднично. Руководитель разработки задал пару вопросов на тему, как бы я реализовал такую-то функцию, естественно, на тему concurrency. Я вроде ответил, потому что когда-то сталкивался с похожей задачей и, помнится, довольно долго провозился, ища наилучшее решение. Вопросы быстро кончились и я решил, что как кандидат оказался неинтересен. Тем большим было мое удивление, когда на следующий день мне прислали оффер с очень приличными условиями.
Но оставалось еще одно собеседование, совершенно необычное для меня. Зарубежная компания, создает в России центр разработки. Просили резюме на английском. Напрягся, написал, вряд-ли по всем правилам, но лучше так, чем никак. И вот, они хотят провести собеседование по скайпу на английском. А, чем черт не шутит — попробую, отказаться всегда можно.
От этого собеседования я получил огромное удовольствие, надеюсь, противоположная сторона - тоже. Пообщался и с PM-ом, и с Lead Developer'ом, и даже (чего уж совсем не ожидал) - с CEO. Все — очень приятные и вежливые люди. Выяснилось, что разговор на английском по специальности меня совсем не напрягает, потому что после прошлой неудачи я боялся, что все силы будут уходить на понимание и построение фраз, а думать будет некогда. Ответил на все вопросы, вывалив на них заодно и многое из того, что узнал на javarush и при прохождении других собеседований. Оффер у меня уже был, результат этого собеседования был не так уж важен, волноваться было незачем, и это дало неожиданный результат. Хотя почему неожиданный? В жизни постоянно бывает так, что когда работа нужна срочно, ее нет, а когда уже не нужна — предложения идут одно за другим. Короче говоря, на следующий день я получил второй оффер и оказался перед исключительно сложным, хотя и приятным, выбором. Оба предложения были крайне интересны, и каждое — по своему, но принять можно было только одно.
Собственно, на этом моя история пока заканчивается. Нынешний проект — в микросервисной архитектуре, основан на открытом ПО, с правильно выстроенным процессом разработки, со SCRUM и CI — словом, все то, о чем я и мечтал. Уровень владения технологиями у сеньоров конечно совершенно заоблачный, мне до него еще расти и расти. Постоянно узнаю новое и от Java-разработчиков, и от тестировщиков, и от фронтендеров. Прав был тот, кто сказал, что лишних знаний не бывает - пригодилось очень многое из опыта «эникея» и Linux-админа, потому что разработка ведется и под Windows, и под Linux, и даже на Mac. Кстати говоря, все сеньоры и многие мидлы знают Linux (хотя сами часто предпочитают вести разработку под Windows) и при необходимости вполне заменяют DevOps'ов.
Недавно, разбирая книжный шкаф, обнаружил ту самую «Философию Java», с которой началось мое первое (неудачное) знакомство с Java. С удовольствием пролистал ее — как много с тех пор изменилось и в языке, и в фреймворках! Теперь-то я понимаю, как написать веб-версию складской программы с таблицами, формами и отчетами, хотя конечно не буду использовать описанные в этой книге JSP, EJB и JDBC, есть куда более мощные и современные инструменты.
Вы, возможно, спросите — а где рассказ о реальном проекте? К сожалению, рассказать нечего, потому что получилось как в анекдоте: «я контролера обманул — билет купил, а сам не поехал». Успел сделать только подготовительное задание к 1-му занятию, то, которое на лямбдах. Потом стало некогда, а позже — и незачем, большинство backend-технологий, рассматриваемых в нем, пришлось изучать уже в «боевой обстановке», на новой работе, а frontend там малоактуален. Тем не менее, свою роль он, я считаю, выполнил — ведь без реального проекта не было бы тестового задания, с которого все и началось.
Дата первого комментария: 6 февраля 2017
Интересно.
И про результаты послушать интересно.
Обычно народ вмещает свои истории на 1 стр, а у Вас 5 частей получилось. Отсюда и вопрос. Извиняюсь, если прозвучало саркастически.
p.s. «уважаемая», но лучше без этого.
Автор, в каком году устроился и как оцениваешь работу в Питере по сравнению с Москвой?
Вроде бы в тексте достаточно информации для привязки рассказа по времени. Устроился в 2016 году.
В Питере средняя вакансия Java-разработчика дешевле соответствующей Московской процентов на 30, наверное. У меня нет опыта поиска работы в Москве, но по словам знакомых, там такой же дефицит разработчиков. Не от хорошей жизни московские компании создают центры разработки в регионах.
Интересно, как ты видишь ближайшее будущее разработчика на java, увеличится ли хайп на эту сферу?
В плане моды — пока что растет интерес к Scala, хотя непонятно, надолго ли это. Scala-разработчики сейчас стоят дороже, чем Java. Groovy, похоже, «не взлетел», если не считать Gradle. Есть перспективы у Kotlin, но он скорее для мобильной разработки.
Вот на хабре отличная статья по теме: Каково это — быть разработчиком в России, когда тебе сорок
То, что кто-то что-то делает в 40 лет, еще не значит что у тебя в твои 40 тоже получится. Это в шесть можно всех поголовно отправить в школу и научить читать и писать. К 40 годам все подходят с очень разными рюкзаками прожитой жизни за спиной. Здесь будут играть значение очень многие факторы. И все сведется к одному вопросу: способны ли вы в свои 40 за короткий срок качественно усвоить огромный массив информации и получить достаточные навыки в использовании ее (здесь имеются в виду не только умственные способности, но и здоровье и текущая жизнь, обязанности в ней)? И это опять же ничего вам не гарантирует. В утверждении, что рынок IT нуждается в большом количестве программистов почему то все забывают о том, что это не относится к джуниорам. Нужны мидлы и сеньоры. С джуниорами хотят нянчиться единицы, а вливается их на рынок труда сотни и тысячи. Например вот занятное видео на эту тему.
А мне все таки иногда приходят в голову мысли «а не поздновато ли?». А мне, оказывается, «всего 27» :)
Но есть один вопрос (это, конечно, личное, но все равно задам):
У вас есть семья? Если да, то как вы умудряетесь за несколько дней прочитать книгу, написать рабочее приложение и т.п.?
Здесь все говорят про отмазки, а у меня реально 1,5 — 2 часа в день времени (время между отходами ко сну ребенка и моим).
Как прочитать книгу за несколько дней? Выборочно. Читаешь только то, что тебе в данный момент нужно, остальное пролистываешь. Видимо, у меня как-то сама собой выработалась методика быстрого чтения. На английском получается медленнее, но упомянутые мною книги — на русском, и в них довольно много «воды». Книгу «Spring 4 для профессионалов», например, так не прочитать, на нее ушло недели 3, наверное.
Как быстро написать работающее приложение на технологиях, которые ты
видишь в первый раз в жизнизнаешь неважно? Естественно, копи-пастой со stackoverflow и кучи других ресурсов. Вот чему действительно надо обязательно научиться — это правильно строить поисковые запросы. И еще один полезный навык — владение приемами работы с Legacy-кодом. Поищите по этим словам, можно найти несколько статей на русском, книг вроде бы нет. Я упоминал в своем рассказе, что постоянно приходилось разбираться без документации в чужом коде без описаний, это как раз оно. При этом, среди прочего, быстро учишься искать информацию именно по данному, конкретному вопросу, потому что на систематическое «погружение» в десятки задействованных технологий, библиотек и фреймворков времени, естественно нет.Сам я думаю, что тайм-менеджмент был придуман для офисных клерков, которые изо дня в день выполняют тупую однообразную работу. Тут можно и оценку времени дать, и все распланировать заранее. Программирование — одна из самых гуманитарных специальностей среди технических, ближе к творчеству, чем к технике. Это подтверждается тем фактом, что до сих пор не существует способа определить, сможет ли тот или иной человек стать разработчиком, или нет, только учить и пробовать.
К вопросу Santegra о жизненных силах — если еще не занимаетесь, то попробуйте заняться спортом и стремиться к какому-нибудь высшему достижению в нём(используя научный подход). Сил сразу станет много и голова будет свежая, кроме того придется освоить все перечисленные выше товарищем boyarskiy истины(и своих еще куча появится), без которых высших достижений сложно добиться.
Заниматься спортом полезно, но не с целью ставить рекорды. Рекорды требуют много времени и часто безвозвратно портят здоровье. Особенно, если начать заниматься «резко» и не с детства. Опять-таки, пишу на основании собственного опыта.
Я сначала хотел просто для здоровья, но по характеру не могу топтаться на месте, хочется развиваться всё время, так же как и в кодинге :)