tdudzik
2019-01-09 11:48

Od pewnego czasu jestem poniekąd zobowiązany do nauki C++. W swoim życiu programowałem, mniej lub więcej, w Javie, Scali, Pythonie, Ruby, JavaScript, PHP czy choćby C, ale tak nieintuicyjnego i skomplikowanego języka i ogólnie ekosystemu jeszcze nie widziałem. Gdybym przed studiami nigdy nie programował i kazaliby mi zacząć od C++ to pewnie nigdy nie zostałbym programistą. :D

Hispano-Suiza

Daj jakiś sample bo od studiów nie widziałem C++. Pewnie jakiś nowy standard? Najlepiej 2 sample jeden w Javie/Pythonie/JS i ten sam w C++ co by człowiek miał dla porównania :-)

ElGato

przeżyłeś JS i PHP, mocarz jesteś - dasz radę :D :D

Cr0w

z tych resztek co zostanie czesc bedzie go uwielbic, a czesc nienawidzic. prawda uniwersalna.

tdudzik

@Hispano-Suiza: problemy zaczynają się od samego początku. :D w takiej Javie czy JS korzystasz z jakiegoś mavena czy npm, masz mnóstwo bibliotek, wszystko opisane, wszystko działa. A tutaj biblioteki porozwalane po całym internecie, strony wyglądające jak z lat 90, że w zasadzie nie wiadomo czy informacje są aktualne czy nie, każdą kompiluje się inaczej, potem dodajesz taką bibliotekę do CMake, robisz zgodnie z dokumentacją/poradnikiem i nie działa xD Dostępnych jest kilka kompilatorów i to że kompiluje się jednym nie znaczy, że będzie kompilować się w drugim. Robisz projekt w Visual Studio, kolega odpala w CLion i co? Nie działa xD Potem próbujesz zrobić tak prostą rzecz jak dodanie i odczytanie wartości z HashMapy. I jak to się robi w C++? O tak: https://stackoverflow.com/que[...]est-way-to-use-a-hashmap-in-c . Jedna metoda rzuca wyjątek, druga zwraca iterator xD Nie wiem, może jest za tym jakaś głębsza logika, ale taki język nie przyczynia się zbyt do bycia produktywnym, nie mówiąc już o byciu przyjaznym dla początkujących. C++ to często pierwszy język nauczany na studiach, i zamiast zacząc od jakiegoś Pythona, żeby nauczyć ludzi po prostu programować, to męczą biednych studentów takim C++ w zasadzie nie wiem po co. Zresztą użycie komerycjne też nie jest o wiele lepsze. Mamy teraz tak dużo języków i bibliotek, że nie da się znać wszystkie. Dobrze by było, gdyby języki były proste i dość oczywiste (jak np. jakieś Go czy nawet Scala), żeby szybko można było być produktywnym wchodząc do projektu i nie znając żadnych technologii. Z C++ to raczej średnio możliwe, bo ciężko tam domyślić się czegokolwiek, bo wszystko jest robione na swój, wyjątkowy sposób. :D

Hispano-Suiza

@tdudzik: A już myślałem, że coś się popsuło w C++ jaki pamiętam. A tu widzę wszystko jest w jak najlepszym porządku jak 6-7 lat temu :-) Przeczytałem co napisałeś i tak to dokładnie wyglądało. Tylko ja się nie bawiłem w VS czy CLion, a z Sublime Text z podpiętym gcc/g++. I na ćwiczeniach nawet spoko śmigało, a na kolokwium przestało :D Mimo wszystko fajne to było i nie żałuję, że zaczynałem od (no dobra od Pascala) C -> C++. To w sumie robi fajnie odsiew myślących, że to prosta zabawa. A u mnie pogrom był z ASM i właśnie C/C++.
Chociaż uważam dziś, że można by spokojnie C czy C++ na uczelniach zastąpić Go. Pythonem może niekoniecznie bo nadal nie mogę się przyzwyczaić i polubić tego języka i jego dziwnych fanaberii rzucania errorami (zapewne z mojej winy). Z drugiej strony jak ktoś przeżyje przygodę z C i C++ to dalej już go niewiele jest w stanie zaskoczyć, a i z czasem doceni, że w takiej Javie ma Mavena/Gradle, w C# (nie pamiętam co tam było ale chyba było?), w JS npm, Go -> go doc i że tam wszystko (w 99%) działa :-)
Tak więc jak widzisz docenia się z czasem swoje przygody ze stronami z lat 90 i zastanawianiem się po 5 razie testowania innego rozwiązania - może tym razem zadziała? :D

tdudzik

@Hispano-Suiza: tzn. teraz bardzo chętnie to C++ poznam, mimo, że przyjemność z tego jest dość wątpliwa. :D Ale na początku czasem może nie wystarczyć komuś zapału, żeby zrobić coś produktywnego w C++, a może okazałby się dobrym programistą. Ja zaczynałem od PHP, dzięki temu bardzo szybko widziałem efekty swojej pracy i miałem motywację żeby uczyć się dalej. Podałem Pythona jako przykład, bo spodobało mi się jak to robią na MIT: https://ocw.mit.edu/courses/e[...]in-python-fall-2016/syllabus/ ('Calendar' na samym dole). W taki sposób rzczywiście jest to "Wstęp do programowania". :)

Hispano-Suiza

