Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Полезное программирование

Практическое руководство Практическое пособие
Покупка
Основная коллекция
Артикул: 663226.02.99
Уникальное руководство к действию, опыт и практика, сконцентрированные на двух сотнях страниц. Книга для тех, кто умеет программировать и уже готов этим зарабатывать. Курс молодого, но профессионального программиста. Практические советы. Что пригодится вам из пройденного и сданного. Что вы будете программировать сначала, а что позже, когда наберётесь опыта. К чему ешё можно применить ваш программистский талант, чтобы руководство одобрило и поощрило. Кратко, доступно, убедительно.
Комлев, Н. Ю. Полезное программирование : практическое пособие / Н. Ю. Комлев. - Москва : СОЛОН-Пресс, 2020. - 256 с. - ISBN 978-5-91359-171-5. - Текст : электронный. - URL: https://znanium.com/catalog/product/1858789 (дата обращения: 04.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Комлев Н. Ю.

Полезное 
Программирование

Москва
СОЛОН-Пресс
2020

УДК 681.3
ББК 32.973-18
      К 63

Комлев Н. Ю. 
    Полезное программирование. — М.: СОЛОН-Пресс, 2020. — 256 с.: ил. 

ISBN 978-5-91359-171-5

Уникальное руководство к действию, опыт и практика, сконцентрированные на двух сотнях страниц.
Книга для тех, кто умеет программировать и уже готов этим зарабатывать. 
Курс молодого, но профессионального программиста. Практические советы.
Что пригодится вам из пройденного и сданного. Что вы будете программировать сначала, а что позже, когда наберётесь опыта. К чему ещё можно применить ваш программистский талант, чтобы руководство одобрило и поощрило. Кратко, доступно, убедительно.

КНИГА — ПОЧТОЙ

Книги издательства «СОЛОН-Пресс» можно заказать наложенным платежом (оплата 
при получении) по фиксированной цене. Заказ можно оформить одним из трех способов:
1. Послать открытку или письмо по адресу: 123001, Москва, а/я 82.
2. Оформить заказ на сайте www.solon-press.ru в разделе «Книга — почтой».
3. Заказать книгу по тел. (495) 617-39-64, (495) 617-39-65.
Каталог издательства высылается по почте бесплатно.
При оформлении заказа следует правильно и полностью указать адрес, по которому 
должны быть высланы книги, а также фамилию, имя и отчество получателя. Желательно 
указать дополнительно свой телефон и адрес электронной почты.
Через Интернет вы можете в любое время получить свежий каталог издательства 
«СОЛОН-Пресс», считав его с адреса 
http://www.solon-press.ru/docs/Katalog_Solon_Press.xls.
Интернет-магазин размещен на сайте www.solon-press.ru.

По вопросам приобретения обращаться:
ООО «АЛЬЯНС-БУКС»
Тел: (499) 725-54-09, 725-50-27,
www.alians-kniga.ru

 
© Комлев Н. Ю., 2020
ISBN 978-5-91359-171-5 
© «СОЛОН-Пресс», 2020

Посвящается 
всем людям, 
которые хотят получить пользу  
от программирования

СОДЕРЖАНИЕ

Вступление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

Почему Полезное Программирование? И кому полезное?. . . . . . . . . . . . . . . . . . . . .7
А на каком языке писать? А какая разница? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Что должен знать читатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Уточнения и ограничения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
Предупреждения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
Что ещё можно почитать, кроме меня? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
Самореклама. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
Это сладкое слово — халява . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15

Глава 1. Всё-таки учебная. Но в хорошем смысле . . . . . . . . . . . . . . . . . . . . . . . . . 17

Вступление в предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
С высоты птичьего полёта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Теперь о главном . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
Продолжение вступления в предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
Практическая часть. Просто сортировка. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
Зачем нам сортировка Шелла?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
И факториал! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31

Глава 2. Не совсем учебная. Графики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

Немного о графиках . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
Немного о графиках. Продолжение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Немного о графиках. Финиш. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
Совсем всё. Финиш . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
Есть ли жизнь после финиша? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54

