Выбрать страницу

Немного о Java

Java — один из самых популярных языков разработки. Портал Tiobe в марте 2022 года опубликовал данные, свидетельствующие о том, что Java находится на третьем месте среди всех языков по числу запросов в поисковых системах.

Рейтинг портала Tiobe

Сейчас
на портале hh.ru почти 9000 вакансий для джавистов разного уровня. При этом даже начинающим предлагают зарплату от 50 тыс. рублей.

Г. В.: «Зарплата джависта в среднем немного выше, чем у других специалистов. Исторически сложилось, что Java-разработчик зарабатывает примерно на 20–30% больше, чем, к примеру, программист .NET».

Java — кроссплатформенный универсальный язык разработки, основанный на объектно ориентированном подходе. Если коротко, это означает, что:

джависты могут писать и запускать программный код на любой ОС;

в программе главную роль играют объекты. У каждого из них есть свойства — данные, которые в нем хранятся, и методы — функции, которые он выполняет. Такой подход удобнее для разработки, потому что позволяет писать меньше кода: одни и те же объекты могут выполнять разные действия при разных условиях.

Г. В.: «Мне привычнее и удобнее разрабатывать код под Windows. При этом компании, с которыми я работаю, запускают его на Linux-серверах. Никаких проблем это не вызывает, код одинаково работает на любых системах».

Специалисты по Java работают в двух направлениях:

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

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

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

Проекты, которые написаны на Java

Огромное число крупных российских и зарубежных компаний разрабатывают свои системы на Java — среди них Netflix, Facebook, LinkedIn, YouTube, Minecraft. Кроме того, на этом языке написаны популярные мобильные приложения, например Spotify и Twitter, браузер Opera Mini.

В России Java используют в банках, нефтегазовых корпорациях и крупных IT-компаниях — на этом языке написан бэкенд систем «Сбербанка», «Газпромбанка», «Альфа-Банка», «Газпрома» и «Газпром нефти». Еще джавистов активно набирают для разработки высоконагруженных сервисов в «Яндексе», например «Яндекс.Браузер» и компонент «Яндекс.Маркета», которые отвечают за логистику. Вакансии для разработчиков можно найти
в открытом доступе. Также Java удобен для написания сервисов, которые рассчитывают и оптимизируют доставку товара до покупателя, — на нем работает российское подразделение AliExpress вместе с TMall.

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

Путь разработчика

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

Разные компании рассчитывают грейды по-разному. Самые популярные принципы оценки основаны на нескольких пунктах:

опыт разработчика;

навыки и компетенции;

задачи, которые человек выполняет;

уровень самостоятельности и ответственности.

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

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

Стажер

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

Понимание синтаксиса языка, его операторов и ключевых слов.

Опыт использования базовых структур данных и алгоритмов.

Представление о том, что такое JVM (Java Virtual Machine — виртуальная машина, в которой выполняется программа).

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

Junior

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

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

Использования большинства структур данных и алгоритмов.

Опыт использования современных фреймворков, на которых ведется разработка бэкенда: Spring, Spring Boot, Play.

Понимание устройства JVM: как работают программа и сборщик мусора, как выделяется память, и т.п.

Скорее всего, потребуется базовое знание SQL.

Плюсом будет представление о многопоточности, а также знание шаблонов проектирования.

Джуниор без опыта может рассчитывать на зарплату от 60 тыс. до 100 тыс. рублей. По данным портала russia.trud.com,
средняя зарплата джуниора в России составляет около 73 тыс. рублей.

Г. В.: «В 80-90% случаев знания теории и минимальных навыков работы с фреймворками хватит, чтобы получать среднюю зарплату по рынку. Если теоретические знания более глубокие, оплата может быть ближе к верхней границе».

Middle

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

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

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

Опыт чтения чужого кода, работы в команде и исправления багов.

Теоретическое и практическое понимание методологий разработки и умение довести работу до конца.

Умение работать с ТЗ самостоятельно.

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

Хороший уровень знания фреймворков.

Обязательны знание и использование базовых паттернов проектирования (для выделения абстракций в коде с целью изоляции одного слоя логики от другого).

Из теории важно базовое знание сетевых протоколов.

Понимание, чем плохой код отличается от хорошего, использование рефакторинга на практике.

Г. В.: «Middle работает над сложными частями приложения. Причем работает без чьей-либо помощи, так как это уже опытный и самостоятельный специалист. В некоторых случаях ему даже могут доверить обучение джунов».

Middle-разработчик на Java получает до 300–350 тыс. рублей. Средняя зарплата для специалиста такого уровня
составляет около 270 тыс. рублей, по данным сайта zarplan.com.

