?

Log in

No account? Create an account
Бог как программист - Книга бревна [entries|archive|friends|userinfo]
Книга бревна

[ картинки | галерея ]

Бог как программист [Jun. 11th, 2014|12:09 am]
Книга бревна
[dow |16,945.92]


Эволюционизм и креационизм в голове программиста, да думаю и любого другого инженера (не путать с изобретателем) сочетаются легко.

С одной стороны каждый новый вид суть некий апгрейд предыдущего (эволюционизм), с другой стороны изменения дискретны и осмысленны - или маленькую новую фичу прикрутят, или архитектуру икрометания коренным образом рефакторят, всё одно требуется инженерное вмешательство, некий великий инженер. В нашем случае инженер-программист, ведь изменения нужно запрограммировать в ДНК. При этом по всем законам программирования от старой версии должны оставаться разные рудименты и атавизмы, неиспользуемые куски кода и прочий мусор. И да, они остаются, мы их наблюдаем.

Ну, понятно что этот бог отличается от всевеликого, всеведающего и всеблагого сотворившего мир одним махом. Так ... демиург какой-то. Например, у него в творениях постоянно вылезают баги, приходится их патчить в следующих версиях. Некоторые пропатчить не успевают и несчастные смилодоны вымирают от остеохандроза в страшных мучениях. Впрочем, нишевые виды можно и не патчтить, а списывать в legacy. И да, мы видим - legacy крокодилы живут себе в неизменном виде уже 80 миллионов лет и легко проживут ещё столько же.

Однако, если мы записали бога в программисты, то хотелось бы определиться со стилем его программирования. Можно ли чему-то здесь научится? Просмотр "Доктора Хауса" наглядно демонстрирует что божественные программы написаны спагетти-кодом. По симптомам совершенно неочевидно, какой именно участок кода сбоит. Все органы и системы взаимосвязаны, неисправность в одном месте порождает каскад отказов в других, порою самых неожиданных. Картина знакомая любому кто работал со старыми системами (большинство систем накапливая изменения гомогенизируются в Big Ball of Mud).

Такой стиль программирования обычно приводят в пример как "антипаттерн".

Но я бы не стал торопиться осуждать бога. Подумайте - в геноме человека всего-навсего 3 с хвостиком миллиарда пар оснований. Т.е. размер кода 6,5 гигабит, чуть более 800 мегабайт. Меньше чем Microsoft Office, а запрограммирован целый человек. Такое на языке высокого уровня не создашь, только ассемблер, только хардкор.

Стиль программирования бога, это стиль хакера-системщика высокого полёта. Есть конечно там и сопли, и спагетти (см. картинку) и мусор. Но вспомните - этому коду много сотен миллионов лет и бог знает сколько версий.
LinkReply

Comments:
[User Picture]From: apocalapse
2014-06-11 04:18 am (UTC)
а внешний код в этих рассуждениях не учитывается кагбе? здесь 800 мегабайт, а там...
(Reply) (Thread)
[User Picture]From: fat_yankey
2014-06-11 04:26 am (UTC)
Внешний код?
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: hemdall
2014-06-11 04:22 am (UTC)
=) Очень древний боян - читал аналогичные рассуждения в бумажном журнале в году этак 88-89.
Но смешно, да.

UDP. Да и еще - ДНК не программный код в буквальном виде, кодирование "межклеточного взаимодействия".
То есть в программном смысле - это программа отношений объектов дающая в итоге чрезвычайно гибкую само-программирующуюся и саморазвивающуюся уникальную систему.


Edited at 2014-06-11 04:26 am (UTC)
(Reply) (Thread)
[User Picture]From: fat_yankey
2014-06-11 04:26 am (UTC)
Если в 88-89, то это уже не боян, а ретро или винтаж.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: Joseph Hindin
2014-06-11 04:30 am (UTC)
Можно еще и так (http://trurle.livejournal.com/919567.html):
--
Приснился сон, в котором разъяснялось что мироздание было создано создателем на некой вычислительной основе, вроде как в Матрице; что всякого рода сатаны и демоны это вирусного характера искусственные интеллекты, научившиеся подключаться напрямую к коду мироздания через разные эксплойты; что создатель, пытаясь вычистить мироздание от недружественных искинов, неоднократно переустанавливал систему с восстановлением данных из бэкапа. Чем и объясняется, в частности, физическая картина мира в несколько миллиардов лет и библейская датировка в 5770 лет.
Что-то там еще было насчет поиска бога путем программирования и уподобление создателю путем программирования же, подобно тому как алхимики, создавая гомунюкулосов, уподоблялись демиургу, но совсем уже смутное.
(Reply) (Thread)
[User Picture]From: kouzdra
2014-06-11 04:30 am (UTC)
Просмотр "Доктора Хауса" наглядно демонстрирует что божественные программы написаны спагетти-кодом. По симптомам совершенно неочевидно, какой именно участок кода сбоит. Все органы и системы взаимосвязаны, неисправность в одном месте порождает каскад отказов в других, порою самых неожиданных

Так этот ровно эффект будет от просмотра любого бинарника. Cколь угодно продуманного в исходнике. Более того, то что кажется сбоем может оказаться фичей, "исправление" которой сломает систему.

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

C другой стороны - если ее бинарник прогнать через декомпилятор - то скорее всего получится довольно внятный и неплохо структурированный код, в котором он разобраться сможет - но это будет совсем другой код.
(Reply) (Thread)
[User Picture]From: aristarh1970
2014-07-12 08:14 pm (UTC)

Программисты 70-х...

Программисты 70-х (в среднем по больнице, за исключением "девочек-программисток") гораздо больше знали о Лиспе и поэтому имели гораздо больше шнасов быстрее разобраться в голимой функциональщине, чем нынешние.
Да и сам Хаскел - из семейства ML-языков, зародившегося в начале 1970-х...
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: idealist_t
2014-06-11 05:33 am (UTC)
Забавно. Если принять гомогенизацию как постоянное свойство, то можно говорить о состоянии Рая как о строго гетерогенной системе. Грех тогда - это некоторая степень гомогенизации.
Однако по христианской догматике Бог не вмешивается в материальные процессы кроме как в символические или сугубо утилитарные. Так что эволюция - это дело рук сторонних разработчиков, которые ставили на код заплаты, исходя из своих сиюминутных интересов.
(Reply) (Thread)
[User Picture]From: 1greywind
2014-06-11 06:19 am (UTC)
>>каждый новый вид суть некий апгрейд предыдущего (эволюционизм)

С чего это? Эволюция - это не "прогресс". Эволюция - это результат внешнего давления на случайно меняющуюся систему. Если более "примитивный" вид лучше удовлетворяет условиям отбора - он и будет "следующим шагом".

Сравнивать эволюцию с программированием - очень плохая идея. Это работу клеточного аппарата по декодированию ДНК и синтезу белков можно сравнивать с работой машины Тьюринга. А эволюция - это сугубо общее явление. Программирование не имеет никакого влияния на проектирование процессоров. Это бесконечные слои абстракции между пилообразными импульсами и потенциалами на транзисторных структурах в кристалле кремния создают иллюзию, что программирование - это чета важное. А потом оказывается что у процессора реализована аппаратная виртуализация, и программист всю жизнь просто занимался поддержкой костылей для обратной совместимости.
(Reply) (Thread)
[User Picture]From: fat_yankey
2014-06-11 02:18 pm (UTC)
> Эволюция - это не "прогресс"

Я нигде не утверждал что эволюция это "прогресс".

> Эволюция - это результат внешнего давления на случайно меняющуюся систему

Это вы описываете механизм эволюции (ну, доминирующую теорию как он устроен). Но не определяете феномен эволюции. Т.е. спорите с чем-то другим.
(Reply) (Parent) (Thread) (Expand)
(Deleted comment)
[User Picture]From: ogn_slon
2014-06-11 12:22 pm (UTC)
Между прочим, по характеру багов в работе программы можно попытаться что-то узнать о самой программе, даже не имея доступа к коду. И действительно, пару лет назад была предложена идея, как по характеру "багов" в экспериментальных данных о космических лучах можно попытаться выяснить, не является ли наша вселенная результатом численной симуляции на трехмерной решетке согласно современной методике подобных вычислений в квантовой хромодинамике. Это такая как бы крэйзи айдиа, но высказана вполне серьезно, и вроде бы ни к чему не придерешься, на самом деле. Стоит попытаться! :)

Статья:
http://arxiv.org/abs/1210.1847

Краткая популяризация:
http://www.technologyreview.com/view/429561/the-measurement-that-would-reveal-the-universe-as-a-computer-simulation/
(Reply) (Thread)
From: (Anonymous)
2014-06-11 03:24 pm (UTC)
Кроме апгрейдов и осмысленных изменений вроде как к лучшему время от времени происходят малопонятные с точки зрения идеи "эволюция=прогресс" дегенерации (утрата отдельных органов и целых систем у шибко специализировавшихся, с последующим их списанием в нишу или насовсем), повороты не туда (в фатальный гигантизм или такую же карликовость) и внезапные закрытия перспективных казалось бы проектов (звероящеры, птерозавры, трилобиты какие).
(Reply) (Thread)
[User Picture]From: belousov_ilia
2014-06-17 12:49 pm (UTC)
"изменения дискретны и осмысленны"
Неверный тезис. Ни то, ни другое. Изменения случайны, просто остаётся тот, чьи изменения лучше приспособлены к внешней среде, а миллионы особей с другими отклонениями просто не выживают. И изменения эти нарастают не скачком.
(Reply) (Thread)
[User Picture]From: bigdrum
2014-06-18 08:12 pm (UTC)
На ассемблере такого не сделаешь. А вот на Форте - залоба.
(Reply) (Thread)
[User Picture]From: aristarh1970
2014-07-12 08:08 pm (UTC)

Замечу, что у вас неверное представление о программиро

Замечу, что у вас неверное представление о программировании.
Метафорические "800 мегабайт исполняемого кода" не создать, используя "только ассемблер, только хард кор".
Большие системы создаются именно средствами высокого уровня.
Языки программирования при этом далеко не все, но они - высокого уровня.
Ассемблерные куски составляют ничтожно малую долю.

Кроме того, "хакер-системщик" (даже самого выскокого полета) никаких систем не создает.
Он их ковыряет/настраивает/ломает/правит/сопроваождарет, но не создает.
А если создает или участвует в создании, то роль его кардинально меняется и все его "хакерские черты" отходят далеко-далеко.
Ибо они (хекерские черты) только мешают созданию СИСТЕМ.
Вообще, вы попали в ловушку неверного толкования слова система/системный.
В терминах "системный программист" и "системный аналитик" - слово "системный" употребляется в диаметрально противоположных смыслаx.

Системный программист (или хакер-системщик) это из профессионального жргона, обозначает человека, работающего преимущественно на "низком уровне" (= близком к железу).
Как вы понимаете, с этого уровня реальной СИСТЕМЫ не видно, иббо не нужно.
А хакерство это вообще "системный антипаттерн" и подавляющее большинство хакеров - весьма средненькие и как программисты, и как аналитики.

(Это я вам как живой программер с 29 летним стажем говорю).
(Reply) (Thread)
[User Picture]From: fat_yankey
2014-07-13 01:56 am (UTC)

Re: Замечу, что у вас неверное представление о программи

Как живой программер с 25-летним стажем - благодарю за науку.

Хе-хе.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: Yuri Pozdnyakov
2017-11-17 03:37 pm (UTC)
Программисты оказались невеждами.
(Reply) (Thread)