От Древнего Египта к расшифровке генома: что такое программирование на самом деле
Программирование в узком смысле — это написание программ, а в широком — создание инструкций для любой системы, способной их воспринять. Изучаем истоки.
vlada_maestro / shutterstock
Чтобы обучиться программированию компьютера, человек должен сначала понять основные принципы составления инструкций.
Например, вы дали ребенку список продуктов для покупки в магазине. Но поставили условие: если молока 1,5% нет, то купить 2,5%. Это оператор ветвления (условный оператор), обеспечивающий выполнение определенной команды только при условии истинности некоторого логического выражения. В данном случае истинным является выражение «молока 1,5% нет» — поэтому мозг «запрограммированного» ребенка переходит к выполнению инструкции «купить 2,5%».
Далее: на все покупки вы дали 200 рублей и сказали, что если денег не хватает, то купить только самое важное. Налицо более сложный алгоритм. Здесь присутствует цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций.
Ребенок должен сложить сумму всех покупок и сравнить ее с условием «меньше или равно 200 рублей». Если условие не соблюдается, то срабатывает оператор ветвления, в этом дереве инструкций выполняется команда «исключить наименее важный продукт из списка» — и цикл запускается заново. Примерно так же работают компьютерные программы.
Сколько существует программирование
Программирование окружающих людей существует столько же, сколько существует человеческое общество, ведь человек — сугубо социальное животное.
По определению программирование — это передача команд. Если кто-то получает власть над окружающими, то он раздает команды (инструкции) для исполнения. В более сложных системах список разрешенных или запрещенных инструкций, а также порядок их выполнения (то есть алгоритмы) объединяют в большой документ. Он может называться устав, кодекс, свод законов, конституция, библия и т.д.
Имена программистов — авторов инструкций и алгоритмов — почитают в веках, если история их сохранила.
Иногда случается, что люди не понимают глубинного смысла алгоритмов — и просто слепо подчиняются инструкциям, как поклонники карго-культа из Меланезии строили взлетно-посадочные полосы в лесу, надеясь вызвать самолет с грузом (карго).
Люди издревле поняли, что знание алгоритмов дает власть над окружающими. Чтобы добыть это знание, нужно созерцать окружающий мир — и отмечать закономерности, которые вытекают из фундаментальных законов, прописанных в коде программы. Например, жрецы Вавилона и Древнего Египта столетиями вели наблюдения за небесными телами и сохраняли записи. Они вычислили цикл Сароса (18 лет11 дней), когда взаимное положение Солнца и Луны почти точно повторяется на небе. Зная условия цикла, жрецы могли предсказывать положение системы на годы вперед — и свои предсказания они преподносили в виде пророчеств, которые с благоговением воспринимал народ.
Программирование в природе
Если долго наблюдать за окружающим миром, то становится понятно: вся окружающая действительность подчиняется инструкциям с прописанными фундаментальными постоянными. В программировании это — выполнение кода с жестко установленными константами. Мы называем эти алгоритмы законами природы, а константы — фундаментальными физическими постоянными.
Сейчас науке известно 19 констант из «природного кода»:
- скорость света в вакууме;
- гравитационная постоянная;
- постоянная Планка;
- элементарный заряд;
- постоянная Больцмана;
- и другие.
Пространство-время нашей Вселенной строго подчиняется прописанным алгоритмам и константам. То же относится к биологической жизни. Как показывает сегодня наука, код для управления любым живым организмом указан в его генетической программе — геноме. Большинство этих программ, в том числе геном человека, составлены из молекул ДНК, в которых информация и инструкции записываются цифровым кодом из четырех оснований ДНК (T, C, G, A). Исходный код человека расшифрован и опубликован в открытом доступе.
С точки зрения программиста, ДНК похожа скорее на байт-код для виртуальной машины под названием «ядро клетки». Полная программа человека составляет 3,1 млрд пар оснований. Это примерно3 гигабайта, которые можно сократить до750 мегабайт, если выбросить «мусор» (старые копии генов, результаты неудачных экспериментов и т.д.). Копии программы хранятся в каждой клетке. Поэтому каждая клетка организма теоретически может превратиться в любую другую клетку организма, если получит такую команду (плюрипотентность).
Хотя полноценные изменения ДНК в организме крайне редко происходят в пределах одного поколения, существенные поправки вносятся путем активации или деактивации частей нашего генома без изменения самого кода.
Интересно, что в коде человеческого генома есть даже комментарии (интроны), которые располагаются между участками функционального кода (экзонами). Промежуток ДНК с интронами и экзонами выглядит примерно так:
Смысл комментариев в коде генома пока не до конца понятен. Высказывается предположение, что это аналог MFM-кодирования, чтобы обеспечить надежное хранение данных на цифровом накопителе.
В последнее время специалисты по биоинформатике и синтетической биологии постепенно осваивают инструкции экзонов — и уже могут синтезировать простейшие организмы с запрограммированными свойствами. Изумительная гармония алгоритмов, программ и универсальных констант в окружающем мире навела ученых на мысль о том, что наша Вселенная является результатом компьютерной симуляции. Проводятся эксперименты, призванные доказать или опровергнуть эту теорию.
Вероятность того, что мы не живем в компьютерной симуляции, равна одному на миллиарды.
Косвенным свидетельством этого является бурный прогресс виртуальной и дополненной реальности. Если экстраполировать такой прогресс на миллионы лет — вывод напрашивается сам собой: через миллион лет игры будут неотличимы от реальности, а значит, вероятность того, что мы живем в одном из таких искусственных миров, созданном более развитой цивилизацией, очень высока, считает Илон Маск.
Для чего нужно программирование
Мы убедились, что вся окружающая реальность описывается четкими алгоритмами и программами. Согласно научному консенсусу, большинство этих программ в живых организмах создано в результате эволюции. Но это вовсе не значит, что мы — люди — не можем создавать копии этих программ или абсолютно новые программы, которых раньше не существовало в природе. Конечно можем.
Где применяется программирование? С каждым годом оно охватывает всё большие области человеческой деятельности. Человек осваивает программирование автоматов и машин, которые по инструкции делают все, что нам нужно. Ученые научились программировать живые организмы, вирусы. Мы программируем растения, чтобы увеличить урожайность и защитить их от вредителей. Близки к успеху опыты по изменению генома человеческих эмбрионов, чтобы вносить улучшения в людей на стадии зародыша (лечить наследственные заболевания, выбирать мальчиков вместо девочек и т.д.).
Биоинформатика вносит свой вклад в программирование систем искусственного интеллекта (ИИ), которые распознают человеческую речь, понимают смысл слов, определяют объекты на фотографиях и видео и т.д. Из этих маленьких «кирпичиков» в будущем планируется создать «сильный» ИИ. Если он сможет самостоятельно эволюционировать, обучаясь на собранной информации, то бесконечное самообучение может привести человечество к технологической сингулярности, настоящему апогею компьютерного программирования. В этом случае созданная программа будет самосовершенствоваться настолько быстро, что станет недоступна нашему пониманию.
Технологическая сингулярность соответствует третьему закону Кларка, который можно наблюдать повсюду и в наши дни: «Любая достаточно развитая технология неотличима от магии».
Чем интересно программирование
Освоив программирование, человек получает высокооплачиваемую работу. Но, что еще важнее, меняется его взгляд на мир. Человеку становятся лучше понятны скрытые законы и алгоритмы, лежащие в основе окружающих явлений. Более того, он сам может писать такие алгоритмы.
Важно!
Программист — самая перспективная профессия XXI века, которая переживет любые кризисы и любой уровень безработицы.
Компьютеры заменяют людей на рабочих местах, промышленные роботы становятся массовыми. А разработчиков нужно всё больше, чтобы создавать новый софт и программировать роботов. Требуются инженеры и техники, чтобы обслуживать компьютерную технику. Такая необходимость останется по крайней мере до момента технологической сингулярности, когда ИИ сможет обслуживать и улучшать сам себя.