Perspektywa kariery - zmiana branży, bootcamp.

Odpowiedz Nowy wątek
2018-09-19 17:24
0

Witam serdecznie,

Bootcamp w tytule jest tylko wabikiem do tematu :)

Coraz więcej mówi się o tym, że branża jest bardzo trudna dla nowo wchodzących do niej szczególnie Junior Java/Spring dev.
W sumie od niedawna bo od 2 miesięcy zacząłem nieśmiało wysyłać CV i widzę, że konkurencja jest duża a stawki niskie i jestem ciekaw jakie macie spojrzenie na perspektywy takiej osoby jak ja i ocenę trudności w znalezieniu pracy.

Może opiszę swój przypadek bo wydaje się trochę nietypowy.
Mam 43 lata i nie pracowałem nigdy jako programista natomiast przez większość życia mniej lub bardziej byłem z tematem programowania związany.
Rok temu podjąłem decyzję, że chcę się przebranżowić i nie jest to skok na kasę a raczej zmęczenie/znudzenie tym co dotychczas robię (spółka, którą z sukcesem rozwijałem ponad 15lat).
Posiadam różne źródła utrzymania, które powodują, że nie muszę zarabiać przysłowiowych 15k na początek. Aby zdobywać doświadczenie komercyjne godzę się na śmieciową pensję Juniora.

Informatyka od dzieciaka była dla mnie pasją która zaczęła się od Basica na ZX Spectrum. Później klasa informatyczna w L.O. Czackiego w Warszawie (jedyny informatyczny kierunek L.O. wtedy w Polsce. Pascal, C, bazy danych), Dwa lata przygody na P.W. Automatyka i Inżynieria Komputerowa. Studia niestety wtedy nie pykły, nie było w nich w moich czasach jakiejkolwiek nuty nowoczesności - zmiana kierunku. Jestem obecnie magistrem studiów ekonomicznych.
Tak jak pisałem informatka i programowanie są dla mnie pasją i książki z tej dziedziny zawsze czytałem i starałem się być chociaż trochę na bieżąco co oczywiście nie jest proste przy szybko zmieniających się technologiach.
Z przyjemnością pisałem różne aplikacje webowe w PHP, Javascripcie (nie web) które pomagały w firmie i są cały czas wykorzystywane.
Nauka jakiegokolwiek języka programowania nie jest dla mnie problemem a jedynie kwestią wyboru jaki i poświęconego czasu.

Dwa lata temu zacząłem się bawić mikrokontrolerami i IoT. Nauczyłem się elektroniki poziomie koniecznym do tej zabawy. Zbudowałem u siebie system inteligentnego domu w oparciu o własne rozwiązania które uznałem subiektywnie za dobre i przyszłościowe. Protokół MQTT, czujniki WiFi, sterowniki i moduły wykonawcze WiFi (własne konstrukcje i oprogramowanie C++), postawiłem serwer VPS w chmurze (Digital Ocean) z brokerem MQTT i utrwalaniem danych w bazie MYSQL (skrypt w Pythonie), zarządzanie systemem przez WWW, informacje z czujników z wykorzystaniem Websockets, prosta integracja systemu z Apple HomeKit opartym o Raspberry Pi podpiętym do sieci domowej.

Rok temu wybrałem sobie stos oparty na Javie i chciałbym się skupić zawodowo na programowaniu backendu. Jestem samoukiem , idę ścieżką na podstawie różnych poradników czyli: Java, Maven, GIT, Spring, zagadnienia testów jednostkowych. W celu uporządkowania wiedzy podstawowej z Javy zrobiłem certyfikat Oracle OCA Java Programmer i odpaliłem Githuba z małymi Springowymi przykładami mojej pracy/nauki i poznawania różnych aspektów programowania w Javie github.com/mhtusz. Moje małe projekty działają na Tomcacie i wersje demo można sprawdzić.
Javę wybrałem dlatego bo wydaje mi się dobrym, popularnym językiem obiektowym z wieloma bibliotekami.

