Mój pierwszy wkład typu open source dotyczył biblioteki, z której wcześniej korzystałem (i bez której byłbym bardzo cierpiał) przy poprzednim opłaconym projekcie. Podczas pierwszego użycia zauważyłem błąd w kodzie, więc utworzyłem łatkę, dołączyłem do projektu i przesłałem ją do przeglądu.
Około 8 miesięcy później, kiedy miałem trochę wolnego czasu, zdecydowałem, że oddam (i popracuję nad umiejętnościami programistycznymi), wnosząc większy wkład w projekt. Sklonowałem repozytorium i zacząłem zapoznawać się z bazą kodów. Po kilku tygodniach przesyłania drobnych poprawek do bazy kodu i monitorowania żądań funkcji, podniosłem prośbę o funkcję, aby dodać całkiem znaczący moduł do projektu.
Ponieważ generowanie wielu indywidualnych poprawek jest dość żmudne dla jakiegokolwiek znaczącego rozwoju, sklonowałem repozytorium do gałęzi w git hub i zacząłem wycinać kod. Kilka tygodni i kilka tysięcy linii kodu później kierownik projektu i ja pracowaliśmy poprzez integrację i testowanie moich poprawek w bibliotece w sposób, który działał spójnie z resztą bazy kodu.
Był to nieoceniony proces, którego wiele się nauczyłem:
- Kiedy zaczynałem, nie wiedziałem, jak korzystać z Git, do końca mogłem biegle tworzyć zdalne gałęzie śledzące i łączyć je lub bazować na gałęzi głównej bez przerywania potu.
- Zacząłem w VS 2008 i zakończyłem migrację do Linuksa i Monodevelop, aby pracować nad pisaniem kodu (ponieważ VS jest opóźniony w standardzie Unicode, a zakończenia linii to taki problem w git). Okazuje się, że w * nix niewiele można zrobić, co można zrobić w * dows.
- Nigdy wcześniej nie przeprowadzałem żadnych testów jednostkowych, Nunit to bułka z masłem, a pisanie testów jednostkowych jest dość elementarne.
- Musiałem nauczyć się połykać język i słuchać, a także ćwiczyć cierpliwość. Nie ma sensu umacniać swojej pozycji w projekcie open source, ponieważ każdy zaangażowany ma wiedzę (prawdopodobnie więcej niż ty) i jest w stanie zaakceptować / odrzucić twoje pomysły na podstawie braku dostarczenia substancji. To jednocześnie niezwykle upokarzające i satysfakcjonujące.
- Samo spojrzenie jednego wykwalifikowanego programisty na dużą bazę mojego kodu zwróciło uwagę na wady w moim stylu, których nigdy wcześniej nie brałem pod uwagę (a także na błędy w jego kodzie). Dla mnie nauczyłem się, że łatwiej / lepiej jest definiować stałe, niż używać wiązki magicznych liczb ze szczegółowymi komentarzami.
Ten konkretny projekt opierał się na generowaniu i dekodowaniu pakietów sieciowych na wszystkich poziomach protokołów sieciowych. Osobiście interesuję się sieciami niższego poziomu, więc wspaniale było rozmawiać z innym programistą o wspólnych zainteresowaniach i wiedzy w tej dziedzinie.
Jeśli chcesz po prostu zmoczyć stopy: znajdź projekt, z którego już korzystasz; sklonuj repozytorium; i zacznij sprawdzać, czy możesz naprawić niektóre błędy i / lub dodać testy jednostkowe. Patrzenie na czyjąś bazę kodów wydaje się przerażające, ale jest to niezwykle cenna umiejętność do nauczenia się. Prześlij kilka poprawek. Możesz oczekiwać, że Twój kod zostanie najpierw dokładnie zbadany. Nie przejmuj się, to normalna część procesu zdobywania zaufania administratorów projektu.
Po ustanowieniu bazy merytorycznej z projektami administratorzy zaczynają szukać więcej obowiązków, takich jak proponowanie nowych funkcji lub prośba o przydzielenie ich do realizacji żądań funkcji.
Jeśli nie możesz znaleźć już istniejącego projektu w jednej z głównych sieci repozytorium open source (github, sourceforge, kod Google), pomyśl o aplikacji, której naprawdę chciałbyś użyć, która jeszcze nie istnieje i uruchom własną.
Przygotuj się na upokorzenie i oczekuj, że praca zostanie odrzucona na rzecz dalszych zmian. Mit, że każdy może dodać kod do projektu open source, jest całkowicie fałszywy. Zawsze jest między tobą strażnik i dostęp push. Im lepszy kod, tym mniej będzie on analizowany na dłuższą metę, gdy zdobędziesz zaufanie administratorów projektu. Jeśli to twój projekt, będziesz strażnikiem.
Aktualizacja:
Właśnie się nad tym zastanowiłem i zdałem sobie sprawę, że nie zawracałem sobie głowy wspominaniem, do którego projektu odnosi się większość mojej odpowiedzi. Dla tych, którzy chcą wiedzieć, jest to SharpPcap . Główny programista Chris Morgan jest bardzo profesjonalny i rzeczowy. Wykonuje kawał dobrej roboty zarządzając projektem i nauczył mnie wiele o tym, czego potrzeba, aby dojrzeć projekt OSS.
Ze względu na osobiste ograniczenia czasowe nie byłem w stanie wnieść kodu od ponad roku, ale nadal staram się oddawać, czając się na przepełnieniu stosu i od czasu do czasu odpowiadając na pytania dotyczące SharpPcap.