ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.10.2023
Просмотров: 409
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
ГЛАВА 8. ДУМАЙТЕ КАК ПРОГРАММИСТ . . . . . . . . . . . . . . . . . . . 232
Разработка собственного мастер-плана . . . . . . . . . . . . . . . . . . . . . . . . . 233
Использование своих сильных и слабых сторон . . . . . . . . . . . . . . . . . . 233
Планирование с учетом недостатков кодирования. . . . . . . . . . . . . . . . . 234
Планирование с учетом недостатков дизайна . . . . . . . . . . . . . . . . . . . 236
Планирование с учетом ваших сильных сторон . . . . . . . . . . . . . . . . . . 238
Составление мастер-плана . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Решение любой задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Задача: жульничество при игре в «Виселицу» . . . . . . . . . . . . . . . . . . . 243
Нахождение возможности для жульничества . . . . . . . . . . . . . . . . . . . . 244
Необходимые операции для обмана в игре «Виселица» . . . . . . . . . . . . . 246
Исходный дизайн . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Первичное кодирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Анализ первоначальных результатов . . . . . . . . . . . . . . . . . . . . . . . . 257
Искусство решения задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Изучение новых навыков программирования . . . . . . . . . . . . . . . . . . . . . . 259
Новые языки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Выделите время на учебу . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Начните с того, что вы знаете . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Изучите отличия. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Изучайте хорошо написанный код . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Новые навыки для языка, который вы уже знаете. . . . . . . . . . . . . . . . . . 263
Новые библиотеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Выберите курс . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Антон Спрол преподавал введение в программирование и информа- тику более 15 лет. Эта книга представляет собой квинтэссенцию ме- тодов, которые он использовал и оттачивал на протяжении множе- ства занятий с испытывающими сложности программистами.
10
Написание программ вызывает у вас сложность, несмотря на то, что вы, вроде бы, понимаете языки програм мирования? Вы киваете голо- вой, читая главу какой-нибудь книги по програм- мированию, но не можете применить на практи- ке то, что прочитали?
А может быть, вы понимаете листинг программы, увиденный в Интернете, так хорошо, что можете объ- яснить кому-то, что делает каждая из строк, но все равно смотрите в пустой экран редактора, когда сталкиваетесь с задачей по програм- мированию, и ощущаете, что ваш мозг отказывается работать?
Вы не одиноки. Я преподаю программирование уже более 15 лет, и большинство моих студентов подошли бы под это описание в опре- деленные моменты процесса обучения. Я бы назвал это навыком реше-
ния задач, способностью воспринять описание поставленной задачи
Введение 11
и написать оригинальный программный код для ее решения. Не все аспекты программирования требуют решения большого количества задач. Если вы просто вносите незначительные изменения в код ра- бочей программы, выполняете отладку, добавляете код тестирова- ния, процесс программирования может быть настолько механиче- ским по своей сути, что вашим творческим возможностям в итоге никогда не будет брошен вызов. Но факт в том, что все программы в тот или иной момент требуют решения задач, и все хорошие про- граммисты умеют эти задачи решать.
Делать это непросто. Конечно, есть люди, справляющиеся с различными задачами легко и непринужденно. Их называют the naturals — эквивалент одаренного атлета, наподобие Майкла Джор- дана в мире программирования. Для этих избранных любые высо- коуровневые идеи легко трансформируются в исходный код. Если воспользоваться метафорой языка Java, то получится, что их мозг выполняет программы «нативно», а все остальные, включая нас с вами, вынуждены запускать виртуальную машину, интерпретирую- щую код по мере выполнения.
Однако нужно понимать, что программист может не относится к «the naturals», и это не фатально. Иначе в нашем мире было бы очень мало программистов. Тем не менее я видел слишком много хо- роших учеников, отчаянно бьющихся над решением задач на протя- жении слишком долгого времени. В худшем случае они отказывались от программирования вовсе, убежденные в собственной неспособ- ности стать программистами и считая, что единственные хорошие программисты — это люди с природным даром.
Почему научиться решать задачи по программированию так сложно?
Отчасти из-за того, что решение задач — это деятельность, от- личная от изучения синтаксиса языка программирования, чтения кода программ и запоминания элементов интерфейса приложений; вышеперечисленные процессы в основном аналитические, относя- щиеся к деятельности левого полушария. Написание оригинальной программы с использованием ранее изученных инструментов и на- выков — это творческий процесс, относящийся к правому полуша- рию головного мозга.
Предположим, что вам нужно убрать ветку, попавшую в один из до- ждевых желобов вашего дома, однако стремянка недостаточно высо- ка и вы не можете дотянуться до ветки. Вы направляетесь в гараж в по- исках чего-то или сочетания чего-то с чем-то, что поможет вам убрать ветку из желоба. Есть ли что-то такое, что может увеличить длину стремянки, чтобы вы смогли схватить или сбить ветку? Возможно, вы можете просто взобраться на крышу и достать ветку оттуда? Вот это и называется решением задач, и это деятельность творческая. Хотите верьте, хотите нет, но при проектировании оригинальной програм- мы мыслительный процесс у вас в голове похож на то, что происходит
12 Введение в голове человека, пытающегося придумать, как убрать ветку из жело- ба, и довольно сильно отличается от мыслительного процесса челове- ка, занятого отладкой существующего цикла for.
Впрочем, внимание авторов большинства книг по программиро- ванию сосредоточено на синтаксисе и семантике. Изучение таких норм любого языка необходимо, но это лишь первый шаг на пути изучения программирования. На самом деле, большинство книг по программированию для начинающих учат, как читать код программ, но не как его писать. Книги, которые сосредоточены на написании, зачастую представляют собой «кулинарные книги», обучающие кон- кретным «рецептам» и их использованию в определенных ситуаци- ях. Такие книги могут быть очень ценными для экономии времени, но не для обучения написанию оригинального кода. Подумайте о ку- линарных книгах в исходном значении этих слов. Несмотря на то, что у замечательных поваров есть кулинарные книги, никто из тех, кто полагается исключительно на кулинарные книги, не может быть по-настоящему хорошим поваром. Замечательный повар понимает ингредиенты, методы готовки и знает, как их сочетать для получе- ния вкусных блюд. Все, что нужно такому повару — это кухня с нуж- ными ингредиентами и оборудованием. Таким же образом замеча- тельный программист понимает синтаксис языка, среду разработки приложения, алгоритмы, принципы разработки и знает, как все это сочетать для создания отличных приложений. Дайте такому про- граммисту технические спецификации, развяжите ему руки полно- функциональной средой программирования — и случится нечто уди- вительное.
Современное обучение программированию, по большей части, не предлагает много руководств по решению задач. Наоборот, пред- полагается, что если программисту дан доступ ко всем инструментам и от него требуют написать большое количество программ, то рано или поздно он научится писать такие программы и будет делать это хорошо. Путь от инициации до просветления может быть полон от- чаяния и растерянности — и слишком многие из тех, кто его начина- ет, не доходят до конца.
Вместо того чтобы учиться методом проб и ошибок, вы може- те научиться решать задачи, используя системный подход. Именно этому и посвящена данная книга. Вы изучите техники организации ваших мыслей, процедуры поиска решений и стратегии, которые могут быть применены к определенным классам задач. Изучив эти подходы, вы сможете высвободить свой потенциал. Он неизвестен, и никто не может с точностью сказать, как работает творческое со- знание. Однако если мы можем разучить музыкальное произведение, воспринять совет по творческому написанию текстов или научиться рисовать, значит, мы можем также научиться творчески решать зада- чи. Это книга не скажет вам, что именно нужно делать, она поможет вам развить скрытые способности решения задач, так, что вы будете
Введение 13
знать, как следует поступить. Предназначение этой книги — помочь вам стать таким программистом, каким вы должны стать.
Цель, которую я ставлю перед вами и перед каждым читателем этой книги, — научиться системному подходу к выполнению каждой задачи по программированию и быть уверенным в том, что в конце концов вы сможете решать любые из них. Когда вы закончите чи- тать эту книгу, я хочу чтобы вы думали как программист и верили в то,
что вы программист.
Об этой книге
Объяснив необходимость этой книги, я должен также прокомменти- ровать то, чем эта книга является, а чем нет.
Предварительная подготовка
Эта книга предполагает, что вы уже знакомы с базовыми синтакси- сом и семантикой языка С++ и уже начали писать программы. В боль- шинстве глав предполагается, что вам уже известны конкретные ос- новы С++ — они будут начинаться с обзора этих основ. Если вы только постигаете язык, не переживайте: существует много замечательных книг по синтаксису С++, и вы можете параллельно изучать решение проблем и задач и синтаксис. Просто убедитесь, что вы изучили нуж- ный синтаксис прежде, чем попытаетесь одолеть задачи в главе.
Выбор тем
Темы, обсуждаемые мной в этой книге, представляют те аспекты, в которых, по моему опыту, у начинающих программистов больше всего проблем. Они также представляют широкий срез различных аспектов программирования начального и среднего этапов.
Я должен, однако, подчеркнуть, что это не «кулинарная книга» с готовыми алгоритмами и шаблонами для решения конкретных за- дач. Несмотря на то, что в последних главах книги обсуждается при- менение широко известных алгоритмов или шаблонов, вам не сле- дует использовать эту книгу как «шпаргалку», которая поможет вам решить конкретные задачи или сконцентрироваться лишь на главах, имеющих непосредственное отношение к вашим текущим задачам.
Вместо этого я бы посоветовал вам проработать всю книгу и пропу- скать тот или иной раздел только в том случае, если вам не хватает знаний для усвоения материала.
Стиль программирования
Небольшое замечание о стиле программирования в данной книге: эта книга не посвящена высокопроизводительному программирова- нию или запуску наиболее компактного и эффективного кода. Вы- бранный мной стиль, в первую очередь, отвечает задаче удобочита- емости. В некоторых случаях для четкой иллюстрации описанного
14 Введение правила я даже делаю несколько шагов, несмотря на то, что это же действие можно было выполнить за один шаг.
Некоторые вопросы стиля программирования будут описаны в этой книге, но они относятся к большим вопросам, как, например, что должно, а что не должно быть включено в класс, а не к малень- ким вопросам, таким как отступы строк программного кода. Как раз- вивающийся программист, вы, разумеется, захотите применить наи- более удобочитаемый стиль для всех выполняемых работ.
Упражнения
В эту книгу я включил большое количество упражнений по програм- мированию. Но это не учебник, поэтому вы не найдете ответов к упражнениям в конце книги. Упражнения лишь дают вам возмож- ность применить на практике подходы, описанные в главе. Выпол- нять упражнения или нет — решать вам, однако практическое при- менение этих подходов очень важно. Простое чтение книги не даст вам ничего. Помните, что эта книга не скажет вам, что именно нуж- но сделать в той или иной ситуации. Применяя техники, показанные в этой книге, вы самостоятельно поймете, что нужно делать. Более того, повышение вашей самооценки — еще одна из целей этой кни- ги — подразумевает достижение успеха. На самом деле, когда вы пой- мете, что можете решить любую задачу в той или иной области, это будет означать, что вы проработали достаточное количество упраж- нений. В конце концов, выполнение упражнений по программиро- ванию должно приносить вам удовольствие. Выполнение этих задач должно быть не рутиной, но вызовом вашим возможностям.
Воспринимайте эту книгу, словно полосу препятствий в вашей голове. Прохождение полосы препятствий увеличивает вашу силу, выносливость, ловкость и дает вам уверенность в собственных спо- собностях. По мере прочтения этой книги и применения описанных в ней подходов на практике вы разовьете уверенность в себе и при- обретете навыки решения задач, которые сможете использовать в любой ситуации при программировании. Встретив сложную задачу в будущем, вы будете знать подход к ее решению.
Почему С++?
Программный код примеров в данной книге написан на языке С++.
При этом следует отметить, что книга посвящена решению проблем, не обязательно характерных для этого языка. В книге вы не найде- те большого количества советов и приемов, подходящих только для
С++. Общие концепции, которым она обучает, могут быть реализова- ны с помощью любого языка программирования. Тем не менее мы не можем обсуждать программирование, не затрагивая программы, по- этому для примеров я выбрал конкретный язык для примеров.
С++ был выбран по многим причинам. Во-первых, этот язык по- пулярен во многих проблемных областях. Во-вторых, так как С++
Разработка собственного мастер-плана . . . . . . . . . . . . . . . . . . . . . . . . . 233
Использование своих сильных и слабых сторон . . . . . . . . . . . . . . . . . . 233
Планирование с учетом недостатков кодирования. . . . . . . . . . . . . . . . . 234
Планирование с учетом недостатков дизайна . . . . . . . . . . . . . . . . . . . 236
Планирование с учетом ваших сильных сторон . . . . . . . . . . . . . . . . . . 238
Составление мастер-плана . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Решение любой задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Задача: жульничество при игре в «Виселицу» . . . . . . . . . . . . . . . . . . . 243
Нахождение возможности для жульничества . . . . . . . . . . . . . . . . . . . . 244
Необходимые операции для обмана в игре «Виселица» . . . . . . . . . . . . . 246
Исходный дизайн . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Первичное кодирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Анализ первоначальных результатов . . . . . . . . . . . . . . . . . . . . . . . . 257
Искусство решения задач . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Изучение новых навыков программирования . . . . . . . . . . . . . . . . . . . . . . 259
Новые языки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Выделите время на учебу . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Начните с того, что вы знаете . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Изучите отличия. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Изучайте хорошо написанный код . . . . . . . . . . . . . . . . . . . . . . . . . . 262
Новые навыки для языка, который вы уже знаете. . . . . . . . . . . . . . . . . . 263
Новые библиотеки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Выберите курс . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Антон Спрол преподавал введение в программирование и информа- тику более 15 лет. Эта книга представляет собой квинтэссенцию ме- тодов, которые он использовал и оттачивал на протяжении множе- ства занятий с испытывающими сложности программистами.
10
Написание программ вызывает у вас сложность, несмотря на то, что вы, вроде бы, понимаете языки програм мирования? Вы киваете голо- вой, читая главу какой-нибудь книги по програм- мированию, но не можете применить на практи- ке то, что прочитали?
А может быть, вы понимаете листинг программы, увиденный в Интернете, так хорошо, что можете объ- яснить кому-то, что делает каждая из строк, но все равно смотрите в пустой экран редактора, когда сталкиваетесь с задачей по програм- мированию, и ощущаете, что ваш мозг отказывается работать?
Вы не одиноки. Я преподаю программирование уже более 15 лет, и большинство моих студентов подошли бы под это описание в опре- деленные моменты процесса обучения. Я бы назвал это навыком реше-
ния задач, способностью воспринять описание поставленной задачи
Введение 11
и написать оригинальный программный код для ее решения. Не все аспекты программирования требуют решения большого количества задач. Если вы просто вносите незначительные изменения в код ра- бочей программы, выполняете отладку, добавляете код тестирова- ния, процесс программирования может быть настолько механиче- ским по своей сути, что вашим творческим возможностям в итоге никогда не будет брошен вызов. Но факт в том, что все программы в тот или иной момент требуют решения задач, и все хорошие про- граммисты умеют эти задачи решать.
Делать это непросто. Конечно, есть люди, справляющиеся с различными задачами легко и непринужденно. Их называют the naturals — эквивалент одаренного атлета, наподобие Майкла Джор- дана в мире программирования. Для этих избранных любые высо- коуровневые идеи легко трансформируются в исходный код. Если воспользоваться метафорой языка Java, то получится, что их мозг выполняет программы «нативно», а все остальные, включая нас с вами, вынуждены запускать виртуальную машину, интерпретирую- щую код по мере выполнения.
Однако нужно понимать, что программист может не относится к «the naturals», и это не фатально. Иначе в нашем мире было бы очень мало программистов. Тем не менее я видел слишком много хо- роших учеников, отчаянно бьющихся над решением задач на протя- жении слишком долгого времени. В худшем случае они отказывались от программирования вовсе, убежденные в собственной неспособ- ности стать программистами и считая, что единственные хорошие программисты — это люди с природным даром.
Почему научиться решать задачи по программированию так сложно?
Отчасти из-за того, что решение задач — это деятельность, от- личная от изучения синтаксиса языка программирования, чтения кода программ и запоминания элементов интерфейса приложений; вышеперечисленные процессы в основном аналитические, относя- щиеся к деятельности левого полушария. Написание оригинальной программы с использованием ранее изученных инструментов и на- выков — это творческий процесс, относящийся к правому полуша- рию головного мозга.
Предположим, что вам нужно убрать ветку, попавшую в один из до- ждевых желобов вашего дома, однако стремянка недостаточно высо- ка и вы не можете дотянуться до ветки. Вы направляетесь в гараж в по- исках чего-то или сочетания чего-то с чем-то, что поможет вам убрать ветку из желоба. Есть ли что-то такое, что может увеличить длину стремянки, чтобы вы смогли схватить или сбить ветку? Возможно, вы можете просто взобраться на крышу и достать ветку оттуда? Вот это и называется решением задач, и это деятельность творческая. Хотите верьте, хотите нет, но при проектировании оригинальной програм- мы мыслительный процесс у вас в голове похож на то, что происходит
12 Введение в голове человека, пытающегося придумать, как убрать ветку из жело- ба, и довольно сильно отличается от мыслительного процесса челове- ка, занятого отладкой существующего цикла for.
Впрочем, внимание авторов большинства книг по программиро- ванию сосредоточено на синтаксисе и семантике. Изучение таких норм любого языка необходимо, но это лишь первый шаг на пути изучения программирования. На самом деле, большинство книг по программированию для начинающих учат, как читать код программ, но не как его писать. Книги, которые сосредоточены на написании, зачастую представляют собой «кулинарные книги», обучающие кон- кретным «рецептам» и их использованию в определенных ситуаци- ях. Такие книги могут быть очень ценными для экономии времени, но не для обучения написанию оригинального кода. Подумайте о ку- линарных книгах в исходном значении этих слов. Несмотря на то, что у замечательных поваров есть кулинарные книги, никто из тех, кто полагается исключительно на кулинарные книги, не может быть по-настоящему хорошим поваром. Замечательный повар понимает ингредиенты, методы готовки и знает, как их сочетать для получе- ния вкусных блюд. Все, что нужно такому повару — это кухня с нуж- ными ингредиентами и оборудованием. Таким же образом замеча- тельный программист понимает синтаксис языка, среду разработки приложения, алгоритмы, принципы разработки и знает, как все это сочетать для создания отличных приложений. Дайте такому про- граммисту технические спецификации, развяжите ему руки полно- функциональной средой программирования — и случится нечто уди- вительное.
Современное обучение программированию, по большей части, не предлагает много руководств по решению задач. Наоборот, пред- полагается, что если программисту дан доступ ко всем инструментам и от него требуют написать большое количество программ, то рано или поздно он научится писать такие программы и будет делать это хорошо. Путь от инициации до просветления может быть полон от- чаяния и растерянности — и слишком многие из тех, кто его начина- ет, не доходят до конца.
Вместо того чтобы учиться методом проб и ошибок, вы може- те научиться решать задачи, используя системный подход. Именно этому и посвящена данная книга. Вы изучите техники организации ваших мыслей, процедуры поиска решений и стратегии, которые могут быть применены к определенным классам задач. Изучив эти подходы, вы сможете высвободить свой потенциал. Он неизвестен, и никто не может с точностью сказать, как работает творческое со- знание. Однако если мы можем разучить музыкальное произведение, воспринять совет по творческому написанию текстов или научиться рисовать, значит, мы можем также научиться творчески решать зада- чи. Это книга не скажет вам, что именно нужно делать, она поможет вам развить скрытые способности решения задач, так, что вы будете
Введение 13
знать, как следует поступить. Предназначение этой книги — помочь вам стать таким программистом, каким вы должны стать.
Цель, которую я ставлю перед вами и перед каждым читателем этой книги, — научиться системному подходу к выполнению каждой задачи по программированию и быть уверенным в том, что в конце концов вы сможете решать любые из них. Когда вы закончите чи- тать эту книгу, я хочу чтобы вы думали как программист и верили в то,
что вы программист.
Об этой книге
Объяснив необходимость этой книги, я должен также прокомменти- ровать то, чем эта книга является, а чем нет.
Предварительная подготовка
Эта книга предполагает, что вы уже знакомы с базовыми синтакси- сом и семантикой языка С++ и уже начали писать программы. В боль- шинстве глав предполагается, что вам уже известны конкретные ос- новы С++ — они будут начинаться с обзора этих основ. Если вы только постигаете язык, не переживайте: существует много замечательных книг по синтаксису С++, и вы можете параллельно изучать решение проблем и задач и синтаксис. Просто убедитесь, что вы изучили нуж- ный синтаксис прежде, чем попытаетесь одолеть задачи в главе.
Выбор тем
Темы, обсуждаемые мной в этой книге, представляют те аспекты, в которых, по моему опыту, у начинающих программистов больше всего проблем. Они также представляют широкий срез различных аспектов программирования начального и среднего этапов.
Я должен, однако, подчеркнуть, что это не «кулинарная книга» с готовыми алгоритмами и шаблонами для решения конкретных за- дач. Несмотря на то, что в последних главах книги обсуждается при- менение широко известных алгоритмов или шаблонов, вам не сле- дует использовать эту книгу как «шпаргалку», которая поможет вам решить конкретные задачи или сконцентрироваться лишь на главах, имеющих непосредственное отношение к вашим текущим задачам.
Вместо этого я бы посоветовал вам проработать всю книгу и пропу- скать тот или иной раздел только в том случае, если вам не хватает знаний для усвоения материала.
Стиль программирования
Небольшое замечание о стиле программирования в данной книге: эта книга не посвящена высокопроизводительному программирова- нию или запуску наиболее компактного и эффективного кода. Вы- бранный мной стиль, в первую очередь, отвечает задаче удобочита- емости. В некоторых случаях для четкой иллюстрации описанного
14 Введение правила я даже делаю несколько шагов, несмотря на то, что это же действие можно было выполнить за один шаг.
Некоторые вопросы стиля программирования будут описаны в этой книге, но они относятся к большим вопросам, как, например, что должно, а что не должно быть включено в класс, а не к малень- ким вопросам, таким как отступы строк программного кода. Как раз- вивающийся программист, вы, разумеется, захотите применить наи- более удобочитаемый стиль для всех выполняемых работ.
Упражнения
В эту книгу я включил большое количество упражнений по програм- мированию. Но это не учебник, поэтому вы не найдете ответов к упражнениям в конце книги. Упражнения лишь дают вам возмож- ность применить на практике подходы, описанные в главе. Выпол- нять упражнения или нет — решать вам, однако практическое при- менение этих подходов очень важно. Простое чтение книги не даст вам ничего. Помните, что эта книга не скажет вам, что именно нуж- но сделать в той или иной ситуации. Применяя техники, показанные в этой книге, вы самостоятельно поймете, что нужно делать. Более того, повышение вашей самооценки — еще одна из целей этой кни- ги — подразумевает достижение успеха. На самом деле, когда вы пой- мете, что можете решить любую задачу в той или иной области, это будет означать, что вы проработали достаточное количество упраж- нений. В конце концов, выполнение упражнений по программиро- ванию должно приносить вам удовольствие. Выполнение этих задач должно быть не рутиной, но вызовом вашим возможностям.
Воспринимайте эту книгу, словно полосу препятствий в вашей голове. Прохождение полосы препятствий увеличивает вашу силу, выносливость, ловкость и дает вам уверенность в собственных спо- собностях. По мере прочтения этой книги и применения описанных в ней подходов на практике вы разовьете уверенность в себе и при- обретете навыки решения задач, которые сможете использовать в любой ситуации при программировании. Встретив сложную задачу в будущем, вы будете знать подход к ее решению.
Почему С++?
Программный код примеров в данной книге написан на языке С++.
При этом следует отметить, что книга посвящена решению проблем, не обязательно характерных для этого языка. В книге вы не найде- те большого количества советов и приемов, подходящих только для
С++. Общие концепции, которым она обучает, могут быть реализова- ны с помощью любого языка программирования. Тем не менее мы не можем обсуждать программирование, не затрагивая программы, по- этому для примеров я выбрал конкретный язык для примеров.
С++ был выбран по многим причинам. Во-первых, этот язык по- пулярен во многих проблемных областях. Во-вторых, так как С++