• Что не так с ООП и ФП

    • Translation
    Я не понимаю причины существования бесконечных споров вокруг Объектно-ориентированного (ООП) и Функционального (ФП) программирования. Кажется, что такого рода вещи находятся за пределами человеческого понимая, и о них можно спорить бесконечно. Много лет занимаясь исследованием языков программирования, я увидел четкий ответ, и зачастую я нахожу бессмысленным обсуждение этих вопросов.

    Если кратко, то как ООП, так и ФП неэффективны, если доходить в их использовании до крайности. Крайностью в ООП считается идея о том что “все что угодно является объектом” (чистое ОП). Крайностью для ФП можно рассматривать чистые функциональные языки программирования.
    Читать дальше →
  • Попытки начать обучение ребенка программированию с Minecraft pocket edition


    На дворе осень и сын все чаще остается дома, уткнувшись в телефон или планшет, слабо реагируя на внешние раздражители. Меня это огорчает. Сам я начал программировать, как мне кажется, с того, что к моему первому компьютеру БК 0010-01 игры то на кассетах в комплекте шли, а вот магнитофон не шел. Пока добывали магнитофон с подходящим линейным выходом, я успел попробовать Бейсик, спасибо отцу за первые уроки. Так что, когда смог со скрипом загрузить первую графическую игру, то смотрел на нее уже не как на то, во что наконец буду играть, а очарованно думал, как бы сделать свою не хуже. Сына же, в его 8 лет, давно поглотил мир видеоигр и ютуба, так что начинать программирование с трели на встроенном динамике, похоже, впечатления не произведет.

    Читать дальше →
  • bear_hug: игры в ASCII-арте на Python3.6+

    • Tutorial


    Для своих игр в ASCII-арте я написал библиотеку bear_hug с очередью событий, коллекцией виджетов, поддержкой ECS и прочими полезными мелочами. В этой статье мы посмотрим, как с её помощью сделать минимальную работающую игру.
    Читать дальше →
    • +30
    • 4.1k
    • 3
  • Питон, пожирающий мир: как побочный проект одного разработчика стал популярнейшим языком программирования

    • Translation

    Разочаровавшись в недостатках существовавших языков программирования, Гвидо Ван Россум создал язык Python. Сейчас этот язык используют миллионы людей, и Ник Хит беседует с ван Россумом о прошлом и будущем языка.



    Гвидо Ван Россум в штаб-квартире Dropbox в 2014 году

    В конце 1994 года группа избранных программистов с разных концов США собралась для обсуждения своего нового секретного оружия.

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

    «Особенно мне запомнился один человек, сказавший: ’Не говорите никому, что я здесь, потому что то, что мы используем питон, является конкурентным преимуществом’. Это было их секретное оружие».
    Читать дальше →
  • ООП, «святая троица» и SOLID: некоторый минимум знаний о них

      Необходимое вступление


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


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


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


      Тут мне могут возразить, что учить эти вещи в школе рановато, и вообще на ООП свет клином не сошёлся. Во-первых, это смотря как учить. Во-вторых, 70% материала этой статьи применимо не только к ООП. Что я буду отмечать отдельно.



      Читать дальше →
    • Как Денис Крючков выкупил Хабр у Mail.ru

        Денис Крючков (deniskin) рассказал Roem.ru о том, что он смог выкупить акции «Тематических медиа» у Mail.Ru Group и теперь сможет управлять компанией единолично. Мы думаем, что это одно из самых эпохальных событий в истории «Хабрахабра» и по такому случаю у Дениса стоит взять интервью



        — Привет, позволь тебя поздравить. Как у тебя получилось выкупить долю Mail.ru в «Хабре»? Никто же не будет продавать курицу, несущую золотые яйца
        — Спасибо! Да, конечно, для этого пришлось довольно долго искать деньги.
        И где же их Денис нашёл?
      • Умение видеть абстракции



          Моему сыну, как и многим мальчишкам, нравятся автомобили. Причём чем они больше и необычнее — тем больше нравятся. Когда мы идём по улице, а мимо проезжает эвакуатор или снегоуборочная машина, он неизменно дёргает меня за руку, указывает на заинтересовавший его объект и говорит: «Папа, б-р-р!». Говорит он так потому, что ему один год и вышеуказанные два слова составляют 40% его словарного запаса. Тем ни менее, в общем мысль понятна — обратить внимание на автомобиль. Давайте подумаем, каким образом ребёнок в возрасте 8-10 лет сказал бы своему сверстнику то же самое. Что-то вроде «Ух ты, смотри какая крутая тачка!», да? Мысль та же, но обратите внимание — уже шесть слов вместо двух. И, наконец, представьте, каким образом то же самое скажет человек лет в тридцать: «Эй, смотри, да это же Ferrari California 2008-го года выпуска с двигателем V8 мощностью в 454 лошадиных силы и 7-ми скоростной коробкой-автоматом! Она до сотни разгоняется за 3.9 секунды!». Да, здесь уже больше деталей, но, если вы не автомеханик или фанат Ferrari — они вам скорее всего не нужны и не важны. Основная же мысль — всё та же, что и в «Ух ты, смотри какая крутая тачка!» или «Папа, б-р-р!». Но выражена она уже в 30 слов.

          Вы заметили, как абстракция «интересный автомобиль» обросла деталями и нюансами, стала занимать существенно больше места в тексте и времени на понимание, анализ и ответ? То же самое происходит и с программным кодом.
          Читать дальше →
        • Создание архитектуры программы или как проектировать табуретку

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

          К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

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

          Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
          Читать дальше →
        • Шпаргалка по шаблонам проектирования


            Перевод pdf файла с сайта http://www.mcdonaldland.info/ с описанием 23-х шаблонов проектирования GOF. Каждый пункт содержит [очень] короткое описание паттерна и UML-диаграмму. Сама шпаргалка доступна в pdf, в виде двух png файлов (как в оригинале), и в виде 23-х отдельных частей изображений. Для самых нетерпеливых — все файлы в конце статьи.

            Под катом — много картинок.

            Читать дальше →
          • Паттерн проектирования «Мост» / «Bridge»

              upd: Изменил диаграмму и код. Расширил пример и описание.

              Почитать описание других паттернов.

              Предыстория


              Вернувшись домой, после непродолжительных посиделок у старого друга, я обнаружил, что оставил у него свой мобильный телефон, а вместе с тем и единственный в квартире будильник. Ситуация осложнялась тем, что завтра в 8:00 надо было быть на работе. Вариант вернуться за мобильником в 11 часов вечера я даже не рассматривал. И первое, что пришло мне на ум — написать свой будильник, причем с применением паттерна «Мост», который мне и без того надо было реализовать в рамках спецкурса. Как говорится, двух зайцев… Я думаю, не стоит пояснять что лег спать я под утро, но довольный собой. А утром, ровно в 7:00 меня победоносно разбудил мой bridge-будильник, весело наигрывая мотив из TBBT.

              Как я до такого докатился, читайте под хаброкатом.
              Читать дальше →
            • Зачем нам ООП и что это такое

                Всем привет.

                Неделя статей на хабре посвященная ООП. Последняя статья вызвала у меня кучу эмоций и, к сожалению, очень плохих эмоций. Мне очень не понравилась статья. Почему? Потому что в ней передаются какие-то отрицательные эмоции об использовании ООП. Эмоции вызваны лишь тем, что человек не до конца понимает всю силу ООП и хочет убедить всех в том что ООП зло. Самое печальное что люди начинают прислушиваться и кидаться ужасными доводами, не имеющими ничего общего с действительностью. Я думаю что студентам такие статьи противопоказаны больше чем GoF, которых я бы давал как можно раньше. :)

                Начнем.
                Читать дальше →
              • Ceph. Анатомия катастрофы

                  Ceph — это object storage, призванный помочь построить отказоустойчивый кластер. И все-таки отказы случаются. Все, кто работает с Ceph, знают легенду о CloudMouse или Росреестре. К сожалению, делиться отрицательным опытом у нас не принято, причины провалов чаще всего замалчивают, и не дают будущим поколениям научиться на чужих ошибках.

                  Что ж, настроим тестовый, но близкий к реальному кластер и разберем катастрофу по косточкам. Измерим все просадки производительности, найдем утечки памяти, разберем процесс восстановления обслуживания. И все это под руководством Артемия Капитулы, который потратив почти год на изучение подводных камней, заставил при отказе производительность кластера не падать в ноль, и latency не подскакивать до неприличных значений. И получил красный график, который ну сильно лучше.


                  Далее вы найдете видео и текстовую версию одного из лучших докладов DevOpsConf Russia 2018.


                  Читать дальше →
                • CephFS vs GlusterFS

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


                    Читать дальше →
                    • +20
                    • 12.8k
                    • 7
                  • Python: метапрограммирование в продакшене. Часть вторая

                      Мы продолжаем говорить о метапрограммировании в Python. При правильном использовании оно позволяет быстро и элегантно реализовывать сложные паттерны проектирования. В прошлой части этой статьи мы показали, как можно использовать метаклассы, чтобы изменять атрибуты экземпляров и классов.



                      Теперь посмотрим как можно изменять вызовы методов. Больше о возможностях метапрограммирования вы сможете узнать на курсе Advanced Python.

                      Читать дальше →
                    • О выборе структур данных для начинающих

                      • Translation
                      image

                      Часть 1. Линейные структуры


                      Массив


                      Когда вам нужен один объект, вы создаёте один объект. Когда нужно несколько объектов, тогда есть несколько вариантов на выбор. Я видел, как многие новички в коде пишут что-то типа такого:

                      // Таблица рекордов
                      int score1 = 0;
                      int score2 = 0;
                      int score3 = 0;
                      int score4 = 0;
                      int score5 = 0;

                      Это даёт нам значение пяти рекордов. Этот способ неплохо работает, пока вам не потребуется пятьдесят или сто объектов. Вместо создания отдельных объектов можно использовать массив.

                      // Таблица рекордов
                      const int NUM_HIGH_SCORES = 5;
                      int highScore[NUM_HIGH_SCORES] = {0};

                      Будет создан буфер из 5 элементов, вот такой:



                      Заметьте, что индекс массива начинается с нуля. Если в массиве пять элементов, то они будут иметь индексы от нуля до четырёх.
                      Читать дальше →
                    • Криптоалгоритмы. Классификация с точки зрения количества ключей



                        На Хабрахабре уже порядка 1000 статей так или иначе связанные с шифрованием, но иногда возникает ситуация, когда быстро нужна информация по тому или иному алгоритму.
                        Читать дальше →
                      • Чистый код на PHP

                        • Translation


                        Это принципы разработки ПО, взятые из книги Clean Code Роберта Мартина и адаптированные для PHP. Это руководство не по стилям программирования, а по созданию читабельного, многократно используемого и пригодного для рефакторинга кода на PHP.


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


                        Статья вдохновлена clean-code-javascript.

                        Читать дальше →
                      • Bitcoin Cash. А был ли форк?

                          image

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

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

                          Краткое содержание


                          • Bitcoin — общество любителей математики
                          • Что такое форк? Почему не так страшна атака 51%
                          • Segwit. С чего все началось
                          • Bitcoin Cash — как заработать и как дать другим заработать
                          • Перспективы
                          Читать дальше →
                        • Будущее Web очень напоминает Bitcoin

                          • Translation
                          image

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

                          Зимой 2014 года он позвал меня с собой на биткоин-конференцию в Майами, чтобы рассказать о новом проекте Ethereum, который он с единомышленниками из Канады запустил за несколько месяцев до этого. Когда он объяснил мне суть проекта, он не скупился на прогнозы: «Мы заменим страховые компании и Уолл Стрит».

                          Список продолжал расти. Онлайн-сервисы по распространению фильмов вроде Netflix и Hulu. Игровые платформы вроде Xbox и Sega Genesis. Мессенджеры вроде Twitter. Пенсии, обмены валют, системы голосования, управление интеллектуальной собственностью, трастовые фонды. Если верить Любину, то всё – реально всё, что мы делаем через интернет или по другим цифровым каналам, претерпит радикальные изменения.

                          Рассказанная им идея с тех пор завладела умами энтузиастов цифровых валют. Идея в том, что технология, обеспечивающая безопасные транзакции в сети биткоин, и делающая их прозрачными, очень быстрыми и нецензурируемыми, и не требующими доверия другим сторонам, может использоваться для обработки более сложных сделок и хранить любую цифровую информацию в интернете.
                          Читать дальше →
                        • Почему я не покупал Bitcoin?

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

                            В этой заметке я не собираюсь очередной раз рассматривать технологические особенности, сравнивать криптовалюты и фиат, давить на сознание конкретными цифрами возможной выгоды, о нет. Всего лишь расскажу о том, какие когнитивные искажения все время мешали мне купить криптовалюту. Быть может, если вы найдете их у себя, то некоторые вопросы удастся прояснить (в любом направлении). А если не найдете — то, скорее всего вы знаете что делать и без этих размышлений. Очередная реклама? Ну да. В маркетинговой форме? Ну нет.
                            Читать дальше →