С другой стороны, программирование нельзя сводить к изучению нескольких правил и чтению справочника. В этой книге специально не акцентируется синтаксис языка С++. Для того чтобы стать хорошим программистом, необходимо понимать основные идеи, принципы и методы. Только хорошо разработанный код имеет шанс стать частью правильной, надежной и легкой в эксплуатации системы. Помимо прочего, основы — это то, что останется даже после того, как современные языки и средства программирования будут усовершенствованы или сойдут с арены.
Что можно сказать о компьютерных науках, разработке программного обеспечения, информационных технологиях и т.д.? Сводятся ли эти отрасли знаний к программированию? Разумеется, нет! Программирование — это один из фундаментальных предметов, лежащих в основе всех областей, связанных с использованием компьютеров. Оно занимает свое законное место в курсе компьютерных наук. Я привожу в книге краткий обзор основных понятий и методов, связанных с алгоритмами, структурами данных, пользовательским интерфейсом и программным обеспечением. Тем не менее эта книга не может заменить подробного и сбалансированного учебника по этим темам.
Программа может быть как прекрасной, так и полезной. Надеюсь, эта книга поможет вам понять эту истину. Я старался объяснить, какие программы можно назвать прекрасными, изложить основные принципы их разработки и помочь овладеть практическими навыками по разработке таких программ. Удачи!
Обращение к студентам
Обучение по этой книге уже прошли более тысячи студентов Техасского университета агрокультуры и машиностроения (Texas A&M University). Из них около 60% уже имели опыт программирования, а остальные 40% до обучения не написали ни одной строчки программы в своей жизни. Большинство из них вполне успешно справились с заданиями, значит, справитесь и вы.
Вы не обязаны читать эту книгу как часть учебного курса. Я предполагаю, что эта книга будет широко использоваться для самообучения. Однако, независимо от того, учитесь ли вы в университете или овладеваете программированием самостоятельно, постарайтесь работать в группе. Программирование часто совершенно неправильно считают занятием одиночек. Большинство людей лучше работают и быстрее обучаются в коллективе, имеющем общую цель. Совместное обучение и обсуждение задач с друзьями нельзя сводить к обмену программами для обмана преподавателей! Это один из наиболее эффективных, а также наиболее приятных способов совершенствования своего профессионального мастерства. Кроме того, коллективная работа приучает студентов правильно выражать свои идеи, что является одним из наиболее эффективных способов самопроверки и запоминания. Не обязательно самостоятельно искать решения давно известных задач, связанных с языком программирования или особенностями сред для разработки программ. Однако не следует также обманывать себя, не выполняя упражнения (даже если преподаватель их не проверяет). Помните: программирование (помимо всего прочего) — это практический навык, которым следует овладеть. Если вы не пишете программ (т.е. не выполняете упражнения, приведенные в конце каждой главы), то чтение книги сведется к бессмысленному теоретическому занятию.
У большинства студентов — особенно хороших студентов — иногда возникает вопрос, стоит ли так тяжело работать. Если у вас возникнет такой вопрос, сделайте перерыв, перечитайте предисловие и просмотрите главу 1 “Компьютеры, люди и программирование”, а также главу 22 “Идеалы и история”. В этих главах я попробовал объяснить, чем меня восхищает программирование и почему я считаю, что именно программирование играет ключевую роль в улучшении мира. Если вас интересуют мои педагогические принципы, прочитайте главу 0 “Обращение к читателям”.
Возможно, вы сочтете книгу слишком большой. Частично это объясняется тем, что я либо многократно повторяю объяснения, либо иллюстрирую их дополнительными примерами, вместо того чтобы заставлять читателей удовлетвориться одним единственным толкованием. Кроме того, часть II представляет собой справочник и содержит дополнительный материал, позволяющий читателям углубить свои знания в конкретных областях программирования, например в области встроенных систем программирования, анализа текстов или математических вычислений. Пожалуйста, сохраняйте терпение. Изучение новых идей и приобретение важных практических навыков требует времени, но результат стоит затраченных усилий.