Senior java developer что это: Какой объем знаний должен быть у Senior Java Developer — Хабр Q&A – Требуется «Senior Java developer» — Хабр Карьера

Требуется «Senior Java developer» — Хабр Карьера

Мы создаем встраиваемый чат нового поколения. Он поддерживает аудио и видео звонки, голосовые сообщения, стикеры, GIF-файлы, показ экрана, бесшовное переключение между устройствами и многое другое.

Кого мы ищем. Нам нужен сильный и самостоятельный разработчик на Java, который возьмёт на себя развитие бэкенда приложения и интеграции со сторонними сервисами.

Чем предстоит заниматься:

  • Развивать качественное коммуникационное веб-приложение;
  • Выступать оунером ключевых фич, заботиться об их долгосрочном развитии;
  • Интегрировать продукт с рядом сторонних сервисов;
  • Писать unit-тесты и интеграционные тесты;
  • Покрывать  основную функциональность автотестами;
  • Участвовать в мозговых штурмах с разработчиками фронтенда;
  • Помогать команде разрешать возможные сложности в разработках;
  • Участвовать в code/design review и выступать ментором для менее опытных разработчиков;
  • Участвовать в создании документации, развитии архитектуры проекта, планировании релизов.

Что важно знать и уметь:

  • Коммерческая разработка веб-приложений на Java свыше 5 лет;
  • Опыт работы с функциональными или императивными языками, особенно PHP;
  • Принципы работы реляционных БД и сложных SQL запросов;
  • Test driven development;
  • Иметь хорошую инженерную подготовку, навыки решения алгоритмических задач, понимать распределённые системы, разные структуры данных;
  • Работать в Git, в т.ч. с ветками и разрешением конфликтов;
  • Находить причины ошибок в работе продукта.
  • Вести продуктивные обсуждения по технической части и помогать команде приходить к успешным архитектурным решениям;
  • Писать понятный поддерживаемый код, пригодный для тестирования;
  • Просто доносить сложные технические мысли до дизайнеров и разработчиков фронтенда.

Ты лучше других, если

  • Уже работал в команде на английском;
  • Понимаешь устройство коммуникационных приложений;
  • Умеешь прототипировать и проектировать высоконагруженные системы. 
  • Знаешь шаблоны проектирования;
  • Работал с  SQL и NoSQL и bigdata;
  • Знаешь Spring, Hibernate, Maven, Jenkins;
  • Знаешь функциональные языки программирования, FRP.
  • Блестяще управляешь временем и самоорганизуешься;
  • Проактивен и непрерывно обучаешься;
  • Слово “сотрудничество”  для тебя похоже на слово “вклад” и не похоже на слово “оборона”.

Бонусы

  • Гибкий график и удалённая работа
  • Медицинская страховка (в т.ч. стоматология) с первого дня
  • Дружелюбный коллектив
  • Отличный баланс работы и жизни
  • Возможна релокация в наш центральный офис в Барселоне

Дополнительные инструкции

Мы любим читать короткие сопроводительные письма, поэтому написать три фразы о том, почему мы и почему ты,  - хорошая идея. 

Ненастоящие сеньор-девелоперы, или почему годы опыта ни о чем не говорят

Опытный программист из Торонто Мэтт Бриггс так любит свою работу, что говорит: «я бы писал код, даже если бы это было нелегальным». А когда он опубликовал в своем блоге пост о джуниорах, мидлах и старших разработчиках, то собрал больше сотни восхищенных комментариев. Мы в Alconost тоже восхитились и перевели эту статью для вас.

Мы работаем в странной индустрии. Потребность в разработчиках здесь значительно выше, чем кадровое предложение. Эта проблема существует многие годы, и со временем она становится острее.

Мы испытываем серьезную нехватку талантов, хотя индустрия довольно молода. Большинство софтверных проектов проваливаются, и практически все превышают бюджет. А лучшая идея, которую могут предложить сильнейшие умы, сводится к «Есть несколько стандартных способов решения подобных проблем, но наши решения часто не срабатывают. Единственное, что можно сделать — это попробовать и посмотреть на результат».

Реальность такова, что под «старшим разработчиком» понимается человек, который ваяет код более 3 лет. Его ставят на руководящую позицию, и обычно все заканчивается ожидаемо плачевно.

На самом деле, попытка оценивать людей временными интервалами – слишком упрощенный способ для таких тонких материй, как знание и профессиональный опыт. Но дела обстоят именно так. И если продолжать классифицировать специалистов подобным образом, то самое время нашей индустрии брать тайм-аут. Есть разница между человеком с 10-летним опытом, и тем, кто за то же время стал опытнее в 10 раз.


Постер из сериалa «Компьютерщики»

Этапы роста разработчика


Как программисты, мы живем в мире сложных систем и переменных. В этом мире даже простое выполнение хорошо поставленной конкретной задачи может вызывать затруднения. Особенно если нет огромного опыта с имеющимися инструментами или базой кода.


Кадр из сериалa «Компьютерщики»

