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

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

4447

На самом деле всё совсем не так, как кажется

Сижу за компом. Некоторое время читаю с экрана, потом — короткая очередь по клавишам и щелчок мыши. На что похоже со стороны? Посиделки в аське или чате, не правда ли?

Ан нет: «плюсы» осваиваю. Взгляд в учебник — и пометка в Блокноте на случай, если после большого перерыва придётся вспоминать, что к чему, или тык в Билдер. Не торопитесь с выводами!

4420

Кулхацкер и коровушка

На IT happens есть жанр студенческих историй про некомпетентных айти-преподавателей. Идеальная история в этом жанре выглядит приблизительно так.

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

Попробуем, однако, предположить, как такое может произойти, если доцент таки вполне компетентен и добросовестен. Варианты следующие.

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

2) Быстроглазый и шустрый кулхацкер выхватил глазами только часть задания, не учёл граничные условия, не поинтересовался названиями ни дисциплины, ни лабораторной работы. В результате, например, вместо рекомендованного Паскаля был использован C#. Или же вместо демонстрации возможностей цикла for были продемонстрированы возможности команды jne.

3) Кулхацкер не справился с заданием, но сам этого не понял: проконсультироваться-то возможности не было.

Что же до некомпетентных высказываний доцента, следует помнить, что кулхацкеру они известны только со слов обиженной и заведомо некомпетентной коровушки, а читателям ещё и со слов обиженного кулхацкера, так что ожидать корректной передачи их смысла было бы в высшей степени наивно.

4408

Спасите наши души

Недавно меня лишили премии, сделали выговор и даже собирались уволить. А всё почему? Я решил ради прикола повторить то, что когда-то вычитал: ребята добавили в лицензионный договор (кто его хоть раз читал?) строку о том, что пользователь передаёт им душу, и подсчитали, сколько душ у них накопилось. В общем, к одной простенькой программке, которая позволяет отслеживать привязанную к уходящим по сети файлам информацию, я писал этот договор и добавил туда строчку про душу. Договор читали наши юристы, потом его читали в ОФЭРНиО, куда программу в числе других повезли регать, — никто, естественно, ничего не заметил. Программу выложили на сайте. За время, которое она там провисела, её скачало чуть менее тысячи человек. Сначала я следил за числом скачавших и заключивших соглашение, но через месяц-другой надоело.

Несколько дней назад меня вызвал начальник. Ему написал какой-то серьёзный дяденька из Штутгарта, который был очень озабочен проблемой владения собственной душой. Этот дяденька не только не поленился это соглашение прочитать, но и, удивившись, отнёс в бюро переводов, оплатив услугу из своего кармана, удивился второй раз и решил написать нашему директору. И зачем дяденьке-немцу только понадобилась программа на русском языке?

В общем, я обещал так больше никогда не делать. Заодно меня заставили перевести специально для этого дяденьки программу на немецкий — благо я учил его шесть лет. Так что цените ваши души, господа, и... да нет, к чёрту эти лицензионные договоры!

4377

Непутёвый релиз

Пишу приложение на Qt в Creator. Машинка у меня не сильно шустрая, а Creator — не больно проворная среда. Программа при запуске загружает много картинок, поэтому каждый пробный запуск в дебаге затягивается неимоверно. Решил под релизом запускать: не столько код отлаживаю, сколько работу сценария. Но в самой IDE и в конечном релизе пути к ресурсам разные, поэтому я написал два варианта путей, и к комментарию «Отладочный дебаг» добавились записи: «Отладочный релиз» и «Релизный релиз».

4370

Бесценный бездарь

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

Попросила одна знакомая помочь с лабораторкой по программированию на C++, занятия по которому вёл тот самый бесценный препод. Тема лабораторной: «Массивы и работа с динамической памятью». Подчёркиваю, ни слова про классы. Задание: ввести с клавиатуры массив произвольной длины и отсортировать чётные строки по возрастанию, а нечётные по убыванию.

