O poziom niżej

0

Programuję od 9 miesięcy codziennie. Wciągnęło mnie to, ale nie tak sobie to wyobrażałem przed rozpoczęciem przygody.
Chyba nie ma nic trudnego w Javie i waleniem CRUDów w Springu.
Chciałem tworzyć coś swojego, ale czuję, że składam tylko gotowe klocki. Spring ma gotowe moduły i tylko wystarczy skonfigurować je i wychodzi gotowa apka.
JavaFX to samo, wszystko gotowe.

Chodzi mi o to, że nie studiowałem informatyki i nie wiem jak się zabrać za to co na prawdę bym chciał.
Pytań, na które chciałbym znać odpowiedź jest wiele. Np.:

  • RestTemplate - wysyła JSONa protokołem HTTP no i? To wszystko? Ja chciałbym wiedzieć, co i jak konkretnie się dzieje, w jaki sposób odbywa się ten transfer danych.
  • javaFX - wyskakuje okienko po napisaniu 5 linijek kodu. A jak to wszystko wykonuje ukryta implementacja JVMu ? Co tam się dzieje pod spodem.
  • albo np. jak JDBC pobiera dane z bazy dancyh, jak to się konkretnie odbywa.
  • czy jak odpalić program na czystym hardware
    Wiele wiele innych pytań mi się ciągle nasuwa i się tylko martwię, że nie wiem jak ugryźć temat. Assemblery, C czy co...

Jak wdrożyć się w podstawy niskopoziomowego programowania?
Właściwie to to mnie ciekawi. W którą stronę iść i czy w ogóle bez wieloletnich studiów informatycznych jestem w stanie się tego nauczyć.

2

A jak już się dowiesz jak się to okienko rysuje to co wtedy? Zajmiesz się wypasem owiec w Bieszczadach?

RestTemplate - wysyła JSONa protokołem HTTP no i? To wszystko? Ja chciałbym wiedzieć, co i jak konkretnie się dzieje, w jaki sposób odbywa się ten transfer danych.

Nie musisz pisać w C czy innym asemblerze, by zarządzać połączeniem sieciowym manualnie. Dla przykładu Akka modeluje TCP/IP jako wiadomości w aktorach: https://doc.akka.io/docs/akka/2.5/io-tcp.html Jak już będziesz wiedział jak TCP działa na aktorach to łatwo będzie zrozumieć co się dzieje z TCP w strumieniach: https://doc.akka.io/docs/akka/2.5/stream/stream-io.html A strumienie Akkowe mają mechanizm backpressure zgodny z mechanizmem backpressure wbudowanym w TCP.

W Javce masz Sockety i ServerSockety. Praktycznie to samo dostaniesz w C. Po socketach lecą też dane z bazy danych - sterowniki JDBC chyba używają właśnie Javowej implementacji socketów.

Wczytywanie danych z dysku kończy się na wywołaniu metody systemowej nawet w C czy asemblerze, a więc nie ma znaczenia w jakim języku piszesz. No chyba, że chcesz odpalić program na czystym hardware, ale wtedy zakodowanie prostego programu będzie trwało wieki. Możesz sobie poczytać o działaniu systemów operacyjnych, ale budowanie własnego OSa (w praktyce to wymyślanie koła od nowa) raczej szybko się znudzi.

javaFX - wyskakuje okienko po napisaniu 5 linijek kodu. A jak to wszystko wykonuje ukryta implementacja JVMu ? Co tam się dzieje pod spodem.

Java ma otwarty kod źródłowy. Metody oznaczone słówkiem kluczowym native są zwykle oprogramowane w C/ C++ lub czymś co wystawia API zgodne z C. Kod implementacji JavyFX możesz sobie przejrzeć np tutaj: https://github.com/javafxports/openjdk-jfx

Jak chcesz zobaczyć jak działa kompilowanie języków wysokopoziomowych do kodu natywnego to możesz obejrzeć nagrania tutaj: http://www.graalvm.org/community/videos/

Jak wdrożyć się w podstawy niskopoziomowego programowania?
Właściwie to to mnie ciekawi. W którą stronę iść i czy w ogóle bez wieloletnich studiów informatycznych jestem w stanie się tego nauczyć.

Ja asemblera uczyłem się w domu na własną rękę jak miałem kilkanaście lat, a dostęp do Internetu miałem wdzwaniany na godziny (dial-up). Nie trzeba do tego studiów, ale samozaparcia.

0

@Wibowit: dziękuję Ci za konstruktywną wypowiedź.
Z tą ramką to dzisiaj mi przyszło na myśl, bo chciałbym spróbować stworzyć własną bibliotekę GUI na desktopa, ale odpuszczę to na jakiś czas, postudiuję w następnych miesiącach C++ i wtedy coś pomyślę.
Zainteresuję się systemami operacyjnymi, bo na przykład ciekawi mnie jak po włożeniu płyty z systemem przed instalacją czysty harware potrafi wyświetlać GUI itd. itp.

