Система Orphus

Практика программирования

Авторы: Б. Керниган
Р. Пайк
Издательство: "Невский диалект", 2001
381 страница

Материал предоставил: Александр Шаргин
Найти в магазинах
Купить в Озоне (168 руб.)

Аннотация

Предисловие переводчика
Содержание
Комментарии

Аннотация

Книга написана известнейшими американскими специалистами — авторами многих книг (в том числе переведенных на русский язык) и программистами (разработчиками таких систем, как ОС UNIX, язык программирования Си, язык скриптов AWK и др.). В систематической форме в ней излагаются основанные на многолетнем и разностороннем опыте рекомендации авторов: как надо программировать, как разрабатывать программу, как ее писать, как отлаживать, какие средства выбирать.

Книга нужна каждому активно работающему программисту и студентам, специализирующимся в создании программного обеспечения. Она может (и должна бы) использоваться в качестве учебного пособия по соответствующим курсам.

Предисловие переводчика

Программировать трудно. Программировать хорошо — очень трудно. И о том, как нужно правильно программировать, пишут много. Но… сколько людей — столько мнений, и часто создатели очередной стройной системы программирования становятся жертвами этой стройности. Объявляют, например, что имена переменных должны быть осмысленными, и пишут (не преувеличивая):

basicmatrix[basicmatrixrow, basicmatrixcolumn] := basicmatrix[basicmatrixrow, basicmatrixcolumn] + 1;

начинают следить за правильными отступами и превращают программу в бесконечную кишку; заявляют, что “структурное программирование” и “программирование без goto” — это синонимы, и “из принципа” уродуют программную логику, лишь бы извести опальный оператор.

Эта книга НЕ ТАКАЯ. В ней систематически изложен колоссальный опыт известных специалистов — известных авторов (в том числе авторов книг, переведенных на русский язык) и известных программистов (разрабатывавших ОС UNIX, язык программирования Си, язык скриптов AWK, систему полиграфической подготовки текстов TROFF, во многом повлиявшую на ТЕХ Д. Кнута), а также их многочисленных коллег. Книга учит тому, как надо программировать: как разрабатывать программу, как ее писать, как отлаживать, какие средства выбирать. Интересно, что рекомендации даже слегка противоречат друг другу, тем самым делая невозможным их использование “оголтелыми пуристами”. Сам стиль изложения, вся книга побуждают к разумному выбору сбалансированных средств. С моей точки зрения, эта книга нужна каждому активно работающему программисту.

Может быть, мне она так понравилась потому, что, не будучи в состоянии так красиво все это написать, по самим рекомендациям я был с авторами почти во всем согласен. Многим из этих рекомендаций я следую уже много лет, другие, новые для меня, оказывались вполне по душе и сразу же брались на вооружение. Все время хотелось восклицать “И я…” или “А я…”, скажем: “И я предпочитаю отладчикам свои отладочные печати”, “А я еще использую отладочные печати, создающие ПостСкриптовый файл”. Некоторые из несдерживаемых эмоций нашли выход в примечаниях (все подстрочные примечания появились в книге в процессе перевода).

Я надеюсь, что “Практику программирования” ждет у российского читателя не меньший успех, чем был (и есть) у других книг этих авторов.

И. В. Романовский

Содержание

Предисловие редактора перевода

Введение

1. Стиль

1.1. Имена
1.2. Выражения
1.3. Стилевое единство и идиомы
1.4. Макрофункции
1.5. Загадочные числа
1.6. Комментарии
1.7. Стоит ли так беспокоиться?
Дополнительная литература

2. Алгоритмы и структуры данных

2.1. Поиск
2.2. Сортировка
2.3. Библиотеки
2.4. Быстрая сортировка на языке Java
2.5. "O большое"
2.6. Динамически расширяемые массивы
2.7. Списки
2.8. Деревья
2.9. Хэш-таблицы
2.10. Заключение
Дополнительная литература

3. Проектирование и реализация

3.1. Алгоритм цепей Маркова
3.2. Варианты структуры данных
3.3. Создание структуры данных в языке С
3.4. Генерация вывода
3.5. Java
3.6. С++
3.7. Awk и Perl
3.8. Производительность
3.9. Уроки
Дополнительная литература

4. Интерфейсы

4.1. Значения, разделенные запятой
4.2. Прототип библиотеки
4.3. Библиотека для распространения
4.4. Реализация на С++
4.5. Принципы интерфейса
4.6. Управление ресурсами
4.7. Abort, Retry, Fail?
4.8. Пользовательские интерфейсы
Дополнительная литература

5. Отладка

5.1. Отладчики
5.2. Хорошие подсказки, простые ошибки
5.3. Трудные ошибки, нет зацепок
5.4. Последняя надежда
5.5. Невоспроизводимые ошибки
5.6. Средства отладки
5.7. Чужие ошибки
5.8. Заключение
Дополнительная литература

6. Тестирование

6.1. Тестируйте при написании кода
6.2. Систематическое тестирование
6.3. Автоматизация тестирования
6.4. Тестовые оснастки
6.5. Стрессовое тестирование
6.6. Полезные советы
6.7. Кто осуществляет тестирование?
6.8. Тестирование программы markov 6.9. Заключение
Дополнительная литература

7. Производительность

7.1. Узкое место
7.2. Замеры времени и профилирование
7.3. Стратегии ускорения
7.4. Настройка кода
7.5. Эффективное использование памяти
7.6. Предварительная оценка
7.7. Заключение
Дополнительная литература

8. Переносимость

8.1. Язык
8.2. Заголовочные файлы и библиотеки
8.3. Организация программы
8.4. Изоляция
8.5. Обмен данными
8.6. Порядок байтов
8.7. Переносимость и внесение усовершенствований
8.8. Интернационализация
8.9. Заключение
Дополнительная литература

9. Нотация

9.1. Форматирование данных
9.2. Регулярные выражения
9.3. Программируемые инструменты
9.4. Интерпретаторы, компиляторы и виртуальные машины
9.5. Программы, которые пишут программы
9.6. Использование макросов для генерации кода
9.7. Компиляция "на лету"
Дополнительная литература

Эпилог

Приложение: свод правил

Стиль
Интерфейсы
Отладка
Тестирование
Производительность
Переносимость

Алфавитный указатель

Комментарии

Александр Шаргин

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

Что касается самой книги, я бы в первую очередь порекомендовал её начинающим и не очень "продвинутым" программистам. Она поможет им отвлечься от синтаксиса записи цикла в Паскале и задуматься о "вечных ценностях" программирования, фундаментальных проблемах и способах их преодоления. Тем не менее, программисту со стажем книга также может оказаться полезной. Хотя многое из того, о чём пишут авторы, ему, вероятно, уже известно (в том числе из собственного горького опыта), книга поможет ему систематизировать свои знания, а может быть и переоценить некоторые ценности.