"Zur C/C++/Java/Python-Diskussion"

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
needsch
User
Beiträge: 15
Registriert: Donnerstag 22. Dezember 2011, 21:28

webspider hat geschrieben:@Hyperion: Nein, es fängt ja damit an, dass ich zur Objektorientierung gezwungen werde (bisher halte ich sie noch so lange aus meinem Geschreibsel raus wie ich nichts größeres baue). Wenn man das mit der gewissen Umständlichkeit kombiniert, dem Fakt, dass man ohne IDE wahnsinnig werden kann beim Entwickeln und dass man die meiste Zeit aufgrund uneinheitlicher Benennungen und Vorgehensweisen viel eigentlich unnötigen Code schreiben muss. Wenn so Objektorientierung generell aussieht, na dann gute Nacht. Ich nutze es bisher nur wegen der Uni.
Wunderbar auf den Punkt gebracht! :!:
Hyperion hat geschrieben:
webspider hat geschrieben:Aber Java ist so schrecklich bürokratisch :(
Du meinst Bondage and Discipline?
Schön wär's. :lol: Aber nicht mal dafür taugt Java. Viel zu frigide und viel zu hysterisch. Wenn ich nur an die 1000+ zeiligen XML-Konfigurationsdateien und die episch langen Stacktraces denke...

Zum Thema:
C++ zu beherrschen ist eine tolle Sache, man muss sich allerdings sehr intensiv damit befassen. C++ ist deutlich komplexer als andere Programmiersprachen*. Ansonsten solltest du es meiden, wenn es nicht unbedingt auf Performance ankommt.

*Es gibt viele Leute, die behaupten, dass niemand wirklich C++ beherrscht und dass niemals 2 Programmierer die gleichen Aspekte von C++ beherrschen. Dem stimme ich ausdrücklich nicht zu. Man muss bei C++ einfach ein paar harte Nüsse knacken, aber danach kann man sich sehr schnell alles Weitere aneignen (nach Bedarf). Wenn Programmierer zu faul sind, sich in alle zentralen Konzepte einer Sprache einzuarbeiten, dann sind es eben schlechte Programmierer - Ende.
Zuletzt geändert von needsch am Donnerstag 26. Januar 2012, 23:21, insgesamt 1-mal geändert.
lunar

@needsch: Es fällt mir angesichts der Aussage, man könne sich "alles weitere sehr schnell aneignen", sehr schwer, zu glauben, dass Du Dich wirklich mit C++ beschäftigt hast. C++ wirklich in Gänze zu beherrschen, erfordert jahrelange Übung und unglaublich viel Erfahrung. Es ist illusorisch, anzunehmen, dass jeder Programmierer, der C++-Anwendungen warten muss, diese Zeit zur Verfügung hat, oder jede Firma es sich leisten könnte, ihre Entwickler zu C++-Experten auszubilden. Und es ist anmaßend, zu behaupten, alle anderen wären schlechte Programmierer. Solche Aussagen fallen früher oder später knallhart auf Dich zurück...
deets

@lunar

du sprichst mir aus der seele - genau dieses cowboy-coder-denken ist unter C++-Freunden halt sehr verbreitet.

Und das Problem ist ja nicht alleine die Semantik der Sprache. Die ist schon komplex genug. Nein, auch noch die vielen verschiedenen Abstraktionen, die operator-ueberladung, templating und macro-expansion in den ganzen Libs beherrscht werden wollen.

Gehen tut das alles. Nur nicht so richtig gut.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Zum "Klassen-Vorwurf" an Java: Naja, es müssen zwar "offiziell" immer Klassen genutzt werden, aber sobald ich ein `static` davor schreibe, fühlt es sich im Grunde auch nicht viel anders an, als ein Modulattribut in Python.

In Python mag vieles leichter von der Hand gehen, aber Java ist keinesfalls völlig unbrauchbar. Es kommt halt stark auf den Anwendungsfall an. Soweit ich das überblicken kann (und das beruht zugegebenermaßen noch nicht auf allzu viel Erfahrung), ist Java für den Einsatz in Wirtschaft und Verwaltung in Betrieben und Ämtern recht gut geeignet - gerade wenn's auf Datenbankabfragen in Netzwerken, Verwaltung von Zugriffsrechten, etc ankommt (was in dem Bereich naturgemäß viel zum Einsatz kommt). Womit ich jetzt natürlich nicht sagen will, dass man das in Python *nicht* könnte - schon klar...
needsch
User
Beiträge: 15
Registriert: Donnerstag 22. Dezember 2011, 21:28

lunar hat geschrieben:@needsch: Es fällt mir angesichts der Aussage, man könne sich "alles weitere sehr schnell aneignen", sehr schwer, zu glauben, dass Du Dich wirklich mit C++ beschäftigt hast. C++ wirklich in Gänze zu beherrschen, erfordert jahrelange Übung und unglaublich viel Erfahrung. Es ist illusorisch, anzunehmen, dass jeder Programmierer, der C++-Anwendungen warten muss, diese Zeit zur Verfügung hat, oder jede Firma es sich leisten könnte, ihre Entwickler zu C++-Experten auszubilden. Und es ist anmaßend, zu behaupten, alle anderen wären schlechte Programmierer. Solche Aussagen fallen früher oder später knallhart auf Dich zurück...
1. Punkt: Zugegeben, mit einem Hochschulabschluss im Bereich Informatik habe ich eine etwas elitäre Sicht auf diese Dinge.
2. Punkt: Ich verlange nicht, dass man 20%, 50% oder 80% einer Programmiersprache beherrscht, geschweige denn 100%. Ich verlange die Bereitschaft, sich bei Bedarf "alles Weitere", was notwendig ist, anzueignen (bemerke: ich habe meinen vorherigen Beitrag in diesem Punkt präzisiert). Programmierer, die dazu nicht bereit oder nicht fähig sind, sind schlechte Programmierer. Die Komplexität der Programmiersprache ist keine Entschuldigung.

Viele Grüße
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

needsch hat geschrieben: 1. Punkt: Zugegeben, mit einem Hochschulabschluss im Bereich Informatik habe ich eine etwas elitäre Sicht auf diese Dinge.
Mit ersterem bist Du hier sicher nicht der einzige - mit letzterem eher schon; wobei mir auch etwas unklar ist, was ein "elitärer" Blick sein soll! Meinst Du das im Sinne von "abfällig"?
needsch hat geschrieben: Die Komplexität der Programmiersprache ist keine Entschuldigung.
Die Komplexität einer Sache ist aber oftmals die Motivation, etwas zu verändern und weniger komplex zu gestalten - u.a. deswegen erfinden ja Leute neue Programmiersprachen.
Ob man einen schlechten Programmierer daran erkennt, ob er vor zu großer Komplexität kapituliert, weiß ich nicht - aber einen guten Informatiker erkennt man daran, dass er mit möglichst wenig Komplexität zum Ziel kommt ;-)

Ich kann Deine negative Einstellung zu Java diesbezüglich nicht nachvollziehen (Du hast ja weiter oben die Zusammenfassung von webspider als "wunderbar" bezeichnet). Laut Deiner eigenen Definition eines "guten" Programierers müsste Dir ja Java keine Probleme bereiten. Es ist nämlich weit weniger komplex als C++ und mittels einer guten IDE durchaus komfortabel zu programmieren. Und modernes Java kommt dank Annotationen immer mehr ohne XML-Config-Dateien aus. Also fehlt da nur die Bereitschaft, sich das anzueignen? :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@needsch: Ich habe nicht die Bereitschaft mir bei Bedarf *alles* anzueignen, weil ich im Falle von C++ schon den Bedarf in Frage stelle. Ich bin der Meinung das eine Sprache nicht so komplex sein muss, und habe auch genug Sprachen angeschaut um das jetzt nicht nur auf mein eingeschüchtert sein vor der Komplexität von C++ zu schieben. Es ist eher so, dass mir die Motivation fehlt auf so viele Sachen achten zu müssen, um die sich bei anderen Sprachen der Compiler oder die Laufzeitumgebung kümmert. Macht mich das jetzt tatsächlich zu einem schlechten Programmierer?
deets

@needsch

"Bei Bedarf" aneignen also. Woran, wenn man's nicht weiss, erkennt man denn so den Bedarf? Schlechtes Programmieren ist nicht notwendigerweise bedingt durch ein Glasdecke an welche der eine stoesst - und ein anderer hat sie halt nicht.

