C++ программисты недооценивают простые ошибки
От: jul_nevermind  
Дата: 13.08.20 09:27
Оценка: 13 (1) +1
Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите: нулевые указатели, деление на ноль, неопределённое поведение, выход за границу массива, неинициализированные переменные. Но это имеет мало общего с реальностью. Скорее, это набор ошибок, про которые мы все слышали при обучении программированию или читали в книгах. На практике много сил и времени времени отнимают совсем другие ошибки, которые, тем не менее, остаются в тени при дискуссиях. Эта тема хорошо раскрывается в этой статье.
Отредактировано 13.08.2020 9:28 jul_nevermind . Предыдущая версия .
программирование cpp programming programming language bugs
Re: C++ программисты недооценивают простые ошибки
От: LaptevVV Россия  
Дата: 13.08.20 09:56
Оценка: +3
Спасибо, статья полезная. И ссылки там — тоже.
Буду показывать студентам.
Но если конкретно про С++, то основная проблема для начинающих — это всякие умолчания.
Не только вызовы конструкторов — деструкторов, но и даже умолчания типов констант.
Не все новички соображают, что 1 — это целая, а 1.0 — это аж double.
Или вот привыкли в школе запятую писать в дробных числах, и пишут: double t = 1,2;
Вот на такие мелочи приходится отвлекаться.
Гораздо лучше было бы, если бы в языке (для обучения) были бы запрещены такие умолчания.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: C++ программисты недооценивают простые ошибки
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.20 12:21
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Гораздо лучше было бы, если бы в языке (для обучения) были бы запрещены такие умолчания.


Используйте для обучения Go, там с этим очень хорошо.
Re: C++ программисты недооценивают простые ошибки
От: B0FEE664  
Дата: 13.08.20 12:49
Оценка:
Здравствуйте, jul_nevermind, Вы писали:

_>Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите: нулевые указатели, деление на ноль, неопределённое поведение, выход за границу массива, неинициализированные переменные. Но это имеет мало общего с реальностью. Скорее, это набор ошибок, про которые мы все слышали при обучении программированию или читали в книгах. На практике много сил и времени времени отнимают совсем другие ошибки, которые, тем не менее, остаются в тени при дискуссиях. Эта тема хорошо раскрывается в этой статье.


С одной стороны статья правильная, с другой — совершенно нет.
Табличный стиль оформления — да, позволяет выявить множество ошибок, а вот согласится с остальным трудно.

Например, мои самая частая ошибка — это инвертирование логического условия. Обычно выявляется при первом запуске.
Вторая по частоте — это я забыл дописать код, т.е. забыт вызов функции или просто не дописан кусок кода.
Третья по частоте — некорректная обработка корректных входных данных.
Т.е. ничего из перечисленного в статье.

Кстати, по моему опыту, некорректная обработка корректных входных данных — эта самая частая ошибка вообще. Она встречается в коде даже чаще, чем неправильная обработка обнаруженных ошибочных ситуаций, чаще ошибок в коде параллельного выполнения и даже чаще, чем некорректная обработка некорректных входных данных. Хотя тут зависит от того, что считать корректными данными.

Так же, по моему мнению, распространены ошибки:
— ошибки неопределённого поведения из-за нарушения One Definition Rule;
— ошибки вызванные несовместимостью версий библиотек;
— ошибки вызванные некорректными данными (обычно проявляющимися при сбое питания);
— ошибки работы с float;
— ошибки работы с временем/календарём;
— ошибки работы с сетью.
И каждый день — без права на ошибку...
Re[2]: C++ программисты недооценивают простые ошибки
От: bnk СССР http://unmanagedvisio.com/
Дата: 13.08.20 12:53
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, jul_nevermind, Вы писали:


_>>Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите: нулевые указатели, деление на ноль, неопределённое поведение, выход за границу массива, неинициализированные переменные. Но это имеет мало общего с реальностью. Скорее, это набор ошибок, про которые мы все слышали при обучении программированию или читали в книгах. На практике много сил и времени времени отнимают совсем другие ошибки, которые, тем не менее, остаются в тени при дискуссиях. Эта тема хорошо раскрывается в этой статье.


BFE>С одной стороны статья правильная, с другой — совершенно нет.