Dochodząc do meritum:

  • Czy sądzicie, że przebicie się pośród osób z bootcampów i absolwentów studiów będzie bardzo trudne i jak powinienem się wyróżniać i czy w ogóle moja historia wyróżnia czy nie zachęca?
  • Chętnie posłucham sugestii na temat jak się dalej rozwijać aby osiągnąć swój cel czyli - "zawodowy programista" bo mam ogromną chęć realizować tą pasję życiową.
  • Czy aby przekonać pracodawców skupić się na pisaniu na Githuba większych rzeczy czy na rozwoju przez kursy/certyfikaty: Java OCP, SCRUM, coś z Pivotal-a, Oracle SQL?
  • Czy pokazywać na Githubie drobne rzeczy w stylu znajomość wzorców projektowych czy pisania testów jednostkowych?
  • A może jakiś bootcamp albo podyplomowa Java na P.W.?
  • Liczyłem na możliwość ukierunkowanego rozwoju jako Junior ale to nie jest takie proste z tego co czytam i widzę po wysyłanych przez ponad miesiąc CV.

Pozostało 580 znaków

2018-09-20 09:26
Krzywy Rycerz
0

A wiedzieliście to?
http://www.szkolenierails.pl/oferta/index

Trzeba nie mieć honoru, żeby wypisywać takie rzeczy.

Pozostało 580 znaków

2018-09-20 09:28
Mocny Kojot
2

Bootcampy są dla naiwnych, to jak oferty typu "schudnij 15kg w miesiąc".

Pozostało 580 znaków

2018-09-20 10:00
1

@Michal74

Może opiszę swój przypadek bo wydaje się trochę nietypowy.

  • Mam X lat (dawno po okresie młodzieńczo-studenckim)
  • Zawsze pasjonowałem sie informatyką
  • Aktualna praca mnie znudziła i chciałbym zostać programistą

Co tu jest nietypowego? To jest identyczna historia jak 99% innych.

No ale wracając do tematu kody na GH to ciężki rak. Klasycznie cała logika w kontrolerach i kod jakościowo bardzo słaby. Ale myśle że popiszesz jeszcze ze 2-3 lata i będziesz mógł startować na juniora spokojnie.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2018-09-20 10:53
1
Shalom napisał(a):

@Michal74

  • Mam X lat (dawno po okresie młodzieńczo-studenckim)
  • Zawsze pasjonowałem sie informatyką
  • Aktualna praca mnie znudziła i chciałbym zostać programistą

Co tu jest nietypowego? To jest identyczna historia jak 99% innych.

No ale wracając do tematu kody na GH to ciężki rak. Klasycznie cała logika w kontrolerach i kod jakościowo bardzo słaby. Ale myśle że popiszesz jeszcze ze 2-3 lata i będziesz mógł startować na juniora spokojnie.

Dziękuję za merytoryczną odpowiedź. Rozbudowana warstwa logiki w kontrolerach zdecydowanie jest czymś co muszę zmienić. Wraz z rozbudową zapytań do bazy danych wprowadzanie logiki stało się niezbędne i faktycznie nie na miejscu jest żeby ona tam się znajdowała. Czy którąś z części kodu powinienem jeszcze zdecydowanie poprawić? Nie podobają mi się bardzo długie nazwy metod w Repozytorium ale chciałem trenować konstruowanie zapytań do bazy w ten sposób. Przepisać je na Query?
Gdzie konkretnie jeszcze widzisz te ogromne słabości kodu?

Myślę, że jednak trochę nietypowy. Czy 99% przypadków o których piszesz 20 lat wcześniej programowało w asemblerze, wie co to jest normalizacja baz danych i w trakcie życia Te osoby tworzyły rozwiązania w wielu technologiach, które sprzedawały bądź działały w środowiskach produkcyjnych i nie są to strony WWW w Wordpressie? Piszesz o jeszcze 2-3 latach na Juniora więc zadam nieśmiałe pytanie ile Ty musiałeś się uczyć Javy żeby ktoś chciał zapłacić za Twoje umiejętności?

Pozostało 580 znaków

2018-09-20 11:36
4

findAllByOrderDoneFalseAndOrderReadyTrueAndOrderPackedTrueAndDeliveryDocumentsCreatedFalseAndDeliveries

:D Ja rozumiem że chciałeś dobrze to opisać, ale taka nazwa tylko utrudnia zrozumienie, bo ciężko to nawet przeczytać. Może lepiej to jakoś "biznesowo" nazwać? Rozumiem że Spring-Data ci tu generuje metodę, ale to wtedy możesz ewentualnie zrobić wrapper jakiś ludzki na to.

Jeśli chodzi o jakoś to jedna sprawą jest to że masz logikę wepchniętą (serio, REST calle w kontrolerze, pagowanie odpowiedzi z bazy itd) np. tutaj:
https://github.com/mhtusz/ord[...]ntroller/OrderController.java
i tutaj:
https://github.com/mhtusz/NBP[...]ontroller/HomeController.java

ale sam kod tej logiki też jest taki sobie, skomplikowany, długi, zagnieżdżone warunki. Zelecam ćwiczenie: napisz do tego kodu testy z 100% pokryciem. Jeśli pisanie testów będzie "bolesne" to znaczy ze z kodem jest coś nie tak.

Piszesz o jeszcze 2-3 latach na Juniora więc zadam nieśmiałe pytanie ile Ty musiałeś się uczyć Javy żeby ktoś chciał zapłacić za Twoje umiejętności?

Hmm no tutaj na forum jestem od 2004, programowałem juz trochę wcześniej, załóżmy że koło 2003, pierwszą pracę dostałem w 2011 roku, na 3 roku studiów...


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2018-09-20 11:37
Pierwsze zdanie z tego wpisu idealnie nadaje się do innego działu tego forum - prychłem mocno. - lubie_programowac 2018-09-20 15:21

Pozostało 580 znaków

2018-09-20 11:59
2

Aktualna praca mnie znudziła i chciałbym zostać programistą

Jedna uwaga, to jest jakiś taki standardowy argument w stylu "mam nudną robotę a w programowaniu to robia!". Prawda jest tak że nasza praca bywa szalenie nudna i to szczególnie jak trafi ktoś trafi do korpo systemu. Nie wiem skąd przeświadczenie że większość programistów robi porywającą rocket science.


We are the 4p. Existence, as you know it, is over. We will add your biological and technological distinctiveness to our own. Resistance is futile
edytowany 1x, ostatnio: revcorey, 2018-09-20 11:59

Pozostało 580 znaków

2018-09-20 13:00
2

Autor odkrył, że jednak nauka programowania to nie kilka dni, miesięcy, tylko kilka lat. Tak właśnie działają kursy programowania. Nie znam nikogo, kto dostałby pierwszą pracę nawet po pół roku intensywnej nauki, znam jedną osobę, której po roku się udało, ale ta osoba siedziała praktycznie całymi dniami przez rok i nie wychodziła z domu, tak więc. Z moich znajomych większość zaczynała programować w technikum i pierwsza praca na 2/3 roku studiów to standard.

Na pocieszenie mogę powiedzieć, że taki lekarz czy prawnik to musi uczyć się intensywnie przez 6-7 lat, a potem ciągle na bieżąco dokształcać, tak więc te 2-3 lata nauki na juniora to jest naprawdę ułamek w porównaniu do innych zawodów.

;p nie wiem czy porównywanie klepacz kodu do lekarza jest na miejscu. - KageYoshi 2018-09-20 13:02
Masz neurochirurgów ale masz też lekarzy w wiejskiej przychodni którzy przepisują homeopatię, z drugiej strony masz klepaczy formatek i masz ludzi którzy piszą soft do sterowania rakietami. Jest pewna wyraźna przepaść między nimi ;) - Shalom 2018-09-20 13:06
Jest ale nie każda osoba zaczynająca temat chce od razu bawić się w SpaceX. Tak samo nie każdy lekarz będzie wycinał glejaki. Bardziej chodzi tutaj o robienie z pewnych zawodów jakiegoś Sacrum. Zawód jak zawód, dla jednych narzędziem jest dłuto, dla innego to IDE + klawiatura. W wielu przypadkach junior obejdzie się bez szerokiej wiedzy w danym temacie, w przypadku lekarza już niekoniecznie może zakończyć się to szczęśliwie. Przez parę lat ludzi bawiło to jak studenci prawa każdemu muszą obwieścić swój kierunek, teraz wygląda tak jakby studenci informatyki zaczynali to samo - KageYoshi 2018-09-20 13:13
@KageYoshi lekarz też się z jakiegoś powodu specjalizuje. ;) Jest taki dowcip, że internista dużo wie a mało umie, chirurg odwrotnie, a patolog i dużo wie i potrafi, tylko po co mu to :P - alagner 2018-09-20 13:19
Uwielbiam ludzi którzy po łebkach czytają wątek i wyciągają z góry założone wnioski po jego temacie. Dziwię się, że tacy się odnajdują w zawodzie programisty w którym umiejętność analizy i syntezy danych jest tak ważna. W moim pokoleniu osoby które szły od technikum to Ci którym się nie udało, czy na tej podstawie można wyciągać o Tobie wnioski czy byłaby to nadinterpretacja? Wszystkim za merytoryczne odpowiedzi serdecznie dziękuję bo są dla mnie cenne a konkretna krytyka motywuje do pracy. - Michal74 2018-09-20 14:15

