Эта книга о программировании, и мы пообещали научить вас программировать. Зачем же мы подчеркиваем важность остальных предметов и постоянно указываем на ограниченную роль программирования? Хороший программист понимает роль программ и техники программирования в работе над проектом. Хороший программист (в большинстве случаев) — это ответственный командный игрок, стремящийся сделать как можно более весомый вклад в решение общей задачи. Например, представьте себе, что работая над новым MP3-плеером, я заботился бы лишь о красоте своей программы и количестве технических тонкостей. Вероятно, я стал бы настаивать на том, чтобы моя программа выполнялась на самом мощном компьютере. Я бы пренебрег теорией кодирования звука, поскольку эта дисциплина не относится к программированию. Я бы оставался в стенах своей лаборатории и не стал бы встречаться с потенциальными пользователями, у которых, несомненно, дурной музыкальный вкус и которые, конечно, не способны оценить новейшие достижения в области разработки графического пользовательского интерфейса. Вполне вероятно, что результаты моей работы были бы катастрофическими для всего проекта. Чем более мощный компьютер я бы потребовал, тем дороже стал бы MP3-плеер и тем быстрее разряжались бы его батареи питания. Существенную часть цифровой обработки музыки занимает ее кодирование, поэтому пренебрежение современными методами кодирования информации привело бы к завышенным требованиям к объему памяти для каждой песни (кодирование может уменьшить объем песни почти вдвое без потери качества ее звучания). Игнорирование предпочтений потенциальных пользователей — какими бы странными и архаичными они ни казались — обычно приводит к тому, что они выбирают другой продукт. При разработке хороших программ важно понимать потребности пользователей и ограничения, которые необходимо накладывать на программный код. Для того чтобы завершить карикатурный образ программиста, упомянем о тенденции опаздывать и нарушать сроки поставки из-за одержимости деталями и слепой веры в правильность плохо отлаженной программы. Мы желаем вам стать хорошим программистом с широким кругозором. Эти два качества одинаково полезны для общества и являются ключевыми для удовлетворения от своей работы.
1.4. Компьютерные науки
Даже в самом широком смысле программирование является частью более крупной научной дисциплины. Мы можем рассматривать ее как часть компьютерных наук, компьютерной техники, информационных технологий или другой научной дисциплины, связанной с программным обеспечением. Программирование является вспомогательной технологией, используемой как в информатике, так и в технике, физике, биологии, медицине, истории, литературе и других академических областях.
В 1995 году правительство США выпустило так называемую “Голубую книгу”, в которой дано следующее определение компьютерных наук: “Систематическое изучение компьютерных систем и вычислений. Комплекс знаний, порождаемых этой дисциплиной, содержит теории компьютерных систем и методов; методы, алгоритмы и инструменты проектирования; методы проверки концепций; методы анализа и верификации; методы представления и реализации знаний”. Как и следовало ожидать, Википедия дает более неформальное определение: “Компьютерные науки, или науки о вычислениях, изучают теоретические основы информации и вычислений, а также методы их реализации и приложения в компьютерных системах. Компьютерные науки состоят из многих подобластей; одни сосредоточены на конкретных вычислениях (например, компьютерная графика), другие (например, теория вычислительной сложности) изучают абстрактные проблемы вычислений, третьи связаны с реализацией вычислений. Например, теория языков программирования изучает подходы к описанию вычислений, в то время как компьютерное программирование применяет языки программирования для решения конкретных вычислительных задач”.
1.5. Компьютеры повсюду
Каждый из нас что-то где-то слышал о компьютерах или программах. В этом разделе мы приводим несколько примеров. Может быть, среди них вы найдете тот, который вам понравится. По крайней мере, мы хотели бы убедить вас, что сфера применения компьютеров — а значит, и программирования — намного больше, чем можно себе представить.