Вот какова жизнь junior-разработчика. Закончив обучение, вы кажетесь себе всезнающим. Но внезапно приходит понимание, что школа слабо подготовила вас к тем проблемам, с которыми приходится сталкиваться. Реальность хаотична, не так приятна и далека от теории. Приходится крутиться в среде компромиссов, без возможности строить предположения о чем-либо.

Работа с учетом всего этого и будет вашим главным уроком и предметом сосредоточения. Младшим разработчикам требуются регулярные наставления, помощь и поддержка. В противном случае, они могут топтаться на месте очень и очень долго (недавно я столкнулся с товарищем, который делал софт почти 10 лет, но фактически остался все тем же начинающим разработчиком). Можно сказать, этот период целиком посвящен познанию тактических подходов к решению ежедневных задач.

Джуниор-разработчик зациклен на коде, а не на процессе разработки. Да и разницу он не особенно улавливает. Если программист говорит, что «с радостью кодил бы больше, если бы не эти пользователи» — с высокой вероятностью, вы общаетесь с новичком.

Хорошему junior-разработчику можно дать знакомую задачу и ожидать ее быстрого выполнения


Кадр из сериалa «Компьютерщики»

Разработчик среднего уровня уже начинает видеть в ошибках определенные закономерности (обычно, в собственных ошибках). Он понимает, что для написания работоспособного кода, который не развалится при первом же изменении, требуется много больше простого завершения своего участка работы. Еще он обычно проходит через тот уникальный опыт, когда смотришь на свою прошлую гордость (код годовалой давности) и понимаешь, что это полнейший хлам.

Такой человек изучает вопрос правильной разработки софта, и находит для себя ответы в экспериментах, литературе и обсуждениях с коллегами. На этом уровне все направлено на изучение теории разработки продукта, а не написания кода (этому учат в школе).

Написанные «средними» разработчиками самостоятельно системы проваливаются по совершенно иным причинам, чем творения молодых специалистов. Джуниор просто напишет гору условно-рабочих алгоритмов. А хороший «средний» частично воплотит содержимое книг “Design Patterns” и “Domain Driven Design”. Конечно, это прекрасные книги для изучения процесса разработки крупных систем. Но простое следование их постулатам приводит к построению излишне сложных систем, которые гибки там, где это не важно, и неповоротливы в значимых вещах.

“Среднему” программисту можно доверить разработку системы, которая проработает гораздо дольше творения молодого коллеги, но все равно приведет к непредсказуемым последствиям. Печально, но факт: абсолютное большинство не только старших разработчиков, но и тимлидов, являются обычными «средними» программистами. Многие из них этого не понимают и руководствуются лишь благими намерениями, но они просто никогда не работали с кем-то более квалифицированным.

«Мидлы» хорошо осознают свою роль в организации и ценность для нее. Хорошие middle-девелоперы также понимают, что кодинг для решения проблемы означает работу до логического завершения, а не просто до конца задачи. И все же они еще слишком увлечены постройкой башен из слоновой кости и поисками «Правильного Пути» в разработке софта.

Хороший «средний» разработчик требует меньше присмотра. Им можно доверять поиск проблемных участков проекта, и они играют важную роль в принятии ключевых решений. Еще они «рабочие лошадки» команды, но требуют более высокоуровневого наставничества.


Кадр из сериалa «Компьютерщики»

Старший разработчик близко знаком с собственными неудачами. Такие люди создавали как недоделанный, так и излишне сложный код – и видели плачевные результаты в обоих случаях. Они взвешенно подходят к работе, трезво и спокойно оценивая собственные удачи и поражения при возникновении проблем. Старший разработчик уже разлюбил сложность, которая захватывает умы «средних» коллег, и теперь одержим простотой.

Старший разработчик не классифицирует коллег по уровню их знаний, он понимает, что у всех есть сильные и слабые стороны. Он знает о своих преимуществах и недостатках больше кого бы то ни было и стремится по возможности использовать именно преимущества.

Senior учитывает контекст при применении теории. Он понимает, что не существует «Правильного Пути». Единственный способ построить хороший продукт – это адаптация теории к требованиям клиента, базы кода, команды, инструментов и организации. Такой человек понимает, что все вокруг нас требует компромиссов, и будет искать их для паттернов проектирования, библиотек, фреймворков и процессов.

Старшие разработчики думают не только о себе. Они прекрасно знают, как работает их компания и организация заказчика, какие у них ценности и что важно или не важно для успеха. Если мяч брошен, то старший программист сделает все возможное, чтобы его поймать. Вы никогда не услышите от него фразы «это не мое дело» в подобных ситуациях.

Сеньор девелопер понимает, что работа заключается в решении проблем, а не в написании кода. Именно поэтому он всегда будет смотреть на работу с позиции соотношения ее ценности для организации затраченным усилиям.

В то время как «средний» разработчик погрязнет в бесчисленных днях монотонной деятельности, «старший» сперва поинтересуется первопричинами ситуации. Он оценит затраты на нейтрализацию причины, и либо сразу ее исправит, либо направит процесс в нужное русло.

Еще он понимает, что нельзя сделать все самостоятельно. Его первоочередная роль – помочь команде стать лучше, часто теми же способами, какими самосовершенствуются отдельные участники. Ведь сила не во власти, а в делегировании. Не в управлении, а в поддержке.

Если у вас нет ни одного старшего разработчика на руководящих позициях, то проект обречен. Команда отличных «середнячков» может завести вас довольно далеко, но дни продукта все равно сочтены. И в финале вас ждет либо сворачивание лавочки, либо рискованные и дорогостоящие переделки. Единственный, кто способен выбрать правильную технологию и платформу – это старший разработчик. Поэтому его отсутствие в проекте с первых дней серьезно вам повредит.

Это просто гигантское упрощение


Реальность такова, что никто не подходит под описанные рамки в точности. Я уже устал смотреть, как программистов оценивают по «годам опыта». Безусловно, они что-то могут вам рассказать, но это практически бесполезная информация вне остального контекста.

Более того, в нашей индустрии принято ценить дерзких умных молодых ребят после университета. Эти парни действительно ценны и необходимы, но не более, чем их коллеги с 15-20 годами «полевого» опыта. Пора переставать стереотипно нанимать людей и начать больше думать о команде и сочетаемости талантов. Если все в команде будут думать одинаково – вы окажете медвежью услугу и проекту, и организации.

О переводчике

Перевод статьи выполнен в Alconost.

Alconost занимается локализацией приложений, игр и сайтов на 60 языков. Переводчики-носители языка, лингвистическое тестирование, облачная платформа с API, непрерывная локализация, менеджеры проектов 24/7, любые форматы строковых ресурсов.

Мы также делаем рекламные и обучающие видеоролики — для сайтов, продающие, имиджевые, рекламные, обучающие, тизеры, эксплейнеры, трейлеры для Google Play и App Store.

Подробнее: https://alconost.com

Поиск работы Java Middle Developer (наблюдения и впечатления) / Habr

И вот настал момент, когда я твердо решила распрощаться с родной и уютной компанией-интегратором и найти работу поинтереснее. За три недели активного поиска получила массу впечатлений, коими и хотела бы поделиться.
Входные данные

Место действия – Москва. Мидл в заголовке поста — некая условность, в заголовке резюме значилось просто «Java разработчик». Опыта в Java – 1.5 года в пресловутом интеграторе, до этого 4+ года в PHP (думаю, подобная ситуация сейчас не редкость). Поскольку дети и ипотеки у меня отсутствуют, деньги были не решающим фактором – главное, интерес и потенциальное развитие.

Начало

Итак, одним январским понедельником я расшарила резюме на хедхантере и стала ждать. Несмотря на то, что от множества людей я слышала мнение «До середины февраля на рынке труда затишье», тут же начались звонки и письма.

Звонят и пишут, как водится, HR-ы. Уровень технической грамотности судя по всему у них очень разный: слышала и исчерпывающее описание вакансии, и «наша компания занимается разработкой на языке Java.». На всякий случай никогда не соглашаюсь на собеседование, пока не увижу вакансию. Кстати, позабавила компания, из которой написали «Вакансии у нас нет, приходите на собеседование и руководитель отдела вам все расскажет».

Собственно, вакансии пришлось фильтровать сразу – первое время читала отзывы в интернете, и отказывалась от собеседований, где негативные. Из-за опыта работы в интеграторе были и смешные, типа «Эксперт по администрированию IBM FileNet», такие тоже отметались.

Тем не менее, достаточно быстро я забила ближайшую неделю собеседованиями по паре в день. Готовиться к собеседованиям я и не собиралась (когда шла на Junior-позицию – тогда готовилась, а в данном случае мне показалось более правильным продемонстрировать реальные скиллы, а не «заботать паттерны», как делал один мой знакомый).

Адекватные моим ожиданием вакансии на самом деле достаточно однотипные, и как между ними выбирать – большой вопрос. Как правило, содержат стандартный набор требований/технологий (JEE, Hibernate, Spring, SQL, Tomcat/JBoss..). В общем, как под копирку.

Собеседования.

Собеседования были разные. Попытаюсь как-то их классифицировать.

1. Разговор ни о чем. Таких довольно много – и это не собеседование с HR, это тех.специалист. То есть, ответы на все их вопросы есть у меня в резюме (а с чем приходилось работать? а что Вы делали на последнем месте работы ?), а их рассказ о работе в компании в целом соответствует описанию в вакансии. Я не знаю, по какому критерию эти люди отбирают кандидатов.

2. То же, что в п.1, но до или после собеседования дают тестовое задание. Знаю, многие разработчики против тестовых заданий, и можно понять, т.к. тратить по дню на задание (а поиск работы часто совмещен с основной работой) – дело неблагодарное. Но тем не менее это возможно самый адекватный способ оценки.

3. Стандартное Junior-собеседование. Да, после второго такого собеседования я заново запомнила до автоматизма, какие методы есть у класса Object и как выглядит дерево интерфейсов java-коллекций. Не буду утверждать, хорошо это или плохо, скажу только, что по большей части такие собеседования выглядели как попытка самоутверждения со стороны собеседующего. Типа как экзамен с вредным преподавателем – «Не знаешь? Эх, ты..» Если честно, мне кажется, что люди просто не знают, что спрашивать у девелоперов выше джуниоров. Да, кстати, самый шик – задачи «на логику». Ну, знаете, про горящие неравномерно веревки и прочие радости. Еще на одном собеседовании руководитель дал задачку по алгебре, класса из 8го, причем, судя по всему, ошибся при постановке задачи. Когда я сказала, что решений бесконечно много, он попытался решить сам, запутался и перешел к следующему вопросу.

