Początek z programowaniem

@Frankfurterium

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.

Tja, i ci koderzy umierają z głodu…

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.

  1. W celach edukacyjnych nie pisze się dużych aplikacji.

  2. 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.

Każdy z Was ma trochę racji.

Początkującym proponuję zacząć od nauki logicznego myślenia.

Bo 40% składni to nawias otwierający, a kolejne 40 nawias zamykający. Trudno o coś mniej skomplikowanego :stuck_out_tongue:

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 :wink:

O aż takie podstawy Lispa mi nie chodziło. Potrafię już napisać kalkulator (a co!) :stuck_out_tongue:

Ale drugi link jest idealny. Podziękował :wink:

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. :expressionless:

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?

Może po to, żeby nie być kompletnym ignorantem?

Dwie to zbyt dużo?

Ja również.

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ś.

Mylisz demokrację z doświadczeniem.