Колись я ходив на курси з патернів програмування. Вів їх такий прикольний дядько з багатим досвідом роботи консультантом. Найцінніше було не самі патерни (про які легко можна прочитати будь-де), а приклади з його досвіду.
Одна з таких історій мені найбільше запам’яталася. Розкажу як пам’ятаю…
Сам цей лектор є великим фанатом космічних технологій, польотів і усього іншого. Але найбільший його інтерес це місячна програма. Він зустрічався особисто з багатьма її учасниками, причому не тільки з вченими та інженерами, але і з людьми які приймали участь у виготовленні і збірці залізяк, тренуваннях, транспортуванні, тощо.
Однією з найскладніших проблем була проблема з постійним коригуванням курсу ракети. Звісно приходили радіосигнали з Землі, але йшли вони повільно і повність покластися на них було не можна.
Значить треба розраховувати положення корабля на самому кораблі, а сигнали з Землі приймати лише для уточнення.
Комп’ютери ж в ті часи були розміром з невеличкий будинок, причому обчислювальні потужності їхні були в сотні разів менші ніж у сучасних недорогих телефонів.
І от університет що розробляв комп’ютер для місячної програми створив невеличке диво – комп’ютер розміром з пару шлакоблочин. Такого маленького комп’ютера в історії на той час ще не було. Це була технічна вершина.
А для того щоб результатами розрахунків можна було користувався треба щоб програма обчислювала нове положення тричі на секунду. Один раз з цих трьох допускалося не встигнути розрахувати.
Проблема була в тому що комп’ютер був хоч і крихітний, але і повільний – програма встигала розрахувати лише одне значення за секунду.
І от дуже тривалий час талановиті інженери, програмісти і математики билися над цією проблемою. І все безрезультатно.
А тут один студент зацікавився проблемою і з’ясував що розрахунки дійсно важкуваті – в них враховувалося що Земля обертається навколо Сонця, Сонце рухається, Місяць обертається навколо Землі… І ледь не вплив Юпітера і Урана враховувся. Студент почав задавати питання – а чи так це важливо що Земля рухається навколо Сонця, і чи не достатньо враховувати лише рух Місяця навколо Землі. На це йому спочатку пояснювали що зараз не кам’яний вік і плотмеєвська модель застаріла і не точна. Спочатку пояснювали, потім і слухати перестали.
Студент, у відчаю від того що не може донести свою думку світилам самостійно у вільний час переписав програму зі спрощеною моделлю (це рівнозначно майже як зараз гугл самому переписати) і продемонстрував що вона видає 3 результати за секунду і точність результатів до якогось там знаку така сама.
Після прискіпливої перевірки кораблі літали на Місяць з програмою яку було написано так наче Земля є нерухомим центром Всесвіту навколо якого обертається Місяць (і Сонце).
Лектор приводив цю історію як приклад того що хоча програмна модель повинна відображати об’єкти реального світу та їх співвідношення, іноді треба робити спрощення які не відповідають реальному світу (Земля не центр Всесвіту і обертається разом з Місяцем навколо Сонця), але значно спрощують і реалізацію і архітектуру.
Але мені здається тут є це один важливий патерн. І полягає він у тому що навіть якщо ви знаєте що праві іноді щоб довести свою правоту треба докласти при всій очевидності непропорційно багато зусиль (читай зробити все самому). І виникає така ситуація тоді коли ви знаходитеся далеко від вершини ієрархії в плані позиції, досвіду, звань і нагород. І будьте ви очевидно праві вас не почують і не помітять просто через те що від вас не очікують притомних рішень та ідей такого рівня.