Programowanie zespołowe na wakacje

Picture taken from yugioh.wikia.com, where it was published under the terms of the CC-BY-SA license.

tl;dr: Szukam niezaawansowanych informatyków zainteresowanych zdobywaniem doświadczenia, chętnych do dobrowolnego programowania w prowadzonym przeze mnie zespole w trakcie wakacji, oferując ze swojej strony potrzebne szkolenia i szeroko pojętą pomoc.

UPDATE: Zainteresowanie projektem okazało się większe, niż się spodziewałem; w ciągu kilka dni udało się skompletować całkiem rozsądną 7-osobową ekipę. Ze względu na moje ograniczone możliwości, nie jestem w stanie przyjąć więcej osób.

Wysoka temperatura, koniec sesji, przesilenie letnie, różne są oznaki nadchodzących wakacji. Dla mnie wakacje to przede wszystkim spora ilość czasu wolnego. Mam w zwyczaju poświęcać ten czas nie tylko na coroczny wypoczynek, ale też by we własnym zakresie poszerzać umiejętności, zgodnie z zainteresowaniami.

W praktyce oznacza to, że w wakacje dużo programuję dla własnej przyjemności. Czasem są to rzeczy pożyteczne światu, czasem jest to eksperymentowanie z różnymi technologiami; czasami piszę samotnie, czasami w zespole. W każdym przypadku wiąże się to ze zdobywaniem doświadczenia.

Na nadchodzące wakacje mam osobliwy plan: otóż chciałbym podzielić się z innymi tym doświadczeniem, pokazać chętnym jak wygląda tworzenie programu znacznie większego niż zadanka na OI czy też pracownie na studiach. Jak miało by to w ogóle wyglądać?

  1. Dobieram zespół niekoniecznie zaawansowanych programistów.
  2. Jestem w stanie nauczyć członków zespołu korzystania z narzędzi umożliwiających pracę w zespole oraz pozostałych, których będziemy używać.
  3. Posiadam bardzo konkretny pomysł na aplikację, którą można się zająć (szczegóły poniżej). Jednak zaprojektowanie implementacji jest kwestią do opracowania w zespole.
  4. Oferuję własną pomoc/nadzór/doświadczenie w kwestiach projektowania programu, implementacji, korzystania z narzędzi, komunikacji w zespole i organizacji pracy. (Ci, którzy mają ze mną kontakt, raczej znają moją cierpliwość.)
  5. W zamian liczę na aktywny udział w rozwoju aplikacji, ale chyba jest to nie tylko w moim interesie, jako że aktywny udział oznacza wyrabianie doświadczenia.

Zatem jeżeli jesteś programistą zainteresowanym zasmakowania pracy w zespole, i jesteś w stanie poświęcać nieco swojego wakacyjnego czasu by powkręcać się w projekt – to prawdopodobnie właśnie do Ciebie kieruję ten post.

Projekt i tak ze swojej natury będzie publiczny, i wkład każdego zainteresowanego będzie mile widziany. Zamierzam jednak wybrać garstkę szczęśliwców, których poprowadzę za rękę przez proces tworzenia oprogramowania, i zadbam, by dostali wszelką pomoc potrzebną do wydajnej pracy. W grę wchodzą spotkania całego lub części zespołu (Wrocław), a także komunikacja zdalna poprzez środki internetu.

Zastrzegam sobie prawo do selekcjonowania kandydatów wobec mojego subiektywnego widzimisię. Jeżeli mam dla kogoś poświęcać własny czas wolny i energię, by dla jego dobra nauczyć go różnych narzędzi i technik, to uważam, że mam prawo odrzucić tych, o których wiem, że nie będą mnie słuchać, albo że ich wkład będzie niekonstruktywny.

Co tak właściwie będziemy pisać?

Krótko mówiąc: silnik obsługi skomplikowanej gry karcianej, najprawdopodobniej z obsługą rozgrywki przez sieć.

A tak dokładniej, to mówię o “Yu-Gi-Oh! Trading Card Game“. Jest to gra oparta na kartach kolekcjonerskich, kładąca bardzo duży nacisk na zdolności strategiczne graczy. Jeżeli nazwa kojarzy się wam z nie-najwyższych-lotów mangą/anime o podobnej nazwie, to słusznie, jako że gra karciana luźno nawiązuje do tejże marki, aczkolwiek poziom inteligencji potrzebny do prowadzenia sensownych rozgrywek jest nieporównywalnie wyższy od tego, którego wymaga od odbiorcy manga/anime.

Oczywiście, nasze dzieło będzie zaledwie inspirowane tą grą. Jednak: będzie inspirowane możliwie najmocniej.Picture taken from yugioh.wikia.com, where it was published under the terms of CC-BY-SA license.

