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

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

10324

Нет времени на красоту

Абсолютно все программисты изначально пишут красивый, лёгкий, быстрый и масштабируемый код (а кто этого не делает, скорее всего, совсем не программист). Просто вот поступил тебе проект «Сделать свистульку для Васи Пупкина». Проект вроде не сложный, времени свободного валом, желание работать есть. Сел вечерком и за чашкой кофе написал красивую и компактную программульку, которая делает именно то, что просили изначально. А потом звонит Вася Пупкин и говорит: «Хочу, что бы у этой свистульки была ещё такая и такая финтифлюшка, и что бы это всё работало на библиотеке 2004 года, да ещё и в гов… опенсорс-движке».

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

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

10320

Когда тетрис тормозит

Только месяц назад на Хабре видел, как новички в статье про битовые операторы делились на два типа: первые говорили «спасибо», вторые — «на фиг вашу оптимизацию». Две недели назад приглаживал волосы, которые шевелились от ужаса, при чтении комментов о нюансах проектирования и реализации GUI: опять же «на фиг не надо, на глазок сделаем». Во что выливаются подобные вещи в итоге?

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

1. Отсутствие оптимизации. Продукт по совокупности качеств не лучше аналога, вышедшего десять лет назад, но ставит мою машину на колени.

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

3. Интерфейс. Конечно, тут частично виноваты дизайнеры, но иногда заметно, что идея-то была неплохая, но реализация… Вы сами-то пользовались тем, что создали?

4. Баги. Тысячи их, хотя 80% можно было избежать, следуя двум старым правилам: «не доверяй входным данным» и «прорабатывай все случаи».

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

Вершиной всему стал недавно повстречавшийся сайт солидной рекламной компании. На нём есть всё, что можно рекомендовать никогда не делать: звук, видео, анимация, кривой непонятный интерфейс, долгая загрузка, слабая оптимизация… Деградируем, господа, деградируем. И это всё при том, что сейчас, куда ни посмотри, на какой сайт ни зайди, у всех свои сервера, админы и прогеры. А на деле, когда втыкаю в очередной PHP-код error_reporting E_ALL, испытываю дичайший ужас.

Надеюсь, скоро наступит некий переломный момент, и рынок просто поглотит тех, кого по ошибке называют программистами.

10314

Пацаны ваще ребята

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

10304

Стринги-стретч

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

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

Бывало, что моих знаний и умений не хватало, чтобы найти простое решение задачи, но в таком случае я никогда не говорил «принципиально невозможно», а объяснял, что мне понадобится на это уйма времени, и заказчику, возможно, лучше нанять другого специалиста или согласиться на слегка отличающийся, но проще реализуемый вариант.

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

«Невозможная» проблема исправляется обрамлением блока в цикл с разбиением строки на части в условии и заменой присвоений в блоке на сумматоры. Это настолько элементарное действие, что я даже сомневаюсь, что оно где-то описано. Школьная сортировка пузырьком на фоне этого — просто rocket science. Но больше всего поражает, что сей погромист не стесняется своей вопиющей некомпетентности, а высмеивает, пытается задавить сленгом и оскорбляет девушку, которая задаёт ему абсолютно нормальные вопросы. Ведь программист, советующий пользователю считать ручками вместо программы, это такая же дикость, как и хирург, советующий пациенту прооперировать себя самостоятельно.

10300

Взять всё и поделить

Студент подрабатывает младшим кодером. Пишет прогу под никсы на C++. Сначала писал всё через классы, но что-то не пошло. Смотрю — повыкидывал классы, пишет всё в одном файле. А резервную копию сохранил в папке Capitalism.

10297

Кто американцу ньюби, тот русскому лох

Посетила коллегу гениальная идея: учиться программированию. И спросил он у меня, единственного программиста в компании, какой язык обязательно должен знать программист. Я ему честно ответил: английский. Обиделся на меня коллега. Он-то думал, что я назову что-нибудь вроде С++ или ассемблера.

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

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

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

Иногда, правда, приходится гуглить и по-русски. Например, когда вопрос касается широко распространенной в России CMS, о которой практически никто не знает за рубежом. Или когда вопрос специфичен для русского языка.

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

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

И ведь по-английски решение русской проблемы нашлось на первой странице. Много думал.

10256

Потому что без воды и ни туды, и ни сюды

Работаю сисадмином в общепите. Попросили меня добавить в программу расчёт калорийности блюд. Добавил поля, написал отчёт, который рассчитывает и выводит данные по калориям. Обкатал это дело на тестовых данных. Все работает, считает правильно.

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

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

Тут вдруг тётеньки позвали пить чай. Беру кружку, иду к ним в кабинет. Время позднее, почти все давно дома, а мы чаи гоняем. Беру хлеб, колбаску, огурчик — вот бутерброд. В кружку кидаю сахар, пакетик чая. Чего-то не хватает…

И тут меня осеняет: не хватает воды! Когда вбивали состав блюд, забыли вписать туда воду. Да, калорий в ней нет. Но есть объём и масса, за счёт которых калорийность на 100 граммов понижается. Вот и считала программа, что супы, бульоны и компоты без воды делают.

Причина найдена, можно идти домой. А тётеньки пущай завтра в программу воду льют.

10241

Кофеином не балуюсь

Вопрос анкеты:

— Какие ЯВУ вы знаете?

Молодой соискатель отвечает:

— Яву не знаю, зато знаю Python, Perl и PHP.

На работу его приняли — навыки востребованные, а такого сокращения он мог и не застать.

10237

Седина в бороду, бес в рога

Первая запись в моей трудовой — экономист родного совхоза. Бухгалтерская программа там была далеко не федерального значения, но и не самописная, и поддерживали её не разработчики лично, ибо были далеко, а два классных дядьки ещё старой закалки. Благодаря им я и познакомился с техникой на «ты, блин!», и началось моё админство. Фамилия одного из них была Козлов.

Та бухгалтерия была написана ещё на FoxPro 2.6, если кто помнит такое. Исходники были открыты для оперативности вмешательства. Вносивший изменения оставлял комментарий в стиле «Фамилия. Комментарий».

Однажды курю код, где производится подсчёт сотрудников с ограничением по максимальному возрасту, и натыкаюсь на коммент: «Козлов считать не старше 65 лет».

10236

Доллар с хвостиком

Видел тут историю о присваивании переменным имени в виде подчёркиваний, типа $______ = True;

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

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

На скорую руку написали скрипт, который вытягивал весь этот чудесный код и помещал его в другой документ, но уже с заменой $_____ на $aaaaa. После употребления оставшегося алкоголя скрипт дописали: он считал буквы, и $aaaaaa превращались в $a6. К четырём часам ночи нужная функциональность была прикручена, и я с умиротворением уснул.

Мораль какова? Иногда мозгу нужно дать немного больше фантазии и смелости. У каждого свои средства. А так сидел бы, считал подчёркивания шифтом и стрелочками или писал клон.