Tags: программизм

бендер

функциональный подход

Программистский лытдыбр. Как известно, java-программисты много лет страдали без функциональщины и прочих лямбд. Я лично джва года ждал (на самом деле лет десять), когда подобный код:
DynamicCodeDao dcd = new DynamicCodeDao(con);
for(DynamicClass clazz : dcd.getDynamicClasses())
{
  if("rep.xml".equals(clazz.getResourceExt()) && clazz.getResourceSimpleName().startsWith( module ))
  {
    addReportDoc(clazz.getResourceSimpleName(), DynamicCodeDao.getClassFile(clazz.getClassName()));
  }
}

будет вызывать зудъ и желание поскорее переписать его в такую красоту:

new DynamicCodeDao(con).getDynamicClasses().stream().filter(clazz -> "rep.xml".equals(clazz.getResourceExt()) && clazz.getResourceSimpleName().startsWith( module )).forEach( (ThrowingConsumer<DynamicClass> & Serializable) (clazz) -> addReportDoc(clazz.getResourceSimpleName(), DynamicCodeDao.getClassFile(clazz.getClassName())));

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

Ещё в этом коде можно увидеть изящный (как и все костыли) велосипед ThrowingConsumer, который маскирует checked exception, который может выкинуться методом addReportDoc. А с ними тут нельзя, ну вы в курсе. Как и в курсе, что подавляющее большинство используемых в java исключений являются checked. Сначала выглядит невероятным, но через подобное приведение действительно работает.

На самом деле пост лишь слегка ироничный, функциональщине в java место находится. Те куски, которые настолько просились в ФП, что уже были написаны функционально на «старой java без лямбд» (ага, на анонимных классах и т.п.) действительно могут выглядеть намного лучше.

Collapse )
бендер

хорошие заказчики

Люди таких творческих профессий, как фотографы и программисты, не могут не сталкиваться с одинаковыми проблемами неадекватной оценки их услуг. Я уже писал как-то про это, да и lis_noldor писал, но ещё раз повторюсь — многие из потенциальных заказчиков окуевшие жлобы :) Как и пишет Роман, вопрос «а чо так дорого то» — далеко не редкость. Предложения запилить «серьёзную» «ынтерпрайзную» фичу за 3000 рублей — для многих в порядке вещей.

Иногда в незапущенных случаях я рассказываю о понятии нормочаса и его цены. Если человеку кажется, что (к примеру) $30-40 в час это дофига, я предлагаю пройти, например, в ближайший автосервис и уточнить сколько нормочас стоит у них. Подскажу порядок: 1000+ рублей. А теперь прикинем уровни квалификации среднего мастера автосервиса. В среднем все, кого я знаю лично: в лучшем случае колледж или вообще гайкокруты без образования. Часто человек не может просто вкурить: «вот я звонил в одно место (видел на фрилансере/сказали знакомые/прочитал в интернете) — там всего 2500 рублей и 2 дня», ну тут тоже обычно добавить нечего.

Второй вопрос возникает про сроки. «До завтра справишься?» — а как же, ага. «Две недели? O_o Ты что, охуел*?» — конечно, мне долго хочется сидеть любоваться на своё творчество, прежде чем я его отдам. «Нам надо ещё вчера» — без комментариев. Ну и так далее.

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

Много и хороших адекватных людей. Вот так и живём, коллеги.

*спеллчекер браузера подсказывает тоже хороший вариант «ох уел».

бендер

ошибка бла-бла ок

Множество раз участвовал в подобном диалоге о компьютерах:

-- Ничо не получается, там ошибка вылезает.
-- Какая ошибка?
-- А я откуда знаю.
-- Ну что написано то? Кто выдаёт? Где надпись написана? В каком виде? Что предлагает сделать?
-- А я не знаю, не читал.

Вот и удивляешься тут. Программисты стараются-стараются, делают вывод всяких ошибок, логирование и прочее. А тут вот так всё время. Да, в грамотной программе для end-user зачастую огромный пласт кода как раз служит для обработки и формулирования ошибочных ситуаций. Но в итоге, как в анекдоте (но ходят слухи, что это вовсе не анекдот), все пользователи делятся на тех, кто в непонятных окошках нажимают "ОК" и на тех, кто нажимает "Cancel". А что в непонятных диалогах нажимаете вы?

4.78 КБ
бендер

программисты-гуманитарии

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

Агрессивные «технари», в подавляющем большинстве своём, причисляют себя к «технарям» исключительно на том основании, что в гуманитарных науках они не понимают вообще ничего.

— лол;

ведь логика — это гуманитарная наука

— ещё раз лол;

Процентов так девяносто пять программистов являются… чистыми гуманитариями. Их работа — творческий перевод с человеческого языка на язык компьютерный. И в своей работе переводчиков они применяют ежеминутно не физику/математику, а лингвистику и психологию.

— просто самый огромный лол :)

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

Но сказать, что работа программиста заключается именно в переводе чего-то во что-то там — это же абсурд. Или не всем понятно это? :) Любой язык программирования — это всего лишь инструмент, а не цель. Инструмент записи мыслей программиста в формальном виде. Это всё равно, что сказать, что чистокровный математик — тоже гуманитарий, потому что он переводит человеческий язык в цифры, выражения, значки, кванторы, операторы. Нет же, суть математика — мыслить глубокими абстракциями и уметь применить в манипулировании ими свои знания. А уж куда и как он записывает всё что получилось — дело совершенно левое, а никак не самоцель.

Так вот и работа программиста заключается в генерировании мыслей, то есть в глубокой формализации задачи, после которого оно и записывается с помощью какого-либо языка. Это как музыкант и ноты, ну вы поняли. Именно же поэтому сказать про программиста, что он «программист php/delphi/java/любой_другой_язык» — это тоже абсурд. Когда так говорят про кого-то, тут сразу всё понятно становится. Программистом нельзя быть только на каком-то языке. Это всё равно, что быть поэтом только на тетрадках в клеточку; или художником, но исключительно гуашью; или музыкантом, но лишь на пианинах. Тут либо ты понимаешь область, «шаришь», способен мыслить соответствующе; либо нет. Ну и с «творческими» занятиями я отнюдь неспроста сравниваю ;)
бендер

Отчего меня бесят всякие standalone-блоги

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

Это не только блогов касается, конечно же. Будучи ещё студентом, на заре более-менее доступного инета я собирал ссылки на хорошие персональные и/или тематические странички с хорошим техническим контентом, статьями по программированию, архитектурам, ассемблерам, железу и т.п. Ну, такие клёвые самородки бывали прямо, с редкими материалами, переводами, авторскими. И что же сейчас? Прошло 5-10 лет и 99% этих ссылок тупо не работает, и материалов тех либо нет, либо частично растерзаны по другим сайтикам, собирающим чужой контент. Дело спасает то, что я тогда ещё о чём-то таком догадывался и выкачивал многие клёвые сайты полными зеркалами с помощью Teleport Pro, благо весили сайты того времени не так уж много, очень хорошо оптимизировались по весу и простоте. Ну и, чего таить, пользуя халявный (хоть и невероятно медленный) интернет в УГАТУ, выкачивал и для того, чтобы читать вечерами это хозяйство дома, ибо инет дома появился только в 2004, но ещё года три был дорогим, жаба душила и по трафику и по часам пользовать его просто для сёрфинга. Как архив какого-нибудь citkit весом 100mb попадал ко мне домой только через дискеты 1.44mb ­— вопрос выходящий за рамки этой заметки :)

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

О смысле жизни и цивилизации (с точки зрения программирования и алгоритмизации)

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

Далее надо как-то оформить поток выполнения и смены поколений. Пусть это будет вполне логичное представление в виде рекурсии. В функциональщину ударяться не буду, опишу в процедурном стиле. Крайне упрощённо напишем так:
void doOneLife() {
  fetch-N {
    doOneLife()
  }
}

здесь fetch-N — какое-то порождение нескольких (N) дочерних запусков. Ок, нам надо как-то притянуть за уши передачу генофонда и какой-то условный объект возврата. Скажем так, чтобы у запущенной последовательность вызовов имелся какой-то смысл. Итак, введём какой-то код возврата и передачу генома дочерним вызовам самого себя.Collapse )
бендер

Не работает

Большая часть вопросов по работе какой-либо нашей программы выглядят как-то вот так: "сделали как в доке, но возникает ошибка". Всё. На вопрос "Что сделали, как делали, и вообще — какая ошибка то?" многие отвечают "ну не работает, чо непонятного то". Почему так и зачем?
бендер

Намедни сломался завод по сжиганию программистов

Многие люди легко называются характеристиками или званиями, которых не заслуживают. Так, например, если человек выучил по книжкам "php за 21 урок" или "c++ для чайников" некие дрянные языки, то очень запросто он считается программистом. Но почему? Ведь любой язык — это всего лишь инструмент, и не более. Он ничего не даёт фактически, только возможность выражаться кодом. Прямая аналогия, более часто высмеиваемая — покупка фотоаппарата и щёлкание всякого гавна. В итоге хороших фотографов по-прежнему можно пересчитать по пальцам, а фоточек листиков на луже — жопой жуй. Почему? Низкий порог вхождения как в современное фотолюбительство, так и в написание современного кода — слишком очевидный ответ. Для первого раньше надо было как минимум ебстись с проявлением фоток, сидеть в тёмной ванной с красным фонарём, всё было довольно кропотливо, стоило каких-никаких времени и денег. Ну а про программирование олдовое и говорить не надо — это было просто шаманство и колдовство. Про "музыкантов" вообще всё понятно, это и на ЗВ и на РУ извечная тема для срачей)

Мысль началась с обсуждения того, что художником, музыкантом, программистом может стать каждый вне зависимости от наличия способностей. Вернее, отрицалось само понятие "наличие способностей". Типа просто кому-то надо больше стараться, а кому то меньше. У меня есть примеры обратного. Бывают гавённые и музыканты, и фотографы и программисты и их ничего не спасает. А вы?
бендер

Итерация от человека. Рекурсия - от Бога. (ц)

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

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

Аналогично и пример с лурка «когда пользователи выкладывают winrar в rar-архиве (и такое бывает)» - тоже никак не рекурсия.

Вот такие дела. А вы что думаете о рекурсии?

з.ы. думаю, все знают, что Гугл ненавязчиво шутит нам про рекурсию: http://www.google.ru/search?q=%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F
бендер

о юзерских интерфейсах

Если у меня спросят: "Димон, как проектировать интерфейс пользователя?", то я сначала замешкаюсь, ведь это долгая история. Но зато я сразу смогу рассказать как не надо проектировать UI. И покажу все пункты на примере сайта http://odnoklassniki.ru/.

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

Всегда мне это не нравилось, но сейчас прям взбесило!