• “С первого дня следует изучать объектно-ориентированное программирование”. объектно-ориентированное программирование — один из лучших методов организации программ, но это не единственный эффективный способ программирования. В частности, мы считаем, что сначала необходимо изучить типы данных и алгоритмы и лишь потом переходить к разработке классов и их иерархий. Мы с первого дня используем пользовательские типы (то, что некоторые люди называют объектами), но не углубляемся в устройство класса до главы 6 и не демонстрируем иерархию классов до главы 12.
• “Просто верьте в магию”. Этот подход основан на демонстрации мощных инструментов и методов без углубления в технические подробности. Он заставляет студентов угадывать — как правило, неправильно, — что же происходит в программе, с какими затратами это связано и где это можно применить. В результате студент выбирает лишь знакомые ему шаблоны, что мешает дальнейшему обучению.
Естественно, мы вовсе не имеем в виду, что все эти подходы совершенно бесполезны. Фактически мы даже используем некоторые из них при изложении некоторых тем. Однако в целом мы отвергаем их как общий способ обучения программированию, полезному для реального мира, и предлагаем альтернативу: конкретное и глубокое обучение с упором на концепции и методы.
0.2.2. Программирование и языки программирования
В первую очередь мы учим программированию, а выбранный язык программирования рассматриваем лишь как вспомогательное средство. Выбранный нами способ обучения может опираться на любой универсальный язык программирования. Наша главная цель — помочь вам понять основные концепции, принципы и методы. Однако эту цель нельзя рассматривать изолированно. Например, языки программирования отличаются друг от друга деталями синтаксиса, возможностями непосредственного выражения разных идей, а также средствами технической поддержки. Тем не менее многие фундаментальные методы разработки безошибочных программ, например простых и логичных программ (главы 5-6), выявления инвариантов (раздел 9.4.3) и отделения интерфейса от реализации (разделы 9.7 и 14.1–14.2), во всех языках программирования практически одинаковы.
Методы программирования и проектирования следует изучать на основе определенного языка программирования. Проектирование, программирование и отладка не относятся к навыкам, которыми можно овладеть абстрактно. Вы должны писать программы на каком-то языке и приобретать практический опыт. Это значит, что вы должны изучить основы какого-то языка программирования. Мы говорим “основы”, так как времена, когда все основные промышленные языки программирования можно было изучить за несколько недель, ушли в прошлое. Для обучения мы выбрали подмножество языка С++, которое лучше всего подходит для разработки хороших программ. Кроме того, мы описываем свойства языка С++, которые невозможно не упомянуть, поскольку они либо необходимы для логической полноты, либо широко используются в сообществе программистов.
0.2.3. Переносимость
Как правило, программы на языке С++ выполняются на разнообразных компьютерах. Основные приложения на языке С++ выполняются на компьютерах, о которых мы даже представления не имеем! По этой причине мы считаем переносимость программ и возможность их выполнения на компьютерах с разной архитектурой и операционными системами одним из самых важных свойств. Практически каждый пример в этой книге не только соответствует стандарту ISO Standard C++, но и обладает переносимостью. Если это не указано явно, представленные в книге программы могут быть выполнены с помощью любого компилятора языка С++ и были протестированы на разных компьютерах и под управлением разных операционных систем.
Процесс компилирования, редактирования связей и выполнения программ на языке С++ зависит от операционной системы. Было бы слишком неудобно постоянно описывать детали устройства этих систем и компиляторов каждый раз при ссылке на выполнение программы. Наиболее важная информация, необходимая для использования интегрированной среды разработки программ Visual Studio и компилятора Microsoft C++ под управлением операционной системы Windows, приведена в приложении В.
Если вы испытываете трудности при работе с популярными, но слишком сложными интегрированными средами разработки программ, предлагаем использовать командную строку; это удивительно просто. Например, для того чтобы скомпилировать, отредактировать связи и выполнить простую программу, состоящую из двух исходных файлов, my_file1.cpp
и my_file2.cpp
, с помощью компилятора GNU C++ под управлением операционной системы Unix или Linux, выполните две команды:
g++ –o my_program my_file1.cpp my_file2.cpp
my_program
Да, этого достаточно.
0.3. Программирование и компьютерные науки