Сообщение Re[28]: И еще рассуждения об ИИ от 13.02.2026 3:37
Изменено 13.02.2026 3:44 Pavel Dvorkin
Re[28]: И еще рассуждения об ИИ
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Pavel Dvorkin, Вы писали:
S>Да, оба риска в этом коде реальны, но зависят от входных данных (вашей матрицы). Разберём по пунктам.
<skipped>
Ну что, неплохо. Кое-что лишнее, но в основном по сути.
А можно ему еще один вопрос задать ?
Уважаемый ИИ, Вы перечислили те места, где по анализу кода могут быть переполнения или деления на 0. Спасибо. Однако меня интересуют не столько те места, где потенциально они могут возникнуть, а те места, где они реально могут произойти при таких данных.
Поясняю
Дело в том, что когда я с кодом тогда работал (не этим, конечно, а тем, на Фортране) я потенциальные места переполнений определил и сам примерно таким же анализом. Но мне было ясно и другое. Стандартное корректирующее действие там явно было установлено для какого-то определенного места в коде. Именно в том месте занесение MAX_DOUBLE в ячейку ответа имело смысл. По сути, это просто часть алгоритма. Видимо, автор руководствовался какими-то соображениями, связанными с природой алгоритма, а реализовал их не проверкой условия, а "обработкой исключения". Увы, какими соображениями он руководствовался, я не знал.
Вот в этом месте и производилось стандартное корректирующее действие, и именно в это место надо было найти и поставить проверку, чтобы вручную произвести это действие, потому что "обработки исключения" на БЭСМ-6 не было. Если переполнение произойдет в другом месте, это будет означать просто ошибку в коде и делать такую засылку MAX_DOUBLE в ячейку ответа не имеет смысла. Там программа пусть лучше падает ,я хотя бы буду знать, что здесь что-то в алгоритме не в порядке, вместо того, чтобы там заслалось MAX_DOUBLE и дальше процесс шел с ним с непредсказуемыми последствиями.
S>Как видно, запускать и ждать теперь необязательно
Давайте для начала попросите ИИ ответить на мой дополнительный вопрос.
PD>>Нет, не придется мне коммитить код в Ваш проект. Да и в любой другой тоже. Моя программистская карьера завершена. Но в ней я такое (да и не такое!) не раз коммитил, и как-то все потом благополучно работало и никто не жаловался.
S>Так же говорят тетеньки, которые пирожками на вокзале торгуют
Аргумент, прямо скажем, так себе, но вообще-то в годы моей юности на омском вокзале (я жил рядом, и почти каждый день через него проходил, чтобы выйти , как мы говорили "в город") продавали замечательные пирожки. Никто и не жаловался.
PD>>В теории Вы правы. Если мой код действительно в библиотеке, да еще рассчитанной на то, что ее будет использовать потом широкий круг пользователей, то такое недопустимо.
PD>>Но где я сказал, что этот код для библиотеки ? Я такого нигде не говорил.
PD>>Где я сказал, что этот код может быть, когда-то будет использоваться кем-то для иной цели ? Я такого тоже не говорил.
S>Это зависит не только от вас.
Спорный вопрос. It depends, и прежде чем такое заявлять, стоило бы поинтересоваться, что за код, для чего предназначен. Ну, например, делал я код для своей диссертации в свое время, и вовсе не собирался его давать кому бы то ни было, и не давал. Так что не стоит столь категорично заявлять.
PD>>Или в моем примере с Якоби — меня абсолютно не интересует, что будет, если какой-то другой пользователь начнет использовать этот код для каких-то матриц, в которых иные данные (ну скажем, много больших элементов далеко от главной диагонали). Это его проблемы. В той задаче, что я сейчас решаю, данные именно такие и другими быть не могут — объяснение выше.
S>Полностью с вами согласен. То, что вы описываете, называется "инженерная культура". Точнее — её отсутствие. Типа, давайте не будем клеить обои за шкафом. Если кто-то когда-то решит передвинуть шкаф — это будут его проблемы.
Опять же it depends. В годы моего студенчества мы делали ремонт на кафедре и передвигали шкафы. Обоев за ними не было — обои в химлаборатории вообще не используют. Крашеные стены. А шкафы были, видимо, довоенные. Фундаментальные такие шкафы, мы их впятером с трудом передвинули. И за ними стены были покрашены иной краской, видимо, тоже довоенной. Не знаю, чем руководствовались те, кто их ставил, но едва ли вопросом о том, как за ними потом стены перекрашивать будут. И был они совершенно правы — шкафы до нашего передвижения полвека простояли. Ну а когда пришлось все же передвигать и красить (== вносить изменения в ПО) — это было уже проблемой другого поколения, нашего то есть.
PD>>И , наконец, мне надо, чтобы программа как можно скорее заработала, а не провести теоретическое изучение поведения этого алгоритма при произвольных данных.
S>Да, совершенно верно. Именно так пишут школьники: главное, чтобы программа как можно скорее заработала. Скомпилировалась — полдела сделано. Запустилась и не вылетела — всё, несём сдавать.
Да. Что-то Вы сегодня какие-то примитивные аргументы выдвигаете. Если мне нужно, чтобы программа заработала, потому что сроки поджимают — ну все, либо делай по рецептам и в сроки не уложись, либо это как школьники делают. И почему только "запустилась и не вылетела" ? Может, добавим все же еще "выдавала правильные результаты хотя бы в большинстве случаев" ?
Ладно. Расскажу про еще один свой случай. В годы работы в пединституте подрабатывал я на хоздоговоре у физиков. Фортран, СМ-1420, Интернета еще нет , тематику не помню. И вот возникла ситуация. Через 5 часов коллега должен отвезти даже не программу, а просто результаты расчетов заказчику. У меня эти 5 часов есть на написание этой программы. Я совершенно уверен, что за 3 часа ее напишу и отлажу, программа совсем несложная, какие-то вычисления по формулам.
Делаю быстро и она падает. При вводе данных из файла падает. Ничего не понимаю. Банальный тут код. Нечему тут падать. А падает.
Разбираюсь и оказывается вот что. Входной файл текстовый. Строки заканчиваются CR/LF. И тот код, который их читает, падает, если CR оказывается последним байтом сектора, а LF — первым байтом следующего сектора. Вероятность такого, как Вы понимаете, невелика. Однако во входных данных такое есть, и все падает. А осталось 2 часа.
Ну конечно, я должен был действовать по правилам. Выяснить, почему падает. Написать код с учетом этой ситуации, предусмотреть ее и в случае возникновения обработать. Вот только осталось 2 часа, и за это время я никак не успею.
Что я сделал. Взял исходный файл, напустил на него текстовый редактор и добавил в разных местах по пробелу, благо они ни на что не влияли. Запустил и все прошло.
А в чем была причина падения — я так и не узнал. Больше эту программу и не требовалось запускать.
Так что it depends.
S>Но поскольку мир разработки не исчерпывается одноразовыми студенческими программами, мы своих студентов стараемся учить, как делать правильно. Наш лозунг: "Делайте всё как следует. Стрёмно получится само".
Да ради бога. В общем, я согласен, что надо учить делать правильно. Вот только потом в реальной работе делать иногда приходится по-разному. И порой отступать от всяких правил, если выигрыш от этого отступления компенсирует возможные проблемы, связанные с этим отступлением. It depends опять же. Разные бывают задачи.
Кстати, одноразовыми бывают не только студенческие программы. Я 3 года работал в проекте, который был одноразовым. Рассказывать подробно о нем не буду, просто скажу, что он не мог быть портирован ни во что другое — из-за отсутствия предметной области. Грубо говоря, иного такого объекта в мире нет и быть не может.
PD>>Те, кто отводил под это 2 цифры в 1960 или 1970 году — вполне были правы. Не дожили их машины и и их программы до 2000 года. И не могли дожить.
S>Прекрасно дожили. То, что программы, разработанные в СССР, выбрасывали вместе с машинами — это не стандартная ситуация, а глобальная катастрофа.
S>В развитом мире код, написанный для IBM360, прекрасно работал в 2010 (и наверняка сейчас всё ещё работает).
Вполне возможно. Вот только если там было что-то, связанное с годом, и использовались 2 цифры, то просто внесли изменения в году так примерно 1995. А тот, кто в 1960 году поставил 2 цифры — был вполне прав.
Или Вы считаете, что программы 1970 года без изменений работали 40 лет ? Вот как их в 1960 году откомпилировали тем компилятором, так они до сих пор и используются ? Как-то сомнительно, прямо скажем.
PD>>А если какой-то их код и дожил года до так 1980, то его потом все равно переносили, там и должны были поправить. Там скорее всего многое пришлось бы править — ну хотя бы из-за разных размеров данных на разных машинах.
S>Про вашу точку зрения ещё в 1981 году сняли анимационный художественный фильм.
S>https://www.kinopoisk.ru/film/257212/
Смотреть не буду, неинтересно. Аргумент хлипкий.
S>Здравствуйте, Pavel Dvorkin, Вы писали:
S>Да, оба риска в этом коде реальны, но зависят от входных данных (вашей матрицы). Разберём по пунктам.
<skipped>
Ну что, неплохо. Кое-что лишнее, но в основном по сути.
А можно ему еще один вопрос задать ?
Уважаемый ИИ, Вы перечислили те места, где по анализу кода могут быть переполнения или деления на 0. Спасибо. Однако меня интересуют не столько те места, где потенциально они могут возникнуть, а те места, где они реально могут произойти при таких данных.
Поясняю
Дело в том, что когда я с кодом тогда работал (не этим, конечно, а тем, на Фортране) я потенциальные места переполнений определил и сам примерно таким же анализом. Но мне было ясно и другое. Стандартное корректирующее действие там явно было установлено для какого-то определенного места в коде. Именно в том месте занесение MAX_DOUBLE в ячейку ответа имело смысл. По сути, это просто часть алгоритма. Видимо, автор руководствовался какими-то соображениями, связанными с природой алгоритма, а реализовал их не проверкой условия, а "обработкой исключения". Увы, какими соображениями он руководствовался, я не знал.
Вот в этом месте и производилось стандартное корректирующее действие, и именно в это место надо было найти и поставить проверку, чтобы вручную произвести это действие, потому что "обработки исключения" на БЭСМ-6 не было. Если переполнение произойдет в другом месте, это будет означать просто ошибку в коде и делать такую засылку MAX_DOUBLE в ячейку ответа не имеет смысла. Там программа пусть лучше падает ,я хотя бы буду знать, что здесь что-то в алгоритме не в порядке, вместо того, чтобы там заслалось MAX_DOUBLE и дальше процесс шел с ним с непредсказуемыми последствиями.
S>Как видно, запускать и ждать теперь необязательно
Давайте для начала попросите ИИ ответить на мой дополнительный вопрос.
PD>>Нет, не придется мне коммитить код в Ваш проект. Да и в любой другой тоже. Моя программистская карьера завершена. Но в ней я такое (да и не такое!) не раз коммитил, и как-то все потом благополучно работало и никто не жаловался.
S>Так же говорят тетеньки, которые пирожками на вокзале торгуют
Аргумент, прямо скажем, так себе, но вообще-то в годы моей юности на омском вокзале (я жил рядом, и почти каждый день через него проходил, чтобы выйти , как мы говорили "в город") продавали замечательные пирожки. Никто и не жаловался.
PD>>В теории Вы правы. Если мой код действительно в библиотеке, да еще рассчитанной на то, что ее будет использовать потом широкий круг пользователей, то такое недопустимо.
PD>>Но где я сказал, что этот код для библиотеки ? Я такого нигде не говорил.
PD>>Где я сказал, что этот код может быть, когда-то будет использоваться кем-то для иной цели ? Я такого тоже не говорил.
S>Это зависит не только от вас.
Спорный вопрос. It depends, и прежде чем такое заявлять, стоило бы поинтересоваться, что за код, для чего предназначен. Ну, например, делал я код для своей диссертации в свое время, и вовсе не собирался его давать кому бы то ни было, и не давал. Так что не стоит столь категорично заявлять.
PD>>Или в моем примере с Якоби — меня абсолютно не интересует, что будет, если какой-то другой пользователь начнет использовать этот код для каких-то матриц, в которых иные данные (ну скажем, много больших элементов далеко от главной диагонали). Это его проблемы. В той задаче, что я сейчас решаю, данные именно такие и другими быть не могут — объяснение выше.
S>Полностью с вами согласен. То, что вы описываете, называется "инженерная культура". Точнее — её отсутствие. Типа, давайте не будем клеить обои за шкафом. Если кто-то когда-то решит передвинуть шкаф — это будут его проблемы.
Опять же it depends. В годы моего студенчества мы делали ремонт на кафедре и передвигали шкафы. Обоев за ними не было — обои в химлаборатории вообще не используют. Крашеные стены. А шкафы были, видимо, довоенные. Фундаментальные такие шкафы, мы их впятером с трудом передвинули. И за ними стены были покрашены иной краской, видимо, тоже довоенной. Не знаю, чем руководствовались те, кто их ставил, но едва ли вопросом о том, как за ними потом стены перекрашивать будут. И был они совершенно правы — шкафы до нашего передвижения полвека простояли. Ну а когда пришлось все же передвигать и красить (== вносить изменения в ПО) — это было уже проблемой другого поколения, нашего то есть.
PD>>И , наконец, мне надо, чтобы программа как можно скорее заработала, а не провести теоретическое изучение поведения этого алгоритма при произвольных данных.
S>Да, совершенно верно. Именно так пишут школьники: главное, чтобы программа как можно скорее заработала. Скомпилировалась — полдела сделано. Запустилась и не вылетела — всё, несём сдавать.
Да. Что-то Вы сегодня какие-то примитивные аргументы выдвигаете. Если мне нужно, чтобы программа заработала, потому что сроки поджимают — ну все, либо делай по рецептам и в сроки не уложись, либо это как школьники делают. И почему только "запустилась и не вылетела" ? Может, добавим все же еще "выдавала правильные результаты хотя бы в большинстве случаев" ?
Ладно. Расскажу про еще один свой случай. В годы работы в пединституте подрабатывал я на хоздоговоре у физиков. Фортран, СМ-1420, Интернета еще нет , тематику не помню. И вот возникла ситуация. Через 5 часов коллега должен отвезти даже не программу, а просто результаты расчетов заказчику. У меня эти 5 часов есть на написание этой программы. Я совершенно уверен, что за 3 часа ее напишу и отлажу, программа совсем несложная, какие-то вычисления по формулам.
Делаю быстро и она падает. При вводе данных из файла падает. Ничего не понимаю. Банальный тут код. Нечему тут падать. А падает.
Разбираюсь и оказывается вот что. Входной файл текстовый. Строки заканчиваются CR/LF. И тот код, который их читает, падает, если CR оказывается последним байтом сектора, а LF — первым байтом следующего сектора. Вероятность такого, как Вы понимаете, невелика. Однако во входных данных такое есть, и все падает. А осталось 2 часа.
Ну конечно, я должен был действовать по правилам. Выяснить, почему падает. Написать код с учетом этой ситуации, предусмотреть ее и в случае возникновения обработать. Вот только осталось 2 часа, и за это время я никак не успею.
Что я сделал. Взял исходный файл, напустил на него текстовый редактор и добавил в разных местах по пробелу, благо они ни на что не влияли. Запустил и все прошло.
А в чем была причина падения — я так и не узнал. Больше эту программу и не требовалось запускать.
Так что it depends.
S>Но поскольку мир разработки не исчерпывается одноразовыми студенческими программами, мы своих студентов стараемся учить, как делать правильно. Наш лозунг: "Делайте всё как следует. Стрёмно получится само".
Да ради бога. В общем, я согласен, что надо учить делать правильно. Вот только потом в реальной работе делать иногда приходится по-разному. И порой отступать от всяких правил, если выигрыш от этого отступления компенсирует возможные проблемы, связанные с этим отступлением. It depends опять же. Разные бывают задачи.
Кстати, одноразовыми бывают не только студенческие программы. Я 3 года работал в проекте, который был одноразовым. Рассказывать подробно о нем не буду, просто скажу, что он не мог быть портирован ни во что другое — из-за отсутствия предметной области. Грубо говоря, иного такого объекта в мире нет и быть не может.
PD>>Те, кто отводил под это 2 цифры в 1960 или 1970 году — вполне были правы. Не дожили их машины и и их программы до 2000 года. И не могли дожить.
S>Прекрасно дожили. То, что программы, разработанные в СССР, выбрасывали вместе с машинами — это не стандартная ситуация, а глобальная катастрофа.
S>В развитом мире код, написанный для IBM360, прекрасно работал в 2010 (и наверняка сейчас всё ещё работает).
Вполне возможно. Вот только если там было что-то, связанное с годом, и использовались 2 цифры, то просто внесли изменения в году так примерно 1995. А тот, кто в 1960 году поставил 2 цифры — был вполне прав.
Или Вы считаете, что программы 1970 года без изменений работали 40 лет ? Вот как их в 1960 году откомпилировали тем компилятором, так они до сих пор и используются ? Как-то сомнительно, прямо скажем.
PD>>А если какой-то их код и дожил года до так 1980, то его потом все равно переносили, там и должны были поправить. Там скорее всего многое пришлось бы править — ну хотя бы из-за разных размеров данных на разных машинах.
S>Про вашу точку зрения ещё в 1981 году сняли анимационный художественный фильм.
S>https://www.kinopoisk.ru/film/257212/
Смотреть не буду, неинтересно. Аргумент хлипкий.
Re[28]: И еще рассуждения об ИИ
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Pavel Dvorkin, Вы писали:
S>Да, оба риска в этом коде реальны, но зависят от входных данных (вашей матрицы). Разберём по пунктам.
<skipped>
Ну что, неплохо. Кое-что лишнее, но в основном по сути.
А можно ему еще один вопрос задать ?
Уважаемый ИИ, Вы перечислили те места, где по анализу кода могут быть переполнения или деления на 0. Спасибо. Однако меня интересуют не столько те места, где потенциально они могут возникнуть, а те места, где они реально могут произойти при таких данных.
Поясняю
Дело в том, что когда я с кодом тогда работал (не этим, конечно, а тем, на Фортране) я потенциальные места переполнений определил и сам примерно таким же анализом. Но мне было ясно и другое. Стандартное корректирующее действие там явно было установлено для какого-то определенного места в коде. Именно в том месте занесение MAX_DOUBLE в ячейку ответа имело смысл. По сути, это просто часть алгоритма. Видимо, автор руководствовался какими-то соображениями, связанными с природой алгоритма, а реализовал их не проверкой условия, а "обработкой исключения". Увы, какими соображениями он руководствовался, я не знал.
Вот в этом месте и производилось стандартное корректирующее действие, и именно в это место надо было найти и поставить проверку, чтобы вручную произвести это действие, потому что "обработки исключения" на БЭСМ-6 не было. Если переполнение произойдет в другом месте, это будет означать просто ошибку в коде и делать такую засылку MAX_DOUBLE в ячейку ответа не имеет смысла. Там программа пусть лучше падает ,я хотя бы буду знать, что здесь что-то в алгоритме не в порядке, вместо того, чтобы там заслалось MAX_DOUBLE и дальше процесс шел с ним с непредсказуемыми последствиями.
S>Как видно, запускать и ждать теперь необязательно
Давайте для начала попросите ИИ ответить на мой дополнительный вопрос.
PD>>Нет, не придется мне коммитить код в Ваш проект. Да и в любой другой тоже. Моя программистская карьера завершена. Но в ней я такое (да и не такое!) не раз коммитил, и как-то все потом благополучно работало и никто не жаловался.
S>Так же говорят тетеньки, которые пирожками на вокзале торгуют
Аргумент, прямо скажем, так себе, но вообще-то в годы моей юности на омском вокзале (я жил рядом, и почти каждый день через него проходил, чтобы выйти , как мы говорили "в город") продавали замечательные пирожки. Никто и не жаловался.
PD>>В теории Вы правы. Если мой код действительно в библиотеке, да еще рассчитанной на то, что ее будет использовать потом широкий круг пользователей, то такое недопустимо.
PD>>Но где я сказал, что этот код для библиотеки ? Я такого нигде не говорил.
PD>>Где я сказал, что этот код может быть, когда-то будет использоваться кем-то для иной цели ? Я такого тоже не говорил.
S>Это зависит не только от вас.
Спорный вопрос. It depends, и прежде чем такое заявлять, стоило бы поинтересоваться, что за код, для чего предназначен. Ну, например, делал я код для своей диссертации в свое время, и вовсе не собирался его давать кому бы то ни было, и не давал. Так что не стоит столь категорично заявлять.
PD>>Или в моем примере с Якоби — меня абсолютно не интересует, что будет, если какой-то другой пользователь начнет использовать этот код для каких-то матриц, в которых иные данные (ну скажем, много больших элементов далеко от главной диагонали). Это его проблемы. В той задаче, что я сейчас решаю, данные именно такие и другими быть не могут — объяснение выше.
S>Полностью с вами согласен. То, что вы описываете, называется "инженерная культура". Точнее — её отсутствие. Типа, давайте не будем клеить обои за шкафом. Если кто-то когда-то решит передвинуть шкаф — это будут его проблемы.
Опять же it depends. В годы моего студенчества мы делали ремонт на кафедре и передвигали шкафы. Обоев за ними не было — обои в химлаборатории вообще не используют. Крашеные стены. А шкафы были, видимо, довоенные. Фундаментальные такие шкафы, мы их впятером с трудом передвинули. И за ними стены были покрашены иной краской, видимо, тоже довоенной. Не знаю, чем руководствовались те, кто их ставил, но едва ли вопросом о том, как за ними потом стены перекрашивать будут. И был они совершенно правы — шкафы до нашего передвижения полвека простояли. Ну а когда пришлось все же передвигать и красить (== вносить изменения в ПО) — это было уже проблемой другого поколения, нашего то есть.
PD>>И , наконец, мне надо, чтобы программа как можно скорее заработала, а не провести теоретическое изучение поведения этого алгоритма при произвольных данных.
S>Да, совершенно верно. Именно так пишут школьники: главное, чтобы программа как можно скорее заработала. Скомпилировалась — полдела сделано. Запустилась и не вылетела — всё, несём сдавать.
Да. Что-то Вы сегодня какие-то примитивные аргументы выдвигаете. Если мне нужно, чтобы программа заработала, потому что сроки поджимают — ну все, либо делай по рецептам и в сроки не уложись, либо это как школьники делают. И почему только "запустилась и не вылетела" ? Может, добавим все же еще "выдавала правильные результаты хотя бы в большинстве случаев" ?
Ладно. Расскажу про еще один свой случай. В годы работы в пединституте подрабатывал я на хоздоговоре у физиков. Фортран, СМ-1420, Интернета еще нет , тематику не помню. И вот возникла ситуация. Через 5 часов коллега должен отвезти даже не программу, а просто результаты расчетов заказчику. У меня эти 5 часов есть на написание этой программы. Я совершенно уверен, что за 3 часа ее напишу и отлажу, программа совсем несложная, какие-то вычисления по формулам.
Делаю быстро и она падает. При вводе данных из файла падает. Ничего не понимаю. Банальный тут код. Нечему тут падать. А падает.
Разбираюсь и оказывается вот что. Входной файл текстовый. Строки заканчиваются CR/LF. И тот код, который их читает, падает, если CR оказывается последним байтом сектора, а LF — первым байтом следующего сектора. Вероятность такого, как Вы понимаете, невелика. Однако во входных данных такое есть, и все падает. А осталось 2 часа.
Ну конечно, я должен был действовать по правилам. Выяснить, почему падает. Написать код с учетом этой ситуации, предусмотреть ее и в случае возникновения обработать. Вот только осталось 2 часа, и за это время я никак не успею.
Что я сделал. Взял исходный файл, напустил на него текстовый редактор и добавил в разных местах по пробелу, благо они ни на что не влияли. Запустил и все прошло.
А в чем была причина падения — я так и не узнал. Больше эту программу и не требовалось запускать.
Так что it depends.
S>Но поскольку мир разработки не исчерпывается одноразовыми студенческими программами, мы своих студентов стараемся учить, как делать правильно. Наш лозунг: "Делайте всё как следует. Стрёмно получится само".
Да ради бога. В общем, я согласен, что надо учить делать правильно. Вот только потом в реальной работе делать иногда приходится по-разному. И порой отступать от всяких правил, если выигрыш от этого отступления компенсирует возможные проблемы, связанные с этим отступлением. It depends опять же. Разные бывают задачи.
Кстати, одноразовыми бывают не только студенческие программы. Я 3 года работал в проекте, который был одноразовым. Рассказывать подробно о нем не буду, просто скажу, что он не мог быть портирован ни во что другое — из-за отсутствия предметной области. Грубо говоря, иного такого объекта в мире нет и быть не может.
PD>>Те, кто отводил под это 2 цифры в 1960 или 1970 году — вполне были правы. Не дожили их машины и и их программы до 2000 года. И не могли дожить.
S>Прекрасно дожили. То, что программы, разработанные в СССР, выбрасывали вместе с машинами — это не стандартная ситуация, а глобальная катастрофа.
S>В развитом мире код, написанный для IBM360, прекрасно работал в 2010 (и наверняка сейчас всё ещё работает).
Вполне возможно. Вот только если там было что-то, связанное с годом, и использовались 2 цифры, то просто внесли изменения в году так примерно 1995. А тот, кто в 1960 году поставил 2 цифры — был вполне прав.
Или Вы считаете, что программы 1970 года без изменений работали 40 лет ? Вот как их в 1970 году откомпилировали тем компилятором, так они до сих пор и используются ? Как-то сомнительно, прямо скажем.
PD>>А если какой-то их код и дожил года до так 1980, то его потом все равно переносили, там и должны были поправить. Там скорее всего многое пришлось бы править — ну хотя бы из-за разных размеров данных на разных машинах.
S>Про вашу точку зрения ещё в 1981 году сняли анимационный художественный фильм.
S>https://www.kinopoisk.ru/film/257212/
Смотреть не буду, неинтересно. Аргумент хлипкий.
S>Здравствуйте, Pavel Dvorkin, Вы писали:
S>Да, оба риска в этом коде реальны, но зависят от входных данных (вашей матрицы). Разберём по пунктам.
<skipped>
Ну что, неплохо. Кое-что лишнее, но в основном по сути.
А можно ему еще один вопрос задать ?
Уважаемый ИИ, Вы перечислили те места, где по анализу кода могут быть переполнения или деления на 0. Спасибо. Однако меня интересуют не столько те места, где потенциально они могут возникнуть, а те места, где они реально могут произойти при таких данных.
Поясняю
Дело в том, что когда я с кодом тогда работал (не этим, конечно, а тем, на Фортране) я потенциальные места переполнений определил и сам примерно таким же анализом. Но мне было ясно и другое. Стандартное корректирующее действие там явно было установлено для какого-то определенного места в коде. Именно в том месте занесение MAX_DOUBLE в ячейку ответа имело смысл. По сути, это просто часть алгоритма. Видимо, автор руководствовался какими-то соображениями, связанными с природой алгоритма, а реализовал их не проверкой условия, а "обработкой исключения". Увы, какими соображениями он руководствовался, я не знал.
Вот в этом месте и производилось стандартное корректирующее действие, и именно в это место надо было найти и поставить проверку, чтобы вручную произвести это действие, потому что "обработки исключения" на БЭСМ-6 не было. Если переполнение произойдет в другом месте, это будет означать просто ошибку в коде и делать такую засылку MAX_DOUBLE в ячейку ответа не имеет смысла. Там программа пусть лучше падает ,я хотя бы буду знать, что здесь что-то в алгоритме не в порядке, вместо того, чтобы там заслалось MAX_DOUBLE и дальше процесс шел с ним с непредсказуемыми последствиями.
S>Как видно, запускать и ждать теперь необязательно
Давайте для начала попросите ИИ ответить на мой дополнительный вопрос.
PD>>Нет, не придется мне коммитить код в Ваш проект. Да и в любой другой тоже. Моя программистская карьера завершена. Но в ней я такое (да и не такое!) не раз коммитил, и как-то все потом благополучно работало и никто не жаловался.
S>Так же говорят тетеньки, которые пирожками на вокзале торгуют
Аргумент, прямо скажем, так себе, но вообще-то в годы моей юности на омском вокзале (я жил рядом, и почти каждый день через него проходил, чтобы выйти , как мы говорили "в город") продавали замечательные пирожки. Никто и не жаловался.
PD>>В теории Вы правы. Если мой код действительно в библиотеке, да еще рассчитанной на то, что ее будет использовать потом широкий круг пользователей, то такое недопустимо.
PD>>Но где я сказал, что этот код для библиотеки ? Я такого нигде не говорил.
PD>>Где я сказал, что этот код может быть, когда-то будет использоваться кем-то для иной цели ? Я такого тоже не говорил.
S>Это зависит не только от вас.
Спорный вопрос. It depends, и прежде чем такое заявлять, стоило бы поинтересоваться, что за код, для чего предназначен. Ну, например, делал я код для своей диссертации в свое время, и вовсе не собирался его давать кому бы то ни было, и не давал. Так что не стоит столь категорично заявлять.
PD>>Или в моем примере с Якоби — меня абсолютно не интересует, что будет, если какой-то другой пользователь начнет использовать этот код для каких-то матриц, в которых иные данные (ну скажем, много больших элементов далеко от главной диагонали). Это его проблемы. В той задаче, что я сейчас решаю, данные именно такие и другими быть не могут — объяснение выше.
S>Полностью с вами согласен. То, что вы описываете, называется "инженерная культура". Точнее — её отсутствие. Типа, давайте не будем клеить обои за шкафом. Если кто-то когда-то решит передвинуть шкаф — это будут его проблемы.
Опять же it depends. В годы моего студенчества мы делали ремонт на кафедре и передвигали шкафы. Обоев за ними не было — обои в химлаборатории вообще не используют. Крашеные стены. А шкафы были, видимо, довоенные. Фундаментальные такие шкафы, мы их впятером с трудом передвинули. И за ними стены были покрашены иной краской, видимо, тоже довоенной. Не знаю, чем руководствовались те, кто их ставил, но едва ли вопросом о том, как за ними потом стены перекрашивать будут. И был они совершенно правы — шкафы до нашего передвижения полвека простояли. Ну а когда пришлось все же передвигать и красить (== вносить изменения в ПО) — это было уже проблемой другого поколения, нашего то есть.
PD>>И , наконец, мне надо, чтобы программа как можно скорее заработала, а не провести теоретическое изучение поведения этого алгоритма при произвольных данных.
S>Да, совершенно верно. Именно так пишут школьники: главное, чтобы программа как можно скорее заработала. Скомпилировалась — полдела сделано. Запустилась и не вылетела — всё, несём сдавать.
Да. Что-то Вы сегодня какие-то примитивные аргументы выдвигаете. Если мне нужно, чтобы программа заработала, потому что сроки поджимают — ну все, либо делай по рецептам и в сроки не уложись, либо это как школьники делают. И почему только "запустилась и не вылетела" ? Может, добавим все же еще "выдавала правильные результаты хотя бы в большинстве случаев" ?
Ладно. Расскажу про еще один свой случай. В годы работы в пединституте подрабатывал я на хоздоговоре у физиков. Фортран, СМ-1420, Интернета еще нет , тематику не помню. И вот возникла ситуация. Через 5 часов коллега должен отвезти даже не программу, а просто результаты расчетов заказчику. У меня эти 5 часов есть на написание этой программы. Я совершенно уверен, что за 3 часа ее напишу и отлажу, программа совсем несложная, какие-то вычисления по формулам.
Делаю быстро и она падает. При вводе данных из файла падает. Ничего не понимаю. Банальный тут код. Нечему тут падать. А падает.
Разбираюсь и оказывается вот что. Входной файл текстовый. Строки заканчиваются CR/LF. И тот код, который их читает, падает, если CR оказывается последним байтом сектора, а LF — первым байтом следующего сектора. Вероятность такого, как Вы понимаете, невелика. Однако во входных данных такое есть, и все падает. А осталось 2 часа.
Ну конечно, я должен был действовать по правилам. Выяснить, почему падает. Написать код с учетом этой ситуации, предусмотреть ее и в случае возникновения обработать. Вот только осталось 2 часа, и за это время я никак не успею.
Что я сделал. Взял исходный файл, напустил на него текстовый редактор и добавил в разных местах по пробелу, благо они ни на что не влияли. Запустил и все прошло.
А в чем была причина падения — я так и не узнал. Больше эту программу и не требовалось запускать.
Так что it depends.
S>Но поскольку мир разработки не исчерпывается одноразовыми студенческими программами, мы своих студентов стараемся учить, как делать правильно. Наш лозунг: "Делайте всё как следует. Стрёмно получится само".
Да ради бога. В общем, я согласен, что надо учить делать правильно. Вот только потом в реальной работе делать иногда приходится по-разному. И порой отступать от всяких правил, если выигрыш от этого отступления компенсирует возможные проблемы, связанные с этим отступлением. It depends опять же. Разные бывают задачи.
Кстати, одноразовыми бывают не только студенческие программы. Я 3 года работал в проекте, который был одноразовым. Рассказывать подробно о нем не буду, просто скажу, что он не мог быть портирован ни во что другое — из-за отсутствия предметной области. Грубо говоря, иного такого объекта в мире нет и быть не может.
PD>>Те, кто отводил под это 2 цифры в 1960 или 1970 году — вполне были правы. Не дожили их машины и и их программы до 2000 года. И не могли дожить.
S>Прекрасно дожили. То, что программы, разработанные в СССР, выбрасывали вместе с машинами — это не стандартная ситуация, а глобальная катастрофа.
S>В развитом мире код, написанный для IBM360, прекрасно работал в 2010 (и наверняка сейчас всё ещё работает).
Вполне возможно. Вот только если там было что-то, связанное с годом, и использовались 2 цифры, то просто внесли изменения в году так примерно 1995. А тот, кто в 1960 году поставил 2 цифры — был вполне прав.
Или Вы считаете, что программы 1970 года без изменений работали 40 лет ? Вот как их в 1970 году откомпилировали тем компилятором, так они до сих пор и используются ? Как-то сомнительно, прямо скажем.
PD>>А если какой-то их код и дожил года до так 1980, то его потом все равно переносили, там и должны были поправить. Там скорее всего многое пришлось бы править — ну хотя бы из-за разных размеров данных на разных машинах.
S>Про вашу точку зрения ещё в 1981 году сняли анимационный художественный фильм.
S>https://www.kinopoisk.ru/film/257212/
Смотреть не буду, неинтересно. Аргумент хлипкий.