Шлях в ІТ — як проходити його найбільш ефективно
Всім привіт, мене звати Олексій Михняк, і я хочу розповісти про свій досвід в ІТ-сфері, а його в мене не багато і не мало — десь 9.5 (округлимо до 10 для краси) років: з того часу, як я почав вивчати програмування в університеті (КПІ) та років 7 як почав працювати.
Хочу розібрати своє суб’єктивне бачення, що б я змінив у своєму шляху з вивчення програмування, маючи сьогоднішній досвід і технології. Ця стаття буде корисною для людей, хто задумується про кар’єру в ІТ і тих, хто вже працює в ІТ та думає, що ж робити далі. Навіть у складні часи війни ті, хто мають таку змогу, повинні вкладатися у власний розвиток і прогрес.
Планую розглянути: коли краще починати вивчати програмування; чи потрібні університети; чи дають щось ІТ-курси; про зміну основного місця роботи на ІТ-сферу та багато іншого.
Передісторія
Я з невеличкого міста в Київській області та більшу частину дитинства провів без комп’ютерів і телефонів (навіть кнопкового). Так, була приставка з Super Mario, танчиками та іншими культовими іграми
За освітою я конструктор електронно-обчислювальної апаратури, тому це не прям програміст програм, а більше програмування мікросхем та як взагалі ці мікросхеми працюють. Але про університет і чи воно варте того, ми поговоримо трохи згодом.
До чого ж це все? До того, що ми часто живемо і сприймаємо (звикаємо) до всього, що нас оточує і навіть не усвідомлюємо, що може бути щось інакше. Ми всі живемо на певному рівні абстракції — і це нормально. Напишіть в коментарях, хто знав, що всі приставки, картриджі до них та потім відеоігри були піратськими копіями?
Коли у 2009 році я дізнався про Steam та те, що тепер можна не купувати диски, а просто встановити гру з інтернету, то це був шалений захват, поки не побачив ціни на ігри. Виявляється вони не коштували
Тільки у
Коли варто починати вивчати програмування
Взагалі, в Україні більше є тенденція до знання конкретних технологій замість тенденції software engineer. Я маю на увазі, що більшість компаній жорстко прив’язуються до конкретних мов програмування та фреймворків, побудованих навколо них. Мені особисто декілька разів відмовляли в офері через відсутність робочого досвіду з AWS.
Тому зараз, обираючи мови програмування, відразу відбувається прив’язка до області в якій ти будеш працювати та задач, які ти будеш виконувати. Спробую на свою суб’єктивну думку виділити деякі з них. Щоб ця стаття була корисною для людей без досвіду, буду додавати ключові слова; а якщо не знаєте, що це — загугліть, це буде корисним. Отже:
Frontend-розробка
Зазвичай в обовʼязки програміста входить створювати вебсайти, які ми бачимо кожного дня. Програмувати де і як будуть показуватися різні UI-елементи, як буде змінюватися їхнє розташування та розширення на різних пристроях, переходи між екранами і т.д.
Розробка найчастіше відбувається мовою програмування JavaScript (не має жодного відношення до мови Java) та похідних від неї TypeScript, CoffeScritp тощо. Також frameworks такі як React, Angular, Vue, а ще — з використанням CSS та HTML. Якщо коротко — це не мови програмування, а спеціальні розмітки які допоможуть додати на сайт UI-елементи та задати їм потрібний стиль.
До fontend-розробки, мабуть, можна віднести PHP (якщо я не правий, то можна виправити мене в коментарях під статтею), тому що багато сайтів були написані на cms типу WordPress.
Backend-розробка
Тут, мабуть, не має однозначних обовʼязків, але головна мета — отримати «корисну» інформацію, перетворити її за необхідності та зберегти для подальшого використання.
Існує багато різноманітних мов програмування для цього, наприклад: Java, C#, C++, Python, Go, Ruby, PHP, JavaScript (за допомогою Node.js) та інші. Також в кожної мови існують сотні різноманітних frameworks та додаткових бібліотек для роботи з багатьма видами даних.
Для збереження даних використовують бази даних, наприклад: PostgreSQL, MongoDb, MySql, Microsoft SQL Server, Cassandra та інші. Теж не завадить розбиратися в Message broker таких як RabbitMQ, Kafka, Azure Service Bus та інші.
Fullstack-розробка:
Це розробка, яка поєднує в собі як Frontend, так і Backend. Більшість з наведених Backend мов програмування мають свої бібліотеки для генерування JavaScript, разом з HTML та CSS тут все залежить від проєкту. Може бути повноцінний Frontend-проєкт, наприклад, на React, а може — згенерований тією ж мовою програмування. Але все одно потрібні знання JavaScript, HTML та CSS.
Можна звернути увагу на відносно новий підхід роботи з вебсайтами — WebAssembly. Якщо коротко — тут сервер генерує спеціальний файл будь-якої мови програмування, який вже виконується у браузері.
Мобільна розробка
Розробка різних мобільних застосунків, тут можна відразу виділити розробку під Android та iOS. Зазвичай вона відбувається на Kotlin (Java) та Swift (ObjectiveC) мовах програмування відповідно (в дужках наведені «застарілі» мови програмування, на яких раніше відбувалась розробка).
Розробники стикаються зі складностями оптимізацій, як використання оперативної памʼяті, так і використання батарейки. Розмір застосунку також може бути важливим, якщо цільова аудиторія знаходиться в країнах, де дорогий інтернет, та багато дешевих мобільних пристроїв з малими обʼємами пам’яті, наприклад Індія, Бразилія, Малайзія і т.д. Але тут потрібно відразу вибирати сторону: Android чи iOS.
Ще існує кросплатформна розробка, наприклад Xamarin (C#), React Native (JavaScript), Flutter (Dart) та інші. Тобто, розробляється один застосунок і потім за допомогою магії і трішки везіння написаний код перетворюється на мову, яку підтримує потрібна платформа.
Звісно, тут є свої недоліки, наприклад, часом потрібно писати нативний код на Kotlin чи Swift, інколи працює не оптимально, інколи не можна використовувати нативні компоненти тощо.
Desktop-розробка
Мабуть, можна виділити розробку під Windows та MacOS. Для Windows зазвичай використовують C++ або C#, для MacOS — Swift (ObjectiveC). Для кросплатформної розробки можна використовувати ті самі інструменти Xamarin (C#), React Native (JavaScript), Flutter (Dart) і т.д.
Hardware-розробка
Апаратна розробка — це виготовлення різноманітних мікросхем і подальше програмування їх на низькорівневих мовах типу C/C++, Assembler, Verilog, інколи C# та інші.В Україні не так багато компаній, які цим займаються, але можете почитати про AJAX та Melexis.
Game-розробка
Вирішив виділити в окремий пункт, тому що це трішки відрізняється від нативної розробки під телефони або комп’ютери. Зазвичай для цього використовують Unity (C#), або UnrealEngine (C++), або самописні двіжки (зазвичай теж використовується C++). Тут більше взаємодії з картинками, 3D-моделями, звуками, різними ефектами тощо.
Після довгого ліричного відступу повернемось до запитання, коли варто починати вивчати мову програмування? На мою думку, тут важливіше спробувати розглянути існуючі області програмування і обрати, що тобі більше подобається. Тож варто починати якомога раніше.
Наприклад, з
Тому рекомендую не забивати на вивчення англійської мови і починати все гуглити саме англійською (тому я і не перекладаю деякі вислови, щоб потім було легше знайти про це більше інформації). Більшість питань вже задали ось тут.
Чи потрібно вступати до університету
На це питання складно відповісти однозначно, тому я наведу аргументи як за, так і проти. Зараз існує багато відкритих відеокурсів найвідоміших університетів, наприклад, Гарварду, але знову ж таки, якщо в тебе немає досвіду, то ти просто не знаєш, що тобі потрібно дивитися і де це можна знайти. Тому університет в собі акумулює вже певні знання і може відкрити для тебе правильний напрямок.
З мінусів — більшість викладачів займаються тільки викладацькою діяльністю і в останній раз писали код у 1980х. Все залежить від конкретного університету/ факультету і т.д., раджу сходити на дні відкритих дверей і познайомитись з викладачами. Це допоможе краще уявити, що будете вивчати, або ж можна дізнатися елементарно якісь нові слова і потім вдома їх загуглити.
Ще з великих аргументів на користь йти в університет — офіційний статус студента; зі студентським квитком можна отримати багато знижок або безкоштовного доступу до програм. Наприклад, можна отримати знижки на проїзд, відвідування музеїв та інших місць в Україні та інших країнах Європи, безкоштовний Microsoft Office (Windows), використовуючи свою електронну пошту студента, безкоштовне IDE (Integrated development environment, це там, де пишуть код) від JetBrains.
Користуватись їхніми продуктами, зручними та інтуїтивно зрозумілими, корисно, адже, як на мене, найголовніше для початківця — коли запустив і все працює. Також можна потрапити в програму літніх стажувань в компанії різного масштабу, починаючи від локальних, і закінчуючи Google, Amazon, Microsoft.
Тут потрібно уточнювати, чи вже є для цього контракти у ваших університетах, або не соромитись і писати різним компаніям (для контактів з іноземними — не завадить знання англійської). Ще можна спробувати на літніх канікулах work and travel — це не пов’язано з ІТ, основна суть це побачити світ, поєднуючи це з роботою. Звичайно, це буде актуально тільки після перемоги. Ще університет дає можливість банально познайомитись з однодумцями, тому рекомендую на магістратуру йти на іншу кафедру або навіть в інший університет.
Про свій досвід та де краще починати кар’єру в ІТ
Особисто я почав працювати на неповній зайнятості (приєднався до стартапу) після 3 курсу. Мабуть, не найкраще вибирати стартап для першого місця роботи, оскільки у вас немає досвіду і, скоріш за все, в інших членів стартапу його теж не багато (малоймовірно, що «круті» програмісти будуть брати до себе в стартап студентів без досвіду).
Мабуть, найкраще для першого місця роботи вибрати велику компанію, бо там вже налагоджені процеси, і хоч не завжди потрібно працювати по СКРАМ, але мати досвід роботи з цим буде корисно в майбутньому. Також раджу не засиджуватися на одному місці, як було сказано в книзі «Shoe Dog» Філ Найта: «людина в середньому змінює роботи 3 рази за життя», — навіщо тягнути.
Потім я перейшов на повну зайнятість в невеличкій ігровій студії. Поєднувати навчання і
Щоб полегшити собі життя, я вирішив не змінювати університет, а піти на магістратуру на свою ж кафедру. Зараз дуже багато ІТ-компаній мають гнучкий графік роботи, тому це все зробити також буде реально. Попрацювавши в трьох компаніях з розробки ігор на C#, я зрозумів, що це більше мені не приносить задоволення.
На той час на ігровому ринку стали популярними гіпер казуальні ігри (це там, де граєш в дуже просту гру і потім дивишся 100500 реклам). Тому я вирішив змінити напрямок і став бекенд-розробником. Для цього витратив десь місяців
Найскладніше було отримати запрошення на співбесіду, оскільки більшість HR просто відмовляли за ключовими словами (не має досвіду роботи з AWS — до побачення). зрозуміло, що не можна взяти і змінити область розробки, наприклад з бекенд перейти в мобільну розробку, залишивши свій статус senior, оскільки в тебе банально немає тих набитих шишок, які й роблять тебе senior.
Але я вірю в те, що не має жодних складнощів у зміні мови програмування чи фреймворка у своїй області розробки. Наприклад, почати писати бекенд-сервіс на Go замість Java. Так, перші 2 тижні ти будеш щось плутати і гуглити якісь банальні речі, але потім звикнеш. Фактично, ти вирішуєш однакові завдання і мова програмування не така вже і важлива.
Але це не працює, якщо процес не налагоджений в компанії, тобто якщо ти прочитав, що Go це круто, і взагалі без досвіду в цій мові скажеш своїй команді: «так, відзавтра всі пишемо нові сервіси на Go», — це не найкраща ідея. А якщо в тебе в компанії є люди, які знаються на Go, і можуть дивитися твої pull request, то чому б ні. Бо без цих перевірок ти почнеш писати свій spring в Go і потім для тебе стане шоком, що в Go все ще немає generic класів.
І в майбутньому у тебе зміниться уявлення, як можна вирішувати завдання. Все одно 90% програмістів не створюють rocket science продукти, а намагаються вирішити бізнес проблеми та проблеми, які створили попередні програмісти, оскільки будь-яке рішення — це завжди компроміс.
Що робити людям, які планують змінити основне місце роботи на ІТ-сферу
На мою думку, не потрібно відразу просити $1000, як свою першу зарплату в ІТ. Якщо в тебе багато років досвіду у своїй сфері, це не означає, що твій досвід релевантний для програміста.
Звісно існують виключення: якщо ти займався вузькою галуззю, наприклад, юрист якогось напряму, і потрапив в компанію, яка робить застосунки для юристів, тоді так, твій досвід додасть тобі переваг, але не зробить тебе кращим програмістом.
Пишу слово «програміст», тому що більшість людей хочуть бути саме програмістами, хоч в ІТ-сфері існує багато позицій, де твій досвід з іншої сфери може бути більш релевантним.
Не програмісти в ІТ:
- бізнес-аналітик
- проєкт-менеджер
- продукт-менеджер
- дизайнери (в основному, верстка вебсайтів, мобільні додатки, різні екрани, UI)
- скрам-майстер
- фасілітатор
- тестувальник (QA)
- devops
- help desk — це як раніше системний адміністратор
- підтримка (support)
- HR
Крім того, існують додаткові професії, які стосуються gamedev індустрії:
- game-дизайнер
- level-дизайнер
- сценарист для ЛОР
- аніматор (2D/3D)
- художник (2D/3D)
- звукорежисер
Я вже працюю в ІТ, що є для мене далі
Якщо ти вже працюєш в ІТ певний час, то найкраще — спробувати щось нове, наприклад, перейти в іншу мову програмування або взагалі іншу область розробки. Якщо ти мобільний розробник, то можна зробити бекенд-сервіс, з якого зможеш отримувати дані для свого застосунку.
Для цього краще створювати pet projects. Це не обов’язково має бути стартап, на якому ти будеш заробляти гроші. Особисто я періодично пробую щось нове, починаючи з написання цієї статі.
Просто потрібно дивитися, що тебе бісить і виправляти це, ось кілька прикладів:
- часто, коли йду в магазин, записую в телеграмі, що потрібно купити. Тому зробив собі простого телеграм-бота, який створює клікабельний список покупок. Так розібрався, як працює телеграм API та облегшив собі життя;
- не зміг знайти собі money tracker, який мені подобається (не подобається, що в більшості переказ між своїми рахунками вважається витратами, плюс, додав спільні витрати/ спільні прибутки та інші типи транзакцій). Розібрався з фронтендом, як будувати застосунки на react і як можна безкоштовно хостити вебсайти;
- зробив сайт для допомоги в популярній грі Wordle (українська версія — «Словко» або «Кобза»), теж заради того, щоб покопатися в фронтенді, дізнався де взагалі потрібно купувати доменні імена, як налаштовувати DNS, статичний кеш, де краще згенерувати ssl-сертифікати, щоб це було безкоштовно, ну, і звісно, як працює React. Якщо комусь цікаво, то посилання на застосунок тут і англійська версія тут;
- безліч стартап-проєктів, які помирали на різних стадіях, але дозволили розбиратися в тому, що раніше не робив. Де краще розгортати свої бекенд-застосунки, як налаштувати CI/CD, налаштування баз даних та різних доступів тощо.
Теж не потрібно забувати про фундаментальні знання, а це — структури даних та алгоритми. Для цього можна спробувати порозв’язувати те, що називають олімпіадними задачами з програмування: leetcode або hackerrank.
Висновки
ІТ-сфера дуже розвинулась і створила безліч новий робочих позицій, тому не потрібно всім ставати програмістами, якщо це вам не цікаво. Щоб визначитись, що ж реально вам до душі, потрібно пробувати себе в різних напрямках. Сподіваюсь, що в цій статті є достатня кількість ключових слів, аби почати свій шлях в ІТ.
P.S. Сам нещодавно відкрив для себе світ подкастів з яких можна дізнатися про новини зі світу ІТ, або детальніше розібратися в якійсь спеціалізації:
P.P.S. Якщо комусь цікаво і хоче щось в мене запитати, то можна додатися в телеграм-чат.
21 коментар
Додати коментар Підписатись на коментаріВідписатись від коментарів