Ale na początku czasem może nie wystarczyć komuś zapału, żeby zrobić coś produktywnego w C++, a może okazałby się dobrym programistą. do czasu napotkania jakiegoś naprawdę hard problemu. Im się na początku bardziej obijesz i spotkasz większą ilość problemów tym lepiej - takie moje zdanie. Później nie panikujesz tylko przypominasz sobie, że w C++ było gorzej :D

vpiotr

W C++ są dwie głębsze zasady które jak zaakceptujesz to świat staje się prostszy (obie nie dotyczą produktywności programisty):
1) wszelkie abstrakcje języka mają być bezstratne wydajnościowo ("zero-cost abstractions")
2) jak coś jest sp... w języku to znaczy że to jest UB (taki błąd który z reguły nie jest raportowany przez kompilator tylko przez komentatorów Twojego kodu na SO).

amd

A ja uważam ze C albo C++ jako (C z klasami, czyli bardzo okrojony subset) to bardzo dobry wybór na pierwszy język na studiach informatycznych. W takiej Javie korzystasz z mavena. Tutaj masz Conana, niestety nie ma magii, jeśli masz język natywny to nigdy to nie będzie takie proste jak w javie/js. Wyjątkiem jest rust, ale tam masz źródła. Gdyby w C++ był wymóg posiadania źródeł to budowanie też było by relatywnie proste.
@tdudzik "Jedna metoda rzuca wyjątek, druga zwraca iterator xD Nie wiem, może jest za tym jakaś głębsza logika" Nie rozumiem o jakich metodach mówisz, ale fakt faktem, za 99% elementów które wydają się głupie i bez sensu istnieje głębsza logika w c++.

tdudzik

@amd a jaka jest zaleta męczenia ludźmi takimi szczegółami jeżeli nigdy programowania na oczy nie widzieli? ;)

amd

O jakich szczegółach mówisz. Mówisz o tym czym jest zmienna i jak to się magicznie dzieje że tam przechowywana jest jakaś wartość. No proszę was, to są ludzie którzy przyszli na informatykę.
(nie mowie o nauce C na biologi, tam niech jest python)
Ja znam masę ludzi którzy zaczynali i ciągle siedzą w pythonie. Na pytanie jak niektóre rzeczy działają dostaje odpowiedz ze magia. I ze oni tego nie potrzebują wiedzieć.
I zgadzam się, jak ktoś idzie na bootcamp, albo biologie to nie musi wiedzieć jak to tam wszystko działa, ale od osoby po CS oczekuje że to będzie wiedzieć.

Hispano-Suiza

@tdudzik: Taka żeby zobaczyli jak nie widzieli. Studia mają mieć wartość i mają być trudne po to żeby nie każdy był w stanie je posiadać. Niestety coraz łatwiej i to przykre bo ten papier coraz mniej znaczy. Nie przesadzajmy też z tym poziomem trudności bo ile tego C/C++ zrobisz w jeden semestr? Niewiele. I wiele nie zobaczysz.

tdudzik

@amd: mówimy o wstępie do programowania a nie o informatyce. Nie bez powodu są też takie przedmioty jak systemy operacyjne czy architektura komputerów. @Hispano-Suiza no ja mam wrażenie że nasz system edukacji od początku do końca jest zorganizowany tak żeby odsiać najsłabszych, a nie kogokolwiek czegokokwiek nauczyć :D

Tenonymous

Oj tam, czepiacie się. :P Zgoda, że może nie jest to najlepszy wybór na 1 język, jeżeli chcielibyśmy od razu poznać całego STL'a i większość kruczków[imo najlepsze jest C, bo nie ma tylu gotowych funkcji, więc uczy myślenia], ale jak już masz wprawę w programowaniu, to nauka C++ nie jest jakimś koszmarem.
Zawsze mnie też dziwią wpisy na forach o różnych problemach w C++ - jak do tej pory nie spotkałem się z niczym takim, ani w prywatnych projektach, ani w pracy gdzie mam wielkiego molocha.

tdudzik

@Tenonymous: a pisałeś kiedyś w jakimś wysokopoziomowym języku? :)

Tenonymous

@tdudzik: piszę zawodowo trochę w C#, na studiach grzebałem się w Javie i Springu - to jedne z najgorszych rzeczy jakie mnie spotkały. :( Jeżeli mam wskazać języki, dla których mógłbym zrezygnować z C++ to tylko Swift, Rust, Go, jeżeli poważniej weszłyby do zastosowań w jakich się obracam. :P

Hispano-Suiza

@tdudzik: no ja mam wrażenie że nasz system edukacji od początku do końca jest zorganizowany tak żeby odsiać najsłabszych, a nie kogokolwiek czegokokwiek nauczyć :D
Spojrz na to tak. Studentow medycyny zabiera sie do prosektorium, a na informatyce daje sie im C++ :-)

jarekr000000

Miałem takich parę lat w latach 90tych, że byłem zelotą C++ i myślałem, że już nic lepszego ludzkość nie wytworzy. Ta miłośc padła dopiero po poznaniu... SML/ Ocaml.. Najgorsze jednak jest w C++ to, że mimo że da się w nim dobrze pisać (np. z Boost i STL) to i tak pojawi się w zespole jakaś pała, która utkwiła mentalnie na wskaźnikach i nie może wyjść poza ten poziom( void* ftw...). Co do zaczynania uczenia od C/ C++ to dla mnie jest to słaby pomysł . Generalnie oba języki (a szczególnie C) uczą jak bohatersko rozwiązywać problemy nie spotykane w innych środowiskach. jedynie fajnie, że ten Conan wreszcie wydaje się odpalać (nareszcie - jest w końcu 2018)

