Все компьютерные проблемы можно свести к двум категориям: проблемы с ноликами и проблемы с единичками. Чаще всего люди сталкиваются с комбинацией этих проблем.
Все проблемы электроники (и электрики, как базовой дисциплины) сводятся к двум категориям: 1. Есть контакт там, где его быть не должно. 2. Нет контакта там, где он быть должен.
И все ваши компьютерные проблемы растут отсюда же.
Ну если компьютер не электрический (например на пневмаитке). Впрочем, если расширить понятие "контакт" до "связь между элементами", то покроет всю область.
Я не хочу копаться в детальках, я про холическую часть. Может ли быть такой дефект в ПО, который нельзя объяснить в рамках "есть лишний контакт", "нет нужно контакта"?
Например, можем ли мы пропуск дефолта в switch в си описать в категории "нет контакта"? (или "есть лишний контакт"?). Допустим, по спецификации состояния 3 быть не может и у нас доверенный ввод, то есть мы выбираем между 1 и 2. В результате ошибки аллокатора мы получаем buffer overflow, который почти всегда безопасный, кроме того раза, когда он трогает байт, в котором хранится 1 или 2 (и там оказывается другое число).
Если совсем опуститься вниз, то бит в состоянии 1 - это наличие контакта, в состоянии 0 - отсутствие (или наоборот, но это не существенно). Поэтому в технической части - возникновение ошибки там где бит в состоянии 1, хотя должен быть 0 это по определению "ошибка из-за того, что есть контакт там, где его быть не должно".
Самые первые электрические компьютеры были на обычных электромеханических реле. И всё дальнейшее развитие вычислительной техники состоит в "сделать реле поменьше, побыстрее и что-б оно меньше потребляло электричества и меньше грелось".
А уж выяснение - вот эта самая "ошибка аллокатора", она из-за того, что из космоса прилетела частица и выбила ячейку памяти, или программист, который этот аллокатор реализовывал, ошибся, и в одном месте написал "x == 0" вместо "x == 1" это дело десятое.
Я это понимаю. Но мой вопрос в том, могут ли быть ошибки, которые не могут быть сведены к отсутствию или наличию контакта (допустим, мы это упростим до неправильного бита).
Например, если у нас в результате алгоритмической ошибки экспоненциальная сложность алгоритма от времени - это наличие контакта или его его отсутствие? Каких именно контактов (битов)?
Еще раз. Любой существующий компьютер можно реализовать на реле (как ты понимаешь - я про техническую реализуемость впринципе). И на этом компьютере можно запустить любой реализуемый алгоритм. Для меня, как для инженера, понятно, что внутри этого компьютера нет ничего кроме контактов, которые переключаются. Т.е. любую ошибку можно исправить (или внести) поджав пальцем нужный контакт.
Научная часть вопроса - "какие именно контакты и в каком случае нужно поджимать", это другой, не связанный с редукционизмом вопрос.
P.S. Это не значит, что я считаю редукционизм лучшим способом познания мира. Он хорош, но при условии того, что есть понимание на каком именно уровне нужно остановиться в данном конкретном случае. Ошибка в программе может быть алгоритмическая, из-за ошибки компилятора, из-за ошибки реализации процессора, из-за технической проблемы с конкретным "реле". Да, любую из этих ошибок можно редуцировать до "нет нужного контакта", но всегда-ли нужно настолько глубоко погружаться?
Окей, давай попробуем ситуацию довести до абсурда.
Допустим, в результате ошибки планирования, для алгоритма вместо сортировки пузырьком выбрали random sort. Который, как известно, во-первых решает поставленную задачу (то есть не содержит формального бага), во-вторых делает это так медленно, что QA отказывается признавать это за решение задачи (т.к. не может дождаться окончания процесса).
Какой контакт тут неправильный? Ответ компьютер выдаёт, просто чуть-чуть медленее. Нет того бита, который "не в том положении".
Ну для начала нужно разделять error и mistake. Что там QA в голову пришло считать ошибкой только им понятно.
Но если доводить ситуацию до абсурда - тут неправильные контакты, которые своим состоянием реализуют алгоритм "random sort" вместо пузырька. Т.е. есть кучка бит в "неправильном положении". Если собрать кучку народа у которых хватит пальцев - можно позажимать нужные контакты и всё исправится.
Принять решение о том, решена-ли задача или нет, может только тот, кто задачу ставил.
P.S. На всякий случай напоминаю с чего всё началось - "Может ли быть компьютерный баг, который не может быть редуцирован к отсутствию/наличию контакта или нет?" Невозможность компьютера вывести цветную картинку на чёрнобелый текстовый дисплей - компьютерным багом не считается.
Баги синхронизации? Например, если у нас deadlock из-за того, что хэш-таблица очень неудачно сложила данные и и мы (в этот конкретный раз) имеем O(n) вместо O(1) - это редуцируется? Я понимаю, что мы можем свести баг до "нет пиксела на экране", но иметь root cause в виде неправильного бита - так ли?
Ышшо раз. Любой компьютер - это куча реле на стероидах. В нём ничего, кроме этих реле нет. Вобще нет. Совсем нет. Вот был-бы один-два-три-десять-сто битов не в 0 а в 1 - хеш-таблица сложилась-бы по другому. И неважно даже - эти неудачные биты в памяти данных, в памяти кода или в регистрах процессора.
P.S. Ты постоянно ходишь по самому краю "вывести цветную картинку на ЧБ монитор". На самом деле всё просто - если проблему в принципе можно решить заменив код/данные - это проблема контактов. Если решить нельзя - не контактов. Отличить первое от второго - это другая наука.
Ну вот я как раз и думаю, где у нас эта интересная граница проходит. Простые случаи понятны. А с сложными? Например, если у нас баг появляется только в результате специфичного взаимодействия нескольких независимых систем (по сети, например), и нельзя указать на конкретный код/компьютер, который не прав? Все правы, а на выходе безобразие.
Независимые системы взаимодействуют со времен реле. Перфокартами. Нету дырки там где должна быть? Ну значит контакт не замкнулся и пробивалка дырку не пробила.
P.S. Я понимаю твою проблему. Тебе сложно редуцировать всю эту байду до релюшек. Ты выше застрял. :)
no subject
Date: 2023-09-22 08:34 am (UTC)1. Есть контакт там, где его быть не должно.
2. Нет контакта там, где он быть должен.
И все ваши компьютерные проблемы растут отсюда же.
P.S. Это как раз к вопросу про редукционизм.
no subject
Date: 2023-09-27 06:21 pm (UTC)А вот это интересный вопрос. Может ли быть компьютерный баг, который не может быть редуцирован к отсутствию/наличию контакта или нет?
no subject
Date: 2023-09-30 03:09 pm (UTC)Впрочем, если расширить понятие "контакт" до "связь между элементами", то покроет всю область.
no subject
Date: 2023-10-02 12:16 pm (UTC)Я не хочу копаться в детальках, я про холическую часть. Может ли быть такой дефект в ПО, который нельзя объяснить в рамках "есть лишний контакт", "нет нужно контакта"?
Например, можем ли мы пропуск дефолта в switch в си описать в категории "нет контакта"? (или "есть лишний контакт"?). Допустим, по спецификации состояния 3 быть не может и у нас доверенный ввод, то есть мы выбираем между 1 и 2. В результате ошибки аллокатора мы получаем buffer overflow, который почти всегда безопасный, кроме того раза, когда он трогает байт, в котором хранится 1 или 2 (и там оказывается другое число).
no subject
Date: 2023-10-02 07:06 pm (UTC)Самые первые электрические компьютеры были на обычных электромеханических реле. И всё дальнейшее развитие вычислительной техники состоит в "сделать реле поменьше, побыстрее и что-б оно меньше потребляло электричества и меньше грелось".
А уж выяснение - вот эта самая "ошибка аллокатора", она из-за того, что из космоса прилетела частица и выбила ячейку памяти, или программист, который этот аллокатор реализовывал, ошибся, и в одном месте написал "x == 0" вместо "x == 1" это дело десятое.
no subject
Date: 2023-10-03 12:46 pm (UTC)Я это понимаю. Но мой вопрос в том, могут ли быть ошибки, которые не могут быть сведены к отсутствию или наличию контакта (допустим, мы это упростим до неправильного бита).
Например, если у нас в результате алгоритмической ошибки экспоненциальная сложность алгоритма от времени - это наличие контакта или его его отсутствие? Каких именно контактов (битов)?
no subject
Date: 2023-10-03 01:17 pm (UTC)Любой существующий компьютер можно реализовать на реле (как ты понимаешь - я про техническую реализуемость впринципе). И на этом компьютере можно запустить любой реализуемый алгоритм. Для меня, как для инженера, понятно, что внутри этого компьютера нет ничего кроме контактов, которые переключаются. Т.е. любую ошибку можно исправить (или внести) поджав пальцем нужный контакт.
Научная часть вопроса - "какие именно контакты и в каком случае нужно поджимать", это другой, не связанный с редукционизмом вопрос.
P.S. Это не значит, что я считаю редукционизм лучшим способом познания мира. Он хорош, но при условии того, что есть понимание на каком именно уровне нужно остановиться в данном конкретном случае. Ошибка в программе может быть алгоритмическая, из-за ошибки компилятора, из-за ошибки реализации процессора, из-за технической проблемы с конкретным "реле". Да, любую из этих ошибок можно редуцировать до "нет нужного контакта", но всегда-ли нужно настолько глубоко погружаться?
no subject
Date: 2023-10-04 01:36 pm (UTC)Окей, давай попробуем ситуацию довести до абсурда.
Допустим, в результате ошибки планирования, для алгоритма вместо сортировки пузырьком выбрали random sort. Который, как известно, во-первых решает поставленную задачу (то есть не содержит формального бага), во-вторых делает это так медленно, что QA отказывается признавать это за решение задачи (т.к. не может дождаться окончания процесса).
Какой контакт тут неправильный? Ответ компьютер выдаёт, просто чуть-чуть медленее. Нет того бита, который "не в том положении".
no subject
Date: 2023-10-04 07:27 pm (UTC)Но если доводить ситуацию до абсурда - тут неправильные контакты, которые своим состоянием реализуют алгоритм "random sort" вместо пузырька. Т.е. есть кучка бит в "неправильном положении". Если собрать кучку народа у которых хватит пальцев - можно позажимать нужные контакты и всё исправится.
no subject
Date: 2023-10-05 10:19 am (UTC)Но почему оно в неправильном положении? Задачу-то оно решает, только медленно.
no subject
Date: 2023-10-05 10:33 am (UTC)no subject
Date: 2023-10-05 10:40 am (UTC)А если так сказали не QA, а, например, обнаружилось при эксплуатации?
Я к тому, что "медленное" решение не может быть "неправильным контактом" (битом). Оно решает задачу.
no subject
Date: 2023-10-05 11:03 am (UTC)P.S. На всякий случай напоминаю с чего всё началось - "Может ли быть компьютерный баг, который не может быть редуцирован к отсутствию/наличию контакта или нет?"
Невозможность компьютера вывести цветную картинку на чёрнобелый текстовый дисплей - компьютерным багом не считается.
no subject
Date: 2023-10-05 11:05 am (UTC)no subject
Date: 2023-10-05 11:49 am (UTC)P.S. Ты постоянно ходишь по самому краю "вывести цветную картинку на ЧБ монитор". На самом деле всё просто - если проблему в принципе можно решить заменив код/данные - это проблема контактов. Если решить нельзя - не контактов. Отличить первое от второго - это другая наука.
no subject
Date: 2023-10-05 12:59 pm (UTC)no subject
Date: 2023-10-05 01:54 pm (UTC)P.S. Я понимаю твою проблему. Тебе сложно редуцировать всю эту байду до релюшек. Ты выше застрял. :)
https://www.youtube.com/watch?v=bOOCfx2EN10
Или даже подробнее про:
https://habr.com/ru/articles/442732/