Глава 3. С чего начинается работа. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

О чём речь? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
Что-то длинное. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
Очень просто – массив. Свёртка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
Массив. Меняются значения. И меняется длина . . . . . . . . . . . . . . . . . . . . . . . . . . .63
Похожие задачи, но для файлов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
Похожие задачи для списков.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
Объекты, вид сбоку . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
Задача напоследок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71

Глава 4. Как продолжается работа. Что-то ветвистое . . . . . . . . . . . . . . . . . . . . . . 80

Преамбула. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80

Что-то посложнее. Короткий раздел . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
А теперь о главном. Важное . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
Что делать? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87

Глава 5. Системы контроля версий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

О чём эта глава . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94
Скучное. Предмет и терминология . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
Лирическое отступление, или а зачем это вообще надо?. . . . . . . . . . . . . . . . . . . . . .97
Какие они вообще бывают? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
А теперь о главном . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
А теперь всё вместе и разом!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100
Вася один на ландшафте . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
Вспомогательное счастье . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103
Подтянулась и компания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108
Как всё сделать хорошо . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111
Про Одну Кнопку. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115
То, что называется «Бинарные файлы» . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124
Как НЕ НАДО работать с VSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126

Глава 6. О скучном — динамические библиотеки . . . . . . . . . . . . . . . . . . . . . . . . . 131

Что это такое, а также историческая справка, которую можно не читать. . . . . . . .131
А как с этим теперь? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133
Сначала мы её создадим! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .134
Статическая загрузка и как это может пригодиться . . . . . . . . . . . . . . . . . . . . . . . .137
Динамическая загрузка и расширение возможностей. . . . . . . . . . . . . . . . . . . . . . .139
Польза от динамического вызова. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141
Библиотеки – технические подробности. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146
Реализация проекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147

Глава 7. Мелкие технические подробности. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Легко ли быть жадным? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151
А что делать?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152
Теперь конкретно об эффективности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154
Оптимизируем на самом нижнем уровне. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156
Улучшаем алгоритм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
Меняем алгоритм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .162

Глава 8. Техника программирования, или Это вы обязательно должны знать. . . 164

Абстрактные рассуждения или а оно нам надо? . . . . . . . . . . . . . . . . . . . . . . . . . . .164
Кратко о предмете обсуждения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166
Рядом лежащие вопросы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167
Подумаем конкретно, на примерах. Первый пример . . . . . . . . . . . . . . . . . . . . . . .168
Пятый способ, бессмысленный и бесполезный . . . . . . . . . . . . . . . . . . . . . . . . . . .173

 Содержание

Содержание

То же самое, вид сбоку. Второй пример. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175
Всё не так и всё разное. Третий пример. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176

Глава 9. Что должен знать программист? Как он должен себя вести? . . . . . . . . 178

Нет, не всё . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178
О чём я вообще? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179
Математика. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180
Информатика (Computer Science) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183

Глава 10. Для дома, для семьи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

Зачем это надо?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185
Несложный бредогенератор. Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . .186
Бредогенератор. Сначала немного о ЛИСПе. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191
Бредогенератор. Реализация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .192
Бредогенератор. Доработка напильником и планы на будущее . . . . . . . . . . . . . . .199
Искатель тайного смысла. Обсуждение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
Искатель тайного смысла. Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . .203
Искатель тайного смысла. Подготовка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203
Искатель тайного смысла. Реализация в первом приближении . . . . . . . . . . . . . . .210
Искатель тайного смысла. Развитие темы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214
Расстояние между словами. Введение в тему. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219
Расстояние между словами. Реализация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221

Приложения. Справочник обо всём . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

Приложение A. Всё о данных. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224
Приложение B. Всё об организации программы на нескольких страницах . . . . . .228
Приложение C. Всё о процедурах и функциях . . . . . . . . . . . . . . . . . . . . . . . . . . . .231
Приложение D. Всё продвинутое программирование на нескольких страницах. .235
Приложение E. Всё о списках. Или почти всё… . . . . . . . . . . . . . . . . . . . . . . . . . . .240
Приложение F. Всё Объектно ориентированное программирование  . . . . . . . . . .242
Приложение G. Простенький модуль для работы со строками. Простой,  
но очень полезный . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247