Pozostało 580 znaków

2018-09-20 13:19
0
Shalom napisał(a):

findAllByOrderDoneFalseAndOrderReadyTrueAndOrderPackedTrueAndDeliveryDocumentsCreatedFalseAndDeliveries

:D Ja rozumiem że chciałeś dobrze to opisać, ale taka nazwa tylko utrudnia zrozumienie, bo ciężko to nawet przeczytać. Może lepiej to jakoś "biznesowo" nazwać? Rozumiem że Spring-Data ci tu generuje metodę, ale to wtedy możesz ewentualnie zrobić wrapper jakiś ludzki na to.

Jeśli chodzi o jakoś to jedna sprawą jest to że masz logikę wepchniętą (serio, REST calle w kontrolerze, pagowanie odpowiedzi z bazy itd) np. tutaj:
https://github.com/mhtusz/ord[...]ntroller/OrderController.java
i tutaj:
https://github.com/mhtusz/NBP[...]ontroller/HomeController.java

ale sam kod tej logiki też jest taki sobie, skomplikowany, długi, zagnieżdżone warunki. Zelecam ćwiczenie: napisz do tego kodu testy z 100% pokryciem. Jeśli pisanie testów będzie "bolesne" to znaczy ze z kodem jest coś nie tak.

Dzięki :)
Tak, te nazwy metod to są ani śmieszne ani wygodne - chciałem sprawdzić do jakiego stopnia to potrafi działać w Springu ale przy dodaniu DISTINCT do takiego pociągu już przestaje :)
Kod logiki wyrzucę do innej klasy mam świadomość, że jej nie powinno być w kontrolerze.
Wraz z nauką tego Springowego MVC logika rosła od zera (przekazania findAll) do stronicowania, filtrowania bazy i przekazywania innych elementów modelu do widoku.
Zdecydowanie czas na refaktoryzację.

Aplikacja NBP to był super szybki projekt na kilka godzin w celu potestowania REST Calla, Dodawanie tabel NBP do bazy dorobione rzutem na taśmę. Masz rację, że powinienem zadbać o publikowanie tylko skończonego kodu, który nadaje się do pracy grupowej.

Testy jednostkowe to coś czego się uczę aktualnie i o ile przy prostych klasach są one łatwe o tyle w Springu ze Spring Data wymagają więcej czasu na zapoznanie się z tematem.
Nie chcę stosować metody copy-paste z innych projektów bo nauka z tego jest niewielka.

Pozostało 580 znaków

2018-09-20 15:14
0
Shalom napisał(a):

https://github.com/mhtusz/ord[...]ntroller/OrderController.java

Shalom znalazłem chwilę i zacząłem refaktoryzować ten kod kontrolera.
Zrobiłem klasy PagingService i ProductionOrderService i do nich wyrzucam całą logikę.
Czy sprawdzenie parametrów requesta dotyczące stronicowania i opisu widoku do którego nas skieruje (desc) powinienem tu zostawiać czy też wyrzucać z kontrolera?

@GetMapping("/showready")
public String showReady(Model model, @RequestParam("page") Optional<Integer> page,
        @RequestParam("size") Optional<Integer> size,
        @RequestParam("desc") Optional<String> desc

) {

    if (page.isPresent()) currentPage = page.get();
    if (page.isPresent()) pageSize = size.get();    

    Page<ProductionOrder> allOrders = productionOrderService.getReady(currentPage,pageSize);
    List<Integer> pageNumbers = pagingService.getPageNumbers(allOrders.getTotalPages());

    if (desc.isPresent()) model.addAttribute("desc", desc.get());   
    model.addAttribute("pageNumbers", pageNumbers); 
    model.addAttribute("allOrders", allOrders);
    return "showAll";
}

Pozostało 580 znaków

2018-09-20 15:31
1

Kontroler generalnie powinien zawierać:

  • call do walidatora, jeśli konieczne
  • call do serwisy z logiką
  • zwrócenie danych/widoku

Przyjmowanie Optional jako paramerów to zły pomysł. Spring MVC ma możliwość oznaczenia parametru requestu jako nie-mandatory i tak to należy robić.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0