bash.im ithappens.me zadolba.li
10771

Помни о подводном истребителе

Говорят, парашютные инструкторы больше всего не любят учеников, которые не боятся.

Вы знаете и используете юнит-тесты, интеграционные тесты, выстраиваете красивые архитектуры, пишете идеальный код? Отлично! Но почему вы уверены, что в нём нет ошибок? Почему вы не боитесь? Ни один из имеющихся у человечества инструментов, включая формальную верификацию программ, не позволяет доказать её корректность.

Очевидно, что для самолёта нулевая высота там, где лежит Мировой океан. Вот кто знал, что F-16 может летать на несколько метров ниже этого уровня? Однако над Красным морем на бреющем полёте это возможно.

Или случай, когда в ракете-носителе Ariane 5 применили хорошо показавший себя в работе гиростабилизатор от Ariane 4. Ariane 5 мог корректировать траекторию быстрее, чем предшественник, что привело к целочисленному переполнению, и система защиты на всякий случай запустила самоуничтожение ракеты.

А представляете, что будет, если лётчик пассажирского самолёта включит реверс двигателей в воздухе? Давайте проверим входные параметры, разрешим это делать, только когда шасси выпущено и начало вращаться за счёт контакта со взлётно-посадочной полосой? Правда, при гололёде может возникать неприятная ситуация…

Вы верите в ECC-память и радиационно-стойкое исполнение? Тройное резервирование с горячей заменой спасёт вас от любой аппаратной ошибки? К сожалению, математики говорят, что создать надёжную систему из ненадёжных компонентов невозможно.

Однажды инженер из AT&T по ошибке выдернул блок не из выведенной в режим обслуживания стойки АТС, а из стоящей рядом рабочей. Соседние АТС этого не оценили и веером отключились. Наземную связь на территории половины США восстанавливали около суток.

Вы все ещё уверены в своём коде и не боитесь? А были бы так уверены, если бы от вашего кода зависели жизни людей?

10770

От нашего стола — нашему столу

30 марта 2013, 07:15

Работаю IT-консультантом в крупной компании. Cегодня познал рекурсию: у пользователя на рабочем столе ярлык, ведущий на рабочий стол. Долго думал.

10769

//это код

29 марта 2013, 07:45

Довелось мне унаследовать работу одного, несомненно, талантливого программиста. Был у него всего один недостаток: не писал он комментариев. Во многих тысячах строка кода изредка лишь вкрапливалось что-то типа //new, //modified. Самый информативный комментарий, который мне попался: //product.

Коллеги-программисты! Не умеете описывать свои гениальные функции по стандартам — хотя бы не ленитесь писать информативные комментарии между строк, если не хотите, чтобы вас прокляли.

10768

Сначала думаю, потом пишу

Написал код, который работает на атомной станции, и теперь страшно? Можно узнать почему? С чего вы взяли, что программа обязательно должна глючить? Я программист, и я не понимаю.

Есть алгоритм программы — он должен быть составлен так, чтобы не допускать незапланированных ветвлений. Для этого всего лишь надо продумать его логику до того, как набивать код.

Есть входные данные — они могут поступать из разных источников, значит, надо продумать защиту от того, чтобы эти данные могли привести к сбоям.

Есть опечатки в коде — для этого в нормальных языках программирования предусмотрены специальные инструменты. И никакая «неопределённая переменная» вам не будет страшна. Кстати, не забывайте инициализировать переменные — это ведь нетрудно!

Есть ошибки, когда кто-то перепутал местами переменные или использовал не ту функцию, но для этого у вас должен быть продуман сценарий тестирования модуля. Сделали — собрали — протестировали. Ведёт себя не так, как должен? Устраните проблему! И делайте это на уровне отдельных модулей, ещё до того, как готовая система уйдёт в отдел тестирования.

Не надо городить сложноинтегрированные системы. Разбивайте их на отдельные функциональные блоки! Каждый блок должен работать идеально. Надо будет — лучше потом написать ещё один интерфейсный блок для сопряжения.

Не используйте говнобиблиотеки, «потому что модно». Если решили использовать какую-то стороннюю библиотеку, постарайтесь разобраться в вопросе, не забывайте предусмотреть проверку данных и продумать защиту от нарушения логики на стороне библиотеки.

Остаются, конечно, сбои аппаратуры типа посыпавшихся дисков, глюков микросхем памяти и помех в линиях связи. Но этим вопросом должны заниматься те, кто разрабатывает аппаратуру: существуют методы защиты от искажения данных, помехоустойчивое кодирование с избыточностью, аппаратное дублирование и так далее. Если коротко — просто не надо гнаться за самым дешёвым оборудованием.

Ну вот, чувствую, как на голове материализуется фуражка Капитана Очевидность. Вам ведь наверняка всё это уже говорили, писали в книгах по программированию. Так откуда же берутся горе-программисты, которые привыкли быстренько, тяп-ляп, практически не думая, набросать код, который вроде примерно как надо работает, но в определённую фазу Луны при снижении котировок куриных окорочков на Нью-Йоркской бирже во время снегопада в Норвегии начинает вести себя совершенно непредсказуемо?

Может быть, причина в модных тенденциях программирования, когда код пишется по наитию, в режиме ошпаренной кошки, или тремя программистами за одним монитором, или на основе монстроидальных фреймворков без понимания их устройства, или с бездумным использованием чужих наработок по принципу «нагуглил и скачал»?

Не знаю. Я работаю по старинке: сначала думаю, потом пишу. Что характерно, на глюки потом никто не жалуется. Может быть, потому, что я уверен в своём коде.

10767

Молодой мастер распылит волны интернета

29 марта 2013, 07:15

Здравствуй, добрый человек, который раздаёт соседям вайфай! До недавнего времени я тоже держал открытую точку. Цена небольшая, безлимиты позволяют, скорости приличные. К тому же домашним интернетом я пользуюсь только по вечерам, приходя с работы. Почему бы не побыть добрым соседом?

И вот наступил момент Х: из-за какого-то любителя торрентов даже страницы стали грузиться, как во времена дайлапа. Я даже вытерпел два дня, но когда приболел и работать пришлось дома, обрубил «пожирателю скорости» доступ, забанив по MAC-адресу. Кто-то может сказать, что я мог просто ограничить ему скорость, но тогда не было желания с этим возиться — на носу дедлайн, мысли заняты совсем другим.

Через три с половиной часа в дверь постучался неадекватный сосед, который начал орать, топая ногами. Это был он — любитель порнушки и HD-фильмов. Оказывается, я хакер и поломал ему интернет. Если я не включу немедленно положенный ему интернет, за который он платит деньги, то он вызовет полицию, а если понадобится — доберётся чуть ли не до президента, но не позволит воровать у него его интернет! Естественно, это не самое умное создание не стало меня слушать, в итоге оставшись за дверью, однако полицию в этот же день привело. С дежурными удалось провести хоть какой-то диалог, после которого мне принесли глубочайшие извинения.

Оказывается, мой сосед пару месяцев назад вызывал к себе «мальчика-программиста», который переустановил операционную систему на ноутбуке. Паролей от проводного интернета не нашлось, поэтому «мальчик» не нашёл ничего лучше, чем подключиться к моему вайфаю, сказав, что он провёл беспроводной интернет в квартиру, и содрав за это лишние деньги.

Дальше разбираться в этой абсурдной ситуации я не стал. Что было с мальчиком, с соседом и полицией — не знаю. Но я запаролил точку доступа, ибо «программистов» и неадекватных людей в этой стране больше, чем тех, с кем я был готов поделиться своим интернетом.

10766

Игра на поле противника

29 марта 2013, 07:15

В браузере Google Chrome открыт «Яндекс». В трее кнопка: «Яндекс — Google …». Интересно, какой счёт?

10765

Спасение не по комплаенсу

На Лондон надвигается наводнение. Всех оповестили. В числе прочих оповестили и сотрудников крупного инвестиционного банка. Надо завести заявку, чтобы сотруднику, хорошему менеджеру, выдали лодку. Завели. Лодки нет. Кто-то шепнул, что лодки лежат в соседней комнате, а насосы, чтобы их накачать, — этажом выше. Эскалировали три часа назад — лодок нет.

Вода прибывает. Уже по щиколотку. Менеджер упорно строчит письма главному менеджеру: «Вы что, не понимаете? Нам срочно нужна лодка и насос!»

Воды по пояс. Некоторые компы уже затопило, и они вырубились. Какой-то индус тащит лодку, на ходу накачивая её насосом.

— Эй, ты! Тебе апрувнули лодку?
— Нет, я сам взял.
— Ты что, это же не по комплаенсу!

Менеджер срочно строчит письмо вверх по иерархии: тут индус без апрува взял лодку и надувает её! Отвечают: «Мы подумали и решили: вам необходима не лодка, а двухмоторный катер. Катер уже заказали, как только апрувнут, он будет у вас. Дело индуса передано куда следует. Спасибо за бдительность».

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

Вода подходит к груди. Хороший менеджер уже эскалировал эскалированную эскалацию до самой высшей инстанции. Держа компьютер под мышкой, стоит на столе, в одной руке — телефон, в другой — клавиатура. Набирает письмо: «Для своевременного завершения намеченного этапа проекта нам необходимо выделить дополнительные ресурсы в количестве одной надувной лодки и одного насоса для надувной лодки». Носом нажимает Enter. Письмо отправлено. Пытаясь перехватить поудобней системник, роняет клавиатуру в воду. Всё. Письма больше писать не получится, остаётся ждать апрува.

Воды по шею. Стоя на носочках, подняв над головой системник и монитор, с надеждой и собачьей преданностью менеджер смотрит в экран. Письмо: «Постройка вашего катера апрувнута. Бюджет на покупку деталей утверждён. Перенаправляем вашу заявку непосредственно на верфь, где будет построен ваш двухмоторный катер».

Глаза хорошего менеджера подёргиваются пеленой. Вода подступает к горлу. Зато все комплаенс-полиси и процесс соблюдены.

* * *

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

10764

В кулер лезть, впрочем, тоже не стоит

28 марта 2013, 07:45

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

Разглядываю новую инструкцию по технике безопасности в очень большой и серьёзной организации:

Работнику, эксплуатирующему персональный компьютер, запрещается <...> прикасаться к задней панели системного блока (процессора) при включённом питании.

И эту инструкцию читают все!

10763

Код под капотом Родины

28 марта 2013, 07:45

Не стоит приставать к киношникам. Не знает львиная часть населения о том, как пишутся и ломаются программы. И только два процента, узрев на суперкрутом компе пришельцев из соседней галактики DOS Navigator, заходятся от смеха.

Поверьте, не знать — это счастье, а знать, как оно на самом деле, весьма страшно. Десять лет прошло, но софт, разработанный с моим участием, до сих пор работает на стартовых площадках ракет, на испытательных стендах ракетных и авиационных двигателей, на турбинах электростанций и на подводных лодках. Поэтому новости я до сих пор слушаю с некоторым нервным напряжением. Программисты меня поймут.