Моє розчарування в технологіях
Моє розчарування в технологіях можна описати фразою “Електроніка не працює, а якщо вона працює - то це диво”. Те ж стосується програмного забезпечення, або “софта”. Раніше мене дуже дратувало те, що в відеоконференціях не включається відео, що проектор не підключається до комп’ютера, форма реєстрації на сайті гарно виглядає, але не реєструє, а Java хоч і “Write once, run everywhere”, але насправді не зовсім “once” і не зовсім “everywhere”. Потім я зрозумів, що це - норма. Сучасні системи дуже складні, чи це стосується заліза, чи програм. Складність неминуче призводить до збоїв роботи, оскільки передбачити усі фактори неможливо, навіть якщо намагатися зробити все ідеально. А іноді оскільки деякі речі навіть не намагаються зробити ідеально, нема чого дивуватися, що вони працюють не завжди.
Хорошою ілюстрацією складнощів розробки програмного забезпечення є той факт, що імплементація алгоритму бінарного пошуку - одного з найпростіших алгоритмів, який вчать в університетах мало не першим - містила у собі помилку впродовж багатьох років і в мові Java цю помилку пофіксили мало не через 10 років. Ще одним прикладом є heartbleed - помилка в мегапопулярній бібліотеці OpenSSL. Цей приклад можливо не такий вдалий, оскільки OpenSSL - це явно складніша система, але помилка, яку там допустили, є досить типовою, як її обходити вивчають в університетах. Бібліотека має відкритий код - побачити її може кожен бажаючий, і тим не менше тривало два роки, доки хтось не зауважив проблеми.
Прикладом поширених технологій, які навіть не намагалися спроектувати ідеально є JavaScript і PHP. Першу мову спроектували лише за 10 днів і ніхто не думав що через двадцять років це буде одна з найпопулярніших мов програмування. PHP ж задумувалася як мова для спрощення написання однієї єдиної домашньої сторінки. З однієї сторони не дивно що люди на них нарікали - в них дійсно було багато проблем. Але з другої сторони - чого ж бідкатися? Вони не були розраховані на таке активне використання.
А дещо навіть неможливо спроектувати ідеально - треба йти на поступки. Так само як неможливо жити в особняку за містом, але щоб близько до центру, чи як купити компактну машину з вантажопідйомністю 20 тон зі швидкістю формули 1. В світі програмування частою дилемою є швидкодія проти об’єму пам’яті. Іншими словами - програма може працювати швидко, але їсти багато пам’яті, або споживати мало пам’яті, але працювати повільно. В залежності від того, що для людини важливіше, вона розчарується, або ні. Іншою типовою проблемою є NP-складність - деякі задачі просто неможливо вирішити і їх вирішують приблизно (наприклад задачу комівояжера).
А є ще маркетинг - той хто має справу з бізнесом - розуміє. Time to market значно важливіший, за ідеально сплановану систему. Новий функціонал важливіший за стабільність старих фіч. А ось ці помилки дуже дорого виправляти, давайте краще їх запхаємо в “known issues”. І еволюція робить своє, такі технології поширюються світом.
Складність технологій, вимоги маркетингу і бізнесу, що суперечать глузду програміста, використання технологій не за їх прямим призначенням, поступки і неможливість рішення декотрих проблем, та й людський фактор врешті решт - враховуючи це все, я, чесно кажучи, взагалі дивуюся, що навколо щось працює. Це майже магія.