Konkretny zakres wiedzy dla juniora

0

Witam, mam pytanie. Przeszukuje oferty pracy dla juniora Java i w każdej stoi wymaganie : Java na dobrym poziomie, albo Java na bardzo dobrym poziomie. I tak właściwie co to znaczy? W celu zobrazowania wziąłem do ręki książkę: Java Kompendium Programisty Herbert Schildt, i chciałbym się dowiedzieć w przybliżeniu ile procent książki trzeba umieć na poziom dobry i poziom bardzo dobry. Wiem że to pokrętna metoda, ale na taki pomysł wpadłem. Np na poziom podstawowy musisz umieć 30% z książki itd. Co sądzicie?

2

Nikt Ci nie powie czy musisz umieć 30% książki X i 25% książki Y. Musisz umieć to czego od Ciebie oczekuje przyszły pracodawca. A jak się tego dowiedzieć? Google, blogi, rozmowy rekrutacyjne, portal nofluffjobs jest też spoko bo masz wyszczególnione wymagania do ofert pracy. Ja też szukam pracy jako junior i kiedys myślałem w ten sposób jak Ty, że przeczytam książkę i będe umiał Jave. Ale to tak nie działa. Musisz poznac składnię języka i później programować, programować, programować....

0

to zalezy od firmy, zespolu, rekrutatora i pewnie 10 innych czynnikow.
swoja droga to wydaje mi sie niebywalym zeby liczyc na zatrudnienie w zawodzie po przeczytaniu 30% ksiazki do podstaw technologii ;)

1

Nie ma czegoś takiego, że masz umieć 30% książki o Javie. Masz umieć 100% tej książki, bo składnia języka to akurat zupełna podstawa i to nie jej znajomością różni się mid od juniora.

5

Żeby kandydować na Juniora powinieneś znać w 100% jedną książkę, na Regular dwie książki, a na Seniora trzy książki.

0

Chyba nie zrozumieliście pytania, nie chodzi o to kto jak zatrudnia i co wymaga, tylko jak realnie ocenić poziom wiedzy danego języka na podstawie źródła (kompendium programisty będzie w miarę ok, pi razy drzwi). Dlatego wybrałem w miarę najogólniejszą książkę. I chodzi o to jak teraz określić swój poziom. Przecież jeśli w wymaganiach jest dobra znajomość to nie znaczy kompletna znajomość. Przecież junior nie musi umieć wszystkiego (argument: wymagania: pierwsze projekty w okresie studiów). I teraz w sumie pytanie zawęża się do osób które tą książkę mają / czytali / przeglądali.

1

100% bo książka to jest najpewniej tylko opis składni a tą musisz po prostu znać. To trochę jakbyś pytał ile literek z alfabetu trzeba umieć żeby pisać książki. Pytanie jest zupełnie źle postawione i na błędnym poziomie abstrakcji.
Ta wymagana "dobra znajomość" oznacza że otwierasz dowolny kod w projekcie i rozumiesz co czytasz, a nie łapiesz się za głowę widząc sygnaturę w stylu:

public <T extends OutputType, S> T runQuery(Query<S> query, Function<S, T> converter);

Można by polemizować czy juniorowi potrzeba od razu rzeczy z Effective Java czy Java Concurrency in Practice, pewnie nie.

0

No więc co świadczy o podstawowej, co o dobrej, a co o bardzo dobrej znajomości Javy? Tzn jakie są wymagania aby wskoczyć już na poziom dobry z podstawowego i na bardzo dobry z dobrego?

0

Jak chcesz sobie to tłumaczyć w ten sposób, to na przykład znajomość pętli i warunków, ale generyków juz nie to poziom podstawowy. Ale tym tokiem myślenia do każdej roboty wymagany jest poziom bardzo dobry.

0

No właśnie próbuję usystematyzować jakoś ten zakres, ale widzę że chyba jest nie wykonalne.

0

@Stang ja bym powiedział ze:

  1. Jeśli umiesz używać, to jest to poziom 1 (tzn znasz składnie języka i potrafisz napisać cokolwiek, nie łapiąc sie na tym że nie znasz konstrukcji języka, która jest ci potrzebna)
  2. Jeśli rozumiesz jak to wszystko działa na poziomie języka, to jest to poziom 2 (tzn. wiesz np. na czym polega java memory model, wiesz co to jest parkowanie wątków, wiesz co to są monitory itd)
  3. Jeśli rozumiesz jak to wszystko działa jako całość, to jest to poziom 3 (tzn. wiesz jak się to mapuje na sprzęt na którym soft działa, co kiedy i jak robi GC, co kiedy i jak robi JIT itd)

