Переклад Програмування
Програмування - відстій
Ті з моїх друзів, кому по роботі доводиться піднімати речі важче, ніж ноутбук і частіше, ніж двічі на тиждень, якось користувалися нагодою і вставляли в розмову щось на кшталт: «Бро (це обов'язково починалося з „Бро“), ти не напружуєшся на роботі. Ось я щойно відпрацював 4700 годин на тиждень, копаючи викруткою тунель під Мордором»
У чомусь вони мають рацію. Мордор - відстій, а щоб копати тунель, потрібно, очевидно, набагато більше фізичних зусиль, ніж натискати на клавіші. Звичайно, якщо ти не мураха. Але, на користь дискусії, давайте зійдемося на тому, що стрес і безумство — не дуже корисні речі, окей? Чудово! Ласкаво просимо до програмування.
Усі команди програмістів створені психами та складаються з психов
Уявіть, що ви приєдналися до команди інженерів. Вас переповнюють нові ідеї, ви тільки-но закінчили коледж, і світ для вас складений з чистих прекрасних речей, досконалих у своїй гармонії мети, економії та сили. Ви починаєте з того, що зустрічаєтеся з Мері, керівником проекту будівництва мосту в одному мегаполісі. Мері знайомить вас з Фредом, але тільки після того, як ви пройдете п'ятнадцять перевірок безпеки, які встановив Дейв, тому що у Дейва одного разу стягли светр зі столу, і тому «Більше Ніколи». Фред працює тільки з деревом, тому ви відразу цікавитеся, що саме робить Фред на проекті. Адже в годину пік цим мостом через 70-метрову прірву над річкою, що вирує, нестиметься трафік, набитий машинами, набитими смертними людьми. — Не турбуйся, — каже Мері, — Фред працюватиме над пішохідними доріжками. - Якими доріжками? - Ну, просто Фред зробив гарну презентацію на тему, навіщо потрібні доріжки. І, крім того, вонидодадуть естетики на вигляд. Само собою, вони будуть зроблені без поручнів, бо у нас діє суворе правило «ніяких поручнів», яке ввів Філ, причому Філ навіть не інженер. Ніхто взагалі не впевнений, що робить Філ, але його діяльність явно сповнена синергії і якось пов'язана з вищим керівництвом, з яким ніхто з інженерів не хоче зв'язуватися. Тож нехай уже Філ робить, що хоче. Сара тим часом знайшла кілька інноваційних технологій дорожніх покриттів і вже глибоко впровадила їх у проект мосту, тому тобі доведеться враховувати кожну з них, адже вони всі мають різні вимоги до підтримки та безпеки. Том і Гаррі працюють разом уже багато років, правда, у них не припиняється суперечка про те, яка система заходів краща — метрична чи британська. Суперечка дозволяється за принципом «хто до чого дістанеться першим». Це вже настільки дістало всіх тих, хто насправді збирає конструкцію, що вони плюнули на все і за допомогою кувалди, напилка та зварювального апарату підганяють ті деталі, які хоч якось підходять. Крім того, за проектом це має бути вантовий міст, але ніхто до кінця не розуміє, як будувати вантові мости, тому ми зробили його наполовину, а потім підперли колонами, щоб він не впав. Але кабелі підвіски все ж таки залишили, бо вони підтримують якісь частини мосту. Ніхто точно не знає, які саме, але точно впевнені, що вони дуже важливі.
Після того, як ви з усіма познайомилися, вам пропонують внести свої власні ідеї. Але у вас їх немає, тому що ви аерокосмічний інженер і гадки не маєте, як будувати мости.
Чи поїдете ви таким мостом? Ні. Якщо його якось збудують, то всіх, хто мав до нього відношення, публічно страчують. Тим не менш, якась варіація цього хаосу створила все до єдиної програми, з якими ви колисьабо працювали — банківський софт, вебсайти, і навіть ту програму, яка повсюдно використовується, яка мала захищати інформацію в інтернеті, але не захистила.
Будь-який код – поганий
Коли нікого немає вдома, всі програмісти вимикають світло, наливають склянку віскі, включають у колонках легку німецьку електронну музику і відкривають файл на своєму комп'ютері. Кожен програміст має свій файл. Хтось писав його сам, хтось знайшов його та зрозумів, що його треба зберегти. Вони пробігаються поглядом по рядках коду, і від їхньої бездоганної краси у них навертаються сльози на очі. А потім вони ридають гіркими сльозами, згадуючи всі інші файли і розуміючи той неминучий крах, який чекає на все хороше і правильне в цьому світі.
Цей файл – це Хороший Код. Він містить осмислені та однакові імена змінних та функцій. Він лаконічний. Він робить нічого очевидно дурного. Йому ніколи не доводилося жити у дикій природі чи відповідати перед відділом продажу. Він виконує одне просте чітке завдання. І він робить її добре. Він був написаний однією людиною, і її ніколи не чіпав ніхто інший. Він читається, наче поезія когось, кому за тридцять.
Всі програмісти починають з ідеальної сніжинки на кшталт цієї. Потім у п'ятницю їм кажуть, що треба зробити шістсот сніжинок до наступного вівторка, тому вони скорочують трохи тут і, можливо, копіюють кілька сніжинок там, намагаючись поєднати їх разом, або просять колегу опрацювати над тією, що чомусь тане. І потім сніжинки всіх програмістів збирають разом і впихають у якусь незрозумілу форму, і хтось кладе на це все картину Пікассо, тому що сніжинки просякнуті котячою сечею, і ніхто не хоче бачити, як вони тануть у світлі дня. А через тиждень кожен бере в руки лопату і накидає більшеснігу, щоб Пікассо остаточно не впав.
Є одна теорія, яка стверджує, що це все можна вилікувати, якщо дотримуватися стандартів. Проблема в тому, що «стандартів» значно більше, ніж речей, які вміє робити комп'ютер. При цьому кожен стандарт по-різному вдосконалюють та підганяють під особисті потреби ті люди, які його пишуть. Тож немає жодної програми, яка потрапила б у реальний світ, не роблячи одні й ті самі речі за допомогою кількох десятків різних, навіть не схожих між собою, способів.
Перші кілька тижнів будь-якої роботи йдуть на те, щоб зрозуміти, як ця програма працює, навіть якщо ви знайомі абсолютно з кожною мовою, фреймворком та стандартом, який там використовується. Тому що стандарти це єдинороги.
Темрява буде завжди
У дитинстві в моїй спальні була комора. Він мав якусь дивну форму. З першого погляду все здавалося нормальним, але коли ти заходив до нього у своїх справах, ти помічав, що у стіні праворуч є альків, який можна використовувати як маленьку полицю. Потім ти вдивлявся вглиб і помічав, що від задньої стінки алькова йде відгалуження, створюючи прохід в абсолютну порожнечу, куди не проникав жоден промінь світла. Ти миттєво впізнавав її - це те місце, куди відступають всі ті голодні монстри, яких ти щоночі відганяєш ліхтариками і плюшевими іграшками.
Ось і є вивчення програмування. Ти вивчаєш корисні інструменти, потім дивишся навколо і бачиш поряд якісь нові корисні інструменти, і вони показують тобі ту бездонну прірву жаху, яка завжди буде поряд із твоїм ліжком.
Скажімо, ви звичайний веб-розробник. Ви знаєте десяток мов програмування, купу корисних бібліотек, стандартів, протоколів, чого ще там. Вам все одно мінімум разівна тиждень потрібно вивчати щось нове. При цьому вам треба не забувати перевіряти ту сотню речей, що ви вже знаєте. Раптом там щось оновилося чи зламалося. І переконатися, що вони все ще працюють разом, і що ніхто не полагодив той баг в одній з них, який ви використовували, щоб зробити щось, що ви вважали кльовим одного разу на вихідних, будучи п'яними вщент. Усі оновили? Чудово! І тут раптово все ламається.
- Що за нафіг? - Вимовляєте ви вголос, і починаєте шукати проблему. Ви виявляєте, що колись давно якийсь ідіот вирішив, що, оскільки інший ідіот вирішив, що 1/0 має дорівнювати нескінченності, то він може використовувати це як скорочення для терміна «Безкінечність» і спростити свій код. Потім прийшов не-ідіот і справедливо вирішив, що це якось по-ідіотськи, — про що мав подумати початковий ідіот, — але, оскільки той не подумав, не-ідіот вирішив стати цапом і змінив поведінку на критичну помилку у своєму новий компілятор. Потім він вирішив, що нікому не розповість, що це була помилка (він же козел), і тепер усі ваші сніжинки пахнуть сечею, а ви навіть не можете знайти кота.
Ви експерт у всіх цих технологіях, і це чудово. Завдяки цьому професіоналізму вам потрібно витратити лише шість годин, щоб розібратися, що пішло не так, а не втратити роботу взагалі. У вас тепер є ще один маленький факт і ви сплетете його з мільйонами інших маленьких фактів. І всі вам потрібно пам'ятати, бо майже всі програми, від яких ви залежите, були написані ідіотами і козлами.
І це тільки ваша специфічна сфера роботи, і вона є настільки малою частиною всіх фактів у комп'ютерних науках, що можна вважати ви не знаєте взагалі нічого. Немає жодної людини в усьому світі, здатної пояснити, як все працює у вашому макбуку,купленому п'ять років тому. Чому ми постійно просимо вас вимкнути і включити його знову? Тому що ми поняття не маємо, що пошло не так, і набагато простіше покласти комп'ютер у кому і дати бригаді вбудованих автоматичних лікарів розібратися замість нас. Єдина причина, чому комп'ютери програмістів працюють краще, ніж комп'ютери не-програмістів - це тому, що програмісти знають, що комп'ютери - це психовані маленькі діти з нестачею імунітету, і ми не б'ємо їх, коли вони погано поводяться.
Купа роботи зроблена в інтернеті, але інтернет це те ще пекло.
Пам'ятаєте той фрагмент про людей та поганий код? Інтернет — це те саме, тільки в мільярд разів гірше. Вебсайти (які по суті — розфуфірені візки для покупок із максимум трьома динамічними сторінками) підтримуються командами людей цілодобово, бо правда в тому, що щось ламається завжди, скрізь і для всіх. Прямо зараз якийсь працівник Фейсбука отримує десятки тисяч повідомлень про помилки і, висунувши мову, намагається виправити проблему раніше, ніж вся система відлетить до тартарарів. В офісі Гугла сидить команда, яка не спала три дні. Десь програмістка баз даних сидить в оточенні порожніх банок Маунтін-Дью, а її чоловік думає, що вона вже померла. І якщо ці люди зупиняться, світ згорить у вогні. Більшість людей поняття не мають, чим зайняті системні адміністратори, але повірте мені, якщо вони все вирішать зробити перерву на обід в один і той же час, то вони навіть не встигнуть дійти до піцерії, а у вас уже закінчаться патрони, щоб відстрілюватися від банд бродячих мутантів, що полюють за вашими консервами.
В інтернеті звичайна справа сказати: «Дивися, ця штука працює. Іноді. Якщо правильно використовувати технологію». Фігаку! - Тепер це частина інтернету. Хто завгодно з парою сотень баксів укишені і комп'ютером може стягнути шматочок інтернету, запхнути в нього як завгодно кошмарні фрагменти коду і потім прикріпити свій маленький шматочок до купки великих шматків, і все стане ще гірше. Навіть хороші програмісти забивають на читання таємничих специфікацій, бо людей, які їх написали, найняли, щоб створювати єдинорогів. Так що кожен проводить половину часу, борючись із фактом, що ніщо ні з чим не сумісне або взагалі не має сенсу і може зламатися будь-якої миті, і ми просто намагаємося прикрити це і сподіваємося, що ніхто не помітить.
Це відбувається не через те, що нам пофіг, і ми не намагаємося це зупинити, а через те, що все вже давно зламалося, бо хорошого коду ніде немає, і всі намагаються підтримувати на плаву те, що є. Якщо ви працюєте в інтернеті, то в цьому і полягає ваша робота: сподіватися, що остання штука, яку ви написали, досить стабільна, щоб вижити протягом кількох годин, і ви встигнете повечеряти і трохи поспати.
Ми не психи за природою, але ми збожеволіли в процесі
Смішно так? А як щодо такого діалогу:
- Вона називається arrayReverse? — s/camel/_/ — Кльово, дякую.
Ну що, той хлопець допоміг? Ну, той, який із «camel»? Це схоже на осмислену відповідь? Ні? Чудово. Принаймні ви можете знайти Господа. Ви ще не провели настільки багато часу, читаючи код, що почали говорити. Мозок людини не особливо призначений навіть для базової логіки, а тут вся кар'єра складається з того, щоб працювати з дуже складною логікою. Вам потрібно розмотувати величезні ланцюжки абстрактних подій та вимог, щоб виявити в кінці пропущену кому. Після цілого робочого дня ви приходите у стан легкої афазії – це коли видивіться на обличчя людей, які розмовляють, і не розумієте, закінчили вони чи ні, тому що не бачите крапки з комою. Ви поринаєте у світ абсолютної безглуздості, де єдине, що має значення — це коли короткі набори чисел входять до гігантського лабіринту символів, а з іншого кінця лабіринту виходять інші набори чисел чи фотографія кошеня.
Деструктивне впливом геть мозок можна наочно проілюструвати комп'ютерними мовами, які вигадують люди. Ось програма:
Вона робить абсолютно те саме, що і ця програма:
І ця програма:
І колись давно хтось написав мову програмування, щоб тепер хтось інший зміг написати таке:
Ця програма виграла конкурс, бо, природно, вона його виграла. Чи хотіли б ви жити в такому світі? Ні. У цьому світі ви можете викурювати по пачці на день, і ніхто навіть не здивується. «Так, він викурює по пачці на день, і що? Є хтось, хто не викурює? Кожен програміст прокидається одного ранку і перед тим, як повністю прийти до тями, бачить весь світ і всі зв'язки всередині нього у вигляді фрагментів коду. І вони діляться цими оповіданнями один з одним, начебто немає нічого дивного в тому, щоб випробовувати замість снів кислотні парафії. У цьому світі люди ухиляються від сексу, щоб написати мову програмування для орангутанів. Всі програмісти змушують свій мозок робити речі, для яких мозок ніколи не був призначений у ситуаціях, де вони не можуть нічого покращити. Десять-п'ятнадцять годин на день, п'ять-сім днів на тиждень. І кожен із них повільно злітає з котушок.
Тож ні, від мене не вимагають піднімати об'єкти вагою двадцять кіло. Я змінив це на можливість стригти волосся у Сатани в паху, поки він обідає вмістом мого черепа. І все це заради того, щоб парашматочків інтернету пропрацювали ще кілька днів.