Serge Bobrovsky (sbobrovsky) wrote in metacode_ru,
Serge Bobrovsky
sbobrovsky
metacode_ru

Category:

Всегда существует маленькая разница, даже если мы не можем её увидеть

Как программировать in small в сто раз быстрее и как программировать in large в десять тысяч раз эффективнее.
Серебряные пули применительно к повседневным рабочим мэйнстримовским :) проектам
[компиляторы, вспомогательные скрипты, задачки на несколько тысяч строк императивного кода -- это тоже интересно, но довольно далеко от прикладных нужд].


Почему взяты такие порядки: 100 и 10000?

in small: Здесь исключительно кодирование. Исходим из классической производительности 10 операторов в час (пруф).
Один оператор -- пускай в среднем 30 символов. В час получается 300 символов. Средняя производительность автора технических текстов -- 3000 символов в час.
Вот первое ограничение: даже если думать со скоростью ввода текста, быстрее чем в 10 раз стандартным способом кодировать не получится. Однако один порядок тут вполне можно достичь за счет правильной организации рабочего процесса и, главное, способа мышления (от предельной сознательной концентрации внимания как левой крайности до глубоких трансовых состояний (типа автописьма) как правой крайности).

С учетом упомянутой производительности, за рабочий день программер реализует около одной функциональной точки фактически с помощью трех типов операторов (присваивание, условие, цикл). Производительность типовых программистов в типовых софт-компаниях различается, согласно Carnegie Mellon Software Engineering Institute, в те же десять раз. Но при этом скорость ввода кода у них фактически одинаковая, то есть более опытные кодировщики добиваются большей производительности за счет более эффективной реализации требований.
Это второе ограничение: программируя в императивном духе, больше чем в 10 раз выигрыша не добиться. Добивается же оно, например, стандартными методиками типа SEI PSP.
Но в итоге уже получаются искомые два порядка.

И это еще мы совсем не упоминали функциональное и метапрограммирование применительно к in small :)

in large: Здесь различия в эффективности реализации крупной системы бесконечны, причем чем крупнее система, тем компактнее можно ее спроектировать.
Например, Алан Кей сотоварищи реализовал систему эквивалентного функционального объема 20 миллионов строк кода (операционная система + прикладные офисные пакеты) в реальном объеме 20 тысяч строк кода (пруф). При этом он не слишком спешил, то есть фактор времени практически не учитывался, так как работа была исследовательско-экспериментальная. А если бы постарался, раз в десять (методами in small) точно смог бы ускориться.
Впрочем, тысячекратная эффективность тоже неплоха.

Моделирование, поиск и формализация лучших паттернов этих двух подходов и будет тематикой metacode_ru.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 7 comments