ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.10.2023
Просмотров: 412
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
264 Глава 8
языками. В других случаях библиотека создается специально для определенной области, например OpenGL для графики, или являет- ся частью программного пакета стороннего производителя.
Как и при изучении нового языка, вы не должны пытаться из- учать новую библиотеку во время работы над проектом, требующим ее применения. Вместо этого изучите основные компоненты библи- отеки отдельно в ходе тестового проекта с нулевой важностью, пре- жде чем использовать их в реальном проекте. Поставьте перед со- бой ряд задач с увеличивающейся сложностью. Помните, что цель заключается не в решении любой из них, а только в том, чтобы на- учиться на этом процессе, поэтому вам не обязательно шлифовать решения или даже завершать их после того, как вы успешно приме- нили изучаемую вами часть библиотеки. В ходе дальнейшей работы эти программы могут служить в качестве руководства. Когда вы зай- дете в тупик из-за того, что не можете вспомнить, как, скажем, нало- жить 2D-изображение на 3D-сцену в OpenGL, нет лучшего решения, чем открыть старую программу, созданную специально для демон- страции этого метода и написанную в вашем собственном стиле, по- скольку ее создавали вы сами.
Кроме того, как и при изучении нового языка, как только вы осво- итесь с библиотекой, вам следует изучить код, написанный эксперта- ми в области использования этой библиотеки. Большинство крупных библиотек имеют свои особенности, которые не раскрываются в офи- циальной документации и узнать о которых при отсутствии длитель- ного опыта работы с ними можно только от других программистов.
По правде говоря, для того, чтобы добиться больших успехов в работе с некоторыми библиотеками, требуется первоначальное руководство другого программиста. Важно не слишком сильно полагаться на соз- данный другими код и быстро достичь стадии, на которой вы способ- ны воссоздать тот код, который был вам показан. Вы удивитесь тому, как много вы можете узнать в процессе воссоздания созданного кем- то кода. Вы можете заметить в исходном коде вызов функции библио- теки и понять, что аргументы, переданные в этом вызове, приводят к определенному результату. Однако, когда вы откладываете этот код в сторону и пытаетесь воспроизвести данный эффект самостоятельно, вам придется исследовать документацию функции, все конкретные значения, которые могут принимать аргументы, а также то, почему они должны быть именно тем, чем они являются, чтобы получился желаемый результат.
Выберите курс
Как преподаватель я считаю, что мне следует завершить этот раз- дел, сказав о курсах. Независимо от области программирования, ко- торую вы хотите изучать, вы найдете того, кто готов учить вас, будь то в традиционной классной комнате или в некоторой онлайн-среде.
Тем не менее курс — это лишь катализатор для обучения, а не само
Думайте как программист 265
обучение, особенно в случае с программированием. Независимо от того, насколько знающим или воодушевленным является ваш ин- структор, при фактическом изучении новых возможностей програм- мирования вы оказываетесь сидящим перед своим компьютером, а не в лекционном зале. Как я уже неоднократно повторял в этой кни- ге, вы должны воплощать идеи программирования на практике, и вы должны сделать их своими, чтобы по-настоящему их изучить.
Это не значит, что курсы не имеют ценности, потому что часто она огромна. Некоторые концепции программирования по своей сути сложны или запутаны, и если у вас есть доступ к преподавателю, обладающему талантом объяснять сложные концепции, это может сэкономить вам массу времени и нервов. Кроме того, курсы позволя- ют вам оценить свой прогресс в освоении новых знаний. Опять же, если вам повезет с инструктором, вы сможете многое узнать из оцен- ки вашего кода, что упростит процесс обучения. Наконец, успешное завершение курса предоставляет нынешним или будущим работода- телям некоторые доказательства того, что вы разбираетесь в пред- мете (если вам не повезло с инструктором, вы можете утешиться хотя бы этим).
Помните, что вы сами отвечаете за свое образование в области программирования, даже при прохождении курса. Курс предоставля- ет структуру для получения оценки и кредита в конце семестра, но эта структура не ограничивает вас в процессе обучения. Рассматривайте время изучения курса как прекрасную возможность узнать как можно больше о предмете помимо целей, перечисленных в учебном плане.
Заключение
Я с радостью вспоминаю свой первый опыт программирования.
Я написал короткий текстовый симулятор пинбольной машины и должен сказать, что сейчас мне это тоже кажется бессмысленным, но это имело смысл в то время. Тогда у меня не было компьютера, а у кого он был в 1976 году? Однако в офисе моего отца был терминал те- летайпа, который по сути представлял собой огромный матричный принтер с клавиатурой, соединенный с мэйнфреймом в местном университете через акустический модем. (Нужно было взять труб- ку, набрать номер, и когда вы слышали электронный зуммер, нужно было положить телефонную трубку на специальный рычаг, подклю- ченный к терминалу.) Каким бы примитивным и бессмысленным не был мой пинбольный симулятор, в тот момент, когда программа за- работала и компьютер начал действовать согласно моим инструкци- ям, меня зацепило.
Чувство, которое я испытал в тот день, — что компьютер подо- бен бесконечной куче кусочков конструкторов Lego, Erector Set и
Lincoln Logs, позволяющих мне построить все, что я только мог себе представить, — это то, что питает мою любовь к программированию.
266 Глава 8
Когда моя среда разработки объявляет о чистой сборке, и мои паль- цы касаются клавиши, которая запускает выполнение моей програм- мы, я всегда волнуюсь, ожидая успеха или неудачи, и хочу увидеть результаты своих усилий, независимо от того, пишу ли я простой те- стовый проект, добавляю окончательный штрих к крупному реше- нию, создаю красивую графику или просто разрабатываю клиент- скую часть приложения базы данных.
Надеюсь, что у вас возникают похожие чувства в процессе про- граммирования. Даже если вы все еще испытываете сложности с не- которыми из описанных в этой книге областей, я надеюсь, вы пони- маете, что, пока программирование волнует вас достаточно сильно, чтобы продолжать им заниматься, не существует проблем, которые вы не можете решить. Все, что требуется, — это желание приложить усилия и правильный подход к этому процессу. Обо всем остальном позаботится время.
Вы уже начали думать как программист? Если вы выполнили упражнения, приведенные в конце каждой главы, вы должны думать как программист и быть уверенным в своей способности решать зада- чи. Если вы выполнили мало упражнений, то у меня есть для вас пред- ложение, и я готов поспорить, что вы можете догадаться, какое имен- но: выполните больше упражнений. Если вы пропустили некоторые из предыдущих глав, не начинайте с упражнений, приведенных в этой главе, — вернитесь туда, где вы остановились, и начните свой путь от- туда. Если вы не хотите выполнять больше упражнений, потому что вам не нравится программировать, тогда я не могу вам помочь.
Как только вы начнете думать как программист, можете гор- диться своими навыками. Если кто-то назовет вас кодером, а не про- граммистом, скажите, что хорошо обученную птицу можно научить печатать код, — вы же не просто пишете код, а используете код для решения задач. При прохождении собеседования с будущим работо- дателем или клиентом вы будете знать, что независимо от того, что потребует от вас эта работа, вы сможете с ней справиться.
Упражнения
Вы должны были знать, что вас ожидает последний набор упражне- ний. Они, конечно, более сложные и менее однозначные по сравне- нию с любым упражнением из предыдущих глав.
8.1.
Напишите полную реализацию задачи с обманом в игре «Висели- ца», которая была бы лучше моей.
8.2.
Расширьте свою программу с игрой «Виселица» так, чтобы поль- зователь мог выбрать роль Игрока 1. Пользователь по-прежнему будет выбирать количество букв в слове и количество промахов, однако в этот раз высказывать догадки должна программа.
8.3.
Перепишите свою программу с игрой «Виселица» на другом язы- ке, с которым вы в настоящее время мало знакомы или вообще не знакомы.
8.4.
Сделайте свою игру «Виселица» графической, фактически ото- бражающей рисунок виселицы и повешенного по мере ее состав- ления. Вы пытаетесь думать как программист, а не как художник, поэтому не беспокойтесь о качестве искусства. Тем не менее вы должны сделать настоящую графическую программу. Не рисуйте виселицу с помощью ASCII-текста, — это слишком просто. Воз- можно, вам захочется исследовать библиотеки 2D-графики для
C++ или выбрать другую, графически ориентированную плат- форму, например, Flash. Наличие графического изображения может потребовать ограничения количества неправильных до- гадок, однако вы можете найти способ предложить по крайней мере ряд вариантов для этого количества.
8.5.
Создайте собственное упражнение: используйте навыки, ко- торые вы приобрели, работая над игрой «Виселица», чтобы решить совершенно другую задачу, предполагающую манипу- лирование списком слов, например, создайте еще одну игру в слова, вроде «Скрабла», средство проверки орфографии или что-нибудь еще.
8.6.
Создайте собственное упражнение: найдите задачу программи- рования на C++ такого размера или уровня сложности, которую вы не могли решить ранее, и решите ее.
8.7.
Создайте собственное упражнение: найдите интересующую вас библиотеку или API, которые вы еще не использовали в про- грамме. Затем исследуйте эту библиотеку или API и используйте ее в полезной программе. Если вас интересует общее програм- мирование, рассмотрите библиотеку Microsoft .NET или библи- отеку баз данных с открытым исходным кодом. Если вам нравит- ся низкоуровневая графика, рассмотрите OpenGL или DirectX.
Если вы хотите попробовать создавать игры, подумайте о таком движке с открытым исходным кодом, как Ogre. Подумайте о ти- пах программ, которые вы хотите написать, найдите библиоте- ку, которая вам подходит, и приступайте.
8.8.
Создайте собственное упражнение: напишите полезную про- грамму для новой платформы (новой для вас), например для платформы мобильного или веб-программирования.
1 ... 26 27 28 29 30 31 32 33 34
268
0 " # $
B
bad_alloc исключение, 114
C
C++
free функция, 112
malloc функция, 112
this
, 148
typedef
, 156
typedef спецификатор, 116
исключение, 159
D
delete оператор, 107
DirectX, 210
J
Java, 138
JDBC, 210
N
new оператор, 106
NULL
указатель, 115
Q
qsort
, функция, 81
T
this ключевое слово, 148
typedef
, 156
-
Абстрактные типы данных, 144,
208
Алгоритм, 207
K
Базовые техники решения задач, 32
Библиотеки, 209
Большая рекурсивная идея
(БРИ), 174, 183, 185
Быстрое прототипирование, 239
Вектор, 77, 100
Висячая ссылка, 154
из-за перекрестных связей,
165
Висячие указатели, 115, 126
Время существования переменной, 115
Вспомогательная функция, 123
Выделение памяти в классе, 154
причины минимализации, 113
пробуксовка, 113 6
Глобальные переменные, 188
Глубокое копирование, 164
Головная рекурсия, 174, 177
Головной указатель, 129,
156–157, 166, 171
Двоичные деревья, 192
корневой узел, 192
левое поддерево, 192
поиска, 203, 231
правое поддерево, 192
Двойной связный список, 161
Декодирование сообщения, 60
Деление на ноль, 135
Деструктор, 163
Динамическая память, 100
Динамические структуры данных, 108, 189
Динамический массив, 99
Диспетчер, 184
Допустимость данных, 121
L
Живучая программа, 122
Запись активации, 111, 114
И (Булева алгебра), 149, 151,
153, 158, 161–162
0 " # $
B
bad_alloc исключение, 114
C
C++
free функция, 112
malloc функция, 112
this
, 148
typedef
, 156
typedef спецификатор, 116
исключение, 159
D
delete оператор, 107
DirectX, 210
J
Java, 138
JDBC, 210
N
new оператор, 106
NULL
указатель, 115
Q
qsort
, функция, 81
T
this ключевое слово, 148
typedef
, 156
-
Абстрактные типы данных, 144,
208
Алгоритм, 207
K
Базовые техники решения задач, 32
Библиотеки, 209
Большая рекурсивная идея
(БРИ), 174, 183, 185
Быстрое прототипирование, 239
Вектор, 77, 100
Висячая ссылка, 154
из-за перекрестных связей,
165
Висячие указатели, 115, 126
Время существования переменной, 115
Вспомогательная функция, 123
Выделение памяти в классе, 154
причины минимализации, 113
пробуксовка, 113 6
Глобальные переменные, 188
Глубокое копирование, 164
Головная рекурсия, 174, 177
Головной указатель, 129,
156–157, 166, 171
Двоичные деревья, 192
корневой узел, 192
левое поддерево, 192
поиска, 203, 231
правое поддерево, 192
Двойной связный список, 161
Декодирование сообщения, 60
Деление на ноль, 135
Деструктор, 163
Динамическая память, 100
Динамические структуры данных, 108, 189
Динамический массив, 99
Диспетчер, 184
Допустимость данных, 121
L
Живучая программа, 122
Запись активации, 111, 114
И (Булева алгебра), 149, 151,
153, 158, 161–162
Предметный указатель 269
Избыточность данных, 152
Изучение языка, 259
библиотеки, 263
время, 260
курс, 264
навыки для уже изученного языка, 263
отличия между языками, 261
хорошо написанный код, 262
Инкапсуляция, 141, 142
Интерполяционного поиска, алгоритм, 230
Интерфейсы прикладного программирования (API), 210
DirectX, 210
JDBC, 210
Исключение, 159
Итератор, 217
Класс get и set, 148
базовый фреймворк, 147
выразительности, 146, 148, 150
глубокое копирование, 164
деструктор, 163
динамические структуры данных, 154
защищенный член, 139
инкапсуляция, 141, 155
интерфейс, 143
композиция, 155
конвенция наименований, 148
конструктор, 139, 150
метод, 139
название метода, 145
объявление класса, 139
объект, 139
однозадачник, 170
поверхностное копирование,
164
подкласс, 139
приватный член, 139
проверка, 153
публичный член, 139
служебный метод, 151
сокрытие информации, 143
спецификатор доступа, 139, 153
фальшивый, 169–170
Классические головоломки, 18
кварраси замок, 29
лисица, гусь и кукуруза, 18
скользящие плитки, 22
судоку, 27
Клиент, 139
Кобаяси Мару, 17
Кодовый блок, 206
Композиция, 155
Компоненты выбор типа, 223
изучение, 210
обзор, 206
Конструктор, 139–140, 149–150,
156
копирования, 167, 169
по умолчанию, 140, 150
Контейнер последовательности,
217
Корневой узел, 192
Куча, 112
переполнение, 114
%
Левая сторона, 166
Левое поддерево, 192
Логическое И (&&)
сокращенные вычисления, 158
@
Массив, 77
динамический, 99
динамическое выделение памяти, 117
использование, 99
многомерный, 95
нескалярный, 93
поиск, 79
решение задач с помощью, 84
сортировка, 81
структура, 93
фиксированных данных, 91
Мастер-план использование сильных и слабых сторон, 233
разработка, 233
составление, 240
Медиана, 90
Метод, 139
get, 148
set, 148
Многомерные массивы, 95