Занудний програміст

From The Joel on Software Translation Project

Jump to: navigation, search

Я б назвав Джеймі Завінські занудним програмістом. Але я кажу це в гарному сенсі, адже я надзвичайно поважаю цю людину. Він із головою поринає в роботу, створюючи майбутнє власними руками, щоб наше з вами життя було легшим. Якби ви мали власну команду проектувальників та розробників картів, то саме такого хлопця вам би не вистачало, бо у нього два улюблених інструменти: скотч та аерозоль WD-40. І він знає як ними користуватись, навіть якщо ваш карт нестиметься зі схилу із швидкістю понад милю на хвилину. І це в той час, як інші програмісти ще й досі товктимуться на старті, сперечаючись стосовно застосування надсучасних космічних технологій.

У результаті ви можете отримати злегка неоковирну автівку, проте вона летітиме просто із пекельною швидкістю.

Я щойно прочитав інтерв’ю Джейми у книзі Пітера Сейбела «Coders at Work» («Програмісти за роботою»). Мерщій її купуйте! Це просто надзвичайна добірка бесід із визначними програмістами, серед яких і Пітер Норвіг, і Гай Стіл, і Дональд Кнут. Це настільки цікава книга, що я вчора ледь зміг відірватись від неї. Тож як я вже казав, мерщій за нею!

Бігом! Я зачекаю.

Я хочу пояснити чому мені до вподоби саме так звані «занудні» программісти. Уявіть собі, що ви працюєте у команді, загрузли по вуха у черговому коді, аж раптом хтось підходить до вашого стола із чашкою кави в руці й починає виливати на вас потік припущень стосовно того, що якби ти використовував багатопоточну COM середу, то твоя програма була би на 34% зграбнішою. Крім того, це навіть не складно, бо він вже написав пакет шаблонів і вам треба лише дописати множинне наслідування від його 17-ти шаблонів, в середньому із 4-ма параметрами кожен, а вам залишається тільки написати якесь там тіло функції. Це всього лише гігантський перелік пунктів множинного наслідування від різних класів і ось, елементарно, багатопоточна COM. Тут ви вже просто не витримуєте, голова йде обертом, ви не маєте й гадки про що цей балакун вам каже, але він просто так не піде. А навіть якщо й залишить вас у спокої, він повернеться до себе й писатиме все більше й більше нових класів на основі самих лише множинних наслідувань від шаблонів взагалі без усіляких тіл функцій, а потім коли у нього все обламається, вночі ви отримаєте від нього повідомлення, що вам неодмінно слід прибігти до офісу та все налагодити, бо він зараз зайнятий і не може цим займатись.

А той самий занудний програміст у цьому випадку не посоромиться вчасно сказати: «множинне наслідування – це дурниці. Досить вже. Зупинись».

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

Ось що Завінські каже про Netscape: «Ми змогли вчасно презентувати наші розробки завдяки таким рішенням, як відмова від C++ та потоків».

Пізніше він написав поштову програму для Netscape, але команда розробників, яка відповідала саме за відображення повідомлення на екрані, так і не надіслала свою частину роботи. «В центрі монітора був лише великий пустий прямокутник, де міг відобразитись тільки простий текст. А вони ж бо намагалися виглядати такими розумниками, хотіли все зробити через DOM/DTD. «Все, що нам треба, це лишень додати ще один рівень абстракції тут, а також делегувати прототип цього об’єкта. І певно що тоді літери мають з'явитися на екрані».

Тоді Пітер спитав Завінські: «Здається, що такі мудрування вас дуже дратуюсь, чи не так?»

«Ще б пак!», - відповів він. – «Хоч наприкінці дня, але відправте свою бісову частину коду! Мене, звичайно, просто надихає сама думка переписувати ваш код по сто разів, поки він не стане більш-менш прийнятним. Але не в цьому суть – ви тут не для того, щоб писати код, ви маєте створювати цілісну програму».

Мій герой!

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

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

Занудні програмісти крім того ще й дуже прагматичні. Завінські зробив популярним правило Річарда Габріеля, який стверджував, що Гірше є Кращим. Так 50%-во вірне рішення, яке більшість людей можуть собі дозволити насправді вирішує більше проблем та довше є конкурентним, ніж 99%-ве рішення, якого ніхто не має, адже ви й досі все вдосконалюєте його у своїй лабораторії. Доступність – це дуже важлива характеристика, яку повинна мати ваша розробка.

Такі програмісти добре розуміють, що навіть трохи ускладнена техніка написання коду просто підірве ваш проект. Вони намагаються уникнути C++, множинного наслідування, багатопоточності, COM, CORBA та інших технологій, які цілком виправдані та обґрунтовані, якщо довго й наполегливо їх обмірковувати, але, якщо чесно, занадто складні для звичайного людського розуму.

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

Єдина річ, яку ви повинні мати на увазі, це те, що такі програмісти у світі звичайних смертних сприймаються як і гарненькі хлопці… ті молодики, від яких перехоплює подих, навіть коли вони встають вранці і не голячись, не розчісуючи волосся та не чистячи зуби сідають у метро у вчорашньому одязі і все одно виглядають чудово, бо такі вже вони є. Ви, мій друже, не можете вийти на вулицю не причесавшись. Бо налякаєте дітей. Бо ви не такий красунчик. Такі програмісти повинні мати великий талант, щоб гідно проявляти свою незвичність. Їм треба надзвичайно добре писати коди, тоді ми пробачимо, що вони ніколи не пишуть модульних тестувань або що вони об'єднують за домопогою xor вказівники "next" та "prev" в одну змiнну типу DWORD щоб зберегти 32 бiта. Бо вони досить кмітливі, щоб це було їм до снаги.

Ви ще не придбали Coders at Work? Мерщій! Я ж розповів вам лише про першу главу!

Personal tools