komentarze
WibowitZobacz profil
Poziom ostrzeżenia: 0%
Wibowit2017.10.07, 00:31
borizm @ 2017.10.05 10:54  Post: 1099493
7. Ten uśmieszek na końcu mojej wypowiedzi jednak coś znaczył. Nie stanie się to w 5 lat, czy może nawet 10, ale trend zmierzania do posiadania uniwersalnych deweloperów, mogących robić frontend, backend, może i middleware, oraz procedury składowane, pozostaje faktem - szczególnie w ujęciu Scrum, gdzie każdy jest deweloperem i każdy potrafi wszystko. Technologie oparte o JavaScript oferują to już dziś.

Scrum nie ma nic wspólnego z fullstackiem, no może prawdopodobnie oprócz tego, że usłyszałeś o nich w podobnym czasie. Ja sam jestem full-stackiem od zawsze (robiłem GUI webowe, w Swingu, piszę zapytania SQL, skrypty bashowe, ale przede wszystkim tworzę backend), ale z frontendem idzie mi dość słabo, podobnie zresztą jak i kolegom fullstackowcom z zespołu. Bycie ekspertem we wszystkim jest po prostu niemożliwe, bo czas nie jest z gumy. Dalej też nie widzę zysku z wciskania jednego badziewnego języka we wszystkie możliwe miejsca. SQLa na pewno nie zastąpisz JavaScriptem - zresztą znajomość składni SQL jest najmniejszym problemem, gdy pojawiają się problemy z bazką. Najwięcej czasu zajmuje ogarnięcie tego jak baza optymalizuje zapytania i odpowiednie dostosowanie zapytań, indeksów i struktury bazy danych. Podobnie z GUI webowym największym problemem zwykle nie jest JavaScript, a CSS czyli wiecznie rozjeżdżająca się strona.

borizm @ 2017.10.05 10:54  Post: 1099493
3. Ogólne założenie GWT było: pozwolić deweloperom Java robić robotę web deweloperów ze znajomością JavaScript. Podobnie było z JSF, tylko JSF miało dodatkowe założenie: sprzedać jak najwięcej serwerów, bo rendering HTML był bardzo wydajnościowo-żerny, a Sun produkował właśnie serwery.

No to chyba w Sunie pracowali cudotwórcy marketingu - wybierz JSF, a zajedziesz 10x więcej serwerów! Ta perspektywa na pewno pomogła Sunowi sprzedać tuziny serwerów.
A tak na poważnie to JSF jest zasobożerny dlatego, że jest serwerowym frameworkiem stanowym, a programiści rzadko kiedy staraja się zoptymalizować rozmiar stanu. Przez to rozmiar pojedynczej sesji puchnie i cierpi na tym skalowalność. JSF powstało 2 lata przed jQuery, nie mówiąc już o popularyzacji SPA, które nastąpiło lata później. Dzisiaj stan trzyma się u klienta (w przeglądarce), a to oznacza znacznie mniejsze problemy ze skalowalnością GUI. 100 MB stanu na sesję to dzisiaj niewiele jeśli sesja trzymana jest w przeglądarce (taki Chrome 100 MB zjada na starcie). Jeśli jednak na serwerze trzymamy 100 MB sesji na użytkownika to zaledwie 10 aktywnych sesji naraz oznacza 1 GB zajętej pamięci po stronie serwera.

borizm @ 2017.10.05 10:54  Post: 1099493
4. Już ~16 lat temu istniały specjalizowane wielordzeniowe (48 czy 64 rdzenie) rozwiązanie sprzętowe do wykonywania bytecode Java - niestety nazwy nie pamiętam.

Przejrzałem historię procesorów SPARC i żadnego specjalnego wsparcia dla bajtkodu Javowego nie znalazłem. Nie dość, że masz wiedzę przestarzałą o 16 lat to jeszcze nie wiadomo czy ci się to w ogóle nie przyśniło. Z tego co teraz udało mi się znaleźć wynikają zupełnie odwrotne wnioski do twoich. Jeden z eksperymentów Suna to MAJC https://en.wikipedia.org/wiki/MAJC czyli procesor zupełnie nieprzystosowany do wykonywania bajtkodu Javowego (jeszcze mniej niż x86, bo VLIW wydajność opiera na wykonywaniu wielu instrukcji jednocześnie, a to stoi w zupełnej sprzeczności z ciągłymi operacjami na stosie), ale strategią Suna było JITowanie bajtkodu do specyficznej dla danej wersji procesora architektury VLIW. Innym projektem jest PicoJava https://en.wikipedia.org/wiki/PicoJava ale to jest rozwiązanie do systemów wbudowanych, gdzie pełnoprawnego JITa się nie zmieści.

