bash.im ithappens.me zadolba.li

Индийский код

3219

От наших — вашим

При установке серьёзных программных продуктов часто идёт целое слайд-шоу, описывающее выдающиеся возможности новой версии программы. При установке Microsoft Visual Studio 2005 слайд-шоу состояло из двух меняющихся картинок:

— счастливое лицо китайца на фоне мониторов;
— не менее счастливое лицо индуса на фоне мониторов.

Самокритичность Микрософта очень удивила.

3204

Поспешишь — пакет насмешишь

Приехали к нам в российское представительство иностранной компании зарубежные программисты, чтобы осчастливить нас новой CRM-системой. У них план чёткий: к определённой дате нашу существующую (и неплохо работающую) CRM нужно заменить на новую, а как она работает — это уже дело второстепенной важности.

Прибегает девочка-ассистентка, на ломаном английском просит записать на болванку существующую БД и отдать её их Самому Главному Программисту, чтобы тот импортировал её в новую CRM. На моё резонное предложение взять БД с сервера по сетке девочка лопочет что-то маловразумительное про политику безопасности. Ладно, болванка так болванка — записываю, приношу Самому Главному (он в это время увлечённо говорит по телефону), кладу перед ним и ухожу.

Минут через пятнадцать девочка прибегает снова и просит меня подойти — диск не читается! Прихожу опять к Самому Главному Программисту. Не снисходя до вербального общения со столь мелкой сошкой, откинувшись на кресло, он тыкает пальцем поочерёдно в болванку и в свой весьма потрёпанный ноутбук. Я оглядываю ноут, нахожу кнопку CD-привода, жму... В приводе стоит установочный диск с дровами от ноута, порядком пыльный — похоже, не вынимали его оттуда не меньше года. Юмора я не понял, но закрались подозрения, что Главный Программист не знал, куда в его ноуте диски вставляются.

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

* * *

CRM наконец-то поставили. Старую базу импортировать так и не смогли. Новая CRM работает, но как-то странно: с 8 до 9 утра — стабильно, потом начинает глючить, а к 11 ложится окончательно. Начиная с 5 вечера CRM постепенно оживает, и к утру снова всё стабильно. Не выдерживает потока запросов в пиковые часы? Тыкаю иностранных коллег в это дело носом. Через пару дней они докладывают, что всё окей. Но на самом деле происходит нечто странное: теперь CRM еле шевелится утром и вечером, а в пиковые часы — пашет стабильно! После очередного доклада об устранении багов зависимость работоспособности системы от времени суток становится совсем уж чудесатой, но прослеживается всё равно чётко.

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

Как же хорошо, что эти люди пишут программы, а не строят дома и не конструируют самолёты...

3126

Последнее индусское заблуждение

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

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

Еще я думал, что неплохо изъясняюсь по-английски, — до тех пор, пока не приключилась необходимость пообщаться с латышами, наотрез забывшими русский язык. Мои знания укрепились латышским вариантом английского, но помня, что есть ещё немало гордых наций (и не только в Прибалтике), в анкетах я пишу, что мой уровень английского — «учу».

Лет двадцать пять я находился в счастливой уверенности, что хорошо программирую. Эту ложную, как выяснилось, уверенность вскормили во мне опыт программирования всего — от станков и роботов до распределённых информационок глобального масштаба. Иллюзию разрушили результаты дочкиной контрольной работы по информатике, задания по программированию в которой чадо выполняло под мудрым руководством своего папули, свято верящего, что главное правило в программировании — «необходимо и достаточно».

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

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

3118

Возвращение к истокам

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

Писался этот комплекс в три попытки. Первая представляла собой просто одиночную программу, которая перебиралась и перекомпилировалась, обрастая форками, ключами запуска и дефайнами до полной нередактибельности. Весь отдел ПО, вооружившись последними достижениями от MS, полгода ваял на Visual C++ замену. Итог: весь рабочий код уже обкатан на старой версии, язык C++, среда визуальная типа «интерфейс за один клик». Замена получилась модульная, и хотя перестыковка модулей осуществлялась с определённым сексом, приняли её на «ура».

Грянул кризис, утекли мозги, да и модульная софтина обросла костылями из-за трудностей с перестыковкой модулей. Свершилась третья попытка: руководство дало новым мозгам задание переписать всё заново, а для сокращения времени задействовали наимоднейшую концепцию «программирование без программирования» (UML и иже с ним: даёшь машине формулу, она в ответ — готовую программу). В этот раз в полгода уложиться явно не получилось: достижение стадии «самое начало комплекса уже иногда почти работает» вызвало всеобщий экстаз. Это, конечно, хорошо, но работать-то как?

