Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

maceis

maceis

Aktives Mitglied
Thread Starter
Dabei seit
24.09.2003
Beiträge
16.880
Reaktionspunkte
626
Nachdem an diesem Thema offensichtlich großes Interesse besteht, habe ich diesen Thread gestartet.

Hier soll diskutiert werden über:

- mac-spezifische Tipps für Anfänger
- Vor- und Nachteile der unterschiedlichen Sprachen an sich
- empfehlenswerte Lernpfade, womit fängt man am besten an
- konzeptionelle Unterschiede zwischen Programmiersprachen
- Empfehlung von guter Literatur — gedruckt und im www
- was Euch sonst noch an dem Thema interessant erscheint

Ich hoffe auf interessante Beiträge
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

Empfehlung: Visual C++ unter Win XP auf Bootcamp
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

ja, in 21 Tagen...
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

:nono:, auch wenn ich Visual Studio für die beste IDE halte, halte ich C++ nicht wirklich für eine Einsteigersprache.
Java geht auch mit dem Mac gut: Eclipse oder IntelliJ sind feine IDEs
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

Es kommt auf das Ziel an denke ich und auf die Plattform!

Wer Kernel verstehen will und begreifen wie UNIXe funktionieren der lerne C

wer für die Industrie lernen will der lerne C++ ( die Sprache hat trotz vieler Nachteile eine große Akzeptanz)

Java ist eine beliebte Ausbildungssprache deren Verbreitung sehr groß ist, die Macken von Java sind bekannt. Über do's & Don'ts zu Java gibt es viele Bücher!

Wer für den MS-Zug gewappnet sein will lerne C# entweder mit Monodevelop auf dem Mac oder mit VisualStudio Express in einer VM oder gleich mit Windows

Wer sich eh nur auf dem Mac herumtreibt, keine andere Plattform sucht, gerne auch mal einen etwas anderen Ansatz als bei den meisten Sprachen lernen möchte ( The Smalltalk Way of Life) der greife zu Obj-C!


obige Liste ist weder vollständig noch sicher zu 100% korrekt! Ich bitte um Ergänzung/Kritik!
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

Ich finde den Chaosradio-Express-Podcast vom CCC dies bzgl. recht interessant. Es sind einige Podcasts dabei die sich mit Programmierung auch für den Mac beschäftigen.
 
im iTunesU gibts auch eine gute Java Vorlesung von der RWTH Aachen, Begleitbuch ist Java von Kopf bis Fuss
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

der_Kay schrieb:
Mir sind bislang im täglichen Leben zwei "echte" bugs untergekommen...

Jaja die Unzulänglichkeit der nonformalen Sprachen :)
Ich meine keine Bugs. Mit "Macken" meine ich die Dinge die als Negativum entstehen wenn eine Sprache versucht sich durch ein Paradigma besonders hervorzutun. Java ist da sehr deskriptiv. Erlangt dadurch aber auch eine recht hohe Fehlerfreiheit. Eine typische "Macke" in meinem Sinne sind die zigfach ineinander verschachtelten Getter/Setter bei einigen komplexeren Aufrufen die es kaum mehr möglich machen auf den ersten Blick zu entscheiden ob da nun letztlich ein getXY() oder ein setXY() ausgeführt wird.

Sowas findet sich in nahezu jeder Sprache wieder. Bei Java haben sich dadurch zahlreiche Design- und Antipatterns herausgebildet die es Sinn macht zu kennen. Dann kann man auch mit den "Nachteilen" dieser Sprache sehr gut leben.

Ich nutze Java durchaus auch und nur weil es eine (IMHO) gute Ausbildungssprache ist heißt das ja nicht das man damit nicht auch Sinnvolles tun kann :)
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

Wer Kernel verstehen will und begreifen wie UNIXe funktionieren der lerne C

Ja und nein, C ist nicht nur im UNIX-Umfeld eine weit verbreitete Sprache. Man mag es ja kaum glauben, aber große Teile des Windows-Kernels sind ebenfalls in C geschrieben (von wegen, Treiberprogrammierung unter Windows ist hauptsächlich C++)

