Вітання! Сьогодні поговоримо про шлях розвитку Java-розробника та про те, що він обов'язково повинен знати, щоб користуватись попитом. Чекліст Java-developer'а. Що має знати розробник - 1Будь-який розробник може “завалити” співбесіду. Але не знати все – це нормально. Те, що ви не відповісте на деякі питання, — це теж нормально. Як правило, кожен Java-програміст повинен мати базові знання про розробку. Отже, давайте розберемо, які технології вважаються “базовими”.

1. Базові алгоритми

Перше, за що варто взятися, почавши вивчати програмування (стосується не тільки Java), це основи. Наприклад, алгоритми. Їх існує безліч, і не варто вбивати цілі роки на спроби вивчити якомога більше алгоритмів: більшість з них вам не знадобиться. Необхідний мінімум знань можна отримати з книги "Грокаємо алгоритми". Для початку шляху цього вистачить, але за бажання можна почитати книги "Структури та алгоритми" або "Алгоритми на Java" Роберта Седжвіка та Кевіна Уейна. Також я раджу вам підтягнути знання основ інформатики. Це можна зробити на JavaRush за допомогою курсу CS50.

2. Java Syntax

Після вивчення основ алгоритмів ми повинні вивчити синтаксис Java. Для цього чудово підійде курс JavaRush. У процесі виконання численних завдань ви "наб'єте" руку на Java синтаксисі і будете без особливих роздумів писати / читати Java-код, ніби це ваша рідна мова. JavaRush — це практика, а крім неї потрібно ще й поглядати в теорію, щоб розуміти, що саме ви робите. Для цього можна прочитати книги, наприклад, одну з наступних:
  • "Head First Java";
  • "Java для чайників" Баррі Берд;
  • “Java. Посібник для початківців” Герберт Шилдт.
Після прочитання цих книг можна братися за книжки складніше:
  • "Філософія Java", Брюс Екель;
  • "Ефективне програмування", Джошуа Блох;
  • “Java. Повне керівництво”, Герберт Шилдт.
Останні три книги не є легким чтивом для новачків, але вони можуть дати міцні знання теорії Java. Також не потрібно забувати про статті на JavaRush, адже в них можна знайти пояснення на більшість тем, що вас цікавлять. Знайти потрібну статтю можна, вбивши в пошуку цікаву для вас тему. Також рекомендую шукати запитання зі співбесід по Java, як наприклад, у цій добірці питань з абстрактних класів та інтерфейсів. Це допоможе зрозуміти, що саме вам потрібно вивчити та до яких питань бути готовим.

3. Патерни програмування

Паттерни програмування — це деякі повторювані шаблони, які є вирішенням проблеми в рамках контексту, що часто виникає. Серед них є базові, прості шаблони, які повинен знати кожен програміст, який себе поважає. Щоб розібратися в цій темі, використовуйте книгу "Head First. Паттерни проєктування”. Вона доступно пояснить базові патерни програмування. Але в книзі багато говориться і про Java , тому на момент вивчення книги необхідно опанувати цю мову програмування. Для більшого заглиблення в патерни можна також прочитати “Прийоми об'єктно-орієнтованого проєктування. Паттерни проєктування”. Після вивчення цієї теми ви почнете бачити патерни практично скрізь у коді. Звертайте на це увагу, особливо на патерни, що використовуються в Spring, оскільки це популярне питання на співбесідах.

4. Парадигми програмування. Чистота коду

Крім стандартних шаблонів програмування, існують різні принципи та парадигми, які необхідно знати. Також необхідно стежити за чистотою коду та його читабельністю. Все, що потрібно знати на цю тему, є в книзі “Чистий код” Роберта Мартіна або взяти на озброєння книгу “Ідеальний код” Стіва Макконнелла.

5. SQL

Наступним пунктом йде вивчення мови реляційних баз даних – SQL . Бази даних – це місце, де зберігається інформація (дані) веб-програми. База даних складається з безлічі таблиць (адресна книга у вашому телефоні – найпростіший приклад подібних таблиць). Для Java-розробників зона відповідальності – не лише Java-застосунок, але і база даних, з якою він взаємодіє і де зберігає дані. У реляційних (найпоширеніших) базах вся взаємодія відбувається через спеціальну мову — Structured Query Language, чи SQL. Щоб розібратися в цій темі, достатньо прочитати одну з книг:
  • "Вивчаємо SQL", Алан Б'юлі;
  • "SQL", Кріс Фіайлі;
  • "Head First SQL", Лінн Бейлі.