2

ciekawi mnie jak po włożeniu płyty z systemem przed instalacją czysty harware potrafi wyświetlać GUI

Ja pisałem programiki, które działały na czystym 16-bitowym DOSie. Najbardziej standardowa metoda na wyświetlanie grafiki w takim środowisku to https://en.wikipedia.org/wiki/Mode_13h - odpalasz tryb 13h, ustawiasz paletę kolorów i rysujesz. Jeden piksel to jeden bajt, paleta ma 256 kolorów RGB (tzn karta graficzna traktuje każdy bajt z bufora graficznego jako indeks w palecie), a ilość pikseli jest mniejsza niż 2 do potęgi 16 (320 * 200 = 64000, ciut mniej niż 65536), a więc rozmiar bufora może być zaadresowany 16-bitowym rejestrem. Szczegóły np tutaj: http://atrevida.comprenica.com/atrtut07.html
Jeśli chcesz mieć lepszą grafikę to korzystasz z wyższych trybów VESA i adresowania 32-bitowego. Całość działa dzięki memory mapped I/O - możesz potraktować pamięć karty graficznej tak jak RAM systemowy i po prostu pisać do bufora o określonym adresie. Cała mechanika pod spodem dalej jest niewidoczna dla programisty.

Na jeszcze niższy poziom schodzą tylko programiści sterowników do karty grafiki, bo schodzenie niżej jest potrzebne do uzyskania wyższej wydajności oraz dostępu do pełnej funkcjonalności. Jak chcesz popatrzeć jak to się odbywa to jest otwartoźródłowy projekt https://mesa3d.org/ - zawiera sterowniki do grafiki instalowane w standardzie w dystrybucjach Linuksa. Z mojego punktu widzenia pisanie sterowników byłoby raczej nudne - w końcu do głównie czytanie specyfikacji gotowego sprzętu, API (typu OpenGL) i implementowanie kolejnych funkcjonalności oraz refaktor starego kodu (programiści sterowników też narzekają na poplątany legacy kod tak samo jak programiści Javy). Jeśli już miałbym iść w grafikę to wolałbym wymyślać algorytmy w silnikach gier.

0

Po godzinach pisania w Springu, zabieram się do ogarniania powyższego.

Jeszcze jedno:

  • Jakie byś polecił pozycje w literaturze, które są filarami powyższego?
1

Książek raczej nie czytam (tzn rzadko kiedy, bo zwykle czytam prosto z Internetu), a asma i architektury PC zacząłem uczyć się wiele lat temu (kilkanaście już). Poguglałem na szybko i znalazłem interesującą wiki: http://wiki.osdev.org/ Na początek powinno wystarczyć.

0
NeutrinoSpinZero napisał(a):

(...)
Chodzi mi o to, że nie studiowałem informatyki i nie wiem jak się zabrać za to co na prawdę bym chciał.
Pytań, na które chciałbym znać odpowiedź jest wiele. Np.:

  • czy jak odpalić program na czystym hardware
    Wiele wiele innych pytań mi się ciągle nasuwa i się tylko martwię, że nie wiem jak ugryźć temat. Assemblery, C czy co...

Jak wdrożyć się w podstawy niskopoziomowego programowania?
Właściwie to to mnie ciekawi. W którą stronę iść i czy w ogóle bez wieloletnich studiów informatycznych jestem w stanie się tego nauczyć.

To zalezy co chcesz robic w dziedzinie niskopoziomowego programowania - w jakiej dzialce. Dobrze jest znac jak dziala sprzet oraz jak wspolpracuje z nim system operacyjny - o ile oczywiscie chcesz pisac pod jakis system operacyjny. Zasadniczo masz do wyboru dwie sciezki: embeeded bare-metal albo embedded OS. Bare-metal oznacza ze piszesz soft bez dzialajacego na nim jakiegokolwiek systemu operacyjnego. Czyli piszesz bezposrednio wszystko sam - inicjalizacje pamieci, zegarow, modulow zasilajacych, etc. Druga specjalizacja to embedded OS - i tu mozesz miec rozne systemy operacyjne - np. linuxa albo jakiegos rtos-a. W tym przypadku wiekszosc inicjalizacji zwykle jest juz zrobiona i nie musisz sie tym martwic. Wiekszosc ludzi ktorych znam, a ktorzy zajmuja sie niskopoziomowym programowaniem to elektronicy. Informatycy to mniejszosc. Co do jezykow - zalecam C i assembler. Wbrew pozorom assembler przydaje sie - nawet w linuxie - np. podczas analizowania tzw. call trace'ow. Niskopoziomowe programowanie to ciekawa specjalizacja dla tych ktorzy interesuja sie tym jak dziala system operacyjny albo sprzet, chociaz jest bardzo zmudna i trudna. Niestety malo jest ofert pracy w porownaniu z front-endem.

