programistaHumanista#3 – prawa robotyki, moralność robotów

Wyobraźcie sobie przyszłość, do waszego pięknego, inteligentnego domu sztuczna inteligencja postanawia zaprosić wszystkich bezdomnych z okolicy. Niemożliwe? 😉 Zapraszam na odcinek:

credits:

muzyka: Quiet Music for Tiny Robots – You Wont Believe What Happens Next

film: „Ja, robot”: http://www.imdb.com/title/tt0343818/?ref_=fn_al_tt_2

film: „Terminator 1”: http://www.imdb.com/title/tt0088247/?ref_=nv_sr_3

test moralności: http://moralmachine.mit.edu/

I jak się podobało? 😉

Pozdrawiam!

Week review #22 – czasem nie da się skończyć

Skończył się naprawdę naprawdę pracowity tydzień, jednakże akurat teraz efektów tej pracy niestety nie widać. Czasem tak bywa, kilka projektów rozpoczętych, zrealizowanych w 60-80% ale jeszcze nie dopracowanych na tyle, żeby można było się nimi pochwalić 🙂 Innymi słowy efekt tego tygodnia to trzy posty jako wersje robocze i podobnie nowy odcinek pH na warsztacie. W związku z czym mogę zapewnić, że nadchodzący tydzień (zwłaszcza, że dwa dni wolnego przede mną) przyniesie wiele nowych treści. Zajmę się też uporządkowaniem tych comming-soon’ów na stronie 😉 A wracając do tego tygodnia..

Sporo czasu spędziłem nad nowym odcinkiem pH, długo trwało zwłaszcza zrobienie intro (pierwszy raz robiłem takie coś). Ale po skończeniu pracy nad nim wydaje mi się, że wyszło w porządku 🙂 Jak wam się podoba?

Film na YouTube

Dodatkowo blog się trochę zmienił, może jest to kosmetyczna zmiana, ale teraz dzielenie się treściami będzie łatwiejsze. Dodatkowo ten nowy fab (floating action button) świetnie pasuje do stylistyki bloga, polecam nań klikać i patrzeć jak działa 😉 Czyli jak łatwo podzielić się treścią z innymi 🙂

Na początku zeszłego miesiąca (września) przeprowadziłem się, tydzień zajęło mi uporządkowanie nowego miejsca, poprzestawianie mebli, rozstawienie się, etc.. Ale po tym tygodniu zostało jeszcze kilka drobnych prac, które trafiły na listę i czekały tam.. Blisko 2 miesiące na zrealizowanie 🙂 Czasem tak jest z niektórymi zadaniami, że kiedy trafią na listę to-do, bardzo im trudno się stamtąd wydostać, bo mają niski priorytet. Całkiem ciekawe zagadnienie, jak to jest, że z jednej strony ciągnie nas, żeby zamknąć jakiś projekt, móc go odwiesić na listę zrealizowane, a z drugiej odkładamy cały czas te zadania na później. Nie mniej bez filozofowania, to również zajęło mi trochę czasu w tym tygodniu, ale skończyłem ostatnie prace związane z wprowadzeniem się, jakieś drobne naprawy, dokręcenie uchwytów w szafkach, takie rzeczy. Po dwóch miesiącach fajnie zarchiwizować taki projekt 😉

