Придумана складність у програмуванні!
Студентам та джунам-фрілансерам присвячується.
За останні кілька років мені кілька разів доводилося чути від розробників різного рівня досвіду, але переважно початківців:
— Нещодавно я написав чудову, корисну, дуже складну програму
Де ці епітети – чудовий, корисний та дуже складний стояли в один ряд і мали означати якісь виключно цінні якості цього твору. Щодо слів чудовий, корисний, то в цьому немає сумніву, але те, що слова дуже складний в цьому ряду – це, звичайно, нісенітниця.
Чому це відбувається? Чому людина народжується і приходить у програмування із цілком здоровими ідеями. Вона вважає, що найвища похвала його програмі — це елегантність та простота. Простота це, напевно, найцінніше, що можна сказати про програму.
І раптом, провчившись п’ять років в елітному виші, він змінює свої ідеї, змінює їх найнеймовірнішим чином, перетворюючи на протилежність того що було спочатку?
В чому справа? Справа в тому, що програмування — це середовище, не схоже на багато інших видів діяльності. Навіть будучи тричі Едісоном, ви ніколи не зможете змусити котитися велосипед із квадратними колесами. Але нажаль програміст може. У програмування цілком імовірно зробити такий велосипед, що котиться і це відрізняє нашу діяльність від інших.
Тобто коли людина приходить у програмування і тільки вперше стикається з можливостями, що відкриваються перед нею, у неї з’являється відчуття всемогутності. Будь-яке завдання, поставлене перед програмістом, можна вирішити. І насправді, витрачаючи справді серйозні зусилля, можна зробити цей злощасний велосипед.
Більше того, коли людина дійсно вирішує це завдання, яке стало складним через неправильне проектування, він відчуває колосальний емоційний підйом. тобто йому доводилося боротися з протидіючим середовищем та усіма перешкодами, що виникали на його шляху через його неправильні початкові умови. Як він їх долав, і велосипед котився.
І виникає такий рефлекс, я зробив складну програму, молодець. Рефлекс абсолютно неадекватний. Він не адекватний насамперед тому що проблема складної програми не тільки і навіть не стільки в тому, що на неї були витрачені якісь невідповідні зусилля, а в тому, що цю складну програму буде важко далі розвивати. А як відомо, виживають лише ті програми, що розвиваються. Звісно розвиваються у виробничому сенсі. Якщо програма перестає розвиватися, вона вмирає.
При зміні програми у майбутньому, особливо в тій частині, яка виявилася складною, виявляється, що розробник більше не може впоратися з цією складністю. Цей складний розділ був написаний у стані колосального творчого підйому, завдяки якому розробнику вдалося втримати в голові всі тонкощі алгоритму. Але минуло два-три тижні, а можливо, і більше, і всі ці алгоритмічні фокуси стерлися з пам’яті і відновити їх абсолютно безнадійно. І так програма вмирає. Вона загасає у виробничому випадку. Якщо розробник студент і він навчається, він представив свою програму викладачеві, програма спрацювала, всі задоволені, результат отриманий, і таким чином цей неправильний рефлекс закріплюється, і тому лише через роки до програміста повертається почуття реальності. Аналогічним чином ситуації трапляються у початківців які самостійно працюють на фрілансі, або без ретельного нагляду із боку досвідчених працівників. Ти зробив програму, клієнт вдоволений, ти отримав гроші. Хто буде потім це підтримувати це зовсім інше питання. Знову ми бачимо підкріплення не правильного рефлексу.
Із досвідом складність справді стає ворогом, ворогом номер один, і коли програміст відчуває, що його алгоритм ускладнюється, його реакція зазвичай не така: “ого, як чудово зараз я почну вирішувати складне завдання” а “що ж це таке? імовірно я щось наплутав у проектуванні, треба повертатися на крок або два назад і спробувати зрозуміти що пішло не так». Це те, до чого приходить програміст, але приходить дійсно не без додаткових зусиль.
Ну, підбиваючи підсумок, можна сказати, що у програмуванні немає складних завдань, як і немає складних для реалізації предметних областей. Є нерадиві програмісти або хто ще не достатньо досвідчений і не приділяє належної уваги боротьбі з цією складністю.