Полезное программирование
Практическое руководство Практическое пособие
Покупка
Основная коллекция
Тематика:
Программирование и алгоритмизация
Издательство:
СОЛОН-Пресс
Автор:
Комлев Николай Юрьевич
Год издания: 2020
Кол-во страниц: 256
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-91359-171-5
Артикул: 663226.02.99
Уникальное руководство к действию, опыт и практика, сконцентрированные на двух сотнях страниц. Книга для тех, кто умеет программировать и уже готов этим зарабатывать. Курс молодого, но профессионального программиста. Практические советы. Что пригодится вам из пройденного и сданного. Что вы будете программировать сначала, а что позже, когда наберётесь опыта. К чему ешё можно применить ваш программистский талант, чтобы руководство одобрило и поощрило. Кратко, доступно, убедительно.
Тематика:
ББК:
УДК:
ОКСО:
- Среднее профессиональное образование
- 09.02.03: Программирование в компьютерных системах
- 09.02.05: Прикладная информатика (по отраслям)
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов.
Для полноценной работы с документом, пожалуйста, перейдите в
ридер.
Комлев Н. Ю. Полезное Программирование Москва СОЛОН-Пресс 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. Какую долю от объема пятимерного куба составляет объём вписанного в него шара? А от десятимерного? Арнольд В.И Математический тривиум