Pull to refresh
2
0
Nick Gushchin @iNikNik

Software Engineer

Send message

Монады как паттерн переиспользования кода

Reading time24 min
Views70K


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


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


Но ведь в интернете буквально сотни статей про ФП и монады, зачем писать еще одну?


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


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


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

Читать дальше →
Total votes 89: ↑85 and ↓4+100
Comments256

Почему функциональное программирование такое сложное

Reading time15 min
Views91K

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


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


Попытки использовать как-то в работе изученные концепции разбивались о полное непонимание, как применить полученное глубокое знание. Ведь, напомню, что парадигму ФП (где-то удобнее, где-то не очень, но) можно использовать практически в любом ЯП, совсем необязательно для этого изучать условный Хаскель.

Читать дальше →
Total votes 142: ↑123 and ↓19+138
Comments715

Проект легального обменника криптовалют

Reading time11 min
Views50K


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

Потенциально проект может быть интересен операторам обменников из «серой» зоны, проектам для расчетов с фрилансерами, международным компаниям для реализации зарплатных проектов в России, финансовым консультантам (в т.ч. менеджерам премиум-банкинга), трейдерам – любым лицам и командам, у кого есть необходимость частично или полностью легализовать доходы в криптовалюте.
Читать дальше →
Total votes 20: ↑15 and ↓5+10
Comments118

Топ-13 библиотек Scala для анализа данных

Reading time6 min
Views6K

Последнее время язык Scala стал обширно применяться специалистами Data Science. Он приобрел популярность в основном благодаря появлению Spark, который написан на Scala. На практике, часто на этапе исследования анализ и создание модели выполняются в Python, а затем реализуются в Scala, поскольку этот язык больше подходит для production.


Мы подготовили подробный обзор наиболее интересных библиотек, используемых для реализации задач машинного обучения и data science в Scala. Часть из них используется в нашей образовательной программе "Анализ данных на Scala".


Для удобства все представленные в рейтинге библиотеки были разделены на 5 групп: анализ данных и математика, NLP, визуализация, машинное обучение и прочее.

Читать дальше →
Total votes 14: ↑8 and ↓6+2
Comments0

Эволюционирующие торгующие системы

Reading time6 min
Views6.3K
AI наступает, и мы этого не боимся. Предлагаю озадачить его зарабатыванием капусты на бирже. Для начала, а там посмотрим.

Термины


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

Актив агента — список счетов с наличием средств на них A = [A1,A2,..] где A1, A2,… суммы в соответствующей валюте.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments16

Создание шейдеров

Reading time27 min
Views192K
Освоить создание графических шейдеров — это значит взять под свой контроль всю мощь видепроцессора с его тысячами параллельно работающих ядер. При таком способе программирования требуется другой образ мышления, но раскрытие его потенциала стоит потраченных усилий.

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


Сцена из Minecraft, до и после добавления нескольких шейдеров.

Задача этого туториала


Иногда программирование шейдеров представляется загадочной чёрной магией и его часто понимают неправильно. Существует множество примеров кода, демонстрирующих создание невероятных эффектов, но в которых практически нет объяснений. В своём руководстве я хочу восполнить этот пробел. Я сосредоточусь в основном на базовых принципах создания и понимания кода шейдеров, чтобы вы смогли с лёгкостью настраивать, сочетать или писать свои собственные шейдеры с нуля!
Total votes 105: ↑105 and ↓0+105
Comments27

Overclock мозга или Внутренняя виртуализация сознания

Reading time29 min
Views456K


Все помнят этот фильм? Какого черта он делает на Хабре? И вообще что тут делает подобный пост?
Наверное потому, что я считаю главным звеном в IT все таки человека, а точнее его мозги. Я попробую рассказать еще об одной возможности использовать свой мозг чуточку эффективнее. Одна из слабо задокументированных возможностей, которую мы используем каждый день, но не всегда даже об этом вспоминаем. Все описанное проверялось на мне. Если что-то я не пробовал, но рассказать об этом важно буду отмечать особо. Никаких наркотиков, аппаратов и издевательств над собой, только общедоступные легкие методики (короче, лег проспался и вперед, не вставая даже с кровати).
И да… Это до жути реалистично, на столько, что попробовав, вы не сможете не рассказать об этом.

Что бы не было лишних криков в комментах, попрошу всех кто ярых сторонников любой религии и конфессии, а так же убежденных эзотериков сразу поставить минус в карму и не читать дальше. Здесь не будет философии и великих вселенских тайн. А остальных прошу под кат — попробую рассказать о своей практике разгона мозга с помощью встроенных функций.
ночь как полигон для...
Total votes 224: ↑172 and ↓52+120
Comments292

Краткая инструкция о том, как надо работать с web-дизайнером (взгляд дизайнера)

Reading time5 min
Views57K


Введение


Я работаю веб-дизайнером. Какое-то время назад я подрабатывала фрилансером, сейчас работаю в небольшой студии. У нас нет менеджера проектов, поэтому, зачастую, я сама выступаю этим самым менеджером, по совместительству. Опыт общения с самыми разными заказчиками у меня достаточно большой. Статья «Краткая инструкция по работе с web-дизайнером (для менеджера проекта)» вызвала у меня шквал эмоций и бурю негодования, потому что именно таких заказчиков я всегда старалась избегать. В этой статье я попробую описать, как в идеале должна проходить работа заказчика и дизайнера.

С удовольствием приму критику и выслушаю мнения «другой стороны».
Читать дальше →
Total votes 62: ↑49 and ↓13+36
Comments57

Что в SEO можно считать нормальным и работающим, а что – отжившим

Reading time9 min
Views19K
Часть 1
Что точно не поможет занять «железный трон»

image

1. Магия мёртвых методов поисковой оптимизации

На заре SEO слепо верили, что ключевые слова – это сила. И чем их больше, тем лучше. Многие оптимизированные тексты грешили такой плотностью ключевых слов, что это делало их буквально нечитаемыми, зато очень даже привлекательными для роботов поисковых систем. Сегодня Yandex и особенно Google рекомендуют использовать всего несколько ключевых слов на страницу, делая таким образом тексты читаемыми прежде всего для людей, А иначе – санкции.

Другой пример – ссылки на главную страницу. Раньше стремились получить как можно больше линков именно на главную страницу, что помогало общему положению сайта, а также повышало тИЦ и PR. Сейчас такая тактика скорее опасна, нежели привлекательна. Например, Wikipedia выпадает на первой странице почти по любому запросу. При этом невероятное количество внешних ссылок ведёт на внутренние страницы ресурса.
Читать дальше →
Total votes 15: ↑4 and ↓11-7
Comments10

Лайфхак: в любой непонятной ситуации умножай на три

Reading time6 min
Views63K


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


Хочу обсудить проблемы, связанные с предварительной оценкой времени и сроков проектов. В этой статье я расскажу как обстоят дела на проекте, который я веду немногим более 5 месяцев. Я приведу некоторые свои мысли, объясню какие эксперименты с оценками я делал и какие выводы получил по прошествию этого срока.
Читать дальше →
Total votes 33: ↑32 and ↓1+31
Comments17

Сделай свой AngularJS: Часть 1 — Scope и Digest

Reading time34 min
Views89K
Angular — зрелый и мощный JavaScript-фреймворк. Он довольно большой и основан на множестве новых концепций, которые необходимо освоить, чтобы работать с ним эффективно. Большинство разработчиков, знакомясь с Angular, сталкиваются с одними и теми же трудностями. Что конкретно делает функция digest? Какие существуют способы создания директив? Чем отличается сервис от провайдера?

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

В этой серии статей я собираюсь воссоздать AngularJS с нуля. Мы сделаем это вместе шаг за шагом, в процессе чего, вы намного глубже поймете внутреннее устройство Angular.
Сделаем Angular вместе
Total votes 73: ↑72 and ↓1+71
Comments18

Суровые реалии конкурсов в рунете. Как uCoz разводил дизайнеров

Reading time10 min
Views81K

image



Недавно наткнулся в сети на баннер с рекламой конкурса по дизайну блога юкоза. Приз – iMac 27”. Честно хотел пройти мимо, но заманило то, что оценивать работы будет профессиональное жюри без влияния социальных лайков. Как же я был наивен.
Читать дальше →
Total votes 163: ↑95 and ↓68+27
Comments120

Страсть к программированию. Глава 4. Будь худшим

Reading time4 min
Views73K
Не дождавшись очередного перевода, полюбившейся мне книги Чеда Фоулера «Страсть к программированию» — решил продолжить. Не уверен, что никому не помешаю, но намерен решить возникшие вопросы мирно.

Глава 4. Будь худшим


< 3. Кодинг ещё не всё | 5. Инвестируйте в свой ​​интеллект >
Читать дальше →
Total votes 82: ↑71 and ↓11+60
Comments40

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity