Ovdje na programiranju se dosta o tome piše a i čitao sam prilikom zaposlenja, zašto toliko gnjave oko C-a ako znaš recimo C++. Šta nije ovo drugo bolje...
Ko će prije dobit posao onaj ko zna C ili C++ (zanemarimo ono da se traži znanje više jezika)?
__________________
Ja sam mladić u najboljim godinama i čovjek za sutra, a nekad sam bio sretno dijete. U mojoj općini problema nema, jer rade veze i poznanstva.
Ipak postoje situacije gdje je detaljno poznavanje C-a, kao i znacajno iskustvo u proceduralnom programiranju vaznije nego znanje C++-a i OOP-a. Prije neki dan smo bili u posjeti Danskom odjelu Nokia-e, gdje se pravi software za jedan dio Noikia telefona. Tamo su nam objasnili da je software u njihovim telefonima napisan iskljucivo u C-u, i to zbog hardverskih ogranicenja koje tako mali aparat namece. Jer, iako ne koristimo niti jedan dio C++-a u programu (dakle code je cisti C), ipak ce svaki C++ kompajler proizvesti veci izvrsni file.
Druga stvar je da za jedan veliki dio procesora ne postoji C++ kompajler, dok C kompajler postoji. Takva je situacija u industriji, gdje procesori upravljaju automatizacijskim procesima.
Ipak, kao sto je netko rekao, C++ sadrzi sve sto i sam C sadrzi, pa bi u teoriji svatko tko je savladao C++ zapravo savladao i C. No pitanje je ovo: Koliko je moguce biti dobar programer u proceduralnom programiranju, ako smo od samog pocetka naucili razmisljati OO, koristiti OO osobine, tehnike, prednosti?
Ja na to pitanje ne mogu odgovoriti jer sam najprije naucio C, a potom C++. I mislim da je dobro da je redosljed bio takav. Mozda netko ima obrnuto iskustvo koje moze podijeliti s nama?
bas me zanima kako se moze znati C++ ako se ne zna C
Ako mislis na sintaksu jezika (koji je samo manji dio onoga sto programer mora znati), onda su doista ta dva jezika gotovo identicna (kazem "gotovo", zbog prosirenja koje C++ uvodi). No kada pricamo o nivou apstrakcije koji je moguce primjeniti koristeci jedan ili drugi jezik, stvari su bitno razlicite, i vjerovatno se ne mogu svesti u nekoliko recenica ili bizarnih komentara.
Ima smisla prvo znati c, a zatim učiti c++, ali to može biti dvosjekli mač.
Oni koji najprije nauče c, s vremenom će veliku većinu svojih budućih vještina orijentirati na pointere. C je kao strukturirano orijentirani programski jezik idealan da se dobro nauče i shvate pointeri. Zapravo, usporedite li bilo koji drugi koncept sa konceptom pointera, izgleda da su pointeri daleko teži za shvatiti od npr. struktura, enumeracija ili cast operatora. Programeri u c-u čak ne trebaju razmišljati o scope-u, jer su pravila jako dobro definirana.
C++ kao što kažu koristi pointere, ali za razliku od c-a sam koncept je daleko kompliciraniji (OO) od c-ovog koncepta. To bi moglo biti ozbiljno ograničenje za nove programere, jer bi se daleko više usredotočili na neke druge koncepte, a ne na pointere, koji su najvjerojatnije najčešći uzročnici pojave bugova.
S druge strane, ljudi koji su prethodno dosta programirali u c-u imaju tendenciju preslikavati koncepte specifične za strukturirano programiranje u novu OO C++ okolinu, zato jer su na taj način naučeni razmišljati, ali isto tako zato jer im C++ to dopušta.
Ja na to pitanje ne mogu odgovoriti jer sam najprije naucio C, a potom C++. I mislim da je dobro da je redosljed bio takav.
Ko da sam ja reko.
Quote:
bas me zanima kako se moze znati C++ ako se ne zna C
Ko da sam ja reko.
Quote:
Da - to je kao da kazes: "Znam trčati, ali neznam hodati"
Ko da sam ja reko.
Kako da covjek shvati zasto enkapsulirati entitete i logike kad nikad drugacije nije ni vidio ? Kako objasniti klasu kad covjek jos nezna sto je struct ?
__________________
Transparent na jednoj Anti-Bush Demonstraciji: bombing for peace is like fucking for virginity
TomK kaže: Ipak postoje situacije gdje je detaljno poznavanje C-a, kao i znacajno iskustvo u proceduralnom programiranju vaznije nego znanje C++-a i OOP-a. Prije neki dan smo bili u posjeti Danskom odjelu Nokia-e, gdje se pravi software za jedan dio Noikia telefona. Tamo su nam objasnili da je software u njihovim telefonima napisan iskljucivo u C-u, i to zbog hardverskih ogranicenja koje tako mali aparat namece. Jer, iako ne koristimo niti jedan dio C++-a u programu (dakle code je cisti C), ipak ce svaki C++ kompajler proizvesti veci izvrsni file.
Druga stvar je da za jedan veliki dio procesora ne postoji C++ kompajler, dok C kompajler postoji. Takva je situacija u industriji, gdje procesori upravljaju automatizacijskim procesima.
Ipak, kao sto je netko rekao, C++ sadrzi sve sto i sam C sadrzi, pa bi u teoriji svatko tko je savladao C++ zapravo savladao i C. No pitanje je ovo: Koliko je moguce biti dobar programer u proceduralnom programiranju, ako smo od samog pocetka naucili razmisljati OO, koristiti OO osobine, tehnike, prednosti?
Ja na to pitanje ne mogu odgovoriti jer sam najprije naucio C, a potom C++. I mislim da je dobro da je redosljed bio takav. Mozda netko ima obrnuto iskustvo koje moze podijeliti s nama?
Lijepi pozdravi,
Uvijek se moze C++ kod propustiti kroz cross-compiler i na taj nacin generirati C kod. Tako da bi trebalo biti moguce koristiti C++ za bilo koji procesor koji ima C kompajler. To sam licno izveo svojedobno na jednome DSP procesoru.
A ima i jedna druga stvar. Stariji inzinjeri obicno ne znaju C++ a ne da im se nauciti, pa cesto prodaju managementu price kako je nemoguce. Osjetio sam i to par puta.
Zadnje uređivanje lijencina : 11.04.2004. at 21:47.
Uvijek se moze C++ kod propustiti kroz cross-compiler i na taj nacin generirati C kod. Tako da bi trebalo biti moguce koristiti C++ za bilo koji procesor koji ima C kompajler.
Potpuno se slazem.
Jedino pitanje koje ostaje je koliko je code koji generira cross-compiler optimiziran za odredjeni procesor!
__________________
Ja sam mladić u najboljim godinama i čovjek za sutra, a nekad sam bio sretno dijete. U mojoj općini problema nema, jer rade veze i poznanstva.
Jedino pitanje koje ostaje je koliko je code koji generira cross-compiler optimiziran za odredjeni procesor!
Mozda imas nekakva iskustva vezana za to?
Lijepi pozdravi,
Bas u tome DSP slucaju se C++ neefikasnost pokazala kao mit. I to sta se tice i velicine koda i brzine.
U vecini slucajeva C i C++ kod su slicni. Npr for, do, while, else itd. ce se preslikati u C kod gotovo besz izmjena. CC(cross-compiler) ce napraviti trivijalne promijene kao sto su promjene naziva varijabli i funkcija. Takodjer ako odredjeni objekt ima konstruktor onda naravno kada se objekt inicijalizira (npr. MojaKlasa A; ) tada ce naravno u C kodu postojati explicitni poziv toga konstruktora. Ali to nije neefikasnost C++ jer bi ti tu funkcionalnost u konstruktoru explicitno kodirao kada bi koristio C umjesto C++ pa bi nakraju dobio istu stvar. Isto vrijedi i za destruktore, i overloaded operatore. Ako zbog optimizacija trebas koristiti posebne pragme na odredjenim mjestima u C kodu, koliko se sjecam CC ima odredjenu pragmu koja to omogucava.
Jedine stvari koje se ne mogu trivijalno preslikati iz C++ u C su vtable, template i exceptions.
Vtables su trivijalne. One postaju jednostavne table pointera funkcija. Klasa (struktura u C) kao prvi clan dobije pointer na svoju tablu. Ali to bi slicno bilo izvedeno i ako bi u C koristio pointere na funkcije. Tako da tu isto nema bas neke neefikasnosti.
Template i exceptions ne moras koristi ako neces. To su jedine stvari kad CC treba ozbiljno raditi i koje se ne mogu trivijalno preslikati iz C++ u C. I tu kvaliteta generiranoga C koda ovisi o kvaliteti CC kompajlera.
U mojem DSP slucaju sve gore navedeno se pokazalo i u praksi. Kriticni dijelovi koda u C++ su se jednostavno preslikali u C. Radilo se o for petlji sa nekim DSP algoritmom unutra. Mnostvo zbrajanja i mnozenja. I ona je izgledala jako slicno nakon sto je prevedena iz C++ u C tako da tu nije bilo neke neefikasnosti nego je kvaliteta konacnog asm koda je ovisila o C kompajleru a ne o C++. Kasnije sam taj (jako mali)dijelic koda ionako napisao u asembleru zbog dodatnog ubrzanja 2-3X.
Tako da sto se brzine tice, nije bilo nikakovih problema. A niti sto se velicine tice. Cak ako se dobro sjecam koristio sam STL library, i nije bilo problema (nisam vise siguran za STL jer je bilo par godina). U svakom slucaju uspjesan projekt.
Mobiteli su sitne stvarcice, sa sasvim specificnim software-skim potrebama i malom ili nikakvom potrebom mijenjanja software-a. Jos do prije par godina sav se kod pisao u asembleru. Sada naravno svi novi mobiteli podrzavaju Javu ili tako nesto. Ali istina je da se radi o jako jednostavnim stvarima gdje ne treba previse apstrahirati i u obicnom C kodu je lakse nazrijeti tok instrukcija procesora.
No, naravno, dobar kompajler ce dati savrsene nule i jedinice i za C++ i za C