×Закрыть

Тернистий шлях Джуніора

На цю статтю мене надихнуло 2 причини:
1) Популярність статті про релокейт до Європи частина 1: пошук роботи (на момент написання статті — 20К переглядів) dou.ua/forums/topic/25967
2) Меседжи в лічку з проханням підказати, в якому напрямку рухатися початковому програмісту(Джуніору)

Колись я вів курс Python + Django в ITEA. Там, також, студенти питали, яка мова програмування краще, яку мову вибрати, куди рухатись далі, що вивчати, щоб порекомендував прочитати і так далі. Тож я підняв свої записи, поновив їх, удосконалив і готовий поділитися. Тож, якщо вам цікаво, то запрошую під кат.

Вважаю за потрібно заздалегідь уточнити наступне:
— В цій статті моє особисте бачення, в мене немає мети топити за один чи інший напрямок, мову програмування чи методичку для навчання
— Поняття Джуніора досить узагальнене. Я зустрічав Джуніорів, які не поступалися вмінням і досвідом Мідлам(strong middle), а також таких, які написали невеличку нубівську программу і вважали себе центром всесвіту. В мене були ситуації, коли я дізнавався назву своєї позиції вже після прийняття на роботу. Іноді це було просто «Python Developer» без якоїсь приставки. Іноді я шуткував з HRами з приводу назви позиції. Я говорив, що мені важливо, щоб клієнт був задоволений моєю роботою, а компанія платила ту зарплату, на яку ми домовимося і мені не важливо, як мене будуть називати: Джуніором, Сіньором чи салагою(жартую)
— Так як я розробляю веб додатки на Python, то й більшість ресурсів буде вказана, базуючись на моєму досвіді в цьому напрямі

Яку мову програмування вибрати?

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

Наскільки мені відомо, то серед людей, які тісно працюють з алгоритмами, математикою та коли є потреба будувати програми, які виконуються максимально швидко, то вибір падає на: C++, Java, C#, та інші компільовані мови програмування.

Чесно кажучи, спочатку я теж пробував почати програмувати на С++ та Java, але в мене нічого не виходило. Я купував книжки, читав, вивчав, але до програмування цікавих додатків так і не дійшов, тому й кидав це заняття. Мене цікавило веб програмування, а приклади задач для C++ та Java завжди зводились до математичних і дуже скоро ставало нудно. Веб програмування я почав з таких CMS як Joomla та Wordpress на PHP, але по роботі мені довелося почати програмувати на Python і за ці роки я жодного разу не засумнівався в правильності вибору. На даний момент я використовую Python, як основну мову програмування і, поки що, не було необхідності її змінювати, але ніколи не кажи ніколи...

Мова програмування Python є мовою програмування для широкого спектру задач. Вона досить швидка, а для написання однієї й тієї ж програми, порівняно з іншими мовами, потребує менше коду від програміста. Вона дуже популярна, з гарною документацією і широкою спільнотою, тож я рекомендую починати з мови програмування Python. Але Python ніколи не буде таким же швидким як, наприклад, Java, адже Python це інтерпретована мова програмування.

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

Тож, через наведене вище, я б рекомендував початковому розробнику сфокусуватися на двох мовах програмування: JavaScript та Python.

JavaScript

Може здатися, що з FrontEnd все дуже просто, адже використовується одна мова програмування вже багато років. Але це не так. Кожен програміст має знати: Vanilla JS(чистий JavaScript), jQuery, Bootstrap, HTML, CSS. Я вважаю, що ці навички — must have і не важливо ти Frontend розробник чи Backend. Не обов’язково зазубрювати повністю всі аспекти, але потрібно, як мінімум, в них орієнтуватися, прочитати документацію, щоб, в разі потреби, знати де шукати і куди дивитись. Треба знати, для чого використовується та чи інша бібліотека, framework.

Щоб прокачати ці навички є досить багато гарних онлайн туторіалів:
— www.w3schools.com
— www.sololearn.com/Courses
— www.codecademy.com/catalog/subject/all
— www.edx.org/...​/subject/computer-science
— www.coursera.org
— www.udacity.com

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

Якщо ви хочете йти далі у FrontEnd, то треба сфокусуватися на одному із наступних фреймворків: React JS, Angular JS чи Vue JS. Також вам знадобиться розібратися з пакетним менеджером(yarn, npm, etc) для встановлення необхідних пакетів, та/або оптимізації файлів. Наприклад, на сьогоднішній день, ніхто не зберігає стилі(css) в різних файлах на сервері. Ви пишете стилі в scss файлах, а потім компілюєте(+мінімізуєте) все в один css файл. Все це робиться за допомогою пакетного менеджера та необхідних пакетів.

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

Вивчення мови програмування, фреймворків, без практики — марнотратство. Треба придумати собі задачі та проекти й реалізувати їх за допомогою вивченого матеріалу(або в процесі вивчення). В кінці статті я наведу приклади pet проектів, які можно було б реалізувати. Також ви можете поділитися лінками на цікаві ресурси/завдання в коментах.

Python

Я використовую Python для розробки веб додатків та обробки даних. Тобто, мова програмування Python + web framework + data processing packages. Python дуже зручний тим, що для виконання певних специфічних задач, які не входять в базовий пакет мови, достатньо встановити необхідний пакет, бібліотеку. Деякі пакети — це немов інша мова програмування. Наприклад, якщо ви ви знаєте Django, то це не означає що ви володієте Python(в достатній мірі).

Для вивчення pure Python та щоб набити руку в програмуванні:
— www.sololearn.com/Courses
— www.coursera.org
— www.udacity.com
— www.codecademy.com/catalog/subject/all
— anandology.com/python-practice-book
— python.swaroopch.com
— Книга Effective Python drive.google.com/...​qCbC2dmVUcHBpXzVFeE0/view
— realpython.com
— book.pythontips.com/en/latest/index.html
— www.hackerrank.com

На сьогоднішній день недостатньо знати лише Python, щоб знайти роботу та бути «на олівці» в HRів. Так як майже всі клієнти хочуть веб додатки, то потрібно знати web framework для розробки веб серверів з веб додатками (Backend Web Development). Найвідоміший веб фреймворк на Python — Django. За ним йде Flask. Я рекомендую починати з Django, адже в ньому все необхідне(і навіть більше) є з коробки, в нього гарна документація і для того, щоб все запрацювало, не потрібно зайвих зусиль. Я маю на увазі, що без зайвих зусиль у вас буде веб аплікуха з адмінкою і потужною ORM.

Для вивчення Django я рекомендую:
— docs.djangoproject.com/en/dev/intro/tutorial01 (офіційна документація)
— books.agiliq.com/...​o-orm-cookbook/en/latest (books.agiliq.com/en/latest)

Django фреймворк настільки популярний, що на його базі були створені інші фреймворки. Наприклад, для створення блогу або сайту, в якому треба постійно додавати контент(CMS) — використовується фреймворк Wagtail (wagtail.io). В нього також дуже гарна документація.

Практика і ще раз практика

Без практики, без реальних проектів, ваші знання швидко забудуться. Також, в проектах ви робите заготовки коду, який потім використовуєте в інших проектах(copy + paste). Тож, вже з самого початку треба придумувати собі задачі та проекти, які вам буде цікаво реалізовувати і з якими ви будете використовувати ваші знання.

Якщо ви знаєте лише JS або лише Python, то простору для цікавих задач не так вже й багато. У поєднанні FrontEnd + Backend = JS + Bootstrap + Python + Django + ORM — ви отримуєте потужний інструмент для реалізації майже будь яких задач і відображенні їх в гарному вигляді. Далі я наведу приклади проектів для реалізації, але наостанок я хочу сказати, що вам завжди буде чого вчитися, адже навіть коли ви розробили свій проект, то його ще потрібно розмістити на сервері, а це окрема наука...

Приклади проектів для реалізації:
1) Для початку можно зробити калькулятор. Написати його на JS + responsive design Bootstrap. Коли напишите, то зробіть авторизацію користувача з можливістю зберігання результату(тут вже Django в допомогу). Зробіть окрему сторінку з відображенням 3-х останніх результатів користувача

2) Напишіть телеграм бота, який буде, наприклад, допомагати збиратися на футбол чи вечірки. Або який буде кожний день знаходити випадковий анекдот й кидати у ваш чат. Я покроково написав як створити телеграм бота з базовим функціоналом тут medium.com/...​-server-from-2463f2b63d83 Є окрема бібліотека для створення телеграм бота, але я обійшовся без неї

3) В Європі дуже гостро стоїть питання з паркомісцями. Як наслідок є декілька стартапів, які намагаються вирішити цю проблему. Одна з ідей, щоб власник паркомісця міг здавати його в аренду почасово. Тож є власник Боб, у якого є паркомісце(для простоти у нього 1 паркомісце). Зробити програму, щоб користувач міг зайти і забронювати паркомісце на певний проміжок часу(для постоти, не менше 15 хвилин). Треба перевіряти чи доступний необхідний проміжок часу для бронювання. Також Боб має бачити дашборд з заброньованими місцями: імейл, телефон, часовий проміжок. Коли зробите для одного паркомісця, то потім зробіть на декілька паркомісць і декілька власників

4) Зробіть олд скульний прокат відеокасет. У вас є 10 відокасет. Реалізувати можливість пошуку по назві, відображати доступні відеокасети та арендовати їх

5) Чи знаєте ви які відео кліпи найпопулярніші? Top 10? Top 20? Створити додаток, який використовуючи YouTube API відобразить Top 20 Music Videos за всі часи в YouTube (в кінці статті я поділюся своїм проектом, в якому я це реалізував). Тут є простір для практики з multithreading та асинхронним кодом(celery). Так як є потреба запускати декілька сервісів(PostgreSQL, django, celery, redis, etc), то можна прокачати навички в Docker: покласти проект в Docker, а оркестрування сервісами зробити через docker-compose

6) Зробити найпростіший деплой проекту: поділіться ссилкою на ваш працюючий local server з вашими друзями з використанням ngrok

На цьому думаю закінчити в статті. Кидайте приклади цікавих задач/проектів у коментарі до статті.

Резюме

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

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

Резюме має бути в pdf форматі, адже не всі використовують MS Word для відображення документа. Я зробив своє резюме в Google Docs, там одним кліком можна завантажити резюме у pdf форматі. В резюме вкажіть посилання на всі свої досягнення, особливо, якщо у вас мало досвіду. Наприклад, в SoloLearn можно отримати сертифікат і їм поділитися. Можливо це дрібниці, але повірте, вони мають значення.

Бажано аби резюме було на 1 сторінку, але не більше 2 сторінок, так як його можна буде надрукувати на 1 сторінці(2 сторонній друк). Віднесіться до резюме серйозно, адже якщо ви зробили його на швидку руку, то це помітно. На співбесіді вас спитають бажану зарплату. Заздалегідь вирішіть яка зарплата вас влаштує. Якщо не можете це зробити, то вирішіть який мінімальний поріг, щоб ви погодились працювати. Стійте на своєму, не змінюйте своє рішення від співбесіди до співбесіди, адже в мене було так, що одні мені відмовляли через зависоку зарплату, а інші піднімали поріг на 1000 доларів, адже хотіли щоб я працював саме в них(а не підписав контракт з іншими). Та й усі мабуть знають історію про двох знайомих, які прийшли влаштовуватись на роботу: один запросив одну зарплату, а інший вищу і обох взяли на роботу. Але в реальному в житті в 95% випадків на роботу візьмуть того, хто має той же рівень навичок, але просить менше. Таке життя.

На цьому в мене все. Я бажаю вам успіху в навчанні та з пошуком роботи.

Користуючись можливістю

Користуючись можливістю я хотів би передати привіт свої мамі(жартую). Насамперед, я хотів би поділитися своїм проектом, який я закінчив нещодавно inmytop.com (Python, Django, Bootstrap, Fontawesome). Це топ чарт нових відеокліпів та трейлерів на YouTube. Мені було б цікаво почути вашу думку. Детальніше про проект я напишу якось іншим разом. Також можете підписатись на мій телеграм канал t.me/dude007_channel. В ньому, раз на тиждень, я публікую Топ 10 нових відеокліпів за тиждень. Ну і мій інстаграм instagram.com/voronov.a.g

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Кожен програміст має знати: Vanilla JS(чистий JavaScript), jQuery, Bootstrap, HTML, CSS.

jQuery та Bootstrap зайві у цьому списку

Да и HTML c CSS скоро станут уделом динозавров. Только React! Только Sass! Только прогрессивные технологии! Только для заднеприводных!

" Але Python ніколи не буде таким же швидким як, наприклад, Java, адже Python це інтерпретована мова програмування."
Сейчас 2019 год, не слушайте когда вам говорят такую чушь. Python из коробки имеет С-extension, также существует PyPy, Cython, Numba. Вообще не слушайте бред о скорости того или иного языка, если ваша программа со скоростью света падает от сегфолта , то быстро!=хорошо.

на одному із наступних фреймворків: React JS, Angular JS

Для джуна AngularJS — это дезинформация, т.к. скорее всего если он пойдет гуглить, он найдет первую версию ангуляра по такому запросу, а это хмммм уже на любителя в 2019

Я нещодавно в GlobalLogic проходив співбесіду на проект який написано на AngularJS. Зараз це найпопулярниший фреймвок за кількістю проектів(нещодавно попадалася статистика за 2019 рік, саме проектів а не програм джунів типу todolist і helloworld), дуже багато написано на ньому і ще довгий чаc цe будуть переписувати з AngularJS на новішу версію. Думаю неварто недооцінювати його, хоча і розглядати як основний не варто.

Те що за часи його популярності на ньому написали купу проектів, не означає, що це те що потрібно вчити новачку, хоча звісно і можна, він ще довго жити буде і роботи трохи буде на ньому, он іноді з backbone вакашки приходять чи з jquery, тільки навіщо так жити

он іноді з backbone вакашки приходять чи з jquery, тільки навіщо так жити

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

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

Из 1995. Джс еще тогда должен был сдохнуть, но низкий порог вхождения стал фактором его выживания.

Якщо тут про те що люблять пхати їх куди потрібно і не потрібно, то таки згодний, потрібно по вимогах проекту дивитись, часто і просто js з головою, а то налаштовують збирання якогось реакту для просто лендінга з одною формою

а то налаштовують збирання якогось реакту для просто лендінга з одною формою

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

я закінчив нещодавно inmytop.com

панравілся топік рашнмузік , но там нєт старих пєсєн a главном :D

Крутая статья. Я бы послушал , почитал бы по фронту js. Такие статьи мотивирують

Подписаться на комментарии