Абстракция всего.

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

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

Как пример, ну предположим программист стал играть в футбол и вот он замечает, что мол в программирование есть команда, и в футболе есть команда. В программирование есть цель и в футболе есть цель, скажем что не играя в пасс — в футболе проиграешь и также не сотрудничая с другими программистами проект не закончишь. И вот начинает, человек за уши тянуть все эти абстракции.

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

Но, лично как по мне, дальше чем схожесть в нескольких пунктах и может быть схожесть общего мышления не стоит лезть, так как есть две проблемы объединения:

О первой писал Джоэль — Закон Дырявых Абстракций. Чем больше абстракция, тем на самом деле она менее точная, особенно когда пытаешься применить детали. Ну и как вы понимаете, чтобы накрыть программирование и футбол одновременно, абстракция должна быть действительно большой.

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

Роман очень точно подметил, что после натягивания абстракций, по ним очень хорошо пройтись бритвой Окамма. Чаще всего оказывается, что половина абстракции явно лишние и не приносят никакой пользы/упрощения. А после их удаления оказывается, что внутри абстракции остались те самые 3-4 похожие пункта, которые мы подмечены с самого начала.

В общем, как по мне — играя в футбол, лучше играть в футбол, программируя — программировать. И не стоит пытаться скрещивать удава с ежиками.

11 комментариев to “Абстракция всего.”

  1. Aff:

    Что-то я не вкурю.. По-моему речь идёт о Метафоре.

    • Victor Ronin:

      Да, в целом — речь идет о метафоре. Только, обычно метафору применяют для одного объекта или события и не пытаются метафорой охватить все.

  2. Roman Porotnikov:

    Техника креативности, основанная на построении аналогий: Аналогия — 6 простых шагов к новой идее.

  3. Lucik:

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

    • Victor Ronin:

      Согласен. Но, именно если применить, а не если натягивать их до неузнаваемости.

  4. -=SAI=-:

    Эмм … я чего-то не понял 🙂 Может попытаемя отделисть мух от котлет ?
    1) Для чего мы натягиваем абстракцию программинга на футбол ?
    Если ( Просто так, по привычке ) ТО да, совсем неуместная абстракция
    Если (Мы никогда раньше не играли в футбол) TO
    Если (У нас есть комманада ) ТО
    Если(( Мы Часто проигриваем) И (ХотимРазобратсяПочемуПроигрываем = ДА)) ТО
    Натягивание абстракции программирование на футбол, для выяления слабых моментов, выявления патернов ошибок в защите, обороне итп тд. — весьма оправдана.(дабы не терять времени на построение новой модели «я играю в футбол»)
    2) Используется ли правельная асбтракция для футбола/Работы
    если описывать абстракцие футбол: то это больше похоже на коласическую конкурентную борьбу стратегий при прочих равных.
    Если отношения внутри команды и управеление, то абстракция модели девелоперской конторы подходит.

    • Victor Ronin:

      Мне кажется, что ВНЕ зависимости от целей, абстракция, которая притянута за уши будет только добавлять сущностный, приводить к неправильным выводам и т.п.

      Кстати, чуть перескочу на другую тему. Множество MBA болеют этой проблемой. У них есть опыт управления предприятием по выпуску носков. Они приходят в программистскую контору и натягивают свою абстракцию по выпуску носков (не желая строить новые модели). Не удивительно, что под таким чутким управлением компании быстро идут ко дну.

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

      • -=SAI=-:

        Звучит красиво, я тож читал «части книги» Давыдова и мне тоже понравилось, но там противоречий и фантазий 50 на 50 с интересными фактами.
        Что касается МБА и «чулковой» стратегии в Software то согласен, НА ПЕРВЫЙ ВЗГЛЯД, это звучит ужасно ошибочно. но мы не видели и не читали этой натянутой абстракции … потому она может вылится в итерационный метод… но так мы углубляемся в сферу фонтазий.
        Как на счет разабрать твой пример с футболом ? где стратегическая ошибка в представленной абстракции? (мы в начале осени играли внутрикорпоративный футбол, наша комманда слила практически все матчи ;), но несливали или держали счет, только пока все играли в рамках разработанной стратегии)
        По опыту натягивания программирования на футбол могу сказать, что да, дейсвительно натянуть ПОЛНОСТЬЮ не получится, но, раждение новой модели сущесвенно упрощается имея готовую, сходную абстракцию, которая мутирует в абсолютно новую.

        • Victor Ronin:

          Насчет Давыдова. На самом деле, не только в книгах MBA ведут себя не логично. Действительно я видел лично некоторое количество MBA, которые уж очень хорошо вписались в описание. И я не видел толковых MBA.

          Насчет футбола.

          >но несливали или держали счет, только пока все играли в рамках разработанной >стратегии

          Я за двумя руками за наличие стратегии.

          Однако, когда абстракция из программирования натянутая на футбол, приводит к тому, что люди серъезно обсуждают рефакторинг игры, ее отладку, модель MVC для команды и т.п. — это уже больше похоже не на использование абстракции, а на белую горячку.

  5. -=SAI=-:

    ну если в таком разрезе использования, то согласен абстракция применена бесдумно 🙂