Інтуїтивне програмування

За свій відносно невеликий досвід роботи (близько 6 років) я досить часто чув фрази досвідчених і початківців програмістів — «Я відчуваю, що це повинно працювати», «У мене є відчуття, що цей метод не буде працювати», «Давайте зробимо інтуїтивно-зрозумілий інтерфейс» і так далі. Все це — прояв інтуїції в процесі розробки і програмуванні.
Про неї і піде далі розмова.



Взято з сайту oprah.com



Для початку хотілося б визначити саме поняття «інтуїція».

Інтуїція (позднелат. intuitio — «споглядання», від дієслова intueor — пильно дивлюся) — метод розв'язання задач за допомогою единомоментного підсвідомого висновку, заснований на уяві, емпатії та попередньому досвіді, «чуття», проникливість.

«Вікіпедія»


Інтуїція (від лат. intueri – пильно, уважно дивитися) — розумовий процес, що складається практично моментальному знаходженні розв'язку задачі при недостатній усвідомленості логічних зв'язків.


Інтуїція (від лат. intueri — пильно, уважно дивитися) — знання, що виникає без усвідомлення шляхів та умов його отримання, в силу чого суб'єкт має його як результат безпосереднього розсуду»


Основою цих визначень є те, що інтуїція — це такий спосіб прийняття рішення. Підстав у цього способу може бути кілька: це і попередній досвід, і уява, й ірраціональне «чуття», і т. д.
І кожен з цих способів знаходить відображення в процесі програмування, причому може робити як позитивне, так і негативний вплив.
Тому, перш за все, хотілося б розділити «інтуїтивне» програмування на 2 складових: -оптимістичний та песимістичний

Оптимістичне інтуїтивне програмування

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

Інтуїція, заснована на досвіді
Основна ідея тут полягає в тому, що в процесі накопичення досвіду розробки в нас складаються певні стереотипи, асоціації, пов'язані з кодом, які ми здатні визначати без поглиблення в розумовий процес.
Велика кількість прикладів використання такої інтуїції в процеси роботи описав Дмитро Чепель з Acronis у своїй статті на Хабре. Якщо Ви ще не читали, обов'язково прочитайте.

Я б хотів запропонувати вам інший приклад-експеримент. Нижче наведено приклад коду на мові Sidef (я сподіваюся багато хто з Вас знають його). Спробуйте не особливо вникаючи в деталі, здогадатися про що він:

loop {
var swapped = false
{ |i|
if (arr[i-1] > arr[i]) {
arr[i-1, i] = arr[i, i-1]
swapped = true
}
} * arr.end
swapped || break
}
return, arr


ВідповідьЦе класична сортування «бульбашкою»


Можливо, частина з Вас здогадалася про що йде мова, побачивши в коді знайомі частини, можливо деякі ні. Я спробував провести цей експеримент на невеликій групі своїх знайомих програмістів і результат такий — більше половини (близько 65%) осіб змогли за дуже короткий час зрозуміти про що йде мова.
Я уточнив у них, яким чином вони змогли здогадатися — і найпопулярнішим відповіддю було:
«Ми побачили знайомі шматки коду і відразу припустили, що це таке».

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

Інтуїція, заснована на логіці

Попроуйте продовжити наступний ряд:
1, 3, 5, 7, 9, 11, ...
Напевно Ви ні на секунду не задумалися, яке число буде далі.
Це простий приклад закономірності, яку ми можемо продовжити буквально не замислююся.

Але що, якщо взяти для прикладу наступний шматок коду на Python:

def sum(a, b):
...

def mult(a, b):
...

def subtract(a, b):
...

def divide(a, b):
...

def calculate(a, b, strategy):
...

calculate(4, 2, sum) #6
calculate(4, 2, mult) #8
calculate(4, 2, subtract) #2
calculate(4, 2, divide) #??



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

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

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

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

Але чому ж іноді, коли ми заходимо на якийсь веб-сайт з оригінальним дизайном або новий мобільний додаток, у нас складається відчуття, що цей сайт виглядає круто або жахливо?

Інтуїція як ірраціональне

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

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

Песимістичне інстинктивне програмування

Але інтуїція може нести й негативний характер при розробці.

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

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

висновки

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

P. S. Для тих, кому цікава тема интуции в розробці, раджу почитати доповідь Пітера Науэра «Інтуїція в розробці програмного забезпечення»

Спасибі!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.