0

A w ogóle jakie są szanse na dostanie się do działu opdowiadającego za tworzenie sterowników np do kart graficznych Nvidii albo ATI ? Jest to osiągalne w tym kraju ?

0

Niskopoziomowe programowanie to ciekawa specjalizacja dla tych ktorzy interesuja sie tym jak dziala system operacyjny albo sprzet, chociaz jest bardzo zmudna i trudna

Dla mnie klepanie małych hobbystycznych programów w czystym asmie było prostsze niż wdrażanie się w kobylasty projekt napisany w języku wysokiego poziomu i jego przerabianie. Mikrokontrolery i tym podobne rzeczy raczej nie mają oprogramowania z kodem źródłowym liczonym w setkach tysięcy linii. Nie przesadzałbym więc z tą trudnością. To raczej egzotyczność dziedziny programowania niskopoziomowego i mity na jej temat odstraszają aniżeli jej trudność. Gdyby popularność asma była taka jak np Pythona to też do asma byłoby milion tutoriali, wypasionych IDE, gotowców, forów, itp itd i programowanie w asmie stałoby się prostsze i szybsze, aczkolwiek dalej kosmicznie nieopłacalne.

2

Jeżeli interesują Cię bardziej niskopoziomowe elementy to polecam kurs From NAND to Tetris. Kurs jest dwuczęściowy, pierwsza część koncentruje się na sprzęcie, druga na części softwarowej - prosta VM, język itp.
Link

0

A mi się wydaje, że programowanie na niskim poziomie przyniesie więcej satysfakcji niż napisanie w językach wysokopoziomowych. Robisz coś sam, a nie korzystasz ze stosu bibliotek i frameworków młuconych latami.

0
Wibowit napisał(a):

Niskopoziomowe programowanie to ciekawa specjalizacja dla tych ktorzy interesuja sie tym jak dziala system operacyjny albo sprzet, chociaz jest bardzo zmudna i trudna

Dla mnie klepanie małych hobbystycznych programów w czystym asmie było prostsze niż wdrażanie się w kobylasty projekt napisany w języku wysokiego poziomu i jego przerabianie. Mikrokontrolery i tym podobne rzeczy raczej nie mają oprogramowania z kodem źródłowym liczonym w setkach tysięcy linii. Nie przesadzałbym więc z tą trudnością. To raczej egzotyczność dziedziny programowania niskopoziomowego i mity na jej temat odstraszają aniżeli jej trudność. Gdyby popularność asma była taka jak np Pythona to też do asma byłoby milion tutoriali, wypasionych IDE, gotowców, forów, itp itd i programowanie w asmie stałoby się prostsze i szybsze, aczkolwiek dalej kosmicznie nieopłacalne.

Co do mikrokontrolerow tych takich najprostszych gdzie nie ma OS-a - to sie zgodze, ale swiat idzie z postepem i powazniejsze systemy emedded staja sie coraz bardziej zawile do oprogramowania. I to mialem na mysli.

0
NeutrinoSpinZero napisał(a):

A mi się wydaje, że programowanie na niskim poziomie przyniesie więcej satysfakcji niż napisanie w językach wysokopoziomowych. Robisz coś sam, a nie korzystasz ze stosu bibliotek i frameworków młuconych latami.

Jeśli chcesz wszystko robić sam to w praktyce ograniczasz się tylko do najprostszych urządzeń typu 8-bitowe (czy tam 16-bitowe może) mikrokontrolery. Nawet BIOS/ UEFI w kompie to może być mocno skomplikowany program w porównaniu do np typowych Javowych bibliotek i tak samo jak biblioteki załatwia mnóstwo rzeczy za ciebie. Mikrokontrolery nie mają wielowątkowości (ani nawet trybów chronionych), kart graficznych czy muzycznych, obsługi myszki, itp itd Zostajesz z monochromatycznym wyświetlaczem LEDowym i podpinasz się np kablem szeregowym (zgaduję - w rzeczywistości nie pracowałem z mikrokontrolerami). Niczego skomplikowanego nie zrobisz jeśli będziesz robił wszystko od zera.

0

Fajnie jest zbudować robota od podstaw. Można się nauczyć choćby tego, że całą algorytmikę może szlag trafić, jeśli nie wyczyścisz danych z czujników przed zbudowaniem na nich jakiejś pętli decyzyjnej. Albo tego, że jak nie odseparujesz prądowo silników od mikrokontrolera, to nie wiadomo, co się będzie działo. Do tego prosty asemblerek na AVR i jest zabawa. Na studiach zbudowałem jednego robota mobilnego i nabrałem przez to wielkiego szacunku dla elektryków, mechaników, itp.

