Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

41

12.03.2009, 23:40

Zitat von »"MasterK"«

Zitat von »"DasBlub"«

zur info: ich mache eine lehre als programmierer... und bekomme nach 4 jahren einen eidg. fähigkeitsausweis... da sollte man wohl erwarten, dass man in der schule auch was gescheites lernt (was impliziert, dass der lehrer seine materie auch beherrscht...)

Dass das lehre ist hast du nicht erwähnt und ging auch irgendwie nicht aus deinem post hervor. Dachte das wäre wieder so ein schüler, der sich beschwert, dass er in seinen 3 stunden info-unterricht nicht in c++ hax0rn darf.

Soviel zum Thema Vor-Urteile und zu schnelles urteilen ;)

Zitat von »"MasterK"«


Dass der schulische anteil in der FI-ausbildung grösstenteils fragwürdig bis scheisse ist, habe ich auch schon von anderen FIs gehört. Das hat im endeffekt aber nichts damit zu tun, ob man c++ oder java in der schule benutzt. Gut programmieren kann man in beiden sprachen lernen. Bzw SOLLTE man, wenn man ein guter softwareentwickler werden will.


Es ging um die Informatiker-Lehre in der Schweiz, ich denke da bestehen einige Unterschiede zum FI.

Ich glaube, man lernt mit C++ eher besser zu programmieren als mit Java.
Bei C++ geht meistens gar nix wenn es nicht 100% richtig ist, bei Java geht meistens noch recht viel auch wenn nicht 100% richtig ist, folglich fallen Fehler weniger auf und die Tendenz weniger zu überlegen (weil das System ja automatisch selber was macht) und sich mehr Denk-Fehler (was Software-Design/Architektur/OOP angeht) anzugewöhnen da ist. Das kann man nicht pauschalisieren und auch mit Java kann einer der sich Interessiert und damit beschäftigt sicherlich gut werden, nur wird man bei C++ eher dazu gezwungen (was aber mehr Zeit braucht und mehr Motivation).
Diese Theorie konnte ich zumindest so bei einigen Klassenkollegen beobachten.

MasterK

Frischling

Beiträge: 92

Wohnort: Koblenz

Beruf: Teamleiter Softwareentwicklung

  • Private Nachricht senden

42

13.03.2009, 00:05

Zitat von »"Beneroth"«

Soviel zum Thema Vor-Urteile und zu schnelles urteilen ;)

Solche aussagen hör ich eben nicht zum ersten mal. "Buhuhu, wir benutzen pascal in der schule ;( ".

Zitat von »"Beneroth"«

Es ging um die Informatiker-Lehre in der Schweiz, ich denke da bestehen einige Unterschiede zum FI.
Auch in der schweiz bräuchte man dann sinnvollerweise leute, die pädagogen UND informatiker sind. Und ich wette, solche leute findest du auch in der schweiz eher selten.

Zitat von »"Beneroth"«

Ich glaube, man lernt mit C++ eher besser zu programmieren als mit Java.
Bei C++ geht meistens gar nix wenn es nicht 100% richtig ist, bei Java geht meistens noch recht viel auch wenn nicht 100% richtig ist, folglich fallen Fehler weniger auf und die Tendenz weniger zu überlegen (weil das System ja automatisch selber was macht) und sich mehr Denk-Fehler (was Software-Design/Architektur/OOP angeht) anzugewöhnen da ist. Das kann man nicht pauschalisieren und auch mit Java kann einer der sich Interessiert und damit beschäftigt sicherlich gut werden, nur wird man bei C++ eher dazu gezwungen (was aber mehr Zeit braucht und mehr Motivation).
Diese Theorie konnte ich zumindest so bei einigen Klassenkollegen beobachten.

Sofern es einen erfahrenen lehrer (egal ob "lehrer" im eigentlichen sinne, einfach jemand der einem beim lernen unterstützt) gibt, durchaus. Gibt es den nicht, dann neigen die (lernenden) leute bei C++ auffallend häufig dazu, fiese hacks zu programmieren, den C++ code mit C zu verunstalten und veraltete konzepte in ihrem code zu nutzen, welche man leider immer noch allzu häufig im internet findet.
Das soll nicht heissen, dass C veraltet wäre oder so. Aber in einer mit C++ programmierten anwendung haben krude C-konstrukte eher selten ihre berechtigung.

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

43

14.03.2009, 00:20

Zitat von »"MasterK"«


Sofern es einen erfahrenen lehrer (egal ob "lehrer" im eigentlichen sinne, einfach jemand der einem beim lernen unterstützt) gibt, durchaus. Gibt es den nicht, dann neigen die (lernenden) leute bei C++ auffallend häufig dazu, fiese hacks zu programmieren, den C++ code mit C zu verunstalten und veraltete konzepte in ihrem code zu nutzen, welche man leider immer noch allzu häufig im internet findet.
Das soll nicht heissen, dass C veraltet wäre oder so. Aber in einer mit C++ programmierten anwendung haben krude C-konstrukte eher selten ihre berechtigung.


Da hast Du auch wieder recht!

Hm, am Ende sind wie immer die Lehrer schuld... bzw. auch die Schwierigkeit sowas zu bewerten und zu überprüfen... hmmm..

MasterK

Frischling

Beiträge: 92

Wohnort: Koblenz

Beruf: Teamleiter Softwareentwicklung

  • Private Nachricht senden

44

17.03.2009, 23:45

Also heute war ich kurzzeitig bei Minuten. Waahhh.

Wollte eine header-datei inkludieren, in der irgendein idiot ein define "ERROR" abgelegt hat, was natürlich dazu geführt hat, dass das gleichnamige element in meiner enum auch bearbeitet wurde. Danke, preprocessor. Und danke an alle leuchten die defines in headern, welche sowieso nur von anderen programmen eingebunden werden, solche allgemeinen namen geben.

Überhaupt ist das ganze header- und preprocessor-gedöns in c++ vorsintflutlich. Da find ich das in c#, java etc um längen angenehmer. Wenn ich nur an so gruselige sachen wie include guards oder auch solchen müll wie forward declaration denke... *brr*.
Man merkt c++ sein alter und seine herkunft deutlich an.

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

45

18.03.2009, 08:32

naja... ich finde es ganz gut so, man muss halt wissen was man macht (und der Kollege sollte es auch..).

In C# gibts "partial classes" damit man eine Klasse an mehreren Stellen implementieren kann (nicht redudant, sondern ein Teil da, ein Teil dort..), das hast Du bei C++ überall.

Auch die saubere Aufteilung in Header- und Source-Code bei C++ (wenn sie denn auch gemacht wird!) finde ich viel übersichtlicher und angenehmer als bei Java/C#/etc. wo alles zusammen ist, eine Header-Datei zeigt gleich was die Klasse alles hat ohne dass ich zuerst durch hunderte von Zeilen Implementations-Code scrollen oder eine externe Dokumentation (wenn es denn eine gibt!) durchsuchen muss.

Der Präpozessor ist ein mächtiges und darum auch schnell falsch angewendetes Werkzeug. Und doch sehr nützlich, bei C#/Java musst Du um ähnliche Sachen durchzuführen ein Shell-Skript schreiben oder von Hand den Code bearbeiten, z.B. um verschieden umfangreiche Versionen deines Programms zu builden.

Zitat von »"Bjarne Stroustrup"«


C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off.


C++ ist mächter, d.h. man kann flexibler und mit kleiner Ursache grosse Wirkung verursachen, dadurch muss der Programmierer auch wissen was er tut und welche Folgen das haben könnte. Bei Java/C# programmierst Du immer in einer mehr oder weniger umzäunten Sandbox, das Framework gibt vor welche (z.T. sehr beschränkten) Möglichkeiten Du hast und damit wird es für den normalen Programmierer schwieriger aus dem Kinderwagen zu fallen.

Ein Vergleich:
Bei C#/Java sitzt der Programmierer auf dem Beifahrersitz oder gar hinten im Auto, er kann dem Fahrer Anweisungen geben (auch falsche), aber die Gefahr dass das Auto von der Strasse abkommt ist relativ klein. Bei C++ sitzt der Programmierer am Steuer und hat sogar neben sich noch zusätzliche Knöpfe um jederzeit Öl oder Benzin abzulassen, Teile des Motors zu verändern oder das Auto umzulackieren (vor oder während der Fahrt).

46

18.03.2009, 17:11

Zitat von »"MasterK"«

Überhaupt ist das ganze header- und preprocessor-gedöns in c++ vorsintflutlich. Da find ich das in c#, java etc um längen angenehmer. Wenn ich nur an so gruselige sachen wie include guards oder auch solchen müll wie forward declaration denke... *brr*.

Mal ne blöde Frage (ich hab bis jetz nur C++ geproggt): wie strukturierst du, ohne Forward-declarations und header? ich finde das sehr angenehm: am Anfang der header die abhängigkeiten in Form von #includes, dann siehst du über die Forward-declarations, was die headerdatei selbst enthält, dann an den Klassendefinitionen, was die Klassen haben/können, und die implementierung bleibt in der cpp.
Ok, was die Includeguards angeht, da hast du recht, die sind nervtötend.
Und der Präprozessor ist sehr gut, um bei verschiedenen builds (Unicode/Latin-1, Debug/Release, x86/x64, etc.) mit dem selben Code unterschiedliche Sachen zu erzeugen, man muss sich aber auch wirklich darauf beschränken, sonst wirds schlimm.

MasterK

Frischling

Beiträge: 92

Wohnort: Koblenz

Beruf: Teamleiter Softwareentwicklung

  • Private Nachricht senden

47

18.03.2009, 19:32

Zitat von »"Beneroth"«

(und der Kollege sollte es auch..).

Na, wenn der header von extern kommt, kann ich dem "kollegen" schlecht eine reinhauen :)

Zitat von »"PCShadow"«

Mal ne blöde Frage (ich hab bis jetz nur C++ geproggt): wie strukturierst du, ohne Forward-declarations und header? ich finde das sehr angenehm: am Anfang der header die abhängigkeiten in Form von #includes, dann siehst du über die Forward-declarations, was die headerdatei selbst enthält, dann an den Klassendefinitionen, was die Klassen haben/können, und die implementierung bleibt in der cpp.

Ja, klingt in der theorie sehr fein. Hat man aber eine grosse klasse mit dutzenden oder gar hunderten funktionen, dann such ich mir im header genauso einen wolf. Und es gibt genug projekte/programme/bibliotheken, die da nicht sparen mit funktionen.
Und ob ich nun einen header nach der richtigen funktion durchforste oder eine (hoffentlich vorhandene) dokumentation, die im optimalfall noch querverweise enthält, na, da entscheide ich mich dann doch für die doku. Alles was schnell gehen kann funktioniert idR auch gut über autovervollständigung. Moderne IDEs bieten dann direkt auch kontextsensitive hilfe an.

Ich weiss, es gibt noch genug leute die am liebsten nur mit einem texteditor arbeiten, durfte ich auch schon mehrmals bewundern. Passt dann aber auch zur steinzeitsprache c++ :) Weiss man eine funktion grad nicht auswendig (und das kommt bei modernen bibliotheken mit hunderten klassen und noch mehr methoden ja durchaus vor) ist man dann verloren. Im header möcht ich da nicht suchen.

Überhaupt autovervolständigung: keine ahnung ob es an der sprache liegt oder an was sonst, aber das intellisense in VS für C# ist um welten besser als das für C++. Abgesehen davon, dass das in C++ ja auch gern mal komplett aussteigt.

48

18.03.2009, 19:43

Hallo

Also ich finde die Teilung in Header- und Sourcefiles auch nicht wirklich gelungen.

chrische

49

18.03.2009, 20:06

Zitat von »"MasterK"«

Und ob ich nun einen header nach der richtigen funktion durchforste oder eine (hoffentlich vorhandene) dokumentation, die im optimalfall noch querverweise enthält, na, da entscheide ich mich dann doch für die doku.

klar, als nutzer, aber der code muss ja auch strukturiert sein, um ihn vernünftig warten/erweitern zu können. Und ich bin auch keiner von den texteditor-leuten, sondern jemand, der froh ist, wenn intellisense vernünftig klappt. Und kontextsensitive Hilfe, wie gesagt, mir gehts grade um kram den ich selbst schreibe, da hab ich schneller im header geguckt, wie was für die kontextsensitive hilfe geschrieben ;)
bei bibliotheken, die ich nur nutze, ists mir ziemlich wurscht, wie die dateien aussehen, solange ich ne brauchbare doku hab :p

MasterK

Frischling

Beiträge: 92

Wohnort: Koblenz

Beruf: Teamleiter Softwareentwicklung

  • Private Nachricht senden

50

18.03.2009, 20:28

Aber wenn man den code selbst schreibt, sehe ich in den deklarationen im header keine besonderen vorteile. Ich weiss wie die funktion heisst und gut ist. Die ist an EINER stelle deklariert und implementiert (jetzt mal beispielsweise in java), solange man keine klassen mit abertausenden zeilen schreibt ist das auch nicht so das problem. Und wenn mans macht hat man in c++ mit header wahrscheinlich die gleichen probleme mit dem finden der richtigen funktion.

Blöd ist auch, dass sich deklaration und definition unterscheiden können, zB wenn man default parameter verwendet. Wenn nun ein kollege "nur" schnell was fixen will und nicht auf den header achtet, wo ein parameter evtl ungünstig vorbelegt ist, kann das schon mal probleme machen.

Überhaupt sind default-parameter auch so ne geschichte... Ich benutz die zwar auch hin und wieder, sowas kann aber auch oft genug probleme machen, wenn man das mit überladenen funktionen kombiniert.

Werbeanzeige