Задания для самостоятельного развития. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

 
ВСТУПЛЕНИЕ

Почему Полезное Программирование?  
И кому полезное?

Чем эта книга отличается от других? Когда я говорю «от других», я, само со
бой, имею в виду — чем эта книга отличается от других моих книг. Отличается 
она именно тем, что книга эта посвящена именно полезному программированию. 
Есть книги для начинающих, для тех, кто ничего, или почти ничего, не умеет 
(читайте мой нетленный «Самоучитель игры на Паскале»). Есть книги для профессионалов (читайте моё искрящееся неподражаемым юмором «Объектно 
Ориентированное Программирование»). По логике, где-то между ними должна 
находиться книга для тех, кто что-то кое-где уже порой знает, но ещё далеко не 
профессионал. И я тоже так сначала думал. И даже почти написал две книги — 
«Школа игры на (Турбо) Паскале» и «Очень маленькое Delphi». Готовы они были 
на восемьдесят процентов, и это были неплохие книги, поверьте мне. Потом я 
решил, что мыслю одномерно и плоско, и пришёл к выводу, что книги эти ненужные. Почему? 

С книгой по Турбо Паскалю объяснение простое. Я нисколько не сомневаюсь, что это была бы лучшая книга по программированию на Паскале, не только 
моя, но и вообще в мире. Это не потому, что я такой скромный и умный, а потому, что это была бы последняя книга по программированию на Турбо Паскале 
в мире. А тот кто пережил всех конкурентов, дотянул до финиша, и выключает за 
остальными свет — лучший по определению.

Конечно, Паскаль никуда не делся. Он превратился в язык Object Pascal, который потом незатейливо переименовали в Delphi. Вокруг языка Delphi выросла 
среда программирования Delphi. Об этом я мог бы написать много полезного, 
проблема в том, что до меня уже написано много полезного. Число книг по этой 
теме на русском языке исчисляется десятками. Ну и зачем мне писать сто первую 
книгу? Да, она будет лучше предыдущих ста, но кто это заметит и оценит?

Поскольку книги я пишу не ради денег — таки разве это деньги? — а из чистого незамутнённого удовольствия, то я выкинул всё мною почти написанное и 
начал с чистого листа. 

— Способны ль вы кого-нибудь убить?
— Вы шутите, такой как я готов убить любого

Вступление 

— Вы знаете графиню де Бель Флёр?
— Да, в этом доме кое с кем я дружен.
— Вы можете убить её слугу?
— Готов убить всех слуг, и всех служанок, и даже лошадей её кареты.
— Ну, если так, убейте Теодоро.
— Тут надо взяться чуточку иначе.
© Лопе де Вега, Собака на сене

Это всё к тому, что я такой же добрый и трудолюбивый, как и персонаж пьесы. 
Если что, могу всех, включая лошадей её кареты. Но, в нашем случае, для начала, 
действительно надо взяться чуточку иначе.
Сейчас модно на обложке программистских книг рисовать горизонтальную 
диаграмму. Слева абсолютный ноль в программировании, справа барельеф 
«Билл Гейтс убивает Стива Джобса, не сумевшего запрограммировать Тетрис». 
На этом пустом горизонтальном прямоугольнике отображается, для кого предназначена книга. Если прямоугольник закрашен слева — для самых начинающих. Если справа — для профессионалов. Посредине — понятно.

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

научили. К сожалению, школьникам она не подойдёт. Студентам — да, может 
быть даже тем, что пишут курсовые и не знают — как? Но и это вряд ли. Студент старших курсов, который уже полдня где-то работает, причём даже за 
деньги — это да.

