Книги, научные публикации Pages:     | 1 |   ...   | 4 | 5 | 6 |

Практика программирования Б. Керниган, Р. Пайк Книга: ...

-- [ Страница 6 ] --

и не только в качестве способа, которым программист сообщает компьютеру, что надо сделать,). Способ записи представляет собой основу для реализации широкого: спектра инструментов, а также обусловливает структуру программы, предназначенной для написания программ. Мы все хорошо владеем большими языками общего назначения, которые служат нам для создания основной части наших программ. Однако, как только задания становятся настолько специализированными и хорошо понятными, что запрограммировать их можно почти механически, стоит задуматься о том, чтобы создать нотацию, в которой задание выражалось бы естественно, и язык, реализующий эту нотацию. Регулярные выражения Ч один из наших любимых примеров, но возможностей создания рабочих языков для специализированных приложений существует бесчисленное множество. Для того чтобы дать хорошие результаты, языки эти вовсе не должны быть сложны.

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

Приложение: свод правил Х Стиль Х Интерфейсы Х Отладка Х Тестирование Х Производительность Х Переносимость Каждая открытая мной истина становилась правилом, которое служило мне в дальнейшем для поиска 'других истин.

Рене Декарт. Рассуждение о методе Во многих главах были выделены правила или какие-то основные моменты, подводящие итог обсуждению. Для удобства поиска правила собраны здесь воедино. Не забывайте, что в соответствующих частях книги объясняется назначение и способы применения этих правил.

Стиль Используйте осмысленные имена для глобальных переменных и короткие Ч для локальных.

Будьте последовательны.

Используйте активные имена для функций.

Будьте точны.

Форматируйте код, подчеркивая его структуру.

Используйте естественную форму выражений.

Используйте скобки для устранения неясностей.

Разбивайте сложные выражения.

Будьте проще.

Будьте осторожны с побочными эффектами.

Будьте последовательны в применении отступов и фигурных скобок.

Используйте идиомы для единства стиля.

Используйте else-if для многовариантных ветвлений.

Избегайте макрофункций.

Заключайте тело макроса и аргументы в скобки.

Давайте имена загадочным числам.

Определяйте числа как константы, а не как макросы.

Используйте символьные константы, а не целые.

Используйте средства языка для определения размера объекта.

Не пишите об очевидном.

Комментируйте функции и глобальные данные.

Не комментируйте плохой код, а перепишите его.

Не противоречьте коду.

Вносите ясность, а не сумятицу.

Интерфейсы Прячьте детали реализации.

Ограничьтесь небольшим набором независимых примитивов.

Не делайте ничего "за спиной" у пользователя.

Всегда делайте одинаковое одинаково.

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

Обнаруживайте ошибки на низком уровне, обрабатывайте на высоком.

Используйте исключения только для исключительных ситуаций.

Отладка Ищите знакомые ситуации.

Проверьте самое последнее изменение.

Не повторяйте дважды одну и ту же ошибку.

Не откладывайте отладку на потом.

Пользуйтесь стеком вызова.

Читайте код перед тем, как исправлять.

Объясните свой код кому-либо еще.

Сделайте ошибку воспроизводимой.

Разделяй и властвуй.

Изучайте нумерологию ошибок.

Выводите информацию, локализующую место ошибки.

Пишите код с самоконтролем.

Ведите журнальный файл.

Постройте график.

Используйте инструменты.

Ведите записи.

Тестирование Тестируйте граничные условия кода.

Тестируйте пред- и постусловия.

Используйте утверждения.

Используйте подход защитного программирования.

Проверяйте коды возврата функций.

Тестируйте по возрастающей.

Тестируйте сначала простые блоки.

Четко опредеоите, чего вы хотите на выходе текста.

Проверяйте свойства сохраности данных.

Сравните независимые версии.

Оценивайте охват тестов.

Автоматизируйте возвратное тестирование.

Создайте замкнутые тесты.

Производительность Автоматизируйте замеры времени.

Используйте профилировщик.

Концентрируйтесь на критических местах.

Постройте график.

Улучшайте алгоритм и структуру данных.

Используйте оптимизацию компилятора.

Выполните тонкую настройку кода.

Не оптимизируйте то, что не имеет значения.

Объединяйте общие выражения.

Замените дорогостоящие операции на более дешевые.

Избавьтесь от циклов или упростите их.

Кэшируйте часто используемые значения.

Напишите специальную функцию захвата памяти (аллокатор).

Буферизуйте ввод и вывод.

Специальные случаи обрабатывайте отдельно.

Используйте предварительное вычисление результатов.

Используйте приближенные значения.

Перепишите код на языке более низкого уровня.

Используйте минимально возможный тип данных.

Не храните то, что можете без труда вычислить.

Переносимость Придерживайтесь стандарта.

Следуйте основному руслу.

Избегайте неоднозначных конструкций языка.

Попробуйте несколько компиляторов.

Используйте стандартные библиотеки.

Используйте только то, что доступно везде.

Избегайте условной компиляции.

Выносите системные различия в отдельные файлы.

Прячьте системные различия за интерфейсами.

Используйте текст для обмена данными.

Используйте при обмене данными фиксированный порядок байтов.

При изменении спецификации изменяйте и имя.

Поддерживайте совместимость с существующими программами и данными.

Не рассчитывайте на ASCII.

Не ориентируйтесь только на английский язык.

Pages:     | 1 |   ...   | 4 | 5 | 6 |    Книги, научные публикации