Насчет ошибок у грамотных программеров.
В далеком примерно 1984 году работали мы с Авророй - писали ось бортовую.
На ассемблере. К тому времени у меня было уже около 15 лет стажа самой разнообразной работы,
в том числе на ассемблере и даже в кодах.
Сидим как-то вечером вдвоем с другом-начальником в подвале Авроры, пишем проги.
Написал я функцию в 22 команды. Запускаю - не работает!
22 команды - ошибаться просто негде! При почти 15 лет стажа.
Лев - говорю - что за фигня?!
Он - ищи 2 ошибки.
Я - почему?
он - 10% кода всегда ошибочные...
И ведь через полчаса после тщательной ручной прокрутки покомандно я нашел 2 ошибки...

Еще могу сказать: всегда ошибался в repeat-until на паскале.
Поэтому на С++ в do-while не ошибаюсь никогда - там как в while - do

Ошибки - это индивидуально