Але ж практика без теорії не працює, чи не так? І на співбесідах для перевірки знань з SQL нерідко (або й завжди) дають одне-два завдання на написання SQL-запиту. Тому дуже важливо відточити свої практичні SQL-навички, щоб показати себе у хорошому світлі. Відмінним ресурсом для набивання SQL-практики може стати ресурс HackerRunk.

6. MySQL/PostgreSQL

Після вивчення мови SQL вам потрібно ознайомитися з конкретною реалізацією бази даних. Залежно від бази даних, деякі команди можуть відрізнятися. Та й різниця в можливостях баз даних дуже відчутна. Найпоширеніші реляційні бази даних — MySQL і PostgreSQL. Чекліст Java-developer'а.  Що повинен знати розробник?MySQL набагато простіша, але при цьому у PostgreSQL ширші можливості. Для початку достатньо бути знайомим хоча б із однією з них. Вивчати реалізацію баз даних можна, якщо використовувати навички сьорчінгу у Google — знаходити потрібні статті та навчальні уроки в Youtube. Ви повинні набивати руку на правильному пошуку питань, що вас цікавлять, адже програміст — це людина "з чорним поясом" з пошуку в Google.

7. Maven/Gradle

Необхідно вивчити один з фреймворків Gradle або Maven, які призначені для складання проєктів, тому що тепер для вас Java — це не лише завдання з кількох класів, але й мова для написання повноцінних додатків. Ви повинні розуміти, як збирати проєкт, які є етапи складання, як потрібно підвантажувати необхідні зовнішні бібліотеки з готовим кодом і багато іншого. Незважаючи на те що Gradle новий і лаконічний, Maven використовується в більшості випадків. Тому приділіть особливу увагу саме його життєвому циклу збирання.

8. Git

Git – розподілена система управління версіями. Ця технологія дозволяє розробникам спільно створювати один додаток, причому один одному не заважаючи. Звичайно, є й аналоги даної системи керування версіями. Наприклад, Subversion . Але в основному використовується саме Git і потрібно вміти працювати з ним. Чекліст Java-developer'а.  Що повинен знати розробник?Крім навчальних статей по ньому, у Youtube достатньо відео, які допоможуть вам крок за кроком освоїти цю технологію. Спочатку краще використовувати саме консольний Git, а не якусь інтерфейсну імплементацію, адже в ній потрібно буде все робити через команди. На співбесідах часто люблять запитувати деякі команди Git, тому рекомендую вам виписувати їх і тримати десь під рукою. Також раджу вести конспект, у якому ви відзначатимете найважливіші моменти, щоб перед співбесідою пройтися по ньому та освіжити пам'ять.

9. JDBC

Ця технологія призначена для забезпечення з'єднання між вашим Java-застосунком і реляційною базою даних. Щоб ознайомитись з основами, рекомендую прочитати статтю "JDBC або з чого все починається". Статей, що пояснюють технологію JDBC і надають елементарні приклади, достатньо, незважаючи на те, що голий JDBC безпосередньо вже ніхто не використовує.

10. JPA. Hibernate

JPA — це спосіб організації з'єднання між програмою Java та базою даних, так само, як і JDBC. Але при цьому JPA — більш високорівнева технологія і, відповідно, простіша у використанні. Але JPA — це лише специфікація (концепція), яка не реалізована і для якої потрібна її конкретна реалізація. Таких реалізацій багато, але найближчою до ідеалів JPA, популярною і розвиненою, вважається Hibernate. У своїй кар'єрі розробника ви неодноразово зіткнетеся з даною технологією. Тому окрім знайомства з цією технологією за статтями, можливо, варто задуматися про прочитання книги про неї, наприклад, — "Java Persistence API".

11. Spring

Коли ви станете Java-розробником, Spring перестає бути для вас просто словом. Чекліст Java-developer'а.  Що повинен знати розробник?Зараз цей фреймворк за важливістю ділить перше місце із необхідністю знати синтаксис мови Java. Ви можете сказати, що Spring має аналог, тобто технології Java EE. Але Java EE застаріла і на нових проєктах вже й не використовується. У переважній більшості зараз Java-розробник — це Java-Spring-розробник, тому знання деяких базових технологій Spring є обов'язковим. Spring це не просто фреймворк, а ціла платформа фреймворків: Чекліст Java-developer'а.  Що повинен знати розробник?І це лише частина фреймворків, які надає Spring. Новачку ж достатньо знати лише деякі з них:

  • Spring Core