4. «Адекватные» — по моему личному имхо. Собственно, в контексте диалога «прощупываются» скиллы и понимание области. «Для чего в принципе нужен DI ?», «Чем концептуально отличаются REST от SOAP ?» и т.д. На мой взгляд, в таком диалоге намного лучше можно понять, что перед тобой за человек, и можно ли с ним будет работать, чем по его ответу на вопрос «каков порядок сложности алгоритма поиска в HashMap?». Отдельно хочется написать про собеседование, на котором HR на 15 минут оставила меня с «заданием», но не со стандартным тестом из Quizful или сертификационного теста, а с несколькими листочками кода, описанием и предложением найти баги и предложить пути рефакторинга. Соответственно, после прихода руководителя отдела произошло обсуждение (а не экзамен).

Заключение

Судя по всему, сейчас спрос на java developer сильно превышает предложение. Уже после того, как я определилась с новым местом работы, мне все еще приходили предложения, кстати, очень заманчивые хотя бы с финансовой точки зрения, но сил и желания продолжать поиск уже не было.

Недавно в разговоре со знакомым родилась такая мысль: собеседование – это как игра в «контакт». Или этот контакт – причем обоюдный – появился у тебя с собеседующим, или нет. Хочу сказать, что почти из всех компаний, в которых у меня сложилось хорошее впечатление о руководителе, пришел положительный ответ.

Кстати, что странно, отрицательные ответы почти не приходят. То есть, после собеседования люди просто молчат. Одна компания даже проигнорировала мое письмо с вопросом. Не знаю, может, они все еще думают.

Как стать Senior Java Developer-ом за 30 месяцев

Привет всем,
Особенно студентам, начинающим программистам и всем, кто хочет ими стать! Сегодня я расскажу, как пройти путь от абсолютного нуля до Senior Developer меньше, чем за 3 года. Надеюсь, мой бесценный опыт будет кому-нибудь полезен (и поможет не набивать шишки там, где не надо).

Сразу оговорюсь, что я не отношусь к той чудесной части человечества, которая начала программировать в детстве или хотя бы в юности. Вплоть до конца школы я была таким заядлым гуманитарием, что аж противно. Моё поступление в некий неплохой петербургский технический вуз – ирония судьбы, подробности же к делу не относятся.

Итак, имеется двадцатилетний студент четвёртого курса, обучающийся по специальности «Информационные технологии в образовании» со специализацией «Управление проектами». В пассиве – очень скромное количество и качество обучения программированию в вузе и гуманитарное прошлое. В активе – огромное желание стать Java-программистом. Задача – реализовать свою мечту. Алгоритм действий приведён ниже (на естественном языке, но желающим могу, в принципе, привести диаграмму. Или вообще псевдокодом воспользоваться).

Шаг первый
Всячески использовать возможности обучения, подвёртывающиеся в вузе. У меня это были курсовые работы на Java. Постановка задачи для курсовой работы была примерно такой: «Вот тебе ТЗ, вот тебе книга – делай!» Лучше всего выбирать более сложную задачу, более сложную реализацию, чтобы получить хоть какой-то опыт, которым можно будет оперировать при работе с работодателем.

Шаг второй.
Обучаться самостоятельно. Это очень важно. Настоящие специалисты учатся всю жизнь, поэтому и начинать нужно как можно раньше. Здесь главное – найти подходящие книги, и в этом месте я набила свою первую шишку – это было активное использование курсов на сайте Интуит. Интуит – это хорошо, конечно, но лучше бы я вместо этого пять раз «Философию Java» прочитала. И ещё пару раз «Основы объектно-ориентированного проектирования» Мейера.

Шаг третий – самый важный
Как можно раньше устроиться на работу. Теоретические знания и студенческие работы – это всё хорошо, конечно, но далеко на них не уедешь. Здесь я набила вторую шишку – я тянула с этим довольно долго (идея стать Java-программистом пришла мне на четвёртом курсе, а устроилась я на работу только на пятом). Всё время казалось, что я не готова, — то книгу надо дочитать, то курс на сайте пройти… Так вот, всё это бред. Студент, находящийся в поисках своей первой работы, обладает рядом преимуществ, надо только их правильно преподнести.
Прежде всего, не стоит стесняться своей неопытности, поскольку здесь пригодится то, что было наработано на шаге первом – какие-никакие, а реальные программы. Можно и нужно говорить и о своих теоретических знаниях. Ну, а самое главное, — подчеркнуть то, что выгодно для работодателя: ты готов заниматься сколь угодно нудным кодерством, чтобы получить необходимый опыт в реальном проекте. Тогда более опытные программисты смогут заняться интересными, а самое главное, важными задачами, и все будут в плюсе. И при этом платить тебе надо сущие копейки. Когда я устроилась на свою первую работу (тогда мой опыт сводился как раз к курсовой работе на Java, а из серьёзных книг по языку был прочитан только Шилдт), я была счастлива до чёртиков: надо же, меня будут учить Java, да ещё и платить за это!

