paint-brush
Wyróżnij się spośród innych programistów, przyczyniając się do rozwoju oprogramowania typu Open Sourceprzez@empiree361
Nowa historia

Wyróżnij się spośród innych programistów, przyczyniając się do rozwoju oprogramowania typu Open Source

przez Oleg Dubovoi7m2024/12/28
Read on Terminal Reader

Za długo; Czytać

Jeśli naprawdę kochasz programowanie i chcesz rozwijać się jako programista, postaraj się stworzyć coś własnego — może to być mała biblioteka lub usługa.
featured image - Wyróżnij się spośród innych programistów, przyczyniając się do rozwoju oprogramowania typu Open Source
Oleg Dubovoi HackerNoon profile picture


Cześć wszystkim! Chcę podzielić się swoim doświadczeniem w rozwijaniu biblioteki open-source, opowiedzieć o procesie, który się z tym wiąże, i zainspirować Was do tworzenia własnych projektów.

Prehistoria

Wiosną, oglądając jeden ze streamów Yegor Bugaenko — zainspirowała mnie idea rozwoju open-source. Yegor stwierdził, że jeśli chcesz wyjść poza bycie zwykłym programistą i stać się bardziej poszukiwanym i wyjątkowym specjalistą, musisz stworzyć coś własnego. Niezależnie od tego, czy jest to książka, blog, biblioteka, czy nawet framework, takie projekty pozwalają wyróżnić się spośród wielu innych programistów, zwłaszcza na dzisiejszym rynku IT. To nie tylko pokazuje Twój profesjonalizm, ale także pokazuje prawdziwe zaangażowanie w rozwój tej dziedziny.


Wszystko to sprawiło, że zacząłem się zastanawiać: jak naprawdę wyróżniam się na tle innych deweloperów? Pomimo lat pracy w IT i uczestnictwa w różnych projektach, wciąż nie miałem niczego własnego — czegoś, co mogłoby pokazać moją wyjątkowość i profesjonalizm.

Poszukiwanie pomysłów

Wróciłem do moich starych projektów na GitHub, ale szybko zdałem sobie sprawę, że żaden z nich nie był naprawdę znaczący. Postanowiłem więc zacząć od zera i stworzyć coś nowego. Pełen motywacji i entuzjazmu zacząłem myśleć o tym, co mógłbym napisać, co byłoby pożądane, przynajmniej wśród niewielkiej publiczności, i co pasowałoby do moich umiejętności.


Przez dwa lub trzy dni analizowałem pomysły na mój projekt open-source. Im więcej rozmyślałem, tym bardziej wydawało mi się, że wszystko zostało już napisane, a to, co jeszcze nie zostało zrealizowane, nie będzie możliwe do osiągnięcia w pojedynkę. Powiem od razu: to myląca perspektywa. Nie pozwól, aby zniszczyła twój potencjał. Tak, wiele już zostało stworzone, ale to nie powód, aby się poddawać i porzucać pomysł stworzenia czegoś własnego.


Teraz wyjaśnię dlaczego:

  • Zawsze jest szansa na złapanie trendu i stworzenie narzędzia lub usługi, które szybko stają się popularne. Na przykład podczas pandemii COVID-19 opracowano strony internetowe, które dostarczały statystyki w czasie rzeczywistym dotyczące infekcji i najnowsze wiadomości. Obecnie jesteśmy świadkami trendu w kierunku usług AI, który nadal zyskuje na popularności. Wystarczy uchwycić moment i zaoferować rozwiązanie, na które jest popyt w tym okresie.
  • Nie trzeba być pierwszym w niszy, aby ją podbić. Weźmy na przykład Discorda: pojawił się w 2015 r., gdy byli już uznani gracze, tacy jak TeamSpeak, Ventrilo, Skype i RaidCall. Jednak w ciągu zaledwie kilku lat Discord stał się liderem w swoim segmencie. Kluczem nie jest nowość pomysłu, ale to, jak skutecznie rozwiązujesz istniejący problem.


Najważniejszym aspektem tworzenia czegoś nowego jest zidentyfikowanie prawdziwego problemu i zaproponowanie rozwiązania. Może to być globalne wyzwanie lub niewielki, ale znaczący problem, który wymaga poprawy. Ważne jest zrozumienie, z jakimi trudnościami borykają się inni programiści lub zwykli użytkownicy i jak możesz pomóc im przezwyciężyć te wyzwania.


