Программирование в массы / Хабр
Понимание даже основ программирования может упростить деятельность человека. Помимо очевидных вещей, таких как развитие абстрактного мышления или способность разделять задачу на меньшие части, я предлагаю пойти ещё дальше и воспользоваться основными подходами к разработке. На примере создания классической логической игры, проводя аналогию между визуальным и традиционным программированиями, я и хочу показать, как навыки разработки могут помочь в решении прикладной задачи. Желающих подискутировать на тему или поиграть в «Быков и коров» и выиграть приз — зову под кат.
Меня зовут Женя и я backend разработчик в компании ManyChat. Некоторое время назад ко мне обратилась команда HR с просьбой реализовать знакомую многим с детства игру «Быки и коровы» на базе нашего продукта. Позвольте добавить немного контекста. ManyChat — это инструмент для автоматизации взаимодействия между бизнесами и их клиентами, позволяющий ответить на общие вопросы через Facebook, а с недавнего времени SMS и Email. «Быки и коровы» — это логическая игра, в ходе которой за несколько попыток необходимо отгадать загаданное число. Многие могут знать её по игре Fallout, где необходимо взломать компьютерный терминал. Более подробно с правилами можно ознакомиться в конце статьи.
Визуализация
Что мы делаем перед тем как писать код сложной задачи? Идём к доске с маркером или берём в руки карандаш и бумагу и рисуем блок-схему или UML диаграмму, ведь визуализация — это наиболее естественный способ представления и восприятия информации для человека. Flow Builder — сердце нашей системы, базируется на различных объектах, графических элементах и правилах, по которым они взаимодействуют друг с другом. Я сказал бы, что это логическое продолжение объектно-ориентированного программирования. Так что я отбросил привычные инструменты и сразу перешёл к конструированию логики общения бота с игроком.
Flow игры «Быки и коровы»
Это очень удобно, поскольку UML диаграмма и Flow Builder практически тождественны. На этом шаге уже сочетаются проектирование с программированием. За несколько итераций я накидал flow и обозначил места взаимодействия с пользователем и с API. Полученный результат несколько отличался от исходного представления в моей голове — визуализация предоставила возможность посмотреть на задачу с другой стороны. Это хорошо, так как изменения в диаграмму вносить проще и дешевле, чем в код. Как мне кажется, смысл этого подхода уходит корнями к поговорке «семь раз отмерь, один — отрежь». Инженерам он должен быть особенно знаком и понятен.
Разграничение ответственности
Что должно быть реализовано на стороне ManyChat, а что на стороне кода? Ответ на этот вопрос поначалу мне не казался очевидным. Для взаимодействия на нашей платформе есть два инструмента: Dynamic Block и External Request. Они практически идентичны за исключением того, что первый выполняет запрос на удалённый сервер и идёт дальше к следующей инструкции, а второй позволяет прежде сопоставить данные ответа с переменными бота.
В одной из первых версий я воспользовался Dynamic блоком и реализовал отправку турнирной таблицы из метода API прямиком в Facebook. Казалась бы, в этом подходе нет ничего плохого. Но если посмотреть немного дальше и предположить, что игрок захочет играть с помощью SMS — коду придётся узнать о канале коммуникации конкретного игрока. Это не кажется необходимым. В следующей версии я перевёл flow на работу с External Request, добавил запись ответа в пользовательские переменные и удалил любое упоминание о канале из кода. Теперь код игры можно использовать в другом приложении и реализовать любой желаемый интерфейс взаимодействия: от консоли до мобильного приложения. Было это отделение представления от управляющей логики согласно шаблону MVC или выделение ограниченных контекстов согласно подходу DDD — решайте сами. Главное здесь то, что не смотря на отсутствие требования, на подсознательном уровне я определил потенциально узкое место системы, которое в будущем могло бы создать проблемы.Именование переменных
Именование переменных — одна из двух главных проблем программирования. Помимо переменных не менее важным является именование блоков. Многие пользователи не придают этому значения, не успевают оглянуться как flow превращается в набор Copy 1, Copy 2 и так далее. Это кратно усложняет понимание. Всё как с плохим классом — невозможно разобраться что он делает, не зайдя внутрь. Более подробно эту мысль раскрыл мой коллега. Если заинтересовались, предлагаю ознакомиться с его постом.
Стив Макконнелл в своей книге «Совершенный код» писал, что имя должно полно и точно описывать представляемую сущность. Думаю, с этим спорить сложно. Например, для булевых переменных я предпочитаю использовать префикс is. В таком случае читающему код уже по первым двум буквам становится понятно с чем он имеет дело. Что касается длины — желательно, чтобы она не превышала 20 символов (Gorla, Benander, and Benander, 1990). Чем меньше область видимости переменной, тем короче может быть её имя. Но так как все переменные в ManyChat имеют глобальную область видимости, стоит воспользоваться пространством имён.
Для «Быков и коров» я использовал начальный сегмент в виде двух заглавных букв BC, производных от Bulls and Cows. Учитывая вышесказанное, у меня получилось имя переменной BC Is Victory — достаточно уникально и исчерпывающе, на мой взгляд.DRY, KISS
Игра работает и, казалось бы, можно выдохнуть с чувством выполненного долга. Но мы-то знаем, что дальше идёт этап self-review и рефакторинга. При более детальном разборе можно заметить, как обработка стоп-слов и победа ведут на похожие блоки — призывы игрока к некоторым действиям. При этом проигрыш по непонятной причине живет своей жизнью. Объединение этих мест в одно кажется логичным шагом, позволяющим избежать дублирования, что в свою очередь приводит к повышению консистентности поведения и простоте сопровождения. Теперь, в случае необходимости изменения, нужно внести в единственный блок системы без изменений в других, что свидетельствует о том, что принцип
Flow с соблюдением принципа DRY
Однако, не стоит останавливаться на достигнутом. Комплексные решения сложны в сопровождении. При возникновении ошибки локализовать её будет непросто, особенно спустя время, когда выпадешь из контекста. У нового человека уйдёт не мало сил, чтобы разобраться, что к чему. А ознакомиться придётся с каждым узлом, дабы не упустить ничего важного. Поэтому стоит воспользоваться принципом Keep it simple, stupid и разнести все возможные действия по отдельным местам. После декомпозиции у меня получилось 5 довольно простых для понимания flow. В качестве приятного бонуса данный рефакторинг удовлетворил Single responsibility принцип. Каждый flow имеет одну ответственность и эта ответственность полностью инкапсулирована в нём. Обращение происходит а-ля Black box, а по характеру возникшей проблемы её можно локализовать быстрее.
Flow с соблюдением принципа KISS
YAGNI
В одной из первых версий автоматизации были наработки по рассылке напоминаний о заброшенной игре и инструкций по получению подарков победителями. Реализацию первой идеи усложнили ограничения со стороны Facebook — с недавнего времени ужесточились условия отправки сообщений за пределами окна в 24 часа. Вторая же оказалась недостаточно тривиальной для реализации со стороны кода. Оба вопроса решаемы, но количество необходимых усилий не оправдывалось потребностями одноразовой кампании. К тому же, спринтовые задачи наступали на пятки, поэтому было принято решение не реализовывать данный функционал. И тут на помощь пришел
Опытные разработчики знают, что любая фича нуждается в постоянной поддержке, от рефакторинга кода до актуализации документации и работы с обратной связью от пользователей. Поэтому к добавлению новой функциональности всегда стоит относиться с подозрением, задавая вопрос, действительно ли это необходимо? В конечном счёте на этом этапе можно сэкономить уйму ресурсов.
Давайте поиграем
Этапы self-review и рефакторинга пройдены, ненужного функционала нет, а смысл всех flow прозрачен для понимания. Это значит, что игра готова и настало время побороться за призы. По условиям конкурса топ-10 игроков, которые наберут наибольшее количество баллов до 22 мая 2020 года, получат призы от команды ManyChat.
Немного о правилах. В нашей реализации игра рассчитана на одного человека. Бот загадывает 4-значную последовательность с неповторяющимися цифрами. Игрок делает попытку отгадать число. Бот сообщает в ответ, сколько цифр угадано без совпадения с их позициями, то есть количество коров, и сколько угадано вплоть до позиции, то есть количество быков. В итоге сценарий игры может выглядеть примерно так:
Загадано число 1234.
Участник делает первое предположение: 4321
Участник делает второе предположение: 1678
И получает ответ: 1 бык и 0 коров.
Мы предлагаем 2 уровня сложности: игра на ограниченное и неограниченное число ходов. Победа в сложной принесёт вам 3 балла, в простой — 2. Проигрыш, независимо от уровня, заберёт 1 балл.
Игра была реализована на стандартном стеке технологий: Nginx 1.17, PHP 7.4, PostgreSQL 12.1. При желании вы можете склонировать репозиторий на свой сервер, установить шаблон на свою страницу ManyChat и устроить свой турнир.
Выводы
«Каждый в этой стране должен научиться программировать на компьютере, потому что это учит вас думать». Думаю, актуальность данного высказывания давно вышла за пределы только одной страны. Программирование — это не тайные символы в терминале, сложные для восприятия непосвященному человеку, а программист — не избранный. В первую очередь, это образ мышления и набор навыков для решения задач.
Обращаясь к названию статьи и оригинальному лозунгу, хочется перефразировать его: «Программирование принадлежит народу. Оно должно уходить своими глубочайшими корнями в самую толщу широких трудящихся масс. Оно должно быть понято этими массами и любимо ими».
Никогда бы не подумал, что в одной статье буду цитировать Стива Джобса и Ленина.
Я уверен, что мысли, изложенные здесь, приходили в голову не только мне. Некоторые даже сочтут их капитанскими. Но знаю по себе, что иногда нужно услышать одну и ту же информацию несколько раз, чтобы начать ей пользоваться. Банальный принцип — максимально упрощать и так несложные с виду вещи. Каждый программист знает, что код проекта достаточно быстро и легко выходит из-под контроля, если не уделять этому должное внимание. Но иногда приходится снова напоминать себе об этом.
Что-то не было освещено вовсе. Например, в этой статье не были затронуты приёмы экстремального программирования, такие как парное программирование, частые небольшие релизы и игра в планирование.
Вероятно есть то, о чём я и не задумывался. У каждого из нас свой опыт и своё видение. Поэтому призываю вас поделиться в комментариях своими мыслями по этому поводу.
ЦСИ ЗАРЯ — АССЫ В МАССЫ
ЦСИ ЗАРЯ — АССЫ В МАССЫАССЫ В МАССЫ
27 ОКТЯБРЯ 2017 – 4 ФЕВРАЛЯ 2018
В октябре в Центре современного искусства «Заря» откроется ретроспективная выставка «Ассы в массы», посвященная андеграундному движению «Асса», которое появилось в Петербурге начала 80-х.
«Асса» — лозунг, возникший в среде художников-некрореалистов и быстро распространившийся в богемной среде Ленинграда. Так называлась галерея Тимура Новикова, это слово появилось и в серии работ известного ленинградского художника Олега Котельникова. «Ассу» использовали и как тег, и как роспись на одежде в рамках битнических показов мод. «Асса-парадами» называли групповые демонстрации авангардной моды на выступлениях «Популярной механики» Сергея Курехина. В рок-н-рольных хэппенингах принимали участие рок-музыканты, неформальные художники, тусовщики и поэты. Апогеем экспансии арт-группировок под воинственным лозунгом «Асса» стал одноимённый фильм, до сих пор считающийся одним из знаковых для поколения 80-х.
Куратор проекта «Ассы в массы» Михаил Бастер — художник-график, дизайнер, автор архива о субкультурах СССР «Компост», ранее уже организовывал такие выставки, как «Последние романтики Советского Союза» (2007, «Зверевский центр», Москва), «Хулиганы 80-х» (2009, «Центральный Манеж», Москва), Street style-80 (2010, ВДНХ, Москва), «Альтернативная мода до прихода глянца 1985-1995» (2011-2013, «Гараж», Москва; «Этажи» Санкт-Петербург; «Дом кино», Дубровник, Хорватия; Fashion biennale, Вараждин, Хорватия; kim?, Рига, Латвия), Untamed fashion in USSR (2013,Новая Дакота. Амстердам), «По дорогам СНГ» (2015, Музеон), «Моторокеры. Москва-Берлин» (2017, ВДНХ, Москва).
«Специально для Владивостока мы подготовили шоу, цельно и глубоко раскрывающее внутреннюю сторону этого процесса через призму моды и искусства — рассказывает Михаил Бастер. — Под флагом с лозунгом андеграундного движения «Асса», которое зародилось в Петербурге начала 80-х, в перестройку произошёл первый осознанный всплеск альтернативной культуры. Этой до сих пор мало изученной истории о контркультурной моде и искусстве «красной волны» и посвящена выставка»
Основа выставки «Ассы в массы» — архив исторической документации и российской уличной и модной фотографии Михаила Бастера. Также в экспозицию войдут произведения художников Тимура Новикова, Георгия Острецова, Инала Савченкова, Евгения Юфита, Сергея Шутова, участников арт-группировок «Чемпионы мира», «Новые художники» и «Некрореалисты» из коллекций Московского музея современного искусства, Музея Art4Ru, а также из личных собраний Гарика Ассы, Сергей Шутова и других. Специально для выставки участники советского андеграунда предоставили предметный фонд, включающий в себя элементы гардероба, пластинки, постеры, шляпы. Выставка будет дополнена мультимедийными материалами (анимация, короткометражные и полнометражные фильмы, видеоарт, видеодокументация перформансов и модных показов) в виде медиа-инсталляций и сеансов параллельной образовательной программы.
В Москве самостоятельными «асса-парадами» в течение нескольких перестроечных лет эстетически торпедировали многочисленные культурные мероприятия, начиная с масштабных выставок в Манеже и заканчивая модными молодежными клубами. Миссия у подобных акций была примерно такая же, как у «Синих блуз», — экспансия и пропаганда: пропаганда нового искусства, новых имен, новой эстетики, нового времени — яркой, дерзкой, местами шокирующей.
«Андерграундная культура в России и СССР стала плодородной почвой для появления многих культовых имён и проектов в искусстве, кино, музыке и моде, — говорит Алиса Багдонайте, главный куратор Центра современного искусства «Заря». — Для нас важно не только впервые в таком объёме рассказать об этом периоде, но и показать его связь с культурным контекстом Дальнего Востока».
Катализатором многих процессов, перезапустивших дальневосточную культуру и ставших причиной мощного перестроечного толчка, стал отец-основатель советского панк-дендизма Гарик Асса (Олег Коломийчук). Он родился в Хабаровске и получил прозвище «Асса» за свою активность и вклад в организацию модных показов. Покинув родные края в 70-х, Гарри примкнул к ленинградской богеме, открыл московский блошиный рынок на Тишинке и незамедлительно ввёл в моду винтаж и стиль «мёртвый разведчик», состоящий из предметов гардероба вдов советских разведчиков и партийной номенклатуры. Тимур Новиков назначил Гарика Ассу министром моды при правительстве «Новых художников», а из участников показов и созданных образов сложился импровизированный дом моделей «Ай-да-люли» выступавший под девизом «Безумный род людской, кривляйся и пляши». Основной идеей «Ай-да-люли» стало стирание грани между авангардной модой и «носибельной» в ходе уличных дефиле. Благодаря Гарри Ассе традиция «асса-парадов», а вместе с ней и новая волна искусства и музыки, переместилась из Ленинграда в Москву. На выставке его фигуре и коллекции картин будет посвящено отдельное место как точке связи между отдельными дисциплинами альтернативной культуры и событиями 1980-х и 1990-х годов.
Хэппенинги «Дома моделей Ай-да-люли», бушевавшие на советских концертных и театральных сценах, к концу 80-х вдохновили многие дизайнерские и перформативные группы, такие как дуэт «Кровь с молоком» Ирэн Бурмистровой, «Лаборатория экспериментальных моделей» Светланы Петровой и Сергея Чернова, «Театр ПОСТ» Бориса Юхананова и Камиля Чалаева, группа «Север» Екатерины Рыжиковой и Александра Лугина, которая делала перформансы в духе шаманистских и неоязыческих обрядов. Моделями Гарика в его шоу выступали многие известные художники и музыканты: Тимур Новиков, Сергей Шутов, Гор Чахал, Жанна Агузарова, Сергей Ануфриев, музыканты группы «Кино», вокалистка группы «Колибри» Наталья Пивоварова и многие другие.
Свидетельством прорыва андеграунда на официальную сцену и его признания как значимого культурного явления стал фильм Сергея Соловьёва «Асса», вышедший на экран в 1987 году.
ВХОД СВОБОДНЫЙ
Массы Определение и значение
- Лучшие определения
- Викторина
- Связанный контент
- Примеры
Сохраните это слово!
См. синонимы для масс на Thesaurus.com
Простые люди или люди с низким социально-экономическим статусом, как в телевизионных ситкомах, предназначены для обращения к массам. Эта идиома почти всегда используется в снобистском контексте, принижающем вкус, интеллект или какое-либо другое качество большинства людей. В.С. Гилберт высмеивал эту точку зрения в марше пэров в « Иоланте» (1882 г. ), в котором низам среднего класса и массам приказано склониться перед сверстниками. Премьер-министр Уильям Гладстон придерживался другой точки зрения (Речь, 1886 г.): «Во всем мире я поддержу массы против [высших] классов». [Первая половина 1800-х]
ВИКТОРИНА
ВЫ ПРОЙДЕТЕ ЭТИ ГРАММАТИЧЕСКИЕ ВОПРОСЫ ИЛИ НАТЯНУТСЯ?
Плавно переходите к этим распространенным грамматическим ошибкам, которые ставят многих людей в тупик. Удачи!
Вопрос 1 из 7
Заполните пропуск: Я не могу понять, что _____ подарил мне этот подарок.
Слова рядом с массами
Волшебная флейта, Волшебная гора, Человек, развративший Хэдлибург, Женитьба Фигаро, «Марсельеза», массы, Масса людей, ведущих жизнь в тихом отчаянии, Мастер Builder, The, тематический, Тематический апперцептивный тест, тематизация
Словарь идиом американского наследия® Авторские права © 2002, 2001, 1995, издательство Houghton Mifflin Harcourt Publishing Company. Опубликовано издательством Houghton Mifflin Harcourt Publishing Company.
Слова, относящиеся к массам
простонародье, простонародье, плебеи, плебей, народ, публика, простонародье, hoi polloi, третье сословие, средний класс, пролетариат, рядовые, рабочий класс, простолюдины, большие немытые, инфраструктура, массы, множество, сброд, сброд
Как использовать массы в предложении
France 24 обеспечивает круглосуточную прямую трансляцию обеих сцен по мере их развития.
Прямая трансляция терактов в Париже||9 января 2015|DAILY BEAST
Сэндс была вовлечена в скандальный для того времени роман с плотником, и ходили слухи, что она беременна от него.
Самый трагический призрак Нью-Йорка любит минималистскую шведскую моду|Нина Строхлич|8 января 2015 г.|DAILY BEAST
Три официально зарегистрированные семейные истории: мать и ее дочери, приехавшие из Феникса.
Я пытался предупредить вас о неряшливом миллиардере Джеффри Эпштейне в 2003 году|Вики Уорд|7 января 2015 года|DAILY BEAST
Далласские ковбои распродают свой ультрасовременный футбольный стадион.
Останется ли Техас техасцем?|Дэвид Фонтана|29 декабря 2014 г.|DAILY BEAST
Во вторник Daily Beast поговорила с ликующей Лигой о закулисной битве за то, чтобы «Интервью» показали в кинотеатрах.
Внутренняя история того, как «Интервью» от Sony наконец попало в кинотеатры|Марлоу Стерн|23 декабря 2014 г.|DAILY BEAST
Гладкий считает, что это гораздо более трудная работа, чем зарабатывать деньги; но он преследует свой блуждающий огонек с неутомимой энергией.
The Pit Town Coronet, Volume I (of 3)|Charles James Wills
Эти шаровидные массы обычно содержат много туберкулезных бацилл.
Руководство по клинической диагностике|Джеймс Кэмпбелл Тодд
Никогда не знаешь, когда наткнешься на драгоценность в самом отдаленном углу.
Музыкальное образование в Германии|Эми Фэй
Г-н Слокум не получил университетского образования, и его жизнь прошла в закоулках и отдаленных местах.
Книга Анекдотов и Бюджет Веселья;|Разное
Я оторвался от обода Надписей-На-Камне, этот набор шепотных фраз эхом отдавался в моих ушах.
Необработанное золото|Бертран В. Синклер
Idioms by The Free Dictionary
The+masses — Idioms by The Free DictionaryThe+masses — Idioms by The Free Dictionary
Слово, не найденное в Словаре и Энциклопедии.
Возможно, Вы имели в виду:
Пожалуйста, попробуйте слова отдельно:
массы
Некоторые статьи, соответствующие вашему запросу:
- атомная масса
- Масса (масс-спектрометрия)
- Молярная масса
- Глава и конвентуальная масса
- Масса в специальной теории относительности
- Распределение молярной массы
- Инвариантная масса
- Массовое число
- Молекулярная масса
- Низкая масса
- Масс-спектр
- Номинальная масса
- Масса
- серийное производство
- Среднечисловая молекулярная масса
Полный браузер ?
- ▲
- Зона
- Зона
- Зона
- Зона (альбом)
- Зона (значения)
- Зона (Введите Шикари)
- Зона (фильм)
- Зона (Мичиган)
- Зона (сериал)
- Зона (YTV)
- Зона тишины
- Зоопарк
- Зоопарк (значения)
- Зоопарк (показать)
- Банда Зоопарка
- Зоопарк Северо-Западной Флориды
- История зоопарка
- Мальчик смотрителя зоопарка
- Зоологическая летопись
- Зоолог
- Кошка Зут
- Убийства в костюме Зут
- Волшебник Зо
- Зоррос
- Заря
- Проект Цукакиса Мондеяно
- Зукэ
- Зулус
- Зутоны
- Зюрангеры
- the+masses
- The, Or the Critical Journal Edinburgh Review
- —
- Мечта
- Дискография The-Dream
- МУХА
- Братья-убийцы
- .В массы: Оксана Шаталова и Георгий Мамедов о центральноазиатском авангарде — T&P