parę rzeczy, które warto poznać jeśli zamierzasz pracować jako programista

Powiedzmy, że chcesz zostać programistą i szukać pracy w jakiejś firmie. Co oprócz samego programowania powinieneś poznać, jeśli chodzi o umiejętności techniczne?

(Wiele rzeczy z tego jest uniwersalnych, chociaż nie ukrywam, że piszę głównie pod kątem programisty JavaScript / frontendowca).

  • system wersjonowania plików. Polecam Git, gdyż jest on najpopularniejszy. Duże prawdopodobieństwo, że jak pójdziesz gdzieś do pracy, będą tam korzystać właśnie z Gita. Ponadto: znając Gita będziesz mógł założyć konto na Githubie (portalu dla programistów do trzymania kodu) i poudzielać się w projektach open source.

    Generalnie po co to jest? Cóż, zdarzyło ci się:
    • zepsuć coś w aplikacji, że potem żałowałeś że nie zrobiłeś backupu?
    • robić backup co godzinę i mieć na dysku katalogi w stylu
      Aplikacja_14_01_2015_przedsniadaniem, Aplikacja_14_01_2015_popoludniu, Aplikacja_14_01_2015_wieczorem?
    • że chciałeś poeksperymentować i do tego celu musiałeś przekopiować cały swój projekt w inne miejsce na dysku (żeby nie pracować na oryginale)?

    No więc Git (jak i inne podobne systemy) rozwiązuje te wszystkie problemy i pomaga zarządzać róznymi wersjami plików w projekcie. Pokazuje również wszystkie zmiany jakie naniosłeś od ostatniego tzw. commita (spróbuj komend: git status oraz git diff)

  • testy jednostkowe. Nie mówię, że musisz robić do wszystkiego testy (chociaż niektórzy tak uważają), ale jak się chcesz zatrudnić w jakiejś firmie, powinieneś umieć pisać testy jednostkowe. Uratują ci dupę nieraz (testy pozwalaja na automatyczne testowanie programów, więc ułatwiają lokalizację błędów. Jak nie piszesz testów, łatwiej jest rozje*ać całą aplikację przez jedną błędną linijkę. Testy temu zapobiegają.

    Do testów są gotowe frameworki, np. Jasmine czy Mocha (czasem można połączyć kilka. Np. Mocha + Chai, Karma + Jasmine etc. Nie wszystkie do tego samego służą).

  • automatyzacja, systemy budujące
    dzisiaj nawet strony pisane czysto w HTMLu/CSS i JavaScript nie są "stronkami". Często są to rozbudowane aplikacje, które mają skomplikowane systemy budujące. Systemy te mogą wykonywać różne zadania, np. przekopiowywać pliki, scalać ileś plików w jeden (np. 20 małych skryptów *.js w jeden duży plik all_scripts.js), automatycznie minifikować obrazki, a także sprawdzać poprawność kodu JavaScript etc.

    Dzięki temu nie trzeba tego ręcznie robić po każdym sejwie, tylko jest automatyzacja.

    Narzędziem, które to ułatwia jest np. Grunt. Warto wyrobić sobie nawyk korzystania z niego (albo z konkurencyjnego Gulpa). Jest masę z gotowych tasków do Grunta. Można też pisać własne. To naprawdę bardzo ułatwia pracę.


  • lokalny serwer w miarę możliwości zamiast wgrywania plików na FTP. Internet może paść w każdej chwili, nie mówiąc już o opóźnieniach w sieci czy awariach serwerów. Dlatego lepiej pracować na własnym komputerze i postawić lokalny serwer, niż wgrywać pliki na FTP co chwila. Najprostsza metoda na postawienie serwera to wpisanie w konsolę python -m SimpleHTTPServer (być może będzie potrzeba doinstalować Pythona).

    możesz też skorzystać z NodeJS i z bibliotek Connect czy Express.

  • menedżery pakietów, w tym npm (który jest dla JavaScriptu tym co pip dla Pythona, czy apt-get dla Ubuntu. Ułatwia instalowanie róznych bibliotek). Popularny jest również bower.


  • mockowanie. Często zamiast pracować z prawdziwymi danymi pewne rzeczy się mockuje, tj. tworzy się fałszywe, udawane dane czy treść. Znasz to na pewno (Lorem Ipsum - kto tego nie stosował?), jednak mockowanie to szersze pojęcie niż tylko Lorem Ipsum. Mockować można również dane w obiektach JavaScript (często za pośrednictwem plików JSON), można mockować odpowiedzi serwera. Mockować można jeszcze nie napisane obiekty etc.

    Generalnie mocki pozwalają na pracę na czymś, czego jeszcze nie ma. Więc oszczędzają czas. Nie musisz czekać, aż cała aplikacja zostanie napisana, żeby dopisać pewien moduł. Po prostu piszesz swoje, a mockujesz te dane czy obiekty, których jeszcze nie ma. Potem będzie się to zamieniać.

  • dbanie o jakość kodu. Czyli nie piszemy niechlujnie, niespójnie czy po polsku, tylko trzymamy się jakichś zasad, spójnego nazewnictwa zmiennych, spójnego formatowania etc.
    Polecam książkę "Czysty Kod" Roberta Martina.

    Do automatycznego wymuszania jakości kodu służą tzw. lintery.

  • praca zespołowa i jej elementy.
    Odnośnie pracy z Git:
    rzeczy te możesz również zauważyć choćby na Githubie, a mianowicie:
    - robisz coś na swojej gałęzi w Git
    - pchasz zmiany na serwer
    - dajesz pull requesta (prosisz o to, żeby ktoś dodał twoje zmiany do swojego repozytorium)

    ponadto możliwe, że będziesz przechodził code review, czyli inni programiści będą oceniać twój kod i komentować (bardzo przydatne, tak można uniknąć wielu błędów, bo dwie pary oczu to nie jedna. Szczególnie jeśli dopiero zaczynasz).

    możliwe też, że będziesz korzystać z Issue Trackerów typu JIRA.



  • No i na zakończenie. Ponieważ w tym poście zaledwie liznąłem temat, poniżej daję linki do przydatnych informacji napisanych przez innych blogerów:

    Maciej Aniserowicz - zawód programista (programista .NET, a nie JavaScriptu, ale myślę, że i tak warto poczytać)
    Damian Wielgosik - Jak przyspieszyć proces tworzenia stron? Lista narzędzi, które powinieneś znać

    Komentarze

    1. Bardzo przydatny wpis, wiele interesujących rzeczy można się dowiedzieć. Warto byłoby też wspomnieć jakie uczelnie warto rozważać jeśli chce się nauczyć programowania

      OdpowiedzUsuń
      Odpowiedzi
      1. Programowania można się nauczyć bez studiów. Zresztą informatyka to nie szkoła zawodowa i nie nauczą tam nikogo programować, co najwyżej podrzucą jakieś podstawy. Z drugiej strony na uczelniach pełno jest wiedzy czysto teoretycznej (matematyka itp.), która faktycznie może się przydać, ale raczej zaawansowanym programistom, którzy wiedzą, co chcą zrobić (ja np. czasem odczuwam braki, że nie znam matematyki na wyższym poziomie czy nie jestem lepszy w algorytmach - a tego mógłbym się nauczyć na studiach inf.). Problem w tym, że jak ktoś jest początkujący, to i tak tego nie doceni, więc w takim przypadku studiowanie informatyki jest bezcelowe.

        Usuń

    Prześlij komentarz

    Popularne posty z tego bloga

    Ściemy z ogłoszeń o pracę

    Jak nie sprawdzać wiedzy technicznej: platformy online

    Jak zrobić prostą grę w JavaScript?