Desu

@Hispano-Suiza: zajebista analogia :D pamietam jak brat mi opowiadał, jak to wyglądało u niego na roku, gdzie większość ludzi miała ochotę zwrócić obiad i chyba nawet jakiś paw poleciał.

rrowniak

C++ to bardzo trudny język, wystarczy sprawdzić ile stron ma standard. Ale wbrew temu co niektórzy sądzą, jest bardzo dobrze dopracowany i spójny. Niestety potrzeba lat aby osiągnąć biegłość w tym języku.

kate87

Trzymaj się, też nie lubiłam C++. :P

Sunnydev

odczepcie się od C++!!!!! taki biedny :(

kate87

@stivens: szczęśliwie nie mam z nim do czynienia, poza podziwianiem kiedy mój coś naskrobie pod Arduino czy inną Atmegę.

lion137

Nie Przesadzaj, nowe C++ jest całkiem spoko, Masz lambdy, smart pointers. Niestety jak dawniej zamiast namespaces dołącza się header files, i kompilacja - to trzeba ogarnąć. Co do IDE, po co Ci IDE, do C++ mam najprostszy edytor, bo: a): Żle się czuję, jak ma wszystko podkreślone czerwonym wężykiem:); b) i tak jest google every command i kod błędu. :-D:-D

several

Nowe C++ jako język jest spoko. Ale toolset pozostawia wiele do życzenia.

alagner

@jarekr000000: C (nie C++) to de facto wysokopoziomowy asembler. I IMHO jest zarąbiście przydatny dydaktycznie, bo pozwala nauczyć jak działa komputer/system (sygnały, przerwania, atomowość, volatile itd.) bez całego narzutu pisania po rejestrach. Zresztą widzę jakie problemy ma mój brat z embeddowym projektem na studiach po 2 lata pisana w C#. Ale fakt, już C++ bym nie polecał na początek. A na pewno nie w wersji "C z klasami".

jarekr000000

@alagner: z tym, że na typowych kursach z C (uczelnie) nie ma nic o przerwaniach, sygnałach itp. robi się klasyczne algorytmy :/ i tym podobne rzeczy do których C się nie nadaje. W ogóle z tym jak działa komputer to C daje ułudę bycia blisko sprzętu. Obecnie (o ile się nie pisze na mikrokontrollery) to nawet assembler nie jest blisko sprzętu (int80h). Generalnie C do dydaktyki - jak najbardziej - na zajęciach z archeologii komputerów, ale nie do nauki programowania.

alagner

@jarekr000000: ja po nauce standardowych struktur typu drzewo, tablica, lista itd. miałem mikroprocki, przy czym ja akurat jestem po elektronice. Jak to wygląda na typowej informatyce mogę tylko słuchać opowieści kolegów. Ale jeśli tak jak mówisz to faktycznie jest to bezsens.

spartanPAGE

Ja tylko powiem, że zajęcia w prosektorium to nie jest wcale duży problem i rzadko zdarza się, żeby ktoś przez nie wymiękł. Prędzej pie*dolca dostanie od ilości nauki.

tdudzik

@spartanPAGE: wiesz z pierwszej ręki? :)

spartanPAGE

@tdudzik: z pierwszej ręki z wety, z lekarskiego z drugiej. Na pierwszą z lekarskiego daj mi czas do października.

tdudzik

@spartanPAGE: no tak mi się właśnie coś skojarzyło, że kiedyś na tym forum chyba pisałeś że planujesz studiować medycynę czy coś, ale nie pamiętam o co dokładnie chodziło. :)

spartanPAGE

@tdudzik: Tak :) Poszedłem na medycynę ale weterynaryjną, jednakże jestem w trakcie powrotu do pierwotnego planu.

tdudzik

Swoją drogą to ciekawe, że ludzie ogarniający dobrze programowanie wybierają medycynę. :) mój znajomy z gimnazjum z którym zaczynałem programować i który był znacznie zdolniejszy ode mnie, zrobił to samo. Najpierw biol-chem a potem medycyna. Może trzeba zorganizować jakieś bootcampy dla programistów chcących się przebranżowić. :D

stivens

Czemu niby C do algorytmow sie nie nadaje?:o

Sunnydev

Ale tbh c++17 jest totalnie innym językiem w porównaniu do tego, który był dekadę temu. Ja uważam, że c++17 + stl na studiach byłby genialnym rozwiązaniem, ale pewnie za mało jest wykładowców, którzy mogliby dobrze uczyć nowoczesnego języka. Większość zostaje przy standardzie 98.

cerrato

"ludzie ogarniający dobrze programowanie wybierają medycynę." - może wyniknie z tego coś dobrego. Dzisiaj rano byłem z dzieckiem u lekarza. Samo badanie trwało dosłownie 3-4 minuty, a papierologia dobre 10. Lekarka (żeby nie było - w miarę młoda, ogarnięta, na klawiaturze pisała prawie bezwzrokowo) wkurzała się, że od pewnego czasu jej praca polega głownie na klikaniu w komputerze, otwieraniu i zamykaniu kolejnych okienek i całej tej otoczce, a w tym wszystkim brakuje czasu na pacjentów. Może jak byli lekarze zaczną programować, to jakoś dopracują te systemy ;)

Hispano-Suiza

