24 January 2018

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

Open sourceJavaGitHub
На хабре публикуют перевод статей про участие в 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?
Tags:open sourcegithubspring bootcode qualitysonarqube
Hubs: Open source Java GitHub
+19
15k 68
Comments 46
Top of the last 24 hours