Як стати програмістом Java

Привіт. Якщо Ви читаєте цю статтю, то, швидше за все, у Вас виникало такого питання і можливо, не раз. Насмілюся також допустити, що ви не раз задавали собі питання: Що якщо я не вчився на програміста в університеті? У мене навіть спеціальність не технічна. Чи зможу я? Скільки мені доведеться витрачати часу на це заняття? Яку мову обрати? Що доведеться вчити? З чого почати? Якщо у Вас виникало хоча б один з перерахованих питань, то ви в правильному місці.

Не дивно що багато людей губляться в самому початку, не знаючи з чого почати, адже навколо так багато мов, купа книг, різного роду тренінги, відеокурси і навіть індивідуальний менторинг. Як вибрати те, що підходить саме Вам і як домогтися результатів у адекватні терміни? Давайте поговоримо про все по порядку.

 

Мотивація стати програмістом

Перш ніж приступити до якого-небудь складного заняття, що вимагає багато часу і енергії, Ви повинні розуміти навіщо це Вам. Кожен з нас повинен сам для себе відповісти на три важливих питання:

Чому? – найскладніше питання. Він лежить в основі мотивації. Ви повинні чітко уявляти яка Ваша мета та до чого Ви прагнете. Гроші тут не повинні бути ключовою причиною, а просто важливим доповненням. Якщо Вам подобаються сучасні технології, Ви любите щось створювати, можете годинами просиджувати за улюбленою справою, готові їм займатися безкоштовно і у Вас є логічне мислення, тоді цілком імовірно, що це заняття саме для Вас. Ви повинні вміти отримувати задоволення від роботи. Тільки в такому випадку можливо досягти дійсно хороших результатів.

Що? – це досить логічне запитання. Що потрібно робити, щоб домогтися успіху в цій справі. Тут, так само, може стояти питання, який вибрати мову і які матеріали знадобляться для його вивчення.

Як? – Як досягти значних результатів за адекватні терміни.
Якщо на перше запитання кожен має відповісти самостійно, то з останніми двома ми можемо розібратися разом.

Яку мову обрати?

Припустимо що з мотивацією все добре і ми можемо переходити до наступного питання. Перш ніж вибрати якусь мову, Ви повинні розуміти чи є вакансії на ринку праці, чи будуть вони на момент коли Ви освоїте базовий рівень і візьметеся за пошук роботи. Так само, грає роль складність мови програмування. Чим складніше мова, тим більше часу Вам знадобиться на її освоєння. З іншого боку – вибирати те, що легше всього теж не завжди добре, адже конкуренція може бути тут вище, ніж в інших категоріях. Для того щоб визначитися з перспективністю мови, потрібно проаналізувати де вона використовується, наскільки широка сфера застосування і як часто виходять нові фреймворки на обраній Вами мові.

Тут, думаю, настав час підкріпити слова цифрами. За різними опитуваннями серед п’ятірки лідерів знаходяться Java, JavaScript, C++, C і Python.

Приклади опитувань Ви можете знайти в достатку в Інтернеті. Наведемо лише декілька з них:

Приміром, за версією сайту tiobe.com, регулярно публікує рейтинг мов програмування, Java залишається лідером вже який рік. У п’ятірці також З++ і Python.

Інший авторитетне джерело статистики, сайт Stackoverflow, який проводив опитування серед своїх користувачів, говорить про те, що на першому місці JavaScript, у той час як Java знаходиться на п’ятій сходинці рейтингу. Але тут в розрахунок брали так само мови розмітки HTML і CSS.

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

Тепер давайте подивимося на кількість вакансій і відгуків кандидатів з різних мов. Для того щоб не пояснювати довго, просто наведу кілька посилань. Наприклад сайт DOU.ua регулярно публікує різного роду статистику по вакансіях, зарплат і т. д. наприклад, Ви можете спостерігати цікаві тренди зростання кількості вакансій по топовим мов і тут же Ви можете використовувати різного роду фільтри, які покажуть співвідношення кількості вакансій по різним містам і з різних мов. Дані доступні як у табличному, так і в графічному вигляді. Серед фаворитів тут, як звичайно, Java, Python, C++.NET. При чому співвідношення кількості вакансій/відгуки за 2018 рік найкраще у С++, 2-3 особи на місце. На жаль, мені не вдалося знайти схожу статистику по іншим країнам.

Загалом, потрібно вибирати одну з топових мов і тоді на момент закінчення навчання у Вас буде хороший шанс знайти роботу.

На мою скромну думку, хороший варіант для початку кар’єри — Java. Не надто складна мова, велика область застосування і достатня кількість вакансій. Саме про Java і буде друга половина нашої статті. Якщо б мені довелося починати все зараз, то непоганою альтернативою міг би стати Python, так як він зараз активно набирає популярність.

Читайте також  Як скачати відео з ютубу / youtube за допомогою однієї клавіші

 

Огляд Java-екосистеми

Для того щоб у Вас було краще розуміння через що потрібно пройти, щоб стати Java-програмістом, зробимо невеликий огляд Java-екосистеми. Пропоную подивитися на наступну ілюстрацію. Вона, безумовно, не покриває всіх аспектів, але дасть Вам деяке розуміння.

В центрі всесвіту, як звичайно, у нас сама мова Java. Якщо сказати точніше, то Java Core. На момент написання даної статті світ побачила Java JDK 10. Компанія Oracle змінила політику роботи з версіями Java і зараз вже немає такої величезної різниці між версіями, як це було при виході, наприклад, Java 8. Саме ця версія залишається найбільш популярною і часто використовуваною в абсолютній більшості компаній і проектів. Можна сміливо починати вивчати мову з цієї версії, а нові фішки засвоювати, накладаючи їх на знання основ. Вивчення цієї частини, мабуть, найскладніше завдання для новачка. Доводиться освоїти новий вид діяльності і почати думати по іншому. На це все накладається ще й великий обсяг матеріалу, який потрібно засвоїти. Більшість тих, хто тільки починає кидають саме на цьому етапі. Тут все залежить тільки від Вашої мотивації.

Якщо освоєння мови Java проходить нормально, тоді Вам знадобляться ще й додаткові інструменти, такі як система контролю версій (Version Control System) і система для складання проектів. Як VCS рекомендую використовувати Git, який є абсолютним лідером серед собі подібних. Всі інші системи, як наприклад Subversion і Perforce відходять у минуле. Плюс Ви можете використовувати репозиторії Github або GitLab, для Вашого коду, безкоштовно. З великою часткою ймовірності в энтерпрайзе ви будете використовувати BitBucket від Atlassian. Але це всього лише оболонка. Якщо ви навчитеся користуватися Git, то все інше не суттєво. Компанія Atlassian є так само постачальником таких продуктів як Jira і Confluence, але для Вас на етапі навчання це ролі не грає.

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

Після того як Ви познайомилися з вищепереліченими речами, варто задуматися в який бік рухатися далі. На малюнку вище Ви бачите чотири основних напрямки руху: Front-End (HTML, CSS, JS), Back-End (Hibernate, Spring, SQL), Android і Big Data. Ці чотири частини хоч і розділені на малюнку, але насправді досить щільно пов’язані. Наприклад, якщо Ви вирішили стати Full-Stack Java розробником, то Вам доведеться добре вивчити Back-End частину і мати загальне розуміння основ Front-End частини. Від Вас не повинні очікувати, що Ви будете займатися версткою сайту, але варто знати HTML. Також мушу зауважити, що у розділі Back-End під Spring мається на увазі в першу чергу Spring Core. Саме з цієї частини фреймворку потрібно починати. Зараз він вже розрісся до такої міри, що охоплює всі аспекти розробки Java. В якості альтернативи, компанія Oracle намагається просувати Java EE специфікацію, але у них це не дуже добре виходить.

Що стосується BigData, то тут теж досить великий стек технологій. В основному всі вони розраховані на розподілене зберігання і розподілену обробку даних за допомогою підходу Map-Reduce. Найдавнішою і найбільш відомою технологією тут є Hadoop.

Думаю, що таке Android, пояснювати не варто. Скажу тільки, що для того щоб писати програми під цю мобільну платформу, доведеться вивчити Java.

Як Ви могли помітити, областей застосування Java досить багато, так що в найближчому майбутньому, вивчивши Java, без роботи Ви не залишитеся.

 

З чого почати? Що читати щоб стати програмістом?

Очевидно, що починати потрібно з основ, тобто з Java Core. Потім Maven, Git, і далі вже той напрямок, який Вам більше до душі.

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

Варіант перший — книги

Найдавніший, традиційний і поки що найбільш перевірений спосіб. Переваги: більшість книг від відомих видавництв написані професійними авторами, у багатьох з яких за плечима десятки років досвіду розробки і викладання в престижних західних ВУЗах. Також ці книги перевіряються ретельно самими видавництвами, так що ймовірність помилок дуже мала. Особливо, коли одна і та ж книга перевидається знову і знову по мірі відновлення мови. Після прочитання базових книг, доведеться переходити до більш просунутим. Мало де можна знайти просунуті теми з програмування розглянуті з тією ж глибиною. Недоліки: багато книги написані сухою академічною мовою і походять більше на довідники. Знаменитий автор Кей Хорстманн сам неодноразово зізнавався, що читає подібні книги не повністю, а тільки ті глави, які допомагають йому вирішити поточну проблему.

