8.1. Общие принципы хорошего программирования
8.1. Общие принципы хорошего программирования
Главный вопрос, касающийся хорошего программирования, — это вопрос о том, что такое хорошая программа. Ответ на этот вопрос не тривиален, поскольку существуют разные критерии качества программ.
Следующие критерии общеприняты:
• Правильность. Хорошая программа в первую очередь должна быть правильной, т.е. она должна делать именно то, для чего предназначалась. Это требование может показаться тривиальным и самоочевидным. Однако в случае сложных программ правильность достигается не так часто. Распространенной ошибкой при написании программ является пренебрежение этим очевидным критерием, когда большее внимание уделяется другим критериям — таким, как эффективность.
• Эффективность. Хорошая программа не должна попусту тратить компьютерное время и память.
• Простота, читабельность. Хорошая, программа должна быть легка для чтения и понимания. Она не должна быть более сложной, чем это необходимо. Следует избегать хитроумных программистских трюков, затемняющих смысл программы. Общая организация программы и расположение ее текста должны облегчать ее понимание.
• Удобство модификации. Хорошая программа должна быть легко модифицируема и расширяема. Простота и модульная организация программы облегчают внесение в нее изменений.
• Живучесть. Хорошая программа должна быть живучей. Она не должна сразу "ломаться", если пользователь введет в нее неправильные или непредусмотренные данные. В случае подобных ошибок программа должна сохранять работоспособность и вести себя разумно (сообщать об ошибках).
• Документированность. Хорошая программа должна быть хорошо документирована. Минимальная документация — листинг с достаточно подробными комментариями.
Степень важности того или иного критерия зависит от конкретной задачи, от обстоятельств написания программы, а также от условий ее эксплуатации. Наивысшим приоритетом пользуется, без сомнения, правильность. Обычно простоте, удобству модификации, живучести и документированности придают во крайней мере не меньший приоритет, чем эффективности.
Существует несколько общих соображений, помогающих реализовать вышеупомянутые критерии на практике. Одно важное правило состоит в том, чтобы сначала продумать задачу, подлежащую решению, и лишь затем приступать к написанию текста программы на конкретном языке программирования. Как только мы хорошо поймем задачу, и способ ее решения будет нами полностью и во всех деталях продуман, само программирование окажется быстрым и легким делом и появится неплохой шанс за короткое время получить правильную программу.
Распространенной ошибкой является попытка начать писать программу даже до того, как была уяснена полная постановка задачи. Главная причина, по которой следует воздерживаться от преждевременного начала программирования, состоит в том, что обдумывание задачи и поиск метода ее решения должны проводиться в терминах, наиболее адекватных самой этой задаче. Эти термины чаще всего далеки от синтаксиса применяемого языка программирования и могут быть утверждениями на естественном языке и рисунками.
Исходная формулировка способа решения задачи должна быть затем трансформирована в программу, но этот процесс трансформации может оказаться нелегким. Неплохим подходом к его осуществлению является применение принципа пошаговой детализации. Исходная формулировка рассматривается как "решение верхнего уровня", а окончательная программа - как "решение низшего уровня".
В соответствии с принципом пошаговой детализации окончательная программа получается после серии трансформаций или "детализаций" решения. Мы начинаем с первого решения — решения верхнего уровня, а затем последовательно проходим по цепочке решений; все эти решения эквивалентны, но каждое следующее решение выражено более детально, чей предыдущее. На каждом шагу детализации понятия, использовавшиеся в предыдущих формулировках, прорабатываются более подробно, а их представление все более приближается к языку программирования. Следует отдавать себе отчет в том, что детализация касается не только процедур, но и структур данных. На начальных шагах работают обычно с более абстрактными, более крупными информационными единицами, детальная структура которых уточняется впоследствии.
Стратегия нисходящей пошаговой детализации имеет следующие преимущества:
• она позволяет сформулировать грубое решение в терминах, наиболее адекватных решаемой задаче;
• в терминах таких мощных понятий решение будет сжатым и простым, а потому скорее всего правильным;
• каждый шаг детализации должен быть достаточно малым, чтобы не представлять больших интеллектуальных трудностей, если это удалось — трансформация решения в новое, более детальное представление скорее всего будет выполнена правильно, а следовательно, таким же правильным окажется и полученное решение следующего шага детализации.
В случае Пролога мы можем говорить о пошаговой детализации отношений. Если существо задачи требует мышления в алгоритмических терминах, то мы можем также говорить и о детализации алгоритмов, приняв процедурную точку зрения на Пролог.
Для того, чтобы удачно сформулировать решение на некотором уровне детализации и придумать полезные понятия для следующего, более низкого уровня, нужны идеи. Поэтому программирование — это творческий процесс, что верно в особенности, когда речь идет о начинающих программистах. По мере накопления опыта работа программиста постепенно становится все менее искусством и все более ремеслом. И все же главным остается вопрос: как возникают идеи? Большинство идей приходит из опыта, из тех задач, решения которых уже известны. Если мы не знаем прямого решения задачи, то нам может помочь уже решенная задача, похожая на нашу. Другим источником идей является повседневная жизнь. Например, если необходимо запрограммировать сортировку списка, то можно догадаться, как это сделать, если задать себе вопрос: "А как бы я сам стал действовать, чтобы расположить экзаменационные листы студентов по их фамилиям в алфавитном порядке?"
Общие принципы, изложенные в данном разделе, известны также как составные части "структурного программирования"; они, в основном, применимы и к программированию на Прологе. В следующих разделах мы обсудим их более детально, обращая особое внимание на применение этих принципов программирования к Прологу.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Общие сведения о языке программирования HTML
Общие сведения о языке программирования HTML Расшифровывается аббревиатура HTML следующим образом: Hyper Text Markup Language, что в переводе на русский язык означает «гипертекстовый язык разметки». Иначе говоря HTML – это язык программирования, используемый для описания
О невозможности хорошего кода
О невозможности хорошего кода Когда в этой истории Джон спрашивает: «Хороший код стал невозможным?», в действительности он спрашивает: «Профессионализм стал невозможным?» В конце концов, в этой печальной истории пострадал не только код. Пострадала его семья, его
22.4.2 Общие принципы выделения адресов
22.4.2 Общие принципы выделения адресов Работу по делегированию прав присвоения блоков адресного пространства IPv6 региональным организациям регистрации ведет Internet Assigned Numbers Authority (IANA). Региональные организации регистрации могут передавать блоки адресов в меньшие
9.1. Выбор хорошего пароля
9.1. Выбор хорошего пароля Многие пользователи используют пароли вроде 1, 1234, qwerty, а потом удивляются, почему их почтовый ящик или страничка в социальной сети взломана. Ответ прост – к ней подобрали пароль. Причем злоумышленнику было это сделать очень просто (точнее
Общие принципы
Общие принципы «Информационная архитектура большинства сайтов никуда не годится. Это еще одно свидетельство тому, что при их разработке мнение будущих посетителей в расчет не принимается. Не удивительно, что клиенты не хотят использовать столь неудобную навигацию».
§ 83. Секреты хорошего гипертекста
§ 83. Секреты хорошего гипертекста 18 февраля 2002Учебники по гипертексту обходят стороной вопросы: где именно нужно делать ссылки и сколько их должно быть.Есть несколько способов определения хорошего гипертекста (речь не идет о меню, разделах со ссылками и прочих
Общие принципы работы со спецификациями
Общие принципы работы со спецификациями При работе с документом-спецификацией в КОМПАС-3D обычно пользуются таким понятием, как объект спецификации.Объект спецификации – это строка или несколько текстовых строк в документеспецификации, характеризующих (описывающих)
Принципы объектно-ориентированного программирования
Принципы объектно-ориентированного программирования Все объектно-ориентированные языки используют три базовых принципа объектно-ориентированного программирования.• Инкапсуляция. Как данный язык скрывает внутренние особенности реализации объекта?• Наследование.
Глава 2 Общие вопросы программирования для Pocket PC
Глава 2 Общие вопросы программирования для Pocket PC Поскольку большинство сред разработки, которые мы будем обсуждать в данной книге, произведены в Microsoft, не удивительно, что они используют для создания, отладки и поставки приложений одни и те же инструменты. Такими
8.3.1. Некоторые правила хорошего стиля
8.3.1. Некоторые правила хорошего стиля • Предложения программы должны быть короткими. Их тела, как правило, должны содержать только несколько целей.• Процедуры должны быть короткими, поскольку длинные процедуры трудны для понимания. Тем не менее длинные процедуры
13-я КОМНАТА: Лучшее — враг хорошего
13-я КОМНАТА: Лучшее — враг хорошего Автор: Владимир ГуриевЧеловека очень просто сделать счастливым.Надо сначала что-то у него отнять, а потом вернуть. Мне, например, вчера вернули горячую воду, которой не было три недели, и я уже второй день нахожусь на седьмом небе. Мне до
Смартфон за $20: а что хорошего? Евгений Золотов
Смартфон за $20: а что хорошего? Евгений Золотов Опубликовано 08 мая 2014 Смартфон шагает по планете. Пусть из каждых шести землян, пользующихся мобильной связью, пока лишь двое (по самым смелым оценкам — больше трёх) делают это с помощью смартфонов — с
1.2. ОБЩИЕ ПРИНЦИПЫ РАЗРАБОТКИ ПРОГРАММ
1.2. ОБЩИЕ ПРИНЦИПЫ РАЗРАБОТКИ ПРОГРАММ Программы различаются по назначению, выполняемым функциям, формам реализации. Однако можно полагать, что существуют некоторые общие принципы, которые следует использовать при разработке программ.Частотный принцип. Принцип основан