Истории с тегом: программизмы

Всего историй: 896

3172

На полуслове

Я студент четвёртого курса, по совместительству .NET-программист. Вечер. Набираю в Ворде аннотацию к завтрашней паре по английскому. Ввожу начало очередного слова и замираю в ожидании IntelliSense.

Жаль, что Ворд им ещё не оснастили — полезная была бы фича!

3167

Наполовину пустой, наполовину полный

Код оптимиста:

if (<условие1> && <условие2> && <условие3>) return true

return false

Код пессимиста:

if (!<условие1> || !<условие2> || !<условие3>) return false

return true

Код реалиста:

return (<условие1> && <условие2> && <условие3>)

3166

Конь и кот

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

Преподаватель всматривается в код, а потом спрашивает, почему мы сложили строки, а не использовали специальную функцию. Мы объясняем, что и так можно, на что препод отвечает, что если мы потом где-нибудь встретим функцию, то ни за что не догадаемся, что она делает. «Наверняка, — говорю, — название у функции будет „говорящим“, поэтому мы догадаемся». Преподаватель, торжествующе: «Ага, а функция называется CONCAT()! И что же она вам говорит?»

3160

Не грози грозе, попивая кофе у себя в офисе

Все началось с того, что в нашем офисе очень редко открываются окна. Цитирую переписку работников офиса.

— Видимо, окно около серверной и погода как-то связаны. Впервые за долгое время его открыли, и началась гроза.

Стоит задуматься...

— Проверяется на раз. Если верно — то достаточно закрыть окно, и гроза прекратится.

— Э-э-э, только при условии обратимости реакции.

— Тогда каждое новое открытие окна должно усиливать грозу. Проверяется тоже на раз.

— Откуда такие выводы? Была посылка «открытие окна — начало грозы».

— Открой десять раз — десять гроз поставишь в очередь.

— Возникает вопрос о возможности переполнения буфера гроз и досрочном DoS-апокалипсисе.

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

— При условии, что окна тождественны. К тому же разные начальные условия, так что пока нерепрезентативно.

3152

Через года слышу разума голос

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

Школа кончилась, кончился и институт. И вот однажды ночью я, 26-летний сотрудник банка, проснулся от того, что понял, где была ошибка! Конечно: в функции for i... в случае отскока шарика от границы экрана (то есть при движении от большего значения к меньшему) шаг должен быть со знаком «минус». Но момент, как говорится, уже упущен...

3151

Абстрактная выделка овчинок

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

Я ждал чуть не полгода, и наконец под гром фанфар получил DLL с тремя десятками методов с непонятными названиями и параметрами, возвращающую не ожидаемый BMP, а потоки, хендлы и ещё черт знает что. При попытке объединить это творение и мой интерфейс ничего не получилось. Я просто замучился разбираться, а тот парень вообще не понял, что я написал (хотя я дал открытый код с комментами). В результате я переписал всё в Студии, и прога заработала. «Абстракционист» три часа доказывал, что его эффект работает значительно быстрее. И правда: 380 миллисекунд против моих 423 на картинке размером 1800×1600...

3118

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

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

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

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

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

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

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

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

3099

Бейсик — от слова «основной»

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

Лос-Анджелес. Монтируется аппаратура на корабле. Задача — принять телеметрию и отобразить в нужном виде на экран. На корабле три изолированных по национальному или производственному признаку сегмента, куда «чужих» не пускают. Отображением в одном сегменте занимался я, в другом — американцы из фирмы «A. S.», в третьем — программеры из рабоче-крестьянской корпорации. Задачи были весьма схожи: принять, обработать, отобразить. Отображение требовалось разное, но это уже неважно.

Американцы не задержались на корабле больше недели. Приехали, поставили софт, запрограммировали, получили бабки, уехали. Тихо-мирно, молча. Никаких претензий, никаких проблем. Язык программирования — Visual Basic.

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

Программеры рабоче-крестьянской корпорации приехали вместе со мной, но встречали Новый год вдали от дома. И Старый Новый год — тоже. Потом я просто перестал за этим следить. Язык программирования — Visual С++.

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

3096

Дурейшен ты некомпилированный!

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

Кто писал для «Минска», должен помнить, что в процессе компиляции кода (а компилилось оно долго, особенно расчёты несущих) на экран выводилась огромная такая табличка на незнакомом несоветском языке: «DURATION». И вот сидишь ты в аудитории рядом с ещё двадцатью такими же «специалистами», пишешь, споришь, рассказываешь всем вокруг про «новый подход», компилишь... Виснет. Подходит препод, смотрит код на бумаге, задумчиво изрекает: «И ведь верно, дурейшен писал. Причём такой дурейшен, что ещё поискать надо...» — и, не перезагрузив машину, удаляется. Вскоре вся аудитория медленно, но верно покрывается такими же табличками.

— Дурейшен, дурейшен... И ты тоже дурейшен!

Воспитательный момент — лучше некуда.

3085

Море и велосипед

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

В качестве рефери был выбран гуру отдела, который, оценив изящество и краткость всех трёх вариантов, грустно вздохнул и спросил: «Что же, more %filename% уже не работает?» В общем, с тех пор у меня начисто пропало желание изобретать велосипеды и что-то ваять, если в операционке есть штатное средство для решения задачи.

Я это к чему? Да к тому, что автору истории про сиськи-письки вместо плоского «западлостроительства» не помешало бы матчасть хоть немного изучить. Обои вполне можно поменять двумя командами в пакетном файле, не прибегая к помощи такого монстра, как Дельфи. А то, что системный диск у него не NTFS — это уже совсем не фэншуйно. Так-то!