Программирование: введение в профессию. 1: Азы программирования - 2016 год
Предисловие третье, напутственное
Это предисловие, последнее из трёх, адресовано тем, кто решил воспользоваться моей книгой, чтобы изучать программирование — один из самых увлекательных видов человеческой деятельности для тех, кто не обделён интеллектом.
Издавна самым умным и умелым людям хотелось создавать что-то такое, что действует само по себе; до появления электричества такое было доступно только механикам-часовщикам. В XVIII веке Пьер Жаке-Дро1 создал несколько уникальных механических кукол, которые назвал “автоматонами”: одна из этих кукол играет на органе пять разных мелодий, при этом нажимает пальцами нужные клавиши органа, пусть и сделанного специально для неё, но при этом реально управляющегося клавишами; другая рисует на бумаге довольно сложные картинки — любую из заданных трёх. Наконец, последняя, самая сложная кукла, “Пишущий мальчик” или “Каллиграф”, пишет на бумаге фразу, обмакивая гусиное перо в чернильницу; фраза состоит из сорока букв и “программируется” поворотами специального колеса. Этот механизм, завершённый в 1772 году, состоит из более чем шести тысяч деталей.
Конечно, самое сложное при создании такого автомата — это придумать всю его механику, найти такое сочетание деталей, которое заставит механические руки совершать столь сложные и точные движения; несомненно, создатель “Пишущего мальчика” был уникальным гением в области механики. Но коль скоро вы имеете дело с механикой, одной гениальности вам не хватит. Пьеру Жаке-Дро пришлось изготовить каждую из шести тысяч деталей, выточить их из металла с фантастической точностью; конечно, часть работы он поручил наёмным работникам принадлежащей ему мастерской, но факт остаётся фактом: кроме гениальности конструктора таких механических изделий, для их появления необходимо ещё огромное количество человеческого труда, притом такого, который невозможно назвать творческим.
Автоматоны Жаке-Дро представляют собой своего рода экстремальную иллюстрацию возможностей творящего человеческого разума в сочетании с вложением большого количества рутинного труда по изготовлению материальных деталей; но тот же принцип мы можем наблюдать едва ли не в любом виде конструкторской деятельности. Гениальный архитектор может нарисовать эскиз прекрасного дворца и создать его подробный проект, но дворец никогда не появится, если не найдётся желающих оплатить труд тысяч людей, задействованных во всей цепочке производства строительных материалов, а затем и в самом строительстве. Гениальный конструктор может придумать новый автомобиль или самолёт, которые так и останутся задумкой, пока тысячи других людей не согласятся (скорее всего, за деньги, которые тоже должны откуда-то взяться) изготовить все нужные детали и агрегаты, а потом, соединив их все вместе, провести цикл испытаний и доработок. Повсюду творческий технический гений натыкается на материальную прозу жизни; мы воочию видим результаты работы гениальных конструкторов, если сопротивление материальной среды удаётся преодолеть, но мы можем лишь догадываться о том, сколько столь же гениальных идей бездарно пропало, так и не найдя возможности воплотиться в металле.
С появлением программируемых компьютеров стало возможно создать нечто, действующее само по себе, избежав при этом сложностей, связанных с материальным воплощением. Проект дома, самолёта или автомобиля — это лишь формальное описание, по которому затем необходимо создать сам автомобиль или дом, иначе от такого проекта не будет никакого толку. Компьютерная программа — это тоже формальное описание того, что должно произойти, но, в отличие от технических проектов, программа сама по себе есть готовое изделие. Если бы Пьер Жаке-Дро мог материализовывать свои задумки, просто выполнив чертежи, он бы наверняка удивил публику чем-нибудь гораздо более сложным, нежели “Пишущий мальчик”; можно сказать, что у программистов такая возможность есть. Пожалуй, не будет преувеличением заявить, что программирование — самая творческая из всех инженерно-технических профессий, и этим программирование привлекает не только профессионалов, но и огромное число любителей; вечный вопрос о том, чего в программировании больше — техники или искусства — не решён ни в чью пользу и вряд ли когда-нибудь будет решён.
Полёт инженерной мысли, не связанный производственной рутиной, неизбежно приводит к наращиванию сложности программирования как дисциплины, и этим обусловлены некоторые особенности этой уникальной профессии. Известно, что программиста нельзя выучить, человек может стать программистом только сам — или не стать им вовсе. Высшее образование при этом желательно, поскольку хорошее знание математики, физики и других наук приводит мозги в порядок и резко повышает потенциал саморазвития. “Программистские” предметы, изучаемые в ВУЗе, тоже могут быть полезны, давая информацию и навыки, которые в противном случае пришлось бы выискивать самостоятельно; но, наблюдая за развитием будущих программистов, можно вполне определённо сказать, что роль “программистских” предметов в этом развитии гораздо скромнее, чем принято считать: не будь преподавателя, будущий программист нашёл бы всё нужное сам; да он так и поступает, поскольку усилия преподавателей обеспечивают его потребности в специальных знаниях хорошо если на четверть. Сам будучи университетским преподавателем, я, тем не менее, должен признать, что знаком со многими прекрасными программистами, имеющими непрофильное высшее образование (химическое, медицинское, филологическое) или даже не имеющими вообще никакого диплома; с другой стороны, будучи профессиональным программистом, пусть теперь уже, возможно, и бывшим, я могу совершенно определённо сказать, что профильное университетское образование, конечно, помогло мне в плане профессионального роста, но в целом программистом я сделал себя сам, иной вариант попросту невозможен. Получается так, что высшее образование для программиста желательно, но не обязательно, а вот самообучение, напротив, категорически необходимо: если потенциальный программист не сделает себя сам, другие из него программиста не сделают и подавно.
Книга, которую вы сейчас читаете, получилась в результате попытки собрать воедино основные сведения, которые нужны при самостоятельном изучении программирования, чтобы их не приходилось выискивать в разных местах и источниках сомнительного качества. Конечно, стать программистом можно и без этой книги; существует множество различных путей, которыми можно пройти, чтобы в конце прийти к пониманию программирования; эта книга покажет вам определённые путевые точки, но даже с учётом этого ваш путь к цели останется только вашим, уникальным и не таким, как у других.
Скажу вам сразу, что одной этой книги, чтобы стать программистом, не хватит; всё, что вы можете из неё извлечь — это общее понимание того, что же такое программирование как вид человеческой деятельности и как приблизительно это следует делать. Кроме того, эта книга останется для вас абсолютно бесполезным ворохом бумаги, если вы решите просто читать её, не пытаясь при этом писать программы на компьютере. И ещё одно: эта книга ничему вас не научит, если командная строка ОС Unix не станет вашим основным средством повседневной работы с машиной.
Объяснение этому очень простое. Чтобы стать программистом, вам для начала придётся начать писать программы так, чтобы они работали; затем в какой-то момент нужно перейти от этюдов к попыткам извлечь из собственных программ какую-то пользу; и, наконец, необходимо сделать последний важнейший шаг — довести полезность своих программ до такого уровня, чтобы ими начал пользоваться кто-то кроме вас. Написать сколько-нибудь полезную программу, имеющую графический интерфейс, довольно сложно — чтобы это сделать, нужно уже быть программистом, но чтобы им стать, вам, как уже было сказано, нужно начать писать полезные программы. Этот заколдованный круг можно разорвать, выбросив из рассмотрения графический интерфейс, но программы, не имеющие такового и при этом полезные, бывают только в ОС Unix, больше нигде.
К сожалению, я вынужден сейчас сказать вам ещё одну не очень приятную вещь. Далеко не каждый человек может стать программистом, и дело здесь не в уровне интеллекта или каких-то там “способностях”, а в том, каковы ваши индивидуальные склонности. Программирование — это очень тяжёлая работа, требующая предельного интеллектуального напряжения, и выдержать эту пытку могут лишь те сравнительно редкие извращенцы, которые способны от процесса создания компьютерных программ получать удовольствие. Вполне возможно, что в ходе изучения этой книги вы поймёте, что программирование — это “не ваше”; ничего страшного, в мире есть много других хороших профессий. Если моя книга “всего лишь” позволит вам вовремя понять, что это не ваш путь, и не тратить лучшие годы жизни на бесплодные попытки учиться в ВУЗе по какой-нибудь программистской специальности — что же, это само по себе немало: лучшие годы, потраченные впустую, вам потом никто не вернёт, и чем раньше вы поймёте, что вам нужно (точнее, не нужно), тем лучше.
Впрочем, хватит о грустном. В первой, вводной части этой книги собраны сведения, которые вам потом понадобятся в программировании, но которые сами по себе программистских упражнений не требуют. На изучение вводной части у вас может уйти от одного дня до нескольких недель; за это время постарайтесь поставить себе на компьютер какой-нибудь Linux или FreeBSD и начать именно эту систему использовать в повседневной работе. Для этого вам подойдёт практически любой сколь угодно старый компьютер, который ещё не рассыпался на кусочки; вы вряд ли найдёте сейчас “живой” Pentium-I, а машины класса Pentium-II для работы многих дистрибутивов Linux вполне достаточно. Кстати, можете использовать появление в вашем хозяйстве нужной операционной системы в качестве проверки собственной готовности к дальнейшему: если прошло три-четыре недели, а ничего юниксоподобного на ваших компьютерах всё ещё нет, можете не обманывать себя: дальнейшие попытки “научиться программировать” вам просто не нужны.
Получив в своё распоряжение Unix, для начала постарайтесь как можно больше своих обычных “компьютерных дел” делать именно в нём. Да, там можно слушать музыку, смотреть фотографии и видео, там можно выходить в Интернет, там есть вполне адекватные заменители привычных офисных приложений, там можно делать всё. Поначалу, возможно, будет непривычно и из-за этого тяжело; не волнуйтесь, этот период скоро пройдёт. Добравшись до начала второй части нашей книги, берите в руки редактор текстов, компилятор Паскаля и пробуйте. Пробуйте, пробуйте, пробуйте, пробуйте! Знайте, компьютер от ваших программ не взорвётся, пробуйте смелее. Пробуйте и так, и эдак, пробуйте и это, и то. Если какая-то задача кажется вам интересной — решайте её, от этого будет заведомо больше пользы, чем от задач из задачника. И помните: всё это должно быть “в кайф”; вымучивать программирование бесполезно.
Всем тем, кто не испугался, я искренне и от всей души желаю успехов. На то, чтобы написать первые два тома этой книги, у меня ушёл целый год; очень хочется надеяться, что он ушёл не зря.
1В ряде источников — “Дроз”, но это неправильно; последняя буква во французской фамилии Droz не произносится.