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