Почти 5 лет (c 2006 по 2011) я, в основном, занимался одним проектом. Можно сказать, "варился в собственном коде". Да, там есть "странные" вещи, вроде самопального rtti с регистрацией в фабрике, но в целом, смею надеяться, код пристойного качества.
С начала 2011 года поучаствовал в полудюжине проектов, как доставшихся "в наследство", так и новых, как целиком проприетарных, так и использующих opensource библиотеки. И что-то с каждым таким проектом мне все грустнее...
Пытаюсь понять, что движет:
С начала 2011 года поучаствовал в полудюжине проектов, как доставшихся "в наследство", так и новых, как целиком проприетарных, так и использующих opensource библиотеки. И что-то с каждым таким проектом мне все грустнее...
Пытаюсь понять, что движет:
- людьми, разрабатывающими пакетный менеджер под embedded-систему, который не проверяет, достаточно ли свободного места для установки пакета. И который, когда место заканчивается, оставляет систему в невалидном состоянии:
- Raspbian: попытка освободить место через `apt-get remove что-нибудь` требует `dpkg --configure -i`, который пытается уставить те самые пакеты, которым не хватило места. Хорошо, что пишка грузится с карточки, которую проще залить заново с образа, чем разбираться с глюками.
- Angstrom: opkg ведет себя еще веселее, игнорируя ошибки установки пакетов, а потом, поскольку один из пакетов был "системным", перезагружая устройство. Которое у меня больше не завелось.
- человеком, пишущим библиотеку, в которой все контейнеры хранят void*, вместо enum везде используется int, но поля to, from, cc, bcc в заголовке e-mail имеют разный тип:
struct env_to { list * to_list; };
struct env_from { list * from_list; };
struct env_cc { list * cc_list; };
typesafety, чо.
Ну, и предлагающим использовать функции вроде
imap_search_key_new(IMAP_SEARCH_KEY_UNSEEN, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) - людьми, радикально меняющими апи в минорном апдейте.
- мейнтейнерами/авторами библиотеки, последняя версия которой в дистрибутивах Linux (и в Mac OS X) содержит ошибку, не позволяющую работать с буфером больше 64 кБ. Ошибке уже больше года, и не смотря на то, что она давно исправлена в master, в недавно вышедший апдейт ее фикс не вошел.
- давно уже не джуниором, который пишет на языке, где все функции виртуальны, код:
void Shape::draw() {
switch (this.kind) {
case KindRect: ((RectShape)this).draw(); break;
case KindCircle: ((CircleShape)this).draw(); break;
... - людьми, которые поучаствовали в десятке проектов, были lead developer-ами на двух-трех из них, но при этом стабильно плодящими копи-пасту в своем коде.
- людьми, которые думают, что пишут на С++, потому что используют слово class вместо struct и new/delete вместо malloc/free.
- человеком, который после, ЕМНИП, 2-х лет работы подошел ко мне, и спросил: "как пользоваться svn"
- людьми, заводящими массив констант на 3,5 KLOC. Который нужно обновлять вручную пару раз в месяц.
- людьми, чьи классы так плотно завязаны друг на друга и платформенно-зависимый код, что попытка собрать часть проекта на другой, пусть и родственной платформе обречена на провал.
Нет, я, конечно, тоже не д'Артаньян. Бывает, допускаю memleak или double free в С или Objective-C. Бывает, коммичу в транк нерабочий код. У всех бывают факапы.
Но, блеать, некоторые их замечают и фиксят.
Но, блеать, некоторые их замечают и фиксят.