- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
Шрифт:
Интервал:
Закладка:
Многие технические детали языка С++ изложены в приложениях и справочниках, где их можно при необходимости найти. Мы считаем, что вы способны самостоятельно найти заинтересовавшую вас информацию. Используйте для этого предметный указатель и содержание. Не забывайте также об Интернете. Однако помните, что не каждой веб-странице следует слепо доверять. Многие веб-сайты, выглядящие авторитетными источниками знаний, созданы новичками или просто пытаются что-то кому-то продать. Некоторые веб-сайты просто устарели. Мы собрали коллекцию полезных ссылок и фактов на нашем веб-сайте www.stroustrup.com/Programming.
Пожалуйста, не придирайтесь к “реалистичности” примеров. Идеальный пример — это максимально короткая и простая программа, ярко иллюстрирующая свойство языка, концепцию или прием. Большинство реальных примеров являются намного более запутанными, чем наши, и не содержат необходимых комбинаций идей, которые мы хотели бы продемонстрировать. Успешные коммерческие программы, содержащие сотни тысяч строк, основаны на технических приемах, которые можно проиллюстрировать дюжиной программ длиной по 50 строк. Самый быстрый способ понять реальную программу сводится к хорошему знанию ее теоретических основ.
С другой стороны, мы не используем для иллюстрации своих идей красивые примеры с симпатичными животными. Наша цель — научить вас писать реальные программы, которые будут использоваться реальными людьми. По этой причине каждый пример, не относящийся к технической стороне языка программирования, взят из реальной жизни. Мы стараемся обращаться к читателям как профессионалы к будущим профессионалам.
0.2.1. Порядок изложения
Существует множество способов обучения программированию. Совершенно очевидно, что мы не придерживаемся популярного принципа “способ, которым я научился программировать, является наилучшим способом обучения”. Для облегчения процесса обучения мы сначала излагаем темы, которые еще несколько лет назад считались сложными. Мы стремились к тому, чтобы излагаемые темы вытекали из поставленных задач и плавно переходили одна в другую по мере повышения уровня ваших знаний. По этой причине книга больше похожа на повествование, а не на словарь или справочник.
Невозможно одновременно изучить все принципы, методы и свойства языка, необходимые для создания программ. Следовательно, необходимо выбрать подмножество принципов, методов и свойств, с которых следует начинать обучение. В целом любой учебник должен вести студентов через набор таких подмножеств. Мы понимаем свою ответственность за выбор этих тем. Поскольку невозможно охватить все темы, на каждом этапе обучения мы должны выбирать; тем не менее то, что останется за рамками нашего внимания, не менее важно, чем то, что будет включено в курс.
Для контраста, возможно, будет полезно привести список подходов, которые мы отвергли.
• “Сначала следует изучить язык С”. Этот подход к изучению языка С++ приводит к ненужной потере времени и приучает студентов к неправильному стилю программирования, вынуждая их решать задачи, имея в своем распоряжении ограниченный набор средств, конструкций и библиотек. Язык С++ предусматривает более строгую проверку типов, чем язык С, а стандартная библиотека лучше соответствует потребностям новичков и позволяет применять исключения для обработки ошибок.
• “Снизу-вверх”. Этот подход отвлекает от изучения хороших и эффективных стилей программирования. Вынуждая студентов решать проблемы, ограничиваясь совершенно недостаточными языковыми конструкциями и библиотеками, он приучает их к плохим и слишком затратным способам программирования.
• “Если вы что-то описываете, то должны делать это исчерпывающим образом”. Этот подход подразумевает изложение по принципу “снизу-вверх” (заставляя студентов все глубже и глубже погружаться в технические детали). В результате новички тонут в море технических подробностей, на изучение которых им потребуются годы. Если вы умеете программировать, то техническую информацию найдете в справочниках. Документация хороша сама по себе, но совершенно не подходит для первоначального изучения концепций.
• “Сверху-вниз”. Этот подход, предусматривающий переход от формулировки принципа к его техническим подробностям, отвлекает читателей от практических аспектов программирования и заставляет концентрироваться на высокоуровневых концепциях еще до того, как они поймут, зачем они нужны. Например, никто просто не в состоянии правильно оценить принципы разработки программного обеспечения, пока не поймет, как легко делать ошибки и как трудно их исправлять.
• “Сначала следует изучать абстракции”. Фокусируясь лишь на основных принципах и защищая студентов от ужасной реальности, этот подход может вызвать у них пренебрежение реальными ограничениями, связанными с практическими задачами, языками программирования, инструментами и аппаратным обеспечением. Довольно часто этот подход поддерживается искусственными “учебными языками”, которые в дальнейшем нигде не используются и (вольно или невольно) дезинформируют студентов о проблемах, связанных с аппаратным обеспечением и компьютерными системами.
• “Сначала следует изучить принципы разработки программного обеспечения”. Этот подход и подход “сначала следует изучить абстракции” порождают те же проблемы, что и подход “сверху-вниз”: без конкретных примеров и практического опыта, вы просто не сможете оценить важность абстракций и правильного выбора методов разработки программного обеспечения.
• “С первого дня следует изучать объектно-ориентированное программирование”. объектно-ориентированное программирование — один из лучших методов организации программ, но это не единственный эффективный способ программирования. В частности, мы считаем, что сначала необходимо изучить типы данных и алгоритмы и лишь потом переходить к разработке классов и их иерархий. Мы с первого дня используем пользовательские типы (то, что некоторые люди называют объектами), но не углубляемся в устройство класса до главы 6 и не демонстрируем иерархию классов до главы 12.
• “Просто верьте в магию”. Этот подход основан на демонстрации мощных инструментов и методов без углубления в технические подробности. Он заставляет студентов угадывать — как правило, неправильно, — что же происходит в программе, с какими затратами это связано и где это можно применить. В результате студент выбирает лишь знакомые ему шаблоны, что мешает дальнейшему обучению.
Естественно, мы вовсе не имеем в виду, что все эти подходы совершенно бесполезны. Фактически мы даже используем некоторые из них при изложении некоторых тем. Однако в целом мы отвергаем их как общий способ обучения программированию, полезному для реального мира, и предлагаем альтернативу: конкретное и глубокое обучение с упором на концепции и методы.
0.2.2. Программирование и языки программирования
В первую очередь мы учим программированию, а выбранный язык программирования рассматриваем лишь как вспомогательное средство. Выбранный нами способ обучения может опираться на любой универсальный язык программирования. Наша главная цель — помочь вам понять основные концепции, принципы и методы. Однако эту цель нельзя рассматривать изолированно. Например, языки программирования отличаются друг от друга деталями синтаксиса, возможностями непосредственного выражения разных идей, а