Sondern oft auch durch schlichtes Unwissen. Und je weniger man wissen muss, und je orthogonaler das ist, was man wissen muss, desto besser. Darum bevorzuge ich Python. Auch gegenueber zB Ruby (wo es dann doch irgendwie immer 3 Arten gibt, dasselbe simple Ding zu machen).
needsch
User
Beiträge: 15
Registriert: Donnerstag 22. Dezember 2011, 21:28

Also nochmal für die Begriffsstutzigen:
"Es gibt viele Leute, die behaupten, dass niemand wirklich C++ beherrscht und dass niemals 2 Programmierer die gleichen Aspekte von C++ beherrschen. Dem stimme ich ausdrücklich nicht zu. Man muss bei C++ einfach ein paar harte Nüsse knacken, aber danach kann man sich sehr schnell alles Weitere aneignen (nach Bedarf). Wenn Programmierer zu faul sind, sich in alle zentralen Konzepte einer Sprache einzuarbeiten, dann sind es eben schlechte Programmierer - Ende."

Bedarf kann es dann geben, wenn man
- in fremden Code, an dem man arbeiten muss, Konstrukte sieht, die man nicht versteht.
- von Arbeitskollegen darauf hingewiesen ist, dass es schlechtes C++ ist, wenn man überwiegend C schreibt
- wenn man den Coding Styleguide liest und darin Begriffe vorfindet, die man noch gar nicht kennt, z.B. Smart pointer
- wenn man ganz konkret von Arbeitskollegen darauf hingewiesen wird, std::string statt C-Strings oder std::vector statt Arrays zu verwenden
- uvm.

Ein professioneller Programmierer wird - und da stimmen mir doch hoffentlich alle hier zu - sich in diesen Fällen zügig das fehlende Wissen aneignen.

Das heißt für mich: Die oben beschriebene Kritik an C++, die Sprache sei so komplex, dass niemals 2 Programmierer die gleichen Teile der Sprache kennen (und daher kaum zusammenarbeiten können), trifft nicht zu. Es sei denn, es handelt sich um unprofessionelle, schlechte Programmierer.

Weiteres:
- Wer kein C++ kann, der ist kein schlechter Programmierer. Wo kämen wir da hin?
- Ich mag Java nicht, das ist korrekt. Bin trotzdem mindestens durchschnittlich im Umgang mit Java und hätte mit Sicherheit keine Probleme im professionellen Einsatz in kürzester Zeit (3-6 Monate) mit den Profis aufzuschließen. Das ist mein persönlicher Anspruch, den konnte ich bisher auch immer einhalten. So war auch das "elitär" gemeint.

Viele Grüße
BlackJack

@needsch: Ich bin zu faul mich in alle Konzepte von C++ einzuarbeiten. Ich bin trotzdem so vermessen mich nicht für einen schlechten Programmierer zu halten. Unnötige Komplexität zu vermeiden halte ich für eine gute Eigenschaft bei einem Programmierer.
lunar

@needsch: Diese Diskussion ist bisher ohne Beleidigungen ausgekommen, fange also bitte nicht daran. Andere als "begriffsstutzig" zu bezeichnen, bringt niemanden weiter, sondern disqualifiziert allenfalls Deine Positionen.

Die Komplexität von C++ geht im Übrigen auch ein klitzekleines bisschen über "std::vector" und sichere Zeiger hinaus. Darüber sind wir doch schon längst hinaus.
needsch
User
Beiträge: 15
Registriert: Donnerstag 22. Dezember 2011, 21:28

lunar hat geschrieben:@needsch: Diese Diskussion ist bisher ohne Beleidigungen ausgekommen, fange also bitte nicht daran. Andere als "begriffsstutzig" zu bezeichnen, bringt niemanden weiter, sondern disqualifiziert allenfalls Deine Positionen.
Ich zitiere: "cowboy-coder-denken".
lunar hat geschrieben:Die Komplexität von C++ geht im Übrigen auch ein klitzekleines bisschen über "std::vector" und sichere Zeiger hinaus. Darüber sind wir doch schon längst hinaus.
Vorschlag zur Güte:
Ein guter Programmierer unterscheidet sich von anderen Programmierern dadurch, dass er stets bemüht ist, besser zu werden. Das schließt den Willen zum Dazulernen mit ein. Dazu braucht es auch keine Fortbildungen der Firma, das sollte das persönliche Anliegen und der Anspruch jedes Programmierers sein. Eigentlich halte ich das aber für eine Selbstverständlichkeit und für die Pflichten eines jeden Programmierers. Wer das also nicht hinkriegt, der ist in diesem Sinne ein schlechter Programmierer.

Ich bleibe aber dabei, dass ein guter Programmierer keine Probleme damit haben sollte, sich in C++ einzuarbeiten. 6 Monate und man sollte das meiste drauf haben.
BlackJack hat geschrieben:@needsch: Ich bin zu faul mich in alle Konzepte von C++ einzuarbeiten. Ich bin trotzdem so vermessen mich nicht für einen schlechten Programmierer zu halten. Unnötige Komplexität zu vermeiden halte ich für eine gute Eigenschaft bei einem Programmierer.
Fein.

--

Damit ist die Diskussion von meiner Seite beendet. Ich hoffe, ich konnte mich gut erklären. Mehr ist dazu auch nicht zu sagen.

Viele Grüße
BlackJack

@needsch: Ob das jetzt wirklich vergleichbar ist… Ich kenne Leute die würden sich stolz selbst als „Cowboy-Coder” bezeichnen; bei „begriffsstuzig” fällt mir jetzt gerade niemand ein.

Nun muss ich mir nur noch überlegen ob mir das was ausmacht von Dir für einen schlechten Programmierer gehalten zu werden. Ich habe nämlich massive Probleme mich in C++ ein zu arbeiten. Beim letzten Anlauf mal bin ich daran gescheitert als ich zum Thema „exception safety” gekommen bin, und nicht wusste ob ich lachen oder weinen sollte. Ich *konnte* danach einfach nicht weiter machen.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sicherlich kann sich ein guter Programmierer in C++ einarbeiten. Allerdings ändert dass nichts daran das C++ unnötig kompliziert, nicht sonderlich lehrreich und nur selten eine sinnvolle Wahl ist. Einem guten und halbwegs erfahrenen Programmierer sollte dies auch klar sein, dementsprechend reduziert sich die Zahl der Leute die C++ benutzen auf schlechte Programmierer, Programmierer die zu faul/nicht gut genug sind um einen brauchbaren anderen Job zu finden und der Minderheit der guten Programmierer die einen sinnvollen Anwendungszweck gefunden haben.
lunar

@DasIch: Es ist ziemlich unverschämt, mal eben so die Mehrheit der C++-Programmierer zu schlechten oder faulen Programmierern zu erklären, oder ihnen zu unterstellen, sie wären nicht in der Lage, einen anderen Job zu finden. Die Aussage ist schon deswegen dumm, weil man in bestimmten Anwendungsfeldern gar nicht arbeiten kann, ohne mit C++ konfrontiert zu werden. Und wenn man genau dieses Anwendungsfeld trotz C++ interessant findet, macht einen das weder schlecht noch faul.

@needsch: Man kann in sechs Monaten einen Kenntnisstand in C++ erreichen, der einem ermöglicht, an einem bestimmtem Projekt zu arbeiten. In der Regel kennt man dann allerdings nur einen kleinen Ausschnitt, und wahrscheinlich nicht einmal die Hälfte der gesamten Sprache C++.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hier mal ein Artikel (http://www.oop-trainer.de/Themen/EmbeddedCPP.html), wo auf die Eignung von C++ (nach Meinung des Autors) speziell für Embedded Systems eingegangen wird. Als großer Vorteil wird hervorgehoben, dass C++ den praktischen Aspekt, seine Programmteile in Klassen zu modellieren, verbindet mit der Abwärtskompatibilität zu C, wodurch - wenn nötig - auch hardwarenahe Programmierung auf unterster Ebene möglich gemacht wird. Am Ende erfolgt noch ein kleiner Vergleich mit Java (weiter im Hinblick auf die Eignung für Embedded Systems). Vielleicht interessiert's ja jemanden...
Antworten