Programmieren lernen - welche Sprache?

Status
Für weitere Antworten geschlossen.
Nö, ich kann das hinsichtlich C++ vs. Objective-C ganz einfach. Etwa:
* Weniger Sonderzeichenverwendung
* Benannte Parameter als Teil des Methodennamens
* Klarere Zuordnung durch Verwendung äußerer Klammern
 
Etwas verwundert bin ich über die Java-Empfehlungen.
Bis jetzt habe ich von Java-Anwendungen keine hohe Meinung. Das liegt z.B. daran, daß ich bis jetzt Java-Programme sowohl auf der Windows- als auch Mac-Plattform stehts als "Fremdkörper" empfunden habe, die von der Optik der GUI stark von der "Standard-Optik" (z.B. Menüelemente) abweichen und ansonsten eher träge auf Nutzereingaben reagieren. Oder habe ich da nur unsinnige Vorurteile aufgebaut?
fox78

Bzgl. des GUI gibt es bei Java zwei Möglichkeiten, zwischen denen der Programmierer wählen kann:
a) Mein Programm soll immer gleich aussehen, egal, auf welcher Plattform.
b) Mein Programm soll auf jeder Plattform so aussehen, als wäre es speziell dafür geschrieben.

Im Fall a kann ein solches Programm natürlich als Fremdkörper wirken. Aber b geht eben auch. Und dann sieht das gleiche Java-Programm wie ein Mac- oder Windowsprogramm aus, je nachdem, unter welchem System man den Doppelklick auf die Jar-Datei macht.

Speziell für den Mac kann man auch mit den Application Bundles ein Java-Programm so verpacken, daß es sich wirklich wie ein Mac-Programm verhält und der Benutzer schon sehr genau hingucken muß, um festzustellen, daß es ein Java-Programm ist. Für Windows gibt es wohl ähnliche Möglichkeiten, aber da kenne ich mich nicht aus.

Was das träge Reagieren betrifft, so hängt das natürlich vom Umfang der Applikation ab - und wie man sie programmiert, klar. Ich glaube kaum, daß es mit Tretris und Solitär da Probleme geben wird.

Ich würde Java auf jeden Fall empfehlen. Die Quelltexte sind relativ gut lesbar (wenn ich sie z.B. mit C++ vergleiche), die Programme sind plattformunabhängig (wenn dies auch bedeutet, beim Programmieren dieses Unabhängigkeit nicht ganz außer Acht zu lassen), die Sprache ist leicht erlernbar.

Rajmund
 
  • Gefällt mir
Reaktionen: fox78
* Weniger Sonderzeichenverwendung
Ahm, welche Sonderzeichen kommen in Objective-C nicht vor, die in C++ verwendet werden?

* Benannte Parameter als Teil des Methodennamens
Da halte ich dagegen: In C-Methoden werden die Parameter mit ( ) eingeklammert und durch "," getrennt, in Klassenmethoden entweder durch [ ], zusammen mit dem Methodennamen oder garnicht. Dazu kommt die Markierung der Klassenmethoden durch "+" und der Instanzmethoden durch "-"

In Java und C++ werden *alle* Methoden im C-Style beschrieben. Wie erklärst du das einem Anfänger?

* Klarere Zuordnung durch Verwendung äußerer Klammern

Du kannst in C++ auch alles klammern, was du möchtest, musst es aber nicht. Zugegebener massen ist das ein schwaches Argument. Mit einem Satz wie "Die Zuordnung geschieht in der Deklaration, die Definition implementiert nur noch" machst du es einem Einsteiger aber auch begreiflich. (Du meintest doch, dass Methoden bei der Definition nicht mehr in Klassen gruppiert werden)

Im Übrigen ging es mir nicht um Objective-C vs C++, Ich schrieb etwas von Java vs C++ und könnte auch Java vs Objective-C gemeint haben. Java-Code ist einfacher und strukturierter als C++ und Objective-C und damit leichter zu lesen (Eine Klasse pro Datei. Es wird nie deklariert, immer gleich implementiert - allerdings kann eine Schnittstelle durch ein Interface beschrieben werden).

Da fällt mir noch etwas auf. Gibt es in Objective-C soetwas wie Namsensräume? C++ hat Namespaces. Java seine Packete. Wie sieht es mit der Typsicherheit aus? Kann ich schon bei der Typprüfung beim Schreiben sicherstellen, dass in eine Collection nur bestimmte Typen aufgenommen werden? Wie sieht es mit generischer Programmierung aus? Das sind jetzt Fragen, die *ich* als Anfänger in Objective-C habe.
 
