6.1 Кар'єрна драбина
Програмісти також мають градації залежно від кваліфікації. Колись використовували такі поняття як «кодер», «програміст» та «хакер», але зараз всі перейшли на назви на англійській з американського ІТ.
Для розробника є 6 основних градацій:
- Intern Software Engineer
- Junior Software Engineer
- Middle Software Engineer
- Senior Software Engineer
- TechLead
- Principal Software Engineer
Від країни до країни і навіть від компанії до компанії деякі параметри можуть відрізнятися, але суть така:
Intern Software Engineer — це стажери. Вони знаходяться в процесі вивчення програмування, не мають ні комерційного досвіду, ні досвіду участі у великих проектах. Зазвичай працюють під наглядом більш досвідчених колег. Основне їх завдання на роботі — вивчати кодову базу та основи розробки ПЗ, виконуючи прості задачі з кодування та беручи участь у тестуванні.
Junior Software Engineer — це вже програмісти, але без серйозного комерційного досвіду або з досвідом менше року. Працюють під керівництвом більш досвідчених розробників, реалізуючи частини проектів та беручи участь у циклах code review. Цей етап кар'єри зосереджений на поглибленні технічних навичок та розумінні проектних завдань.
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 році) Ніклаус Вірт, творець мови Pascal, написав книгу «Алгоритми + Структури даних = Програми». З того часу багато змінилося.
Сучасний програмний продукт — це не те, чим він був 10 років тому, і вже точно не те, що було 20 років тому. Про 1975 рік і говорити не варто — з того часу пройшло 50 років.
Сучасний програміст більше не пише програми вручну. Він скоріше збирає їх з готових частин (бібліотек) і пише код, який допомагає цим частинам взаємодіяти.
Сучасні програмні продукти можуть складатися з десятків і сотень програм. Деякі з них запускаються на комп'ютері користувача, його мобільних пристроях, більша ж частина — на серверах в дата-центрі.
Багато з цих програм, такі як веб-сервер або база даних, вже написані. Їх треба просто правильно сконфігурувати, щоб вони працювали як треба. Хоча з часом процес конфігурації може стати настільки складним, що фактично перетворюється на розробку. (*facepalm*)
Програмісти постійно борються самі з собою. Замість того, щоб знову писати схожий код у різних програмах, вони пишуть бібліотеки, які можна конфігурувати (налаштовувати) під свої потреби, а потім просто підключають їх у всі потрібні місця.
За останні 20 років програмістами було написано дуже багато бібліотек, фреймворків і відкритих репозиторіїв. Їх реально мільйони. І тепер писати весь код з нуля вважається поганим тоном. Замість цього треба зібрати програму з якісних і перевірених рішень – бібліотек, фреймворків, пакетів і модулів.
Але і такий підхід вже застаріває. Тенденція останніх 10 років – це переїзд в хмари, великі дата-центри, які надають вашим програмам все, що їм потрібно. Хочете базу даних? У нас їх сотні на вибір. Хочете рідкісний унікальний веб-сервер - їх є у мене. Будь-який каприз за ваші гроші.
6.3 «Я – інженер» © Ілон Маск
Більше не потрібно писати складні і нудні речі. Якщо вам потрібна якась крута складна функціональність, на цей випадок вже є бібліотека. Вам потрібно просто: а) знати, що вона є, б) знайти потрібну (можуть бути десятки аналогів різної якості), в) розібратися, як інтегрувати її у ваш проект.
Робота від такого підходу стала тільки цікавішою. Тепер ви в 10 разів швидше можете додавати в продукт нову функціональність. 30 років тому, якщо вам потрібен був web-сервер, вам потрібно було написати його. 20 років тому — купити, встановити і налаштувати. А зараз — просто зайти в адмінку «хмари» і включити.
Це, до речі, одна з причин популярності мови Python. Він дуже добре підходить не для написання великих і складних рішень, а саме для «склеювання» різних частин між собою. І, судячи з його популярності, він відмінно з цим справляється.
Ну і сама професія з Python-розробника трансформувалася в Python Fullstack Software Engineer. Сучасний Python-розробник повинен розуміти, як працює база даних, щоб грамотно з нею працювати. Розуміти HTML & JavaScript, щоб налаштувати роботу frontend-а з python-бекендом. Ну і Docker потрібен — це тепер стандарт галузі.
Сучасна розробка взагалі мало схожа на те, що було ще 20 років тому. Сучасний програміст пише код не більше 50% свого часу. Весь інший час він читає доки, вивчає нові технології і проводить на мітингах (нарадах). Програмісти-одинаки залишилися далеко в минулому.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