BFE>Табличный стиль оформления — да, позволяет выявить множество ошибок, а вот согласится с остальным трудно.

jul_nevermind это бот, оно не ответит (продакт-плейсмент для PVS-Studio)
Re: C++ программисты недооценивают простые ошибки
От: kov_serg Россия  
Дата: 13.08.20 13:08
Оценка: +2
Здравствуйте, jul_nevermind, Вы писали:

_>Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите: нулевые указатели, деление на ноль, неопределённое поведение, выход за границу массива, неинициализированные переменные. Но это имеет мало общего с реальностью. Скорее, это набор ошибок, про которые мы все слышали при обучении программированию или читали в книгах. На практике много сил и времени времени отнимают совсем другие ошибки, которые, тем не менее, остаются в тени при дискуссиях. Эта тема хорошо раскрывается в этой статье.


Эти классы ошибок связаны с особенностью человеческого мозга. Он не читает каждый раз текст он использует хитрые уловки и уже готовые кэши что бы не выполнять одну и туже работу дважды. Отсюда и растут ноги ошибок последней строки и опечаток внутри литералов. Которые не видно тому кто это писал.
Вот классический пример:

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

Мозг не желает читать по буквам это его напрягает. Зато он с удовольствием использует менее энергозатратные методы. Которые приемлемо работают, но не всегда дают достоверные результаты.
Re: C++ программисты недооценивают простые ошибки
От: _NN_ www.nemerleweb.com
Дата: 13.08.20 13:43
Оценка: +1
Здравствуйте, jul_nevermind, Вы писали:

_>Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите: нулевые указатели, деление на ноль, неопределённое поведение, выход за границу массива, неинициализированные переменные. Но это имеет мало общего с реальностью. Скорее, это набор ошибок, про которые мы все слышали при обучении программированию или читали в книгах. На практике много сил и времени времени отнимают совсем другие ошибки, которые, тем не менее, остаются в тени при дискуссиях. Эта тема хорошо раскрывается в этой статье.


Но такое оформление отнимает больше времени.

Если вообще тратится время на оформления кода это означает, что не настроено автоматическое форматирование.
А это отнимает время не только при написании и чтении, а ещё и при ревью кода.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: C++ программисты недооценивают простые ошибки
От: LaptevVV Россия  
Дата: 13.08.20 13:55
Оценка:
LVV>>Гораздо лучше было бы, если бы в языке (для обучения) были бы запрещены такие умолчания.
Pzz>Используйте для обучения Go, там с этим очень хорошо.
Мы начинали, когда Go не было. Поэтому поступили проще — написали свое... ))
По Go сейчас появились книжки — но его лучше в Линуксе пользовать, а не в винде.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[2]: C++ программисты недооценивают простые ошибки
От: B0FEE664  
Дата: 13.08.20 14:07
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>

Но такое оформление отнимает больше времени.

_NN>Если вообще тратится время на оформления кода это означает, что не настроено автоматическое форматирование.
_NN>А это отнимает время не только при написании и чтении, а ещё и при ревью кода.

А где взять автоматическое форматирование в таблицу?

Что умеет это:

MPASS(reg == A_TP_RXT_MIN || reg == A_TP_RXT_MAX ||
    reg == A_TP_PERS_MIN || reg == A_TP_PERS_MAX ||
    reg == A_TP_KEEP_IDLE || A_TP_KEEP_INTVL ||
    reg == A_TP_INIT_SRTT || reg == A_TP_FINWAIT2_TIMER);


превратить в:

MPASS(
      reg == A_TP_RXT_MIN
      ||
      reg == A_TP_RXT_MAX
      ||
      reg == A_TP_PERS_MIN
      ||
      reg == A_TP_PERS_MAX
      ||
      reg == A_TP_KEEP_IDLE
      ||
      A_TP_KEEP_INTVL
      ||
      reg == A_TP_INIT_SRTT
      ||
      reg == A_TP_FINWAIT2_TIMER
     );
И каждый день — без права на ошибку...
Re[3]: C++ программисты недооценивают простые ошибки
От: jul_nevermind  
Дата: 13.08.20 14:17
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Здравствуйте, B0FEE664, Вы писали:


BFE>>Здравствуйте, jul_nevermind, Вы писали:


_>>>Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите: нулевые указатели, деление на ноль, неопределённое поведение, выход за границу массива, неинициализированные переменные. Но это имеет мало общего с реальностью. Скорее, это набор ошибок, про которые мы все слышали при обучении программированию или читали в книгах. На практике много сил и времени времени отнимают совсем другие ошибки, которые, тем не менее, остаются в тени при дискуссиях. Эта тема хорошо раскрывается в этой статье.


BFE>>С одной стороны статья правильная, с другой — совершенно нет.

BFE>>Табличный стиль оформления — да, позволяет выявить множество ошибок, а вот согласится с остальным трудно.

bnk>jul_nevermind это бот, оно не ответит (продакт-плейсмент для PVS-Studio)


Если бы в комментарии был вопрос, можно было бы на него ответить Но, насколько я понимаю, B0FEE664 просто поделился своими рассуждениями по теме.
Re[4]: C++ программисты недооценивают простые ошибки
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.20 14:20
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>По Go сейчас появились книжки — но его лучше в Линуксе пользовать, а не в винде.


Почему?
Re[5]: C++ программисты недооценивают простые ошибки
От: LaptevVV Россия  
Дата: 13.08.20 17:14
Оценка:
LVV>>По Go сейчас появились книжки — но его лучше в Линуксе пользовать, а не в винде.
Pzz>Почему?
Он там роднее...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[6]: C++ программисты недооценивают простые ошибки
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.20 17:17
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>>>По Go сейчас появились книжки — но его лучше в Линуксе пользовать, а не в винде.

Pzz>>Почему?
LVV>Он там роднее...

Да ладно. Роднее всего он на Plan9
Re[7]: C++ программисты недооценивают простые ошибки
От: LaptevVV Россия  
Дата: 13.08.20 17:20
Оценка:
LVV>>>>По Go сейчас появились книжки — но его лучше в Линуксе пользовать, а не в винде.
Pzz>>>Почему?
LVV>>Он там роднее...
Pzz>Да ладно. Роднее всего он на Plan9
Ну, в линуксе им пользуются из командной строки.
В винде — не принято как-то...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[8]: C++ программисты недооценивают простые ошибки
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.20 17:21
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Ну, в линуксе им пользуются из командной строки.

LVV>В винде — не принято как-то...

Я уверен, что в венде для Go есть IDE в ассортименте.
Re[9]: C++ программисты недооценивают простые ошибки
От: LaptevVV Россия  
Дата: 13.08.20 18:23
Оценка:
LVV>>Ну, в линуксе им пользуются из командной строки.
LVV>>В винде — не принято как-то...
Pzz>Я уверен, что в венде для Go есть IDE в ассортименте.
Есть от JetBrais — больше ничего не знаю.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: C++ программисты недооценивают простые ошибки
От: T4r4sB Россия  
Дата: 13.08.20 19:35
Оценка: 6 (1) +1
Здравствуйте, jul_nevermind, Вы писали:

_>Спросите абстрактного C++ программиста, какие ошибки являются наиболее частыми и, скорее всего, услышите:

логические ошибки. Самые частые и самые трудноотслеживаемые.
Re[7]: C++ программисты недооценивают простые ошибки
От: T4r4sB Россия  
Дата: 13.08.20 19:43
Оценка:
Здравствуйте, Pzz, Вы писали:


Pzz>Да ладно. Роднее всего он на Plan9


План 9 — из открытого космоса который?
Re[8]: C++ программисты недооценивают простые ошибки
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.08.20 19:46
Оценка:
Здравствуйте, T4r4sB, Вы писали:

Pzz>>Да ладно. Роднее всего он на Plan9


TB>План 9 — из открытого космоса который?


Ну типа того.

https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs
Re[10]: C++ программисты недооценивают простые ошибки
От: DenisCh Россия  
Дата: 17.08.20 03:47
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

LVV>>>Ну, в линуксе им пользуются из командной строки.

LVV>>>В винде — не принято как-то...
Pzz>>Я уверен, что в венде для Go есть IDE в ассортименте.
LVV>Есть от JetBrais — больше ничего не знаю.

... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.