@cerrato: Jak w końcu przestanie się oddawać przetargi znajomym i rodzinie to może zacznie ktoś projektować wszystko jak należy ;-)

amd

@alagner: "Ale fakt, już C++ bym nie polecał na początek. A na pewno nie w wersji "C z klasami" Dlaczego? Przeciez C z klasami jest prostsza odmiana C bez dodatkowego skomplikowania featurami z c++a. To najprostsza wersja C/C++ jaka istnieje. (Mowiac C z klasami, mam na mysli C++ w ktorym korzystasz z subsetu komend z C + basic stlowy jak string czy vector)

superdurszlak

największa głupota, jaką dałem sobie wcisnąć w szkole średniej, to że naukę programowania należy zacząć od C++. Chociaż nie, pierwsze starcie z C++ miałem jeszcze w gimnazjum, więc musieli mi to wmówić jeszcze wtedy - skończyło się to oczywiście spektakularnym KO i rezygnacją z prób nauki programowania na jakieś 2 lata. Choć jakby wziąć pod uwagę czas stracony na kopanie się z koniem C++, to można by powiedzieć że dużo więcej.

Cr0w

@amd czemu chcesz mieszac poziomy abstrakcji?

amd

@superdurszlak zgadzam sie nie powinno się zaczynac od C++a, python jest od tego najlepszy (wyprzedzając ludzi co wskaża że zaczynam mieszać się, tak nie uważam że osoba idąca na informatykę pierwszy raz z programowaniem powinna się spotkać dopiero na studiach)
@Cr0w, nie rozumiem o jakich poziomach abstrakcji mówisz. Rozwiniesz?

tdudzik

Widzę, że się niezła gównoburza rozkręca :D @amd: zgadzam się, a ludzie idący na medycynę powinni mieć już jakieś doświadczenie w operowaniu ludzi (albo chociaż zwierząt), inaczej to nie ma sensu.

stivens

Ale programowanie jest juz w liceum czy technikum (w tym drugim troche inne czasami ale jest). Ludzi na biol-chemie nie operujesz. I lepiej zebys nawet zwierzat nie operowal.

superdurszlak

@stivens: owszem, jest. Teraz może się to poprawiło, ale jeszcze parę lat temu w raczej nie-najgorszym liceum (choć nadal z mieściny powiatowej a nie z jakiegoś wielkieeeego miaaastaaa) królował Word i Excel. Na mat-inf.

stivens

Nie cierpie excela :D :D

superdurszlak

nieee no w końcu zrobili nam tego Ce Plus Plusa. Tylko ja to miałem w pompce i i tak próbowałem się go uczyć już z półtora roku, jak go zaczęli, a i tak nie udało się wtłoczyć klasie wiele ponad if i while. Przy czym trzeba położyć szczególny nacisk na próbowałem, bo drugi raz tak potworny kod zobaczyłem dopiero w pracy, jak odkurzyliśmy skrypty pisane w Perlu przez wcielenie Jasia Fasoli.

spartanPAGE

@tdudzik: swoją drogą, w niemczech teraz osoby z zawodów medycznych (pielęgniarki, ratownicy i inny personel) mają za to dodatkowe punkty przy rekrutacji na lekarski

Cr0w

@amd: wedlug mnie, lepiej by pirwszak najpierw zrozumial pamiec (wskazniki, ref, alokacje, rodzaje kopiowania, pass by value i ref, struktury z tablica, lista, stosem) i potem przeskoczyl do oop w pythonie/javie/c#/C++11/go. zbuduje jeden poziom abstracji na drugim, a nie zrozumie co to wskazniki/alokacja/struktury i zacznie tracic grunt bo string i vector nie maja tak jednoznacznej/prostej struktury. nie chodzi by chowac budowe przed nim, ale rozdzielic to. cos jak " " C-tak wyglada "pamiec", OOP- tak to wykorzystujemy"

jarekr000000

@Cr0w dokładnie z tym wyżej się nie zgadzam
Mało co tak przeszkadza w przejściu na ten wyższy poziom abstrakcji, jak mentalne utkwienie w pierdołach c.

amd

@jarekr000000: ale my mówimy o informatyce, uważasz że tam nie powinni uczyć takich rzeczy? O jakich pierdołach mówisz. O pass by value, które moim zdaniem jest jedym z największych zalet c++a?

Hispano-Suiza

@Cr0w: Zgadzam sie. Najlepiej wiec na przykladzie C++. OOP zdazy zlapac. Nie wymaga ono niesamowitych zdolnosci, a pozniej bedzie szlifowal wiedze na ten temat w projektach.
@amd pass by value to jest piekna rzecz, o ktorej przypomnialo mi go. Wczesniej na zajeciach z C++ i pozniej dlugo, dlugo nic :P

jarekr000000

@amd kwestia jest nie czego uczyć, ale od czego zaczynać. W c wskazniki i alokacje to problem, a zwłaszcza idiotyczna pseudo tablica/arytmetyka wskaźników. Taki człowiek po c potem mysli,że lista to ma takie nody z *next i ich szuka w kolejnych językach. Btw. w latach 90 eksperymentalnie uczyłem ludzi od C++, ale poczynając od obiektówki i STLa - bez pierdół. Całkiem dobrze to wychodziło. Ale obecnie lepszy wybór na start to Python, Python, Python, Haskell, Java (ale najnowsza, bo ma lambdy REPLa), Kotlin. Niezły na start jest też JS - mimo, że język rak, ale ma bardzo dobry stosunek ilości włożonej pracy w efekty. Zrobionie gierki (np w węża) w JS w ciągu godzinki to fajna zabawa.