Ahm, welche Sonderzeichen kommen in Objective-C nicht vor, die in C++ verwendet werden?
Der doppelte Doppelpunkt etwa.

Da halte ich dagegen: In C-Methoden werden die Parameter mit ( ) eingeklammert und durch "," getrennt, in Klassenmethoden entweder durch [ ], zusammen mit dem Methodennamen oder garnicht. Dazu kommt die Markierung der Klassenmethoden durch "+" und der Instanzmethoden durch "-"
Damit hältst du nicht dagegen, weil weder runde Klammern noch Kommata einen Informationsgehalt bezüglich des Parameters aufweisen. Das war jetzt aber wirklich zu einfach.

In Java und C++ werden *alle* Methoden im C-Style beschrieben. Wie erklärst du das einem Anfänger?
Keine Ahnung. Wieso sollte ich das einem Anfänger erklären.

Du kannst in C++ auch alles klammern, was du möchtest, musst es aber nicht.
Dann hast du doppelte Klammerung. Das ist gewiss nicht übersichtlicher.

Zugegebener massen ist das ein schwaches Argument.
Es ist gar keines.

Mit einem Satz wie "Die Zuordnung geschieht in der Deklaration, die Definition implementiert nur noch" machst du es einem Einsteiger aber auch begreiflich. (Du meintest doch, dass Methoden bei der Definition nicht mehr in Klassen gruppiert werden)
Nein, ich meinte Aufrufketten, bei denen in C++ nicht aus dem Ausdruck selbst klar ist, wer was zurückgibt und womit die Kette fortgesetzt wird.

Im Übrigen ging es mir nicht um Objective-C vs C++, Ich schrieb etwas von Java vs C++ und könnte auch Java vs Objective-C gemeint haben.
Darum ging es nicht. Es ging darum, dass du behauptet hattest, man müsste eine Diplomarbeit schreiben, um Vorzüge einer Syntax zu zeigen. Das muss man nicht.

Java-Code ist einfacher und strukturierter als C++ und Objective-C und damit leichter zu lesen
Klar, schon wieder Beweis durch Behauptung. Mutmaßlich brauccht man erneut eine Diplomarbeit für den Beleg.

(Eine Klasse pro Datei. Es wird nie deklariert, immer gleich implementiert - allerdings kann eine Schnittstelle durch ein Interface beschrieben werden).

Da fällt mir noch etwas auf. Gibt es in Objective-C soetwas wie Namsensräume?
Du hast dich mutmaßlich nie mit Objective-C beschäftigt. Sonst würdest du bemerken, dass diese Frage haarscharf am Thema vorbei geht.

C++ hat Namespaces. Java seine Packete. Wie sieht es mit der Typsicherheit aus? Kann ich schon bei der Typprüfung beim Schreiben sicherstellen, dass in eine Collection nur bestimmte Typen aufgenommen werden?
Ich finde es bemerkenswert, mit welcher Windeseile du vom Thema flüchhtest uund ein neues Fass aufmachst. Aber glücklicherweise gibt es dafür gleich einen Artikel:
http://www.cocoading.de/Common/Article.php?Area=3&Article=8
Ab Typlosigkeit.

Wie sieht es mit generischer Programmierung aus?
Derlei Krücken für konzeptionell verdorbene Programmmiersprachen hat man in Objective-C nicht nötig.
http://www.cocoading.de/Common/Article.php?Area=3&Article=8

Das sind jetzt Fragen, die *ich* als Anfänger in Objective-C habe.
Nein, diese Fragen hat ein Programmieranfänger nicht, weil er erst gar nicht auf den Gedanken kommt, derart Krankes wie Generics sich auszudenken. Auf so einen Gedanken kommt man immer erst, wenn man nach Jahren bemerkt, wie verbaut die Programmiersprache konzipiert wurde.

So war es bei C++ und so war es bei Java …
 
Du wirst polemisch und auf meine Fragen hast du nicht wirklich geantwortet. Ausserdem belegst du deine Aussagen mit Quellen aus deiner eigenen Hand. Ich hatte hier schon einmal eine Auseinandersetzung mit einem Typen wie dir und hab ehrlich gesagt nicht nochmal die Lust, gegen wild aufgestellte Theorien anzukämpfen.
 