Nie umiem w to grać!

Spokojnie. Staranne szkolenie z reguł i technik rozgrywki przewiduję jako jedna z tych rzeczy, których chętnie nauczę.

Przecież implementacje tej gry już istnieją.

No tak, istnieją. Ale 95% jest na GameBoy-a. Na peceta jest nieduży wybór, z czego tylko oficjalne produkty KONAMI (swoją drogą – niestety kiepskie) potrafią tę grę sensownie obsłużyć, wszystkie alternatywne programy może i oferują piękny system rankingu w grze poprzez sieć, ale nie respektują reguł gry, tj. gracze sami pilnują, by dobrać karty w odpowiednim momencie i kłaść je zgodnie z tym co jest na nich napisane… w każdej chwili mogą rzucić wszystkie karty na stół, albo podglądać jak jest potasowana talia, i silnik gry w żaden sposób nie zareaguje. Same wygrane rozpoznawane są tylko na zasadzie “gracze umówili się, kto wygrał”.

Moim celem byłoby zrobić coś, co częściowo – możliwie bardzo – kontroluje te reguły.

Co muszę potrafić, by nadawać się do zespołu?

Konieczne jest jakieś doświadczenie w programowaniu obiektowym. Nie trzeba mieć zdolności architekta implementacji, ale jeżeli nie umiesz używać klas, albo nie wiesz czym jest metoda, to możesz mieć kłopoty nadążyć za resztą zespołu.

Spora część programu będzie pisana w C++, przez co znajomość tego języka jest konieczna. Znów: nie chodzi o bycie ekspertem, wystarczy wprawa i sprawność w posługiwaniu się konstrukcjami z tego języka.

Dobrze jest znać język angielski. Przyda się nie tylko to rozumienia reguł gry/kart, ale też do pisania kodu, w którym pewne kawałki, w tym przede wszystkim dokumentacja, powinny być w języku rozumianym przez większy kawałek wszechświata, niż sama Polska.

Mile widziana, acz zdecydowanie niekonieczna, jest umiejętność pisania w Pythonie.

Przyda się też znajomość systemu linuksowego (na poziomie użytkownika). Większość porządnych narzędzi programistycznych jest tam zdecydowanie mniej uporczywa niż na Windowsie; do tego, jako że moje umiejętności Windowsowe są niespore, nie mogę zagwarantować, że będę w stanie nauczyć instalacji wszystkich bibliotek pod windą.

Znajomość samej gry “Yu-Gi-Oh!” też może się przysłużyć, ale również nie wymagam jej od nikogo.

Picture taken from yugioh.wikia.com, where it was published under the terms of the CC-BY-SA license.Wyjeżdżam w wakacje. Czy to dyskwalifikuje mnie z udziału w zabawie?

To zależy. Nie wymagam od nikogo by cały czas siedzieli w domu, nie wymagam od nikogo, by poświęcili wszystko na rzecz projektu. Z drugiej strony, jeżeli planujesz trzymiesięczny wyjazd, to niewiele wyjdzie z programowania.

Wydaje mi się, że w tej kwestii należy zachować zdrowy rozsądek. Im dłuższy wyjazd, tym więcej trzeba po nim “nadrobić” by nadgonić resztę zespołu. Jednak warto pamiętać, że to nie jest profesjonalny projekt o wysokiej wadze, wszystko będzie się rozwijać raczej powoli, więc przez tydzień czy dwa nie zadzieje się aż tyle, by się pogubić.

Sam planuję wyjazdy tygodniowy i dwutygodniowy, i jestem przekonany, że nic w efekcie nie stracę.

W końcu wakacje są od wyjeżdżania i odpoczywania, a nie od programowania, nie?

No dobra. Żartowałem.

Jak dużo czasu pochłonie mi praca nad projektem?

Tyle, ile go w tym celu poświęcisz. Jednego dnia można pracować 12h, drugiego nic. To jest projekt dobrowolny, nikt od nikogo nie wymaga pakowania ileś czasu. Jedyny czynnik to to, że im więcej się tego czasu poświęci, tym więcej się zyska dla siebie – zdobywanie doświadczenia. W praktyce dobrze jest pracować systematycznie, by być na bieżąco ze wszystkim co się aktualnie dzieje. Osobiście zamierzam pakować w projekt jakieś 2h dziennie… ale znając mnie, to wyjdzie więcej :)

Mieszkam w XYZ. Zamierzamy się spotykać, czy mogę wszystko robić zdalnie?