borizm @ 2017.10.05 10:54  Post: 1099493
Co do optymalizacji wykonywania bytecode, to przykładu Ci ot tak z głowy nie podam, a szukać nie mam teraz czasu. Zasadniczy problem jaki widzę, to gdy operuje się tylko na stosie, jest to założenie, które dużo upraszcza, bo wiadomo że po każdym przekazanym argumencie trzeba posprzątać stos, a gdy przekazuje się to przez rejestry, to jest kwestią mocno dyskusyjną przez jakie, przez ile rejestrów, ale zakładając, że bytecode pozostaje po staremu, wydaje się to w sumie możliwe, że JIT zawsze będzie optymalizował to w ten sam sposób między wywołaniami bytecode-bytecode, ale co z konwencją wywoływania JNI i kodu natywnego JVM, którego JIT przecież nie kompiluje, ani nie jest w stanie (jak na razie) zrekompilować z asm do asm, zniemiając konwencję wywołania na jakąś wersję __fastcall? Trochę robi się ryzykownie, tak to optymalizować i to jeszcze w zależności od architektury i typu procesora.

Wykonywanie funkcji z biblioteki z kodem natywnym to zupełnie inna rzecz niż JITowanie Javowego bajtkodu. Jeśli piszę w C++ i dołączam bibliotekę DLL to kompilator też mi magicznie nie podmieni konwencji wywołania. Sama konwencja wywołania funkcji to też jeden z mniejszych problemów podczas wywołań JNI. Największym problemem jest to, że pamięć jest zarządzana i to uniemożliwia swobodne przekazywanie referencji do obiektów z kodu Javowego do kodu natywnego. Wyjścia są (co najmniej) dwa. Jedno to blokowanie odśmiecacza pamięci na czas wywołania JNI - wtedy mamy pewność że GC nie przemieści nam obiektu. Drugie rozwiązanie to alokowanie dodatkowej pamięci poza stertą zarządzaną przez JVMa i kopiowanie danych w tą i w tamtą. Oba rozwiązania są kosztowne. Z drugiej strony powstaje jednak rozwiązanie, które pozwoli na zredukowanie narzutu na wywołania kodu natywnego, a nawet na inline'ing pomiędzy bajtkodem Javy, a bitkodem LLVMa. Rozwiązaniem tym jest GraalVM/ Sulong: https://github.com/graalvm/sulong . Z benchmarków wynika, że Sulong osiąga średnio jakieś 70% wydajności clang -O3 i to mimo tego, że Sulong sandboxuje bitkod LLVMa, tzn wprowadza wszędzie sprawdzenia wskaźników tak by kod LLVMowy nie nadpisał nie swojej pamięci (bo to naruszyłoby bezpieczeństwo JVMa, który zresztą zachowałby się nieprzewidywalnie).
peetersonZobacz profil
Poziom ostrzeżenia: 0%
peeterson2017.10.07, 19:43
borizm @ 2017.09.29 23:47  Post: 1098356
peeterson @ 2017.09.29 19:24  Post: 1098301
(...)

5k brutto to tygodniówka u programistów :)

Tak, ale na B2B, zanim zapłacisz podatek i ZUS i jak się wstrzeliłeś z umiejętnościami i doświadczeniem w projekt (zwykle nieciekawy). Zwykły programista rzadko tyle dostaje, no chyba że na zachodzie, ale to podatki i socjal dochodzą nawet do 60% (jak Belgia), więc ląduje się z kwotą netto często gorszą niż w Polsce.

Mówię tylko z własnego doświadczenia :)
Funkcja komentowania została wyłączona. Do dyskusji zapraszamy na forum.