kann es sein dass ihr hier am Thema vorbei diskutiert?
Öffnet halt einen Thread: "Geniale Programmierer und ihre bevorzugten Sprachen -- Fragen die die Welt interessieren" :)
 
Du wirst polemisch und auf meine Fragen hast du nicht wirklich geantwortet. Ausserdem belegst du deine Aussagen mit Quellen aus deiner eigenen Hand. Ich hatte hier schon einmal eine Auseinandersetzung mit einem Typen wie dir und hab ehrlich gesagt nicht nochmal die Lust, gegen wild aufgestellte Theorien anzukämpfen.
Das stimmt beides nicht. Aber auch das wirst du sicherlich nur mit einer Diplomarbeit belegen können …
 
1) Als richtiger Programmierer sollte man von jedem Sprachen-Typ (also Objekorientiert, Logisch, Deklerative etc....) je eine lernen.

2) Ja, Obj-C ist Mac-Wahl.... aber.....

3) Meiner Meinung nach sollte man erst mal mit Grundlagen anfangen, also von Hand (ohne IDE) ein Programm schreiben und imt Terminal ausführen. Dann kann man sich mit den schönen IDEs begnügen.

4) Die Sprache, mit der man anfangen sollte ist....... C. Warum? Ganz einfach. Andere Sprachen diesen Typs sind veraltet. Und deswegen steht es auch bei Unis auf dem Lehrplan. Ob das nun die eine so tolle Sprache ist, steht auf einem anderen Blatt. Denoch stellt es eine gute Grundlage dar, weil man dann auch "unschöne" Dinge gesehen hat und das Verständins für "tolle" Sprachen wächst.

Alles was ich sage kann man natürlich ignorieren, wenn man es nur just for fun macht....
 
1.) und 4.) würde ich mal als so unhaltbar bezeichnen -- auch wenn man es nicht nur just-for-fun macht :)
 
1.) und 4.) würde ich mal als so unhaltbar bezeichnen -- auch wenn man es nicht nur just-for-fun macht :)

1.) Gilt für echte Informatiker
2.) Lasse ich auch noch durchgehen

3 und 4 .... :kopfkratz:

Alex
 
zugegeben, aber ich kenne einige "richtige Programmierer" die ausschliesslich OO programmieren

Siescher, siescher. Aber als echter Informatiker sollte man alle Paradigmen kennen. Das lernt man dann aber spätestens auf der Uni

Alex
 
1.) Gilt für echte Informatiker
2.) Lasse ich auch noch durchgehen

3 und 4 .... :kopfkratz:

Alex

1) gilt nicht für echte Informatiker, warum? Die lernen nicht die Sprachen sondern die Paradigmen ;) Du kannst mit einer OO-Sprache auch funktional und strukturiert programmieren. (in Java zB, in dem alle Methoden static sind). Was ich eher durchgehen lassen würde, ist dass du als "echter" Informatiker die Paradigmen anhand von Sprachen lernst, die diese erfüllen.

Aber wenn ich euch mal auf den Boden der Tatsachen, sprich den Sinn des Threads erinnern darf. Der TO wollte wissen, mit welcher Sprache er am leichtesten kleine grafische Programme schreiben kann. Ich denke, das haben wir ausreichend erörtert.
 
1) gilt nicht für echte Informatiker, warum? Die lernen nicht die Sprachen sondern die Paradigmen ;) ... Was ich eher durchgehen lassen würde, ist dass du als "echter" Informatiker die Paradigmen anhand von Sprachen lernst, die diese erfüllen.

OK, OK, das wolle ich sagen (siehe meinen Post oben) :cake:

Alex
 
Damit hältst du nicht dagegen, weil weder runde Klammern noch Kommata einen Informationsgehalt bezüglich des Parameters aufweisen. Das war jetzt aber wirklich zu einfach.
Doch, weil Parameter dadurch immer auf die gleiche Art und Weise erkennbar sind. Es gibt syntaktisch keine Unterschiede! Bei Objective-C habe ich Methoden im C-Style und Nachrichten. Beides unterscheidet sich zwar semantisch aber der syntaktische Zweck ist der gleiche. Darum ist es einem Anfänger schwer, soetwas begreiflich zu machen.

Keine Ahnung. Wieso sollte ich das einem Anfänger erklären.

Weil dieser Thread von einem Anfänger erstellt wurde?


Nein, ich meinte Aufrufketten, bei denen in C++ nicht aus dem Ausdruck selbst klar ist, wer was zurückgibt und womit die Kette fortgesetzt wird.

Dazu gibt es Coding Style Guides, die einem Programmierer nahelegen, sinnvolle Namen für die Methoden zu verwenden.

Darum ging es nicht. Es ging darum, dass du behauptet hattest, man müsste eine Diplomarbeit schreiben, um Vorzüge einer Syntax zu zeigen. Das muss man nicht.

Um abzuwägen, welche Syntax in welchem Anwendungsgebiet besser geeignet ist, ja! Oder könntest du sauber begründet auf einem DIN A4 Blatt beschreiben, wann C, C++, Objective-C, Erlang, Cobol, Pascal, Fortran, Java, Python, Perl, Ruby, LaTeX, HTML, XML, XSLT, Basic, C#, J#, Action Script, .......................................... die sinnvollste Sprache ist?


Und das nenne ich polemisch:

Klar, schon wieder Beweis durch Behauptung. Mutmaßlich brauccht man erneut eine Diplomarbeit für den Beleg.


Du hast dich mutmaßlich nie mit Objective-C beschäftigt. Sonst würdest du bemerken, dass diese Frage haarscharf am Thema vorbei geht.


Ich finde es bemerkenswert, mit welcher Windeseile du vom Thema flüchhtest uund ein neues Fass aufmachst.

Nein, diese Fragen hat ein Programmieranfänger nicht, weil er erst gar nicht auf den Gedanken kommt, derart Krankes wie Generics sich auszudenken. Auf so einen Gedanken kommt man immer erst, wenn man nach Jahren bemerkt, wie verbaut die Programmiersprache konzipiert wurde. …

Das stimmt beides nicht. Aber auch das wirst du sicherlich nur mit einer Diplomarbeit belegen können …

Du stellst teilweise übertriebene Behauptungen in den Raum, ohne sie zu belegen!
 
Aber wenn ich euch mal auf den Boden der Tatsachen, sprich den Sinn des Threads erinnern darf. Der TO wollte wissen, mit welcher Sprache er am leichtesten kleine grafische Programme schreiben kann. Ich denke, das haben wir ausreichend erörtert.

Und ich schmöker gerade durch zwei Openbooks, die Javainsel und C von A bis Z, mal sehen, wo ich hängenbleibe...

fox78
 
Die Bedeutung des Begriffes von "syntaktischer Zweck" hätte ich gerne näher erläutert.
Ich sehe aber, dass du offenkundig Probleme hast, Parameter als solche zu erkennen. Bei den meisten Menschen liegt das Problem eher darin, zu erkennen, was welcher Parameter macht. Und da helfen einen immer gleiche Kommate wenig. Übrigens entspricht das dem einfachen Doppelpunkt. Nur, falls du Parameter übersiehst …

Übrigens ist das mit dem Belegen so eine Sache. Achte mal auf die verwendung des Wortes "weil". Hmmmm, wozu dient das wohl?

Aber ich merke schon
a->foo()->bar() ist klarer als a->b()->c()?

So, jetzt ist aber mal gut. Ich muss mich nicht über "syntaktische Zwecke" unterhalten, beigewürzt mit "ne Methode ist auch nur eine Funktion". Das ist mir wirklich zu anstrengend …
 
Die Bedeutung des Begriffes von "syntaktischer Zweck" hätte ich gerne näher erläutert.

Der Begriff Syntax sagt dir etwas? Du kennst den Begriff Grammatik? Dir sind Ableitungsregeln ein Begriff? Dir ist Eindeutigkeit in der Klammerung von Ausdrücken ein Begriff?

Ich sehe aber, dass du offenkundig Probleme hast, Parameter als solche zu erkennen.

Wieso redest du davon, dass *ich* die Probleme hab? Das habe ich in keiner Zeile so geschrieben! Lies bitte nochmal! Da steht, dass ein Anfänger sich damit schwer tun könnte!!

Übrigens ist das mit dem Belegen so eine Sache. Achte mal auf die verwendung des Wortes "weil". Hmmmm, wozu dient das wohl?

Du wirst wieder grundlos beleidigend... Ich finde es schade, dass du dir diesen Dünkel angewöhnt hast. Woran liegt das? Weil jemand beharrlich Schönheit in etwas sieht, das du abgrundtief hasst?

a->foo()->bar() ist klarer als a->b()->c()?

Wenn foo() und bar() sinnvolle Namen sind, ja! Im Übrigen wieder nur Syntax....
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten