Чистий код і чистий кодер: оволодіння мистецтвом професіоналізму та написання виняткового коду.

Чистий код і чистий кодер: оволодіння мистецтвом професіоналізму та написання виняткового коду.
  • Приблизний час читання: 8 хв
  • 17 Листопада, 2024

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

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

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

Ми починаємо сумніватися у своїх навичках, аналізуємо власні помилки та задаємо собі важливі запитання: “Чи справді я є професіоналом?” і “Що насправді означає бути професіоналом?”.

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

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

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

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

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

Коли я вперше взяв до рук книгу “Чистий кодер”, то не міг стримати усмішки. Вона здавалася настільки точною хронікою помилок і курйозів мого власного професійного шляху, що читання приносило одночасно задоволення й усвідомлення. Якби я прочитав її раніше, то, можливо, зекономив би собі кілька років і зберіг від невдач кілька проєктів. Але кожен проходить свій шлях у сфері ІТ по-різному, і часом уроки, отримані через помилки, стають найціннішими.

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

Також відповідальність означає чіткість у своїх обіцянках і діях. У професіоналів немає місця для невизначених формулювань на кшталт: “я спробую” або “можливо зроблю”. Є лише два варіанти: “так” або “ні”. Якщо ви кажете “так”, то повністю віддаєте себе виконанню задачі. Фраза “я спробую” створює оманливе враження: для вас це звучить як обережна відмова, а для менеджера — як підтвердження, що задача буде виконана. У результаті виникають непорозуміння: задача може бути виконана поспіхом або взагалі залишитися незавершеною.

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

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

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

  1. Планування — основа всього.
    Завжди виділяйте час на продумування архітектури проєкту. Не створюйте її “на ходу” під час розробки. Для цього потрібно виділити час: день, два, а іноді й кілька тижнів. У цей період ви зможете детально спроєктувати логіку роботи додатка, зв’язки між його компонентами та процеси, які він виконує. Такий підхід суттєво зекономить час у майбутньому, дозволить підтримувати проєкт без зайвих труднощів і уникнути хаосу.
  2. Простота — найкраще рішення.
    Справжній професіонал вирішує складні завдання простими способами. Не бійтеся писати класи, функції чи розбивати код на ще менші логічні блоки. Навіть функція у три рядки може мати велике значення, якщо вона допомагає краще структурувати і зрозуміти код. Зрештою, у більшості випадків саме вам доведеться його підтримувати. Як казали класики, пишіть код так, ніби його читатиме розлючений програміст із сокирою, який знає вашу адресу.
  3. Зрозумілість імен та структур.
    Використовуйте прості, інтуїтивно зрозумілі назви для функцій і змінних. Уникайте “магічних” чисел і загадкових конструкцій, які потребуватимуть пояснень навіть через кілька днів після написання.
  4. Тести — ваша безпека.
    Завжди покривайте програму тестами. Модульні, інтеграційні чи інші види тестів повинні охоплювати понад 90% коду. Це забезпечить впевненість у тому, що будь-які зміни в програмі не призведуть до катастрофічних помилок.

І наостанок: книга “Чистий кодер” заслуговує вашої уваги. Я не хочу переказувати її зміст у цій статті, але можу сказати одне: вона варта вашого часу і коштів. Її поради допоможуть вам уникнути багатьох помилок і стануть важливим кроком на шляху до професіоналізму.

Книга “Чистий код” говорить сама за себе вже з назви — вона вчить нас писати зрозумілий, функціональний і підтримуваний код. Чистий код — це не код, написаний максимально коротко, наприклад, в один рядок. Навпаки, це код, який читається легко і без зайвих зусиль, навіть якщо для цього доводиться розписати одну умову на два чи три рядки. Адже зрозумілість і читабельність мають завжди бути в пріоритеті.

