Делаем невидимый клей-код первоклассным

Делаемневидимыйклейкодпервоклассным

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

То же самое чувство не покидало меня с тех пор, как я начал писать программы. С одной стороны, есть магия, почти буквально: мы пишем какой-то текст (заклинания), а машина делает что-то в реальном мире. С другой стороны, кажется, слишком много работы, чтобы заставить машину делать что-то более сложное, чем:

10 ПЕЧАТЬ «Привет»

20 ПЕРЕЙТИ К 10

Почти как продевание нитки в иглу в боксерских перчатках. И это даже если мы будем осторожны, если мы избежим ненужной сложности.

И цифры, кажется, подтверждают это, Алан Кей упоминает офис Microsoft в нескольких сотнях миллионов строк кода. По моему личному опыту, клиент Wunderlist для iOS был не совсем 210 KLOC. Что касается последнего, я могу засвидетельствовать внимание, уделяемое командой , а не к ненужному раздуванию и даже активно его уменьшать. (Например, мы сократили наш основной код примерно на 200 KLOC, спасибо к некоторым архитектурным механизмам, таким как Комбинаторы памяти ). Я почти уверен, что я не единственный, у кого есть такой опыт.

шестиугольная архитектура позволил мне извлечь бизнес-логику в продукт, который я создаю, и в настоящее время это менее 5% всего кода

– 3. Несбалансированная жизнь (@infinitary) ноябрь 25 , 2017

Так зачем столько кода? В конце концов, Wunderlist был просто списком дел, хотя и действительно хорошим. Я не могу много сказать об Office, я не думаю, что кто-то может, потому что MLOC – это слишком много кода, чтобы его понять. Я думаю, что ответ таков:

Клей-код.

Это неприглядный, невидимый код, который соединяет две части программного обеспечения, гарантирует, что данные в местоположение A достигает местоположения B невредимым (из базы данных в пользовательский интерфейс, из пользовательского интерфейса в модель, из модели в серверную часть и так далее …). И, как и Темная Материя, она невидима и массивна .

Почему я говорю “невидимый”? В конце концов, код здесь, не так ли? Насколько я могу судить, есть несколько связанных причин:

  1. Код клея не важен. Здесь всего пара строк, и еще пара строк там … и скоро вы начнете говорить о настоящих MLOC!
  2. Мы не можем напрямую выразить клеевой код. Большинство наших языков – это то, что я называю «DSL для алгоритмов» (см. АЛГОЛ, Алгоритмический язык ), поэтому клей не может быть выражен намеренно, а только описанием алгоритмов реализации клея.

Вот почему это невидимо, а также отчасти поэтому оно массивно: неспособность выразить это напрямую означает, что мы не можем абстрагироваться и инкапсулировать это, мы продолжаем повторять небольшие вариации этого клея. Есть еще одна причина, по которой это массово:

  1. Клей квадратичный. Если у вас есть N функций, которые взаимодействуют друг с другом, у вас есть O (N²) кусочков клея, чтобы заставить их общаться друг с другом.

Этот последний пункт был довольно хорошо проиллюстрирован Кевином Гриром в видео, сравнивающем разработку Multics и Unix, с решающим пониманием поскольку вам нужно “программировать периметр, а не область”: