Больше комитов, хороших и разных

    На мой взгляд, самый лучший способ освоить что-нибудь новое в программировании — изучать комиты в публичные репозитории.
    Тут вам и предельная практичность, best practices, большое разнообразие и прочее. Есть только один неприятный момент — далеко не каждое изменение в репозиторий можно считать поучительным или хоть сколько нибудь информативным.
    Более того, практически никогда нельзя восстановить полный контекст, в котором появилось то или иное изменение — его может знать только сам автор. Можно ли в таких условиях все-таки вытащить крохи полезной информации?

    Итак, еще раз сформулирую исходное положение:

    • Имеем набор комитов в разные публичные репозитории
    • Контекст, который породил изменения, содержащиеся в комитах, не известен
    • В этом наборе комитов содержатся такие, которые несут мудрость или просто интересны


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

    • Размер изменения. Врядли кто-то будет читать огромные комиты в тысячи строк
    • Соответствие языку программирования. Для каждого репозитория есть основной язык программирования, и весь основной код пишется на нем. Но есть еще и куча сопровождающих файлов (скрипты для автоматизации, конфигурационные файлы, документация), которые тоже подвержены изменениям. Конечно, они не представляют особого интереса без контекста
    • Отношение автора к сделанному изменению. Это единственное, что можно выдернуть из контекста — никто не может оценить сделанную работу лучше, чем сам программист. Поэтому если он пишет в комментарии «magic (ugly dirty hack)!», врядли стоит рассматривать данный комит, как предел совершенства. Помимо комментария к комиту также полезно проанализировать комментарии в самом изменении


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

    Примерно такие мысли крутились у меня в голове некоторое время назад, и я решил воплотить их в виде web сервиса thebestcommits.info. Это еще очень сырой прототип, в котором реализован только основной функционал. Сервис в почасовом режиме забирает с githubarchive.org данные о комитах на Github, анализирует их и отображает в виде слайдов презентации на странице браузера. Внутренности состоят из Golang и Python, графическое представление реализовано с помощью reveal.js

    Мне интересно мнение сообщества об этой идее. Является ли она достаточно интересной, чтобы развивать ее дальше?

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

    Интересна ли вам эта идея?

    Поделиться публикацией

    Комментарии 11

      +1
      Идея интересная, одобряю.

      Следующий шаг — создание коммьюнити, где специалисты могли бы в виде новостной ленты постить наиболее интересные коммиты, комментировать их(в чем ценность находки) и обсуждать с другими спецами.
        +7
        Не хватает варианта «интересная бесполезная штука».
          +4
          надо бы разделить по языкам и операционкам. мне например не интересно ардуно и питон, а интересны iOS/osx, objC,C
            +1
            Я подумал об этом и заложил возможность фильтрации по языку, но пока не дошли руки реализовать это в интерфейсе.
            +2
            Кнопка голосования не говорящая. Я подумал, что это какая-то статистика. ИМХО, плюсик будет более понятным.
              +1
              согласен. считаю, что голосовать в минус тоже будет полезно, потому что фильтруется далеко не всё бесполезное.
              А вообще отличная идея, стоит развивать (и фильтры первым делом добавить).
                0
                Я сознательно реализовал только возможность поднять рейтинг, но вы правы — отбросить весь мусор невозможно, а минусы могут помочь это сделать.
              0
              Штука несомненно очень полезная. У меня сейчас в разработке курс по теории и практике синтаксического анализа и компиляции (пока, к сожалению, в зачаточном состоянии), который построен, в основном на демонстрации коммитов. То есть, в рамках курса пошагово создается компилятор. Каждый шаг сопровождается демонстрацией дифа от предыдущего состояния с комментариями, почему сделано именно так. Планирую прогнать курс следующей осенью.
                +1
                >> На мой взгляд, самый лучший способ освоить что-нибудь новое в программировании — изучать комиты в публичные репозитории.

                Будем реалистами, ничего не получится так изучить: 1) Коммит — это кусочек изменения, как его можно оценить, если не знаешь всего исходника, контекста, тикета и обсуждения; 2) Плохих программистов гораздо больше чем хороших, особенно в опенсорсных проектах. Ты скорее разучишься программировать, если решишь «учится» на таком коде.

                P.S. Смотри проект Ohloh
                  0
                  Не хватает ссылки на Github репозиторий проекта. Сейчас приходится гуглить, чтобы понять откуда этот кусок кода.
                    0
                    Она так нужна? В процессе реализации я обдумывал, стоит ли оставлять возможность просмотреть репозиторий-источник. Пришел к выводу, что лучше показывать diff без ссылок — это сделает его более абстрактным.

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

                  Самое читаемое