Generalnie póki nie jesteś na poziomie 2 to nie zaprojektujesz dobrego kawałka bardziej złożonego kodu, a bez poziomu 3 nie zaprojektujesz sensownej architektury.

0

parkowanie wątków

@Shalom: co to znaczy? Może ew. podaj angielski odpowiednich tego sformułowania

Swoją droga, moi koledzy z poprzednich lat z pracy z doświadczeniem po 5-10 lat nie wiedzieli czym sie różni Callable od Runnable albo co to zmienna effective final, troche slabo bo w skali Shalom to poziomu 2 nie mieli :D

1

@scibi92: ale to sie tak nazywa też po angielsku. Chodzi o to, że wątek może zostać wstrzymany tylko w pewnych konkretnych "bezpiecznych" punktach (safepoint). Pewne operacje wymagają żeby wszystkie wątki były wstrzymane (np. klasyczne stop-the-world w GC czy thread/heap dump), inne operacje jak thread scheduling wymaga zatrzymania takiego czy innego wątku. Da się jednak napisać kod, który nigdy nie wchodzi w taki "bezpieczny" stan przez długi czas i zwyczajnie próba zaparkowania tego wątku będzie wisieć. To może spowodować bardzo trudne w diagnozowaniu problemy, bo w takiej sytuacji ani nie ma jak zrobić threaddumpa ani w zasadzie diagnozować za bardzo, bo nagle "nic nie działa".

Do poczytania: http://blog.ragozin.info/2012/10/safepoints-in-hotspot-jvm.html
Oraz przykład sytuacji gdzie wątek nie może wejść długo w safepoint: https://stackoverflow.com/questions/20134769/how-to-get-java-stacks-when-jvm-cant-reach-a-safepoint

To żadna tajemnica, że staż pracy niekoniecznie przekłada się na umiejętności. Można przez te 10 lat klepać CRUDy z szablonu.

0

Junior, mid senior to nie są żadne tam stopnie wtajemniczenia, tylko widełki płacowe w firmie, albo wręcz taka niby "ścieżka awansu". Ale żeby pójść do pracy jako programista Java, to warto byłoby jednak ten język znać. Można ewentualnie nie wiedzieć do końca po co się używa gdzieś tam interface, gdzie indziej klasy abstrakcyjnej, ale składnię języka należy znać w 100% Dodatkowo przynajmniej część biblioteki standardowej - operacje na strumieniach (I/O), kolekcje, operacje na stringach, biblioteka math.

0

@Shalom: Możesz jeszcze podrzucić jakieś dobre materiały, które mogą pomóc przeskoczyć na poziom 2? Co pisać, żeby zetknąć się z takimi zagadnieniami w praktyce?

2

Strasznie się z tymi safepointami zapędziłeś. Babram się z dziwactwami na produkcjach latami, a safepointy nawet nie kojarze, żeby mi jakoś wylazły. (Trochę zawsze psują sampling cpu - ale tony innych rzeczy zaburzają profilingi - normalka). To jest szczegół implementacyjny Oracle HotSpot JVM i z tego co kojarze pracują, nad tym, żeby był njak najmniej widoczny. W specyfikacji JVM tego nie ma. Ergo, jak większość tego typu ciekawostek, któregoś pięknego dnia zniknie i stanie się wiedzą bezużyteczną jak wychodzenie na ramke w Commodore 64. Użytecznośc obecna też jest nikła - trzeba mieć dużego pecha.

Co do reszty się zgadzam - aczkolwiek fakt jest taki jest taka, że programiści JavaEE / Springa w zasadzie mają marne szanse poznać cokolwiek związanego z wątkami na niższym poziomie, po prostu ich framework zabrania im się bawić, a jak coś zrobią to pewnie wybuchnie.
I potem mam arcihtektów 10 lat w Springu, którzy kilka razy widzieli słówko synchronized, i ani razu volatile. Btw. zresztą w sumie nie wiem czy to tak strasznie, może warto by zaznaczać : senior springa - junior javy.

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