Comments 13
Половина описанных багов стали возможны из-за плохого дизайна использованных языков
Теперь предположим, что
a()
вызываетb()
внутри.
Это как? И что будет-то? Это надо b()
определить до a()
. Надо как-то яснее приводить пример.
Вы проверяли это свое предположение, что нужно b определить до а? Автор ведь об этом и пишет, о багах мышления, а вы сходу иллюстрируете.
Ужасно рад что-то проиллюстрировать. ;-) К сожалению, я не очень понятливый. Я не понял примера. Да, я (теперь!) проверил возможность вызова b() внутри a() . Но я не понял, что сломалось и где? Если написать
def a():
b()
calls.append('a')
то получится
['b', 'a', 'b']
Если написать
ef a():
calls.append('a')
b()
то получится
['a', 'b', 'b']
Всё ожидаемо. А что же сломалось?
После пункта 1 идёт пункт 3. Это специально так задумано, чтобы узнать, сколько прочитавших это незаметит или проигнорирует?
А вообще, самые ужасные ошибки - синтаксические, которые по совпадению пропускает компилятор. Ты на самом деле не думал так, это оно так напечаталось, а в этот момент думал о следующих строчках/идеях. Та же штука про равно в условии, и дело уже не только в языке, а в языке + подсознании. То есть если бы там стояло что-то другое, то мозг бы заметил, а так он это пропускает.
Баги после внедрения многопоточности особо жестокие... ломается даже тем, где, казалось бы, на века.
Ставьте топ, если тоже забываете "=" в сравнениях
if (isAdmin = true ){}
Без негатива, просто забавно
Один раз я таки попался на такую проблему. После этого научился читать варнинги.
Условия Йоды не просто так придумыли.
Спасибо автору, заставляет задуматься.
Кстати проговаривать код или логику работы полезно даже если рядом никого нет, часто пользуюсь когда сложную логику разрабатываю.
«Человеку свойственно ошибаться» (Errare humanum est) — вот, собственно говоря, всё, что нужно знать, как аксиому, чтобы понимать природу ошибок в программном обеспечении (как и в любой другой сфере человеческой деятельности). Я когда-то, ещё в прошлом веке, это объяснение увидел в одной мудрой книжке иностранного автора, посвящённой тестированию и отладке (уже не помню, к сожалению, точное название книги и автора — не Цицерон и не Сенека, во всяком случае))). Первое утверждение влечёт следующее: «Всякая программа содержит ошибку». Следствие: «Если ошибка не обнаружена, это не значит, что её нет». И т.д.
Архитектура ошибочного мышления: как баги рождаются в голове, а не в коде