Топ-10 рис програміста-професіонала. Огляд книги Clean Coder Роберта Мартіна
Привіт! Мене звуть Михайло, я працюю Senior Software Engineer у компанії Plexteq. Одним з моїх основних професійних інтересів є тема розвитку себе як технічного спеціаліста і прагнення до technical excellence.
Вже декілька років я намагаюсь систематично читати книжки на IT-тематику. Я вважаю книжки, можливо, найпотужнішим засобом для професійного росту програміста. Онлайн-курси, конференції, статті — це все чудово. Вони можуть підказати вам чудову ідею, підштовхнути у напрямку нової цікавої саме вам теми тощо. Однак, на мою думку, тільки хороша книжка, завдяки своїй цілісності, може докорінно змінити те, як ви бачите професію.
Тому, якщо вас цікавить тема саморозвитку — сподіваюсь, цей блог стане вам у пригоді.
Програмісти-професіонали — хто вони?
Розпочнемо з простішого питання: хто такі програмісти? Очевидно, що це люди, які створюють програмне забезпечення. Багато хто з нас спробував програмування ще у школі або університеті, і з того часу став дивитись на світ інакше. Чи стали ми в той момент програмістами? Звісно, що так. Чи стали ми програмістами-професіоналами? Звісно, що ні.
Так що ж відрізняє програміста-професіонала від просто програміста? Отримання заробітної плати за свою роботу? Тлумачення можуть бути різними, але Роберт Мартін, також відомий як «дядько Боб», з таким визначенням ні в якому разі не погодився б.
Сьогодні я хотів би обговорити з вами його думки з цього приводу, викладені у книзі Clean Coder. Я обрав топ-10 його ідей, які, на мій погляд, підсумовують найважливіші риси програміста-професіонала.
1. Постійне навчання
Чому постійне навчання — це те, що має робити програміст-професіонал? По-перше, наша професія невпинно змінюється. По-друге, об’єм цікавих і корисних знань, накопичених за останні декілька десятиліть, є надзвичайно великим. Щоб покращити свої скіли, спортсмени тренуються майже щоденно. Так само і програмісти-професіонали майже щоденно читають книжки, професійні розсилки, статті, дивляться відео з конференцій тощо.
Роберт Мартін вважає, що на таку діяльність необхідно витрачати близько 20 годин на тиждень (додатково до 40 годин, протягом яких ми працюємо на основній роботі). Щобільше, на його думку, — це єдиний можливий шлях не вигоріти. Це доволі суперечливе твердження, однак, звісно, час на самоосвіту виділяти необхідно. Якщо правильно підібрати матеріали, то самоосвіта може стати тим, що підтримує інтерес до професії, особливо тоді, коли справи на проєкті йдуть не надто цікаво.
2. Вміння казати «так» і «ні»
Do, or do not; there is no try. Програміст-професіонал вміє дотримуватись свого слова. Він повинен вміти казати «Ні». Наприклад, якщо програміст-професіонал бачить, що виконати задачу у поставлені строки без завдання шкоди продукту неможливо, він комунікує своє розуміння менеджменту. Це частина його професійних обов’язків.
Не менш важливим є вміння казати «Так». Якщо програміст-професіонал обіцяє, що він щось виконає — він повинен це зробити. Перед тим, як зробити таку обіцянку, необхідно зважити, як саме буде досягнуто поставленої цілі.
Інколи у таких випадках доводиться овертаймити, що, звісно, негативно впливає на особисте життя. Чи готові ми заплатити таку ціну — це вибір, який має зробити кожен.
3. Вміння робити естімейти
Програміст-професіонал знає, що таке естімейт і вміє, у рамках обговорення з командою, чесно естімейтити задачі. Важливо розуміти, що естімейт — це не точкова оцінка. Естімейт майже завжди являє собою розподіл ймовірностей. Саме тому дядько Боб розповідає про Program evaluation and review technique, в рамках якої надається три естімейти: оптимістичний, реалістичний і песимістичний.
Не варто забувати і про популярний Planning Poker. Загалом, яку б техніку оцінювання складності задач ми не використовували, важливо пам’ятати, для чого естімейти існують як такі. Основна задача естімейту — надати менеджменту якомога точнішу інформацію про складність задачі, що дозволить краще спланувати майбутню ітерацію і краще розуміти «швидкість» команди.
4. Знання продукту і предметної області
Програміст-професіонал добре знає проєкт, над яким працює. Він не боїться працювати над невідомими частинами свого проєкту; він розцінює це як змогу пізнати щось нове. Програміст-професіонал на належному рівні володіє технологіями, які використовуються на проєкті.
Програміст-професіонал також має певний рівень розуміння предметної області проєкту, адже без цього складно вести ефективну розробку та переговори з бізнесом або менеджментом.
5. Test-Driven Development
Програміст-професіонал намагається створювати якомога якісніший продукт. TDD є тією технікою, яка, при правильному використанні, призводить саме до такого результату.
«Чи можемо ми вважатись професіоналами, якщо не знаємо, чи наш код працює? Як ми можемо це знати, якщо не тестуємо наш код після найменших змін? Як ми можемо проводити таке тестування, якщо у нас немає автоматизованих unit-тестів з високим відсотком покриття? Як нам отримати такий набір unit тестів не використовуючи TDD?» — питає дядько Боб.
TDD у комбінації з іншими методами тестування надає програмісту впевненість в собі, стимулює постійний рефакторинг, веде код до кращого дизайну та має безліч інших переваг.
Я розумію, що серед усіх топ-10 рис програміста-професіонала, ця може викликати найбільшу незгоду. Попри це, я б радив усім, хто цього ще не зробив, спробувати TDD хоча б протягом декількох місяців. Одні з найрозумніших програмістів світу (Боб Мартін, Мартін Фаулер, Кент Бек і багато інших) рекомендують TDD. Навряд усі вони помиляються
6. Time management
Програмісти-професіонали вміють грамотно розпоряджатись своїм часом. Це означає, що вони намагаються проводити свої робочі години якомога продуктивніше.
Цікавою технікою для цього є Pomodoro. Pomodoro — схема роботи, при якій робочий день розбивається на короткі (близько 25 хв) продуктивні відрізки, між якими робиться
Під час продуктивного відрізку не рекомендується відволікатись на інші активності (навіть на відповіді колегам у чатиках, якщо їх повідомлення не є терміновими). Це дозволяє легше тримати фокус і бути сконцентрованим на конкретній задачі. Після прочитання Clean Coder, я почав використовувати Pomodoro і поки що задоволений результатами.
Також важливою частиною менеджменту часу є поведінка програміста щодо мітингів. Програміст, безумовно, повинен відвідувати важливі мітинги. Однак, якщо він бачить, що його присутність на мітингу не обов’язкова (навіть якщо він розуміє це посередині мітинга) — його професійний обов’язок полягає у тому, щоб ввічливо це прокомунікувати і, за згодою команди, — перейти до важливіших справ.
7. Менторство
Досвідчені програмісти-професіонали менторять менш досвідчених програмістів. Вони не тільки допомагають своїм колегам краще зрозуміти технічні деталі, але й розповідають їм про загальні цінності команди. Така практика є важливою для всіх: для команди, для учня і, звісно ж, для ментора. Менторство людей, які дійсно у ньому зацікавлені, є дуже вдячною працею, яка приносить велике задоволення. Також це заняття є корисним, адже найкращий спосіб освіжити технічні знання — підготуватись до викладання цих знань іншим людям.
8. Практика
Програмісти-професіонали тренують свою майстерність. Дядько Боб робить акцент, що, наприклад, професійні атлети розділяють тренування від своїх професійних виступів (аналогом яких, у випадку програмістів, є їх робочий день). Тому обов’язок програміста-професіонала — тренуватись у свій власний час.
Як на мене, аналогія трошки натягнута, але немає ніяких сумнівів, що практика (так само як і постійне навчання) йдуть на користь програмісту. Серед найпоширеніших способів тренування можна виділити роботу над pet-проєктом, написання коду для open source проєктів тощо. Дядько Боб також говорить про так звані Dojos і Katas — короткі вправи, які дозволяють вдосконалювати свою вправність у, наприклад, TDD.
9. Стратегія тестування
Програмісти-професіонали активно пропагують і беруть участь у створенні автоматизованої стратегії тестування. Дядько Боб любить вираз «QAs should find nothing». Звісно, це максима, якої складно досягти, однак варто намагатись до неї асимптотично наближатись. Автоматизоване тестування сприяє цьому.
Сама роль QA, на думку дядька Боба, полягає не в мануальній перевірці тест-кейсів, а у підготовці автоматизованих acceptance тестів. Такі тести можна створити виключно при взаємодії QA команди, програмістів та представників бізнесу чи менеджменту.
10. Вміння працювати під тиском
У стресових ситуаціях, програмісти-професіонали вміють зберігати спокій та зібраність. Вони намагаються слідувати тим практикам, які вони використовують у повсякденному програмуванні — таким як TDD, парне програмування тощо. Вони намагаються не робити невиправданих технічних рішень, які можуть допомогти прямо зараз, проте негативно вплинуть на проєкт у довгостроковій перспективі. Програміст-професіонал залишається професіоналом завжди.
Як бачимо, бути професіоналом — нелегко. Однак, на мою думку, тільки рухаючись у напрямку професійності можна відчувати, що ти самореалізовуєшся на повну.
Найкращі коментарі пропустити