Po za tym cały czas szukamy osób chętnych do działań przy d4k (pod linkiem opis poprzedniej edycji, ale założenia się nie zmieniły, w tym roku chcemy po prostu lepiej, mocniej, więcej 😉 Masz ochotę zrobić coś dobrego i jesteś z Wrocławia? Napisz na devoxx4kidspl.wroclaw@gmail.com, na pewno się przydasz 🙂 Pracy mamy mnóstwo.

To by było na tyle, jeśli chodzi o ten tydzień. Rozważam zmianę tej formy na month-review 😉 Ponieważ co jakiś czas zdarza się tydzień taki jak ten, kiedy pracy było sporo, a efektów nie widać 🙂 Ale muszę to na spokojnie przemyśleć, pisanie minimum jednego tekstu w tygodniu to bardzo dobry trening. Pozwala spojrzeć na to co się rzeczywiście robiło, a nie tylko zbieranie statystyk dla statystyk 😉 Zanalizować i wyciągnąć wnioski. Cóż, nie wiem jeszcze co zrobię 🙂 Na pewno nadchodzący tydzień będzie ciekawy 😉 Stay tuned!

Pozdrawiam!

Kotlin tutorial #3 – loops

Pętle w programowaniu umożliwiają powtarzanie niektórych czynności. Ale nie tylko proste powtarzanie, bo to było bezsensu na dłuższą metę, ale zmianę parametrów, albo ich pobieranie, przetwarzanie według jakichś geometrycznych, lub logicznych zasad. Java posiada 3 główne (może 4, w zależności od tego jaką konwencję nazewnictwa przyjmiemy) rodzaje pętli. Kotlin jednak jak ma to w zwyczaju daje nam dużo więcej możliwości, oraz – elastyczności.

Na początek prosta pętla for, czyli iterująca liczby w zakresie od 0 do 10. W javie:

        for (int i = 0; i < 10; i++) {
            System.out.print("for1 = " + i + ", ");
        }

W Kotlinie:

    for (i in 0..10) {
        print(i)
    }

lub:

    repeat(10) {
        print("repeat10")
    }

No dobra, repeat nie jest pętlą, tylko dodaną do biblioteki standardowej metodą, ale czyż nie jest czytelniejszy? Java wymaga zdefiniowania wartości zmiennej początkowej, warunku, oraz sposobu iteracji. Część z tych elementów może oczywiście znajdować się po za pętlą for, ale nie zawsze potrzebujemy ich wszystkich. Czasem chcemy coś po prostu.. powtórzyć. 😉

Kolejnym typem pętli for jest tzw forEach, który pozwala na iterację bez użycia dodatkowej zmiennej iterującej. W javie przedstawia się tak:

        private static String[] t = {"abc", "cde", "efg"};
        for (String s : t) {
            System.out.print("for2 = " + s + ", ");
        }

Z kolei w Kotlinie:

    val list = listOf("A", "B", "C")
    for(str in list) {
        print(str)
    }

Użyłem przykładu z listą, ponieważ Kotlin nie obsługuje typów prostych, takich jak javowa tablica[].

A co jeżeli chcemy iterować po mapie? Potrzebujemy czegoś na kształt: „for (Map.Entry<String, Object> entry : map.entrySet())”. Z kolei w Kotlinie:

    val map = hashMapOf(1 to "one", 2 to "two", 3 to "three")
    for ((key, value) in map) {
        println("Map[$key] = $value")
    }

Prawda, że przyjemnie? Jest jeszcze coś fajnego, mianowicie pętle foreach możemy wywołać jak metodę, albo funkcję, bezpośrednio na obiekcie na którym operujemy. Tak to wygląda:

    map.forEach {
        print(it.key)
    }
    println()
    (1..5).forEach(::print)
    println()

Słówko kluczowe it odnosi się do bieżącego obiektu. Potrzebowaliśmy np klucza – żaden problem.

Pozostałe dwa typy pętli, które są praktycznie takie same w obydwóch językach nazywają się while i do while. Stosujemy je najczęściej wtedy, kiedy nie znamy dokładnej ilości iteracji, ale istnieje jakiś warunek który zakończy nam działanie pętli. Poniższy przykład jest taki jak w pętli for, ale nie chciałem specjalnie utrudniać, tworząc dziwne warunki, chodzi mi o sam „kształt” pętli.

        //java
        int i = 0;
        while (i < 10) {
            System.out.print("while = " + i + ", ");
            i++;
        }
        System.out.println();
        do {
            System.out.println("do while");
        } while (1 > 10);

    //kotlin
    var i = 0
    while (i < 10) {
        print("while = $i, ")
        i++
    }
    println()
    do {
        println("do while")
    } while (1 > 10)

To by było na tyle, jeśli chodzi o informacje o pętlach. Temat jeszcze powróci, kiedy będziemy omawiali lambdy 😉 Kod w aktualnej wersji znajduje się na GitHubie. Wszystkie aktualne zmiany oczywiście w pakiecie loops. W następnej części opowiem o instrukcjach sterujących w obydwóch językach.

Pozdrawiam!

— status update —

Jak widać, minęło sporo czasu, a kontynuacja kursu Kotlina się nie pojawiła. Pojawi się tutaj: https://kurskotlin.pl/ tak więc tam zapraszam #kurskotlin

Week review #21 – fb grupa, d4k2017, w sieci

Kończy się kolejny tydzień. Niezbyt przyjemny, jeśli trzeba było wychodzić na dwór, aczkolwiek sobota była ładna 😉 A jak przedstawia się podsumowanie?

Cóż, napisałem artykuł na Webmastah na temat tego jak promować swoją pracę i dlaczego to istotne. Artykuł znajduje się tutaj. Trafiłem na weekly z wpisem o tym jak szukał bym pierwszej pracy 🙂 Okazuję się, że to naprawdę dobry wpis. Ponadto znalazłem się na blogu javadevmatt, oraz w filmie na YouTube z opisem swojego pierwszego programistycznego zadania 🙂 Do tego jestem jeszcze w cotygodniowym podsumowaniu z blogami około-javowymi. Całkiem sporo jak na jeden tydzień 🙂

Powstała grupa na facebooku o nazwie programistaHumanista, na którą też serdecznie zapraszam. Grupa w założeniach ma udzielać prostych odpowiedzi na trudne pytania, dla tych którzy wiedzą, że jest coś takiego jak internet, ale chcieliby dowiedzieć się więcej, jak coś działa 🙂 W założeniach tematyka grupy ma być zbliżona do tematyki kanału na YouTube, ale jak wyjdzie, zobaczymy. Nie mniej – zapraszam serdecznie 🙂 Grupa jest jeszcze niezbyt liczna, ale postaram się, aby się rozwinęła 🙂

Dodatkowo startujemy z przygotowaniami do Devoxx4Kids 2017, w związku z tym poszukujemy osób które chciały by zająć się – razem z nami -organizacją, poszukać sponsorów, prelegentów. Do ogarnięcia jest masa zadań. Jesteś chętny? Zostaw komentarz, albo napisz na: devoxx4kidspl.wroclaw@gmail.com 🙂 Można zdobyć sporo ciekawych doświadczeń, poznać fajnych ludzi i.. zrobić coś dobrego 🙂

d4k_logo

Po za tym w tym tygodniu byłem jeszcze na prelekcji Pawła Klimczyka na temat code-crime. I pomimo, że Paweł jest programistą .Netowym to opowiedział o naprawdę uniwersalnych zasadach tworzenie oprogramowania. Całe spotkanie było poświęcone technologii .NET, ale w ramach odpoczynku od aktualnie używanej technologii warto czasem wybrać się na coś innego 🙂 Zwłaszcza, że może się okazać, że problemy które będą poruszane są uniwersalne i pomimo, że nie zastosujemy tych samych narzędzi, to może spróbować te same rozwiązania?

To by było na tyle jeśli chodzi o ten tydzień 🙂 Wiem, że w tamtym obiecywałem nowego programistęHumanistę, udało mi się go nawet nagrać, ale dopiero dzisiaj, a jeszcze montaż i dźwięk 🙂 Także mam nadzieję, że w tym tygodniu pojawi się na YouTube. Zresztą jak by co, wiecie gdzie go szukać. Do następnego razu, stay tuned!

Pozdrawiam!

 

Week review #20 – choroba, Toggl

Kończy się niezbyt pracowity dla mnie tydzień numer 41. A dlaczego niezbyt pracowity? Cóż, rozchorowałem się i mój time tracker ma zanotowane mnóstwo czasu jako spanie. Jak się budziłem, też nie czułem się zbyt dobrze, w związku z tym pisząc wprost – szału nie ma.

Udało mi się jednak odkryć nowe narzędzie do zarządzania czasem o nazwie Toggl, które mogę z czystym sumieniem polecić. Minusy są takie, że nie zawsze odświeża aplikację mobilną i wtedy trzeba zrobić to ręcznie, ale po za tym ma same plusy. Używam od około tygodnia, wpisuje się co się robi, wybiera projekt, klika start i już 😉 Czas leci, zaczynasz coś następnego, znowu się przełączasz. Wszystko zebrane w podsumowania, można tworzyć wykresy i co ciekawe, nie wiem nawet jakie opcje dostanę korzystając z wersji premium. Ponieważ póki co sprawdzenie tego nie było mi potrzebne, miałem wszystko czego mi trzeba. Dodatek do przeglądarki umożliwia uruchomienie zegara z kilku miejsc, np z Todoist, które również stosuję i polecam. Wygląda to tak:

screen

Oczywiście wcześniej był tu napis „Start timer”, ale że kliknąłem, to się zamienił 😉

Liczę na to, że stosując to narzędzie uda mi się więcej osiągnąć, ponieważ będę lepiej wiedział, co zajmuje mi ile czasu. Np jedyny post który pojawił się w tym tygodniu o Kotlinie kosztował mnie 3 godzinki. Nie licząc, obstawiał bym, że 2. Także spory rozjazd, a umiejętność lepszego obliczenia ile czasu co zajmuje pozwoli na lepsze planowanie i wykonywanie zadań. Finalnie liczę na to, że zyskam więcej czasu, dzięki temu pojawi się więcej postów.

Jak pisałem we wstępie rozchorowałem się, więc po za tym jednym postem i aktualizacją haseł w najpopularniejszych używanych przeze mnie serwisach (raz na kilkadziesiąt miesięcy robię taką operację), która w sumie też zajęła mi 4 godziny, nic więcej nie udało mi się zrobić. W związku z tym mogę tylko obiecać poprawę 😉 i nowy odcinek programistyHumanisty (mam nadzieję, że moje gardło da radę) w nadchodzącym tygodniu. Stay tuned!

Pozdrawiam!

Kotlin tutorial #2 – variables

Podstawą chyba każdego języka programowania są zmienne, w których można przechować wartość, którą można modyfikować. Są też stałe, kiedy nie chcemy, żeby przypadkiem coś zostało zmienione (np liczba PI, to wartość stała, nadpisywanie jej zawartości np liczbą 5 i nazywanie PI nie ma logicznych podstaw i będzie prowadzić do błędów). Java i Kotlin mają do tego aspektu podobne podejścia. Są to języki silnie, statycznie typowane, tzn jeżeli nadamy jakiś typ zmiennej, to nie da się go wprost porównać z innym typem, jeżeli np napis ma wartość 1 i zmienna typu liczbowego ma wartość 1, to one nie są sobie równe (szczegóły poniżej). Słowo statycznie oznacza z kolei, że zmienne przyjmują swoje typy w czasie kompilacji programu, a nie w czasie jego działania, jak ma to miejsce np w JavaScripcie. Kotlin posiada tutaj jednak ułatwienie, które nazywa się typowaniem zmiennych.

W praktyce oznacza to tyle, że mamy kod w javie:

        byte b = 127;
        short s = 32767;
        int i = 2147483647;
        final byte fb = 127;
        final short fs = 32767;
        final int fi = 2147483647;

Słówko final oznacza stałą, czyli po przypisaniu wartości nie można już jej zmienić. Zaprezentowane wartości to maksimum, jakie może przyjąć dana zmienna, po przekroczeniu jej zacznie się odliczanie od wartości ujemnych, coś na kształt licznika w samochodzie, tylko że tam nie ma ujemnych, tylko zero 😉 A jak to wygląda w Kotlinie?

    var c = 120
    var d: Byte = 120
    val e = 120
    //val f: String = 120

Słówko var (variables) oznacza zmienną, z kolei val (values) stałą. Druga sprawa jest taka, że na podstawie przypisanej wartości zostaje nadany odpowiedni typ zmiennej. Innymi słowy w tym przypadku domyślny będzie Int, chyba, że po dwukropku wymusimy inny typ. Kod w komentarzu się nie skompiluje, ponieważ do wprowadzania napisów (zmienna typu String) używa się dwóch znaków cudzysłowu: „120”.

W tym miejscu należy też wspomnieć o zmiennej Object w javie, po której dziedziczą wszystkie typy. Nie ma ona zbyt wielu metod, ale posiada equals – zawiera. Używamy jej do porównania zawartości obiektów.

        boolean bool = true;
        char c = 'A';
        final char e = 'E';
        String str = "Hello";
        Object ob = 1;
        int in = 1;

        for(int y = 0; y<10; y++) {
            System.out.print(c++ + " ");
            // System.out.print(e++ + " ");
            // System.out.print(ob++ + " ");
        }
        System.out.println();
        if(ob.equals(in)) {
            System.out.println(bool);
        }

Funkcja ta zwróci następujące wartości:

A B C D E F G H I J 
true

Dzieje się tak ponieważ zmienna typu char jest typem liczbowym, dzięki temu możemy zwiększając jej wartość wydrukować kolejną literę. Nie uda się to w przypadku e i ob, ponieważ jedna z nich jest stałą, druga z kolei jest typem Object, gdzie nie wiadomo jak obsługiwać iterację. Z kolei w Kotlinie:

    var c = 120
    var d: Byte = 120
    val e = 120
    //val f: String = 120
    for (i in 0..9) {
        //println(e++)
        println(c++)
    }
    println()
    for (i in 0..9) {
        println(d++)
    }
    var f = 'A'
    var g = "A"
    for (i in 0..9) {
        println(f++)
        //println(g++)
    }

Otrzymamy taką odpowiedź:

120
121
122
123
124
125
126
127
128
129

120
121
122
123
124
125
126
127
-128
-127
A
B
C
D
E
F
G
H
I
J

Co tu się stało? Po pierwsze iterujemy po c, który domyślnie został zapisany jako int, z racji wysokiego zakresu udaje nam się to bezbłędnie. Po e nie możemy iterować, ponieważ jest stała. Ale za to w zmiennej d wymuszamy typ byte, który może przyjąć wartość max 127, a następnie zaczyna iterację od najniższej wartości. Iterowanie typu char jest takie samo jak w Javie, z kolei Stringa nie można iterować, tutaj również bez niespodzianek. Słówko kluczowe equals występuje również w Kotlinie, działa tak samo jak w javie, innymi słowy porównuje wartości pomiędzy takimi samymi typami. Pojawił się też nowy operator === oznaczający, że oba obiekty mają taką samą referencję (czyli odnoszą się do tego samego obiektu). Wygląda to tak:

    var x = 1
    var y: String = "1"
    var z = x
//    if(x==y)
//        println(true)
    if(x.equals(y))
        println("x.equals(y)")
//    if(x===y)
//        println(true)
    if(x===z)
        println(true)
    if(x.equals(y.toInt()))
        println("x.equals(y.toInt())")

Co z kolei zwraca:

true
x.equals(y.toInt())

Czyli z i x mają tą samą referencję, oraz x ma taką samą wartość jak y, jeśli przekształcimy go na Int.

W podsumowaniu chciałem jeszcze zwrócić uwagę na wielkość liter. Typ zmiennej pisany z małej litery to prymityw, Kotlin już takich nie obsługuje i tam piszemy wszystko z dużej. Prymityw znaczy tyle, że nie jest obiektem, tylko typem prostym mogącym przechowywać jakąś wartość liczbową (char jest prymitywem, ponieważ przechowuje wartości liczbowe). Obiekty z kolei mają dodatkowe właściwości, mogą mieć np wartość null. Kotlin jednakże zabezpiecza nas przed taką ewentualnością.

W związku z powyższym Java posiada mechanizm automatycznego opakowywania prymitywów. Tzn, jeżeli porównujemy obiekt z prymitywem int, to automatycznie zostanie on skonwertowany do obiektu Integer o tej samej wartości. W Kotlinie z racji braku obsługi prymitywów takie operacje nie są potrzebne. To by było tyle na dzisiaj, jak widać mechanizm typowania zmiennych pozwala zaoszczędzić zbędnego kodu. Wszystkie użyte dzisiaj przykłady znajdują się też na GitHubie, zachęcam do samodzielnego pobawienia się 😉

Pozdrawiam!

— status update —

Jak widać, minęło sporo czasu, a kontynuacja kursu Kotlina się nie pojawiła. Pojawi się tutaj: https://kurskotlin.pl/ tak więc tam zapraszam #kurskotlin

Week review #19 – najpopularniejszy post, prelekcje, WowSchool

Skończył się bardzo zimny i mokry, jesienny tydzień numer czterdzieści. Ale mówiąc szczerze nie miałem czasu zmarznąć 😉 Byłem na dwóch wydarzeniach, praktycznie stale nad czymś pracowałem. A szczegóły poniżej.

Nie wiem czy wspominałem o tym wcześniej, ale zostałem trenerem (w sensie wykładowcą, w sensie fizycznym słaby ze mnie autorytet 😉 w WowSchool.

Ogólnie wykładam tematy webowe, (html + css + js + bootstrap + wordpress + umbraco), dla dzieciaków w wieku około 13-15 lat. Dodatkowo staram się im opowiedzieć nieco więcej o pracy programisty, że to nie tylko klepanie kodu ale też np prezentacje, czy rozmowy, albo przekazywanie wiedzy. Sprowadza się to do tego, że jeżeli ktoś ma problem, to czasem proszę kolegę obok o wytłumaczenie. Dodatkowo od czasu do czasu ktoś opowiada o tym co zrobił. Sam jestem niezwykle ciekaw jak zaawansowane projekty stworzą dzieciaki na koniec semestru 😉

Po za tym w tym tygodniu byłem na pierwszej prelekcji Iwony, znanej jako programistka.net. Podobnie jak ja uczestniczyła w konkursie daj się poznać, ale z o wiele lepszym rezultatem 🙂 Fajnie było osobę znaną z internetów poznać w końcu osobiście. Iwona opowiadała o tym jak przełamywać siebie i podejmować się coraz trudniejszych projektów. Jej projekt konkursowy również był w Androidzie – technologii z którą miała pierwszy raz do czynienia. A prelekcja bardzo fajna. Jeśli będzie w waszej okolicy przyjdźcie koniecznie 🙂 Taka ciekawostka, profil Iwony na ln to LinkedIn/programistka.

Ponadto w poprzednim week review napisałem, że będę testował jakieś aplikacje typu time tracker. Wybór padł na RescueTime, ale nie spełniła moich oczekiwań. Między innymi dlatego, że część rozmów na temat konferencji, projektów, czy ustalenia spotkań odbywało się przez facebooka, a RescueTime oblicza, że to strata czasu. W związku z tym wyniki są niemiarodajne. W tym tygodniu spróbuję czegoś innego, najbardziej by mi odpowiadało robienie notatek jak w Todoist tzn, że piszę tekstem i @ albo # oznacza konkretny projekt, albo tag.

W tym tygodniu udało mi się jeszcze napisać o tym, jak szukałbym pracy dzisiaj, wiąże się z tym kilka ciekawych faktów. Po pierwsze, to najpopularniejszy post jaki kiedykolwiek napisałem, po prawej stronie włączyłem wyświetlanie najpopularniejszych, ale działa to dopiero od tygodnia, w związku z tym wyniki nie są spójne z Google Analytics. Ale i tak faktem pozostaje, że takiej ilości odsłon nie miał żaden z moich postów ani na starym, ani na nowym blogu (jeszcze). Po drugie, trochę go rozpowszechniłem (między innymi w kilku grupach na facebooku). I kiedy wieczorem wróciłem do domu, to okazało się, że napisałem „szukał bym” oddzielnie, czyli w tytule był błąd.
mem

Internauci oczywiście zauważyli 😉 Kilka komentarzy na ten temat widziałem, ale mam wrażenie, że odbiór był raczej pozytywny 😉 Mam również nadzieję, że dzięki niemu kilku pre-juniorów łatwiej odnajdzie się na rynku pracy 😉

To by było na tyle jeśli chodzi o ten tydzień. Po za tym byłem jeszcze na świetnych prelekcjach z serii Toast. Każdemu polecam, jak tylko będzie okazja to warto się wybrać. Noo i zaczynam następny, mam nadzieję, że pojawią się nowości w ramach serii, zwłaszcza w ramach tej na YouTube 😉 Ale cii.. Stay tuned!

Pozdrawiam!

Jak dzisiaj szukałbym pierwszej pracy – poradnik od poziomu „chcę w programowanie”

Dołączyłem ostatnio do grupy JavaDevMatt na facebooku która skupia głównie osoby początkujące, szukające pierwszej pracy, junior developerów. Udzieliłem się w jednym wątku dotyczącym poszukiwań i.. dostałem masę zapytań w PW. Po namyślę stwierdziłem, że klepnę posta na ten temat, ponieważ mając wiedzę którą posiadam obecnie, moje poszukiwania pracy wyglądały by zupełnie inaczej. Ja akurat szukałem jako junior Java developer, ale myślę, że po za technologiami które wymienię porady są interdyscyplinarne. Ale po kolei.

Jak szukałem pierwszej pracy?

Cóż, moja historia jest taka, że skupiłem się głównie na poznaniu javy jako języka. Nie zagłębiałem się w żadne frameworki, po prostu robiłem proste programiki nie zastanawiając, czy może w pracy przyda mi się coś jeszcze. Dodatkowo starałem się zrobić coś, co by mnie wyróżniło. Wtedy był to kurs programowania dla początkujących, który aktualnie jest dostępny tutaj. Mam też na koncie studia informatyczne, ale każdy sam musi zdecydować, czy są potrzebne 🙂 Przeczytałem mnóstwo opinii zarówno za, jak i przeciw i to nie jest tematem tego wpisu. Faktem jest, że aktualnie nie spotkałem się z pracodawcą, który by ich wymagał. Ale nigdy nie wiadomo, czasy mogą się zmienić, część pracodawców może mieć to w wymaganiach również dzisiaj. Dodatkowo, pierwszą pracę zdobyłem pisząc na Facebooku, że szukam 😉

Jak szukał bym pracy dzisiaj?

Z racji tego, że moje porady brzmią jak przepis podaję je w punktach, po wykonaniu których dostaję się pracę 🙂 Nie jest to oczywiście wiedza objawiona, tylko moje zdanie poparte doświadczeniem, nie mniej dam sobie obciąć klawiaturę, że postępowanie zgodnie z tą procedurą poprowadzi w dobrym kierunku 😉 Skupiam się tutaj na scenariuszu, w którym coś już robisz i w ciągu dnia masz 2-3 godzinki na ekstra naukę. Jeśli studiujesz, Twoja sytuacja jest jeszcze lepsza, bo masz więcej czasu 🙂

  1. Po pierwsze – język angielski. Prawie każda firma go wymaga, jeśli idzie Ci słabo, to ćwicz równocześnie z wykonywaniem następnych punktów. Od początku pisz kod po angielsku, staraj się czytać angielskie artykuły, rozwijaj też czynne umiejętności, rozmowa to podstawa w tej branży 😉
  2. Wszyscy mówią, zajmuj się tym co Cię interesuje 😉 Ale prawda jest taka, że na początku po prostu tego nie wiesz. Metaforycznie wchodzisz w świat kartonów o różnych kształtach i kolorach, ale nie wiesz co jest w środku. Bo skąd, to są po prostu nazwy: Node.js, Java, R#. Są różne zestawienia które pomagają zdecydować, jaki język wybrać na podstawie tego, którą częścią technologii chcemy się zająć. Np takie:
    which-programming-language-should-i-learn-first-infographic

    po kliknięciu naciśnij PPM i otwórz grafikę w nowej karcie, żeby zobaczyć pełną rozdzielczość

    Po za tym można wybrać kilka które nas interesuje i poczytać co się w nich tworzy. Ale nawet jeśli wybierzemy i nam się nie spodoba, to zawsze można to zmienić. I tak zyskujemy doświadczenie, ponieważ wchodząc w nowy język, coś już rozumiemy i nie trzeba np tłumaczyć nam koncepcji zmiennej, pętli, instrukcji warunkowej, obiektu 😉 Dodatkowo język jest środkiem do tworzenia aplikacji, a nie celem. Chociaż na początku łatwo o tym zapominamy. Zresztą do tej pory walki na polu Java czy .Net przez znawców tylko jednej z tych technologii to chleb powszedni 🙂 Ale nie zawracajmy sobie teraz tym głowy.

  3. W międzyczasie wybieraj się na jakieś konferencję o danej technologii, jeśli mieszkasz w dużym mieście na pewno jest jakaś w okolicy. Jeśli w małym, to może chociaż online. Poznaj trochę środowisko, może prelegenci przekonają Cię do aplikowania do którejś z firm. Jeśli byłeś już na kilku i jakaś firma bardzo Ci się podoba, to pogadaj z kimś, może być z hr-u. Powiedz, że się uczysz i na co masz zwrócić uwagę, bo za kilka miesięcy chcesz zacząć u nich pracę. Weź adres i napisz maila, dokładnie wypytując o technologię. Efekt murowany, jeśli po kilku miesiącach napiszesz następnego – jestem gotowy, chcę aplikować. Na sam start dostajesz mnóstwo punktów 🙂
  4. Ogarnij podstawy wybranego przez siebie języka. No dobra, ale gdzie kończą się podstawy? Pomyślmy – zmierzyć to możemy np poziomem projektu który potrafimy napisać, albo powiedzmy czasem który poświęcimy. Ta druga miara podoba mi się bardziej. Dlaczego? Nie chcę proponować konkretnych projektów które miały by coś mierzyć, w tym miejscu w przypadku javy Mateusz podał przykładowy, który świadczy, że coś umiesz. Ale w innych technologiach złożoność może być inna. Moja propozycja? 300 godzin z danym językiem na początek korzystając z kursów praktycznych, w których uczymy się i tworzymy od razu jakieś małe rzeczy, następnie może jakaś bardziej szczegółowa książka, coś w stylu kompendium, byle nie zbyt toporna, żeby nie stracić zapału (cały czas ćwiczymy kod, robimy przykłady, wiedza na sucho wchłania się gorzej). Jeśli przyjdzie nam do głowy jakiś projekt na max kilka dni, również go zróbmy.
  5. Bierzemy ogłoszenia o prace na stanowisko które nas interesuje i patrzymy co tam jest po za wybraną przez nas technologią przewodnią 🙂 Oczywiście ogłoszenia rzadko piszą programiści, dlatego może być tam kilka byków, lepiej przejrzeć więcej ogłoszeń i wybrać najpopularniejsze technologie, albo dopytać na forum. Może ucząc się trafiliśmy na to, w którym kierunku dalej się rozwijać? Jeśli nie, to najlepsza droga, przejrzałem kilka przykładowych ofert i wyszły mi takie technologie:
    • Spring
    • Maven
    • jUnit
    • SQL
  6. Jak nie trudno się domyślić warto poświęcić kilkanaście lub kilkadziesiąt dni na naukę każdej z nich. Różne znajdziemy i mają różne poziomy złożoności.
  7. Coś już umiemy, dobrym pomysłem jest w tym momencie poznanie jakiegoś systemu kontroli wersji. Tutaj standardem jest raczej GIT, chociaż zdarza się, że jest inaczej. Ponadto dobrze byłoby podnieś swój ogólny warsztat, dowiedzieć się, czym są code-smells, kiedy komentarze mają znaczenie, w tym miejscu mogę polecić konkretną propozycje: „Czysty kod..” autorstwa Uncle Boba. Dodatkowo utworzenie kont na portalach typu LinkedIn, czy Twitter, Github nie zaszkodzi. Coś już wiemy, czyli możemy komentować, albo udostępniać rzeczy które uważamy za wartościowe.
  8. Przez ostatnie około 150-200 godzin 'średnio duży’ projekt. Staramy się korzystać z kontroli wersji, dobrych praktyk itd.. Dodatkowo publikowanie go na GitHubie jest dobrym pomysłem. Dzięki temu w trakcie rekrutacji można powiedzieć, że mamy coś, co możemy pokazać.. Jeśli nie zdążymy go skończyć to trudno. Z pierwszym projektem tak będzie, możemy chcieć zaczynać pisać go od początku, to normalne, cały czas się uczymy 😉
  9. Nie jest to punktem koniecznym, ale wyjdźmy po za schematy. Zróbmy coś nowego, co sprawi, że od początku spojrzą na nas inaczej. Nie wiem, np włączyłem się w projekt open source, moja praca polegała na.. Albo wysyłając CV dorzućmy krótki filmik, pochwalmy się blogiem w którym opisujemy jak się uczyliśmy, co sprawiało nam problemy i jak je rozwiązywaliśmy. Inwencja twórcza jak najbardziej dopuszczalna.
  10. Zróbmy dobre cv, nie chcę się tutaj rozpisywać nad szczegółami, ale bez koloryzowania, czytelne, ładne, opiszmy projekty. Można to cv podesłać komuś do wglądu, albo poszukać materiałów jak robić dobre jako początkujący programista. Jest tego sporo w sieci. Trzeba też sobie odpowiedzieć na jedno bardzo ważne pytanie, które padnie na pewno. Ile chcemy zarabiać? W mojej ocenie w momencie w którym to piszę, czyli ostatni kwartał roku 2016 stawka 2200-2800 netto dla junior java developera bez doświadczenia we Wrocławiu jest normalną stawką 😉 To wszystko oczywiście zależy od firmy, technologii, etc.. Można się rozejrzeć za porównywarką zarobków na danym środowisku, albo podpytać kolegów.

A co jest najważniejsze?

Minął rok, może trochę mniej, może trochę więcej, może nawet dwa w zależności od tego ile mieliśmy czasu. Punkty z listy odhaczone, umiemy to. Pora rozejrzeć się za dobrą pracą. Najlepiej uderzać do firm, które już sobie upatrzyliśmy, albo które ktoś nam polecił, albo które pojawiają się na rynku i wyglądają dobrze. Dostosuj CV pod konkretne oferty, wysyłaj i chodź na rozmowy 😉 Spokojnie, mi też kilka pierwszych prób się nie udało i nie dostałem pracy. Spytaj co było słabe, popraw i próbuj dalej. Tutaj znajduje się bardzo dobry film odnośnie rozmowy rekrutacyjnej, kilka pomysłów i kilka błędów które można popełnić. Warto też w sieci poszukać przykładowych pytań, czy porad, jak dobrze wypaść na rozmowie. Bo wiesz co, może zabrzmi to banalnie, ale najważniejszym elementem jesteś Ty. Twoje podejście, w internecie można spotkać wiele opinii, że programiści uważają się za primadonny, które tylko wybrzydzają i narzekają. Ty pewnie myślisz, że nic jeszcze nie umiesz. Ale nie przejmuj się, programiści z dobrym 10 letnim stażem też tak myślą, wszystko spowodowane jest przez syndrom oszusta, o którym świetnie opowiadał Michał Gruca, ja też pewnie kiedyś jeszcze coś o nim napiszę 🙂 A tymczasem wyrzuciłem z siebie wszystko co miałem do powiedzenia na temat drogi jaka moim zdaniem jest najbardziej optymalna do zostania programistą. Możesz ją oczywiście zmodyfikować, dodać gdzieś inne elementy, takie jak np nauka wzorców projektowych, po za tym, to nie jedyna ścieżka, świetnie swoją historię opowiedział też Damian Knak. Twoja kolej, powiedz w komentarzu co o tym myślisz, i czy chcesz podążać tą drogą, czy może masz jakąś inną historię do opowiedzenia. Jeśli jesteś na początku, to również napisz co o tym myślisz 😉 Tak więc drogi pre-juniorze, zakasuj rękawy i do dzieła 🙂

Pozdrawiam!

Week review #18 – dlaczego czasem się chce, a czasem nie

Ten tydzień był średnio pracowity. Tzn część z tego co zaplanowałem zostało wykonane, ale nie wszystko. Nie mniej udało się zrobić, wydaje mi się, że dobry odcinek z serii programistaHumanista. Jakiś czas temu już zauważyłem, że część tygodni jest fajna, pod koniec jest bardzo zadowolony z efektów, a część.. eee taka sobie, czyli pracuję mniej. Też tak macie?

Postanowiłem coś z tym zrobić, od jakiegoś czasu zapisuję wszystko co robię.. Mam notatnik w którym godzinowo jest rozpisany każdy dzień. Aktualnie 88 wpisów, na początku to pomagało, mobilizowało mnie lepiej, żeby nie wpisywać facebook – 30 minut. Ale od jakiegoś czasu działa słabiej, w związku z tym postanowiłem poszukać sobie jakiegoś narzędzia do timetrackingu. Jaki będzie skutek, nie mam pojęcia 🙂 Opiszę pierwsze wrażenia w przyszłym tygodniu.

Powyższy akapit wiedzie do konkluzji, że z jednej strony chcemy rutyny, ale z drugiej, po jakimś czasie efekty jej działania są coraz mniejsze. Tzn chciałem, wyrobić sobie nawyk codziennego zapisywania co robię, żeby mnie to motywowało. Nawyk powiedzmy sobie wyrobiłem, ale po jakimś czasie to przestało aż tak bardzo motywować. Tzn siła nawyku jest potężna, gdybym wyrobił sobie nawyk codziennych ćwiczeń, to by było ale 🙂 Cóż, udawało mi się to przez miesiąc, dopóki miałem kalendarz. Innymi słowy, pewnie wrócę do tej metody, nie zrobiłem nowego kalendarza, ponieważ zamieszanie z przeprowadzką i tak dalej. Innymi słowy teraz rutyna była w porządku, a zabiły ją zmiany – miejsca zamieszkania, w związku z tym trochę stylu życia.

To co napisałem być może kiedyś ubiorę w jakiś sensowniejszy post o tym, jak zarządzać czasem i co robić, gdy się nie chce, na razie – mam wrażenie, że zbyt często słucham swojego lenistwa. Najciekawsze jest to, że może to spowodować wyrzuty sumienia 😉 Kiedy masz coś zaplanowane, a zmarnowałeś czas. Kiedy z tego powodu nie możemy wieczorem usnąć, to znaczy, że przegięliśmy z wymaganiami wobec siebie. Chcąc posłużyć się cytatami motywacyjnymi możemy użyć takich dwóch:

„Kiedy jesteś zmęczony odpocznij, bo pole które wypoczęło przynosi lepsze owoce.” – cytat z pamięci, nie potrafię przytoczyć dokładnie

„Ci, co wygrywają – nigdy nie odpuszczają. Ci, co odpuszczają – nigdy nie wygrywają…” – Vince Lombardi

Czyli, że co pracujemy ciężko do utraty tchu i nie pozwalamy sobie na odpoczynek? Czasem jest tak, że po prostu wiesz, że ten dzień będzie bardzo słaby i nic nie zrobisz. Ale w kalendarzu masz punkty do wykonania, więc starasz się. Ale nic nie wychodzi i ostatecznie kończy się facebookiem. Ani naprawdę nie odpoczywasz, ani nie pracujesz. Konkluzja? Na ten moment wydaje mi się, że złotym środkiem jest umiar. Są plany, ale nie masz siły się za nie wziąć? Spróbuj zrobić minimum przez 5 minut, daj sobie takie okienko czasowe. Jeśli po zrobieniu tego dalej nie będzie Ci się chciało – odpuść. Jeśli Ci się zachce – działaj!

Wpis jest trochę chaotyczny, tak jak wspominałem, mam nadzieję, że kiedyś po przeczytaniu jeszcze kilku książek i wyrobieniu sobie dobrych nawyków w sytuacji, kiedy nie idzie zgodnie z planem napiszę go od nowa. Dawno temu napisałem już coś o motywacji programisty, ale tekst był o wiele bardziej chaotyczny niż ten. W związku z tym wydaje mi się, że zmierzam w dobrym kierunku. Oby 😉

A co do tego tygodnia, nadspodziewanie dużo czasu zajął mi ten YouTube 🙂 Trochę źle rozplanowałem, ale uczę się na błędach. Wiem już, żeby głosu nie nagrywać z samego rana, bo wtedy brzmi średnio.. Zamierzam kupić też nowy mikrofon i zmienić trochę sposób nagrywania, opowiadania na taki bardziej wciągający. A co z tego wyjdzie, jak zwykle – przekonamy się. Stay tuned!

Pozdrawiam!

programistaHumanista#2 – easter eggs, tajemnice i ciekawostki

Wiecie, że programiści również mają poczucie humoru? Zapraszam na nowy film, w którym opowiadam, czym i gdzie są easter eggi. A nawet jest tam ukryte coś ekstra 😉 Kto znajdzie?

Easter eggi, czyli ukryte żarty, tajne wiadomości znajdujące się w kulturze wokół nas 🙂

Pierwszy znany to gra whizball, na maszynę Fairchild Channel F. Ostatnio najwięcej ich w grach komputerowych, ale filmy (krzyk WIlhelma) i programy to również miejsce ich pojawiania się. Kolejne omawiane to:
-answer to life the universe and everything
-GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}
-about:robots
-do a barrel roll
-atari breakout
-kółko i krzyżyk
-askew
-use the force Luke
-kalibrator UI
-google now
-404
-418
-prima aprilis

Miłego oglądania, dajcie znać jak się podoba 😉

Pozdrawiam!