Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите: нулевые указатели, деление на ноль, неопределённое поведение, выход за границу массива, неинициализированные переменные. Но это имеет мало общего с реальностью. Скорее, это набор ошибок, про которые мы все слышали при обучении программированию или читали в книгах. На практике много сил и времени времени отнимают совсем другие ошибки, которые, тем не менее, остаются в тени при дискуссиях. Эта тема хорошо раскрывается в этой статье.
Спасибо, статья полезная. И ссылки там — тоже.
Буду показывать студентам.
Но если конкретно про С++, то основная проблема для начинающих — это всякие умолчания.
Не только вызовы конструкторов — деструкторов, но и даже умолчания типов констант.
Не все новички соображают, что 1 — это целая, а 1.0 — это аж double.
Или вот привыкли в школе запятую писать в дробных числах, и пишут: double t = 1,2;
Вот на такие мелочи приходится отвлекаться.
Гораздо лучше было бы, если бы в языке (для обучения) были бы запрещены такие умолчания.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: C++ программисты недооценивают простые ошибки
Здравствуйте, jul_nevermind, Вы писали:
_>Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите: нулевые указатели, деление на ноль, неопределённое поведение, выход за границу массива, неинициализированные переменные. Но это имеет мало общего с реальностью. Скорее, это набор ошибок, про которые мы все слышали при обучении программированию или читали в книгах. На практике много сил и времени времени отнимают совсем другие ошибки, которые, тем не менее, остаются в тени при дискуссиях. Эта тема хорошо раскрывается в этой статье.
С одной стороны статья правильная, с другой — совершенно нет.
Табличный стиль оформления — да, позволяет выявить множество ошибок, а вот согласится с остальным трудно.
Например, мои самая частая ошибка — это инвертирование логического условия. Обычно выявляется при первом запуске.
Вторая по частоте — это я забыл дописать код, т.е. забыт вызов функции или просто не дописан кусок кода.
Третья по частоте — некорректная обработка корректных входных данных.
Т.е. ничего из перечисленного в статье.
Кстати, по моему опыту, некорректная обработка корректных входных данных — эта самая частая ошибка вообще. Она встречается в коде даже чаще, чем неправильная обработка обнаруженных ошибочных ситуаций, чаще ошибок в коде параллельного выполнения и даже чаще, чем некорректная обработка некорректных входных данных. Хотя тут зависит от того, что считать корректными данными.
Так же, по моему мнению, распространены ошибки:
— ошибки неопределённого поведения из-за нарушения One Definition Rule;
— ошибки вызванные несовместимостью версий библиотек;
— ошибки вызванные некорректными данными (обычно проявляющимися при сбое питания);
— ошибки работы с float;
— ошибки работы с временем/календарём;
— ошибки работы с сетью.
И каждый день — без права на ошибку...
Re[2]: C++ программисты недооценивают простые ошибки
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, jul_nevermind, Вы писали:
_>>Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите: нулевые указатели, деление на ноль, неопределённое поведение, выход за границу массива, неинициализированные переменные. Но это имеет мало общего с реальностью. Скорее, это набор ошибок, про которые мы все слышали при обучении программированию или читали в книгах. На практике много сил и времени времени отнимают совсем другие ошибки, которые, тем не менее, остаются в тени при дискуссиях. Эта тема хорошо раскрывается в этой статье.
BFE>С одной стороны статья правильная, с другой — совершенно нет. BFE>Табличный стиль оформления — да, позволяет выявить множество ошибок, а вот согласится с остальным трудно.
jul_nevermind это бот, оно не ответит (продакт-плейсмент для PVS-Studio)
Здравствуйте, jul_nevermind, Вы писали:
_>Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите: нулевые указатели, деление на ноль, неопределённое поведение, выход за границу массива, неинициализированные переменные. Но это имеет мало общего с реальностью. Скорее, это набор ошибок, про которые мы все слышали при обучении программированию или читали в книгах. На практике много сил и времени времени отнимают совсем другие ошибки, которые, тем не менее, остаются в тени при дискуссиях. Эта тема хорошо раскрывается в этой статье.
Эти классы ошибок связаны с особенностью человеческого мозга. Он не читает каждый раз текст он использует хитрые уловки и уже готовые кэши что бы не выполнять одну и туже работу дважды. Отсюда и растут ноги ошибок последней строки и опечаток внутри литералов. Которые не видно тому кто это писал.
Вот классический пример:
По рзелульаттам илссеовадний одонго анлигйсокго унвиертисета, не иеемт занчнеия, в кокам пряокде рсапожолены бкувы в солве. Галвоне, чотбы преавя и пслоендяя бквуы блыи на мсете. Осатьлыне бкувы мгоут селдовтаь в плоонм бсепордяке, все-рвано ткест чтаитсея без побрелм. Пичрионй эгото ялвятеся то, что мы чиатем не кдаужю бкуву по отдльенотси, а все солво цликеом.
Мозг не желает читать по буквам это его напрягает. Зато он с удовольствием использует менее энергозатратные методы. Которые приемлемо работают, но не всегда дают достоверные результаты.
Здравствуйте, jul_nevermind, Вы писали:
_>Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите: нулевые указатели, деление на ноль, неопределённое поведение, выход за границу массива, неинициализированные переменные. Но это имеет мало общего с реальностью. Скорее, это набор ошибок, про которые мы все слышали при обучении программированию или читали в книгах. На практике много сил и времени времени отнимают совсем другие ошибки, которые, тем не менее, остаются в тени при дискуссиях. Эта тема хорошо раскрывается в этой статье.
Но такое оформление отнимает больше времени.
Если вообще тратится время на оформления кода это означает, что не настроено автоматическое форматирование.
А это отнимает время не только при написании и чтении, а ещё и при ревью кода.
LVV>>Гораздо лучше было бы, если бы в языке (для обучения) были бы запрещены такие умолчания. Pzz>Используйте для обучения Go, там с этим очень хорошо.
Мы начинали, когда Go не было. Поэтому поступили проще — написали свое... ))
По Go сейчас появились книжки — но его лучше в Линуксе пользовать, а не в винде.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: C++ программисты недооценивают простые ошибки
_NN>Если вообще тратится время на оформления кода это означает, что не настроено автоматическое форматирование. _NN>А это отнимает время не только при написании и чтении, а ещё и при ревью кода.
А где взять автоматическое форматирование в таблицу?
Здравствуйте, bnk, Вы писали:
bnk>Здравствуйте, B0FEE664, Вы писали:
BFE>>Здравствуйте, jul_nevermind, Вы писали:
_>>>Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите: нулевые указатели, деление на ноль, неопределённое поведение, выход за границу массива, неинициализированные переменные. Но это имеет мало общего с реальностью. Скорее, это набор ошибок, про которые мы все слышали при обучении программированию или читали в книгах. На практике много сил и времени времени отнимают совсем другие ошибки, которые, тем не менее, остаются в тени при дискуссиях. Эта тема хорошо раскрывается в этой статье.
BFE>>С одной стороны статья правильная, с другой — совершенно нет. BFE>>Табличный стиль оформления — да, позволяет выявить множество ошибок, а вот согласится с остальным трудно.
bnk>jul_nevermind это бот, оно не ответит (продакт-плейсмент для PVS-Studio)
Если бы в комментарии был вопрос, можно было бы на него ответить Но, насколько я понимаю, B0FEE664 просто поделился своими рассуждениями по теме.
Re[4]: C++ программисты недооценивают простые ошибки
Здравствуйте, LaptevVV, Вы писали:
LVV>>>По Go сейчас появились книжки — но его лучше в Линуксе пользовать, а не в винде. Pzz>>Почему? LVV>Он там роднее...
Да ладно. Роднее всего он на Plan9
Re[7]: C++ программисты недооценивают простые ошибки
LVV>>>>По Go сейчас появились книжки — но его лучше в Линуксе пользовать, а не в винде. Pzz>>>Почему? LVV>>Он там роднее... Pzz>Да ладно. Роднее всего он на Plan9
Ну, в линуксе им пользуются из командной строки.
В винде — не принято как-то...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[8]: C++ программисты недооценивают простые ошибки
LVV>>Ну, в линуксе им пользуются из командной строки. LVV>>В винде — не принято как-то... Pzz>Я уверен, что в венде для Go есть IDE в ассортименте.
Есть от JetBrais — больше ничего не знаю.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, jul_nevermind, Вы писали:
_>Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите:
логические ошибки. Самые частые и самые трудноотслеживаемые.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[7]: C++ программисты недооценивают простые ошибки
Здравствуйте, LaptevVV, Вы писали:
LVV>>>Ну, в линуксе им пользуются из командной строки. LVV>>>В винде — не принято как-то... Pzz>>Я уверен, что в венде для Go есть IDE в ассортименте. LVV>Есть от JetBrais — больше ничего не знаю.