Hispano-Suiza

Skad ta Pythonowa mitologia? Sam od niedawna bawie sie tym jezykiem i jest on straszny. W ogole nie daje szybkosci pisania. Musze sie zastanawiac nad iloscia tabow i tym czy zostawilem linijke wolnego na koncu i dwie w odstepie pomiedzy metodami.
Jak sypnie bledem to 8/10 razy nie wiem co jest tego powodem.
Moze i jest dobry w wielu zastosowaniach ale w zyciu nie dalbym poczatkujacemu do nauki tego jezyka.
Predzej JS ale to tez jako drugi jezyk. Najpierw przeczolganie przez rodzine C w celu zrozumienia zagadnien, ktorych nie ma w innych jezykach. Niech poczatkujacy widzi co sie dzieje pod opakowaniem. A pozniej niech widzi efekty (JS).

jarekr000000

@Hispano-Suiza: Najpierw przeczolganie przez rodzine C w celu zrozumienia zagadnien, ktorych nie ma w innych jezykach. Niech poczatkujacy widzi co sie dzieje pod opakowaniem. Troll mode on: to może niech zaczną od kodu maszynowego (ale nie od wysokopoziomowego asma, tylko od faktycznej maszynówki). Parę tysięcy kodów do nauczenia, dowiedzą się co się dzieje pod opakowaniem i poznają zagadnienia, których nie ma w innych językach. A przeczołganie (i radość sierżantów) lepsze niż przy C.

jarekr000000

Btw. nie lubię Pythona, ale widzę, że na początkujacych działa dobrze.

superdurszlak

Te wcięcia i spacje szybko wchodzą w krew, po pewnym czasie robisz je podświadomie, choć zawsze możesz użyć IDE do Pythona i nie myśleć o formatowaniu np. PyCharm sam Ci podświetli co trzeba, poza tym jest kombinacja ctrl+alt+L czy jakoś tak ;)

Hispano-Suiza

@jarekr000000: Właśnie wypisałeś plan studiów. Jest ASM jest C/C++ więc wszystko by się zgadzało :-) Skoro początkującym idzie dobrze to może faktycznie trzeba od niego zacząć, a nie po kilku innych. Mnie toto nie przekonuje, a walczymy już ze 2 miesiące ze sobą. @superdurszlak: Na szczęście jak już muszę to używam PyCharma. Jak ktoś ładnie napisze kod Pythonowy to może i faktycznie to wygląda spoko. Tylko jakoś rzadko spotykam coś co nie jest ścianą tekstu :P

superdurszlak

@jarekr000000: śmiej się, ale jak mi się zachciało stażu w Intelu to bite trzy miesiące siedziałem z nosem w ISA jakiejś dziwnej architektury. Pisanie w testów w IR mających sprawdzić poprawność wypluwanego przez LLVM assembly to było niezapomniane wrażenie

superdurszlak

@Hispano-Suiza: trzymanie się 80 znaków w wierszu i rozbijanie linii to Twoi przyjaciele, puste linie też nie są po nic ;) choć bardziej już irytuje mnie kod niektórych bibliotek np. Bodaj w pandas jest tak że na linijkę kodu przypada z 5 pustych i nie da się tego czytać

alagner

@jarekr000000: To o czym rozmawiamy to jest fundamentalne pytanie o poziom podstaw, które każdy pracujący w IT powinien znać albo przynajmniej wiedzieć gdzie szukać. Bo potem rodzą się kwiatki typu select na całej bazie i "co się na review czepiasz, dołoży się procek i będzie" "a jak się baza rozrośnie 10x?" "to się kolejny dołoży". Autentyk z poprzedniej roboty. Tzn. problem inny (pt. "jeszcze nie optymalizuj") ale sprowadzający się do tego samego: podstaw. W skrócie: tak, jestem za czołganiem. Albo jesteś inżynierem (rozumiejącym zagadnienia tudzież będącym się w stanie ich douczyć, niekoniecznie chodzi tu o formalne wykształcenie) albo klepaczem. Pytanie na kogo jest zapotrzebowanie.

jarekr000000

Jestem zrażony do C w nauce, bo właśnie jestem z pokolenia skrzywdzonego przez ASM i C . Myśmy od tego zaczynali. W latach 90-tych objektówka (dla nas) to był dramat. Jak możesz dyskutować o LSP, jak obiekty to dla ciebie tylko JMP/CALL z adresem obliczonym z vtable? Pamiętam ten ból i ile czasu zajęło nam od(C)zepienie się od szczegółów implementacyjnych. Niektórzy utkwili tam na zawsze.

Hispano-Suiza

@superdurszlak: Moi może i tak. Tylko zauważyłem, że sporo 'kodu' się do tego w ogóle nie stosuje. Dodatkowo nie pomaga mi przejście przez C/C++/C#/Jave. Może gdybym siadał do tego po raz pierwszy to byłbym oczarowany :P
@alagner jak najbardziej podpisuję się pod tym co napisałeś. Coś jednak powinno rozróżniać ludków po WSRH i studiach. Niech to będzie głębokość wiedzy posiadanej. Czyli inżynier z wiedzą > klepacz czegokolwiek.

alagner

I tak gwoli wyjaśnienia jeszcze: ja się nie czepiam, że tamten facet zastosował rozwiązanie z gatunku "chamski bruteforce, ale działa". Mnie się nie podoba jego bezrefleksyjność po zwróceniu uwagi. Można mieć chwilowe zaćmienie, można nie wiedzieć, można argumentować nawet, że przy docelowej liczbie rekordów w bazie narzut byłby pomijalny no i też byłoby to racjonalne... ale na litość, jesteśmy pracownikami umysłowymi jednak, łeba trzeba używać.

tdudzik

@alagner przeciez juz zostalo powiedziane, ze nie chodzi o to zeby tego nie uczyć tylko zeby od tego nie zaczynac. Na programowaniu powinno uczyc sie programowania a na algorytmach algorytmow. Masz potem przedmioty jak systemy i architektura, po nich (i w trakcie) mozna meczyc C/C++.

jarekr000000

@alagner to teraz mój autentyk. Pierwszego selecta na całej bazie widziałem w roku 2001. W kodzie jednego hakiera C, który przekwalifikował się na Javę. Było tam sporo operacji bitowych, a nawet udało mu się wcisnąć przesławne >>1 zamiast dzielenia przez 2. Kod czytał uprawnienia (users, groups, resources) , które były zapisane bitowo w bazie (trochę w stylu Unix). Chłopak tak się zajarał swoim hakierstwem, że nawet nie pomyślał, że czytanie w pętli wszystkich uprawnieć dla wszystkich userów i wszystkich grop do wszystkich resourców (przy każdym checkAccess()) to może nie być dobry pomysł. Generalnie tak gdzieś do roku 2005 ( w Java Web/EE) działało proste prawo. Jak umiera gdzieś komuś produkcja, to zanim nawet odpalisz profiler poszukaj gdzie w kodzie są operacje bitowe i działania na tablicach char[] lub byte[]. Potem gwardia C wymarła i eldorado się skończyło. Trzeba było sie z profilerami zaprzyjaźnić.

Hispano-Suiza

@tdudzik: To zaczynać od czego? Zacznijcie najpierw programować, a później rozumieć co się dzieje pod spodem? :-) Ja tam nie mam uczelni za złe, że dała mi najpierw Pascala z którego nie pamiętałem nic bo pierwszy raz używałem go w 2003 roku w gimbazie, a później dopiero na studiach, a następnie rzucono mi w twarz C/C++. Później było tylko piękniej gdy człowiek siadał do takiego C# czy Javy. Doceniał, że da się to wszystko zrobić prościej i odpalać za pomocą ctrl+f5 czy jak to tam w VS się robiło :P I wiele problemów, które były w poprzednim semestrze przeminęło wraz z nowym językiem ;-)

jarekr000000

Kiedyś na kursach prawa jazdy (lata 80te) uczono i wymagano znajomości budowy silnika (przesławny karburator). Potem ktoś zajarzył, że nie dość, że niepotrzebne to nawet nieprawda.

jarekr000000

I tu ważny punkt: wiedza z działania języków niższego poziomu oraz starszych architektur jest czasem antywiedzą w językach nowszego poziomu oraz nowszym sprzęcie. Przykład dobry to metody wirtualne, metody inline oraz słówko new w javie.

tdudzik

@Hispano-Suiza: zobacz syllabus który wysłałem wyzej. Wlasnie od tego ;)

alagner

@jarekr000000: to znaczy tyle, że hakier nie wiedział jak działa nowoczesny optymalizator, ew. pchał mikrooptymalizacje nie tam gdzie trzeba. I tak, zgadzam się, że wiedza też się przedatowuje. Tyle, że w moim odczuciu prościej będzie nauczyć kogoś podłączyć pamięć do 8051 zanim pozna te javowe abstrakcje, bo potem będzie mu jeszcze trudniej. Poza tym co do tego nieszczęsnego karburatora...to, że u siebie nie mam nawet bagnetu do sprawdzania poziomu oleju, nie znaczy, że nie należy być świadomym konieczności jego wymiany co 10 czy 15 tysięcy. Pytanie jest jeszcze jedno: czy chcemy programisty "aplikacyjnego" czy systemowego/embedded bo to jednak pod pewnymi względami mocno różniące się dziedziny i od tego pierwszego faktycznie wymagałbym nieco innych rzeczy. Ale może to mój osobisty bias.

Cr0w

@jarekr000000: pisałem o studiach- kurs C to jeden semestr i potem drugi sem OOP i moze funkcyjne (albo na 3 semestrze; najlepiej dać wybór studentowi). To studia. Nwm jak kiedyś wyglądały, ale teraz średni student nie wie co to git/svn na 3 semestrze, i największą appka to bank/magazyn na oop (w C++, ale bez Smart pointers (plus może nawet powiedziane by nie używać stl'a ;) ) bo C++11 na uczelni nie uświadczysz)...

tdudzik

@Cr0w: na mojej uczelni jest C++11 ;)

jarekr000000

nie mam nawet bagnetu do sprawdzania poziomu oleju, nie znaczy, że nie należy być świadomym konieczności jego wymiany co 10 czy 15 tysięcy. . U mnie nawet jest bagnet, ale nie sprawdzam. Wali mnie to. Auto wyswietla komunikat raz na jakiś czas, że mam pojechać do serwisu. Btw. Kiedyś na starym fordzie sprawdzałem co się stanie jak nie będe wymieniał oleju. Auto mi sie znudziło (po 200 tysiecy km). Przez kilka lat nie wymieniałem i nie dolewałem oleju. W końcu... karoseria uległa biodegradacji, ale auto pojechało na złom o własnych siłach(gdzies przy 260tys km).

amd

@jarekr000000 "kwestia jest nie czego uczyć, ale od czego zaczynać. W C wskaźniki i alokacje to problem," zgadzam się to nie jest coś od czego powinno się zaczynać dlatego powiedziałem żeby używać C++a żeby mieć tego stringa i vector.
Niekoniecznie myślę ze uczenie oop na C++ to dobry pomysł. Ja bym Jedak uczył strukturalnego na C++.
" Taki człowiek po c potem mysli,że lista to ma takie nody z *next i ich szuka w kolejnych językach" A czym jest lista jak nie właśnie struktura z nodami *next. Trzeba tylko na tyle to zrozumieć jak to się przekłada na inne języki.
"JS - mimo, że język rak, ale ma bardzo dobry stosunek ilości włożonej pracy w efekty. Zrobionie gierki (np w węża) w JS w ciągu godzinki to fajna zabawa."
Ale czemu w ogóle bierzemy pod uwagę takie rzeczy przy nauce programowania na informatyce. Tam nie chodzi o to żeby pokazać Ci jakie programowanie jest proste i ile można szybko zrobić. Tylko ma cię nauczyć podstaw. Dlatego moim zdaniem JS jest bez sensu na pierwszy język na studiach. Natomiast w liceum/gimnazjum czemu nie. A na studiach JS jak najbardziej nawet kilka semestrów ale w latach 2+.

tdudzik

@amd: ale jaka jest wartość uczenia C++ jeżeli nie jesteś w stanie zrozumieć konceptow ktore za tym stoją? Zamiast nauczyc studentów jak tworzyć odpowiednie abstrakcje, testowac czy debugowac to lepiej uczyc skladni i męczyć się z dodawaniem bibliotek? Czas na studiach jest bardzo ograniczony, jak mam tydzień na zrobienie projektu to nie poświęcę trzech dni na dodawanie google test do projektu, po prostu go nie przetestuje. I mówię to jako ktos z doswiadczeniem, zwykli studenci nawet nie wiedza ze trzeba testować. Często na tym forum narzeka sie ze studia nie uczą programowania. Masz odpowiedz dlaczego.

tdudzik

I czemu zaczynac od C++? Powinienes wiedzieć jak on dziala wiec w zasadzie najpierw assembler, teoria języków i automatów, kompilatory.. chcesz posortowac tablice? Nie wolno, najpierw semestr algorytmów, na kartce. A skad w ogole wiesz jak assembler dziala? No to najpierw elektronika, zeby wiedziec jak bity sa reprezentowane na najnizszym poziomie. Ale czekaj, jakie bity? Najpierw semestr teorii informacji. A przed tym 4 semestry matematyki zebys cokolwiek zrozumial. No, to po trzech latach dopiero mozna wlaczyc komputer, wczesniej nie ma sensu bo i tak nie wiesz jak dziala.

Hispano-Suiza

@tdudzik: Nie przesadzaj z tymi bitami. Wszystko to jest na niskopoziomowym. Wystarczająco tłumaczone żeby wiedzieć później o co w tej magii chodzi :P Na pierwszym semestrze w sumie miałem przedmiot z elektroniki więc wszystko jak najbardziej się zgadza ;-) Algorytmy na kartce? Spoko. Ale po jakimś wstępie do programowania. Po co mi algorytm na kartce skoro nie znam składni ani podstaw żeby go wykorzystać? Owszem. Nikt na studiach nie uczy testowania bo jak @Shalom napisał ostatnio gdzieś na forum - studia informatyczne nie są od tego. Tam zazwyczaj piszesz kod, który ma działać, a nie być testowanym. Piszesz nie po to żeby korzystały z niego tysiące ludzi tylko żeby zrealizować dane zagadnienie. Za dużo paranoi się tu wkradło Panowie. Sam uczyłem się i programowałem wieki przed pójściem na studia. Okazało się, że klepanie na ślepo jakie uskuteczniałem nie było dobrym rozwiązaniem. Fajnie było dowiedzieć się o tym jak to wszystko działa, a nie j#&$ć na siłę aby było :P

tdudzik

@Hispano-Suiza: nie bede parafrazowal 100 razy tego samego wiec tym zakoncze. Studia nie powinny uczyc testowac? MIT w takim razie musi byc rzeczywiscie ch****e.

Hispano-Suiza

No tak. Nie ma to jak z PL przenieść się 6500km dalej i pokazywać - bo tam testują. I gdzie jeszcze? :-)

tdudzik

@Hispano-Suiza: porownaj sobie absolwentow jednej i drugiej uczelni i zastanów sie gdzie robią to lepiej ;)

Hispano-Suiza

Ale tu nie ma się nad czym zastanawiać. Inny kraj, pełen innowacji, technologii, możliwości vs mały kraj gdzieś w Europie (gdzie większość studentów MIT nawet nie pokaże Ci go na mapie). Oczywiście, że wolałbym kończyć MIT. Ale nie miałem takiego komfortu i muszę się zadowolić tym co mam ;-)

jarekr000000

