Как доказать, что ты настоящий программист?
Отечественный автопром часто подвергается нападкам. Будучи некоторое время его активным пользователем, я не могу не согласиться: качество наших автомобилей могло бы быть лучше. Разбираться в причинах такого положения дел я не буду — не та компетенция, а вот историю об автовазовском баге вспомнить можно.
Она неоднократно приводилась на разных сайтах, поэтому сделаю лишь краткий пересказ. В 1983 году талантливый математик Мурат Уртембаев попал по распределению на АВТОВАЗ. Молодой человек был преисполнен энтузиазма, но руководство не вдохновилось приходом нового специалиста, поставив его на рядовую должность.
Тогда Уртембаев решил доказать — он отличный программист и достоин уважения (высокой должности, отдыха в санатории, хорошей зарплаты, в конце концов). План Уртембаева был таков: он написал патч к программе-счетчику, отвечающей за ритм циклов подачи узлов на линию конвейера. Патч вызвал бы сбой в автоматике, заданные детали не поступили бы в нужное время, и на производственной линии возник бы хаос. Устранить его вызвался бы сам Мурат, открыв тем самым глаза начальства на особые способности недооцененного сотрудника.
Но что-то пошло не так. Вставить дискету с вирусом не составило труда. Патч должен был сработать в день выхода Уртембаева из отпуска, что отводило от него подозрения. В тоже время, он смог бы провести геройское спасение АВТОВАЗа. Но видимо Мурат был действительно не очень хорошим программистом, потому что автоматика начала сбоить за 2 дня до часа Х. На конвейер запчасти поступали не в том порядке и не в то время. Инженеры судорожно искали техническую ошибку, а о возможности бага в коде подумали в последнюю очередь. Неисправный фрагмент кода был найден, но сбои продолжались.
Совесть или тщеславие заставили Мурата Уртембаева признаться в содеянном. Программиста осудили за хулиганство, дав условный срок и обязав возместить заводу стоимость двух «Жигулей».
Интуиция против фактов
Эта история также получила широкую огласку, хотя далеко не все ее факты доступны широкой общественности. Почему? Потому что речь идет о возможности начала ядерной войны! Сентябрь 1983 года — обстановку в мире нельзя назвать благоприятной. Рейган, занимающий на тот момент пост президента США, открыто называет СССР "Империей зла". Любое вызывающее действие одной из сторон могло привести к разрыву натянутой струны хрупкого мира и началу войны.
В 100 км от Москвы на ночное оперативное дежурство командного пункта Серпухов-15 вступил советский офицер Станислав Евграфович Петров. Подполковник лично следил за ситуацией на мониторе, отображающем картинку со спутников.
Наблюдение велось за территорией США. Вдруг на табло появилось предупреждение… США запустили ракету! Взвыла сирена, началась автоматическая проверка системы, ее результат — все исправно, ошибки нет! Нагнетала обстановку тревожно завывающая сирена, а, между тем, Петрову нужно было принять взвешенное решение. Вариантов действия было два:
- Действовать по инструкции. Видя, что ракеты летят в сторону СССР, Петров должен был нажать кнопку. Дежурные имели наготове ядерный чемоданчик, который следовало доставить главе СССР Юрию Андропову. Времени на ответный удар было менее 30 минут. Если бы СССР запустил ракеты — в ночь на 26 сентября 1983 года началась война.
- Довериться интуиции. Станислав Евграфович рассуждал так: «Ракетного нападения нет, компьютер взбунтовался — дура-машина. Я компьютерщик, я их делал. А раз я их делал, то умнее меня, своего создателя, она быть не может» (источник). Нельзя было игнорировать и тот весомый факт, что: "… ракетные атаки с одной базы не начинаются, взлетают со всех сразу".
Данные с компьютера Петрова дублировались вышестоящим лицам, которые находились в некотором недоумении: Почему Станислав Евграфович медлит и не подтверждает атаку? Ему позвонили. Подполковник доложил: «Информация ложная».
Интуиция и опыт не подвели подполковника Петрова. В последствии было доказано — сбой в работе системы произошел из-за влияния внешних факторов, прежде не учитываемых: датчики спутника были засвечены солнечным светом, отраженным от высотных облаков (источник). А компьютер не смог распознать ложный сигнал.
Оценка поступка подполковника Петрова была неоднозначной. В СССР бюрократию уважали, а Станислав Евграфович повел себя в разрез инструкции. По логике, его следует наказать. С другой стороны, все прекрасно понимали, нажми он кнопку тревоги, наша сторона выпустила бы ракеты. Реальные ракеты, а не точки на карте — результаты ошибки программы. В итоге, от начальства Петров получил устный выговор. Вскоре он ушел из Армии. В звании подполковника.
Совершенно иначе к поступку советского офицера отнеслись в США. Он, однозначно, был признан героем и получил премию «Человеку, предотвратившему ядерную войну» ООН. Но Станислав Евграфович Петров по-прежнему живет в России, в скромной квартире во Фрязино. Сам себя героем не считает, но о событиях 1983 года вспоминает охотно.
Если вас заинтересовала биография подполковника Петрова Станислава Евграфовича, то можете посмотреть документальный фильм "Человек, который спас мир".
Пофилософствую
На всех современных промышленных и, тем более, военных объектах установлено необходимое программное обеспечение. Почти все процессы автоматизированы, а, следовательно, участие в работе людей становится менее необходимым. Но при этом возрастают требования к качеству программного обеспечения. Для этого на этапе его разработки рекомендуется использовать дополнительные средства проверки кода, в том числе я не могу не назвать наш статический анализатор PVS-Studio :). В ходе работы также следует проводить анализ безопасности программного кода, в частности поиск недекларированных возможностей (программных закладок) с помощью специализированных инструментов. Это обезопасит производство от повторения ситуации с автовазовским хакером.
Но, возвращаясь к выводу, отмечу, ни одна программа не имеет интуиции, эмоций и желаний. Так можно ли назвать ее решение беспристрастным? Можно ли полностью довериться искусственному интеллекту? Тогда, следуя прописанному алгоритму, в 1983 году СССР запустили бы ракеты. Уважаемые читатели, предлагаю вам порассуждать на тему: «Можно ли доверить программе принятие важного решения или ответственность должен нести человек?»
Комментарии (44)
enum
20.02.2017 12:39+13В СССР багов не было!
Ordinatus
20.02.2017 13:12+2Багов то вроде и небыло, однако было первое место в мире по закрытым багфиксам в релизнотсах.
midday
20.02.2017 14:06+3Все знают что в тоталитарном СССР ничего не было! Программистов тоже не было. Все что делалось — делалось в гулагах, а остальные охраняли. Вот и в истории этой недосказано, из-за бага чел уехал в магадан в гулаг, оттуда в шарашке работал до конца жизни под дулами автоматов. =D
BigEl
22.02.2017 09:21А еще, как говорят, не было секса, но дети были…
Если есть программный продукт — значит есть место и багам. Человеческий фактор всегда дает сбой, соответственно всегда есть шанс того, что ПО или алгоритм тоже будет сбоить (разово или единажды — это уже частности)
Oxyd
20.02.2017 14:09-4Ну серьёзные системы пишут на более других языках(на той-же Ada, например), так что PVS не сильно и поможет…
Andrey2008
20.02.2017 14:30+2Более серьезные, это понятие относительно. Например, система управления автомобилями, критична или нет? А там вполне себе царство С. Я не говорю, что вот прям PVS-Studio спасёт мир, однако стоит понимать, что сейчас крайне большое количество ответственных системам это С (или обрезанный С++).
Например, возможно баги у наших клиентов и не приведут к взрыву ракеты, но глупая ошибка может стоить очень дорого. Ну, например, если клиенты связаны с финансами.
vlreshet
20.02.2017 14:18+10Возможно меня заминусуют, но никак не ожидал такой унылой статьи на вашем корпоративном блоге. Всегда было интересно вас читать. А в этот раз — две крайне известные истории, которые не слышал только ленивый, и потом «типа размышления» которые по факту — реклама продукта. Ожидал какие-нибудь интересные баги в советских микрокалькуляторах, или в клонах спектрума, да хоть в чём нибудь. А получил древнюю историю, пересказ вики, и рекламу… Тьфу.
Andrey2008
20.02.2017 14:55-6vlreshet
20.02.2017 15:01+2Не совсем понятно к чему это, ну да ладно.
Andrey2008
20.02.2017 15:36+1Постоянно кто-то говорит, что хабр уже не торт, и что статьи не интересные и т.д. Однако они ничего не делают, чтобы улучшить ситуацию.
Мы пишем много статей. Какие-то получаются лучше, какие-то хуже. В любом случае, мы стараемся писать разнообразные статьи для разного круга читателя.
Вместо критики, намного лучше и полезнее придумать и написать интересную статью. Это повысит уровень Хабра и другие будут стараться писать ещё лучше.vlreshet
20.02.2017 15:52+6Далеко не все могут что-то делать, да и хабр это не сообщество сугубо писателей. Не у всех хватает знаний и таланта чтобы создать годную статью. Но ИМХО это не повод писать что угодно под соусом «а ты напиши лучше, раз такой умный». Если загуглить «баги в ссср» — то третья ссылка в выдаче будет на статью 2015 года, с… историей о ложном срабатывании системы защиты! Другими словами, да, но суть то не в этом. Как там написано в правилах хабра — хабр для уникального контента, да? Давайте воспринимать критику здраво.
P.S. А ваш аргумент это что-то в стиле «сперва добейся»
avost
20.02.2017 20:37-3Не у всех хватает знаний и таланта чтобы создать годную статью.
Ну, да. Зато у этих "всех" хватает злобы, яда и желчи, чтобы полить помоями того у кого таланта хватает.
А ваш аргумент это что-то в стиле «сперва добейся»
Сперва подумай, сделают ли твоё калометание мир лучше...
Comdiv
20.02.2017 16:22+5Мне статья понравилась, хотя я тоже не избежал разочарования.
Но главное в том, что в вашем ответе нарушена логика. От того, что другие напишут хорошие статьи, на что Вы намекаете, плохая статья с затраченным на неё временем не исчезнет, а поэтому и не исчезнет объект для критики. Более того, из-за большого количества плохих статей становиться и более трудозатратным поиск хороших. Поэтому для того, чтобы сделать что-то лучше, нужно не только что-то делать, но и чего-то не делать.
Было бы совсем неплохо советоваться со своим внутренним худ.советом, а то и организовать внешний.
MacIn
20.02.2017 17:57+6Вместо критики, намного лучше и полезнее придумать и написать интересную статью. Это повысит уровень Хабра и другие будут стараться писать ещё лучше.
Это никак не отменит того, что статья — баян. Баян много хуже оригинала, опубликованного, емнип, на ГТ не более полугода назад.
Rozmysel
20.02.2017 15:53+1Совершенно естественно что те кто занят делом не стоят в очереди и не базарят попусту, а ушли по делу (вон они ходят вдалеке), а большинство уже погрузились в дело с головой так что их вовсе не видно
Frankenstine
21.02.2017 13:11Я знаю об баге в программируемых калькуляторах МК-52/МК-61, основанном на методах «еггогологии», позволяющем ограниченный доступ к скрытому, шестнадцатому регистру памяти калькулятора :)
К сожалению калькулятора давно под рукой нет, рассказать подробнее не смогу :(VolCh
21.02.2017 16:04Это скорее недокументированная возможность была, скрытая фича
Frankenstine
22.02.2017 14:27Нет, скорее всего регистр не успели доделать, либо на него не хватило физических регистров памяти. В него можно было записать только число из 7 или 8 знаков, порядок игнорировался, запятая тоже. Стереть содержимое регистра нельзя было, только записать другое число.
MacIn
21.02.2017 23:11Для чего используется этот регистр в норме?
VolCh
21.02.2017 23:27В общем и в целом обычный регистр общего назначения. Один нюанс — операции с ним нельзя произвести с клавиатуры или внести их в память обычными способами. Если память не изменяет.
MacIn
21.02.2017 23:33Просто интересно. Помню, 15 обычных плюс XYZT стековые. Зачем нужен еще один скрытый — непонятно. Или просто не смогли его адресовать?
Frankenstine
22.02.2017 14:29Он неполноценный (см. выше), а операции с ним недоступны из программ. Его либо не смогли доделать, либо он был побочным эффектом архитектуры.
MacIn
22.02.2017 15:31Могу предположить, что просто не смогли адресовать, кодов не хватило — до e использовались коды регистров емнип.
Frankenstine
22.02.2017 16:01Оставался код F для шестнадцатого регистра, адресовать в теории могли бы. Но что-то помешало, либо не влез код, либо не хватило регистров, либо ещё что-то — это уже только разрабочики могли бы рассказать.
Lauren
20.02.2017 21:29+1Нажми он кнопку тревоги, наша сторона выпустила бы ракеты
.
Система СПРН двухфакторная. Насколько я понимаю если бы он нажал на кнопку, то ему позвонили бы сверху и сказали:«Всё нормально! Наверное опять жуки завелись.»
lingvo
21.02.2017 00:02Вопрос в конце статьи на сегодняшний день неуместен. Программы давно уже самостоятельно принимают решения, которые могут легко нанести вред человеку. Причем это может быть сделанно как непредумышленно — если программист совершит ошибку, так и предумышленно — хакерами или заливкой вредоносного кода.
Вопрос на сегодняшний день стоит такой — как максимально обезопасить себя и человечество от таких предумышленных и непредумышленных ошибок, при этом сохранив возможности программирования? И PVS- студио тут поможет мало, хотя это уже шаг.
Каждый сегодня варится в своем супе — авиаторы решают по-своему, давая разработку ПО двум-трем полностью независимым командам, автопроизводители посвоему — максимально тестируя код, а некоторые энтузиасты, типа геохота, отдают свою жизнь в руки машинного обучения, надеясь на авось. Так не может продолжаться, если мы не хотим, чтобы когда-нибудь ИИ нажал на кнопку и запустил пару десятков ракет. Но все пока движется к этому, а стандартов и решения нет...
Gosha_say
21.02.2017 09:37+1Возможно и пацифизм, но: есть и верхний уровень возникновения проблемы. Ведь если у вас над кроватью весит наковальня на электромагните под управлением реле и китайского ардуино, то может проще убрать не надежную конструкцию чем дебажить её обливаясь потом от страха? Но это уже совсем другая история.
Ndochp
21.02.2017 11:01А способ быстро и аккуратно вывести из строя все американские пусковые знаете? Наковальня то это ракеты вероятного противника.
Gosha_say
21.02.2017 11:28В моём абстрактном комментарии предполагается, что у «вероятного противника» тоже висит наковальня. Но уже с (возможно) индийской версией ардуино. Тут бело не в выводе из строя пусковых установок, а в том что проблема создана на самой проблеме которая может угробить всех. Включить Кэпа?
Ndochp
21.02.2017 13:45Этот Ваш комментарий я совсем не понял. Включаю кэпа, потом включите своего:
1. Наковальня над башкой это угроза башке, значит это ракета противника, а не ракета вообще и тем более не система оповещения
2. Ее появление не связано с нашей деятельностью.
3. Ее разборка возможна только на территории противника
Даже если ардуина с релюшкой это система оповещения, то наша не угрожает нам (заглючит — америку с карт стирать), американская — штатам. В любом случае — убирать надо не дома, а у соседа. Таким образом, никакой пацифизм не спасет, мы зависим не от своих действий.
А значит приходится «дебажить её обливаясь потом от страха», других путей нема.VolCh
21.02.2017 16:06то наша не угрожает нам (заглючит — америку с карт стирать)
Как сказать, разве что рассчитывать, что Америка не нанесёт ответного удара.
Gosha_say
21.02.2017 16:57Да у меня это был утопический комментарий, имелось ввиду что если избавится от оружия то и проблем с ним не будет.
saipr
21.02.2017 12:02
Операционные системы из CCCР
«Операционные системы: зачем они инженеру» из песочницы
Что и как разрабатывали в СССР
(30-летие учебного пособия ОС Minix)
VolCh
По сути решение принимает не программа, а программист. Вопрос нужно сформулировать как" может ли общество и отдельные люди доверить нам, программистам, принятия важных решений" Я бы на их месте не спешил…
noonv
С текущим трендом на внедрение систем машинного обучения — возникает проблема, что мы теперь должны довериться не программисту или алгоритму, а предварительно обученной нейронной сетке, представляющей, даже для своих создателей, этакий чёрный ящик. Кроме того, ИНС вполне можно ввести в заблуждение или даже целенаправленно обмануть.