V Красота программирования

V

Красота программирования

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

А со стороны кажется – нет на свете ничего скучнее.

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

Это само по себе интересно.

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

Для меня программирование во многом похоже на физику. Обе науки имеют дело с устройством мира на базовом уровне. Разница, конечно, в том, что физик исследует, как сделан мир, а программист его создает. В пределах компьютера ты творец. Ты можешь безраздельно управлять всем, что происходит. Если хватает умения, то ты – бог. Местного значения.

Возможно, я оскорбил этими словами около половины населения Земли.

Но это правда. Ты создаешь свой собственный мир, и тебя ограничивают только возможности твоей машины или – в наше время все чаще – твои собственные способности.

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

Сначала я просто хотел узнать, как работает компьютер. И меня страшно обрадовало, что тут – как и в математике – можно построить собственный мир со своими законами. В физике тебя ограничивают уже существующие законы. А в математике, как и в программировании, годится все, что непротиворечиво. Внешняя логика не накладывает на математику никаких ограничений – все должно быть логично само по себе. Как знает всякий математик, можно установить набор правил, по которым три плюс три равняется двум. По существу можно делать все, что хочешь, важно только по мере усложнения системы тщательно следить, чтобы не создавать ничего, противоречащего уже построенному миру. Чтобы твой мир был прекрасен, он не должен содержать изъянов. Точно так же и в программировании.

Одна из его привлекательных сторон заключается в том, что можно экспериментировать с созданными тобой мирами и выяснять их возможности. В математике можно заниматься умственной гимнастикой, проверяя, что может быть. Например, большинство людей под геометрией подразумевают Евклидову геометрию. Однако компьютеры позволяют увидеть и другие – совсем не евклидовы – геометрии. С помощью компьютеров можно посмотреть, как выглядят эти придуманные миры. Помните множество Мандельброта – фрактальные изображения, в основе которых лежат уравнения Бенуа Мандельброта? Это наглядные представления чисто математических понятий, которые стали возможны только благодаря компьютерам. Мандельброт просто придумал произвольные правила для несуществующего мира, который не имеет никакого отношения к реальности, но оказалось, что они порождают замечательные узоры. С помощью компьютеров и программирования можно создавать все новые миры, и некоторые возникающие при этом узоры по-настоящему прекрасны.

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

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

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

Помните того своего одноклассника, у которого всегда получался правильный ответ? Он решал задачу быстрее всех, и у него это получалось именно потому, что он к этому не стремился. Он не выяснял, как следует решать эту задачу. Он просто находил правильный подход. И, услышав ответ, вы сразу понимали, что это так.

То же самое и с компьютерами. Можно добиться чего-то с помощью грубой силы, по-дурацки перемалывая проблему, пока от нее ничего не останется. А можно найти верный подход, и проблема сама внезапно исчезнет. Вдруг удается взглянуть на нее под новым углом, и наступает прозрение: проблема существовала только потому, что ты на нее неправильно смотрел.

Вот очень наглядный пример не из компьютерной области, а из математики. Легенда гласит, что, когда великий немецкий математик Карл Фридрих Гаусс еще учился в школе, его учитель, чтобы занять учеников, велел им сложить все целые числа от 1 до 100. Учитель рассчитывал, что ребята провозятся с этим целый день. Но будущий математик уже через пять минут получил верный ответ: 5050. Настоящее решение не в том, чтобы тупо складывать все эти числа – это глупо и скучно. Гаусс просто заметил, что 1 и 100 в сумме дают 101, а 2 и 99 снова дают 101. Как и 3 плюс 98. И так до 50 плюс 51. За считанные секунды он понял, что таких пар 50, каждая в сумме дает 101, поэтому ответ – 5050.

Может быть, эта история и недостоверна, но идея ясна: великий математик не станет решать задачу долгим и нудным способом, потому что увидит лежащую в основе схему и с ее помощью решит задачу быстро и эффектно. То же самое, безусловно, применимо и к компьютерной науке. Конечно, можно просто написать программу, которая вычисляет сумму. Для современных компьютеров это элементарная задача. Но великий программист узнает ответ просто потому, что у него голова на плечах. Он придумает красивую программу, которая будет решать задачу по-другому – правильно.

Очень трудно объяснить, что интересного в том, чтобы биться головой об стену три дня подряд, не зная, как лучше, красивее решить задачу. Но когда ты нашел решение – это чувство нельзя сравнить ни с чем в мире.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

ОГОРОД КОЗЛОВСКОГО: Красота — страшная сила!

Из книги Журнал «Компьютерра» № 36 от 3 октября 2006 года автора Журнал «Компьютерра»

ОГОРОД КОЗЛОВСКОГО: Красота — страшная сила! Автор: Козловский ЕвгенийHigh Definition Video, или, по-отчасти-русски, Видео Высокой Четкости, вроде бы приближается и надвигается. Но как-то ужасно нестройными рядами. То откладывается выпуск очередного (первого?) Blu-ray-проигрывателя, то