0

Czemu nie zejść jeszcze niżej? Mogę polecić tutaj playlistę, gość buduje prosty komputer można zobaczyć jak to działa po kolei:

0

Jak już tak nisko schodzimy to przed produkcją krzemowych półprzewodników należy opanować https://pl.wikipedia.org/wiki/Metoda_Czochralskiego :]

2

i czy w ogóle bez wieloletnich studiów informatycznych jestem w stanie się tego nauczyć.

Można, ale właśnie studia o tym są. Dają szeroki ogląd dziedziny jaką jest informatyka. Jeśli ktoś chce się nauczyć jak klepać CRUDy i formatki to studia są stratą czasu, ale dla kogoś kto właśnie jest zainteresowany tym "jak to w ogóle działa" polecałbym jednak zainteresować się studiami.

Szczególnie na studiach inżynierskich możesz zobaczyć jak to się dzieje z obu stron

  1. Od poziomu elektroniki, porzez układy cyfrowe, mikroprocki, asemblery, systemy operacyjne, języki wysokiego poziomu
  2. Z punktu widzenia algorytmów, parserów, kompilatorów
0

Na dobrą uczelnię się nie dostanę na bank. Na średnią uczelnię owszem, ale po rozmowach z ich absolwentami (czołowa uczelnia wschodniej Polski) chyba podziękuję ^^ Mieszkałem w akademiku kiedyś ze studentami informatyki i nie wiele umieli, a jedynie z czystej matematyki byli ciśnięci.
Pamiętam jak dziś ich nieprzespane noce i nierówną walkę z wielowątkowością w projekcie napisanym w 2h w C# ^^

1

Kiedyś tez tak miałem że e tam jakas Java, wole C... później mi przeszło. Od czasu do czasu takie coś to fajna odskocznia, ale jednak generalnie wolę się zając tworzeniem wartości, rozwiązywaniem problemów "wyższego rzędu". A umiejętność połączenia tych klocków i wyboru klocków jakie daje Ci taki Spring czy Java albo Kotlin to tez ważna umiejętność ;). Dodatkowo to są projekty open-source więc możesz dla funu dołączyć, pobawić się operacjami IO, wątkami itd (a to nie jest proste) - sam zamierzam wkrótce dołączyć do społeczności open source ;)
Oczywiście nie neguje że OP ma swoje zdanie, tylko mówie o tym że z mojego doświadczenia pisanie 20 raz listy dwukierunkowej może się znudzić :D

0

Dzięki Panowie za świetne wypowiedzi. Znalazłem stronki o moich rozkminach i będę sobie drążył.
@scibi92 ja jestem totalnym laikiem, który usłyszał, że można się przekwalifikować stosunkowo łatwo, no to zacząłem drążyć javę i te wszystkie narzędzia, frameworki itd.
Zrobiłem kilka CRUDów, RESTful API głównie i kilka klientów JavaFX i teraz dłubię Angulara trochę.
Moim celem-marzeniem jest zostanie juniorem Java, ale niespodziewanie mnie wciągnęło w informatykę ogólnie.
Od wczoraj bawię się C i to mi się podoba ;)

Nawiasem mówiąc, muszę jakoś podzielić czas, żeby cisnąć skille na Junior Java Dev, a w między czasie rekreacyjnie uczyć się low-level.
@Cr0w dzięki za linka, będę korzystał.

Jedyne co mnie nurtuje to to, czy matematyka mnie nie sprowadzi na ziemię.
Pozdrawiam

0

Co ludzie maja z ta matematyka... CRUD to CRUD. Jasne ze jak bedziesz startowac do CERNu/pisania silniku do gier/modelowania w matlabie czy czegos takiego to beda ciekawi, ale dla typowej pracy wystarczy liceum + cos o zlozonosci i strukturach. Tym nizej, tym wiecej binarngo, hexa, uzupelnieniowego i ieee754, ale bez szalu (ksiazka gyna niezle tlumaczy low level i te sprawy- teraz sobie przypomnialem ;) ).

1

RestTemplate - wysyła JSONa protokołem HTTP no i? To wszystko? Ja chciałbym wiedzieć, co i jak konkretnie się dzieje, w jaki sposób odbywa się ten transfer danych.

Akurat na ten temat jest bardzo dobra książka - "Sieci komputerowe" Andrew S. Tanenbaum

0

Dzięki. Aktualnie zacząłem czytać "Sieci komputerowe" Barrie Sosinsky. Przeczytam dwie to ugruntuję wiedzę.

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