Ostatnio od jednego z czytelników bloga otrzymałem takiego maila:
Witam.
Trochę dziwny temat no ale - jeśli masz odrobinę czasu to napisz kilka słów.
Jestem studentem informatyki i całkiem przypadkiem trafiłem na twoja stronę. Ciekawi mnie jak zacząć być prawdziwym programistą - widzę że masz już nie małe doświadczenie. Interesuje mnie to jak zaczynałeś, obecnie na pracuj.pl jest sporo ofert pracy dla programistów ale spore wymagania mają, jak z angielskim i w ogóle. Dążę do tego aby zostać programistą jednak mam cały czas pod górkę. Uczyłem się C, C++ i teraz zaczynam C#. Ciekaw jestem jak ty zaczynałeś swoja karierę.
Pozdrawiam.
Przyznam, że swego czasu sam miałem podobne rozterki. Jak zacząć, na czym się skupić, co robić? Pozwolę sobie zatem podejrzewać, że jest więcej takich osób. Dlatego też postanowiłem napisać tego posta i poniżej zamieszczam moją odpowiedź.
Witam,
Jeżeli chodzi o jakieś porady i to jak zaczynałem... Przez pierwsze 2 lata studiow za bardzo nie wiedzialem czym bede sie zajmowal w przyszlosci, co bym chcial robic na 100%, w jaką technologię zainwestowac. I tak naprawde te 2 lata byly wlasciwie stracone. Jezeli masz juz jakis ogląd na C, C++ i C# to radze zdecydowac sie jak najszybciej co ci sie najbardziej podoba i zajac sie tylko tym. Oczywiscie polecam C# i .NET jako calosc:) ale to kwestia gustu. Na 3 roku zaczalem zabawe z .NET i wiedzialem ze to jest to. Od tamtej pory codziennie uczylem sie czegos nowego olewajac troche studia i przedmioty w stylu kryptografia, grafika, algorytmy czy tym podobne pierdoly. Wybrac jedną dziedzinę i w niej sie specjalizowac - to moim zdaniem klucz do sukcesu. Wszystkiego innego mozna nauczyc sie pozniej, w miare potrzeby, nie ma sensu od razu zasmiecac sobie glowy cała masą zagadnien ktore i tak sie zapomni.
Jak dla mnie takie niezbedne dziedziny na ktorych po prostu trzeba sie znac (wybierajac oczywiscie kierunek - development):
1) teoria programowania obiektowego na poziomie mistrzowskim (dziedziczenie, polimorfizm, enkapsulacja - trzeba rozumiec co to wszystko znaczy, kiedy uzyc metody wirtualnej, kiedy stworzyc pole statyczne, kiedy zastosowac bazową klasę abstrakcyjną a kiedy interfejs itd... to wszystko przychodzi samo po dluzszym czasie, wiec trzeba byc cierpliwym)
2) jedna technologia/jezyk programowania na poziomie mistrzowskim
3) wiekszosc zagadnien zwiazanych z ta technologia na poziomie sredno-zaawansowanym, czyli takim zeby wiedziec o co tam chodzi i móc o tym porozmawiac (w kontekscie .NET: jesli postanowisz byc specem od aplikacji okienkowych to musisz znac doskonale Windows Forms i WPF, ale wypada rowniez wiedziec co nieco o ASP.NET czy programowaniu urzadzen mobilnych)
4) bazy danych - moim zdaniem programista aplikacji nie musi byc mistrzem optymalizacji serwera, ale od SQL, tworzenia tabel, procedur skladowanych itd nie ma ucieczki
5) język angielski - czytanie artykulow czy dokumentacji po angielsku nie moze sprawiac zadnych trudnosci, a jesli sprawia to trzeba sie douczyc
Do tego z czasem nalezy zainteresowac sie takimi zagadnieniami jak wzorce projektowe i najlepsze praktyki w tworzeniu oprogramowania. Wypada tez chociaz zapoznac sie z zalozeniami calkowicie odmiennych podejsc do tego tematu, wiec oprocz programowania obiektowego zorientowac sie dla przykladu co to programowanie funkcyjne albo na czym polega programowanie zorientowane aspektowo.
No i na koniec - jak to wszystko zrobic? Mam jedną radę i nikt mnie nie przekona ze jest lepszy sposob: przez udzial w prawdziwych projektach. Mozna samemu dlubac cos w domu, ale na dłuższą metę nie ma to sensu.
Ja od 3 roku przez lata prawie nieustannie bralem udzial w konkursach, projektach prowadzonych przez MS itd - robilem to za darmo i nie zaluje, bo nauka w prawdziwych warunkach jest najcenniejsza. Jest oczywiscie inna droga (teraz mysle ze moze nawet lepsza): zatrudnic sie gdzies jako poczatkujacy programista, im wczesniej tym lepiej. Wtedy oprocz doswiadczenia dostaje sie takze pieniadze (na poczatku na pewno niewielkie i trzeba sobie z tego zdawac sprawe - okres studiow jest do nauki a nie trzepania kasy). Najpierw praktyki (nawet darmowe) a potem praca w miare mozliwosci tak, aby pogodzic to ze studiami, np na pol etatu. Z tego co sie orientuje to pracy jest masa dla kazdego, nawet poczatkujacych. Wystarczy ze potrafisz napisac podstawowy programik w C# i moim zdaniem spokojnie mozesz wysylac CV.
Dodatkowo, jeśli postawisz na .NET, to nie powinno być dnia w którym nie zajrzysz na www.codeguru.pl, tamtejsze artykuly i forum to prawdziwa skarbnica wiedzy. Warto tez od czasu do czasu poczytac MSDN Magazine, przejrzec blogi najbardziej uznanych programistow, posluchac podcastow z www.dotnetrocks.com czy obejrzec cos na www.dnrtv.com. Dodatkowo zaangażowac się w dzialalnosc lokalnej grupy .NET (akademickiej, o ile taka istnieje na uczelni, bądź profesjonalnej, oczywiscie równiez jesli takowa istnieje w miescie). Generalnie - nieustannie sie rozwijac, codziennie uczyc sie czegos nowego. Nie tylko w pracy czy na studiach, ale tez w czasie wolnym (na ktorego brak trzeba sie przygotowac, szczegolnie w poczatkowej fazie poznawania tego wszystkiego).
Jedyne co moge jeszcze napisac: trzeba zakasac rękawy i do roboty bo to jest naprawde zajebista sprawa:). A jak sie odnajdzie w sobie prawdziwą pasje do tego to wszyscy inni mogą tylko pozazdroscic.
Życzę zatem powodzenia,
Maciej Aniserowicz
Autor pierwszego maila był odpowiedzią usatysfakcjonowany - mam nadzieję że ktoś jeszcze na tym skorzysta:).
[06/11/2008] Edit: Zamieściłem post o podobnej tematyce, zapraszam tutaj: Zawód - programista. Nadzieje.