Чему музыка может научить нас о том, как мы делимся кодом

1656674063 chemu muzyka mozhet nauchit nas o tom kak my delimsya

Джонатан Саринг

bT0dcLEV-7cI6UQk6iTASQzBpG7SedXeW7ka
Это обезьяна, играющая на виолончели?

Не так давно многие из нас возили подозрительный чемодан в кузове автомобиля или прятали его под кроватью. У некоторых из нас в гостиных гордо стояли башни Ikea с несколькими местами для хранения. В обоих случаях это стало результатом нашей поразительной коллекции музыкальных компакт-дисков. Сегодня, вероятнее всего, они с ностальгией хранятся в нашем гараже.

После короткого правления музыкальные компакт-диски были заменены iTunes и YouTube, а между ними – MP3-плееры. Эта революция произошла главным образом из-за пяти главных недостатков, которые компакт-диски имели с первого дня:

  1. Они были громоздки в использовании, переносе и транспортировке.
  2. Они потратили слишком много усилий, чтобы приобрести/создать.
  3. Их было очень тяжело изменить и модифицировать. Никто на самом деле не хотел записывать новый компакт-диск, когда выходит новая песня Бибера (не осуждайте меня).
  4. Они заставили нас носить с собой кучу песен, которые мы не слушаем, и просматривать их, чтобы послушать одну песню, которую мы действительно хотели послушать.
  5. Кто запомнил, какие песни на каком диске? 90% моих записанных компакт-дисков все равно содержали те же 10 песен.

Удивительно, но это не очень отличается от того, как мы сегодня делимся кодом между проектами и людьми. Давайте посмотрим, как.

Как это похоже на обмен кодом?

u740J5qArBLMtR08Bqlo-0Sl6m8E-xwV4WfQ
«Обычно мне просто нравится слушать, как мой световой меч шатается туда-сюда…»

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

Каждый день все больше приложений, которые мы создаем, разрабатываются с большей модульностью с помощью меньших компонентов кода. Многоразовые функции, UI и веб-компоненты (такие как React, Vue и Angular), модули Node.js, GraphQL API и даже бессерверные функции являются нашими строительными блоками.

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

Позвольте мне показать вам. Вот приложение для фильмов React, размещенное на GitHub. Как видите, он содержит 49 файлов и 14 каталогов. Одним из таких каталогов является components подкаталог. В этом подкаталоге имеется 8 многократно используемых компонентов React (например hero и navigation).

├── src
│   ├── App.js
│   ├── App.scss
│   ├── App.test.js
│   ├── components
│   │   ├── hero
│   │   ├── hero-button
│   │   ├── item
│   │   ├── list-toggle
│   │   ├── logo
│   │   ├── navigation
│   │   ├── title-list
│   │   └── user-profile
│   ├── favicon.ico
│   ├── global.css
│   └── index.js
└── yarn.lock

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

Копировать код вставки есть a очень плохая идея. Это может показаться быстрым способом, но на самом деле это не так. Не делайте этого.

На сегодняшний день у меня действительно есть три варианта:

  1. Опубликовать девять пакетов: Создайте восемь новых хранилищ, шаблон, опубликуйте девять пакетов и измените исходный код обоих проектов на требовать их. Когда я захочу изменить компонент, мне придется очень много работать, чтобы внести изменения из разных хранилищ. А теперь представьте, что у вас их пятьсот.
  2. Я могу использовать Lerna хранить несколько пакетов в одном репо, но это работает, только если я действительно хочу использовать монорепо. Даже тогда мне придется реструктуризировать свой проект, настраивать каждый пакет отдельно и определять их зависимость, и каждое изменение все равно будет проходить через исходное хранилище.
  3. Совместная библиотека: создайте новое хранилище, сгруппируйте компоненты вместе, создайте конфигурации, необходимые для такого проекта, опубликуйте его как новую библиотеку и измените исходный код обоих проектов. Каждое приложение, использующее эту библиотеку, придаст лишний код, вес и сложность. Каждое изменение потребует повторной публикации всей библиотеки и проходит через владельца.

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

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

Итак… iTunes для общего кода?

Очевидно, что сравнение общих библиотек с компакт-дисками технически не очень точно. Сложность обмена функциями между сложными средами и контекстами отличается от прослушивания Леди Гаги.

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

Так что мы решили его построить

Где-то в начале 2017 у нас была именно такая мечта. Одно из лучших преимуществ открытого кода состоит в том, что наличие идеи является вполне достаточной причиной ее создания.

Мы решили продолжить и создать Bit – проект с открытым исходным кодом, предназначенный для совместного использования кода так же, как iTunes сделал для обмена музыкой – сделать его простым, динамичным и доступным для всех. Идея Bit проста: уничтожить накладные расходы на обмен кодом.

Как это работает

U9MYoGOV4yiSkk3XYYreYkXfWnM9qUEv6MzJ

Он создан, чтобы обеспечить быстрый опыт «управляемого копирования и вставки» и быть на 100% совместимым с Git и NPM.

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

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

Вместо этого вы можете просто указать Bit на любую часть вашего репо, которой вы хотите поделиться, позволить Bit автоматически изолировать ее (включая зависимости) и предоставить общий доступ к совместному расположению под названием Scope, из которого его можно установить с помощью NPM.

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

При совместном использовании можно даже eject код снова станет зависимым пакетом для вашего проекта.

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

Вот как выглядит рабочий процесс Bit:

  1. Установите Bit и инициализируйте его для проекта.
  2. Выберите, какие компоненты кода отслеживать в вашем проекте и какие среды добавить для процессов сборки и тестирования.
  3. Поделитесь ими с удаленной областью, где они расположены, упорядочены и доступны для установки с помощью вашего любимого менеджера пакетов.
  4. Легко импортируйте их код в любое репо, изменяйте его при необходимости и обновляйте свои изменения в вашей кодовой базе.

Давайте рассмотрим пример.

Вернуться к кинопрограмме React

Вернемся к киноприложению React.

Добавление Bit в проект позволило мне отслеживать и изолировать многоразовые компоненты внутри, не создавая новых репозиториев и не изменяя код моего проекта. Затем я поделился ими с этой коллекцией.

Распространение заняло очень мало времени и мой проект вообще не изменился. Ничего нового package.json файлы были созданы, и мне не пришлось настраивать несколько сред или сражаться со своим деревом зависимостей.

gAxTcRwrApKKUG1uju8B-q5IjsYr81O9Y0p8
Реагируйте на компоненты с помощью Bit

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

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

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

После использования на протяжении более 10 месяцев, а также после использования его дополнительными командами и сообществами, я приглашаю вас присоединиться и использовать его для своих проектов.

Вы можете просмотреть демонстрационное видео этого проекта здесь.

Обратно в будущее

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

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

Мы можем многому научиться тому, как музыка переместилась с компакт-дисков в общие списки воспроизведения. Bit имеет целью сделать общий доступ к коду и его повторное использование простым и доступным всем, как это сделал iTunes для совместной музыки. Работа над ним все еще продолжается, поэтому у него много возможностей для роста и развития. Вы можете попробовать это, предложить идеи и отзывы и помочь нам сделать этот шаг вперед.

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

– А. Османи

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *