07.08.2022

Сергій Немчинський: Як думати, як програміст?

Сергій Немчинський
7 хвилин перегляду
Сергій Немчинський: Як думати, як програміст?

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

Що означає “думати як програміст”

  • Розуміння задачі

Цей аспект насамперед пов’язаний із розумінням того, що від вас хочуть. Багато інших професіях завдання досить прямі. Наприклад, ви маляр, вам сказали пофарбувати стіну і ви берете та фарбуєте її. Тобто. ви бачили, як це робиться, предмет завдання є реальним. Звичайно, тут теж є свої тонкощі і знецінювати роботу малярів, будівельників або будь-кого я не мав наміру. Однак у програмуванні завдання ставляться на іншому рівні, в чому полягає вся складність. Зазвичай приблизно 9/10 завданням не описуються. Ці 9/10 завдань вам потрібно добудувати у голові самостійно. Для цього потрібно розібратися в предметній області: що повинна робити програма, для чого вона, хто їй користуватиметься, як часто нею користуватимуться, наскільки це зручно та ін. Так, є UI/UX дизайнери, які займаються юзабіліті програми, але все одно багато дрібних аспектів потрібно буде додумати самостійно. Завдання формулюється набагато менше від того, що насправді потрібно зробити. Цей аспект зазвичай дуже дратує новачкових програмістів.

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

  • Комунікація

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

  • Поділ проблем

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

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

  • Складання плану

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

  • Мистецтво налагодження

Переважна більшість інших галузей ви можете сказати: у мене не вийшло. У програмуванні це неможливо. Ви або повинні довести, що це теоретично неможливо (але в більшості випадків можливо все), або зробити це. Відчуття, що ви в будь-якому випадку повинні це зробити і немає варіанту здатися, дуже підриває бойовий дух новачків 🙂 До цього треба звикнути.

Це як жарт: страшно не те, що ми дорослі, а те, що дорослі — це ми. Так от і тут програміст завжди дорослий. Саме на програмісті закінчується ланцюжок відповідальності. Це завдання потрібно зробити. Так, у тебе не виходить. Можливо, потрібно витратити більше часу на пошук рішення. Все одно не виходить? Отже, треба покрутити проблему і знайти інші підходи до вирішення. Звідси висновок – якщо ви щось не можете зробити, значить цю проблему крутили в руках не досить довго.

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

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

  • Практика

Програмування – це практична навичка, тому все що ви робите – це практика. Робота з вашою IDE, робота з налаштуванням бази даних, робота з налаштуваннями операційної системи, мережі, файрволів та інше – все це частина роботи програмісти. Що не частина програмістів? Ну, наприклад, перегляд відео на ютубі 🙂 А якщо серйозно, отримання інформації — це не частина роботи програміста.

Завжди ваш Сергій Немчинський