1. Ruby / Говнокод #14245

    −87

    1. 1
    2. 2
    # ugh
    task = task.task.task

    http://programmingisterrible.com/post/50285403468/a-lifetime-of-terrible-code

    Запостил: someone, 18 Декабря 2013

    Комментарии (77) RSS

    • http://tinyurl.com/qa6rbu6
      Ответить
    • Вспоминается жаба тенденция возвращать объект после выполнение процедуры и прекрасные строки
      Something.Do().Do().Do().Do().Do().Do()
      Ответить
      • > жаба тенденция возвращать объект после выполнение процедуры
        Флюент интерфейсы, имхо, больше распространены в c#, чем в жабе :)
        Ответить
        • Ну лично я больше встречал их у жабакодеров. Не претендую на истину в последней инстанции)

          Например в исходниках (или псевдоисходниках) майнкрафта
          Ответить
          • LINQ, там для этого даже сахар в виде extension method сделали.
            Ответить
            • И ведь не поспоришь, подловил, чертяка!

              Мне не нравиться как это выглядит. Лично я Linq использую исключительно в SQL подобной манере
              Ответить
      • претензии к флюэнт-интерфейсам?
        Ответить
        • Они рушат семьи.
          Ответить
          • У тебя так брат умер?
            Ответить
            • Брат? π/2 или e?
              Ответить
              • iπ - мнимый брат π
                Ответить
                • http://tinyurl.com/flexo-jpg
                  Ответить
                • Теперь тебя вычислят по iπ.
                  Ответить
                  • И заставят платить ройялити за использование запатентованного эплом слова iπ.
                    Ответить
                    • На знал куда написать, поэтому разведу оффтоп здесь

                      Набрал в гугле - "это такое монады"
                      6 ссылка "Монады - оккультизм"
                      http://www.fire70.ru/monada.htm

                      Что символизирует.

                      Вопрос как бы невзначай - где можно прочитать, что такое монады, комонады и как их есть?
                      Ответить
                      • Монада — это всего лишь моноид из категории эндофункторов, что может быть проще?
                        Ответить
                        • У меня от таких высказываний батхерд(
                          Ответить
                        • кстати, прочитав
                          http://anton-k.github.io/ru-haskell-book/book/15.html
                          я действительно осознал это определение и оно мне теперь кажется простым
                          Ответить
                          • Спасибо, буду раскуривать. А то я из этой фразы только определение моноида знаю ;)

                            — Вспомни, мы говорили про Смысленность. Мы с тобой думаем о чём-то. Символы у нас в голове что-то означают. Вопрос в том, может ли синтаксический аппарат думать или просто обрабатывает цифры, лишённые смысла.
                            — Без всякого семантического наполнения, — сказал Самманн.
                            — Да. Так вот, Фаана была пе-эр синтаксической группы — сторонников Проца — в конценте светителя Мункостера вскоре после Реконструкции. Она утверждала, что никакой Смысленности нет — что это иллюзия, которую создаёт для себя каждый достаточно развитый синап. Эвенедрик, живший чуть раньше Фааны, вслед за Халикаарном считал, что мозг способен решать задачи, с которыми не справится синап. Что Смысленность и впрямь существует.
                            — Что в наших мыслях есть семантическое наполнение помимо нулей и единиц.
                            — Да. Это связано с убеждением, что наш разум способен воспринимать идеальные формы Гилеина теорического мира.
                            — Ну знаете, ребята! — не выдержал Юл. — Мы вроде на отдых встали!
                            — Вот так мы отдыхаем, — отозвался Самманн.
                            — Да, — подхватил я. — Если бы мы работали, то говорили о вещах сложных и занудных.
                            Ответить
                            • На хаски-типах вообще всё просто.

                              У моноида ведь две операции - единичка и сложение. У Монады

                              return :: a -> m a
                              join :: m (m a) -> m a
                              Ответить
                              • А bind\apply где?
                                Ответить
                                • Тут надо добавить, что по-халяльному любая монада - функтор, тогда fmap + join тебе помогут.

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

                                Представим себе, что находящиеся за дверью комнаты люди, понимающие китайский язык, передают в комнату наборы символов и что в ответ я манипулирую символами согласно правилам и передаю обратно другие наборы символов. В данном случае книга правил есть не что иное, как «компьютерная программа».
                                Ответить
                                • Люди, написавшие её, — «программисты», а я играю роль «компьютера». Корзинки, наполненные символами, — это «база данных»; наборы символов, передаваемых в комнату, это «вопросы», а наборы, выходящие из комнаты, это «ответы».

                                  Предположим далее, что книга правил написана так, что мои «ответы» на «вопросы» не отличаются от ответов человека, свободно владеющего китайским языком. Например, люди, находящиеся снаружи, могут передать непонятные мне символы, означающие; «Какой цвет вам больше всего нравится?» В ответ, выполнив предписанные правилами манипуляции, я выдам символы мне также непонятные и означающие, что мой любимый цвет синий, но мне также очень нравится зелёный. Таким образом, я выдержу тест Тьюринга на понимание китайского языка. Но все же на самом деле я не понимаю ни слова по-китайски. К тому же я никак не могу научиться этому языку в рассматриваемой системе, поскольку не существует никакого способа, с помощью которого я мог бы узнать смысл хотя бы одного символа. Подобно компьютеру, я манипулирую символами, но не могу придать им какого бы то ни было смысла. Этот пример соответствует системе быстрого обучения формальным знаниям для решения типовых задач, которая сегодня стала вытеснять в коммерческих школах аналитическую систему образования. Такие специалисты с программным мышлением способны быстро, не раздумывая, решать задачи из заученного набора, но абсолютно беспомощны в нестандартной ситуации. Аналитическое мышление, используя собственные знания, может путем сопоставления комбинаций символов и анализа порядка в передаваемых сообщениях для ответа, определить устойчивые сценарии их применения, а значит построить классификатор условных понятий и форм применения.
                                  Ответить
                                  • Полученную формальную систему можно согласовать с собственной системой знаний, по принципу непротиворечивости перевода высказываний на обоих языках в общем пространстве мышления. В результате мы получим однозначное относительное представление о неизвестном языке, но конкретные характеристики объектов в этом языке останутся неопределенными. Внести определенность можно только калибровочными тестами сличения базовых элементов обоих систем для установления функции их отображения. К этому типу задач относится также установление контакта с разумом иной формы жизни, развившейся в принципиально других физических условиях.
                                    Ответить
                              • > Таким образом, я выдержу тест Тьюринга на понимание китайского языка.
                                Есть какое-нибудь доказательство этого утверждения, кроме фразы "таким образом"?

                                Эта система, по определению, не обучается, все ее состояние прошито в "книгу правил". И любой несложный вопрос, который не предусмотрели авторы прошивки, поставит ее в тупик.
                                Ответить
                                • Система китайской комнаты в каком-то смысле разумна. Но чёткого определения для разума (и разумности) нет. Совсем необязательно, чтобы разум мог обучаться.
                                  Если предположить, что система правил достаточно большая, а язык формализован, вполне вероятно, что такой тест и может быть пройден. Кроме того, можно жульничать и отвечать "не понимаю" и "не знаю".

                                  Только всё это построение не даёт ни малейших представлений, как разум устроен, где он находится в этой комнате (если находится).
                                  Ответить
                                  • > Если предположить, что система правил достаточно большая, а язык формализован, вполне вероятно, что такой тест и может быть пройден.
                                    "Да откуда он всё это знает?! Это явно не человек!"

                                    > Совсем необязательно, чтобы разум мог обучаться.
                                    Почему? Имхо, если "разум" не может обучаться, то это тупой набор рефлексов, прошивка грубо говоря.

                                    > Система китайской комнаты в каком-то смысле разумна.
                                    В том же смысле, в каком разумен банальный HashMap<String, String> :P
                                    Ответить
                                  • > Совсем необязательно, чтобы разум мог обучаться.

                                    Это совсем грустно:
                                    Я: Я вчера получил 5ку.
                                    Китайская комната: Занятно.
                                    Я: Да, много занимался. Так что я вчера получил?
                                    Китайская комната: Ты у меня сейчас по заднице получишь. Неужели думаешь я не знаю какую оценку получил мой сын?


                                    Я снова и снова задаю вопросы, ответы на которые я только что рассказал. В конце я решаю что тест Тьюринга провален.

                                    При условии, что мой настоящий отец в соседней комнате не будет вести себя также необучаемо, как соседняя комната.

                                    По сути Тест Тьюринга ни сколько не формализует понятия разума, тк в данном случае отличить человека в комнате от китайской комнаты можно только если человек не будет маскироваться под разум китайской комнаты (кк).

                                    Можно конечно отличить человека от кк по усталости, но кк тоже может эмитировать усталость.
                                    Ответить
                                    • > По сути Тест Тьюринга ни сколько не формализует понятия разума
                                      Проблема теста Тьюринга в том, что у некоторых индивидов меньше разума, чем у компьютерной программы ;) Если бы мне дали выбирать между гуглоботом и одним из проявлений орлежки, кричащим "какой багор", я бы сказал, что гуглобот это человек :)

                                      > эмитировать усталость.
                                      Китайская комната испускала усталось.
                                      Ответить
                                      • пример: разгадать капчу робот может успешнее, нежели человек (это особенно камень в огород recaptcha)
                                        Ответить
                                        • >разгадать капчу робот может успешнее, нежели человек (это особенно камень в огород recaptcha)
                                          Орлы?
                                          Ответить
                                    • @bormand
                                      > Имхо, если "разум" не может обучаться, то это тупой набор рефлексов
                                      Рефлексы тоже приобретаются.
                                      Я не спорю, мы привыкли относить к разумности также какой-никакой учёт прошлых ошибок. Но вот я лично знаю кучу людей, которые ничему не учатся. Следовательно, они не существуютнеразумны.

                                      @LispGovno
                                      > Я снова и снова задаю вопросы, ответы на которые я только что рассказал.
                                      "Это всё чёртов Альцгеймер, хорошо, что хотя бы Альцгеймера у меня нет".
                                      Посмотри на людей с деменцией. Формально они разумны.

                                      P.S. Тут интересный момент про разум, тест Тьюринга и безумие.
                                      Ответить
                                      • философия так и прет. Вставлю свои 5 копеек.
                                        Человек не может определить насколько разумен ли он сам. Он не может адекватно определить свое положение среди других людей. Поэтому приходит неадекватное мироощущение - то бишь самооценка. На этом основан парадокс - названия не помню

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

                                        Не знаю к чему. просто оффтоп
                                        Ответить
                          • спс за ссыль. может тоже стану фунциональным и продвинутым
                            Ответить
                      • Поищи Дугласа Крокфорда на ютубе, где он говорит про монады. Очень просто и доступно.
                        ЗЫ. Монады в программировании только похожи на моноиды в ТК. Это просто есть язык в котором очень популярно прикручивать идеи из абстрактной математики к плохому пониманию программирования, а потом этим сильно гордиться.
                        Ответить
                        • мне бы не просто и доступно, а фундаментально и с погружением
                          Ответить
                          • Есть книжка того же автора, который написал "Теорию типов" (и общепринятый авторитет в области операционной семантики - Benjamin Pierce), называется как-то типа "Теория категорий для программистов". Это будет с погружением. Жестко, бессмысленно и бесполезно.
                            Ответить
                          • > мне бы не просто и доступно, а фундаментально и с погружением
                            Вообще говоря, начинать лучше с просто и доступно. Ибо формально и с погружением, имхо, намного лучше усваивается, если есть хоть какие-то базовые знания в этой области.
                            Ответить
                            • я тут таки почитал и таки понял что монады в ФЯ и монады в сферическом вакууме - вещи разные. я прав?
                              Ответить
                              • Скажем так, с точки зрения программирования, не все свойства монад нужны. Например, бессмысленно настаивать на том, чтобы операция извлечения значения, которое хранит монада возвращала новую монаду. Это никому не нужно, но сделано так, потому что математический прототип так работает.
                                Смысл вообще монад в Хаскелле в том, что нужно как-то хранить и извлекать состояние. Но в Хаскелле нельзя просто взять и сохранить, или извлечь, нужно найти конструкцию в абстрактной математике, которая бы делала что-нибудь похожее, и реализовать ее. В итоге получается примерно как в том анекдоте про человека, который искал ключи под фонарем, вместо того, чтобы искать их там, где потерял.
                                С точки зрения математики, способность монады хранить что-то не имеет значения / не рассматривается как какое-то полезное свойство. По большому счету, это случайность, что именно этот инструмент был выбран для реализации записи и извлечения состояния.
                                Ответить
                              • не слушайте wvxvw, он не в теме

                                Монады в хаски и в математике - не разные вещи. Главное, что надо понять о монадах - это такая же абстрактная вещь, как Моноид, Группа или Кольцо. То есть структура с операциями, подчиняющимися аксиомам. Ни больше, ни меньше. Все утверждения вроде "монады нужны для хранения состояния" или "монады нужны для действий с побочными эффектами" очень однобоки и не выражают реальности. Они могут быть использованы для этого, но в них самих никакой магии нет. Это просто абстрактная структура.

                                Почему она оказалась полезна в программировании? Просто потому, что многие вещи можно свести к структуре, которая подходит под монадический "интерфейс". Моноиды, группы и кольца тоже могут быть полезны для написания обобщённого кода (Степанов много такого описывает в Elements of Programming, правда, книга довольно занудная). Но монады обладают более простой структурой и на практике встречаются чаще.

                                В хаски они появились не сразу, и нужны они там в основном как стандарт проектирования библиотек: найди в своей области монаду и реализуй инстанс класса, в комплекте огромное число операций для работы с ними.
                                Известно, что хаски изначально проектировался с идеей разделения чистого кода и кода с побочными эффектами. К примеру, первоначальный дизайн библиотеки ввода/вывода основывался на продолжениях (continuations), которые не давали "грязному" коду вылезти из продолжения. Дизайн с монадой IO появился позднее. Кроме того, это далеко не единственная абстрактная структура, используящаяся в хаски - есть (Аппликативные) Функторы, Моноиды, Стрелки и много чего ещё. Свет не сошёлся клином на монадах, просто у них есть интересные приложения. Не всё хорошо выражается в виде монад, их нетривильно комбинировать (monad transformers для меня когда-то были выносом мозга), но ознакомиться и побаловаться с ними однозначно стОит.
                                Ответить
                                • Такая же херня, как и с возвратом одного значения из функции:
                                  Пошагово,
                                  1. Сначала процедура называется функцией.
                                  2. Потом под это название подгоняется соответствующий математический формализм.
                                  3. Потом оказывается, что формализм точно не описывает исходную структуру.
                                  4. У фанатиков рушится хрупкий и богатый внутренний мир от несоответствия ожидаемого дейстивельности, и они замыкаются в воображаемом мире, где в языках программирования функции должны возвращать одно значение, монады должны возвращать монады при извлечении значения и т.д.

                                  Это явление в более глобальном плане известно как реакционизм, и Хаскелл, как нельзя лучше подходит для людей с такими видами на жизнь. Другое проявление реакционизма, например, молодежное течение "готов" - людей пессиместично настроеных относительно настоящего и томно вздыхающих о прошлом. И как в конвергентной зоологии мы видим подтверждения этому факту: Хаскелл библиотеки и продукты очень любят использовать аллюзии на средневековье (как и "готы"). Тот же Кабал, например.

                                  Хаскелл всеми тентаклями цепляется за арахаизмы типа бесполезной инфиксной записи, готическому и барочному символизму математических формул, в большинстве случаев обусловленном отсутствием у авторов мало-мальского опыта работы с символическими знаниями.
                                  Упаднечиство, разложение и декаданс - вот истинная суть Хаскелла.
                                  Ответить
                                • Наткнулся на
                                  Монада — это просто моноид в категории эндофункторов

                                  То есть Монада - это просто категория преобразований из А в А, обладающая ассоциативностью и нейтральным элементом (типа тождественного функтора)?
                                  Ответить
                                • > Моноиды, группы и кольца тоже могут быть полезны для написания обобщённого кода

                                  Foldable - моноид.
                                  Ответить
                    • >запатентованного эплом слова iπ
                      Apple, как известные плагиаторы идей, дружно идут в направлении трёх букв.
                      Это слово Эйплер запатентовал еще 300 лет назад.
                      http://upload.wikimedia.org/wikipedia/commons/thumb/3/35/E-to-the-i-pi.svg/800px-E-to-the-i-pi.svg.png
                      Ответить
                    • Intel Core iπ.
                      Ответить
                      • iπ - это π от эпл. те же 3,14, но по хипстерски
                        Ответить
            • Люр унд Кузя
              Ответить
              • Они расстались из-за разных взглядов на fluent интерфейсы?
                Ответить
                • она их сначала отрицала, да
                  Ответить
                  • А потом она все поняла и ушла в секту
                    Ответить
                    • ага, ее съел питон
                      Ответить
                      • И теперь она мыслит простыми действиями. Потому что простое - лучше чем сложное. То есть она вместо "я пошла готовить салат" говорит "я пошла на кухню, поставать обощи, мыть овощи, брать нож, искать среди овощей огурец, брат нож в правую руку...."
                        Ответить
                        • > брат нож в правую руку....
                          https://fbcdn-sphotos-a-a.akamaihd.net/hphotos-ak-ash3/1391494_528793047213039_2047262439_n.jpg
                          Ответить
            • Буквально вчера набросал такой интерфейсик для параллельной обработки данных:
              Pipeline
                  .from(recordsReader(file))
                  .filter(verifyWith(verifier))
                  .pipe(updater)
                  .to(writer(out))
                  .run();
              Я за флюент-интерфейсы.
              Ответить
      • Something.Du().Du().hast().Du().hast().mich()
        Ответить
      • Scooby.Doo().Be().Doo()
        Ответить

    Добавить комментарий