apella
Legacy Member
C# en Java hebben het voordeel van rapid development languages te zijn. Ze zijn afgeleiden van C++ die er een hoop uitsmijten. Dit maakt dat je er sneller dingen mee kunt maken, maar je hebt minder bouwstenen om ze te maken. Die beperking is op die manier dus eigenlijk een zegen.
C# en Java gaan altijd trager zijn omdat ze naar een tussentaal worden gecompileerd en, in het geval van C#, op het moment van het runnen door een JIT-compiler worden vertaald, in het geval van Java in een virtual machine wordt gedraaid.
Wat betreft welke taal best eerst wordt geleerd:
C++ is een taal die meer inzicht in het proces vergt. Om het met een bekende quote te zeggen: "C++ gives you all the rope you need to hang yourself."
Dit klopt. Met C++ kan je je geheugen snel verneuken (pardon me the words), hetgeen in C# en Java niet meteen zal lukken, omdat je er geen rechtsreekse toegang tot hebt.
Een ander nadeel van C++ dat wordt aangehaald (Door Fraggie) is dat C++ lastig zou zijn wegens de libraries die je extra moet downloaden en inladen, bijvoorbeeld om te interfacen met mysql.
De reden hiervoor is dat C++ een oudere standaard heeft. Terwijl Java om de zo veel tijd updates krijgt.
De STL (de standaard bibliotheek van C++) is toen gemaakt om een basis te geven. Andere mensen hebben andere ideeën, en specifieke dingen zoals interfaces met mySQL zijn dus door verschillende mensen gemaakt.
Zo'n specifieke zaken horen ook niet in een standaard, aangezien je daardoor bepaalde technologieën voortrekt. Wil je er mee interfacen, gebruik dan een library er voor, of schrijf er zelf een, was de redenering.
Verder zorgt de grote hoeveelheid aan standaard toegevoegde classes van zowel Java als C# voor een zekere bloating. Een hoop data op de computer, die helemaal niet gebruikt wordt.
Daar tegenover staat natuurlijk weer dat het inderdaad wel makkelijker is, zeker voor de developer, om al die zaken meteen tot zijn beschikking te hebben.
Syntactisch is C++ ook niet zo evident. Sterretjes voor of na woorden, ampersands, zeker die ene punt-komma niet vergeten...
De IDE's voor C# en Java maken het ook daar je makkelijker.
Dat komt ook weer deels dankzij de eenvoudigere opzet van de taal, het verwijderen van templates lost een hoop problemen op van het parsen voor auto-aanvulling etc.
Wet Manjak zei over Haskell:
functionele talen zoals Haskell (dat zijn talen die functies als eerste-klasse objecten zien, zoals klassen in C# en Java zijn, dus je werkt er niet met klassen, maar met functies of operaties) hebben een prachtige elegantie die een object-georiënteerde taal niet kan evenaren.
waar je in Java twintig regels voor zou nodig hebben, kan je in een taal als Haskell of Scheme misschien in vijf regels schrijven, dankzij recursie.
Het loont daarom ook om zowel functionele als OO talen te leren, technieken die je in de ene meestal gebruikt kan je ook vaak op een of andere manier in de andere gebruiken.
Nog een laatste punt: betreffende cross-platform ontwikkeling:
Ook C++ is een taal die niet platformafhankelijk is.
Als je alleen de standaard bibliotheek gebruikt (dus een console programma), zal deze op ieder platform draaien, op voorwaarde dat je een compiler hebt voor dat platform.
Op het vlak van compilers zijn er helaas soms wat verschillen. Zaken die VC++ zal compilen zullen niet altijd compilen met G++ bijvoorbeeld, de standaarden worden niet altijd volledig nageleefd, of extra's worden toegevoegd (#pragma once, bijvoorbeeld, is geen onderdeel van de standaard, en als je met iets anders dan VC++ compileerd, moet je je headers nog altijd beschermen met een #ifdef).
Betreffende cross-platform UI's zijn er meerdere op het internet te vinden die op meerdere platforms werken.
Om terug te keren naar de oorspronkelijke vraag:
Wil je snel programma's maken, leer dan Java of C# (of een functionele taal, zeker even goed!)
wil je snelle programma's maken, leer dan C++, maar reken er dan op dat de leercurve een pak steiler is.
C# en Java gaan altijd trager zijn omdat ze naar een tussentaal worden gecompileerd en, in het geval van C#, op het moment van het runnen door een JIT-compiler worden vertaald, in het geval van Java in een virtual machine wordt gedraaid.
Wat betreft welke taal best eerst wordt geleerd:
C++ is een taal die meer inzicht in het proces vergt. Om het met een bekende quote te zeggen: "C++ gives you all the rope you need to hang yourself."
Dit klopt. Met C++ kan je je geheugen snel verneuken (pardon me the words), hetgeen in C# en Java niet meteen zal lukken, omdat je er geen rechtsreekse toegang tot hebt.
Een ander nadeel van C++ dat wordt aangehaald (Door Fraggie) is dat C++ lastig zou zijn wegens de libraries die je extra moet downloaden en inladen, bijvoorbeeld om te interfacen met mysql.
De reden hiervoor is dat C++ een oudere standaard heeft. Terwijl Java om de zo veel tijd updates krijgt.
De STL (de standaard bibliotheek van C++) is toen gemaakt om een basis te geven. Andere mensen hebben andere ideeën, en specifieke dingen zoals interfaces met mySQL zijn dus door verschillende mensen gemaakt.
Zo'n specifieke zaken horen ook niet in een standaard, aangezien je daardoor bepaalde technologieën voortrekt. Wil je er mee interfacen, gebruik dan een library er voor, of schrijf er zelf een, was de redenering.
Verder zorgt de grote hoeveelheid aan standaard toegevoegde classes van zowel Java als C# voor een zekere bloating. Een hoop data op de computer, die helemaal niet gebruikt wordt.
Daar tegenover staat natuurlijk weer dat het inderdaad wel makkelijker is, zeker voor de developer, om al die zaken meteen tot zijn beschikking te hebben.
Syntactisch is C++ ook niet zo evident. Sterretjes voor of na woorden, ampersands, zeker die ene punt-komma niet vergeten...
De IDE's voor C# en Java maken het ook daar je makkelijker.
Dat komt ook weer deels dankzij de eenvoudigere opzet van de taal, het verwijderen van templates lost een hoop problemen op van het parsen voor auto-aanvulling etc.
Wet Manjak zei over Haskell:
functionele talen zoals Haskell (dat zijn talen die functies als eerste-klasse objecten zien, zoals klassen in C# en Java zijn, dus je werkt er niet met klassen, maar met functies of operaties) hebben een prachtige elegantie die een object-georiënteerde taal niet kan evenaren.
waar je in Java twintig regels voor zou nodig hebben, kan je in een taal als Haskell of Scheme misschien in vijf regels schrijven, dankzij recursie.
Het loont daarom ook om zowel functionele als OO talen te leren, technieken die je in de ene meestal gebruikt kan je ook vaak op een of andere manier in de andere gebruiken.
Nog een laatste punt: betreffende cross-platform ontwikkeling:
Ook C++ is een taal die niet platformafhankelijk is.
Als je alleen de standaard bibliotheek gebruikt (dus een console programma), zal deze op ieder platform draaien, op voorwaarde dat je een compiler hebt voor dat platform.
Op het vlak van compilers zijn er helaas soms wat verschillen. Zaken die VC++ zal compilen zullen niet altijd compilen met G++ bijvoorbeeld, de standaarden worden niet altijd volledig nageleefd, of extra's worden toegevoegd (#pragma once, bijvoorbeeld, is geen onderdeel van de standaard, en als je met iets anders dan VC++ compileerd, moet je je headers nog altijd beschermen met een #ifdef).
Betreffende cross-platform UI's zijn er meerdere op het internet te vinden die op meerdere platforms werken.
Om terug te keren naar de oorspronkelijke vraag:
Wil je snel programma's maken, leer dan Java of C# (of een functionele taal, zeker even goed!)
wil je snelle programma's maken, leer dan C++, maar reken er dan op dat de leercurve een pak steiler is.
, het is enorm krachtig, maar volgens mij niet erg evident om het juiste gebruik ervan aan te leren.