Разбирая код сайта, наткнулся на строчку:
<meta http-equiv="Content-type" content="image/gif; charset=utf-8">
Вот в какой стране это писали?
Разбирая код сайта, наткнулся на строчку:
<meta http-equiv="Content-type" content="image/gif; charset=utf-8">
Вот в какой стране это писали?
Меня задолбал быстрый интернет у некоторых разработчиков. Подключат себе стомегабитный канал — и давай творить: на каждое шевеление мыши — AJAX-запрос, возвращающий пару мегабайт XML, которые потом в браузере разбирает библиотечка яваскриптов, сама мегабайт так -дцать. Всё летает и сверкает — разработчик счастлив безмерно.
А потом этим чудом приходится пользоваться другим, где-нибудь в машине, с планшета. И начинается… Чудо-дизайн не влезает в рамки экрана ни по высоте, ни по ширине, потому что у дизайнера новенький монитор в полстены, под него и делалось. Многомегабайтные XML рвутся на лету, потому что мобильная связь такая мобильная. То, что удалось не порвать, никак не может обработать единственное ядро процессора, вяло шевелящееся под тоннами скриптов.
И вот наконец, с превеликими трудами преодолев затруднения, открывается оно — окно с единственным полем «Введите комментарий» и кнопкой «Отправить». Ну на хрена, спрашивается?
В 1994-м подарили мне старенький «Агат». Подключил я его к телевизору «Рубин» и давай учиться программировать. Впрочем, программированием это было назвать нельзя — так, баловство. Команда GOTO встречалась чаще остальных, вместе взятых. Только потом я узнал, что это называется «спагетти».
Затем «Агат» был задвинут во встроенный шкаф. А недавно решил я ностальгию потешить — достать, пропылесосить и включить. Сказано — сделано. Заработало с полпинка. Теперь на видном месте стоит, включаю иногда.
Пока пылесосил, обратил внимание, что у компьютера в Индии сделан процессор, а у телевизора — кинескоп. А на полочке встроенного шкафа лежала пачка индийского чая, который я так любил пить за «Агатом».
И откуда столько GOTO?
Ну что, программеры, померялись? А теперь слово службе сопровождения ваших творений.
При установке необходимо отредактировать конфиги в XML. Господа, кто вам сказал, что XML подходит для этого? Перемещаться внутри облака тегов в поисках начала и конца, особенно если конфиг «всё в одном» — та ещё задача. Что, какой специальный редактор? Софт устанавливается на сервер, что стоит в бункере, и на каждый байт там требуется свидетельство о сертификации на гербовой бумаге. Что помешало посмотреть, как это делается вот уже более 30 лет в UNIX-системах?
Установка внезапно валится на одном из этапов. В мануале: «Укажите путь к файлу в конфиге». На деле в половине модулей эта настройка игнорируется, а путь тупо забит в коде. Да, это быстрее, чем парсить XML-конфиг, — а я что говорил?
В программе сотрудник привязан к двум отделам — такое ТЗ дал менеджер проекта. Но вот теперь нам надо к трём отделам. Что? Нужно полностью пересматривать структуру базы? А почему было не сделать это с помощью двух таблиц и связки между ними? Думали, не нужно? Сложно спорить. Программисту надо ставить задачу чётко, он рассуждать не умеет. Может, и код за вас написать?
Разработали новую версию? Ну зачем, зачем было менять структуру конфига? Это же теперь переносить все настройки со старого в новый. Кстати, как там с путями? Берётся везде из конфига, окей. А почему не работает? Путь слишком длинный, больше 256 байт? И что? Ограничение Виндоус? При чём тут Виндоус, у нас ведь Джава на Соляре? У вас Виндоус, вы думали, так везде?
Не хватает производительности базы, надо таблицы партиционировать. Что такое партиционировать? Это вы меня сейчас спрашиваете, разработчики? Подсказываю: вевеве-точка-гоогле-точка-ком. Индекс слетает, говорите? Подсказываю… А-а, догадались сами?
Логи где? Нет, вон в тех стапятиста мегабайтах сами ковыряйтесь. Где логи «пришло-ушло-упало»? Да, надо сделать. Да, именно так. Нет, стопицот не надо. Не получается? Подсказываю: гоогле-точка-ком, шестая ссылка, читать, делать. Мне за вас сделать? Хорошо, зарплату перечислите авансом или потом?
Понадобилось мне
Подумал я и решил указать ей диапазон страниц 1—60. Прокатило. Подумал ещё и указал диапазон 1—1277 (весь документ). Тоже прокатило. Неплохая демонстрация возможностей проги и качества кода.
Я тот самый нелюбимый быдлокодерами программист, который пишет не «2 + 2», а интерпретатор формул (благо опыт позволяет это сделать быстрее, чем некоторые кодеры напишут и отладят свой «2 + 2»). Не пишу хардкодом параметр, который «никогда-никогда не будет меняться», а сделаю настройку. Могу вместо костыля плюнуть, потратить пару часов, но переписать так, чтобы не требовалось постоянно латать.
В конце проекта вы, быдлокодеры, быстро расставляете костыли, затыкаете дыры и заливаете код в репозиторий, уверенные в своей гениальности. А потом прихожу я и делаю так, чтобы работало не только на вашем сферическом компьютере в вакууме, а на любом, удовлетворяющем заявленным системным требованиям.
Так что потом не удивляйтесь, что за хардкод путей (который запрещён), ориентацию на единственный браузер или билд DX, влезание со своими именами, повторяющими чужие в системах с глобальной видимостью объектов, наплевав на установленные правила именования, вам настучали по голове и лишили части премии.
Ещё одна особенность быдлокодеров: сделать костыль не самым простым и надёжным способом, а наиболее извращённым. Работает, естественно, лишь в некоторых случаях (которые и были протестированы), а дальше пусть тестеры разбираются. Найдут — поставим ещё костылей.
Но самое страшное — более одного быдлокодера, которые расставляют костыли в одном проекте. Тогда эти заплатки начинают драться между собой. Один затыкает дырку, заливает — рушится
Почему я не делаю всё сам? Физически не хватит времени писать несколько проектов, поэтому я занимаюсь наиболее приоритетными и воскрешаю смертельно больных. Опыт позволяет минут за двадцать найти и исправить баг, который до того искали полдня. Набирать код со сверхскоростью недостаточно —
Началась эта история в разгар кризиса 2009 года. Работы в нашей микрофирмочке становилось все меньше с каждым днём. И тут, как в сказке, к нам постучалась некая биохимическая лаборатория с заказом на разработку софта для лабораторного комплекса, ссылаясь на наше название, в котором был намёк на кроссплатформенную разработку. Ну да, у нас было три программиста: один начинал с линуксов/C++, второй с Win/Java, а третий ещё на КПК со времён «палмов» софт писать умел. В общем, честно сказать им, что мы абсолютно не то, что им нужно, я сразу не рискнул, а через пару минут понял, что им, в сущности, уже всё равно, с кем пропадать.
Оказывается, с ходом прогресса их сугубо научный лабораторный комплекс стал коммерчески востребованным, им уже оплатили несколько образцов и готовы купить ещё десяток. Железо-то они растиражировали без особых проблем (там модульная сборка из готовых приборов), а вот автор софта к этому монстру умер от старости буквально пару лет назад. Приглашённые переписать его студенты дружно озвучивали сроки в пару лет, а софтверные фирмы просто отказывались, хотя все исходники были доступны. Единственный согласившийся специалист через квартал работы исчез в неизвестном направлении, а сроки передачи первого комплекса истекали через месяц.
Я попросил посмотреть на софт и понял коллег. Была одна старая машина под Win’98, на которой всё работало, и несколько машин, на которых эту разработку пытались запустить, но даже тотальное копирование жёсткого диска не помогало.
Через полдня изучения скопированного диска вырисовался диагноз. Обработка собрана из восьми опенсорсных и не очень пакетов разных лет и языков, написанных на Fortran IV, Java, Аda'95 и JDBC, работающих с обновляющимися через интернет научными базами данных самых разных форматов, для полного счастья склеенных редкой версией Perl, в которой, кстати и велась финальная часть обсчёта. Работа с БД велась через CPAN/ODBC.
Собираясь попрощаться, спросил, сколько же денег предлагают за такую работу. Переспросил. В общем, взялись.
Знакомый сисадмин собирал на корпоративных свалках компы, идентичные рабочему, а мы пытались понять, почему не работают нормально инсталлированные копии.
Не прошло и месяца, как ларчик открылся. Версии компиляторов и библиотек к пакетам были не просто разные, но и несовместимые, поэтому модули ставились только в строго определённой последовательности. При этом периодически приходилось менять переменные PATH для обеспечения правильной последовательности вызова разных версий компиляторов. Конечно, найти версию библиотек 1991 года выпуска было непросто, но мы справились.
А самый весёлый секрет состоял в том, что PATH иногда надо было корректировать прямо во время сборки, работая клавишей Pause. Кстати, make тоже надо было иметь трёх видов.
В общем, вначале мы запустили действующую копию на собранном из запчастей компе, идентичном работающему, и получили от восторженного заказчика предоплату. Потом, уже не беспокоясь о своём будущем, за пару дней до отгрузки успели собрать нормально работающую копию на нормальном компе, при этом всё было скомпоновано под нормальную версию Perl, скомпилированного PAR. Все пиратские модули перед запуском копировались в зашифрованные папки, а по окончании аккуратно оттуда вычищались.
Вскоре мы уже приготовили первую версию софта, не содержащую ничего пиратского, потому что в следующем году обещали купить около 15 систем. В фирме уже десять человек — может, даже на одном языке всё перепишем когда-нибудь…
Пишу страницу для сайта. Ничего особенного: внесение данных, впоследствии — минимальная их правка, а в основном просмотр. Единственное ограничение: одно поле должно быть уникальным, не повторяться в пределах таблицы. Поле текстовое, так что надо проверять и при повторе выдавать предупреждение. Ничего сложного, в движке есть готовая функция для такой проверки — выдаёт количество записей, соответствующих определённому условию.
Написал. Вношу тестовые данные, заведомо неправильные, чтобы посмотреть предупреждение. Позволяет вносить. Проверяю свой код. Всё верно. Немного меняю условие. Всё равно повторы вносятся. Проверяю ещё раз. Пауза. Перерыв на кофе. И ещё раз. Лезу в код функции.
შენ მოგიტყან ტრაკი! Спасибо товарищу, который научил ругаться по-грузински — окружающие не понимают смысла. Ну почему в функцию имя поля должно передаваться в виде (field_name), а не field_name — без скобок?
И пофиг, что автор этого кода британец. Всё равно он индус.
Устроился я на работу в небезызвестную московскую фирму, занимающуюся производством софта. В первый же день мне дали почитать «правила» компании — то, как надо, как принято и как правильно писать код и работать с базой данных в этой конторе. Прочитал — всё разумно вроде, стандартно, как у всех. Но в процессе работы мне дали понять, что правила эти далеко не для всех, что есть такие очень опытные и незаменимые сотрудники, которым в силу их незаменимости и высокоопытности можно писать непонятный остальным говнокод.
Дальше — больше. Оказалось, о нормальных формах тоже никто не слышал. База данных предоставленного мне проекта имела чудовищную структуру, была не нормализована, во многом избыточна и нелогична. Выяснилось также, что самые основы — SQL — эти горе-разработчики не знают: везде и всюду я натыкался на чудовищные, громадные и неудобные запросы. Складывалось ощущение, что на словах SELECT, FROM и WHERE изучение разработчиками SQL закончилось.
Полгода я пытался разобраться в этом бардаке. Полгода я регулярно задерживался на работе, пахал без выходных. Полгода я пытался внести хоть
Задолбали люди, которые не хотят прислушиваться к конструктивной критике. Достали те, которые считают себя специалистами, но категорически отказываются воспринимать новое. Устал я от тех, кто не старается сделать свою работу хорошо и качественно. Пугают такие конторы: когда к ним устраивается специалист без опыта, они могут научить его только плохому.