1. Системы программирования

Из книги Программирование автора Козлова Ирина Сергеевна

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


56. Язык программирования VВА

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

56. Язык программирования VВА Алфавит и лексемы языкаЯзык программирования VBA предназначен для написания кода программы. Он обладает своим алфавитом, который включает:1) строчные и прописные буквы латинского алфавита (А, В,…, Z, а, b,…, z);2) строчные и прописные буквы


2.1. Красота необыкновенная (Windows Aero)!

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

2.1. Красота необыкновенная (Windows Aero)! Главным украшением Windows Vista является, конечно, стиль оформления под романтическим названием Windows Aero. Чтобы насладиться всеми его прелестями, включите компьютер и дождитесь, пока система загрузится и откроется окно приветствия. На этом


14 Языки программирования: С или не С?

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

14 Языки программирования: С или не С? Границы моего языка — границы моего мира. Логико-философский трактат (Tractatus Logico-Philosophicus 5.6,1918) —Людвиг Виттгенштейн (Ludwig Wittgenstein). 14.1. Многообразие языков в Unix В Unix поддерживается более широкий по сравнению с любой другой операционной


14 Языки программирования: С или не С?

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

14 Языки программирования: С или не С? Границы моего языка — границы моего мира. Логико-философский трактат (Tractatus Logico-Philosophicus 5.6, 1918) —Людвиг Виттгенштейн (Ludwig Wittgenstein). 14.1. Многообразие языков в Unix В Unix поддерживается более широкий по сравнению с любой другой операционной


1.5.2. Перспективы программирования

Из книги Курс "Язык программирования PHP" автора Савельева Нина Владимировна

1.5.2. Перспективы программирования Наверное, каждый, кто знает Ruby (сегодня), в прошлом изучал или пользовался другими языками. Это, с одной стороны, облегчает изучение Ruby, так как многие средства похожи на аналогичные средства в других языках. С другой стороны, у


Язык программирования PHP

Из книги Программирование на языке Пролог для искусственного интеллекта автора Братко Иван

Язык программирования PHP PHP, в настоящее время, – один из наиболее популярных языков для реализации веб-приложений. Данный курс посвящен изучению его основ. Акцент делается на практическое применение полученных навыков.Язык PHP был создан для решения конкретной


8.3. Стиль программирования

Из книги Программирование КПК и смартфонов на .NET Compact Framework автора Климов Александр П.

8.3. Стиль программирования Подчиняться при программировании некоторым стилистическим соглашениям нужно для того, чтобы• уменьшить опасность внесения ошибок в программы и• создавать программы, которые легко читать, понимать, отлаживать и модифицировать.Ниже дается


Классы для программирования графики

Из книги Программирование для карманных компьютеров автора Волков Владимир Борисович

Классы для программирования графики Программирование графики в .NET Compact Framework опирается на те же базовые приемы, что и работа с графикой для полной версии .NET Framework. Все основные классы для работы с графикой сосредоточены в пространстве имен System.Drawing. С помощью этих классов


Инструменты программирования для Pocket PC

Из книги Цифровой журнал «Компьютерра» № 181 автора Журнал «Компьютерра»

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


Инструменты для On-Board программирования

Из книги Идеальный программист. Как стать профессионалом разработки ПО автора Мартин Роберт С.

Инструменты для On-Board программирования Pocket ViCСозданная Джимом Стюартом программа совмещает в себе текстовый редактор Vi и компилятор языка C. Программу можно загрузить с одного из указанных в начале главы сайтов.Установка этой программы предельно проста. Нужно загрузить


Красота в деталях: о чём не скажет продавец при выборе фотоаппарата. Часть вторая Андрей Васильков

Из книги автора

Красота в деталях: о чём не скажет продавец при выборе фотоаппарата. Часть вторая Андрей Васильков Опубликовано 09 июля 2013 В продолжении темы речь пойдёт о других особенностях компактных цифровых фотоаппаратов. Этот класс устройств в последнее


Красота в деталях: о чём не скажет продавец при выборе фотоаппарата Андрей Васильков

Из книги автора

Красота в деталях: о чём не скажет продавец при выборе фотоаппарата Андрей Васильков Опубликовано 08 июля 2013 Сегодня в продаже можно найти около ста моделей «зеркалок», под тысячу компактных цифровых фотоаппаратов и подобных им по характеристикам


Додзё программирования

Из книги автора

Додзё программирования С 2001 года я провожу демонстрацию TDD, которую я называю «игрой в кегли[27]». Это маленькое упражнение занимает около 30 минут. Оно выявляет конфликт в архитектуре, развивается до кульминационной точки и преподносит сюрприз напоследок. Я написал целую