O poziom niżej

Odpowiedz Nowy wątek
2018-06-03 16:02
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ć.

Pozostało 580 znaków

2018-06-03 16:35
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.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 3x, ostatnio: Wibowit, 2018-06-03 16:42

Pozostało 580 znaków

2018-06-03 16:58
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.

Pozostało 580 znaków

2018-06-03 17:15

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.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit, 2018-06-03 17:16

Pozostało 580 znaków

2018-06-03 17:42
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?

Pozostało 580 znaków

2018-06-03 18:02
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ć.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2018-06-03 18:03
Dzięki wielkie ;) - NeutrinoSpinZero 2018-06-03 18:11

Pozostało 580 znaków

2018-06-03 18:06
Kwadratowy pomidor
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.

Pozostało 580 znaków

2018-06-03 18:11
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 ?

edytowany 1x, ostatnio: slayer9, 2018-06-03 18:12

Pozostało 580 znaków

2018-06-03 18:15
0

Nie tylko ja mam taki problem :D
https://softwareengineering.s[...]s/81624/how-do-computers-work

Pozostało 580 znaków

2018-06-03 18:23
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.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2018-06-03 18:29
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

edytowany 1x, ostatnio: Mikepq, 2018-06-03 18:30

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