Шаг четвёртый
Когда собеседование позади, и ты наконец-то задействован в реальном проекте, главное, как ни парадоксально, вовремя из него уйти. Первое время тебе, конечно, там круто. Тебя учат, ты каждый день профессионально растёшь, начинаешь решать всё более и более сложные задачи, при этом получаешь возможность общаться с опытными специалистами, советоваться с ними по выбору профессиональной литературы и т.п. Но рано или поздно, в зависимости от того, насколько быстро ты развиваешься, процесс твоего роста приостанавливается. Всё это из-за того, что тебя приняли на позицию Junior Developer-а, который решает нудные задачки по программированию, и, собственно, ты изменился, а проект – нет. Те задачи, которые полгода-год-полтора назад казались тебе интересными, сейчас так же скучны, как были они тогда для старших товарищей, для разгрузки которых тебя, собственно, и наняли. Хорошо, если ты попал в компанию, которая предполагает постоянный рост своих сотрудников, но в моём случае всё было иначе, поскольку там самым простым способом перейти с Junior Developer на Middle – это уволиться, а потом снова наняться. Чтобы понять это, я потратила целый год в попытках то добиться повышения сложности задач и заодно зарплаты (удалось однажды, но ненадолго: вскоре я снова переросла этот уровень), то устроиться в соседний отдел, где вроде бы требовались именно Middle Developer-ы. В итоге пришлось уволиться. Но мне бы хотелось ещё раз повторить: не стоит ждать повышения! Лучше вообще в качестве превентивной меры регулярно ходить по собеседованиям, но об этом – в шаге пятом.

Шаг пятый
И вот ты – молодой программист с неким опытом работы и большим желанием доказать миру всю глубину своей крутизны. Конечно, проще всего это сделать, пройдя собеседование на какую-нибудь привлекательную позицию.
На этом шаге мой опыт составлял чуть больше двух лет. Профессиональный рост на моей работе остановился примерно через год после того, как я на неё устроилась, и поэтому единственным спасением было постоянное саморазвитие: чтение книг, посещение семинаров, etc. Следует заметить, что собеседование само по себе содержит некоторую обучающую составляющую, поскольку если ты чего-то не знаешь, то можно или узнать об этом у интервьюера, или – позднее – из других источников. Хотя бы поэтому стоит ходить по собеседованиям, даже если не находишься в поисках работы. К тому же интервью держат тебя в курсе событий, позволяют знакомиться с интересными людьми и проектами, ну и, наконец, чем чёрт не шутит, может, и правда удастся найти интересную позицию? Ещё один довольно полезный совет: стоит устанавливать в резюме желаемую зарплату побольше. Тогда тебя будут рассматривать как кандидата на более серьёзные позиции, и в таком случае скучно уж точно не будет!

Искать новую работу можно не только на соответствующих сайтах типа hh.ru, но и на различных ярмарках вакансий и фестивалях. Кстати, свою нынешнюю работу я нашла благодаря фестивалю НайтиIT весной 2012, перескочив с уровня Junior Java Developer сразу на Senior.

Подытоживая всё вышесказанное, хотелось бы сделать следующие выводы:

1. Учиться, учиться и ещё раз учиться! Теоретически, практически, самостоятельно, на курсах – как угодно! Главное – в режиме non-stop!
2. Общаться, общаться и ещё раз общаться! С коллегами, специалистами в смежных областях, интервьюерами, лесторами… Это тоже вариант обучения.
3. Регулярно ходить по собеседованиям как тогда, когда ты неопытный студент, как тогда, когда ты уже опытный специалист.
И самое главное – не бойтесь ставить перед собой значительные цели. Стреляйте по звёздам, тогда уж точно попадёте как минимум в луну!

Автор: EliaNekipeloff

Источник

История одного девелопера, или Стреляя по звёздам, попадёшь в Луну / Habr

Привет всем,
Особенно студентам, начинающим программистам и всем, кто хочет ими стать! Я бы хотела рассказать историю своего джуниорства, надеюсь, мой бесценный опыт будет кому-нибудь полезен (и поможет не набивать шишки там, где не надо).

Сразу оговорюсь, что я не отношусь к той чудесной части человечества, которая начала программировать в детстве или хотя бы в юности. Вплоть до конца школы я была таким заядлым гуманитарием, что аж противно. Моё поступление в некий неплохой петербургский технический вуз – ирония судьбы, подробности же к делу не относятся.

Итак, имеется двадцатилетний студент четвёртого курса, обучающийся по специальности «Информационные технологии в образовании» со специализацией «Управление проектами». В пассиве – очень скромное количество и качество обучения программированию в вузе и гуманитарное прошлое. В активе – огромное желание стать высококвалифицированным специалистом в области разработки высоконагруженных Java-приложений (такая формулировка пришла намного позже, на ранней же стадии было примерно так: «Java клёвая, хочу на ней круто кодить!»). Задача – реализовать свою мечту. Ниже приведён алгоритм, худо-бедно сформулированный по окончании анализа всех ошибок, сделанных в попытках решить эту задачу.

