Предисловие

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

В книге нашли отражение пять вопросов, редко рассматриваемых в литературе для начинающих программистов: стиль (или удобочитаемость), проектирование, эффективность (или оптимизация), отладка и тестирование программ. Знание этих вопросов приходит с опытом. Опыт является хорошим учителем, но обучающим довольно медленно и бессистемно. Большинство из тех, кто умеет программировать, убедились в том, что нельзя полностьюота него полагаться в изучении столь важных вопросов.

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

Глава 1 "Стиль программирования" расширена и частично переработана. Глава 2 "Проектирование программ" полностью переработана с использованием совершенно нового материала: особое внимание уделяется методу проектирования сверху вниз и структурному программированию. Глава 3 "Эффективность программ" выдержала испытание временем и претерпела лишь незначительные изменения. Глава 4 "Отладка программ" переработана немного: в центре внимания находится вопрос о правильности написания программы с первого раза. Глава 5 "Тестирование программ" переделана довольно значительно: особо отмечены преимущества метода тестирования сверху вниз; обсуждаются также современные, более сложные методы тестирования программ. Глава 6 "101 задача для программиста" также переработана, расширена, задачи систематизированы; хотя здесь приведена 101 задача, в действительности их значительно больше, поскольку в некоторых из них предлагается разработать несколько программ. Задачи этой главы рассчитаны на любой уровень знаний читателя и охватывают достаточно полный набор вопросов по программированию. Упражнения в конце каждой главы претерпели существенные изменения. Они пересмотрены, перекомпонованы и расширены за счет добавления новых задач.

В конце каждой главы помещены советы программисту, отражающие ключевые положения главы. Справочно-библиографичес-кий материал первого издания также подвергся изменениям.

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

Судя по отзывам, первое издание книги привлекло внимание широкого круга читателей: от профессиональных программистов, работающих с книгой самостоятельно, до лиц, обучающихся на курсах по программированию. В связи с этим упражнения, приводимые в конце каждой главы, я разделил на четыре категории: "Повторение пройденного", "Задания", "Программы" и "Проекты",

Упражнения первого типа служат для того, чтобы выяснить, насколько хорошо усвоен материал главы. Обучающийся должен быть в состоянии ответить на предлагаемые вопросы устно, не прибегая к помощи карандаша и бумаги.

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

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

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

В приложении подробно обсуждаются возможности коллективной разработки предлагаемых проектов.

Я признателен многим читателям, которые помогли мне при создании второго издания, особенно Ричарду Остингу из Мэри-лендского университета и Брайену Кернингену из лаборатории Белла.

Денни Ван Тассел

Цель программирования — не создание программы, а получение результатов вычисления.

Кодирование, увы, само по себе ничего не стоит — существенны результаты!

Глава 1

СТИЛЬ ПРОГРАММИРОВАНИЯ

Когда-нибудь электронные вычислительные машины (ЭВМ) будут сами составлять для себя программы или же мы будем писать их на естественном языке. Однако сейчас нам приходится разрабатывать программы, которые смогли бы читать другие лица. Не многие стали бы возражать против той простой мысли, что программист должен быть в состоянии прочесть по крайней мере свою собственную программу. Отсюда следует, какое важное значение имеет стиль написания программ.

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

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

Помните, программы читаются людьми.

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

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

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

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

Предисловие редактора перевода || Оглавление || 1.1. Стандартизация стиля


Услуги