Search
Write a publication
Pull to refresh

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. Это специально так задумано, чтобы узнать, сколько прочитавших это незаметит или проигнорирует?

А вообще, самые ужасные ошибки - синтаксические, которые по совпадению пропускает компилятор. Ты на самом деле не думал так, это оно так напечаталось, а в этот момент думал о следующих строчках/идеях. Та же штука про равно в условии, и дело уже не только в языке, а в языке + подсознании. То есть если бы там стояло что-то другое, то мозг бы заметил, а так он это пропускает.

Баги после внедрения многопоточности особо жестокие... ломается даже тем, где, казалось бы, на века.

Один раз я таки попался на такую проблему. После этого научился читать варнинги.

Условия Йоды не просто так придумыли.

Думаю, проблемы с присваиванием не было бы, если не было неявного приведения типов. Или, если бы, оно было бы более контролируемым. Тут вопрос в том, почему, вообще, выражение "a=b" может быть проинтерпретировано как логическое.

Потому что в нормальных языках присваивание через := ))

Спасибо автору, заставляет задуматься.

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

«Человеку свойственно ошибаться» (Errare humanum est) — вот, собственно говоря, всё, что нужно знать, как аксиому, чтобы понимать природу ошибок в программном обеспечении (как и в любой другой сфере человеческой деятельности). Я когда-то, ещё в прошлом веке, это объяснение увидел в одной мудрой книжке иностранного автора, посвящённой тестированию и отладке (уже не помню, к сожалению, точное название книги и автора — не Цицерон и не Сенека, во всяком случае))). Первое утверждение влечёт следующее: «Всякая программа содержит ошибку». Следствие: «Если ошибка не обнаружена, это не значит, что её нет». И т.д.

Sign up to leave a comment.

Articles