Серед найбільш популярних і кращих книг для новачків наступні назви наведені на англійській, в тих випадках, коли книга не була переведена на російську або переклад не був знайдений):

  1. Java How to Program — Пол Дейтел і Харві Дейтел. Ця книга пережила купу перевидань і є, мабуть, найбільш об’ємним керівництвом по Java. Крім самої мови там ще досить непогано пояснюються основи алгоритмів.
  2. Філософія Java — Брюс Еккель — також заслужила почесне місце в бібліотеці програмістів. Доступні і зрозумілі пояснення. Добре підійдуть для новачків.
  3. Head First Java, 2nd Edition — Bert Bates, Kathy Sierra — книга, що стала популярною завдяки здатності авторів пояснювати складні концепції на простих життєвих прикладах. Не дуже глибока за змістом, але все таки цікава.
  4. Java. Бібліотека професіонала. Тому 1,2 — Кей Хорстманн. Ця книга-довідник теж давно оселилася на полицях багатьох розробників Java. Вона якраз з розряду тих книг з яких читають окремі глави для вирішення завдань, а не книгу.
  5. Java 8. Керівництво для початківців — Герберт Шилдт. Сам цю книгу не читав, але чув позитивних відгуків. Читати чи ні — вирішуйте самі.
  6. Структури даних і алгоритми в Java — Роберт Лафоре. Одна з кращих книг по структурах даних.
  7. Java. Ефективне програмування — Джошуа Бліх. Трохи більш просунута книга по Java. Містить величезну кількість порад і рекомендацій щодо того, як можна поліпшити Ваш код. Нещодавно вийшло 3-тє видання даної книги. Настійно рекомендую до прочитання.
  8. Java Concurrency in Practice — Brian Goetz. – старе добре керівництво по багатопоточності в Java, яке не виходить з моди.
Читайте також  Температура процесора: Як дізнатись?

Останні три книги рекомендую до прочитання тим, хто вже знайомий з основами програмування на Java, але планує розвиватися далі. Приклади книги з різного роду фреймворкам наводитися не будуть. Їх теж вже написано не мало.

Варіант другий — відеокурси

Відеокурси і різного роду відеоуроки зараз стали набирати велику популярність. Сама ідея дуже гарна і мені особисто подобається. Цей вид навчальних матеріалів особливо добре підійде візуалів, людям які найкраще сприймають інформацію візуально. Додатково Ви також можете задіяти сприйняття на слух. Однією з переваг є доступна ціна. Крім того, на YouTube Ви можете знайти величезну кількість безкоштовних уроків, серед яких бувають і досить непогані. Серед недоліків уроків на YouTube, мушу зауважити часту розрізненість і несистематизованість, а також те, що матеріал в них викладено досить поверхово. Але навіть тут є винятки в хорошому сенсі цього слова.

Альтернативою YouTube уроків можуть бути такі майданчики:
Safari o’reilly — величезна колекція книг, відеоуроків та вебінарів на різні теми. Якість матеріалів є серйозною перевагою. Книги і відео тренінги записані визнаними професіоналами в області. Головний недолік тут — ціна. 400$ в рік якщо платити відразу або 480$ якщо платити помісячно. Всі матеріали тут англійською мовою. Якщо зважитеся підписатися, рекомендую матеріали підготовлені самим видавництвом o’reilly, вони зазвичай якісніше уроків інших видавництв.

Pluralsight — непоганий майданчик для відеоуроків. Вибір матеріалів за темами великий, але вони в основному більш поверхневі ніж у попередньому випадку. Всі матеріали тут теж англійською. Вартість передплати 29$ в місяць, або 299 за рік. Тут, як і в попередньому випадку, доступ до матеріалів є поки платите за підписку. Не можна просто купити один-два курсу назавжди.

Udemy — велика бібліотека різного роду курсів. Відрізняється тим, що курси тут не тільки англійською, а й російською мовами. Цінова політика тут абсолютно відрізняється від попередніх ресурсів. Тут Ви можете купити курс і він залишиться назавжди. Вибираючи курс на Udemy звертати увагу потрібно на кількість годин відеоуроків, якість звуку (зазвичай доступно кілька лекцій без реєстрації), відгуки інших слухачів. Тут я хочу порекомендувати курс «Java. Від простого до складного». За співвідношенням якості (кількості годин) до ціни це, мабуть, самий вигідний курс на Udemy російською мовою. Переходячи по посиланню ви отримуєте фіксовану ціну зі знижкою 90%. Всього 10 з невеликим доларів за 33 години відмінного відеоконтенту. У процесі підготовки курсу, автором було проаналізовано велику кількість курсів, книг і навчальних матеріалів, а також був прикладений семирічний досвід розробки додатків ентерпрайз рівня.