Po dalszym namyśle poczułem chęć stworzenia czegoś użytecznego dla społeczności .NET — małej biblioteki, która mogłaby ułatwić rozwój projektu. Ponieważ moim głównym celem jest .NET, postanowiłem skoncentrować się na tym, co już wiem i robię dobrze. Jednym z pomysłów, który przyszedł mi do głowy, było stworzenie biblioteki do śledzenia zdarzeń wejściowych z klawiatury i myszy.


Miesiąc wcześniej, pracując nad aplikacją desktopową dla systemu Windows, stanąłem przed zadaniem śledzenia naciśnięć klawiszy na klawiaturze w celu wykonania określonych czynności. Głównym niuansem było to, że musiało to działać niezależnie od tego, czy nasza aplikacja była aktywna. Ponieważ w tamtym czasie nie było gotowych rozwiązań, wykorzystałem natywne wywołania P/Invoke i z powodzeniem osiągnąłem pożądany wynik. W tym momencie nie brałem pod uwagę, że inni programiści mogą również napotkać ten problem i że mała biblioteka rozwiązująca ten problem mogłaby być całkiem przydatna.


Tak, to nie jest biblioteka, która zmieni czyjeś życie, ale to pierwszy krok do stworzenia czegoś własnego. To okazja, aby zdobyć cenne doświadczenie i spędzić czas, angażując się w coś, co naprawdę mnie pasjonuje, dlatego zdecydowałem się podjąć działanie.

Rozwój

Pierwszym krokiem była burza mózgów na temat funkcjonalności mojej biblioteki. Chciałem, aby jej możliwości były jak najszersze, a jednocześnie dostępne i przyjazne dla użytkownika. Moim celem było, aby użytkownik nie musiał pisać więcej niż 3-5 linijek kodu w większości scenariuszy.


Podczas burzy mózgów wpadłem na pomysł, że możliwe będzie nie tylko śledzenie danych wejściowych, ale także ich kontrolowanie. Na przykład za pomocą kodu można symulować naciśnięcia przycisków lub kombinacje klawiszy, przesuwać kursor myszy, wyłączać określone klawisze, aby system nie reagował na ich naciśnięcia, a nawet zmieniać przypisania klawiszy. Wszystkie te funkcje były wdrażane stopniowo poprzez aktualizacje.


Gdy tylko sfinalizowałem zestaw funkcji, z entuzjazmem rozpocząłem prace rozwojowe. Pisanie kodu nie było szczególnie trudne, ale skupiłem się na jego strukturze i czystości, aby inni programiści mogli łatwo zrozumieć, co zostało zrobione i dlaczego. Podczas procesu rozwoju przeprowadziłem kilkakrotnie globalną refaktoryzację, zmieniając organizację i nazwy, a także wyodrębniając części kodu do oddzielnych klas. Zwróciłem szczególną uwagę na oddzielenie kodu zależnego od platformy (ponieważ planowałem w przyszłości stworzyć rozwiązanie międzyplatformowe) od samego kodu biblioteki. Zapobiegłoby to konieczności przepisywania całej bazy kodu podczas odchodzenia od P/Invoke. Poświęciłem również czas na dodanie komentarzy XML, aby użytkownicy biblioteki mogli zrozumieć, co robi każda metoda lub klasa.


Po ukończeniu pierwszej wersji biblioteki przesłałem ją do NuGet (systemu zarządzania pakietami dla platformy .NET, podobnego do npm lub pip). Chciałem uzyskać informacje zwrotne, aby dowiedzieć się, czy ktoś jest zainteresowany tym projektem i w jakim kierunku powinienem pójść dalej. Przed promowaniem mojej biblioteki postanowiłem utworzyć plik README w repozytorium GitHub, zawierający informacje o celach biblioteki i krótki przewodnik, jak z niej korzystać.



Pierwsi użytkownicy

Postanowiłem poszukać pierwszych użytkowników na Reddicie . Po znalezieniu kilku odpowiednich społeczności napisałem krótki post zatytułowany „ Otwarta biblioteka C# do obsługi zdarzeń klawiatury/myszy w aplikacjach interfejsu użytkownika systemu Windows ”. Było to trochę stresujące i szczerze mówiąc, nie spodziewałem się żadnych znaczących rezultatów. Jednak, co zaskakujące, opłaciło się. Jeden z postów uzyskał około 14 000 wyświetleń i około 30 komentarzy z pozytywnymi opiniami. To było niesamowite uczucie, którego życzę każdemu: uświadomienie sobie, że czas spędzony nad projektem nie poszedł na marne. Chociaż nie stworzyłem czegoś przełomowego, zrozumiałem, że są ludzie, którzy uważają to za naprawdę przydatne i którzy są gotowi wesprzeć moje wysiłki.


Po zebraniu wszystkich opinii postanowiłem kontynuować rozwój i pozostać w kontakcie z najbardziej zainteresowanymi użytkownikami, którzy zostawili komentarze. Aktywnie się z nimi komunikowałem i słuchałem ich próśb o funkcjonalności, które chcieliby zobaczyć. W ciągu następnego miesiąca wydałem kilka małych aktualizacji, a następnie ponownie skupiłem się na przyciąganiu użytkowników.


Na GitHub istnieje specjalny typ repozytorium o nazwie „awesome” — są to zbiory linków i zasobów skompilowanych na określone tematy, na przykład awesome-dotnet . Moim celem było promowanie mojej biblioteki w każdym z tych repozytoriów. Chociaż nie było to łatwe zadanie — biblioteka z 10-15 gwiazdkami na GitHub nie wzbudza dużego zainteresowania — udało mi się jednak dostać do kilku z nich. Znacznie zwiększyło to ruch użytkowników i zwróciło uwagę na mój projekt.

Wkład społeczności w rozwój

Podczas dalszego rozwoju napotkałem wiele małych zadań, do których czasami brakowało mi chęci i energii, aby je ukończyć. Postanowiłem więc skorzystać z jednej z zalet rozwoju open-source — przyciągania entuzjastów, którzy byli gotowi pomóc w tych zadaniach. Aby to zrobić, zwróciłem się do serwisu Up-for-Grabs , który udostępnia listę repozytoriów open-source z aktywnymi problemami dla tych, którzy chcą się przyczynić. Po dodaniu mojego repozytorium i utworzeniu kilku problemów natychmiast otrzymałem prośby o pomoc.

Po tym, jak moja biblioteka została pobrana ponad tysiąc razy, postanowiłem aktywnie pracować nad dokumentacją. Od pierwszej aktualizacji funkcjonalność biblioteki znacznie wzrosła, a przykłady w pliku README nie były już wystarczające. Ze wszystkich możliwych opcji wybrałem najprostszą i najbardziej dostępną: utworzyłem osobny plik Markdown i szczegółowo opisałem wszystkie klasy oferowane przez bibliotekę. Postanowiłem również napisać mały przewodnik dla zaawansowanych użytkowników, którzy chcą w pełni wykorzystać możliwości biblioteki. Ku mojemu zaskoczeniu skontaktował się ze mną facet, który specjalizuje się w pisaniu dokumentacji technicznej i zaoferował swoją pomoc. Pomógł mi w odpowiednim ustrukturyzowaniu materiału i dokładnym opisaniu wszystkich szczegółów. Z jego pomocą szybko ukończyliśmy to zadanie.

Rozwój oprogramowania open-source to świetna okazja, aby spotkać się i poszerzyć sieć kontaktów z innymi programistami. Do tej pory dziewięć osób z różnych krajów przyczyniło się do biblioteki, w tym ze Stanów Zjednoczonych, Australii, Argentyny, Kanady, Niemiec, Polski i innych. Pomagali w pisaniu funkcjonalności, testów jednostkowych i dokumentacji. Ponadto była to wspaniała wymiana doświadczeń i przyjemna komunikacja. Być może z niektórymi z współpracowników możemy wspólnie rozpocząć nowy projekt.

Pomimo pracy i innych zobowiązań chcę kontynuować rozwój i wydać pełną wersję z funkcjami, które moim zdaniem powinny znaleźć się w bibliotece. Moje plany na przyszłość obejmują uczynienie jej wieloplatformową i oddzielenie jej od konkretnych ram UI.

Wniosek

Podsumowując, chciałbym podsumować wszystko, co powiedziałem. Nigdy nie bój się próbować czegoś nowego i nie stój w miejscu. Jeśli naprawdę kochasz programowanie i chcesz rozwijać się jako programista, staraj się stworzyć coś własnego — czy to będzie mała biblioteka, czy usługa. Nigdy nie wiesz, dokąd to może zaprowadzić. Podczas rozwoju tej biblioteki odnalazłem radość nie tylko w programowaniu, ale także w poznawaniu ludzi i nawiązywaniu nowych kontaktów. Planuję nadal angażować się w rozwój oprogramowania open-source, nie tylko poprzez rozwijanie własnych projektów, ale także poprzez wkład w biblioteki społecznościowe — to również wspaniałe doświadczenie.


Dla tych, którzy chcą rozpocząć przygodę z tworzeniem oprogramowania typu open source, polecam ten przewodnik !


Jeśli podobał Ci się ten wpis, będę wdzięczny, jeśli wesprzesz bibliotekę gwiazdką na GitHub!


LinkedIn / GitHub