28 lutego 2012

Zostać lepszym programistą

Stagnacja


Od dłuższego czasu chodziła mi po głowie kwestia mojego rozwoju zawodowego (nie mylić z ścieżką kariery, chodzi o zawód "programista"). Ciągła nauka nowych/starych technologii nie przynosiła oczekiwanych rezultatów. W końcu uczenie się właściwości produktu, konfiguracji plików XML'owych, nowego API ect. nie niesie ze sobą jakiegoś szczególnego wyzwania dla ludzkiego umysłu (poza zapamiętaniem i zrozumieniem tego).

W poprzednim roku w celu przebudzenia się ze stagnacji rozpocząłem krucjatę technologiczną. Zacząłem prowadzić bloga, założyłem dwa projekty na codeplex'ie, uaktywniłem się na kilku forach technologicznych. Zauważyłem pewną poprawę, ale bez rewelacji. W "pracy" płacą człowiekowi za to, że wie jaką metodę której klasy wywołać z której przestrzeni nazw, z której wersji CLR'a aby w jednej linijce kodu sciągnąć plik z FTP'a. Mniejsza o to, czy rozumie się stos TCP/IP, ważne, że nie rzuca wyjątkiem. W tym roku stwierdziłem, że to za mało. Trzeba trochę inaczej podejść do problemu rozwoju swojego rzemiosła. Ponieważ łatwo się zniechęcam i rezygnuje z podjętych pomysłów, zacząłem od czegoś prostego.


Podglądanie


Przeglądanie cudzego kodu może być bardzo ciekawym i produktywnym zajęciem. Wybrałem sobie kilka projektów Open-Source i w każdy wtorek staram się poświęcić 45 minut na analizę kodu źródłowego. Szukam klas, które implementują interesujące rozwiązania (np. implementacja indeksu przy pomocy zrównoważonego drzewa), używają bibliotek których nie znałem, organizują kod w ciekawy sposóbu itd. Ogólnie 'sky is the limit'. Poniżej przykładowe projektu, które przykuły moją uwagę (podaje to dla osób, który tak jak ja, cierpią na brak własnych pomysłów i lubią robić to co robią inni ludzie).


Poszerzamy horyzonty


Większość mądrzejszych ode mnie ludzi zaleca naukę nowych języków programowaia, na pewno mają rację. Ja jednak nadal mam problemy z moim podstawowym dialektem czyli z C#-pem. Wybrałem najlepszą książkę o C# i CLR na rynku CLR via C#, 3rd Edition i zagłębiłem się w czytanie. Jeffrey Ritchter to mój bohater, wie jak człowieka przeprowadzić przez meandry .NET'u (np. w końcu zrozumiałem co znaczy magiczne słowo "Encoding"). Inne lektury w mojej kolejce to Foundations of Programming (pdf), Code Complete oraz Algorithmics: The Spirit of Computing.Wszystko po to, żeby odbudować podstawy wiedzy w mojej głowie.  A tutaj kilka punktów od mojego guru Ayende na temat tego czego warto się uczyć

TCP / UDP – how do they actually work.
HTTP – and implications (for example, state management).
The Fallacies of Distributed Computing.
Disk based storage – efficiently working with it, how file system works.
Memory management in OS and your environment.
Czyli nie tylko algorytmy, technologie, ale wnętrze, bebechy, czyli wszystko to co nowoczesne API stara się przed nami ukryć.

Selekcja blogsfery


Zacząłem też weryfikować to co czytam, porzuciłem na moment blogi technologiczne. Oczywiście, nie zamierzałem odciąć się całkowicie od mojej ulubionej platformy .NET. Raczej szukałem bardziej ogólnych informacji, które nie ulegają przedawnieniu wraz z nową wersją Entity Framework'a. Szukając ludzi, którzy nie piszą How To'sów, natknąłem się na kilka inspirujących (przynajmniej dla mnie) blogów.

Poza tym forum na który jest mega-dużo ciekawych dyskusji na temat programowania i dylematów programistów jest http://programmers.stackexchange.com/ (co tydzień dostaje newsletter z najciekawszymi wątkami). Na pewno jest dużo więcej ciekawych miejsc, gdzie można szukać ludzi mądrzejszych od siebie i dzielących się chętnie tą wiedzą.

Regularne ćwiczenia


Czytanie książek, przeglądanie kodu to jedno, ale, żeby zostać programistą "wylaszczonym" trzeba trochę kodować. Z braku czasu wybrałem krótkie ćwiczenia programistyczne, które sobie zapisuje i później je w ciągu tygodnia rozwiązuje. Do notowania pomysłów bardzo lubię stronkę Remember the Milk, na której zapisuje sobie te pomysły. Oto kilka z nich: 

  • Napisać bibliotekę, która będzie sprawdzać reguły gry w szachy
  • Program rozwiązujący problem Tower of Hanoi
  • Od Ayende 'Phone Book' jako baza danych 
  • Zaimplementować load balaner'a przy użyciu singleton'a i algorytmu Round-Robin 

Dla bardziej wymagających jest topcoder.com, dla rozrywkowych i mieszkających w Krakowie http://coderetreat.sckrk.com/

Podsumowanie


Opcji jest wiele, czasu mało, więc od dzisiaj trzeba się brać do roboty, a jak dalej nie ma motywacji, to zachęcam do przejrzenia Programmer Competency Matrix i zweryfikowania siebie z tą nieubłaganą tabelką. Wróżka ci powie czy jesteś log(n) czy bardziej n, a może n^2?

Hope this helps.

1 komentarz:

  1. No to na pewno polecam też z polskich portali/forów www.codeguru.pl oraz z blogerów Maćka Aniserowicza (www.maciejaniserowicz.com)

    OdpowiedzUsuń

Uwaga: tylko uczestnik tego bloga może przesyłać komentarze.