@amd A czym jest lista jak nie właśnie struktura z nodami *next. Trzeba tylko na tyle to zrozumieć jak to się przekłada na inne języki. No więc zupełnie nie. Tu masz definicję (jedną z kilku, ale w miarę jeszcze neutralną) https://en.wikipedia.org/wiki/List_(abstract_data_type) . No inne języki przekłada się różnie, w takiej javie 95% używanych list (strzelam, ale raczej pesymistycznie) jest implementowane wewnątrznie jako tablice (ArrayList). Kłopot, że w C nie ma nawet odpowiedniej abstrakcji, żeby ten koncept Listy jako typu danych wyrazić (w C++ już zasadniczo jest).

jarekr000000

Jak swam się wydaje, że gdzieś tam jest mityczny MIT, gdzie pisze się zajebisty kod i wszystko się testuje.... to możecie się głęboko rozczarować. Z MIT nie miałem do czynienia, ale ze szwajcarskim ETH (zwykle w top 5 w Europie) na przykład pracowałem. Wyposażenie księżycowe (mieli VR do zabawy/researchu zanim jeszczeto było modne), poziom ludzi naprawdę niezły. Ale kod... to powiedzmy taki sobie robili . Inżynieria: CI, zarządzanie projektem itp, czy nawet testy i jakość kodu, było nawet dosyć żenujące momentami :/ Btw. z tego co wiem to typowy problem projektów akademickich.

superdurszlak

@tdudzik zaczynanie na studiach od C/C++ to i tak luksus, myśmy mieli mecz otwarcia z architektur komputerów (gdzie na labach był assembly) :D C++ był co prawda równolegle, ale bez OOP

amd

@tdudzik, "Zamiast nauczyc studentów jak tworzyć odpowiednie abstrakcje, testowac czy debugowac to lepiej uczyc skladni i męczyć się z dodawaniem bibliotek? Czas na studiach jest bardzo ograniczony, jak mam tydzień na zrobienie projektu to nie poświęcę trzech dni na dodawanie google test do projektu, po prostu go nie przetestuje" Chyba Ci się pomyliły studia z bootcampem. Ja też jestem z tych co mają zdanie, że studia nie są stricte od nauki programowania.
@jarekr000000 "No więc zupełnie nie. Tu masz definicję (jedną z kilku, ale w miarę jeszcze neutralną) https://en.wikipedia.org/wiki/List_(abstract_data_type) ." Ale ty teraz mówisz o interfejsie listy czyli najwyższym poziomie abstrakcji. A ja mowie o implementacji jako linked list. I nie widzę nic złego w tym że osoba widząca LinkedList w Javie od razu widzi tam wewnątrz referencje na kolejne nody. Bo inaczej potem (realna historia) pytasz się kolegi co pisał tylko w Javie,czemu nie użyłeś LinkedList? Odpowiedz, hmm nawet nie pamiętam co to jest ale nikt z tego nie korzysta w Javie. No ale ty miliony razy usuwasz/dodajesz coś w środku? ArrayList jest najlepszy, na pewno jest napisany tak że jest optymalny :O.
Natomiast do tego czy powinni zaczynać uczyć od poziomu abstrakcji typu konkretna implementacja listy, to już się wcześniej z Tobą zgodziłem że nie.
Ja naukę C++a widzę jako naukę, ifów, pętli, rekurencji, funkcji. I do tego na start nada się lepiej niż python.

tdudzik

@amd no mit to bootcamp xD studia to nie bootcamp wiec nie mają Cie nauczyc skladni i frameworkow, ale na przedmiocie dotyczacym programowania maja Cie nauczyc inzynierii oprogramowania a nie skladni C++

Hispano-Suiza

@superdurszlak: O to widzę jak u mnie. Architektura wykłady ok, labki asm :D

Hispano-Suiza

@tdudzik: Ale wiesz, że Programowanie powiedzmy w C/C++ (tak się mój przedmiot nazywał) to osobne zajęcia, a "Inżynieria oprogramowania" też była i to też były osobne zajęcia :P

tdudzik

Moj przedmiot to "WSTĘP do programowania"

Hispano-Suiza

Wstęp miałem w Pascalu <3

amd

@tdudzik: 1) Nie Mit to nie bootcamp. Polecam wziąc udział w kursie introduction to algorithms prof. Demaine'a. Jakos nie widze tam żeby robili rzeczy na szybko żeby było łatwo i przyjemnie. I teraz czy do pracy potrzebujesz takiej znajomosci algorytmów? To po co tego uczą na tym MIT skoro wg ciebie uczą tylko tego co szybko wykorzystasz w pracy.
Swoja drogą to chociaż przejrzaleś na tym MiT co jest w sylabusie do tego introduction to programming. Bo tam nie ma frameworków i szybkiego robienia apek ani jak robic unit testy. Tylko sa ify rekurencja funkcje i podstawy oop. Czyli dokladnie to co ja napisałem. Bylem łaskawy bo ja nawet usunalem OOP.
2) Nie na studiach nie mają Cię nauczyć ani frameworków ani składni ani inżynieri oprogramowania. Nie ma możliwosci nauczenia się tego przy tylu godzinach ile ma uczelnia. Uczelnia jest po to żebyś liznał sporo rzeczy, a to co Cie zainteresuje bedziesz poznawał dokładnie w swoim wolnym czasie.

tdudzik

@amd: Czy Ty w ogole czytasz ze zrozumieniem?xD odnosisz sie do mojego sarkazmu a potem przywołujesz argumenty ktorych nigdy nie podalem :D

superdurszlak

bądźcie tak dobrzy i zakończcie dyskusję, zanim skoczycie sobie wirtualnie do gardeł i zaczniecie się nie wiem DDoSować ;)