Шаг первый

Всячески использовать возможности обучения, подвёртывающиеся в вузе. К сожалению, это понимание пришло у меня слишком много, и уже закончив шестой курс, я поняла, как много всего упустила. Высшая математика, дискретная математика, теорвер… Когда только учишься, кажется, что это всё не так уж важно, а главное — выучить язык. Чёрта с два! Теперь я пытаюсь самостоятельно изучить то, в чём без преподавателя разобраться нелегко и чему меня совершенно добровольно в вузе учили. Единственное, чему я уделяла внимание в вузе — это курсовые работы на Java. Постановка задачи для курсовой работы была примерно такой: «Вот тебе ТЗ, вот тебе книга – делай!» Позитивный опыт, извлечённый из этого, такой: лучше всего выбирать более сложную задачу, более сложную реализацию, чтобы получить хоть какой-то опыт, которым можно будет оперировать при работе с работодателем.
Шаг второй

Рано или поздно приходит понимание, что ты не знаешь ничего! Поэтому приходится учиться самостоятельно, и притом самостоятельно. Это очень важно. Настоящие специалисты учатся всю жизнь, поэтому и начинать нужно как можно раньше. Здесь главное – найти подходящие книги, и в этом месте я набила свою вторую шишку – это было активное использование курсов на сайте Интуит. Интуит – это хорошо, конечно, но лучше бы я вместо этого пять раз «Философию Java» прочитала. И ещё пару раз «Основы объектно-ориентированного проектирования» Мейера.
Шаг третий

Вроде бы у тебя уже есть кое-какие знания; настала пора их применять. А для этого необходимо как можно раньше устроиться на работу. Теоретические знания и студенческие работы – это всё хорошо, конечно, но далеко на них не уедешь. Здесь я набила очередную шишку – я тянула с этим довольно долго (идея стать Java-программистом пришла мне на четвёртом курсе, а устроилась я на работу только на пятом). Всё время казалось, что я не готова, — то книгу надо дочитать, то курс на сайте пройти… Так вот, всё это бред. Студент, находящийся в поисках своей первой работы, обладает рядом преимуществ, надо только их правильно преподнести.
Прежде всего, не стоит стесняться своей неопытности, поскольку здесь пригодится то, что было наработано на шаге первом – какие-никакие, а реальные программы. Можно и нужно говорить и о своих теоретических знаниях. Ну, а самое главное, — подчеркнуть то, что выгодно для работодателя: ты готов заниматься сколь угодно нудным кодерством, чтобы получить необходимый опыт в реальном проекте. Тогда более опытные программисты смогут заняться интересными, а самое главное, важными задачами, и все будут в плюсе. И при этом платить тебе надо сущие копейки. Когда я устроилась на свою первую работу (тогда мой опыт сводился как раз к курсовой работе на Java, а из самым серьёзным из прочитанных авторов по языку был только Шилдт), я была счастлива до чёртиков: надо же, меня будут учить Java, да ещё и платить за это!
Шаг четвёртый

Когда собеседование позади, и ты наконец-то задействован в реальном проекте, главное, как ни парадоксально, вовремя из него уйти. Первое время тебе, конечно, там круто. Тебя учат, ты каждый день профессионально растёшь, начинаешь решать всё более и более сложные задачи, при этом получаешь возможность общаться с опытными специалистами, советоваться с ними по выбору профессиональной литературы и т.п. Но рано или поздно, в зависимости от того, насколько быстро ты развиваешься, процесс твоего роста приостанавливается. Всё это из-за того, что тебя приняли на позицию Junior Developer-а, который решает нудные задачки по программированию, и, собственно, ты изменился, а проект – нет. Те задачи, которые полгода-год-полтора назад казались тебе интересными, сейчас так же скучны, как были они тогда для старших товарищей, для разгрузки которых тебя, собственно, и наняли. Хорошо, если ты попал в компанию, которая предполагает постоянный рост своих сотрудников, но в моём случае всё было иначе, поскольку там самым простым способом перейти с Junior Developer на Middle – это уволиться, а потом снова наняться. Чтобы понять это, я потратила целый год в попытках то добиться повышения сложности задач и заодно зарплаты (удалось однажды, но ненадолго: вскоре я снова переросла этот уровень), то устроиться в соседний отдел, где вроде бы требовались именно Middle Developer-ы. В итоге пришлось уволиться. Но мне бы хотелось ещё раз повторить: не стоит ждать повышения! Лучше вообще в качестве превентивной меры регулярно ходить по собеседованиям, но об этом – в шаге пятом.
Шаг пятый