Senior

В России сеньорами становятся через пять-шесть лет работы в конкретной бизнес-области. На Западе, для того чтобы получить этот грейд, нужно иметь опыт в разработке около 12–15 лет. Это связано с тем, что за границей работодатель требует от сеньора больше технических знаний и компетенций, чем в России.

Г. В.: «Сеньор должен знать и уметь очень многое, практически всё, а то, чего он не знает, он должен разобрать и осознать на уровне концепции за несколько часов».

Для грейда senior важно глубоко разбираться в конкретной бизнес-области. Например, в компанию, которая работает над платежными системами, скорее возьмут специалиста, который уже реализовал как минимум один подобный проект.

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

Максимально глубокое понимание алгоритмов, а также уверенное знание внутренней реализации структур данных в Java.

Знание устройства фреймворков: как работает то или иное решение, что эффективно и можно использовать, а что применять не стоит.

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

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

Знание архитектурных паттернов построения информационных систем (монолиты, сервисные и микроверсвисные архитектуры, использование ESB).

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

Г. В.: «После согласования архитектуры приложения 95% задач сеньор должен закрывать автономно и без ошибок. Чаще всего он знает не только как решить какой-либо вопрос, но и как его решать НЕ надо. Причем не только знает, но и может объяснить это всей команде. Поскольку он уже прошел огонь и воду, натренировался на своих ошибках и сделал выводы из них, скорее всего, он будет наставником для менее опытных коллег и сможет проводить занятия по лучшим практикам разработки, которые применяются в компании».

В России сеньор получает до 450-500 тыс. рублей. Сайт zarplan.com приводит
среднюю зарплату на уровне 374 тыс. рублей. Но бывает, что специалистов этого грейда приглашают на зарплату более 600 тыс. рублей. Такие вакансии часто остаются внутри компаний, не появляются в открытом доступе. За границей, например в Германии, есть вакансии с оплатой до 1,8 млн рублей.

После позиции Senior любому программисту придется выбрать, чем заниматься дальше. Здесь есть два пути:

наращивать компетенции в технологиях и разработке, чтобы стать Tech Lead или Architect,

руководить другими разработчиками в роли Team Lead.

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

Г. В.: «Кандидаты на эти три роли часто вырастают внутри команды. Причем тимлидом необязательно назначают Senior-разработчика, на эту позицию могут поставить и мидла с навыками менеджера».

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

Понимает, как работает тот или иной компонент и как они взаимодействуют между собой.

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

Г. В.: «Если у вас тысяча клиентов — не нужно усложнять, но если бизнес прогнозирует миллион клиентов или крупные вычислительные нагрузки (например, в системах, близких к реальному времени), то нужно быть архитектурно готовым к этим ограничениям. Архитектор приносит экономию на дистанции, если он не ошибся в архитектуре, — в моменте он кажется не самым занятым и не самым полезным сотрудником».

Tech lead — технический лидер команды. Скорее всего, это человек, который дольше всех работает над проектом или обладает самым большим опытом в сфере. Чем глубже вы изучаете технологии, тем ближе вы к техлиду. Этот грейд — последний рубеж экспертизы в компании, за ним уже нет старшего коллеги, а поэтому знать нужно всё, что знает сеньор, но разбираться в этом необходимо еще глубже. Кроме того:

Важно разбираться в смежных технологиях, их плюсах и минусах.

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

Всё же техлид больше про код, чем про архитектуру, поэтому ему важно максимально глубокое понимание качества кода.

Г. В.: «И техлид, и архитектор должны понимать, в какой момент информационная система достигнет предела своих возможностей и понадобятся доработки, а также заранее учитывать их примерную сложность и стоимость для компании. Оба этих специалиста могут сказать, что нужно переписать рабочий код с учетом новых ограничений. Например, в ретейле кратно растут нагрузки во время распродаж и тормозящий сайт может принести миллионы (а иногда даже миллиарды) долларов убытков, особенно если это Aliexpress в “черную пятницу”».

Как научиться программировать на Java

Стать Java-разработчиком можно без диплома по IT-специальности. Попробовать свои силы стоит даже тем, у кого вообще нет технического бэкграунда. Конечно, выпускнику математического или физического факультета будет проще, чем филологу или ветеринару, но главное — желание и готовность учиться.

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

Можно попробовать изучить язык Java самостоятельно. Например, смотреть видеоуроки на YouTube, читать книги и StackOverflow (систему вопросов и ответов о программировании), задавать вопросы знакомым разработчикам. Обратите внимание, что процесс будет намного быстрее и проще, если к изучению информации подходить структурно и разделять ее на темы.

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

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