Stvari nisu tako jednostavne. Radi se o razlikama u odnosu na uložen trud. Poanta je da te razlike imaju puno veću cijenu u razvoju. Sasvim je nelogično nešto optimizirati do maksimuma, ako to nije krajnje nužno. Ako se Java program vrti 5% sporije od C++ programa čiji razvoj traje 20% duže, tada je sasvim suludo razvijati program u C++ jeziku ako predviđena platforma nije jako ograničena snagom. Java, C# i slični jezici sasvim su dovoljna tehnologija za većinu aplikacija danas, a osim toga se vrte približno jednako kao i nativni kod (C# recimo nije interpretiran jezik kao PHP - iako i PHP ima kompajler - nego JIT jezik koji se na kraju kompajlira).
C++ je jezik koji sasvim nepotrebno omogućava razne hackove koji su rijetko nužni, a često potiču (i omogućavaju) loše navike i lošu praksu u kodiranju. Java i C# su jezici koji, umjesto na implementacijske i nebitne tehničke detalje, usmjeravaju programere na rješavanje problema, jer danas su kompajleri iznimno "pametni" i u većini slučajeva puno bolje optimiziraju kod nego što to ljudi mogu. Ako je nekome brzina kritična (igre npr.) i ako mu vrijeme i cijena razvoja nisu ključni, a platforme ograničene, tada će C++ svakako imati opravdanje.
Svi u zadnje vrijeme spominju "ogromnu" razliku u razvoju između C++, C#, JAVA itd... Kako cijeli život živim od razvoja aplikacija, moram reći da je to snake oil koji uglavnom prodaju ljudi koji imaju oskudno ili nikakvo znanje i iskustvo u razvoju. Ako imamo sposobnog C++ developera, sposobnog C# developera, sposobnog JAVA developera, itd.. svaki od njih će potrošiti podjednako vrijeme za svoj zadatak. Možda će ovaj u C# biti brži sa nekim stvarima koje mu nudi framework, ali možda će taj isti imati problema sa korištenjem 3rd party SDK-a, koji je prvenstveno namijenjen C ili C++ developeru. Odavno je postao biznis pisanje wrappera oko koje-čega za lakše korištenje iz C#. Dakle, sve je to tu negdje.
Ako pod većinom aplikacija smatraš "daj spoji na bazu, daj mi store procedure rezultat i isprintaj mi to", onda si u pravu. Performanse su "nebitne" pod pretpostavkom da rade kvalitetni programeri. No, za 24/7 aplikacije, multimediju i slično je upitno. Nedugo sam dobio zadatak i super staro računalo na kojem se aplikacija mora izvršavati (klijent ima preko 500 takvih i kupnja novih nije dolazila u obzir). C# developeri su odradili svoj dio posla, međutim ta stara kanta nije mogla to odraditi u realnom vremenu. Prepjevana je stvar u C++ za isto vrijeme kao i prva C# verzija. I, radi kako je i očekivano. Čak je korišten i MFC za kojeg neki tvrde da se više ne koristi.
Izjava da je C++ jezik koji omogućava razne hackove najviše govori o kompetentnosti njezinog autora (mada je kontradiktoran na kraju, gdje ipak kaže da C++ ima svoju svrhu). Pitam se što bi taj isti rekao na asembler? S obzirom na optimizacije koje je kompajer u stanju izvesti danas, nema smisla razvijati u asembleru, ali znati ga radi debagiranja je vrlo korisno. Naravno, neki će se nasmijati i reći "ma kome to treba".
Svaki jezik ima svoju svrhu.
Loša praksa u kodiranju nije nikako vezana uz programski jezik. Ne postoji jezik koji je imun na loše pisani kod ili bugove.
Ono što razvoj u C-u ili C++ čini skupljim su skuplji ljudi (programeri), a ne bitno više vremena. C# tipa ćeš naći na svakom ćošku. Rijetki među njima su zaista dobri. C++ developera u RH možeš povećalom tražiti, a dobrog C++ developera... hm, ne znam kolike su šanse. Ti ljudi znaju puno više od C# ekipe i normalno je da su skuplji. Rijetki su ljudi u C# svijetu koji znaju što se odigra iza jedne linije njihovog koda.
Ukoliko već postoje značajne razlike u vremenu razvoja, projekt se može razvijati sa više različitih alata. Uostalom, zato i imamo više jezika, a ne samo jedan.