Nie, nie dam. Jestem fanatykiem C++ i chcę bezwzględnie zrekrutować autora tego tematu do wstąpienia do mrocznej i sztańskiej sekty programistów C++. A subiektywny przekaz jest silniejszy niż obiektywny.
@Description_1
Oczywiście, że można pisać duże aplikacje w C#, czy też w czymkolwiek. Jednak te języki mają niską wartość edukacyjną. Niewiele się przy nich nauczysz o działaniu komputera, czy też systemu operacyjnego, bo stoi za nimi maszyna wirtualna, która idealizuje to działanie.
@RaveStar
Zacząłem programować w C++ posilając się książką dr Grębosza i jakoś nie doskwierały mi żadne braki wiedzy z dziedziny architektury komputerów. Później poznałem asemblera i fakt - miałem parę przebłysków “a więc to taaaaaaak”. Jednym zdaniem: znajomość asemblera podnosi poziom programu napisanego w C++ i zwiększa jego wydajność. Ale co to ma wspólnego ze wczesną edukacją? Na wszystko przyjdzie czas a do asemblera można się co najwyżej zniechęcić zwłaszcza, jeżeli uczysz się indywidualnie. A tak w ogóle to wyolbrzymiasz problem. A jeżeli już mowa o studentach, to zapalony student sam sobie znajdzie odpowiedź na takie zagwostki a przeciętny nawet się tym nie przejmie, byle by zdać a zdać jest żałośnie łatwo.
To na pewno, dlatego lepiej zaczynać od normalnego C.
Czego niby się nie da? Jeśli nie znam ASMa, to nie wiem co to zmienna?
Nie ma czegoś takiego jak “komórka pamięci w C++”.
■■■? Jeśli się przeczyta uważnie, to się wie, gdzie ona powinna być.
W porządnej książce będzie wyjaśnione (a nawet narysowane), jak zmienne układają się w komórkach pamięci, jak to wygląda w przypadku tablic, na co wskazuje wskaźnik i jaki ma rozmiar.
W celach edukacyjnych nie pisze się dużych aplikacji.
Jeśli ktoś chce się nauczyć instrukcji języka programowania, to nie potrzebuje się uczyć o działaniu komputera ani systemu operacyjnego.
Ja jestem takim “koderem” i nie narzekam. Jak czytam Waszą dyskusję o ASM,C,C++ to szczerze przyznam że z częścią o tym czym piszecie nie miałem nigdy styczności a jakoś w pracy realizuję wszystko to czego potrzebuje klient a nie są to zwykłe strony.
Myślę że takie zarządzanie pamięcią było ważne 10lat temu kiedy aby program był szybki trzeba było się mocno napocić. Dzisiaj mamy sprzęt wydajny a różnice są znikome, niezauważalne.
Zgodzę się z tym, że C jest stare, a C++ porąbane, ale to jeszcze nie powód, żeby zaczynać od języka, w którym nic ciekawego nie można zrobić. Myślę, że dla początkującego (a przynajmniej większości początkujących) sens ma język, który nauczy powszechnych elementów składni i pewnego, że tak powiem “programistycznego alfabetu”, a nie operowania na rejestrach procesora. Działające abstrakcje bardziej się przydadzą niż malutkie cegiełki siedzące gdzieś głęboko pod spodem.
Bo 40% składni to nawias otwierający, a kolejne 40 nawias zamykający. Trudno o coś mniej skomplikowanego
Za to przestawienie się na odpowiedni sposób myślenia - jak dla mnie trudniejsze niż nauczenie się podstaw OO…
Btw. znasz coś lepiej wprowadzającego do Clojure niż to i prelekcja Uncle Boba?
Póki co nie zamierzam z tego robić głównego obiektu zainteresowań, ale raczej lepiej uczyć się funkcyjności na mocno funkcyjnym Clojurze tym niż na trochę funkcyjnej Scali
Jasne, że ASM może dać przewagę w jakimś 1% tworzonych aplikacji. Ale to wcale nie znaczy, że zaczynanie od niego jest dobrym pomysłem. Równie dobrze można zacząć od Scheme i poznać cegiełki później (piszę w tym momencie o znanym mi gościu zajmującym się zawodowo RE, który chyba ideę zaczynania od ASM by raczej wyśmiał niż skrytykował).
Tak w ogóle, to w wymienionych przez Ciebie dziedzinach coraz mniej wykorzystuje się CPU, więc nauka ASM na CPU teraz niewiele da.
To jest naprawdę fascynujące, jednakże dla mnie “programistyczny alfabet” to pojęcia takie jak: iteracja, rekurencja, funkcja, zmienna, stała, tablica, mapa, lista, strumień, itd., itp., a nie składnia C, więc o co Ci chodzi?
I hurtowo pisze się wielowątkowe aplikacje w ASMie?
Od wielu już lat CPU są mniej wydajne i rozwijają się wolniej niż GPU.
Wiesz co oznaczają dwie pierwsze litery skrótu GPGPU?
Z obliczeń numerycznych nie ma co drwić, bo żadne CADy, CAE, medycyna, chemia, biologia czy fizyka się bez nich nie obejdą. A GPGPU pozwala je znakomicie przyspieszyć. Lista zastosowań jest dość długa, np.: http://en.wikipedia.org/wiki/GPGPU#Applications a będzie na pewno jeszcze dłuższa, bo GPGPU to dość nowy temat. Nie sądzę, żeby dodali obsługę OpenCL do Photoshopa, gdyby mogli coś wycisnąć z CPU.
Piszesz tak, jakbym napisał, że CPU trzeba w ogóle usunąć z komputerów.
Ale w czym problem?
Nie sądzę, żeby programiści Clojure nie wiedzieli co to są tablice i zmienne, jeśli tacy się zdarzają, to muszą być naprawdę niedouczeni. Chociaż, z drugiej strony, wielu programistów Javy nie wie, co to są wskaźniki, więc może w tym światku to jest normalne.
Ja jednak uważam, że pewne rzeczy po prostu trzeba wiedzieć.
Jeżeli do Clojure przeszli nie z Javy, tylko z Lispa, to dlaczego kiedykolwiek mieliby przejmować się czymś, co w ich świecie nigdy, przenigdy nie występowało?
A kto powiedział, że na GPU mają być kompilowane systemy operacyjne? Zastanów się w ogóle, co piszesz.
I to APU zawiera w sobie GPU, które jest używane w celu realizacji GPGPU.
Jak na razie nie prześcigniesz w ASM na CPU implementacji obliczeń, które mogą wykonać GPGPU, więc wybór ASM ze względów wydajności obliczeń numerycznych to pomyłka.
Na tej samej zasadzie nie powinno się pisać w ASM na x86, bo gdy Intel się zwinie, to kod stanie się bezużyteczny.
Idź na całość i dodaj wszystkich, którzy mają inne od Ciebie zdanie i piszą o faktach, bo jak widać, takie sytuacje Cię po prostu przerastają.
Taka mała uwaga - wątek dotyczy wyboru języka na początek programowania, nie pracy jako programista asemblera w Dallas.
Zdecydowana większość programistów nie zaczynała nauki od ASM, a jednak wbrew Twoim obawom rozumieją, czym są zmienne, więc niestety świat nie działa tak, jak sobie wymyśliłeś.