Варіант третій — очні курси
Ще один варіант навчання, який може привести Вас до заповітної мети. Тут все неоднозначно. З одного боку, йдучи на очні курси Ви очікуєте, що Вам покажуть і розкажуть все, що потрібно. З іншого боку, вчитися все одно доведеться самому. Жоден викладач не зможе просто навчити Вас, яким би гарним він не був. Тут, як і у всіх інших місцях, все залежить від особистої мотивації і власної кмітливості. Так що кажу з упевненістю, від книг і відеоуроків нікуди не дітися. Перевагою може бути те, що хороший викладач допоможе Вам зрозуміти ті речі, з якими Ви не змогли розібратися самостійно і трохи прискорити процес навчання.

Читайте також  Конверсії результатів показу в кліки для Google і Яндекс в 2019 році

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

Який варіант вибрати?

Тут у кожного повинен бути свій оптимальний варіант. На думку автора, найкращий варіант-це поєднання всіх трьох варіантів в тій чи іншій мірі. Однозначно без книг обійтися не вийде. Якщо Ви вирішуєте піти на очні курси з програмування, то насамперед потрібно зрозуміти чи підходить Вам це заняття взагалі. Якщо так, тоді перед тим як туди йти, прочитайте хоча б одну книгу, подивіться парочку відеоуроків. По-перше, Ви будете чітко розуміти Ваше це чи ні. По-друге, маючи мінімальну базу, Ви зможете ставити правильні питання і в підсумку візьмете з курсу максимум. По-третє, Ви зможете піти на курс, де від студента вимагають трохи більше ніж базові комп’ютерні навички.

Після того як у Вас набереться мінімальний набір знань, добре б знайти ментора. Задоволення це недешеве, але якщо ментор хороший, то він заощадить Вам купу часу. Пам’ятайте, ментор — це не людина яка Вам все розжовує, це той, до кого Ви приходите за порадою, з конкретними питаннями, тоді, коли самі не знайшли відповідь.

 

Як практикуватися?

Практика це найважливіше питання. Вона передбачає не стільки вміння писати код, скільки вміння робити це правильно. Багато говорять, що потрібно контрибьютить в опенсорс проект або писати свій. Тут я повинен Вас засмутити. Якщо Ви не знаєте набагато більше ніж як написати Hello World програму, ніхто коммитить в опенсорс проект Вам не дозволить. У цих проектах підхід дуже схожий на підхід до роботи в компаніях. Там є завдання, виконання кожного з них передбачає код ревю. Завдання відповідають за проект — фіксить баги, а не плодити нові.

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

Наступний етап — починайте писати свій маленький проект. Він повинен вирішувати практичну задачу, нехай навіть маленьку. В процесі навчання Ви будете вивчати новий матеріал, алгоритми та шаблони проектування. Все це повинно знайти застосування у Вашому проекті. Не виходить застосувати тут, почніть новий проект.

Паралельно варто практикуватися виконувати завдання на ресурсах типу hackerrank. Ви можете не тільки попрактикуватися писати код, але і зрозуміти механіку роботи платформи. Все більше компаній починають процес найму співробітників з завдань на цьому сайті і йому подібних.

У цей момент пора обзавестися зібрано на GitHub або GitLab. У Вас повинна бути там парочка нормальних проектів з юніт тестами, які не соромно показати роботодавцю. Попросіть кого-небудь з досвідчених друзів зробити код ревю. Це хороша практика для досвідчених девелоперів, не тільки новачків. Якщо одного, добре знає мову, який Ви вивчаєте, немає, найміть ментора на годину або дві. Якщо Вам скажуть що все добре, варто з підозрою ставитися до такого код рев’ю. Завжди є місце для дискусії.

На такому рівні Ви вже швидше за все зможете контрибьютити в опенсорс. Якщо поки ні роботи, практикуйтеся там. Вам досвід, суспільству користь.

Паралельно з репозиторієм пора готувати резюме і починати оббивати пороги компаній. Не забудьте вказати посилання на проекти в своєму сховищі. Проходьте як можна більше співбесід. Уміння їх проходити — дуже важливий скіл, який принесе Вам додатковий дохід.

На закінчення хочу побажати Вам удачі. Пам’ятайте, Facebook і Apple теж колись були маленькими компаніями в когось в гаражі або в гуртожитку. Просто треба вчитися. Не настільки важливо, скільки годин в день Ви вчитеся, як те, скільки днів поспіль ви це робите.

Степан Лютий

Обожнюю технології в сучасному світі. Хоча частенько і замислююся над тим, як далеко вони нас заведуть. Не те, щоб я прям і знаюся на ядрах, пікселях, коллайдерах і інших парсеках. Просто приходжу в захват від того, що може в творчому пориві вигадати людський розум.

You may also like...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *