![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Книга написана известнейшими американскими специалистами — авторами многих книг (в том числе переведенных на русский язык) и программистами (разработчиками таких систем, как ОС UNIX, язык программирования Си, язык скриптов AWK и др.). В систематической форме в ней излагаются основанные на многолетнем и разностороннем опыте рекомендации авторов: как надо программировать, как разрабатывать программу, как ее писать, как отлаживать, какие средства выбирать.
Книга нужна каждому активно работающему программисту и студентам, специализирующимся в создании программного обеспечения. Она может (и должна бы) использоваться в качестве учебного пособия по соответствующим курсам.
Программировать трудно. Программировать хорошо — очень трудно. И о том, как нужно правильно программировать, пишут много. Но… сколько людей — столько мнений, и часто создатели очередной стройной системы программирования становятся жертвами этой стройности. Объявляют, например, что имена переменных должны быть осмысленными, и пишут (не преувеличивая):
basicmatrix[basicmatrixrow, basicmatrixcolumn] := basicmatrix[basicmatrixrow, basicmatrixcolumn] + 1; |
начинают следить за правильными отступами и превращают программу в бесконечную кишку; заявляют, что “структурное программирование” и “программирование без goto” — это синонимы, и “из принципа” уродуют программную логику, лишь бы извести опальный оператор.
Эта книга НЕ ТАКАЯ. В ней систематически изложен колоссальный опыт известных специалистов — известных авторов (в том числе авторов книг, переведенных на русский язык) и известных программистов (разрабатывавших ОС UNIX, язык программирования Си, язык скриптов AWK, систему полиграфической подготовки текстов TROFF, во многом повлиявшую на ТЕХ Д. Кнута), а также их многочисленных коллег. Книга учит тому, как надо программировать: как разрабатывать программу, как ее писать, как отлаживать, какие средства выбирать. Интересно, что рекомендации даже слегка противоречат друг другу, тем самым делая невозможным их использование “оголтелыми пуристами”. Сам стиль изложения, вся книга побуждают к разумному выбору сбалансированных средств. С моей точки зрения, эта книга нужна каждому активно работающему программисту.
Может быть, мне она так понравилась потому, что, не будучи в состоянии так красиво все это написать, по самим рекомендациям я был с авторами почти во всем согласен. Многим из этих рекомендаций я следую уже много лет, другие, новые для меня, оказывались вполне по душе и сразу же брались на вооружение. Все время хотелось восклицать “И я…” или “А я…”, скажем: “И я предпочитаю отладчикам свои отладочные печати”, “А я еще использую отладочные печати, создающие ПостСкриптовый файл”. Некоторые из несдерживаемых эмоций нашли выход в примечаниях (все подстрочные примечания появились в книге в процессе перевода).
Я надеюсь, что “Практику программирования” ждет у российского читателя не меньший успех, чем был (и есть) у других книг этих авторов.
И. В. Романовский
Предисловие редактора перевода
Введение
1. Стиль
2. Алгоритмы и структуры данных
3. Проектирование и реализация
4. Интерфейсы
5. Отладка
6. Тестирование
7. Производительность
8. Переносимость
9. Нотация
Эпилог
Приложение: свод правил
Алфавитный указатель
Есть авторы, чьи книги читать всегда приятно. Потому что глубина, основанная на огромном практическом опыте, сочетается у них с ясностью и простотой изложения. Авторы "Практики программирования" как раз из их числа.
Что касается самой книги, я бы в первую очередь порекомендовал её начинающим и не очень "продвинутым" программистам. Она поможет им отвлечься от синтаксиса записи цикла в Паскале и задуматься о "вечных ценностях" программирования, фундаментальных проблемах и способах их преодоления. Тем не менее, программисту со стажем книга также может оказаться полезной. Хотя многое из того, о чём пишут авторы, ему, вероятно, уже известно (в том числе из собственного горького опыта), книга поможет ему систематизировать свои знания, а может быть и переоценить некоторые ценности.
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |