Текст этой страницы сейчас безнадёжно устарел. Конечно, радикальная смена формата создаваемой книги — замена одной большой книги четырёхтомником, два тома которого к настоящему моменту уже вышли — не могла не сказаться на общей концепции содержания. Какими получились в итоге первые четыре части из исходно планировавшихся семи, вы можете посмотреть сами — оба вышедших тома доступны здесь на сайте в виде PDF-файлов. Что планируется к включению в будущие тома, можно узнать на новой странице, посвящённой планируемому развитию проекта.
update: Книга в общих чертах завершена, так что изложенные здесь планы теперь представляют разве что исторический интерес. С оглавлением получившейся рукописи (заметим, очень сильно отличающимся от того, что написано здесь) можно ознакомиться в новости о завершении рукописи, там оно прилагается отдельным файлом.
Некоторые главы будущей книги будут сформированы из уже написанных текстов после их глубокой переработки, но многое предстоит написать с нуля. Оглавление будущей книги мыслится примерно таким:
- Часть первая: предварительные сведения
- Что такое компьютер
Имея дело с многообразием компьютерных устройств, окружающих нас сегодня, мы забываем, что исходная функция компьютера — считать; большинство из нас не помнит, когда в последний раз использовали компьютер для вычислений. Как так получилось?
- Как правильно использовать компьютер
Добро пожаловать в мир Unix!
- Программы и данные
- Немного теории, или что такое алгоритм
Каждый первый автор учебника почему-то считает своим долгом дать определение алгоритма — не пояснение, о чём идёт речь, не рассказ о предмете, а именно определение, короткую фразу вида «алгоритм — это то-то и то-то». Определение всенепременнейшим образом выделяется крупным жирным шрифтом, обводится рамочкой, снабжается какой-нибудь пиктограммой с восклицательным знаком — словом, делается всё, чтобы убедить как учеников, так и их учителей, что сие подлежит заучиванию наизусть. Собственно, только на это такие определения и годятся: зазубрить, так и не поняв ни слова. На самом же деле определения алгоритма не существует и, более того, существовать не может...
- Ещё немного математики
- Основы комбинаторики
- Множество и его мощность
- Системы счисления
- Часть вторая: язык Паскаль и первые шаги
- Что такое программа, язык программирования, компиляторы и интерпретаторы
- Как выглядит программа на Паскале и как её запустить; понятие оператора на примере writeln
- Переменные, значения, типы, выражения и оператор присваивания
- Логические выражения и логические переменные; оператор ветвления
- Составной оператор
- Цикл: что это такое и зачем; оператор цикла с предусловием
- Структурные отступы и комментарии
- Блок-схемы. Принципы структурного программирования
- Типы char и string; обработка текстов
- Двоичное и текстовое представление чисел; перевод числа в текстовое представление и обратно
- Параметры командной строки
- Массивы; тип массив; строка как частный случай массива
- Задачи поиска максимума и минимума, простейшие алгоритмы сортировки
- Подпрограммы; процедуры и функции, локальные описания, глобальные описания, описания для локального использования в главной программе; правильный выбор порядка описаний в тексте программы
- Параметры-значения и параметры-переменные
- Перечислимый тип, тип-диапазон, понятие порядкового типа, pred и succ
- Индексирование массивов по произвольным порядковым типам
- Тип запись; массивы записей
- Операторы арифметического цикла, цикла с постусловием и выбора
- Операторы break и continue, оператор goto, операторы exit и halt
- Модуль crt и его основные возможности
- Как определить размер окна терминала с помощью GoToXY, WhereX и WhereY
- Функции KeyPressed и ReadKey; расширенные коды управляющих клавиш. Как писать динамические игры в текстовом режиме
- Общее понятие потока ввода-вывода и файла; текстовые файлы
- Ситуация "конец файла" и её обработка, в том числе на стандартном вводе
- Ошибки ввода-вывода и их обработка; посимвольный ввод любых текстовых данных с целью выдачи подробной диагностики пользовательских ошибок
- Структурированные ("типизированные") файлы, произвольный доступ к записям
- Блочные файлы; организация файла с заголовком и записями
- Переменная и её адрес; тип указатель, операции разыменования и взятия адреса, операторы new и dispose
- Односвязные списки и основные приёмы работы с ними
- Модификация списка во время его просмотра; указатель на указатель
- Понятие рекурсии; рекурсия на примере сопоставления с образцом, рекурсия на примере работы с односвязным списком
- Двоичное дерево поиска и приёмы работы с ним
- Двусвязные списки
- Хэш-таблицы
- Основы грамотного оформления программного кода: ещё о структурных отступах, выбор имён, выделение поздадач
- Дополнительный материал: методы сортировки массивов и списков, поддержание списка в отсортированном состоянии, слияние отсортированных потоков
- Дополнительный материал: сбалансированные деревья
- Дополнительный материал: различные подходы к представлению символов, не вошедших в ASCII-таблицу, однобайтовые кодировки, реестр Unicode, кодировка utf-8
- Дополнительный материал: многомодульные программы на Паскале, ключевые слова unit, interface, implementation; понятие библиотеки. Правила разбиения программы на модули и подсистемы.
- Часть третья: архитектура ЭВМ и язык ассемблера
В основу этой части ляжет материал выпущенной ранее книги Программирование на языке ассемблера NASM для ОС Unix, подвергнутый существенной переработке. Следует отметить, что начальное понимание роли операционной системы возникнет именно здесь.
- Часть четвёртая: язык Си
- История создания языка Си; язык Си как заменитель языка ассемблера
- Примеры программ на языке Си
- Система типов языка Си
- Операции языка Си; арифметические выражения
- Операторы языка Си
- Указатели и массивы. Строки
- Функции в языке Си; эмуляция параметров-переменных через передачу адреса
- Ввод-вывод при работе со стандартными потоками ввода-вывода. Почему за использование gets и scanf("%s",...) увольняют с работы
- Тип enum
- Высокоуровневый ввод-вывод при работе с файлами
- Работа с динамической памятью; организация динамических массивов
- Параметры командной строки
- Тип struct и односвязные списки
- Примеры организации двусвязных списков, двоичных деревьев, хеш-таблиц и работы с ними
- Модификатор const
- Многомерные массивы и тип "указатель на массив". Тип "указатель на функцию". Правила чтения сложных деклараций. Директива typedef
- Тип union. Анонимные структуры и объединения, вариантные структуры
- Макропроцессор языка Си; директивы условной компиляции; определение макросимволов в командной строке компилятора
- Организация раздельной трансляции в языке Си; ключевые слова static и extern; заголовочные файлы; защита от повторного включения
- Локальные переменные класса static
- Автоматизированная сборка и автоматическое отслеживание зависимостей
- Интерфейс к операционной системе, обёртки системных вызовов; низкоуровневый ввод-вывод
- Дополнительный материал: вариадические функции
- Дополнительный материал: управление режимом терминала, функции из termios.h
- Дополнительный материал: Библиотека GNU Readline
- Дополнительный материал: Основные возможности библиотеки ncurses
- Дополнительный материал: как написать программу на Си без использования стандартной библиотеки, с написанными на языке ассемблера точкой входа и обёртками системных вызовов
- Часть пятая: взаимодействие с операционной системой
В основу этой части ляжет материал выпущенной в 2006 г. книги Введение в операционные системы, точнее, её части до гл.26 включительно; в итоговом тексте, впрочем, останется довольно немного от исходного материала этой книги, поскольку за прошедшие девять лет моё понимание того, как этот материал должен излагаться, существенно поменялось.
Хотелось бы отметить, что, в числе прочего, при изложении работы с сокетами на основе вызова select здесь даётся понятие событийно-ориентированного построения приложения.
- Часть шестая: разделяемые данные и многопоточное программирование
В основу этой части лягут главы 27, 28 и 29 книги Введение в операционные системы; будет особо подчёркнуто, что с тредами лучше не работать, даже зная, как это делается — иначе говоря, надо знать, как работать с тредами, хотя бы для того, чтобы осознанно принять решение об отказе от их использования. В то же время любому квалифицированному программисту необходимо понимать, зачем нужны мьютексы и семафоры, откуда возникает потребность во взаимоисключении, что такое критическая секция и т.п., в противном случае, к примеру, читая описание архитектуры ядра Linux или FreeBSD, человек просто не поймёт, о чём идёт речь.
- Часть седьмая: объектно-ориентированное программирование и язык Си++
В этой части будет рассказано ядро языка Си++ (без использования каких-либо частей его стандартной библиотеки); этот материал, по-видимому, будет с незначительными изменениями заимствован из книги Введение в язык Си++.
- Часть восьмая (дополнительная): построение графических пользовательских интерфейсов; библиотека Qt
- Часть девятая (дополнительная): парадигмы программирования. Языки Лисп и Пролог
Приведённый план ни в коей мере не является окончательным; итоговая книга может содержать параграфы, которых здесь нет, и не содержать что-то из того, что здесь заявлено (в особенности это касается материала, помеченного как дополнительный). Настоящий план показан исключительно для создания общего впечатления о задуманном.
[<<< НА СТРАНИЦУ ПРОЕКТА]
|