Но основной читатель этой книги, которому от неё будет наибольшая польза, 
всё-таки не студент в процессе обучения, даже при этом работающий, а программист, только что начавший исполнять нелёгкие обязанности программиста. Да, 
конечно, он в себе абсолютно уверен, он всё знает, но по приходу на работу его 
почему-то приходится переучивать.
Я хочу объяснить, почему одни студенты при приёме на работу оказываются 
лучше других. Чего от студента, извините, уже программиста, на работе хотят. 
Какую работу ему, скорее всего, поручат. В конце концов, я хочу показать (на 

А на каком языке писать? А какая разница?

примерах), как пишется программа. Причём программа не по заданию из учебника — хотя мы с этого непременно начнём. И не программа, которую мы пишем неведомо для кого за бешеные деньги по странному ТЗ (Техническому Заданию). Заодно вы узнаете, что такое Техническое Задание, и почему его никогда не бывает. 

Ещё раз повторю — я знаю, как надо. Сначала меня учили. Потом я был маленьким программистом под руководством маленьких начальников. Потом я 
сам учил других и стал маленьким начальником. Поэтому я знаю. Не всё, но почти всё.

А на каком языке писать? А какая разница?

На каком языке программирования буду я объяснять и приводить примеры — 

в целом это важно, но не очень важно, потому что книга не об этом. Но, поскольку из всех языков я лучше всего знаю Паскаль, переходящий в Delphi, то почти 
все примеры на нём и будут. Можно рассматривать Паскаль в основном тексте 
книги в качестве псевдокода, в качестве чего он, Паскаль, массово использовался раньше и часто используется сейчас. Для тех, кому интересно, или полезно, 
весь Паскаль, ныне Delphi, будет на немногих страницах изложен в приложении, 
то, что я нём считаю важным, разумеется.
Ещё надо обдумать, не следует ли написать главу о C#, или сразу книгу. Разумеется, все знают, что C# изобрела та же команда, что раньше изобретала Delphi, 
поэтому сейчас наблюдается массовая миграция программистов с Delphi на C#, 
точно так же как и миграция с C++ на C#.

Что должен знать читатель

Ещё раз вернёмся к вопросу, кого я предполагаю читателем этой книги. Перед 
моим внутренним взором встаёт только что закончивший Университет специалист, или магистр, приступивший к своей первой работе. В реальности это скорее будет специалист или магистр, приступивший к своей второй работе, потому 
что на первой работе он трудился ещё в Университете. Но та работа не вполне 
считается, она была не вполне настоящая. Не потому что он, магистр, был плохим программистам, а потому, что студентам как-то не до конца доверяют, и 
причины этому есть.
Помню, однажды пришёл к нам на практику юноша, серьезно пришёл, даже 
принёс кружку, чай пить. На следующий же день с утра позвонил, и сказал что 
задержится, потому что ему срочно надо зайти в военкомат… Больше мы его не 

Вступление 

видели и не слышали. Искренне верю, что его немедленно призвали и послали. 
Врать не буду, кружка до сих пор с нами.
Кроме того, студенты всё время бегают, туда-сюда, туда-сюда, работа, университет, военкомат, обследование… Никакому, даже самому маленькому и терпеливому начальнику это не понравится. И ещё студенты всё время хотят поступить в аспирантуру, это тоже не прибавляет к ним симпатий, даже если аспирантура заочная. Так что пусть лучше Нашим Читателем будет человек, разорвавший 
все связи со своим Высшим Учебным Заведением и пришедший на работу просто работать.

// Уточнение 

Всё вышесказанное о недостатках студентов касается в первую очередь их ненадёжности как работников, а совсем не их ума. Бывают и невообразимо тупые, но чаще 
всё-таки наоборот. Один из бывших у нас студентов позже состоял в команде, выигравшей то ли чемпионат, то ли олимпиаду России по программированию. Занудства 
ради, на тот момент он был ещё студентом колледжа, бывшего индустриального техникума. Наберите в Google ‘колледж имени Коняева хакер’. Нет, это не он.

// конец Уточнения

Читатель должен уметь программировать. От слова вообще. Я не буду объяс
нять, что такое цикл, массив, процедура, функция. Я даже не буду объяснять, что 
такое класс и что такое — экземпляр класса. Но, поскольку я очень добрый, я это 
объясню. Но, поскольку я не только очень добрый, но ещё и очень честный, то, 
чтобы не увеличивать объём книги, я объясню все понятия программирования в 
Приложении, очень коротко.
Единственное, что я буду объяснять подробно в основном тексте, это использование указателей, В отличие от переменных, условных операторов, циклов и 
массивов, указатели никак нельзя назвать интуитивно понятными. Сегодня указатели не все могут понимать. Вернее, понимать могут не только лишь все, мало 
кто может это делать. 
Кстати, раньше многие учёные (Дейкстра) и типа учёные работали в области 
формального доказательства правильности программ, но указатели при этом 
стыдливо игнорировались. Ещё, как выяснилось, не все могут сегодня понимать 
и файлы.
Хотя все примеры в книге на Delphi (в девичестве Pascal), программистам на 
C++ беспокоится нечего. Как всем известно, Дельфи гораздо проще и примитивнее чем C, так что они (сишники) поймут всё просто с полпинка.

Уточнения и ограничения

Уточнения и ограничения

Что тут будет и чего не будет. Я — программист. Нет, вы не поняли — я настоящий программист. Нет, вы опять не поняли. Здесь слово «настоящий» не обозначает «суперпрограммист». Я — просто настоящий программист. От слова 
«просто». Что это значит? Я не специалист по базам данных — хотя ими занимался. Я не специалист по сетям, хотя ими занимался тоже. Ещё я не Уэб-Дизайнер, 
потому что этим я не занимался вообще. Я Просто Программист. Чем и горжусь. 
Последние десять лет я даже не программировал, что называется, «по железу». 
И ещё я не знаю эту, как её, бухгалтерия какая-то…

К чему это всё? А к тому, что я знаю, как написать правильную, хорошую, 

годную программу. И чтобы она потом ещё и работала. При условии, что эта программа не относится к базам данных, сетям, Интернету и прочей дребедени. И к 
бухгалтерии.
А вот цитата, что называется, в масть:

Вы можете получить автомобиль любого цвета, при условии, что этот 

цвет — чёрный  

© Генри Форд.

Применительно к программированию, смысл этой фразы такой. Если вы научитесь программировать вообще, то потом вы легко освоите сети, базы, облачные вычисления и прочую ерунду.

Предупреждения

Сейчас это называется Disclaimer, типа, я вас предупредил, фирма не отвечает, если ваши данные внезапно куда-то исчезнут или где-то появятся.

Delphi — это не среда разработки, а уже давно язык программирования. Так 

решила фирма Borland. Был раньше язык программирования Turbo Pascal, потом 
появился Object Pascal, а вот теперь оно называется Delphi.
В этой книге будет меньше программных текстов, чем в моих предыдущих 
творениях и больше просто текста. Это естественно. Чем выше уровень подготовки читателя и сложнее возложенные на него обязанности, тем меньше в книге кода. Почитайте, наконец, я много раз рекомендовал, Брукса младшего, там 
кода нет вообще, это конечно предельный случай, я до этого ещё не дорос.
Тексты программ здесь не доведены до совершенства и предельного блеска. 

Не потому, что я не вижу недостатков — я их вижу и, как правило, их даже указываю. Не потому, что я не могу их исправить — честное слово, могу. Не потому, 
что мне лень — хотя, конечно, лень. А потому, что это книга для хотя и начина
Вступление 

ющих, но уже профессиональных программистов. Идеального кода в реальной, 
неидеальной жизни не бывает. Код пишется исходя из того отрезка пути, который программист видит перед собой. А дорога резко поворачивает — и мы видим 
картину Репина «Приплыли». А по бокам радостно щёлкают клювами Птица Обломинго и литовский политический деятель Обломайтис. И гляжу я на свои программы, написанные совсем недавно и плачу горькими слезами. И, что обидно, 
с годами ничего не меняется, если опыт в эффективном написании кода накапливается, так же быстро совершенствуется и способность принимать неверные 
решения.
Это я всё к тому, что если читателю мои программы местами не нравятся, то 
обычно я это заранее угадываю и заранее рекомендую читателю переписать мутные места прозрачно и ярко. А вообще для программиста, и не только программиста, очень важно, приняв решение, выполнять его. Даже если возникают сомнения. 