wer für die Industrie lernen will der lerne C++ ( die Sprache hat trotz vieler Nachteile eine große

Und Java! Die meisten Webservices und Webplattformen werden in der Industrie mit Java geschrieben. IMHO hat die Industrie derzeit drei Lieblingssprachen: C++, C# und Java. Je nach Anwendungsbereich kommt mal die Eine, mal die Andere zum einsatz.

Ich meine keine Bugs. Mit "Macken" meine ich die Dinge die als Negativum entstehen wenn eine Sprache versucht sich durch ein Paradigma besonders hervorzutun. Java ist da sehr deskriptiv. Erlangt dadurch aber auch eine recht hohe Fehlerfreiheit. Eine typische "Macke" in meinem Sinne sind die zigfach ineinander verschachtelten Getter/Setter bei einigen komplexeren Aufrufen die es kaum mehr möglich machen auf den ersten Blick zu entscheiden ob da nun letztlich ein getXY() oder ein setXY() ausgeführt wird.

Sowas findet sich in nahezu jeder Sprache wieder. Bei Java haben sich dadurch zahlreiche Design- und Antipatterns herausgebildet die es Sinn macht zu kennen. Dann kann man auch mit den "Nachteilen" dieser Sprache sehr gut leben.

Ich nutze Java durchaus auch und nur weil es eine (IMHO) gute Ausbildungssprache ist heißt das ja nicht das man damit nicht auch Sinnvolles tun kann :)

Gerade Java erfordert wegen dieser kranken Getter und Setter-Geschichten ein sauberes Design. Wer Setter benutzt, doch bitte nur, wenn da mehr passiert als nur ne Variable zu setzen (Validieren, Exception handling usw). Ich hab mich schon maßlos über tief kaskadierende Setter geärgert. Der Code ist faktisch nicht mehr lesbar.

Das ist aber nur ein kleiner Designfehler der Sprache. Die seit Java 5 eingeführten Generics sind auch weder Fisch noch Fleisch.


Wer für den MS-Zug gewappnet sein will lerne C# entweder mit Monodevelop auf dem Mac oder mit VisualStudio Express in einer VM oder gleich mit Windows

Wer sich eh nur auf dem Mac herumtreibt, keine andere Plattform sucht, gerne auch mal einen etwas anderen Ansatz als bei den meisten Sprachen lernen möchte ( The Smalltalk Way of Life) der greife zu Obj-C!

C# ist aber nicht auf Windows gebunden, wie du schon feststellst. Es gibt zum ersten Mal eine weit verbreitete Unterstützung für eine neue Programmiersprache. Was mir hier allerdings garnicht gefällt, ist der lachse Umgang mit der Fehlerbehandlung. Das ist aber eher den Umsteigern aus VB zu schulden, die mit dem Exception Handling garnichts anfangen können.

Grundlegend hat jede Programmiersprache, ob nun C++, Java, C#, Perl, Python, PHP, Basic, Assembler, Erlang, oder was auch immer, ihre Berechtigung. Jede unterstützt in ihrem Umfeld den Programmierer gut bei seiner Arbeit. Mit der neuen Release von C++, in der jetzt auch endlich Bibliotheken wie Boost einzug gehalten haben, ist diese Sprache auch deutlich besser zu handhaben. Für Einsteiger halte ich sie aber auch noch immer zu komplex.
 
  • Gefällt mir
Reaktionen: wegus
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

Ich nutze Java durchaus auch und nur weil es eine (IMHO) gute Ausbildungssprache ist heißt das ja nicht das man damit nicht auch Sinnvolles tun kann :)
Ich finde wegen seiner Macken ist java gerade keine gute Ausbildungssprache.
  • zweigeteiltes Typsystem (primitive Datentypen, Objekte)
  • keine Operatorüberladung (der Code wird dadurch definitiv lesbarer, missbrauchen kann man alles)
  • keine Funktionen
  • witzlose Generics
Dann lieber C#. Einziger Nachteil von C# ist, dass es kein gutes plattformübergreifendes GUI-Toolkit bietet, das immer vorhanden ist.
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

Ich finde wegen seiner Macken ist java gerade keine gute Ausbildungssprache.
  • zweigeteiltes Typsystem (primitive Datentypen, Objekte)
  • keine Operatorüberladung (der Code wird dadurch definitiv lesbarer, missbrauchen kann man alles)
  • keine Funktionen
  • witzlose Generics
Dann lieber C#. Einziger Nachteil von C# ist, dass es kein gutes plattformübergreifendes GUI-Toolkit bietet, das immer vorhanden ist.

Wer möchte, kann auch in Java die primitiven Datentypen als Objekte behandeln - zur Konvertierung muss er sogar


  • Integer für int
  • Character für char
  • Boolean für bool
  • Double für double
  • ...
Operatorüberladung halte ich bei einer Lehrsprache für übertrieben und gefährlich – eben weil es leicht missbraucht werden kann.

Bei den Generics geb ich dir recht. An die C++-Templates kommt das bei weitem nicht heran. Aber sie helfen an vielen Stellen typsicher zu programmieren.
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

Man kann sogar sagen, dass eine Sprache, die "normales" Operator-Overloading anbietet, dadurch zeigt, dass sie keine Nachrichten kennt. Und man kann sagen, dass das alles ohne Nachrichten gar nicht so richtig OOP ist. Also wenn schon, dann

[aNumber +:anotherNumber];

Und dann sieht man auch, dass das affig ist.

Übrigens dürften in jeder Applikation die Zeilen, die mathematische Berechnungen auf Objekte enthalten, sich an einer Hand abzählen lassen. (Übertrieben formuliert.) Wenn das zu Verständnisschwierigkeiten führt, sollte man auf keinen Fall C++ lernen.
 
  • Gefällt mir
Reaktionen: SumpfMonsterJun und _ebm_
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

Wer möchte, kann auch in Java die primitiven Datentypen als Objekte behandeln
Dabei kommt übrigens gleich eine weitere Falle zum Vorschein. Obwohl sie sich anscheinend so verhalten wie die primitiven Datentypen(böse Operatorüberladung) ist "==" nicht überladen.

Operatorüberladung halte ich bei einer Lehrsprache für übertrieben und gefährlich – eben weil es leicht missbraucht werden kann.
Ich weiß nicht wieso die Gefahr da immer so überschätzt ist (vllt. um zu rechtfertigen warum X keine Operatorüberladung hat). Das ist jedenfalls in Sprachen in denen das unterstützt wird, kein Problem. Ob ich nun irreführende Operatoren benutze oder meinen Methoden irreführende Namen gebe kommt irgendwie aufs selbe hinaus.

Aber sie helfen an vielen Stellen typsicher zu programmieren.
Noch nichtmal das, casten darf man dann trotzdem wieder, weil Java die Typinformationen zwischendurch wieder vergisst.

Man kann sogar sagen, dass eine Sprache, die "normales" Operator-Overloading anbietet, dadurch zeigt, dass sie keine Nachrichten kennt. Und man kann sagen, dass das alles ohne Nachrichten gar nicht so richtig OOP ist.
Na da bin ich ja nur froh, dass es in Smalltalk Operatorüberladung (ich nenne das Kind einfach mal so) gibt.

In Objective-C ist das natürlich Problematisch, da dort „+“ etc. schon mit einer anderen Funktion belegt sind, nämlich der Pointer-Arithmetik.

Ein hypothetisches
Code:
- (id)+(int)other //oder
wäre vermutlich problematisch
Code:
[obj + 4] //
kann aber auch sein, dass man das recht leicht in den Parser einbauen könnte
 
Zuletzt bearbeitet:
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

[…]
Ich weiß nicht wieso die Gefahr da immer so überschätzt ist (vllt. um zu rechtfertigen warum X keine Operatorüberladung hat). Das ist jedenfalls in Sprachen in denen das unterstützt wird, kein Problem. Ob ich nun irreführende Operatoren benutze oder meinen Methoden irreführende Namen gebe kommt irgendwie aufs selbe hinaus.
[…]
Nein, weil eben + genau + zulässt und nicht add, concatenate usw. Operatoren sind Identifier, die aus dem Sprachschatz stammen und bestehen aus einem oder maximal zwei Zeichen. Die sind daher nicht selbsterklärend, wie man etwa leicht an + bei Strings sehen kann.

Wenn jemand eine Methode p nennt, wird ihm schnell auffallen, dass er etwas falsch macht. Vor alle: Er kann es anders machen.
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

Darii schrieb:
"==" nicht überladen.

seit wann vergleicht man denn so 2 Objekte :kopfkratz: Das ist doch eher eine Identitätsprüfung !? Ein Objektvergleich ist doch ungleich komplexer und somit immer selbst zu implementieren!


anegmawad schrieb:
Nein, weil eben + genau + zulässt und nicht add, concatenate usw. Operatoren sind Identifier, die aus dem Sprachschatz stammen und bestehen aus einem oder maximal zwei Zeichen. Die sind daher nicht selbsterklärend, wie man etwa leicht an + bei Strings sehen kann.

*zustimm*
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

[…]
Na da bin ich ja nur froh, dass es in Smalltalk Operatorüberladung (ich nenne das Kind einfach mal so) gibt.
Bei Smalltalk integriert sich das in die normale Syntax für den Nachrichtenversand. +++ (Siehe mein "Wenn schon, …") /+++ Das ist ja wenigstens noch schmerzfrei. Bei C++ ist dem nicht so. Oder geht
Code:
x = a->+(b);
Und findest du das lesbarer als
Code:
x = a->add( b );

In Objective-C ist das natürlich Problematisch, da dort „+“ etc. schon mit einer anderen Funktion belegt sind, nämlich der Pointer-Arithmetik.
Das hat noch nie jemanden bei C-Sprachen gestört. Es wäre übrigens kein Problem, da die Syntax für den Nachrichtenversand komplett isoliert ist.
 
Zuletzt bearbeitet:
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

Dabei kommt übrigens gleich eine weitere Falle zum Vorschein. Obwohl sie sich anscheinend so verhalten wie die primitiven Datentypen(böse Operatorüberladung) ist "==" nicht überladen.

Genau, weil Objekte mit o1.equals(o2); verglichen werden. Mit "==" vergleichst du den Inhalt der Adressen, bei Objekten also die Identität des Objektes! Wie stellst du den Vergleich an, wenn der "=="-Operator mit der Equivalenz des Inhaltes überladen wurde?

Noch nichtmal das, casten darf man dann trotzdem wieder, weil Java die Typinformationen zwischendurch wieder vergisst.

Ja, die Typen werden zur Compile-Zeit überprüft. Ach und bei Casts sollte man sich in jeder Sprache genau überlegen, was man tut!

Ich habe insgesammt aber den Eindruck du bewertest Operatorüberladung stark über. Der Benefit bei der Lesbarkeit wird oftmals durch eine semantische Einschränkung erkauft.
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

seit wann vergleicht man denn so 2 Objekte :kopfkratz: Das ist doch eher eine Identitätsprüfung !? Ein Objektvergleich ist doch ungleich komplexer und somit immer selbst zu implementieren!
So viel zur Verwechslungsgefahr bei Operator-Overloading. :)

Aber so weit ich weiß, man möge mich schlagen, ich vergesse jeden Tag mehr C++, hängt dies nicht uneinsichtig davon ab, ob du Objektzeiger oder Objekte miteinander vergleichst. Ob das allerdings die Source lesbarer macht …
 
AW: Programmieren lernen am Mac — Vor- und Nachteile der verschiedenen Sprachen

Ein hypothetisches
Code:
- (id)+(int)other //oder
wäre vermutlich problematisch
Code:
[obj + 4] //
kann aber auch sein, dass man das recht leicht in den Parser einbauen könnte
Es wäre völlig unproblematich, müsste aber auch [obj +:4] heißen.

Darüber hinaus unterstützt *GOTTLOB!* Objective-C kein Überladen. Das mach Operator-Overloading eigentlich schon sinnlos.
 
Zurück
Oben Unten