Він повинен бути у вас на першому місці, щоб розуміти, що таке Spring: що таке Spring контейнер, біни, DI, IoC і таке інше. Так би мовити, зрозуміти саму філософію використання Spring. Подальше вивчення Spring-фреймворків відбуватиметься, відштовхуючись від цієї бази. Можливо, варто створити свою невелику програму, до якої ви потроху прикручуватимете нові вивчені технології.

  • Spring JDBC

Раніше ми говорили про технологію JDBC, як про технологію для створення з'єднання з базою даних. Взагалі "голе" використання технології зараз можна і не зустріти в проєктах, тому може здатися, що вивчення JDBC і не потрібне. Але це зовсім не так. Розглянувши голе використання JDBC, ви зможете побачити технологію на нижчому рівні, розібратися з її проблемами і недоліками. Почавши вивчати Spring JDBC, ви зрозумієте, що саме цей фреймворк покращує, оптимізує та приховує від наших очей.

  • Spring Hibernate

Як і у випадку з “голим” JDBC, цей фреймворк покращує використання вже існуючої технології, в даному випадку – Hibernate. Якщо розглянути використання Hibernate без Spring, ви зрозумієте, в чому полягає вигода від використання Spring Hibernate.

  • Spring JPA

Раніше ми говорили про JPA та про те, що це лише специфікація, для якої існують різні реалізації. Серед цих реалізацій найближчою до ідеалу є технологія Hibernate. Spring має власну ідеальну реалізацію JPA, яка “під капотом” використовує Hibernate і максимально наближена до ідеалу JPA-специфікацій. Ця технологія називається Spring JPA. До речі вона сильно полегшує звернення до бази даних. Можна вивчити лише JPA без вивчення JDBC, Hibernate, Spring JDBC, Spring Hibernate. Але в такому випадку ваші знання щодо з'єднання з базою даних будуть дуже поверховими.

  • Spring MVC

З цією технологією можна відображати веб-інтерфейс нашої програми для користувачів та забезпечувати спілкування інтерфейсу з іншою частиною програми. Також технологія може працювати без відображення, коли є деяка програма, що відповідає за відображення, і ви з цією програмою взаємодієте за допомогою запитів та відповідей за RESTful технології. Щоб краще засвоїти інформацію про Spring, окрім статей, лекцій на ютубі, можна прочитати кілька книг. Мені дуже зайшла книга "Spring у дії" Уоллса Крейга. Раджу прочитати саме 6 версію, якщо ви добре знаєте англійську. Ще одна чудова книга по Spring — "Spring 5 для професіоналів". Вона важча для освоєння і більше схожа на бібліюдовідник зі Spring, який краще тримати завжди під рукою, ніж прочитати повністю.Чекліст Java-developer'а.  Що повинен знати розробник?

  • Spring Boot

Ця технологія в рази полегшує використання Spring. Я не просто так виніс її в кінець списку, адже вона приховує багато під "капотом" і для людини, незнайомої зі звичайним Spring, багато моментів можуть бути неочевидними і незрозумілими. Спершу для кращого розуміння роботи фреймворків Spring варто використовувати звичайний Spring, а потім вже Spring Boot. Також раджу ознайомитися зі Spring Security та Spring AOP. Але на відміну від технологій, наведених вище, глибокі знання цих двох зараз не потрібні. Це технології не для новачків. На співбесідах джунів про них не запитують (хіба що одне поверхове питання). Почитайте узагальнено, що це за технології та принципи роботи. У цій статті я постійно згадував прочитання книг. З одного боку, це не обов'язково. Можна стати програмістом, не прочитавши жодної книги, вивчивши все необхідне за статтями та навчальним відео. З іншого боку, нарази на ринку розробників-початківців конкуренція висока, що і завищує планку необхідних початкових знань для новачка. Тому чим більше ви знатимете, тим швидше ви зможете знайти свою першу роботу, вразивши інтерв'юера рівнем своїх знань. Всім дякую, і нехай буде з вами Java .Чекліст Java-developer'а.  Що повинен знати розробник?