И вот ты – молодой программист с неким опытом работы и большим желанием доказать миру всю глубину своей крутизны. Конечно, проще всего это сделать, пройдя собеседование на какую-нибудь привлекательную позицию.
На этом шаге мой опыт составлял чуть больше двух лет. Профессиональный рост на моей работе остановился примерно через год после того, как я на неё устроилась, и поэтому единственным спасением было постоянное саморазвитие: чтение книг, посещение семинаров, etc. Следует заметить, что собеседование само по себе содержит некоторую обучающую составляющую, поскольку если ты чего-то не знаешь, то можно или узнать об этом у интервьюера, или – позднее – из других источников. Хотя бы поэтому стоит ходить по собеседованиям, даже если не находишься в поисках работы. К тому же интервью держат тебя в курсе событий, позволяют знакомиться с интересными людьми и проектами, ну и, наконец, чем чёрт не шутит, может, и правда удастся найти интересную позицию? Ещё один довольно полезный совет: стоит устанавливать в резюме желаемую зарплату побольше. Тогда тебя будут рассматривать как кандидата на более серьёзные позиции, и в таком случае скучно уж точно не будет!

Искать новую работу можно не только на соответствующих сайтах типа hh.ru, но и на различных ярмарках вакансий и фестивалях. Кстати, свою нынешнюю работу я нашла благодаря фестивалю НайтиIT весной 2012, перескочив с уровня Junior Java Developer сразу на Senior.

Подытоживая всё вышесказанное, хотелось бы сделать следующие

Выводы

1. Учиться, учиться и ещё раз учиться! Теоретически, практически, самостоятельно, на курсах – как угодно! Главное – в режиме non-stop!
2. Общаться, общаться и ещё раз общаться! С коллегами, специалистами в смежных областях, интервьюерами, лесторами… Это тоже вариант обучения.
3. Регулярно ходить по собеседованиям как тогда, когда ты неопытный студент, как тогда, когда ты уже опытный специалист.
И самое главное – не бойтесь ставить перед собой значительные цели. Стреляйте по звёздам, тогда уж точно попадёте как минимум в луну!

Почему Senior Developer'ы не могут устроиться на работу / Habr

Сначала о том, как 5 месяцев назад я проходил собеседование на работу. Меня посоветовал друг, и прошло уже немало времени, с момента как я ответил рекрутеру. Я был поражён, как сильно весь процесс изменился за последние 5 лет.

После первичного созвона меня отправили на сторонний сайт (HackerRank), чтобы я решил три небольших задачки за 1 час. Для меня это был первый подобный опыт. Первые две задачки были простыми, но третья оказалась посложней. Когда время подошло к концу, моё решение не проходило все тесты, а только где-то 8 из 10 необходимых.

Уже на данном этапе оказалось, что я отфильтрован из списка потенциальных кандидатов. Нет худа без добра, так как чуть позже я серьёзно заболел и, пройди я собеседование успешно, просто не смог бы нормально добираться до места работы. Полученный опыт, однако, заставил меня серьёзно задуматься. Я решил подготовиться на будущее и делал по одной задачке с того сайта каждую неделю.


Задачки Повсюду

Мой хороший друг сейчас ищет свою следующую работу, будучи кандидатом наук в Информатике с более чем десятилетним практическим опытом. Почти каждый раз его просят решить какие-нибудь задачки — очно или на стороннем сайте. Он приобрёл Cracking the Coding Interview (в России книга издана как «Карьера программиста» — прим. перев.), чтобы шагать в ногу с рынком труда, но развитие любого навыка занимает время. А несколько отличных вакансий уже прошли мимо.

Проблема всплыла в обсуждении на Megamaker (закрытое англоязычное сообщество для разработчиков и стартаперов — прим. перев.) и один из участников поделился наболевшим:


Скоро мне стукнет 45 и свой стартап (где был CTO) я покинул в декабре. С тех пор я завалил не меньше 10 тестов и интервью на программиста. Пишу код при этом я уже почти 20 лет, включая создание прошивок (по образованию я инженер-электронщик) и полномасштабные распределенные веб-приложения с интеграцией IoT. Я с нуля создавал ПО для крупных специализированных производственных объектов по всему миру. Тем не менее, я просто не могу устроиться программистом, потому что постоянно проваливаю эти тестовые задачки.

А этот твит Макса Хауэлла пошёл в массы несколько лет назад. Это и смешно, и грустно, и одновременно правда.

https://twitter.com/mxcl/status/608682016205344768?lang=en

Факт: для многих Senior Developer'ов, когда они начнут искать другую работу, следующее собеседование может оказаться неприятным сюрпризом.




Разработчики Ненавидят Задачки

Некоторые программисты отвечают…


Я обычно заканчиваю интервью, когда мне предлагают что-то подобное.

или


Способность решить эту задачку ничего обо мне не скажет. Могу ли я общаться с клиентами? Могу ли развернуть работающее веб-приложение? Могу ли нагуглить всё необходимое? Могу ли обучаться на лету? Вот что важно, а не способность написать сортировку пузырьком.

Контраргумент заключается в том, что задачки нужны, чтобы быстро отсеять явно слабых кандидатов. Хотя, конечно, и опытный разработчик может не захотеть их решать, если у него вагон предложений.

Я тоже думаю, что эти задачки ничего не скажут о способности кандидата справляться с настоящей работой. Формулировка часто хромает, а информации недостаточно (или нельзя сделать однозначный вывод о её достаточности). В большинстве случаев задачки на самом деле относятся к миру математики. Так что, кстати, наличие профильного образования будет преимуществом.