Через 15 минут была готова программа из 10 строк. Никаких лишних условий. Если номер строки был чётным, то происходила сортировка по элементам строки. Если нечётным, то по этим же элементам, умноженным на −1. Программу препод забраковал, так и не сумев внятно объяснить, что не так, но принял другую, сдутую у кого-то из соседей. Что было в той программе:

— класс «строка», где имелся массив конечной длинны (да-да, если пользователь хотел больший массив, то программа не работала) и переопределённые операторы [] и =;

— класс «массив», состоящий из статического массива объектов класса «строка» и переопределённых операторов [] и =;

— куча функций непонятного предназначения c неведомыми параметрами;

— куча глобальных переменных, в том числе и сортируемого массива.

Но больше всего убило то, что автор сего творения не удосужился никуда инкапсулировать сортировку. Сортировка происходила в цикле, как с обычным массивом. При этом на каждом шаге внутреннего цикла (когда сравнивались элементы строки) происходила проверка на чётность строки и вызов кучи тех самых непонятных функций.

Эту программу препод принял без вопросов с оценкой «отлично». Слава тебе, Господи, что этот человек не стал нашим завкафедрой.

4349

Два процента толка

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

Для написания «перделки», которая на VB делается за полчаса, надо непременно использовать С++, желательно под линуксом — и наплевать, что пользователь сидит под виндой. Времени уйдёт несколько месяцев.

Если в проекте используется сторонняя библиотека, её надо объявить дерьмом и написать свою. Если в проекте встретилась слишком простая функция — её надо обязательно переписать на ассемблере.

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

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

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

Думаете, смешно? А я насмотрелся на поделки, где одновременно используется три самопальных класса для одних и тех же кнопок на тулбаре, три библиотеки для работы со строками и пять подпрограмм для умножения матриц — с ошибками, естественно. На программы, где на ассемблере с SSE переписаны функции копирования памяти, при этом один и тот же файл открывается и закрывается в цикле двадцать раз, чтобы прочесть первые три байта сигнатуры. На проги, где используются параллельно оконная библиотека MFC и своя, с ней несовместимая. Программы, у которых после наведения «архитектурной чистоты» начинались тормоза, а размер своп-файлов поднимался с единиц мегабайтов до терабайтов. Многопоточные программы, которые не в состоянии были загрузить процессор на 40%, потому что потоки дрались за критические секции...

КПД программерского коллектива — как у паровоза Черепановых: все пыхтят и создают работу друг для друга. Полезный выход — два процента.

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

4324

Двое во флаконе, не считая юзера

Работаю сами-знаете-кем. Попал в руки интересный проект, а VS 2008, чтобы открыть его, под рукой не было. Дистрибутив нашёлся на флешке, после чего незамедлительно был скопирован на винчестер. В процессе установки в окне справа был обнаружен сборник лучших цитат Мелкософта. Одна из них касалась AJAX: «Лучшее взаимодействие между дизайнером и разработчиком». Да уж, учитывая, что большинство из нас — дизайнеры и кодеры в одном флаконе, мы должны требовать двойной оклад.

4314

Авось рассосётся

Курсы по Delphi: начальный и профессиональный уровень. Сижу за компом. Все подходят, спрашивают, что не так, что за «division by zero». Только один сидит за компом, не вставая, вот уже около тридцати минут. Подхожу втихаря к нему. Строка с ошибкой выделена красным, а сам человек гоняет курсор из конца строки в начало, из начала в конец, туда-сюда, туда-сюда...

4313

Десятый лишний

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

// Внимание! Заменить на глобальную переменную перед внедрением!!!

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

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

4308

Подстановка подстановки

Решил повесить в автозагрузку скрипт, чтобы монтировать рабочий каталог на диск P:. Я так часто делаю, чтобы рабочие файлы можно было таскать по компьютерам с сохранением вписанных в конфиги пути. Дело простое — пишу subst.cmd с простым содержимым:

subst P: C:\WorkRoot

Запускаю и вижу, как с гигантской скоростью команда выполняется много-много раз без остановки. Что за хрень?..

Надо меньше работать. Или хотя бы давать нормальные имена скриптам.