Звивистий шлях розробника


Вчитися програмування — довічна затія. Майже завжди буде потрапляти щось нове, про існування чого ви ще не знали.
Я спілкуюся з великою кількістю студентів, які вивчають інформатику, і багато з них вважають, що навчаться в університеті програмування, а потім просто підуть і застосовувати ці знання у своїй роботі. Можливо, вони знайдуть якісь бізнес-знання в процесі. Але професійні програмісти відразу зрозуміють, що вони зовсім новачки, ці університетські випускники.
Після розмови з @PrototypeAlex, де ми обговорювали безліч етапів, які проходять розробники, у мене з'явилося натхнення написати про це. За 30 років, які я пишу код, я пройшов майже через кожен описаний у статті етап, і деякі були особливо відчутними.
Впізнаєте себе на якомусь із цих етапів? І що я пропустив? Багато етапи вислизають з мого поля зору; ми ніколи не перестаємо вчитися і робити відкриття.
Великий Копіпастер
Писати код важко, але люди вирішили проблему за вас! Ваш браузер переходить до Stack Overflow при введенні "s" в адресному рядку, і ви годинами вставляєте різні фрагменти коду, щоб побачити, який з них виконує те, що вам потрібно. Іноді це висмоктує моральні сили, але в підсумку у вас з'являється хоч якийсь робочий код.
Що ви зрозумієте: ви зрозумієте, що єдиний спосіб навчитися добре програмувати — опрацьовувати завдання самостійно. Навіть якщо це гальмує вашу роботу, ви звертаєтеся до Stack Overflow всього кілька разів в день. Ваші навички в програмуванні поліпшуються і тепер ви працюєте набагато швидше і набагато менше залежите від коду, написаного іншими.
Успішний Методист
Ви навчилися писати код, який робить те, що вам потрібно, але з першого разу нічого не працює. І вимоги постійно змінюються. Ви встромляєте який-небудь код і копаетесь в ньому, поки не запрацює. Працює? Релизим! Ви шалено продуктивні, і вас хвалить продакт-менеджер.
Що ви зрозумієте: код читається не тільки комп'ютерами, але і людьми. Ви починаєте працювати над проектами з іншими людьми, і вони лізуть на стіну кожен раз, читаючи ваш код. Ви не написали жодного тесту, і вони навіть не можуть зробити рефакторинг коду і поліпшити його, не боячись зламати.
Ви розумієте, що витрата часу на спроби зробити код чистіше може загальмувати вас, але якщо ви це зробите, ваш код можна буде легко підтримувати в майбутньому. Ваші партнери по команді стануть щасливішими від роботи з вами, а ви забезпечите довгострокову цінність своєї компанії.
Розумний Кодер
Тепер ви знаєте різні прийоми свого улюбленого мови і можете стиснути якусь частину коду розумний, маленький метод. Ви розслаблено сидите і хваліть себе за те, наскільки він компактний! Дивіться, який крутий код, як же він підкреслює ваші навички.
Що ви зрозумієте: іноді здається достатнім просто бути розумним, але виявляється — це не дуже добре впливає на соціальні взаємини. Мізки інших людей не працюють так, як ваші, і незважаючи на те, що вони – хороші програмісти, вони не відразу можуть зрозуміти ваш "розумний" код. Набагато краще, коли у вашому коді є чітко виражені концепції для всіх, хто його читає. Вашій "розумному" коду тепер є місце у всяких паззлах і задачки типу code golf.
Коментатор
Іншим важливо розуміти ваш код, тому потрібно перевіряти, що він дуже добре прокоментований. Ви пояснюєте, що відбувається кожні кілька рядків. Все так пристосоване для читання!
Що ви зрозумієте: багато коментарі не точно описують, що робить код, і це робить його надзвичайно важко читати. Ви вирішуєте, що будете використовувати коментарі, щоб пояснити, чому код написаний саме так, як написано, а не описувати, що робить цей код.
Тепер ваш код зручний для читання, використовує описові імена змінних і безліч точно названих методів. Ваші методи високого рівня читаються тепер майже як англійську мову! А вставлені коментарі тільки там, де не вийшло зробити саме описовий код.
Рефакторщик Коду
Це дерьмово код. Він успадковується більше п'яти років, нам потрібно позбавитися від нього і почати новий. Серйозно, ми можемо написати набагато краще. З новим було б набагато чистіше і простіше працювати.
Що ви зрозумієте: профіт від "застарілого коду" — це те, що формує вашу зарплату. На даний момент ви вже попрацювали з декількома базами коду і зрозуміли, що повноцінних, не порченных місцями, в світі не існує: ви знаєте, що завжди існує технічний борг.
Тепер ви зводите рефакторинг до мінімуму, і робите його частиною щоденних змін, зачіпаючи тільки те, що необхідно для відправки цих змін. Періодично ви забезпечуєте підтримку невеликих рефакторинговых проектів, щоб позбавлятися від гірших і самих яких частин кодової бази. Ви намагаєтеся домогтися того, щоб новий код був добре спроектований. Ви розумієте, що для факторизації необхідний хороший бізнес-кейс.
Прихильник 100%
У вас є редактор, натасканный автоматично контролювати якість коду за стандартом, і щоразу перед комітом ви запускаєте перевірку метрик, щоб переконатися, що "код хороший". Все, що ви пишете, обов'язково тестується, і тестами покрито 100% вашої роботи. У вас з'являється тепле, затишне відчуття від знання, що вся ваша робота кількісно чудова.
Що ви зрозумієте: хоча у більшості хорошого коду хороші метрики, ви виявите, що не весь код з хорошими метриками хороший сам по собі. Ви зрозумієте, що спиралися на метрики, стандарти та кращі методики занадто сильно, замість того, щоб використовувати свої навички для перевірки, наскільки гарним є ваш код.
Тепер ви активно залучаєте свої мізки, щоб написати гарний код, перечитуєте його, коли закінчите, і використовуєте код-рев'ю, щоб упевнитися в правильному шляху. Ви осягнули принципи, що лежать за межами інструментальних вимірювань, замість того, щоб просто намагатися писати код, який видобуває з інструменту певне число. Ви досі використовуєте засоби для метрик, але на рівні все кодової бази, щоб отримати загальне розуміння, в якому стані код і на що можна звернути увагу, щоб згодом поліпшити.
Пристрасть до трендам
Використання новітніх технологій робить ваш код ультрасучасним! Ви любите застосовувати все нове до production кодом. Ви використовуєте функціональний стиль програмування Ruby, і першим задіяли NoSQL для додатка c формочками. Ці нові технології набагато продуктивніше і елегантніше. Це настільки захоплююче відчуття, і ви знаєте, що стали дуже цінним своєму роботодавцю. Ви точно не залишитеся на задвірках історії.
Що ви зрозумієте: пристрасть до трендів — це круто, але вона тягне за собою проблеми. Ви витрачаєте багато часу, обходячи прикордонні випадки і користуючись новою технологією, з якої ніхто ще толком не знайомий. Підтримки або бібліотек, доступних для нового фреймворку, не так вже й багато, і людей з досвідом його використання, яких ви могли б найняти — теж. У одного з кінцевих продуктів було стан відмови, при якому загубилися деякі дані, і для вас це було професійним ганьбою.
Ви усвідомлюєте, що використання традиційних технологій для кінцевих продуктів приносить велику цінність вашої компанії, хоч це і більш нудний шлях, тому що нова технологія вам дуже подобалася. Вечорами ви ковыряетесь з іграшковими проектами, підживлюючи свою одержиму радість і навички до того моменту, коли тренд стане досить крутим, щоб ваш бізнес міг на нього покластися.
Фанат Патернів
Розумні люди придумали елегантні патерни для опису хорошого коду, і ви використовуєте їх у своєму коді. Весь час. Багато розмови з колегами зводяться або до кращого використання патерну, або до того, як можна було б написати щось краще, з іншим паттерном. Ви знаєте, що при такому підході, ваш код буде любити розумні люди, які розробили ці патерни.
Що ви зрозумієте: спостерігаючи за тим, що ваші колеги виконують багато роботи за той час, як ви встигаєте пробігтися тільки по дрібницях, ви розумієте, що, можливо, ви занадто захопилися. Зрештою, патерн — це просто грубий шаблон, який нічого не проповідує, а просто направляє вас робити щось корисне.
Тепер, коли ви засвоїли ці шаблони, можна перестати думати про "реалізації патерну X" і просто писати код, використовуючи інтуїцію і досвід. Завдяки цьому ви можете зробити багато корисного коду. (А ще ваші колеги щасливі, що ви перестали говорити про паттернах).
Передчасний оптимізатор
Монолітні додатки не елегантні, а ваша архітектура така витончена. Дрібні мікро сервіси, кожен з яких керує однією особливістю програми, з розумним рішенням для обміну повідомленнями — очевидний спосіб розробки нового додатка. Ви починаєте так, як ніби збираєтеся продовжувати в тому ж дусі, і це гарантує, що ваш додаток буде масштабованим.
Що ви зрозумієте: ви виявите, що мікро сервіси сильно гальмують розробку, народжуючи всілякі труднощі, з якими б ви не зіткнулися в моноліті. Ви думаєте, що могли б вийти на ринок набагато швидше, і, природно, заробити гроші, щоб швидше профінансувати розробку, якщо б почали з більш простого дизайну.
Оскільки ви працювали в великих командах, ви знаєте, що мати більше сорока людей, що працюють над однією базою коду — складна конфігурація: кожен повинен знати про систему все, щоб ефективно з нею працювати, а це не масштабується. Тепер ви бачите плюси і мінуси, і відкладаєте рішення робити рефакторинг сервісів до моменту, поки це не матиме економічний сенс.
Оракул
Ваш код чудовий. Всі про це говорять. До вас проявляють професійну повагу. Колеги шикуються в чергу до вашого столу, в надії почути коментарі про їх коді. У вас стресова робота через вічну зайнятість, і вас турбує те, що компанія тримається на вас. Коли ви хворієте, трапляються погані речі.
Що ви зрозумієте: ви розумієте, бути оракулом — погана ідея для працездатності вашої організації. Замість того, щоб тихо сидіти і писати чудовий код, ви витрачаєте час на активне навчання розробників своєї компанії. Ви пишете набагато менше коду, і з цієї причини падає продуктивність вашої команди. Але ви розумієте, що якщо можете підняти рівень навичок кожного розробника, разом вони напишуть код, який ви не встигли написати, а потім перевершать вас.
Ви виявите, що розробники стали більш впевнено приймати власні рішення, і, хоча іноді не правильні, вони вчаться на своїх помилках і стають відмінними розробниками завдяки вашій наставництва.
Захисник
Ви один з senior-розробників великої організації або провідний розробник в невеликий. Ви допомагаєте приймати бізнес-рішення і навчати своїх розробників бути прекрасними. Але менеджмент або клієнти завжди знаходять спосіб приймати погані рішення, і вам доводиться захищати свою команду від їх некомпетентності. Вони хочуть реалізувати не мають сенсу, дурні функції або компоненти, які ускладнять код. Ви витрачаєте багато часу на боротьбу з ними, захищаючи свій код і розробників, і іноді рушите відносини з-за своєї пристрасті до збереження щасливою команди.
Що ви зрозумієте: зруйнувавши пристойну кількість відносин, ви усвідомлюєте, що наявний код і робота — це заслуга менеджменту і клієнтів. Ви приходите до висновку, що іноді люди без технічного бекграунду не можуть передбачати технічні наслідки своїх запитів, і робите своєю місією стати частиною команди, давати їм цінну інформацію і поради, щоб у них була можливість правильного вибору. Єдиний спосіб сформувати міцні і довірчі відносини з ними поводитися, як описано вище.
Як тільки ви выскажетесь, краща стратегія — піти з їх шляху, щоб вони могли прийняти правильне рішення для свого бізнесу. Ви завжди будете поруч, щоб підтримати їх, якщо щось піде не так, але в підсумку виявиться, що досить часто все йде добре, тому що ви побудували прекрасні відносини, а найгірші рішення зарезаются ще біля кореня.
(Переклад Наталії Басс)
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.