Zdecydowanie zamierzamy się spotykać. Najwydajniejszym sposobem nauki, jaki planuję stosować, jest pokazanie wszystkiego wprost, przy kontakcie z człowiekiem. Wszelkie planowanie jakie będziemy realizować niby da się organizować przez sieć, ale jednak prawdziwa burza mózgów jest tysiąckroć wydajniejsza.

Ze względu na powyższe, możliwość okazyjnego spotkania się z zespołem jest istotnym wymogiem wobec zainteresowanych. Przypominam: Wrocław.

Jakich technologii będziemy używać?

C++ (aplikacje oraz własne biblioteki), bzr1 (+ Launchpad), autotools, python, oraz z dużym prawdopodobieństwem pygtk lub Allegro. Lista może urosnąć, jeżeli wspólnie postanowimy coś dodać.Picture taken from yugioh.wikia.com, where it was published under the terms of the CC-BY-SA license.

Czy dostanę z tego jakieś pieniądze?

Nie.

Czy mogę korzystać ze szkoleń, ale nie udzielać się w projekcie / tylko przyglądać się rozwojowi?

Nie. Interesują mnie tylko ludzie, którzy mogą – i chcą – wnieść konstruktywny wkład w rozwój programu.

Nie znamy się. Czy mimo to mógłbym jakoś wziąć udział?
Nie jestem studentem informatyki, nadaję się do zespołu?

Jak najbardziej! Nie ograniczam zaproszenia ani do znajomych, ani do konkretnych studentów.

Znajomi/studenci informatyki mają jednak plusa w postaci: wiem czego się po nich spodziewać. W obu powyższych przypadkach będę po prostu potrzebował się więcej od zainteresowanego dowiedzieć, by rzetelnie ocenić, czy nada się do pracy.

W tym miejscu mogą pojawić się dalsze informacje, jeżeli uznam za stosowne dodanie czegoś jeszcze, to tu się to pojawi.

Super, jestem zainteresowany!
Nie jestem jeszcze pewien; mam kilka pytań; chcę się skonsultować.

Zapraszam do kontaktu ze mną w obu przypadkach.

Mój adres mailowy: rafalcieslak256 <małpa> ubuntu <kropka> com

Mój numer g-g: 9872033+2864692.


1) Nie szukam ludzi, których powołaniem jest nawracać ludzi na git-a2.
2) – Jak rozpoznać kto używa git-a, podczas pracy na jakimkolwiek innym systemie kontroli wersji? – Nie trzeba, sami ci o tym powiedzą.

About these ads

7 Responses to “Programowanie zespołowe na wakacje”

  1. Rafał Łasocha (@swistak35) Says:

    Mam co robić na wakacje, ale powodzenia, bo w karciankę grałem i jest całkiem fajna. : ) Projekt będzie open-source?

    • Rafał Cieślak Says:

      Nie widzę innej opcji niż open-source, aczkolwiek wolałbym free-software. To będzie do ustalenia, gdy znajdzie się ekipa chętnych. Trudno będzie mnie przekonać do czegokolwiek poza GNU GPL, ale nie jest to niemożliwe.
      Natomiast jako że zdecydowałem się na wybór Launchpada jako usługę najbardziej odpowiednią dla takiego projektu, to by nie płacić 750$/miesiąc, musimy być “jakoś” open-source :P

      • Rafał Łasocha (@swistak35) Says:

        To fajnie. Zrobię forka, z postaciami w stylu “Unix-bearded hacker”

      • Marqin Says:

        Hey! Świetny pomysł! (ale też mam dużo roboty przez wakacje jak Świstak)
        A tak właściwie, to czemu chcecie używać zarówno C++ jak i Pythona, zamiast pisać w jednym?

      • Rafał Cieślak Says:

        Wstępne pomysły proponowały, by bibliotekę z silnikiem gry pisać mega elegancko w C++, a klienta i GUI robić w pythonie, bo wygodnie.
        Inna rzecz, gdzie się python może przydać, to kto wie, czy nie skończy się na tym, że każda karta posiada mały skrypt w pythonie realizujący jej logikę.
        Niemniej, wszystko wciąż jest do ustalenia, i dokładne decyzje podejmie się, jak już będzie wiadomo z kim pracujemy.

      • Marqin Says:

        No i pewnie networking byście w Pythonie “pokręcili”, zamiast się babrać z Boost.Asio? :D

      • Rafał Cieślak Says:

        Choć jestem fanem “poskręcanej macierzy”, to pomysły jakie na razie miałem zakładały raczej zabawę z Boost.Python i realizację wszystkiego co synchroniczne po stronie biblioteki z C++. Dalej: to tylko pomysły, zobaczymy co wyewoluuje.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: