Якими навичками та рисами має володіти сучасний програміст?

Найважливіше розуміти яких навичок від тебе вимагає HR. Маючи ці навички, можна одразу потрапити на співбесіду. Те, що їм потрібно можна почитати в описі вакансії. End of story. Я на напишу якими на мою думку (думку програміста) навичками має володіти людина щоб стати успішним програмістом. Одразу скажу, у мене самого і половини цих навичок немає, але як приємно спостерігати за людьми у кого вони є, бачити з якою легкістю вони справляються зі своїми завданнями.

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

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

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

Управління складністю. Програмне забезпечення дуже складне. Людина нічого складнішого не виробляє. І якщо програміст не вміє зробити код і архітектуру максимально простою, робота з системою, що він розробляє, швидко перетворюється на пекло. Ми проводимо 80% часу читаючи код. Якщо зі складністю не змогли впоратися – читаємо 95% і більше часу. А коли ж писати новий код?

Управління залежностями. Залежності можуть приймати найрізноманітніші форми в програмному забезпеченні. Ось лише кілька: залежність класу в ООП від іншого класу; залежність бізнес логіки від GUI (чого бути не повинно) і навпаки; залежність системи від конкретної системи БД; залежність можливості виконання однієї вимоги від іншої вимоги, яка може її заперечувати. Здається, в програмуванні більше проблем із залежностями, ніж з розроблюванням алгоритмів.

Уміння виділити абстракцію. Це моя улюблена навичка. Я дуже тішуся, коли мені вдається виділити вдалу абстракцію в коді, і захоплююсь людьми, які вміють це робити. Річ у тім, що програмування – це цілковито абстрактна форма інженерії. Усі компоненти, що ми створюємо, є абстракціями і у фізичному світі не існують. Точнісінько як математика. Тому вміння вдало виділити абстракції і вдало їх організувати є ключовим для успішного програміста. (Не розумієш що я маю на увазі під абстракцією? Для прикладу, звичайна функція у процедурному програмуванні є процедурною абстракцією.)

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

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

Посидючість, готовність тягнути рутину. Робота програміста в основному це сидіння перед монітором. Нерідко трапляються дні, коли немає жодної наради, і доводиться сидіти й фокусуватися 8 годин на день. Це не так складно, якщо завдання дуже цікаве, але не рідко трапляються нецікаві завдання, і тоді… важкувато. Щоб з усім цим впоратися, треба мати рису характеру, що дозволяє людині довго сидіти на одному місці в обстановці, яка не змінюється.

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

Уміння і бажання брати на себе відповідальність. Це не та риса, відсутність якої може стати show-stopper-ом для програміста. Людина може бути гарним програмістом, але не більше того. Ніякої технічної кар’єри на цьому вона не побудує. Коли ти відмовляєшся брати на себе відповідальність, тобі ніхто не захоче довірити важливий проект. А саме на важливих проектах людина росте як технічно, так і особистісно.

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

Leave a Reply

Your email address will not be published.