— Это дорога? — Да!
— Она ведёт к цели? — Да!
— Бежим! 
© Фридман, это хороший Фридман, который физик.

И, просто на всякий случай, я вовсе не считаю всех пишущих на C++ идиотами, даже если складывается такое впечатление. Это вполне приличные, милые, 
забавные люди. Бывают даже и девушки. Просто я глубоко убеждён, что C — 
язык для очень умных людей, а все остальные должны писать на Delphi.
И ещё, я везде обращаюсь к читателю на «вы» с маленькой буквы, но это не от 
недостатка уважения. Просто я где-то прочитал, что можно и так.

Что ещё можно почитать, кроме меня?

Разумеется, в полной силе остаётся список литературы из предыдущих книг, 
но здесь я приведу только те из них, которые касаются только программистов. Те 
книги, которые относятся к деятельности маленьких и больших начальников, 
проектировщиков и аналитиков, я опущу. За прошедшее время литература эта 
ничуть не стала хуже, так что напоминаю, без комментариев. 

Из старого, даже очень старого, но того, что полезно будет прочитать:
Б.Керниган, Ф.Плоджер «Элементы стиля программирования», “Радио и 
связь”, 1984 “The Elements of Programming Style”
Лу Гринзоу «Философия программирования Windows 95/NT», СанктПетербург, “Символ”,1997 Lou Grinzo Zen of Windows 95 Programming. 

Что ещё можно почитать, кроме меня?

Роджерс «Алгоритмические основы машинной графики» Мир, 1989 
“Procedural Elements for Computer Graphics”
Дж.Фоли, А. Вэн Дэм «Основы интерактивной машинной графики» Мир, 
1985 “Fundamentals of Interactive Computer Graphics” в двух томах
Б.Мейер, К.Бодуэн «Методы программирования» Мир, 1982, для разнообразия, перевод с французского 

Из не очень старого:
Уэллингс «Как не надо программировать на С++» Питер “How Not to 
Program in C++”
Стивенс «Delphi. Готовые алгоритмы» ДМК Пресс “Ready-to-run Delphi 
algorithms”
Керниган, Брайан «Практика программирования»  Невский Диалект “The 
Practice of Programming”
Э.ант, 
Д.Томас 
«Программист-прагматик» 
Питер 
“The 
PragmaticProgrammer”
С.Макконелл «Совершенный код» Питер, 2005 “Code Complete”

Это очень толстая книга, поэтому я прокомментирую. Первые две четверти 
книги унылы, третья четверть веселее и полезнее, дальше ещё лучше.

А ещё, я прочитал книгу, к сожалению, покойного автора. К сожалению для 

меня, не для него — потому что при его жизни я о нём и не слыхал, а ему теперь 
вообще всё равно. Это академик Арнольд. Здесь я бы хотел порекомендовать его 
замечательную книгу

В.И. Арнольд «Что такое математика», М.: МЦНМО, 2002 

Что такое МЦНМО, я, врать не буду, не знаю, но наверняка что-то страшное 
и ужасное.

Я всегда думал, что я тролль семьдесят девятого уровня. Я ошибался. Я пребываю в грехе Гордыни, по Библии это Смертный Грех Номер Один, согласно 
номенклатуре смертных грехов. Ещё раз, я ошибался. Я всего-навсего тролль 
семьдесят восьмого уровня. Семьдесят девятого — это Арнольд. А тролль восьмидесятого уровня у нас в стране только один.
Предложу мимоходом две задачки от Арнольда, не из этой книги, просто из 
сборника задач от его имени. 
Первая:

16. Какую долю от объема пятимерного куба составляет объём вписанного 
в него шара? А от десятимерного? 
Арнольд В.И Математический тривиум