6.1 Кар'єрні сходи
Самі програмісти також мають градації залежно від кваліфікації. Колись використовувалися такі поняття як «кодер», «програміст» і «хакер», але зараз усі перейшли на назви з американського ІТ.
Для розробника є 6 основних градацій:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- Tech Lead
- Principal Software Engineer
Від країни до країни деякі параметри можуть відрізнятися, але суть приблизно така:
Intern Software Engineer — це стажери. Вони знаходяться у процесі вивчення програмування, не мають ні комерційного досвіду, ні досвіду участі у великих проєктах. Зазвичай працюють під наглядом більш досвідчених колег. Їх головне завдання на роботі — вивчати кодову базу та основи розробки ПЗ, виконуючи прості завдання по кодуванню та беручи участь у тестуванні.
Junior Software Engineer — це вже програмісти, але без серйозного комерційного досвіду або з досвідом менше року. Працюють під керівництвом більш досвідчених розробників, реалізуючи частини проєктів і беручи участь у циклах код-рев'ю. Цей етап кар'єри зосереджений на поглибленні технічних навичок і розумінні проєктних завдань.
Middle Software Engineer (або просто Software Engineer): мають більше самостійності у прийнятті технічних рішень, відповідають за значущі частини проєкту, починають наставництво над менш досвідченими колегами та активніше беруть участь в архітектурних обговореннях. Зазвичай мають 2–5 років практичного досвіду.
Senior Software Engineer: відповідають за проєктування та реалізацію складних систем, забезпечують менторство та керівництво в команді, беруть участь у стратегічному плануванні проєктів і часто представляють команду в спілкуванні з клієнтами та іншими зацікавленими сторонами. Зазвичай мають 5–10 років досвіду.
TechLead: як технічний лідер, несе відповідальність за кінцевий технічний результат проєкту, керує розробкою, вирішує найскладніші завдання, забезпечує дотримання технічних стандартів і координує діяльність розробників.
Principal Software Engineer: працює на найвищому технічному рівні, часто беручи участь у формуванні технічної стратегії компанії, розробці інноваційних рішень і встановленні технічних стандартів, служить головним наставником для технічних лідерів і є ключовим експертом у складних технічних питаннях.
У великих компаній можуть бути додаткові ролі та підролі. Наприклад, у Google є такі ролі:
- Staff Software Engineer (L6): має значний вплив на технічну політику свого відділу.
- Senior Staff Software Engineer (L7): працює над масштабними та складними проєктами, визначає стратегічний напрямок технологічного розвитку в компанії.
6.2 Lego-продукти
Колись давно (у 1975 році) Ніклаус Вірт, творець мови Паскаль, написав книгу «Алгоритми + Структури даних = Програми». З того часу багато що змінилося.
Сучасний програмний продукт — це зовсім не те, чим він був 10 років тому і, тим більше, не те, що був 20 років тому. Про 1975 рік і говорити не варто: відтоді минуло 50 років.
Сучасний програміст більше не пише програми вручну. Він скоріше збирає її з готових частин (бібліотек) і пише код, який допомагає цим частинам взаємодіяти.
Сучасні програмні продукти можуть складатися з десятків і сотень програм, деякі з яких запускаються на комп'ютері користувача, його мобільних пристроях, а більша частина — на серверах у дата-центрі.
Багато з цих програм, такі як веб-сервер чи база даних, вже написані. Їх потрібно просто правильно сконфігурувати, щоб вони працювали як слід. Хоча з часом процес конфігурування може стати настільки складним, що фактично перетворюється на розробку. 🤦♂️
Програмісти постійно борються самі з собою. Замість того, щоб знову писати схожий код у різних програмах, вони пишуть бібліотеки, які можна конфігурувати (налаштовувати) під свої потреби, і просто підключають їх у всі потрібні місця.
За останні 20 років програмісти написали дуже багато бібліотек, фреймворків і відкритих репозиторіїв. Їх реально мільйони. І тепер писати весь код з нуля вважається поганим тоном. Замість цього потрібно зібрати програму з якісних і перевірених рішень — бібліотек, фреймворків, пакетів і модулів.
Але і такий підхід вже застаріває. Тенденція останніх 10 років — це переїзд у хмари — великі дата-центри, які надають вашим програмам усе, що їм потрібно. Хочете базу даних? У нас їх сотні на вибір. Хочете рідкісний унікальний веб-сервер — в мене є. Будь-яка примха за ваші гроші.
6.3 «Я – інженер» (ц) Ілон Маск
Більше не потрібно писати складні і нудні речі. Тепер, якщо вам потрібна якась крута складна функціональність, на цей випадок завжди є бібліотека. Вам потрібно просто: а) знати, що вона є, б) знайти потрібну (можуть бути десятки аналогів різної якості), в) розібратися, як інтегрувати її у ваш проєкт.
Робота від такого підходу стала тільки цікавішою. Тепер ви в 10 разів швидше можете додавати в продукт нову функціональність. 30 років тому, якщо вам був потрібен web-сервер, потрібно було написати його. 20 років тому — купити, встановити й налаштувати. А зараз — просто зайти в адмінку «хмари» і увімкнути.
Це, до речі, одна з причин популярності Frontend. Складний бекенд тепер можна писати на JavaScript з використанням Node.js, або просто «увімкнути» різні сервіси в хмарних дата-центрах. Frontend перестав сильно залежати від обмежень бекенду і розвернувся у всю потужність. І судячи з його популярності, він чудово виконує свою роль.
Ну і сама професія з Frontend-розробника трансформувалася у Frontend Fullstack Software Engineer. Сучасний Frontend-розробник повинен розуміти, як працює база даних, щоб грамотно з нею працювати. Розуміти HTML & JavaScript, NginX, щоб налаштувати роботу фронтенду з бекендом. Ну і Docker потрібен — це вже просто стандарт галузі.
Сучасна розробка значно відрізняється від тієї, що була ще 20 років тому. Сучасний програміст пише код не більше 50% свого часу. Решту часу він читає документацію, вивчає нові технології та проводить час на мітингах (нарадах). Програмісти-одинаки стали частиною минулого.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