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

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

6140

Не пеняйте на рожу

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

Приложение, которое досталось мне, было уже в полный рост на C++ и иногда весьма неслабо глючило. Реализовав требуюмую от меня функциональность, я решил всё-таки разобраться с глюками. Начал трассировку и после нескольких часов дебаггинга всё-таки отловил эксепшн. Я упал в код библиотеки, которая датировалась 92-м годом и использовалась во всех проектах конторы. Строчка кода, вызвавшая эксепшн, предварялась замечательным комментарием:

/* ugly, I know */

6133

TODO: построить дом, вырастить сына, посадить дерево

Писали с одним знакомым программу. Я был автором идеи, а знакомый, очень толковый программер, эту идею воплощал.

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

/* Надо ещё очень много всего сделать… */

Заставляло задуматься. Порой выбивало слезу.

6095

Я бился головой о стенки кластера

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

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

Вот такие сны у программистов. Непонятно только, почему БД оказалась такая жёсткая.

6085

Не стоит свеч

Переписка с компьютерным магазином.

Здравствуйте. Сообщаю вам о проблемах с аутентификацией клиентов, конфиденциальностью данных о заказах и возможных дальнейших проблемах. Я являюсь системным администратором %company%, в связи с чем зарегистрирован в интернет-магазине с логином %login% как юридическое лицо. В то же время я обращался в сервис-центр как физическое лицо без использования интернет-магазина, однако запись об этих действиях оказалась в вашей истории заказов (%order% от %date%), хотя меня об этом даже не предупредили. Кроме того, как физическое лицо я тоже зарегистрирован (логин %login2%) — логичнее было бы отнести этот заказ туда. Со своей стороны претензий не имею, просто сообщаю вам о проблемах.

Отвечают:

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

Ситуация понятна: магазин принял систему с ошибкой, поэтому бесплатно её исправлять никто не будет. Теперь они считают, что цена этой ошибки не настолько велика, сколько хочет разработчик за её исправление. Но почему бы прямо об этом не сказать?

6051

Ранний быдлокод-примитивизм

Программирование сродни изобразительному искусству. Посудите-ка сами.

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

Во-вторых, сложные программы, как и великие картины, пишутся длительное время.

В-третьих, даже сам процесс написания похож: подготовка (покупка принадлежностей/установка софта), задумка(эскиз/алгоритм) и сам процесс написания.

В-четвёртых, понимание мыслей художника/программиста тоже требует некоторых знаний.

Но почему же бывают выставки известных полотен, а выставок шедевральных программизмов не бывает? Вот представьте: «А тут вы видите код известного программиста N. Произведение исполнено в жанре быдлокода. Как вы можете заметить, автор не использует циклов. Этим он хочет показать неповторимость нашей жизни».

6009

Первый круг индокодерского ада

Проходил недавно конкурс молодых программистов. Запомнился один проект, написанный на VB: тест и таймер, отсчитывающий время до конца. Программа работала. Попросили показать исходный код. Тут-то и открылась истинная сторона программиста! Код, реализующий трёхминутный таймер:

IF S='0:01' THEN S='0:00'

IF S='0:02' THEN S='0:01'

IF S='0:03' THEN S='0:02'

…

IF S='2:58' THEN S='2:57'

IF S='2:59' THEN S='2:58'

IF S='3:00' THEN S='2:59'

6008

Ищут давно, но не могут найти

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

Полчаса я наблюдал за перепрошивкой коммуникатора. Прогресс-бар еле дополз до финиша, и утилитка радостно сообщила мне, что процесс успешно завершён. Не обнаружив каких-либо изменений, я с опаской полез в лог. 12508 строк вида «Error: Device not found». Спасибо, блин!

6001

--use_the_force=true

Несколько лет назад я клепал программулину для переноса данных между репозиториями. Работала она нормально, но нашёлся один крупный клиент в Штатах, на репозитории которого утилита глючила. Почесав репу и с ходу не сообразив, в чём может быть дело, я немного поменял алгоритм обработки данных — а вдруг спасёт? Так как старый алгоритм в большинстве случаев работал отлично, а новый был экспериментальным и не оттестированным, по умолчанию использовался проверенный, новый же вызывался ключом USE_THE_FORCE в конфиге. Мне показалось, это самый близкий к русскому выражению «станцевать с бубном» американизм — именно так я и представлял себе работу нового алгоритма.

Отправили клиенту. Баг исчез, все остались довольны, и история с ключиком ушла в прошлое… ровно до релиза новой версии. Когда я полез читать документацию, сполз под стол. Наши американские коллеги задокументировали этот ключ в том самом виде. Представили, да? «Установите ключ „Использовать Силу“, если без этого приложение работает ошибочно».

5985

Только для воскрешения

Писал для себя небольшую игрушку в Лазарусе месяца два назад. Поднадоело, скинул на виндовый диск и забыл на время.

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

5979

Объектно-обрезиненное программирование

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

Стоп, какая нафиг кровать из обрезиненного металла? Кровать должна быть мягкой, удобной, уютной. Мягкие уютные кресла, мягкие уютные столы…

Опять фигня получается: какие мягкие столы?! Столы, кровать и ноутбук — это разные вещи с разными свойствами, и делают их по-разному.

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

Им кто-то сказал, что ООП — это современно, и теперь вместо программки из пары функций они непременно построят класс со встроенными методами, конструктором, деструктором, встроят его в программу и напишут ту же пару функций для вызова методов класса и получения результатов.

Им кто-то сказал, что code reuse — это правильно, и теперь вместо процедуры из трёх строк на C они прилинкуют пару десятков мегабайт библиотек фреймворка, в которых есть та самая процедура.

Им сказали: «Google использует server-side JavaScript», — и теперь они с упорством будут переписывать всю логику под возможности нового инструмента. Авторитет!

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