В книге «Прагматичный программист» авторы упоминают программирование по совпадению . Он объясняет, что это такое, почему это вызвано, с какими опасностями вы можете столкнуться, и сравнивается с полем мин в войне.
Вы когда-нибудь смотрели старые черно-белые фильмы о войне? Усталый солдат осторожно выходит из кисти. Впереди прояснение: есть ли мины или безопасно пересекать? Нет никаких признаков того, что это минное поле - никаких признаков, колючей проволоки или кратеров. Солдат с помощью штыка толкает землю перед собой и вздрагивает, ожидая взрыва. Там нет ни одного. Поэтому он кропотливо проходит через поле некоторое время, подталкивая и толкаясь на ходу. В конце концов, убедившись, что поле безопасное, он выпрямляется и с гордостью идет вперед, только чтобы его разорвало на куски.
Первоначальные исследования солдата по минам ничего не выявили, но это просто повезло. Его привели к ложному выводу - с катастрофическими результатами.
Как разработчики, мы также работаем в минных полях. Каждый день нас ждут сотни ловушек. Вспоминая историю солдата, мы должны с осторожностью делать ложные выводы. Мы должны избегать программирования по совпадению - полагаться на удачу и случайные успехи - в пользу программирования намеренно ...
Но я не очень доволен тем, как они описывают проблему «как ее преодолеть». Да, вы должны подумать, прежде чем писать код, но как это практиковать? Единственное, о чем я могу думать, - это добавить функции в существующие проекты с открытым исходным кодом, где вы должны иметь знания как о «чем я сейчас занимаюсь», так и о «как работают другие части кода», и это не совсем применимо. когда вы пишете свои собственные проекты.
РЕДАКТИРОВАТЬ:
резюме из ваших сообщений:
- Не угадывай свой следующий ход, докажи, что это правильно
- Юнит тест и рефакторинг максимально возможный, когда это необходимо
- Часто добавляйте функции - компилируйте - тестируйте
- Если вы не можете объяснить код нубу, вы, вероятно, программируете случайно.
Кстати, трудно принять ответ, это действительно трудно. Все ответы действительно хороши :)