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

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

Яка різниця між аматором та ПРО?

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

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

Програміст, який трактує себе, і, відповідно, поводиться як інженер.

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

Професіоналом можна назвати людину, яка вирішує суттєві проблеми.

Бізнесам не потрібні навчальні програми, програмістські задачки-пазли чи ігрові двигуни для навчання програмістів. Все, що їм потрібно – це або заробляти гроші, або економити час. Що також, економить гроші.

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

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

Професійні програмісти зберігають більше часу і генерують більше грошей, ніж вони коштують. Дуже просто 🙂

Як перевірити чи здатні ви зберігати кошти або генерувати гроші ще до вашої першої роботи під час навчання? В наступній секції розкажу класний підхід для підрахування своїх навчальних проектів.

Профіки добре розуміють свої можливості.

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

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

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

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

Професіонали розуміють та завжди намагаються зменшити ризики.

Що ви зазвичай робите, якщо не впевнені щодо ваших можливостей у тому чи іншому проекті?

Якщо спитати початківця скільки займе часу досить об’ємне завдання, він може відповісти щось на зразок: “Думаю, два-три дні”. Якщо ж спитати те саме питання хорошого програміста, він мабуть відповість: “Маючи припущення X, Y, Z, це займе приблизно 2-3 дні, з точність до 80% і беручи до уваги, що припущеня X, Y, Z залишаться правдивими протягом усієї роботи над завданням.” Ну і, якщо поставити дане завдання перед справжнім експертом своєї справи, він скаже: “Не знаю”, розділить завдання на дрібніші, ідентифікує 20% роботи, яка дасть 80% результату, і вже тоді надасть оцінку по часу саме тих 20% роботи. А це вже буде зробити значно простіше, і, відповідно, точніше.

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

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

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

Як стати профі?

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

Рахуємо корисність своєї роботи

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

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

Створіть електронну таблицю з п’ятьма колонками від A до Д. В колонку А впишіть назву навдання, над яким регулярно працюєте. Наприклад, перейменовую файл,  перевіряю пошту, організовую папки і файли, розгрібаю і складаю музику, обробляю зображення, перевіряю соц-мережі, що-небудь. В колонці Б напишіть час, який витрачаєте на дане завдання, в секундах, хвилинах чи годинах. В колонці В вкажіть час, скільки забере у вас автоматизувати (так, використовуючи власний код, програму) дане завдання. І, після того, як додумаєтесь як можна автоматизувати те чи інше завдання – пишете програму для цього. Кожного разу, коли запускаєте програму для виконання завдання, значення в колонці Г збільшуєте на одиничку (тобто рахуєте кількість разів, що ви скористались своєю програмою або скриптом).

Ну і на завершення, в колонці Д обраховуєте і записуєте кількість свого часу, що ви зберегли завдяки власній програмі. Обраховуєте це за формулою: ((колонка Б * колонка Г) – колонка В).

Також не забувайте оновляти колонку В кожного разу, коли ви знайшли багу у власній програміі. Це збільшуватиме час витрачений на розробку автоматизованого рішення.

Тепер ви маєте уявлення про ціну автоматизації процесів та час, який можна зекономити завдяки нам – програмістам.

Коли почнете – отримуватимете негативне число. Але з кожним запуском автоматизованого рішення, бачитимете його явні переваги і кількість збереженого часу постійно зростатиме.

Маючи таку таблицю можете навіть додавати її до резюме. Замість слів типу “працював над завданням X”, значно краще сказати, що зекономив собі “Y годин розробивши рішення Z”. Як мінімум позитивно виокремитесь серед натовпу претендетів і від вас захочуть отримати подальших пояснень щодо вашого рішення Z 🙂

Пишіть більше і більше програм

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

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

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

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

Коли пишете свої програми, постійно думайте над тим, що можна було б покращити. Як зробити свій код чистішим, читабельнішим, ефективнішим та швидшим. Рекомендую почитати книгу The Clean Coder: A Code of Conduct for Professional Programmers (Robert C. Martin Series). Вона допоможе сприймати програмування як справжнє ремесло, а себе як справжнього професіонала.

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

Постійне навчання

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

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

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

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

***

Ви можете починати ставати професіоналом прямо з цього моменту. Ніякі бірки, посади і звання не можуть вам в цьому завадити. Професіоналізм – це, в першу чергу, ставлення до вашої роботи.

І якщо ви ще тільки початківець, то коли отримаєте першу роботу – просто продовжите бути професіоналом 🙂

Як і у інших професіях, професіонал – це той хто любить свою справу, віддається їй повністю, завжди робить по максимуму видаючи найкращий результат, який він може в поточних умовах. Як кажуть англійською: Do your best! А решта додасться!

А ви як вважаєте, що потрібно для того, щоб перейти від рівня початківця до профіка?