Рекрутёры почти гарантированно завернут кандидатов, которые могли бы стать ключевыми в компании. Так например, когда Даниэля Бухмюллера не приняли в Netflix…


https://twitter.com/rrubyist/status/1124448304555798529

Компании Любят Задачки

Чтобы понять, откуда появились задачки, нужно понять как изменился мир вокруг: доля работающих удалённо постоянно растёт, а международные команды становятся нормой.

Но вместе с ростом пула удалённых разработчиков растёт и количество заявок, которые нужно обработать, чтобы найти подходящего сотрудника. Можете представить себе работу с 500 откликами на одну вакансию?


https://twitter.com/ideasasylum/status/1126500299470807046

К тому же я слышал о собеседованиях, где кандидат вообще не умел программировать (не мог написать программу типа hello world). Тратить время на десятки таких собеседований не хочет никто.

И задачки в качестве средства первичного отсеивания решают обе проблемы. Компанию устраивает риск потери пары крутых кандидатов ради значительного ускорения всего процесса. Теперь с почти неограниченным пулом претендентов они могут себе это позволить. Сухая статистика показывает, что конвейер выдаст больше хороших специалистов в единицу времени.

Поэтому я считаю, что задачки на собеседованиях — всерьёз и надолго, и их роль будет только расти.



Потребность в программистах велика как никогда и тем более в Senior Developer'ах. Вот только не рассчитывайте, что годы опыта купят вам беззаботное трудоустройство. Готовьтесь к решению тестовых задачек, пока время не поджимает.

Java Enterprise vs Android в 2019 — что выбрать новичку? / Habr

Решил поделиться своими мыслями на тему того, в какую отрасль разработки стоит пойти человеку, освоившему Java core и основы computer science. А дороги как известно две: Java Enterprise или Android-разработка. Под Java Enterprise программированием я понимаю разработку, вакансии которой на hh имеют заголовок «Java-разработчик». Вакансии, связанные с android-разработкой можно найти на том же сайте по запросу, соответственно, «android-разработчик».

Будем считать, что вы изучили на базовом уровне core языка Java, а также ознакомились с темами алгоритмов, SQL и другими базовыми вещами из computer science, и теперь выбираете путь куда двигаться дальше с прицелом на то, чтобы как можно скорее устроиться на должность junior-программиста. Обсудим какие есть плюсы и минусы в выборе между двумя обозначенными выше ветками разработки.

1) Стек технологий


Java-программирование пришло в бизнес уже почти 20 лет назад. Как следствие, в сфере появилось большое разнообразие фреймворков. На каждом проекте используется свой стек технологий, и бывает достаточно сложно понять, какие технологии еще будут жить, какие вот-вот умрут, а какие уже давно не используются. При этом, кроме джавовских вещей от джависта также требуют знать UI технологии: JS с фреймворками, html, css

Так как android относительно молодая ОС, а в бизнес она вошла еще позже, то тут нет такого зоопарка фреймворков как в большой джаве. Нет тут ни спринга, ни хибернейта, ни других более экзотических вещей. Работу тут можно начинать имея в багаже знаний лишь android sdk и java core. UI, насколько мне известно, предоставляется прямо «из коробки» (android studio), средствами drag and drop. То есть GUI часть дополнительно изучать не нужно

2) Особенности сферы


Как это ни печально, в России Java-программирования нет (за небольшим исключением — банки и гос порталы). То что мы пишем тут отправляется заказчикам в Европу и Америку. Следствием того, что заказчиками являются крупные компании является сложность самой бизнес-логики. Минимальный порог вхождения предполагает не только знание основных фреймворков, но также и специфические требования по распределенным системам, big data, глубокому пониманию многопоточности, машинному обучению

Android-приложения пишутся как для малого бизнеса, так и для крупных игроков по всему миру. Как следствие, есть возможность стартовать с простых проектов и развиваться в сторону более сложных. Другими словами, android предоставляет более низкий порог входа, но не ограничивает потолок — наряду с простыми проектами на рынке присутствуют также и достаточно сложные.

3) Есть ли будущее?


Насчет промышленного программирования на большой джаве — не знаю. Хотя она и держится в первых строчках рейтинга языков программирования, чем это вызвано для меня не понятно. Раньше это можно было объяснить наличием JVM и ее переносимостью, но теперь, когда десктопные приложения больше не разрабатываются и весь функционал выносится в веб — будущее джавы как языка для enterprise программирования для меня под вопросом. Наверное, раз джаву не очень активно используют российские компании, предпочитая ей другие языки программирования, видимо джава не очень современный язык, отвечающий требованиям реальной жизни.

На рынке смартфонов OS Android нет конкурентов. Вероятность того, что iOS поглотит android близка к нулю. Следовательно, ближайшие пару десятков лет в отрасли вряд ли произойдут существенные изменения. Может будут появляться новые фреймворки, но тот кто начинает с нуля сейчас сможет последовательно их изучать и расти профессионально вместе с развитием самой отрасли. В отличие от большой джавы не нужно пытаться изучить все и сразу, чтобы хоть куда-то устроиться — можно спокойно изучать тот небольшой scope технологий, что используются на рынке сейчас

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *