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