Комплекс с сохранением модульности (только теперь модули перегруппировываются за секунду без всяких хитрых тайных знаний) я переписал в одно рыло (даже скорее в полрыла) вечерами за три месяца. Пользовался Open Watcom — дикой древней средой, в которой мышкой рисуются только диалоги. Си, «плюсы» в следовых количествах. Код полон if ((wParam&0xFFFF)==RUN_SERVO) SendCommand (MOTOR, 1); — кто знает WinAPI, тот поймёт, что такое ручная обработка оконных событий и какая это куча писанины. В теле сплошная работа непосредственно с указателями, проскакивают следы ассемблерных вставок. И почему же эта писанина совершенно не помешала мне работать в разы быстрее, чем все предшественники? Я вижу только две причины:

1) Работа программиста отнюдь не в наборе текста. Программист всё-таки не машинистка, скорость его работы не от количества знаков в минуту зависит.

2) Современные среды служат не для ускорения работы, а для снижения порога вхождения. Абстракция, оборачивающаяся во всё более и более толстую луковицу, нужна больше для сбора ста индусов в один хайвмайнд без их рассинхронизации (и вообще для того, чтобы индусы могли хоть как-то принять участие), а квалифицированному программисту, один раз изучившему системные «кирпичики», на которых держатся все разновидности таких сред, она производительность труда только снижает.

Завтра моя внеплановая четвёртая попытка, вызвавшая лёгкий шок, сдаётся в эксплуатацию. Бета выловила от силы полтора глюка — не в пример предшественникам (и это при том, что часть кода писалась вслепую без оборудования, с которым должна взаимодействовать). Вопрос напоследок: которая из четырёх версий обладает наибольшим быстродействием?

3034

Красный цвет — работы нет

Сижу, никого не трогаю, BIOS перепрошиваю. Делаю это всего-навсего третий раз в жизни — нервничаю прилично, системник не мой и стоит хороших денег. Перепрошиваю без упса — просто нет его в наличии. Всё время перепрошивки (около минуты) сижу и молюсь, чтобы свет не мигнул.

Полоска прошивки доходит до 100%, и выскакивает красное окошко. У меня аж сердце дрогнуло! Вчитываюсь: «Successfully completed, your system will restart in 5 seconds». Уф, отлегло.

Уважаемые китайцы и прочие индусы, неужели так тяжело окно об успехе сделать синим или серым? А то парочка седых волос сегодня точно добавилась...

3010

Молочные братья навек

Разговариваем с китайцем по скайпу — собирались покупать у них партию мелких LCD, но, увидев образцы, отказались. Китаец сетует на это дело: мол, с вами работать плохо, вот украинцы хороши... Дальше по тексту:

Я: they (украинцы) are good, because they аre buying your product, hehe
Он: sure
Он: for me, they are good
Он: very reliable and reputed
Он: business like
Он: Russian is OK more or less
Он: Belarus, hard to close deals
Он: like Indian people
Он: Indians are even better, because they have very good programmers...
Я: Ипал я в рот индийский код! И тя вместе с ним.
Он: what do you mean?
Я: sоrry, forgot to switch the language
<...>
Он: I used a translator.
Он: you have a problem with the Indian code?
Он: can we help you?

Это был один из худших дней в моей жизни.

2988

Синдром скрытой стрелки

Учусь в школе в 11 классе, по возможности эникею в кабинетах: лечу вирусы, настраиваю проекторы и мультимедийные доски.

Сегодня меня выловила учительница русского языка и литературы, по совместительству школьный психолог. Попросила помочь: мол, с базой данных по психологическим тестам что-то не то. Я пришёл посмотреть — действительно, номера начинались не с первого, а с третьего.

Внимательно разглядев интерфейс, я понял, что ползунок прокрутки смещён вниз. Я сдвинул его, и пропавшие номера появились. Хотел уж было посмеяться над учительницей, но заметил, что кнопка пролистывания вниз была, а аналогичная для прокрутки вверх отсутствовала (вернее, была скрыта за формой, которую не передвинуть). И это в базе государственного образца, по которой была защищена докторская диссертация? Я не удивлюсь, если создатель этой базы родился (или, по крайней мере, учился) где-нибудь в Индии.

2802

Теперь всё ясно

Выдалась свободная минутка. Я заскочил в «Мир книги» и сразу направился к стойке «Вычислительная техника и программирование». Издалека вижу незнакомую бордовую толстую книгу. Подхожу, читаю: «Новый хинди-русский словарь». Продавцы о чём-то догадываются?

2666

О восьми «ифах»

Заглючила дешёвенькая точка доступа. Решил перепрошить и, скачав последнюю версии прошивки, пошёл в веб-интерфейс. Бодренькая форма аплоуда отказалась принимать файл без объяснения причин. Заглянув в код на JavaScript и найдя место проверки, я ужаснулся. Откровенно говоря, индийский код до этого дня представлялся мне программистской байкой, но видели бы вы эту case-insensitive проверку на расширение .bin о восьми «ифах»!

Как бы то ни было, прошивка моя имела нужное расширение. С помощью Файрбага злополучная функция была переопределена, и точка доступа успешно перепрошилась.