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