Чтение онлайн

на главную - закладки

Жанры

Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:

В конце концов, можете приступить к изучению другого языка программирования. Невозможно стать профессионалом по программному обеспечению, даже если программирование не является вашей основной специальностью, зная только один язык программирования.

0.2. Педагогические принципы

Чему мы хотим вас научить и как собираемся организовать процесс обучения? Мы попытались изложить минимальный объем концепций, методов и инструментов, необходимых для эффективного программирования. Их список приведен ниже.

• Организация программ.

• Отладка и тестирование.

• Разработка классов.

• Вычисления.

• Разработка функций и алгоритмов.

• Графика (только двумерная).

• Графические

пользовательские интерфейсы.

• Обработка текста.

• Сопоставление регулярных выражений.

• Файлы и потоки ввода-выводы (I/O).

• Управление памятью.

• Научные/числовые/инженерные вычисления.

• Принципы проектирования и программирования.

• Стандартная библиотека языка С++.

• Стратегии разработки программного обеспечения.

• Приемы программирования на языке С.

Эти темы охватывают процедурное программирование (его типичным представителем является язык С), а также абстракцию данных, объектно-ориентированное и обобщенное программирование. Основным предметом книги является именно программирование, т.е. идеи, методы и средства выражения этих идей с помощью программ. Нашим основным инструментом является язык С++, поэтому мы довольно подробно описываем его многочисленные возможности. Однако следует помнить, что язык С++ — это просто инструмент, а не основной предмет изучения этой книги. Иначе говоря, книга посвящена программированию с помощью языка С++, а не языку С++ с небольшим количеством теории.

Каждая тема, которую мы разбираем, преследует две цели: описать метод, концепцию или принцип, а также практический язык программирования или свойство библиотеки. Например, для иллюстрации классов и концепции наследования мы используем систему двумерной графики. Это позволит сэкономить место (и ваше время), а также продемонстрировать, что программирование не сводится к простому связыванию фрагментов кода друг с другом, чтобы как можно быстрее получить результат. Основным источником таких “примеров двойного назначения” является стандартная библиотека языка С++. Некоторые из этих примеров имеют даже тройное назначение. Например, мы рассматриваем класс

vector
из стандартной библиотеки, используем его для иллюстрации полезных методов проектирования и демонстрируем многочисленные приемы программирования, позволяющие его реализовать. Одна из целей — показать, как реализованы основные возможности библиотеки и как они отражаются на аппаратном обеспечении. Мы настаиваем на том, что профессионал должен понимать устройство инструментов, с помощью которых он работает, а не считать их волшебной палочкой.

Одни темы покажутся некоторым программистам более интересными, чем другие. Однако мы советуем не предвосхищать свои потребности (как вы можете знать, что вам понадобится в будущем?) и хотя бы просмотреть каждую главу. Если вы используете книгу как учебник, а не самоучитель, то ваш преподаватель сам определит выбор глав.

Наш подход можно назвать глубинным, конкретным или концептуальным. Вначале, в главах 1–11, мы быстро (ну, хорошо, относительно быстро) описываем набор навыков, необходимых для написания небольших практических программ. При этом мы описываем много инструментов и приемов, не вдаваясь в детали. Мы акцентируем внимание на простых конкретных программах, поскольку конкретное усваивается быстрее, чем абстрактное. Большинство людей используют именно такой способ обучения. Не рассчитывайте на то, что уже на ранних стадиях обучения вы поймете все до малейших деталей. В частности, пытаясь сделать что-то, отличающееся от того, что только что работало, вы обнаружите “загадочные” явления. Впрочем, попытайтесь! И, пожалуйста, не забывайте выполнять упражнения и решать задачи, которые мы предлагаем. Помните, что на первых порах у вас просто еще нет достаточно знаний и опыта, чтобы понять, что является простым, а что сложным; выявляйте недостатки и учитесь на них.

Первый этап мы пройдем в быстром темпе. Мы хотим как можно быстрее достичь пункта, после которого вы сможете писать свои собственные интересные программы. Некоторые говорят: “Мы должны двигаться медленно и осторожно; прежде чем научиться бегать, мы должны научиться ходить!” Но где вы видели ребенка, который учился бы именно ходить, а не бегать? На самом дели дети бегают, пока не научатся контролировать свою скорость. Точно так же мы сначала быстренько, иногда ненадолго останавливаясь, научимся программировать, а уж потом притормозим, чтобы глубже разобраться и понять, как все это работает. Мы должны научиться бегать раньше, чем ходить!

Ни в коем случае не следует зацикливаться на попытках досконально изучить какие-то детали языка или метода. Разумеется, вы можете заучить все встроенные типы данных в языке С++ и все правила их использования. Конечно, после этого вы можете чувствовать себя знатоком. Однако это не сделает вас программистом. Пренебрежение деталями может вызвать у вас ощущение недостатка знаний, но это быстрейший способ, позволяющий научиться писать хорошие программы. Обратите внимание на то, что именно наш подход, по существу, используется при обучении детей иностранным языкам. Если вы зайдете в тупик, советуем искать помощи у преподавателей, друзей, коллег и т.п. Не забывайте, что в первых главах нет ничего принципиально сложного. Однако многое будет незнакомым и поэтому может показаться сложным.

Позднее мы углубим ваши первоначальные навыки, чтобы расширить базу ваших знаний и опыта. Для иллюстрации концепций программирования мы используем упражнения и задачи.

Основной упор в книге делается на идеи и причины. Людям нужны идеи, чтобы решать практические задачи, т.е. находить правильные и принципиальные решения. Необходимо понимать подоплеку этих идей, т.е. знать, почему именно этими, а не другими принципами следует руководствоваться, а также чем это может помочь программистам и пользователям программ. Никого не может удовлетворить объяснение “потому что потому”. Кроме того, понимание идей и причин позволит вам обобщить их в новых ситуациях и комбинировать принципы и средства для решения новых задач. Знание причин является важной частью программистских навыков. И наоборот, формальное знание многочисленных плохо понятых правил и конструкций языка программирования является источником многих ошибок и приводит к колоссальной потере времени. Мы ценим ваше время и не хотим его тратить понапрасну.

Многие технические детали языка С++ изложены в приложениях и справочниках, где их можно при необходимости найти. Мы считаем, что вы способны самостоятельно найти заинтересовавшую вас информацию. Используйте для этого предметный указатель и содержание. Не забывайте также об Интернете. Однако помните, что не каждой веб-странице следует слепо доверять. Многие веб-сайты, выглядящие авторитетными источниками знаний, созданы новичками или просто пытаются что-то кому-то продать. Некоторые веб-сайты просто устарели. Мы собрали коллекцию полезных ссылок и фактов на нашем веб-сайте

www.stroustrup.com/Programming.

Пожалуйста, не придирайтесь к “реалистичности” примеров. Идеальный пример — это максимально короткая и простая программа, ярко иллюстрирующая свойство языка, концепцию или прием. Большинство реальных примеров являются намного более запутанными, чем наши, и не содержат необходимых комбинаций идей, которые мы хотели бы продемонстрировать. Успешные коммерческие программы, содержащие сотни тысяч строк, основаны на технических приемах, которые можно проиллюстрировать дюжиной программ длиной по 50 строк. Самый быстрый способ понять реальную программу сводится к хорошему знанию ее теоретических основ.

Поделиться:
Популярные книги

Бывший муж

Рузанова Ольга
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Бывший муж

Идеальный мир для Социопата 12

Сапфир Олег
12. Социопат
Фантастика:
фэнтези
постапокалипсис
рпг
7.00
рейтинг книги
Идеальный мир для Социопата 12

С Новым Гадом

Юнина Наталья
Любовные романы:
современные любовные романы
эро литература
7.14
рейтинг книги
С Новым Гадом

Как я строил магическую империю

Зубов Константин
1. Как я строил магическую империю
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю

Опер. Девочка на спор

Бигси Анна
5. Опасная работа
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Опер. Девочка на спор

Дракон

Бубела Олег Николаевич
5. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.31
рейтинг книги
Дракон

Мимик нового Мира 5

Северный Лис
4. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 5

Везунчик. Дилогия

Бубела Олег Николаевич
Везунчик
Фантастика:
фэнтези
попаданцы
8.63
рейтинг книги
Везунчик. Дилогия

Маверик

Астахов Евгений Евгеньевич
4. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Маверик

Релокант. По следам Ушедшего

Ascold Flow
3. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант. По следам Ушедшего

Sos! Мой босс кровосос!

Юнина Наталья
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Sos! Мой босс кровосос!

Сумеречный Стрелок 4

Карелин Сергей Витальевич
4. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 4

Покоритель Звездных врат

Карелин Сергей Витальевич
1. Повелитель звездных врат
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Покоритель Звездных врат

Эксперимент

Юнина Наталья
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Эксперимент