Непопулярна думка: Бути хорошим інженером-програмістом сьогодні складніше, ніж будь-коли

pic

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

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

Що означає бути хорошим інженером

Що означає бути інженером? Як програмні інженери, ми:

  • Відповідаємо за перетворення складних задач на ефективні й масштабовані рішення
  • Виконуємо аналіз вимог користувачів, проєктуємо архітектуру програмного забезпечення, пишемо код і тестуємо чи налагоджуємо програми
  • Зобов'язані слідкувати за трендами, шукати нові можливості для бізнесу та шляхи вдосконалення існуючих продуктів

Тож ні — інженерія не дорівнює програмуванню. Інколи це лише найменша частина роботи. Особливо це стає очевидним із набуттям досвіду, як показано на графіку нижче.

pic

Джерело: Набори навичок у лідерстві в інженерії

Що означає бути хорошим інженером? Спираючись на численні інтерв'ю та спостереження за прогресом своїх підопічних, я помітив, що люди з різним рівнем досвіду дають різні відповіді.

Ті, хто тільки починає, можуть вважати, що це залежить від кількості мов і фреймворків (frameworks), які знає розробник. Досвідченіші інженери можуть не звертати увагу на мову програмування, натомість наголошуючи на якості коду — дотриманні всіх принципів кодування і належному тестуванні (QA), при цьому працюючи швидко.

Дуже досвідчені інженери роблять величезний акцент на створенні цінності.

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

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

Зростаючі ринки та конкуренція

Технологічний ринок постійно змінюється. Ми всі бачили грандіозні успіхи за останні роки: від WhatsApp до Uber, Airbnb і TikTok. Хоча ці приклади є скоріше винятками, вони часто стають "північними зорями" для людей — тим, до чого вони прагнуть. Такий спосіб мислення додає додатковий тиск на інженерів. Вони відчувають стрес як із середини, думаючи, що роблять щось неправильно, так і ззовні, коли їхню компанію порівнюють із багатьма конкурентами.

pic

Джерело: Наскільки здоровий публічний технологічний ринок?

Щоб досягти успіху в такому середовищі, компаніям потрібно було "рухатися швидко та ламати все", як говорить відомий девіз Facebook. Сьогодні це стало ще очевиднішим — майже кожна компанія намагається стати "AI-компанією". Всі інтегрують ChatGPT, часто без реальної потреби чи стратегії, як це приноситиме користь.

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

Світ — це заплутане місце

Що повинен робити ентузіаст, як я, щоб стати кращим інженером? Окрім очевидного — вдосконалення навичок програмування через покращення чистоти коду (clean code) та філософії архітектури, сьогодні існує багато спокус, які чекають на нас.

Вивчення TypeScript і того самого останнього фреймворка (framework), який "змінює все", занурення у світ блокчейну (blockchain) та криптовалют, експерименти з безліччю AI-продуктів… Варіантів безліч.

pic

Чесно кажучи, навіть після стількох років у цій індустрії, я все одно відчував загрозу від нової хвилі змін, принесеної ChatGPT, GitHub Copilot та іншими новими технологіями. Мій мозок почав малювати сценарії, де я втрачаю зв’язок із багатьма речами. Чи зосереджуюся я на правильних речах, щоб приносити користь? Чи використовую я свій максимум потенціалу?

Згодом стало зрозуміло, що ми у розпалі хайпу. Але це теж мине, залишивши лише ті AI-компанії, які створюють довготривалу цінність. За останні 5 років кількість AI-компаній у США подвоїлася, причому багато стартапів просто додавали функцію поверх тоді нововипущеного GPT-3. Згодом вони зникли з появою ChatGPT або GPT-4, які могли робити те саме, але краще. Але це не зупиняє армію хайпу в Twitter та інших платформах, які проголошують новий світовий порядок.

Навіть після багатьох років роботи у сфері технологій, я теж потрапив у пастку хайпу. Новачкова помилка!

Мови програмування та постійні релізи нових фреймворків також додають плутанини. Tailwind, TypeScript, Haskell і Rust чудові; кожен із них має свою особливість, яка дає перевагу. Але люди часто помилково вважають, що їх вивчення дасть їм перевагу. Це не так, або, принаймні, не повинно так бути. Це лише інструменти, які приємно знати, але вони не можуть замінити досвід. Саме тому ми ніколи не додаємо вимоги щодо знання мови чи фреймворка у наші вакансії. Я був би дурнем, якби проґавив талановитого інженера лише тому, що він не знає TypeScript, prompt engineering або мікросервіси (microservices).

Моя порада — не захоплюйтесь новими трендами та хайпами настільки, щоб втратити фокус на створенні цінності.

**

Швидкий темп та високі вимоги

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

pic

Як ментор і працівник, я бачив, як стрес призводить до вигорання. Без винятків, коли хтось переживає вигорання, це призводить до меншої продуктивності, ніж зменшення робочого навантаження, відпочинок і оптимізація на довгострокову перспективу. Тому ми завжди намагаємося зробити процес підняття червоних прапорців (red flags) якомога простішим, з періодичними оновленнями для команди, зустрічами один-на-один і культурам підтримки.

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

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

Як ми можемо робити краще?

У кожного з нас бувають важкі моменти — почуття, що ми недостатньо хороші як інженери, ментори чи колеги. Речі ніколи не будуть ідеальними чи легкими, і це нормально. Без помилок і складних часів ми не вчимося. Але є деякі речі, які, на мою думку, можуть підвищити ефективність.

pic

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

Як компанія, починайте з чому, коли приймаєте рішення. Це найкращий спосіб доставляти функціональності, які принесуть цінність.

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

Культурно, встановіть процеси, які підтримуватимуть співробітників, оптимізуючи на довгострокову перспективу. Разом із колегами створюйте культуру довіри, підтримки та турботи. Таким чином, ви всі отримаєте найкраще один від одного.

Перекладено з: Unpopular Opinion: It’s harder than ever to be a good software engineer

Leave a Reply

Your email address will not be published. Required fields are marked *