Избегайте необычного кодирования. Чем сложнее код, тем больше вероятность ошибок. Обычно на современных системах четко написанный код будет быстрым и достаточно маленьким.
Используйте доступные библиотеки. Самый простой способ избежать ошибок при написании служебной программы - это не писать ее.
Изучите несколько формальных приемов для более сложных вещей. Если есть сложные условия, прибейте их ручкой и бумагой. В идеале, знать некоторые методы доказательства. Если я могу доказать правильность кода, это почти всегда хорошо, за исключением больших, глупых, очевидных ошибок, которые легко исправить. Очевидно, это заходит так далеко, но иногда вы можете формально рассуждать о небольших, но сложных вещах.
Для существующего кода узнайте, как выполнить рефакторинг: как вносить небольшие изменения в код, часто используя автоматизированный инструмент, чтобы сделать код более читабельным без изменения поведения.
Не делай ничего слишком быстро. Потратив немного времени на то, чтобы сделать все правильно, проверить, что вы сделали, и подумать о том, что вы делаете, окупится позже.
Как только вы написали код, используйте то, что у вас есть, чтобы сделать его хорошим. Модульные тесты отличные. Часто вы можете писать тесты заранее, что может быть хорошим откликом (если это делается последовательно, это разработка, управляемая тестами). Скомпилируйте параметры предупреждений и обратите внимание на предупреждения.
Попросите кого-нибудь еще взглянуть на код. Формальные обзоры кода хороши, но они могут быть не в удобное время. Запросы по запросу или аналогичные, если ваша scm не поддерживает их, допускают асинхронные проверки. Проверка друзей может быть менее формальным обзором. Парное программирование гарантирует, что две пары глаз смотрят на все.