25 listopada 2011

Dlaczego warto zostać programistą?


Początkowo ten artykuł miał być czymś w rodzaju listy, która miała przedstawiać atuty tego zawodu względem innych. Od jakiegoś czasu, gdy przyszło mi coś do głowy, starałem się notować sobie "plusy pracy w tym zawodzie".

Lista ta nie zawierała kilkudziesięciu pozycji, raczej kilka-kilkanaście. Podczas przygotowywania tej notki, czytając te punkty nie czułem jednak by to one przekonały mnie niegdyś do ukierunkowania swojej przyszłości.

Teraz wiem, że sprzyjające okoliczności przyczyniły się do tego, że obecnie typowy przedstawiciel tego zawodu nie za bardzo musi się obawiać o pracę. Jeżeli mamy szczęście, nasz pracodawca również może być informatykiem lub ściślej - programistą. To ważne, bo gdy tak się dzieje, on rozumie nasze potrzeby. Często więc np. zdaje on sobie sprawę, że jego pracownicy pracują najwydajniej o różnych porach dnia, tak więc nie zawsze musimy stawiać się w biurze punkt dziewiąta ;) Zdarza się też nie rzadko, że ów pracodawca w pełni jest w stanie zrozumieć, że np. pewne czynności możemy danego dnia zrobić zdalnie, z domu.

Kiedyś było inaczej, programistów postrzegano nierzadko jako wynaturzonych dziwaków. Społeczeństwo jeszcze 20-30 lat temu nie rozumiało, jak można całymi dniami siedzieć przed monitorem a to wszystko tylko po to by stukać w plastikową klawiaturę drukując na ekranie znaczki, które tworzyły jakiś "nudny kod"... W dzisiejszych czasach chyba każdemu z nas zdarzyło się choć raz zatracić w komputerowym/wirtualny/internetowym świecie. To co osiągnęła ludzkość w dziedzinie informatyki jest efektem pracy ale i przede wszystkim wizji osób, które uwierzyły, że to będzie możliwe, już dekady temu.

Obecnie programista postrzegany jest zgoła odmiennie. Nierzadko postrzegany jest on już jako ktoś szczególny. Filmów, gdzie programista jest głównym bohaterem też powstało ostatnio nie mało: Matrix (I, II, III), Kod Dostępu, The Social Network, Szklana Pułapka 4, Tron - Legacy. Gdyby wliczać filmy o tematyce około komputerowej, to lista jeszcze bardziej by się wydłużyła m.in. o Eagle Eye, Wroga publicznego, I Robot, Transformers (I, II, III), itd. Z resztą po co wymieniać? Istnieje cały spis owych filmów na Wikipedii(List_of_films_about_computers).

Komputery stały się popularne. Widzimy, że odgrywają one ogromną role w naszym życiu. Zaskakujące jest to, że to co jeszcze do nie dawna było dla nas gadżeciarskim Science Fiction, obecnie często przybiera realną formę. Wydawanie komend głosowych komputerowi w naturalnym języku, jeszcze 5 lat temu było zupełnie nieprawdopodobne, dzisiaj produkt to oferujący, jako swoją główną zaletę podaje właśnie to. Oglądając nie jeden nowoczesny film podziwialiśmy, samosterujące się auta. A prawda jest też taka, że one już jeżdżą po niektórych ulicach USA (jeszcze w fazie testów, co nie zmienia faktu, że już jeżdżą!)

Co to ma do programowania? A to, że bez programistów żaden z tych tworów by nie powstał. Co ciekawe, ludzie zaczynają nawet sami to rozumieć, jaka ważna jest ich rola, oraz to, że maczaliśmy palce w aucie którym dojeżdżasz do pracy, urządzeniu z pomocą którego kupujesz bilet autobusowy, w Twoim telefonie, nowej plaźmie ze ściany, robocie kuchennym, budziku, radiu, odtwarzaczu muzyki a nawet w Twojej szczoteczce do zębów. To są tylko urządzenia w których "żyją" programy napisane przez programistów. A gdyby zastanowić się co nie powstałoby, gdyby nie została oprogramowana ta czy inna taśma produkcyjna, to wychodzi na to, że w domu nie mielibyśmy prawie niczego :)

Czy zatem programistą warto zostać dlatego, że być może będzie miało się okazje oprogramowywać ekspres do kawy? Nie, a przynajmniej mną nigdy to nie kierowało ;)

Od małego dziecka lubiłem komputery, jednak pierwszy swój program napisałem dopiero w pierwszej klasie liceum. I wiecie co wtedy poczułem? Moc!

Okazało się, że oto odkryła się przede mną możliwość wymyślania rzeczy,  szczegółowego projektowania a następnie ostatecznego ich tworzenia! Jeżeli kiedyś bawiłeś się Lego, to na pewna znasz tu uczucie satysfakcji, gdy kończyłeś budować swoją wymyślną konstrukcję! Była stworzona przez Ciebie klocek po klocku, dzięki czemu była wyrazem Twojej twórczości i oryginalności, była niepowtarzalna i wyjątkowa.... chyba, że....zabrakło Ci kilku klocków.

Chyba każdy, kto bawił się Lego nie zbudował choć jednej wymarzonej konstrukcji, dlatego że liczba jego klocków była ograniczona. A co gdyby mieć klocków więcej lub nawet nieograniczoną ilość?

Jeżeli choć odrobinę się wczułeś, to być może zrozumiałeś to, jak może czuć się programista każdego dnia. On do dyspozycji ma wszystkie klocki w nieograniczonej ilości! On nie ma też problemów, że jakiegoś klocka w ogóle nie posiada. Języki programowania są tak skonstruowane, że brakujące "klocki" zawsze można stworzyć z już istniejących.

Gdy uczyłem się programowania z początku uczyłem się reguł jak "dopasowywać klocki do siebie". Dość szybko przyszła pora na poznanie tajników programowania obiektowego. I to było dla mnie kolejne wielkie wydarzenie. Zrozumiałem, ze od tej pory wszelkie odzwierciedlanie tego co chciałbym stworzyć będzie dla mnie łatwiejsze! Wiecie jakie było moje pierwsze wrażenie gdy poznałem zasadę i cele klas? "Dajcie mi trochę czasu, a napiszę wam drugiego Matrixa!" :)

Teraz wiem, że najpewniej sam mógłbym nie wyrobić się w odpowiedniej liczbie osobogodzin, by skończyć go przed śmiercią ;) Jednak wiem, że na pewno nie byłem sam z myślą, że praktycznie cały świat dałoby się odwzorować wirtualnie. Ktoś przecież musiał wpaść na ten koncept Matrixa!

Szybki komputer, dwa monitory, stały dostęp do internetu, nie rzadko jakiś fajny pakiet socjalny i nie najgorsza pensja...to są tylko przykłady atutów, które mogłyby przekonać nie jedną osobę, że warto wyuczyć się na programistę. Jednakże istnieje nie mały procent osób, które postanowiły kształcić się w tym kierunku nie myśląc o tym... one po prostu kiedyś zaczęły programować i zdały sobie sprawę, że odtąd mogą tworzyć niemalże wszystko, co tylko będą w stanie wystarczająco dokładnie opisać!

22 listopada 2011

Jak przyśpieszyć git'a?

Na pewno sposobów jest wiele, jednak jednym z nich jest regularne odpalanie git gc (garbage collector).

Pamięć jednak jest zawodna, dlatego najlepszym pomysłem jest zautomatyzowanie procesu i ustawienie cyklicznego wywoływania procesu.

Do tego wystarczy pojedynczy wiersz w cronie. Jednakże jeżeli na co dzień uzywamy wielu repozytoriów, tych wpisów musiałoby być w cronie więcej.

By zachować w nim porządek chciałbym zaproponować inne podejście:

Tworzymy sobie plik ~/.gitrepos, do którego wpisujemy ścieżki projektów, które chcemy "utrzymać w czystości"


/media/truecrypt1/workspace/current/project_A/
/media/truecrypt1/workspace/current/project_B/
/media/truecrypt1/workspace/old/project_C/
/media/truecrypt1/workspace/another/project_D/

Potem już tylko crontab -e i wklejamy:

30 2 * * * cat ~/.gitrepos | xargs -I {} git --work-tree={} --git-dir={}.git gc

Taki wpis, codziennie w nocy o 2:30 będzie odpalał git gc dla każdego repozytorium z zapisanych katalogów. Użycie --work-tree oraz --git-dir jest konieczne, dlatego że domyślnie polecenie z crona jest odpalane w katalogu domowym.

PS. jeżeli nie lubisz/nie chcesz używać crona  w tradycyjny/trudniejszy sposób, zainstaluj sobie nakładkę graficzną gnome-schedule (sudo apt-get install gnome-schedule)