Как новичку сделать вклад в open source проект с 20К звездами?

    На хабре публикуют перевод статей про участие в open source продуктах и складывается впечатление что жизнь, полная энтузиастов, где-то за границей. Что новичку страшно участвовать в крупных проектах, что у него обязательно должны быть там кураторы и его pull request вместе с ним точно пройдет через все круги ада.

    Опыт друга, новичка в open source, говорит об обратном. Первый его pull request #11680 приняли в звездный spring-boot без обсуждения и без единого комментария от мейнтейнеров. Его исправления будут доступны уже в версии 2.0.0.RC1



    Не боги горшки обжигают. Рассуждения о возможности стать контрибьютором крупного проекта на github…

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

    А удерживает ли это интернет тролля от публикации? И что такое бокс по переписке? Все эти ютуб видеобатлы всерьез? Среда виртуальная, вряд ли мейнтейнер проекта — необузданный психопат и знает где ты живёшь… Все еще страшно?

    У медиков есть шутка что нет здоровых людей, есть недообследованные. Так же и в мире open source — нет идеального кода, в каждом модуле есть душок — code smell. Как обнаружить его новичку, всегда ли субъективны критерии чистоты кода? Есть инструменты статического анализа кода sonarqube, pvs-studio, SpotBugs, code inspection в Idea. Попробуйте запустить их на знакомом проекте и вы и удивитесь! Вам это лень?

    Наконец, вы придумали «инновационный JS фреймвор с виджетами». Думаете, выложив на github, его сразу украдут, обфусцируют и продадут в Сколково? Понимаю что вы тратили свое свободное время. Воображение рисует как будете привлекать инвестиции и покупать себе красную Ferrari. У вас есть модель монетизации и план развития вашего «секретного» проекта? Насколько востребована и уникальна эта идея. Как быстро устареет код и идея? Сможет ли проект развиваться без вас? Жалко отдавать его бесплатно?

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

    Возвращаясь к истории Андрея и его вклад в open source.

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

    Но после университета и военной кафедры его призвали служить. Это время из его карьеры разработчика было потеряно. Вернувшись, ему было непросто найти работу по специальности без опыта работы после университета. Опыт не наберешь без работы, на работу не берут без опыта — замкнутый круг. Маленький городок, где живут они с женой не изобилует IT вакансиями. Поработал в банке сисадмином. Потом ради работы программистом, стал ездить на работу за 80км от дома. И до сих пор так ездит на работу… На работе совсем нет времени на open source — был проект в крупном интеграторе копать от забора до обеда. Развитие и обучение было, в основном, в его свободное время. Он очень умный и целеустремленный, но резюме и время службы оборачиваются против него, когда проходит через жернова формальностей у HR.

    Недавно разговорился с Андреем и рассказал ему про результаты анализа кода spring boot в sonarcloud. У нас время от времени бывают дискуссии про технологии и процесс разработки.

    Предложил помочь с улучшением кода boot. Он сомневался, что его pull request примут в такой крупный проект. Я порекомендовал ему сконцентрироваться на исправлении одного типа дефектов и взять в работу не очень сложный code smell. Он выбрал «String function use should be optimized for single characters».

    Суть этого «запаха кода» в том что, в объекте java.lang.String есть методы indexOf и lastIndexOf, которые можно вызвать с параметром char вместро String из одного символа и для случая строки с одним символом они работают эффективнее.

    Не эффективно:

    String myStr = "Hello World";
    // ...
    int pos = myStr.indexOf("W");  // Noncompliant
    // ...
    int otherPos = myStr.lastIndexOf("r"); // Noncompliant
    // ...

    Лучше написать так:

    String myStr = "Hello World";
    // ...
    int pos = myStr.indexOf('W');
    // ...
    int otherPos = myStr.lastIndexOf('r');
    // ...

    Как результат — он немного улучшил то, чем пользуются многие java разработчики в повседневной работе. Надеюсь, что у Андрея в будущем появится возможность улучшать на работе open source инструменты и фреймворки, которые он использует, вместе с коллегами!



    На Хабре точно есть люди, которые смогут вам помочь советом. Так познакомился с raiym сначала на github, а потом и здесь. lany рассказывал о судьбе его проекта HuntBugs и как можно использовать статический анализ кода из Idea в командной строке.

    Мой главный совет новичкам — не бояться open source и пробовать исправлять код «с душком». Следуйте примеру Андрея!

    А что удерживает вас от вклада в open source?
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 46
    • +4

      Я всё же стараюсь не лезть в новый проект с косметикой, а найти действительно баги. Статический анализ тут тоже помогает. Вот, например, мой pull-request в JIT-компилятор Graal. Признаюсь, я даже не собрал его, когда закидывал пулл-реквест. Там своя доморощенная система сборки, никакой maven/gradle/ant/etc., которая к тому же плохо работала под виндой, её тоже чинить пришлось.

      • +1
        Статья больше о пороге входа в open source для новичков. Понятно, что когда заглядываешь под капот jfluid в visualvm, там не до code smell — слеза на глазах наворачивается.
        • +1
          Вот из-за этого подхода малкие баги висят годами, все заняты чем-то более возвышенным. И не только в народных разработках. Вот, в русской версии дров Nvidia опечатка на самом видном месте уже 8 лет висит.

          Пройтись по проекту, прилизать интерфейс, поправить опечатки и двусмысленные надписи — это сразу +100500 к UX.
          • 0
            Вы меня неправильно поняли. Опечатка в интерфейсе — это «действительно баг». А использование в коде одной конструкции вместо другой, которая такой же длины, такой же понятности и, вероятно, даёт исчезающе малый прирост производительности, — это косметика. Я про косметику в коде, а не в том как приложение выглядит для пользователя.
        • 0
          Не понял, чем первый код отличается от второго.
          • +1
            в первом случае строка " ", во втором char ' '
            • 0
              А есть реальные тесты производительности?

              Что-то это попахивает «не используйте двойные кавычки в PHP», когда уже давно нет никакий разницы (если вы конечно не экономите сотые от наносекунд). А когда она была, то ее никто никогда не замечал.

              Подобные штуки компилятор/интерпретатор может сам распознать и оптимизировать без особых проблем и, возможно, именно так он и делает.
              • 0
                Так компиляторы разные есть. Их исходники не проверял. Кто-то в eclipse, кто-то в openjdk собирает. Не все используют последние версии JDK и т.п. В реализации этих функций смотрел.

                А про реальные тесты производительности смог бы ответить Андрей. Но у него нет здесь аккаунта.
                • 0

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


                  Надо помнить, что у такого pull-requesta есть и минусы. Например, засоряется история коммитов, усложняется git blame. Автоматизированные системы, которые назначают ответственного за исключение или предлагают ревьювера для кода, могут предложить человека, который внёс такую косметическую правку, а не реального автора кода.

                  • 0

                    А зачем Андрей? Сложно JMH запустить?

            • +1
              А я каждые выходные ползаю по Github рыща в надежде найти какой нибудь маленький полезный проект, и попробовать начать с него. На данный момент тщетно.
              Страшно братья за большой, и многопользовательский, по очевидным проблемам — описаным в статье)
              • +1
                Надеюсь вам повезет! По своему опыту могу сказать, что мне сложнее провести pull request в проект с 270 звездами чем исправить потенциальные утечки в spring-boot. Так что логики никакой нет, пробуйте!
                • 0
                  Возьми этот: github.com/ip-gpu/UniversalPauseButton
                  Программа которая ставит текущую открытую программу(та что в фокусе) на паузу через глобальный хук кнопки. Очень удобно в играх где нет реализации паузы во время роликов или диалогов, а надо отойти от компа…
                  • 0
                    Любопытно. А есть возможность делать не паузу, а замедление? ну как-бы последовательное нажатие и отпускание паузы, чтобы игра не отваливалась от сокета, но не рендерила 60 фпс в бэкграунде?
                • +1

                  Реальные проблемы, это то, что не считая мелких исправлений косметических недочетов, которые ни что иное, как в основном вклад ради вклада, то подготовка какого-то вклада в open source занимает кучу времени, за которое платят довольно мало работодателей, а в свободное время есть куча других занятий.


                  Про выложи свой проект вообще смешно. Я думаю, вы понимаете, чем отличается внутренний модуль в кампании и open source проект? Вот у меня есть модуль для работы с форматом todo.txt из python кода. Он лежит в открытом доступе и все-такое, но блин, я бы не назвал это open soruce проектом, например, потому что у него пока нет нормальной доки.


                  Со своим вкладом в крупных продукт такая же фигня. Обычно, если это не косметические всем понятные изменения, надо грамотно их написать, создать правильно описанные pull request и issue, протестировать и написать там автотесты/доку, а потом ждать у моря погоды. Потому что иногда автор забрасывает проект и все довольно печально (например, pyshop). Ну или не считает ваш pr важным.

                  • 0
                    Даже «косметические» улучшения увеличивают производительность и улучшают читаемость.

                    По поводу работы не поспотрю. В инвестбанках политика с open source преимущественно потребление. А бюрократии даже с легальным использованием библиотек хватает. В сравнении с этим пул реквест на github — приятная прогулка.

                    свободное время есть куча других занятий.

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

                    Андрей тоже не на работе ошибки в spring-boot правил.

                    Желаю, чтобы вашему проектов кто-нибудь из новичков помог с документацией.
                    • 0
                      Тут каждый сам решает. Играть в игры, смотреть зомби ящик или opensource. Я в свободное время пару часов в неделю нахожу. Особенно, если это открытая часть моего личного проекта.

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

                      • 0
                        Вы правы, что написание поддерживаемого кода и прототипа различаются. В последнее время я разгребали Авгеевы конюшни на работе. При этом в opensource замечал за собой стремление поговнокодить. Борюсь с энтропией своего кода всеми силами. SonarQube/SonarLint бьет мне за код по рукам. Посмотрите, может и вам пригодится
                        • +1
                          Ну, у меня на том проекте даже 100% покрытые тестами главного модуля есть :)
                          Ну и + pylint с набором и CI.
                          Но вот с документацией пока беда :(
                          • 0
                            Ух ты! Редкость для маленьких проектов.
                            • 0
                              Вдруг кто-то из тех кто хочет сделать вклад в open source и читает сейчас комментарии вам поможет с документированием.
                              • 0
                                eGGshke интересно будет?
                                • +1
                                  Да, с радостью бы поучаствовал.
                      • +1
                        Я например правил небольшой баг в NetBeans, самое сложное было — подписание соглашения о контрибуции ораклу всех прав на код. Плюс мы с коллегой по прошлой работе фиксили баг в Hibernate, коллега потом отправлял его в апстрим — тоже особо никаких трудностей не было. Так что особо ничего сверхсложного в этом нет.
                        • 0
                          Это точно. Все зависит от мейнтейнеров проекта. В pivotal легко подписать лицензию
                        • +2

                          Почему-то все новички думают, что open source проектам нужно коммитить только изменения в дизайне и архитектуре. Передавайте привет Андрею. Он молодец.


                          Кстати, напомнило One Man’s Quest to Rid Wikipedia of Exactly One Grammatical Mistake

                          • 0
                            Спасибо, думаю что он следит за комментариями. Скинул ему ссылку на статью
                          • 0

                            а вот это точно правильный фикс?
                            int end = value.indexOf("\""); превратилось в int end = value.indexOf('\"');

                            • +1

                              Мелочи жизни, так тоже можно писать. Главное чтобы "'" не превратилось в ''' :D

                              • 0
                                да, проверил, это тоже char
                              • 0
                                Искать по гитхабам достаточно долго. Может организовать какой-то сервис, где авторы сами напишут, что в их проекте надо сделать/доделать?
                                Или может есть такой?
                                • +2

                                  Да, есть

                                  • +1
                                    Есть еще вот это
                                    • 0
                                      В проектах где много открытых тикетов и авторы сами заинтересованы в новых контрибьюторах, обычно есть какой-нибудь специальный тэг на тикетах типа «good first issue» — несложная вещь, до которой просто руки не дошли, но новичок вполне может с ней справиться.

                                      Но помните, что не все проекты вообще заинтересованы в новых контрибьюторах.
                                    • +1
                                      Игорь, спасибо за статью =)
                                      За код и поддержку в проекте!
                                      • +1
                                        Райм, тебе спасибо за библиотеку и помощь!
                                      • +1
                                        А можно и так и сразу себя в контрибьютеры занести
                                        • +2

                                          В свое время так же занимался правкой багов во freecol. Одновременно писал к нему новый ИИ, который бы никогда не закончил.
                                          Пока писал ИИ, с его помощью нашел баг в сервере.
                                          В целом помощь в рефакторинге, исправил пару багов в клиенте и один в сервере.
                                          Вроде бы участвовал только пару месяцев, зато очень хорошо помогло войти в курс дела разработки на Java. По времени ушло где-то 80 часов рабочего времени летом, а опыт использую до сих пор.


                                          Если хотите чему-то научиться — ставьте себе невыполнимые задачи и шаг за шагом ее реализуйте. А опенсорс для этого самое лучшее начало. Гнаться за деньгами вот так вот сразу — бесперспективно. В любой области.

                                          • +2
                                            Мой первый опыт пулл реквеста на гитхабе — вообще не код) В одной из игр, в которые я довольно увлечённо играл, был неполный и изобилующий опечатками перевод, я тихо злился, а потом решил сделать хорошее дело — вылизал опечатки, постарался сделать адекватный перевод жаргонизмов, допилил те места, которые не были переведены(с каждым обновлением игры добавляется несколько строк в языковые файлы, так что это даже не косяк предыдущего переводчика — он просто не стал продолжать). Никаких проблем не возникло, и мой пулл реквест приняли после новогодних праздников, чему я очень рад, хоть это и не имеет отношения к программированию) И возможно, теперь мне будет легче начать участвовать в опенсорсе)
                                            • 0
                                              Как новичку сделать вклад в open source проект с 20К звездами?

                                              Да хоть 65536К, какая разница-то?


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


                                              Есть в проекте мешающий лично тебе баг или интересная лично тебе фича — берёшь, делаешь её и засылаешь PR. Количество стразиков в профиле проекта тут совершенно роли не играет.


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

                                              Скупая айтишная слеза скатилась по щеке читателя.

                                              • +1
                                                Количество стразиков в профиле проекта тут совершенно роли не играет.

                                                Думаю, количество звёзд коррелирует с забюрократизированностью проекта.

                                                • 0
                                                  Скупая айтишная слеза скатилась по щеке читателя.

                                                  В случае войны, правда, скупая слеза скатится по щеке офицера по рядовым…

                                                  Да хоть 65536К, какая разница-то?

                                                  Сложнее принимают pull request. Когда изменение одного символа проходит через:
                                                  1) создать стори в JIRA
                                                  2) создать бранч в git server project
                                                  3) создать бранч в git front project
                                                  4) исправить кавычку в server
                                                  5) добавить тест в front
                                                  6) прогнать все тесты
                                                  7) pull request
                                                  8) merge 1
                                                  9) merge 2
                                                  10) close story
                                                  • 0
                                                    Сложнее принимают pull request.

                                                    Вы же понимаете, что это не от звёздочек зависит, а от владельца проекта.
                                                    20К может быть и у какого-нибудь гипотетического leftpad-а, написанного одним человеком за вечер. А звёздочки набрались за те десять лет, что он лежит на гитхабе.

                                                    • 0
                                                      Тут зависит. Проект очень популярен в java community — spring-boot существует чуть больше чем три года.
                                                      • 0
                                                        Тогда стоило писать не про «20К звёзд», а про востребованность и популярность.
                                                        Популярным может быть и проект с репозиторием на собственных серверах.
                                                        Те же Apache Commons только недавно стали переходить на GitHub в качестве основного репозитория.
                                                        • 0
                                                          Вас огорчило содержание статьи?
                                                          Apache Commons — это скорее наследие. DBCP уже не торт, logging — капролит, io разве что местами удобнее nio из новых релизов java.

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