На хабре публикуют перевод статей про участие в 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?