Мы должны знать, мы будем знать

Мой третий рассказ «Вновь жизнь»
horror
iodiot
 2001-a-space-odyssey
 
Почитать можно здесь.

Спасибо товарищу13x666 за правки и ценные указания.

Мой второй рассказ «Книжечка Далыгина»
horror
iodiot
black-hole

Почитать можно здесь.

Спасибо товарищу 13x666 за правки и ценные указания.

Мой первый рассказ «Когда появилась Кула»
horror
iodiot
apollo-11

Почитать можно здесь. Жанр — твердая научная фантастика, по крайней мере, мне хочется в это верить.

Спасибо двум человекам в лице mirikamoari miri_on_air 13x666 r0l за правки и ценные указания.

Курт Воннегут, как писатель
horror
iodiot
Я не люблю Курта Воннегута, как писателя, уже давно. Мою нелюбовь проследить вполне легко: она зародилась во время прочтения «Колыбели для кошки», слегка увяла с «Бойней номер V», но расцвела с «Сиренами Титана».

Вот что я вынес из трех романов, как читатель, соответственно:
  1. Дела, дела, дела.
  2. Но если я когда-нибудь эту книгу кончу, то даю вам честное слово, что никакой роли ни для Фрэнка Синатры, ни для Джона Уэйна в ней не будет.
  3. Ничего.
В последнем пункте располагается не цитата, а мое скромное мнение. Хотя слово «ничего» встречается в романе семьдесят девять раз. Посчитать это ничего мне не стоило, а вот лет пятьдесят назад столь точная статистика вызвала бы подозрение. Ведь тогда бы мне пришлось или внимательно читать, загибая пальцы по появлению каждого «ничего», или перечитывать уже невнимательно, опять же загибая пальцы. Вот наглядный пример чистой фантастики, а что разумеет под фантастикой Курт Воннегут мне совершенно непонятно.

Конечно, фантастика бывает разная. Как минимум можно выделить две категории: мягкая и твердая. Понятное дело, что книги Курта Воннегута не содержат в себе ничего твердого, режущего и колющего. Разумно заключить, что они мягкие, но как-бы ни так. Они вообще за гранью добра и зла, за гранью любой фантастики, которую мне приходилось читать. Можно сказать, что фантастика в книгах Курта Воннегута играет роль антуража, но даже антураж получается какой-то бутафорский, как обои в комнате с надписью «абстрактная мозаика».

Фантастика, как жанр художественной литературы, — это еще и тонкий инструмент по донесению мыслей и идей особого рода. Я, как читатель, предпочитаю фантастику другой литературе не потому что мне нравится повышенная плотность таких слов как «лазер» или «черная дыра» на страницу текста. Мне нравится читать об интересных допущениях и невообразимых следствиях. Это примерно как аксиомы и теоремы в математике. Курт Воннегут этого меня лишил. И вообще, по моему мнению, он поступил нечестно, решив оформить «Сирены Титана» как фантастическое произведение. Фантастика в данном случае играет роль пятой колонны.

Но Курт Воннегут пошел даже дальше. В фантастике он нашел отличную возможность из страницы в страницу выливать на меня, как читателя, бредовый поток сознания. В плохом смысле. Благодаря ему я ввел в свой лексикон новое слово «дышарик»: пилюля, которая позволяет дышать в бескислородной атмосфере, и ничего что атмосфера разрежена как физико-математические познания Курта Воннегута. В целом я узнал, что Марс отличное место для жизни, что в пещерах Меркурия обитают гармониумы, и что воздух Титана можно сравнить с воздухом, какой бывает на Земле весенним утром возле двери пекарни, выходящей на задний дворик. Главное лишь не угодить в хроносннкластический инфундибулум по пути.

Конечно, я не серьезен. Я понимаю, что подобные допущения имеют право на жизнь, и, по мнению Курта Воннегута, они формируют костяк книги. Мне лишь кажется, что между разумным и интересным допущением, и бредом малолетнего наркомана дегенерата, отравленного парами клея, Крут Воннегут отдаст предпочтение последнему.

Это все никоим образом не перечеркивает юмор и художественный стиль, которые присутствуют. К примеру:
Бобби Дентон нанизал всех своих слушателей, как на вертел, на свой пронзительный, горячий и полный любви взгляд и принялся поджаривать их целиком над раскаленными угольями их собственных прегрешении.
В десятимиллионном году, по словам Корадубьяна, произойдет грандиозная генеральная уборка. Все документы, относящиеся к периоду между смертью Христа и миллионным годом нашей эры, свалят в одну кучу и сожгут. Это придется сделать, сказал Корадубьян, потому что всякие музеи и архивы займут столько места, что людям буквально негде будет жить.
Неудивительно, что Курт Воннегут был знаком с Сергеем Довлатовым, который боготворил текст. Только Сергей Довлатов не злоупотреблял фантастикой. Проблема в том, что Курт Воннегут плохо описывает вещи, неподвластные непосредственному опыту. Взять тот же Марс. Когда я читал соответствующую главу, то практически не нашел ни одной ремарки, которая бы отличала Марс от той же Земли. Марс и Марс. Такое ощущение, что Курт Воннегут был умышленно скуп на детали, чтобы при случае заменять его на что-то другое. К примеру, на Калифорнию.

Image217

Кто-то может меня обвинить, что я не понял великий замысел книги. Честно скажу, я действительно его не понял или понял, но он показался мне не столь грандиозным как расстояние от Солнца до Бетельгейзе. Здесь уже сложно разобраться. Идея со всебезразличием господа бога, кажется, больше подходит рассказу, чем роману. Ее просто заживо погребли под толстым слоем букв, слов, предложений и абзацев. А из фантастики сделали надгробный камень.

И вообще я не сторонник того, что книга должна определяться присутствием или отсутствием великого замысла. Я, как атеист, вот верю в великое вселенское ничто, и вполне себе здорово поживаю. Чем книга лучше вселенной? Книга не пишется за один вечер в припадке развеселого настроения. Книга пишется днями и ночами. Писатель трансформирует весь возможный спектр настроений, эмоций, мыслей, переживаний в текст. Поэтому я, как читатель, в противовес многим другим отзывам и мнениям напишу: мне плевать на великий замысел этой книги.

Вы не любите математику? Тогда мы идем к вам
horror
iodiot
Среди самых страшных человеческих стереотипов особняком стоит следующий:

— Математика — это не для меня. Слишком сложно. С математикой у меня не сложилось как в школе, так и по жизни. Не понимаю и понимать не хочу. И зачем она вообще нужна? Я учил алгебру в школе и до сих пор жду, когда она мне пригодится.

Многие из вас слышали подобные заявления. И слышат. И услышат еще неоднократно. В такие моменты я медленно снимаю свои мнимые очки, слегка наклоняю голову, добротно мну переносицу. И вспоминаю свою унылую историю.

Я учился в обычной школе, с легким уклоном в английский язык. Математика меня никогда особо не интересовала и не трогала струн моей души. К ней я относился примерно так же, как обычный ребенок относится к религии: вроде как есть бог, нужно ходить в церковь. Только вроде как есть такой предмет, и нужно посещать уроки, соответственно. Это было тем удивительней, что наш классный руководитель и был преподавателем математики. Правда в историю он (она) вошел как обладатель очков с алмазными стеклами и титановыми дугами, потому что эти очки регулярно летали по классу согласно законам баллистики, но никогда не ломались. Еще я не любил геометрию.

Так бы все и было до скончания времен, если бы в один солнечный день не заболел наш любимый преподаватель сиречь классный руководитель. На замену ему поставили молодую и бойкую девушку, отличницу-выпускницу педагогического ВУЗа. Примерно в то же время я и получил нетипичную для себя двойку по геометрии, хотя очень старался и почти все решил в рамках контрольной. Тогда я задумался, может даже впервые в жизни. «Как это так? Почему? Как я здесь оказался и что я здесь делаю? Каково мое предназначение?» За последние вопросы не ручаюсь.

Я решил, что нужно что-то изменить и решил полюбить математику. Шекспировская история любви. Прошло немного времени, и я выправил оценки. Прошло много времени, и я перешел в физико-математическую школу. Там история повторилась: опять двойки, но насыщенные вечера дали о себе знать и в итоге за год-полтора мне удалось, как минимум, продвинуться вплотную к мат. ожиданию и даже больше.

to-old-for-math

Мораль басни. Я был и остаюсь человеком с абсолютно среднестатистическими интеллектуальными способностями. Это я осознавал и осознаю всю свою жизнь. Эти слова в том или ином виде будут на моем надгробном камне. Но мне это не помешало полюбить, как говорил Гаусс, царицу наук, его величество математику. И не просто полюбить, а научиться чуть лучше понимать бесконечную красоту греческой грамоты, добротно справленную символами UTF таблицы. И я твердо уверен, что любая вышеупомянутая отговорка — чушь собачья. Если вы не хотите понять математику, то это ваши проблемы, и они умрут вместе с вами. А вы в свою очередь лишитесь одного из самых больших (и бесплатных) удовольствий, изобретенных гением человека.

Я не голословен и уже даже успел назвать имя одного из ученых. Гаусс был выдающимся математиком. Про него ходит легенда, что уже в школьные годы он поразил преподавателя внезапным озарением. Тот предложил ученикам на время просуммировать ряд чисел:

1_2_3_4_5

Все дети уткнулись в листочки и начали скрупулёзно считать. Но Гаусс, не задумываясь, выпалил ответ: 55! Преподаватель сразу не поверил и заподозрил неладное. Гаусс же сказал в оправдание, что интуитивно добыл решение, с помощью формулы! «Какой еще формулы?»

sum

10_11_2

Для вывода формулы не нужно быть Гауссом. Выпишем оригинальный ряд, а под ним — этот же ряд, но в обратной последовательности. Легко заметить, что сумма любой вертикальной пары равняется 11. И это число мы суммируем 10 раз. Т.е. ответ равен «10 умножить на 11», но не забываем разделить на 2, так как мы просуммировали два раза один и тот же ряд:

1_2_3_4_5

10_9_8_7_6

Прекрасное и доступное озарение. Кто-то в свою защиту вспомнит Козьму Пруткову с его афоризмом: многие вещи нам непонятны не потому, что наши понятия слабы, а потому, что сии вещи не входят в круг наших понятий. Если бы я был интеллигентен и общался исключительно на английском языке, то я бы написал в ответ: FUCK OFF.

fuck_off

Но я не такой. Я понимаю, что мы живем в тяжелое время, и специальности и призвания выбираются, как правило, по воле случая. И глупо требовать от увлеченного менеджера среднего звена любить математику. Тем более он может посмотреть на меня из под лоба и важно спросить:

— А ты, гнида эдакая, любишь ли в свою очередь ту же живопись?

Живопись я взял не с потолка. Просто существует классическое деление на физиков и лириков. Кому-то ближе первое, кому-то второе. С этим у меня нет проблем. Все в порядке. Я только не люблю когда этим ограждаются. У любого человека есть два полушария мозга, кроме Ленина само собой, и любой человек не имеет космического права использовать лишь одно полушарие. Посему я отвечаю:

— Да, я обожаю живопись. Во всем ее разнообразии. А в абстрактных картинах Джеймса Поллока присутствует фрактальная размерность! И вообще я люблю все, в чем наличествует мастерство, ум и стиль. И если у меня будет время, я обязательно ознакомлюсь ближе.

Вот так. Все в мире взаимосвязано, и так часто выходит, что если приглядеться ближе к предмету искусства, можно обнаружить автограф математики.

Мой любимый ученый не Альберт Эйнштейн, а Ричард Фейнман. Конечно, он был не математиком, а физиком, но нигде так не полезна математика, как в физике. Будучи уже великим физиком с регалиями он никогда не забывал, что окружающий мир всегда много интереснее и разнообразнее, чем его может помыслить даже мозг сверхученого. У него есть прекрасная книга, сборник историй из жизни под названием «Вы, конечно, шутите, мистер Фейнман». В ней он много шутит, но иногда он серьезен, особенно в тот момент, когда решил научиться рисовать и начал брать соответствующие уроки. Он рассказывает, что это был один из самых интересных опытов его жизни, а он ставил много опытов, поверьте мне. Фейнман занимался живописью не ради славы, а ради любопытства, но слава нашла его и здесь и его картины начали выставлять в галереях и даже продавать на аукционах. Все это время он скрывал свой настоящий статус, так что это здесь не при чем.

never-used-math

Фейнман дал нам знатный пример. Всегда будь готов узнать что-то новое. Он бы ударил в лицо любого недочеловека, который бы посмел сказать:

— Мне двадцать лет, я бородат и до сих пор жду, когда мне пригодится математика.

В этом утверждении кроется забор, высотой в небоскреб. Этот забор ограждает любого, кто произнесет это заклинание, ограждает от возможности хоть раз в жизни встретиться с математикой. И правда, как вы хотите найти ей применение, если не знаете ее и, мягко говоря, не любите? Как говорится, под лежачий камень вода не течет. И я скажу даже больше: вы даже не представляете, как ограничиваете круг своих интересов. Увлеченные люди не просыпаются с мыслью, что сегодня им нужно немедленно заняться гидродинамикой и познакомиться с уравнениями Навье-Стокса в дифференциальной форме. Они проходят к этому последовательно, начиная в нежные годы с арифметики и алгебры, а затем последовательно специализируя свой интерес. Игра становится интереснее, когда она становится сложнее.

Совершенно необязательно знать математику. Давно прошли те времена, когда можно было знать всю математику. Но разумный интерес, насколько мне известно, еще никому не повредил в этом мире. Открывая любую техническую книгу, как правило, невозможно сходу въехать во все формулы и мысли, заложенные в данные формулы. Практически каждый раз — это terra incognita. И нужны известные усилия, чтобы свой ограниченный запас базовых математических знаний экстраполировать таким образом, чтобы он собрал паззл воедино и наградил тебя цельной картиной. Но это стоит того, поверьте мне.

Многие великие ученые распространялись на эту тему. Взять того же Роджера Пенроуза. Другой отличный физик, лауреат всех возможный премий, популяризатор науки, автор множества предостойных книг. Замечаете иронию судьбы? Пост про математику и математиков, а в ней как-то больше физиков. Но в этом кроется и глубокая правда. Так вот. У Пенроуза есть монументальный труд под названием «Путь к реальности». Но нас в данном случае больше интересует не содержимое, а предисловие. Несмотря на ограниченный объем предисловия, он успел высказать много умных мыслей. Пенроуз решил изменить своей обычный практике избегания математических формул и все-таки привлек язык математики, так как без него просто невозможно понять, что на самом деле творится на переднем крае теоретической физики. Хотя Стивен Хокинг, еще один физик, ха-ха, предупреждал его, что любая математическая формула, упомянутая в книге, сокращает объем потенциальных читателей в два раза. Он-то в свое время отделался лишь одной формулой в своей популярной книге «Краткая история времени». Что за формула? Ну, конечно же «е-мц-квадрат»! Среди всего прочего в предисловии были и такие строки:
И все же, когда дело доходит до объяснения вещей, в принципе доступных пониманию, я склонен считать себя оптимистом. Можно даже сказать, неисправимым оптимистом. Мне кажется, что читатели, не способные оперировать дробями, слегка себя обманывают — в большинстве своем эти люди обладают потенциальной способностью к такого рода деятельности, но по разным причинам предпочитают об этом «не знать». Без сомнения, есть среди них и такие, кто, глядя на строку математических символов, даже самых простых, видит перед собой лишь строгие лица родителей и учителей, пытавшихся вдолбить в них «знания» и требующих взамен попугайского повторения, видимости понимания, не нуждающейся в понимании истинном, — ты должен выучить от сих до сих, иначе будет плохо, — до волшебства же и красоты изучаемого предмета при таком «обучении», скорее всего, никому нет дела.
Космос требует написать вот еще что. В последнее время в интернет среде участились попытки пропаганды особого рода. Что, мол, каждый человек в принудительном порядке должен изучать программирование, или вот искусство письма. Я с рукой на сердце могу вам заявить: я не сторонник этих идей и об этом я обязательно напишу пост, но потом. Математика — другое дело. Она фундаментальна и всеобъемлюща. В ней каждый найдет что-то свое, главное лишь начать искать. Она являет собой такой же мощный мыслительный базис, как и дар речи. А говорить все учатся, как правило, с трех лет. Чем хуже математика?

Аминь.

ОБФУСЦИРОВАНО
horror
iodiot
Давным-давно я наткнулся в интернете на очень занимательный сайт под названием “The International Obfuscated C Code Contest” или “IOCCC” или «Интернациональный контест по обфускации С-кода».

Цели контекста:
  1. Написать наиболее мутный и обфусцированный С-код в рамках правил
  2. Показать важность стилей программирования, в ироническом виде
  3. Испытать С-компилятор необычным кодом
  4. Продемонстрировать некоторые тонкости языка С
  5. Обеспечить безопасное место для безобразного С-кода
Для тех, кто до сих пор в танке, обфускация — сознательный или бессознательный процесс запутывания исходного кода с целью свести с ума будущих читателей. Также как и рефакторинг, обфускация не меняет функциональности программы, а лишь нарушает организацию и внешний вид исходного кода. Я до сих пор помню, как одноклассник на уроке информатики копировал с экрана моего монитора лесенку. Так вот, если этот процесс пустить вспять, то это и будет примитивный пример обфускации.

Вернемся к контесту. Кратко говоря, участники должны написать максимально непонятный код, который бы при этом делал что-то интересное. Особым шиком считается оформить исходный код в виде ASCII-графики, желательно при этом, чтобы изображение имело отношение к задумке самой программы. Я тоже решил попробовать свои силы и быстро сваял программу, которая выводит в консоли множество Мандельброта. Это был первый этап и вот результаты работы:
                                              ****
                                              ****
                                        *  **********
                                        *****************
                                      *******************
                                     *********************
                           *******  **********************
                          ********* **********************
               *****************************************
                          ********* **********************
                           *******  **********************
                                     *********************
                                      *******************
                                        *****************
                                        *  **********
                                              ****
                                              ****
Дальше я решил сосредоточиться не на самой обфускации, а на оформлении кода. Форматировать код руками — муторно и долго, поэтому я… правильно, написал еще одну программу. На вход она принимает два файла: схему и код. В качестве схемы выступает вывод предыдущей программы, т.е. множество Мандельброта. Идея состоит в том, что новая программа должна пытаться рассредоточить код таким образом, чтобы он максимально точно повторял изображение на схеме. Программа незамысловатая, но есть интересные моменты:
  1. Файлы считываются в строки с помощью read_into_string()
  2. Во время считывания происходит препроцессинг кода: символы “{}();,” окружаются пробелами
  3. Препроцессинг нужен для того, чтобы sscanf() правильно распознавал все токены, т.е. понимал, что for( — два разных токена
  4. Грубо говоря, процедура format() последовательно читает токены из кода и ждет пока в схеме наберется нужное количество звездочек, после этого токен выводится
  5. Процедура format() распознает ситуацию, когда рядом идут два символьных токена, чтобы при выводе между ними вставить, как минимум, один пробел, т.е. чтобы в выводе не было: floatx
Я запустил программу и получил следующее:
                                              void
                                              zxc()
                                        {  for(float y
                                        =-1.0f;y<1.0f;y+=0.1f
                                      ){for(float x=-2.5f;
                                     x<1.0f;x+=0.05f){const
                           float   escapeR=100.0f;float zx=
                          0.0f; float zy=0.0f;float tx=0.0f
               ;float ty=0.0f;int n=100;float mod=0.0f;while
                          (n>=0&& mod<escapeR){zx=tx*tx-ty*
                           ty+x;zy  =2.0f*tx*ty+y;tx=zx;ty=
                                     zy;--n;mod=sqrt(zx*zx+
                                      zy*zy);}printf("%c",
                                        n>=0?'_':'*');}printf
                                        (  "\n");}}void
                                              main(){
                                              zxc();}
И она даже комплириуется. Впрочем мне больше по душе живой фрактал Мандельброта под авторством Д. :)

l_211a6d1a

Место, которого нет
horror
iodiot
Я всегда говорил, что вижу мало разницы между утопиями и антиутопиями. И те и другие предлагают различные модели общества, доведенные до абсурда. Только в одном случае, как правило, все рады, а в другом — не очень. Но здесь уже сложно разобраться, такова человеческая природа и от счастья до несчастья, как и от любви до ненависти, — один шаг. Среди моих любимых утопий: «451 градус по Фаренгейту», «Град обреченный», «О дивный новый мир», «1984»…

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

Может ли так статься, что мы однажды проснемся утром и четко осознаем, что оказались в утопии или антиутопии? Я думаю, нет. Примерно по той же причине, по которой мы не оказались в технологическом обществе будущего, о котором так мечтали писатели фантасты золотой эпохи. Т.е. на самом деле мы в нем оказались, и мирно себе поживаем, обладаем достаточно развитой технологией неотличимой от магии, но мы пришли к этому последовательно, без какой-то одной глобальной научно-технической революции. Другое дело, если бы взять и вырвать мечтателя из XX или XIX века и перенести его во времени к нам, и поселить его не в Зимбабве, а в Калифорнии. Дать ему возможность погулять по Лос-Анджелесу, заглянуть в Силиконовую Долину, подарить ему айФон. И знайте, по прибытию обратно он напишет очередной шедевр уровня «Человека невидимки» или «Машины времени», если имя его — Герберт Уэллс, или покажет айФон Путину, если имя его — Дмитрий Медведев.

Аналогия затянулась, но ее идея состоит в том, что мы плохо осознаем тенденции, вяло реагируем на звоночки. И может быть мы уже давно живем не только в матрице, а еще и в утопии. А матрица плюс утопия равняется… правильно, интернету. Но можно пойти даже дальше и рассмотреть интернет в интернете, а именно — социальные сети.

deeper

Любая мало-мальски развитая социальная сеть — идеальный пример утопии. В ней каждый представитель обладает универсальным единообразным паспортом. Паспорт инвариантен, он не меняется вместе с выездом или въездом в другую страну. Да и стран вообще нет, все автоматически зачисляются в граждан мира. В паспорте содержится исчерпывающее био: возраст, пол, вероисповедание, интересы, политические взгляды, любимые фильмы, книги, музыкальные пристрастия. Конечно, существуют фрики и маргиналы, которые отказываются правильно заполнять анкеты, но при определенном градусе закручивания гайки это можно устранить.

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

Дьявол кроется в деталях. Первая важная деталь — возможность «Мне нравится» или “Like” по-ихнему. Это самый простой способ высказать свое мнение, только мнение может быть исключительно положительным. Мне нравится твое фото из Турции, мне нравится картинка с твоим котом, мне нравится новая песня Нирваны, мне нравится документальная хроника расстрела евреев фашистами. Стоп. Это мне как-то не очень нравится. Понимаете о чем речь? У информации с негативной окраской мало шансов получить общественный резонанс, так как только бессердечная скотина поставит лайк под хроникой развлечений фашистов в концентрационных лагерях.

big-brother

Другая деталь не такая заметная, но она мне чуть ли не прямым текстом напоминает «1984». Речь идет о возможности «Мои встречи». Любой может вас пригласить на внеочередное заседание общества плоской Земли или на лекцию по улучшению благосостояния, читаемую нищебродом в третьем поколении. Их дело пригласить, ваше дело отказаться. Но вы не можете это сделать в простой ударной форме, т.е. просто сказать «нет». По мнению создателей как минимум одной социальной сети, «нет» несет негативные коннотации. Слава Зевсу, они не додумались до новояза, в котором такие слова как «плохой» были заменены на «нехороший», но сам набор ответов тревожит:

buttons

Какого черта? Почему я не могу в ясной форме дать понять недоумку, что меня ВООБЩЕ не интересуют откровения экстрасенсов, божьих помазанников, свидетелей НЛО и снежного человека, космических учителей и торговцев эликсиром молодости? Не могу пойти, вашу мать.

На этом фоне вечно светящееся окно ввода «Что у вас нового?» выглядит малозначительным. Что у меня нового? Да ничего особенного: я сходил в клозет и вернул природе то, что украл у нее и съел ранее.

Dixi

// the below code needs to be commented out
horror
iodiot
Итак, комментарии в исходных кодах! Они не важны для компилятора, но важны для живого человека: служат ему путеводной нитью по витиеватому миру операторов, функций и классов. Код, богато усеянный комментариями, светится ясностью и разумностью, и существует мнение, что комментариев много не бывает. Или бывает? В этом небезынтересно разобраться.

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

Любое серьезное исследование должно начинаться с экскурса в историю. Безусловно, самый известный комментарий был оставлен Пьером Ферма на полях «Арифметики» Диофанта:
Наоборот, невозможно разложить ни куб на два куба, ни биквадрат на два биквадрата, и, вообще, никакую степень, большую квадрата на две степени с тем же показателем. Я открыл этому поистине чудесное доказательство, но эти поля для него слишком малы.
Ферма как в воду глядел, и для решающего доказательства зубодробительной теоремы Эндрю Уайлсу понадобилось полжизни и несколько томов математических выкладок.

Но вернемся к первоначальному вопросу. Бывает ли комментариев много? Можно ли переусердствовать в этом благородном занятии? Конечно:
// This method takes two integer values and adds them together via the built-in
// .NET functionality. It would be possible to code the arithmetic function
// by hand, but since .NET provides it, that would be a waste of time
private int Add(int i, int j) // i is the first value, j is the second value
{
    // this statement performs the add functionality using the + operator on the two
    // parameter values, and then returns the result to the calling function
    return i + j;
}
Это хоть и крайний случай, но достаточно распространённый. Комментарии перестают выполнять свою роль, когда их объем сопоставим с объемом кода. Они сообщают ровным счетом ничего нового, и лишь захламляют ограниченное информационное пространство в один экран. Легко впасть в другую крайность и написать магический код, в котором нет ни единого художественного оборота, но содержится окончательный ответ на главный вопрос жизни, вселенной и всего такого:
next = next * 1103515245 + 12345; 
unsigned int r = ((unsigned int)(next / 65536) % 32768);
printf("r = %u\n", r);
В этом коде все прекрасно, кроме того что малопонятно что он делает. Одинокий комментарий спасает положение:
// calculate next pseudorandom number
next = next * 1103515245 + 12345; 
unsigned int r = ((unsigned int)(next / 65536) % 32768);
printf("r = %u\n", r);
Возникает мимолетное ощущение, что цель достигнута. Несколько строк неочевидного кода справлены комментарием, который всецело проясняет ситуацию. Можно ли желать большего? Можно:
unsinged int random()
{
  next = next * 1103515245 + 12345; 
  return ((unsigned int)(next / 65536) % 32768);
}

printf("r = %u\n", random());
Оказывается, лучший комментарий — это его отсутствие, потому что сам код и является идеальным комментарием, по крайней мере, хороший код. Каждый раз, когда возникает похабное желание написать комментарий — верный признак того, что здесь нужен рефакторинг. В моей голове давно выкристаллизовалось эмпирическое правило: количество слов в отдельно взятом комментарии пропорционально вероятности его удаления в обозримом будущем. Как говорит один мой друг: «поверь мне». Но не стоит забывать, что любые обобщения опасны, и даже… ну вы знаете.

Все это отлично согласуется с классическим анекдотом про программистов, в котором Шерлок Холмс и его коллега Ватсон, пролетая на воздушном шаре, спросили у одинокого козопаса, где они находятся. «На воздушном шаре, сэр». Холмс заключил, что ответчик был программистом, потому что тот во-первых дал абсолютно точный ответ, а во-вторых — абсолютно бесполезный. Эти же эмоции я испытываю, когда вижу нечто подобное:
// increment value by one
i++;
Для тех, кто читает эти строки, английский язык скорей всего не является родным. Это вносит дополнительные проблемы. Одно дело совладать с ключевыми словами и писать лаконичные программы, другое — формировать разумные комментарии на родном языке английской королевы. Часто так бывает, что думаешь на русском, составляешь в голове утверждение, которое точно описывает суть дел, но трудности перевода вносят свои коррективы, и в итоге шикарное утверждение превращается в тавтологию. Самодокументированный код опять решает, поскольку позволяет свести количество комментариев к минимуму, но это, конечно же, не отменяет проблему именования переменных, функций, классов и других структурных единиц.

commented

Комментарии, как и все другие очевидные и удобные вещи, должен был кто-то изобрести и придумать. Мне было интересно, помнит ли история первый комментарий в исходных кодах. Я попытался найти материалы, но ничего не вышло. Скорей всего первенство всегда можно будет оспорить, и сам вопрос не имеет особого смысла. Но никто, наверное, не будет спорить, что золотая эпоха комментариев пришлась на годы безраздельного властвования ассемблера. Ведь воспринимать безразмерные простыни однообразного кода без человеческих ремарок было просто невозможно.

Ситуация кардинально улучшилась с появлением С-подобных языков. С тех самых пор код стал больше походить на удобоваримый рассказ, а не на шифровку рукописей Майя посредством шифровальной машинки Энигма. Соответственно роль комментариев также уменьшилась, так как программисты обзавелись новыми и мощными выразительными средствами. Появление объектно-ориентированных языков лишь закрепило тенденцию.

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

Тем, кто испытывает к комментариям нежные чувства, могу посоветовать посетить следующее обсуждение: “What is the best comment in source code you have ever encountered?”. Там же я подчерпнул название для поста, оттуда же я взял и следующую цитату:
//
// Dear maintainer:
// 
// Once you are done trying to 'optimize' this routine,
// and have realized what a terrible mistake that was,
// please increment the following counter as a warning
// to the next guy:
// 
// total_hours_wasted_here = 42
//

Касательно котов
horror
iodiot
cat

Коты — прекрасные существа. Некневсе любят котов, а некневсе их даже боготворят. Безусловно, человек мог бы массово обожать и других животных, но так сложилось, что именно коты исторически сопровождают человека и ленно наблюдает за его попытками ходить на двух ногах, а не на четырех лапах. Мне нравятся слова Марка Твена:
When a man loves cats, I am his friend and comrade without further introduction.
Коты встречаются не только в повседневной жизни. Они смотрят на нас с разворотов книг и с экранов телевизоров. Отдельные даже пребывают в квантовой суперпозиции. Это неспроста. Показать кота, написать о нем или нарисовать изгиб его хвоста — идеальный способ улучшить то или иное произведение. Особенно это касается текстов. Я не хочу быть голословным и приведу цитаты из нескольких моих любимых книг.

Довлатов, «Заповедник»:
У меня была квартира с окнами, выходящими на помойку. Письменный стол, диван, гантели, радиола "Тонус". (Тонус - неплохая фамилия для завмага). Пишущая машинка, гитара, изображение Хемингуэя, несколько трубок в керамическом стакане. Лампа, шкаф, два стула эпохи бронтозавров, а также кот Ефим, глубоко уважаемый мною за чуткость. Не в пример моим лучшим друзьям и знакомым, он стремился быть человеком...
Стругацкие, «За миллиард лет до конца света»:
Скрипнув половицей появился откуда-то одуревший от жары калям, глянул на малянова зелеными глазами, беззвучно разинул и снова закрыл рот. Затем, подергивая хвостом, проследовал под плиту, к своей тарелке. Ничего на этой тарелке не было, кроме сохлых рыбьих костей.
Признаюсь, я и сам неоднократно пытался ввести котов в свои недописанные и неопубликованные романы. Ну как романы… повести. Ну как повести… бездыханные рассказы. Я наберусь смелости, пойду наперекор неписаным канонам, плюну на честь и достоинство, и процитирую сам себя:
Зарождающийся рабочий момент был испорчен диким воплем кота. Далыгин развернулся и одарил Лебега презрительным взглядом, но тот и ухом не повел. Кот знал, как манипулировать хозяином. Дождался пока он отвернется и повторил трюк с противным нечеловеческим мяуканьем. Далыгин аж подпрыгнул.

[...]

Все это время Лебег сидел в позе дородного царя, трон ему заменял прогретый линолеум, а хвост — слуг с опахалами. Лебег был существом интересным. Он отказывался есть из миски, в которой просматривалась дно. А это было неизбежно, поскольку наглая кошачья морда была создана лишь для того чтобы просовываться и разгребать.
В тот же миг за спиной вероятного хозяина прошмыгнул толстый черный кот с шикарными усами. Я учтиво проводил его взглядом, пока кончик хвоста не скрылся в дверном проеме.
Но самый интересный вариант улучшения текста посредством кота я обнаружил совсем недавно. Речь идет о последнем, на момент написания поста, выпуске онлайн проекта what-if.xkcd.com. Что это такое? Словами самих авторов проекта: «каждый вторник отвечаем на ваши гипотетические вопросы с физической точки зрения». И надо сказать хорошо отвечают, с юмором и прекрасными иллюстрациями в xkcd-стиле. Если кто-то действительно заинтересовался, но с английским не дружит, есть и русская версия: chtoes.li. Но финальную цитату я возьму из английского варианта, так как некоторые малоавторитетные персонажи утверждают, что перевод является похабным.

Так вот. Последний выпуск называется «Взрыв в Марианской впадине». А сам вопрос такой: что произойдёт если взорвать ядерную бомбу (к примеру, "Кузькину мать") на дне Марианской впадины? Ответ с физической точки зрения получился не очень впечатляющим, пока не появился… КОТ:
... But. All that changes when this cat enters the equation:

man-and-cat

Literally.

Let’s say that when I’m typing the above equation, the cat hops onto my desk and steps on the “0” key, which inserts six extra zeroes ...
Любите своих котов. Ну и это… женщин тоже, наверное.

final-cat

Через тернии к звездам
horror
iodiot
Из интервью с Бредбери:
— В 1950 году вы написали книгу, принёсшую вам всемирную славу, — сборник рассказов «Марсианские хроники». Там говорилось: уже к началу второго тысячелетия на Марсе будут поселения, целые города землян. Как вы думаете, почему этого в итоге так и не произошло?

— Меня часто про такое спрашивают, и я люблю фантазировать над ответами. Чтобы они были разными! Ответ сегодняшнего дня: потому что люди — идиоты. Они сделали кучу глупостей: придумывали костюмы для собак, должность рекламного менеджера и штуки вроде айфона, не получив взамен ничего, кроме кислого послевкусия. А вот если бы мы развивали науку, осваивали Луну, Марс, Венеру… Кто знает, каким был бы мир тогда? Человечеству дали возможность бороздить космос, но оно хочет заниматься потреблением - пить пиво и смотреть сериалы. Вы особенно не обращайте внимания, это старческое брюзжание (смеётся) — мне же скоро сто лет.
Как известно, самый верный способ стать философом — регулярно смотреть на звездное небо. Скорей всего именно по сей причине в Древней Греции было так много философов. А чем еще было заняться потомкам Эллина? Ящик с трубадурами не изобрели, папирусы лишь входили в моду, да и стоили умопомрачительных драхм, с интернетом тоже не сложилось. Вот и оставалось сидеть и любоваться ночным небом, тем более средиземноморский климат этому всецело способствовал.

Космос поражал и поражает с разных сторон. В первую очередь это масштабы. Когда смотришь на звезды, обычно думаешь что они «далеко», может даже «очень далеко». Едва ли. Далеко до деревни, где живет бабушка, очень далеко до Калифорнии. А до звезд не далеко. Просто не существует бытовых понятий, которые бы могли объективно оценить расстояние до звезд, пусть и ближайших. Интуиция человека перестает работать, когда счет идет на световые года. В лучшем случае ему кажется, что он осознает масштаб расстояний. Но хуже незнания есть лишь уверенность в ошибочном знании.

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

Перейдем к цифрам. Человек побывал на Луне. Среднее расстояние от Земли до Луны составляет 389 тысяч километров. Это, безусловно, немного и вполне осознаваемо. Автомобиль с таким пробегом не вызвал бы особого удивления. До Марса уже дальше. Здесь начинается счет на астрономические единицы (1 а.е. — среднее расстояние от Земли до Солнца) и расстояние теперь составляет практически 2 а.е. Подобные расстояния не без труда преодолевают космические корабли с роботизированной техникой на борту (привет, Curiosity). Но и это конечно не предел. Было отправлено целое множество спутников для исследования внешних планет: Юпитера, Сатурна. А некоторые отработавшие свое спутники до сих пор бороздят вакуум, устанавливая новые рекорды. Это в первую очередь касается Вояджера 1, который находится сейчас на расстоянии 122 а.е. от Солнца. Рубикон.

Возвращаясь к полетам на Луну. Интересно как соотносится расстояние до спутника Земли с расстоянием до ближайшей звезды. Проксиму Центавру отделяет от нас 4,2 световых года пустоты. Вольфрам знает ответ: 101,4 миллиона или 101400000. Если предположить что в будущем человек сможет добираться до Луны за один час, то на огонек в системе Альфа Центавра его можно будет ожидать через 11568 полноценных Григорианских лет или 410 поколений.

dinisaurs

Возникает закономерный вопрос, а сможем ли мы вообще добраться когда-либо до звезд? Цивилизация развивается, вопрос заостряется. Конечно, маловероятно, что пророчества Майя реализуются и нам придется массово эмигрировать в конце 2012 года, но настанет час, когда выбора точно не будет. И уповать на то, что человек, как в мечтах Азимова и Кубрика, станет космическим дитём, тоже не стоит.

space-child

Что мы имеем? На каком самом быстром космическом аппарате летал человек? Вы не поверите. Это были все те же 60е, люди развлекались как могли и летали на Луну. Командный модуль Аполлона 10 развил максимальную скорость относительно Земли, и она составила 39896 км/час или 11 км/c. С такой скоростью плестись до ближайшей звезды всего ничего, а именно: 1 миллиард часов или 114110 лет. Лучше бы и не считали. Важно отметить, что для выхода за пределы солнечной системы, телу на Земле нужно сообщить третью космическая скорость, т.е. как минимум 16,6 км/с.

Очевидно, что на традиционных ракетах химического типа не удастся долететь не то что до звезд, но даже и до ближайших планет. Основной характеристикой эффективности ракетного двигателя выступает удельный импульс. Он примерно равен скорости истечения продуктов сгорания, но измеряется в секундах. Химические реактивные двигатели типа Сатурн-5 сжигают огромное количество топлива в единицу времени, но скорость истечения относительно мала. Удельный импульс составляет 400-500 секунд, и это ближе ко дну эффективности. К тому же топливные резервуары на подобных ракетах истощаются с катастрофической скоростью, и безразмерное увеличение топливных запасов также не решает проблему, а лишь усугубляет, ведь приходится разгонять не только полезный груз, а и топливо.

После подобных размышлений sci-fi фильмы, в которых из недр огромных кораблей вырываются потоки пламени, вызывают лишь усмешку. Но конечно химическими реактивными двигателями дело не ограничивается.

big-ship

Ионные и плазменные двигатели! Они не создают внезапного и эффективного выброса раскалённых газов, которые толкают традиционные ракеты. Их тяга измеряется не в тоннах, а в граммах. Если их положить на стол, то они бы не сдвинулись даже с места. Но все это с лихвой компенсируется способностью работать в открытом космосе на протяжении многих лет. Принцип работы основан на выбросе слабого потока ионизированных атомов через сопло. Ионы в свою очередь генерируются раскаленной нитью, через которую пропускают некоторый газ, к примеру, ксенон. Ионные двигатели не являются прототипом, реальные аппараты уже были испытаны в космосе. Они обладают значительно большим удельным импульсом: ионные — 3000 с, плазменные — 1000-30000 с. Но у подобных двигателей все равно не хватит сил, чтобы доставить нас к звездам, хотя они и могли бы стать непритязательными рабочими лошадками в межпланетных путешествиях.

Из научно-фантастических романов в реальную жизнь перекочевали экзотические типы двигателей. Самый популярный из них — солнечный парус. Автором идеи выступает средневековый писатель-фантаст Иоганн Кеплер, который к тому же еще выдумал три закона роботехники орбитального движения. Идея состоит в том, что свет звезды или любой другой поток фотонов оказывает постоянное давление на огромный парус, сцепленный с полезным грузом. Минимальное давление, едва уловимое точными приборами. Несмотря на все сложности, в космосе уже испытали несколько моделей с разной степенью успешности. Но одно дело построить пятнадцатиметровый парус, а другое — парус, способный доставить человека к звездам. Он должен быть невероятных размеров и конструировать его нужно исключительно в открытом космосе. Сторонники идеи уже предложили интересные модернизации. К примеру, соорудить на Луне батарею лазеров, направленных на парус и толкающих его в нужном направлении. Конечно это чудовищный проект с финансовой точки зрения, да и в любом случае остается проблема… торможения и возвращения назад. Маловероятно, что удастся по радио договориться с представителями внеземной цивилизации и заставить их построить сходную батарею лазеров на одном из своих спутников.

Эволюция ракетостроения в чем-то схожа с эволюцией источников энергии. И прямоточные термоядерные двигатели является таким же прорывом в эффективности, как и энергия мирного атома в свое время. В ходе ядерных реакций выделяется колоссальное количество энергии в сравнении со сжиганием того же бензина в цилиндрах автомобилей. Тем более любой источник энергии на Земле является производным и вторичным по отношению к энергии, которая генерируется Солнцем. Ему мы обязаны всем.

sun-burst

Секрет успеха Солнца — в реакциях термоядерного синтеза. Синтез подразумевает превращение легких элементов в тяжелые с выделением энергии. Главная реакция — превращение водорода в гелий. Это и неудивительно, так как водород является самым распространенным элементом во вселенной. Термоядерные двигатели работают на той же основе. Для создания тяги используется истечение продуктов управляемой термоядерной реакции или рабочего тела, нагретого за счет энергии той же реакции. Мало того что данный тип двигателей имеет большой удельный импульс (2500-200000 с), так еще и необязательно перевозить с собой топливо, так как его можно собирать из окружающего пространства по ходу движения. Обратной стороной медали выступают вопросы безопасности, в частности, радиация и защита от цепных реакций, которые бы могли разрушить двигатель и все что его окружает в мгновение ока.

В теории можно было бы сконструировать термоядерный двигатель, который бы давал постоянное ускорение в 1 g. За пол года работы подобный двигатель разогнал бы корабль до половины скорости света. В теории. Все упирается в сложность и безопасность.

Самым эффективным двигателям был бы двигатель, работающий на аннигиляции вещества и антивещества. Удельный импульс последних в десятки раз больше термоядерных: 1000000-10000000 с. Все вещество превращается в лучистую энергию (привет, е-м-ц-квадрат), тогда как в ходе реакции водород-гелий — лишь доля процента. Антивещество уже получено на Земле, правда в минимальных количествах и является самым дорогим веществом (легкий оксюморон) во Вселенной.

Рассуждения отрезвляют и приземляют. Многие проблемы звездоплавания упираются даже не в сам факт огромных расстояний, а в… человека. Все затевается ради легкоуязвимого и неудобного куска мяса, для жизнеобеспечения которого нужны тепличные условия, земной климат в миниатюре. Если бы удалось исключить человека из уравнения, то задача бы сильно упростилась. Ибо сконструировать и отправить к звездам микрокорабль много легче. Но в таком случае пропадает спортивный интерес, драма. Один из вариантов — перевод человека в цифровую реальность. Но сложно представить, во что в таком случае выродится род человеческий, и будут ли ему вообще интересны звезды.

Как говорится, теория должна быть достаточно безумной и абсурдной, чтобы быть правдой. Таким же, по моему мнению, должен быть и проект звездных путешествий. Я лично предпочитаю вариант с отправкой человека в самом компактном виде, т.е. в виде сперматозоида и яйцеклетки. По прилету такой корабль мог бы итеративно создавать сооружения большей и большей сложности из подручных материалов. Построить фабрику по выращиванию людей и воспитывать их в виртуальной реальности. Это будет странный человек, но человек. И тогда произойдет величайшее свершение: нога живого человека из плоти и крови ступит на планету другой звездной системы.

?

Log in

No account? Create an account