Ця книга цікава, але водночас і складна для освоєння. Вона містить безліч практичних прикладів, здебільшого на Java та C#, а також один приклад на HTML. Проте її цінність виходить далеко за межі конкретних мов програмування. Основні ідеї застосовні у будь-якому проєкті, незалежно від технологій.

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

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

  • Нереалізація очевидної поведінки. Кожна функція чи метод має виконувати очікувані завдання. Відхилення від цього призводить до неочікуваних помилок.
  • Некоректна робота на межах функції. Ігнорування граничних значень може стати джерелом серйозних помилок, які могли б бути попереджені завдяки технікам тест-дизайну.
  • Вимкнення засобів безпеки. Якщо компілятор чи лінтер сигналізують про проблему, не ігноруйте це — ці попередження мають на меті уникнення багів.
  • Дублювання коду. Код, який повторюється, ускладнює підтримку та збільшує ризик помилок. Використовуйте функції чи методи для уникнення повторень.
  • Неправильний рівень абстракції. Код має бути написаний там, де він логічно належить, а не там, де його “зручно” розмістити.
  • Залежність базових класів від похідних. Це порушує базові принципи об’єктно-орієнтованого програмування.
  • Мертвий код. Неактивний або не використовуваний код займає місце та збиває з пантелику. Видаляйте його без вагань.
  • Вертикальний розподіл. Змінні та функції слід розташовувати якомога ближче до місця їхнього використання.
  • Непослідовність. Якщо в проєкті обрано певний стиль, дотримуйтесь його. Наприклад, використовуйте один тип лапок (одинарні або подвійні) та єдиний формат табуляції.
  • Баласт у коді. Змінні, які не використовуються, методи без викликів чи беззмістовні коментарі лише додають хаосу.
  • Штучні прив’язки. Не варто пов’язувати речі, які не залежать одна від одної.
  • Аргумент-селектор. Якщо функція залежить від булевого аргументу, краще розбити її на дві функції.
  • Неправильне розміщення коду. Подумайте заздалегідь, де краще розмістити новий код, щоб зберегти логічність його використання.
  • Нерозуміння алгоритмів. Неправильне уявлення про алгоритми часто призводить до написання “дивного” коду.
  • Зловживання конструкціями if/else або switch. У багатьох випадках краще використати поліморфізм.
  • Відсутність розуміння конвенцій коду. Ознайомтесь із правилами та стандартами, прийнятими в команді чи проєкті.
  • “Магічні числа”. Використання “магічних чисел” у коді робить його незрозумілим і складним для змін у майбутньому.
  • Інкапсуляція умовних конструкцій. Наприклад, if(shouldBeDeleted(timer)) виглядає зрозуміліше, ніж if(time.expired() && !timer.recurrent()).
  • Уникнення негативних умов. Вирази на кшталт if(buffer.shouldCompact()) читаються легше, ніж if(!buffer.shouldNotCompact()).
  • Функції мають виконувати лише одну операцію. Це полегшує розуміння, тестування та повторне використання.
  • Транзитивні звернення. Порушення закону Деметри ускладнює підтримку коду.

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

Тестування — це основа надійного коду, і нехтування ним може призвести до серйозних проблем у майбутньому. Ось кілька основних правил і порад, які допоможуть покращити підхід до тестів:

  • Відсутність тестів — завжди погано. Код без тестів — це ризик. Він може працювати сьогодні, але без тестів немає гарантії, що зміни завтра не зламають все.
  • Використовуйте засоби аналізу покриття. Інструменти для перевірки покриття коду тестами дозволяють виявити ділянки, які залишаються неперевіреними. Прагніть досягти хоча б 90% покриття, щоб бути впевненими у стабільності програми.
  • Не ігноруйте тривіальні тести. Навіть прості перевірки допомагають уникнути несподіваних помилок. Краще виявити їх під час тестування, ніж на продакшені.
  • Якщо вимикаєте тест, ставте питання. Перед тим, як вимкнути або видалити тест, задумайтесь: чи не вказує це на неправильне розуміння вимог або зміну бізнес-логіки?
  • Знайшли баг? Напишіть тест. Кожна знайдена помилка — це шанс покращити ваш код. Напишіть тест, який перевірятиме, що цей баг більше не виникає.
  • Швидкість тестів має значення. Повільні тести не лише дратують, але й часто ігноруються. Прагніть писати тести, які запускаються швидко, щоб вони легко інтегрувались у ваш робочий процес.

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

Дякую, що дочитали цю статтю до кінця! Ви зробили ще один крок до професійного розвитку. Пам’ятайте: кожна дрібниця, яку ви вдосконалюєте у своїй роботі, наближає вас до того, щоб стати справжнім майстром своєї справи. Успіхів вам! 😊