Как научиться писать эффективно и без ошибок работающие программы?

Каких мер для этого стоит придерживаться?

Может есть какая-то хорошая литература на эту тему.

Речь не идет о больших проектах, скорее уклон в сторону олимпиадного программирования.


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


(язык — с++)
  • Вопрос задан
  • 5488 просмотров
Пригласить эксперта
Ответы на вопрос 11
@Hizof
Первое что пришло в голову это С. Макконнелл «Совершенный код».
Но мне кажется что «чтобы программа сразу работала, как надо» — утопия.
Ответ написан
KorP
@KorP
Кратко о себе
>но лично я в процессе частенько допускаю мелкие досадные ошибки
простите, но тут по-моему никакая литература не поможет, тренируйте внимательность, сам с подобным боролся именно таким методом — всё внимание на код
Ответ написан
Комментировать
amc
@amc
Выработать для себя свой стандарт написания кода, чтобы, к примеру,
если подумалось «а здесь мне нужен цикл» то сразу его оформить полностью, со всеми там {} и прочим что там в вашем С++ надо, а не спустя три часа усиленного кодинга обнаружить что ты цикл не закрыл ГДЕ-ТО.
В своё время мне это весьма помогало.
Ну плюс рисование схем и написание кода на «бумаге» (можно в простой текстовик), когда текст пишешь не в среде разработки и потом просто компилируешь — весьма быстро начинаешь обращать внимание на правильность кода.
Плюс очень было весело когда писал (под дельфи) без работающего отладчика, приходилось проверки писать самому, тоже помогло лучше писать.
Ответ написан
Комментировать
@Mox
Team Lead, RoR, React/React Native
То, что вы написали — утопия и повод для неврозов на тему что вы, такие какие есть — фиговый программист.

Примите факт, что вы пишете с ошибками. Поняв это — уже можно думать что с этим делать. Например — писать тесты. Попробовать test-driven-development. Нанять тестировщика. Тогда есть возможность выдавать продукт.

Если кому-то требуется программист, который пишет без ошибок — просто уходите от такого заказчика/работодателя. Он просто будет разводить вас на чувство вины.
Ответ написан
Комментировать
javax
@javax
Software Architect, Java Developer since 1996
Вы не о том заботитесь.
То, что по настоящему важно:

1. Писать легко читаемые программы
2. Обнаруживать ошибки на ранних этапах
Ответ написан
Комментировать
Rigidus
@Rigidus
Для того чтобы не допускать «мелкие досадные ошибки» лучше начинать с минимального прототипа, который можно охватить одним взглядом и легко протестировать. Иногда для быстрого прототипирования в олимпиадном программировании помогает знакомство с другими языками и подходами. Очень полезно тренироваться на типичных олимпиадных задачах, чтобы уметь реализовывать типичные алгоритмы с закрытыми глазами.

Чтобы эти рекомендации сработали — необходимо фиксировать свои ошибки, иначе не будет хорошей обратной связи и ясной картины. Это требует определенного рода дисциплины
Ответ написан
Комментировать
charon
@charon
согласен с вышенаписавшими. Чтобы минимизировать количество ошибок (до 0 вы всё равно никогда не доведёте) нужно больше практиковаться — и всё.
Ответ написан
Комментировать
OlegTar
@OlegTar
программист .NET, Javascript, Perl
Неважно сколько ты ошибок допускаешь. Важно, что ты их исправляешь.
==
Вы должны проверять и проверять как работает ваша программа. Даже если уверены на 100% в коде (ведь может просто какая-то опечатка закрасться!)

Я и сам когда-то не удосуживался проверять как мой код работает.
В моих программах находили ошибки. Потом я стал проверять программы, но ошибки все равно находили.
И потом я стал проверять свои программы и в хвост, и в гриву.
==
Уважаемый человек в мире программирования М. Фаулер говорит: любая не протестированная программа не работает

То есть проверять, проверять и ещё раз проверять.
Написал кусочек, проверил, написал ещё кусочек, проверил.
==
Теперь от слов к делу.
Погуглите «разработка через тестирование».

Труъ-программисты сначала пишут тесты, и только потом код.

Для этого посмотрите классы для тестирования для C++
ru.wikipedia.org/wiki/Юнит-тестирование
Ответ написан
@Gleb_Sevruk
Тренироваться, читать про часто-допускаемые ошибки, особенности языка, пробовать, смотреть деббагером что происходит.

Ведь если на маленьком проекте такие проблемы — то что будет дальше? Ну и стоит почитать про стандарты кодирования и антипаттерны:
www.insidecpp.ru/antipatterns/
Ответ написан
Комментировать
@Neir0
Досадные мелкие ошибки допускают все. С опытом вероятность появления этих ошибок снижается. Исключить такие ошибки вовсе — невозможно, возможно лишь снизить вероятность их появления. По теме выявления и профилактики таких ошибок в крупных проектах написано множество статей, книг, разработано куча практик и приемов. В мелких олимпиадных задачках, наверное, стоит стараться писать как можно более чистый код, т.е. избегать перлов типа такого
 for (int i = 0; i < postParams.Length; PostParams += postParams[i] + (((++i) % 2 == 0) ? "&" : "=")) ; 
стараться разбивать программу на логические блоки, чтобы легче было локализовать ошибку и тренироваться, тренироваться, тренироваться…
Ответ написан
Комментировать
@Sh0ttky
1) автотесты, которые покрывают всё и вся
2) самопроверки в коде.

Короче, если по ходу написания программы понял, что что-то может быть проверено - сразу же пили "ассершн" с выводом в лог и возвратом ошибки. Серьёзно сокращает время разработки кстати.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы