Keine Kenntnisse mit Programmieren - Wie Lernen?

So,
ich bin jetz auch mal am Start. Bin Neuling im MacUser Forum. :D
Erstmal meine Vorkenntnisse auf dem Gebiet Programmierung: Ich bin schon recht gut in PHP (Webprogrammiersprache).
Nun möchte ich aber mal in die (Mac-)Programmierung reinschnuppern.
Was it nun besser für den Anfänger?
Gleich mit objective C un Cocoa für Mac anfangen oder doch erst C++ für Windows?
Mein späteres Ziel sind Mac Programme, weil ich Macs einfach cool finde ;-)
Ist C++ einfacher? Ist der Umstieg von C++ zu objective C und umgekehrt einfach bzw. nicht so kompliziert?

Ich hoffe ihr könnt mir weiter helfen :)
mfg MrAM
 
Ich würde mit Objective-C beginnen. Ist etwas einfacher als C++, und wenn Du ohnehin Macs Programmieren willst... Ist das kein schlechter Anfang. Wenn Du Auf Windows beginnst, musst Du nicht nur die Sprache, sondern auch die Frameworks (Cocoa!) neu lernen.
 
Wir sind mittlerweile bei 15 Seiten wie man programmieren lernt. Ich könnte wetten in einer der 220 Posts wirst du eine Antwort finden. Programiersprachen sind Werkzeuge und jede Programmiersprache mit aktiver User-Basis wird wohl halbwegs sinnvoll und nützlich sein oder? Wichtiger als die Programmiersprache sind Programmierkonzepte und Einsatzzweck zu kennen, um danach eine vernünftige Wahl zu treffen.
Wikipedia dürfe ja wohl mittlerweile auch jeder kennen. Also kann man doch mal hoffen, dass es Standard ist und zu gutem Benehmen zählt wenigstens diese Minimal-Erkenntisse dort erlesen zu haben bevor man ein Posting freisetzt oder?
Aber ich habe eine einfache Gegenfrage: du willst Mac-Programmierung machen und fragst ob C++ für Windows sinnvoll ist? Fällt dir was auf?

Hier mal der Wiki-Link zum Einstieg:
http://en.wikipedia.org/wiki/Objective-C

Toll wäre auch ein Durchlesen der vorherigen mühevoll aufbereiteten Postings
 
Inn diesem Fred findest du gefühlte 10000 Buchtipps dazu, einfach mal zurückblättern. Und zu deiner Frage findest du ebensoviele Glaubenskriege... Mein Tipp: Stöber mal hier: http://www.cocoading.de/Common/index.php?Area=1, wenn's Spass macht, kauf dir das Buch, wenn du nicht mehr los kommst davon, komm zur macoun in Frankfurt (http://macoun.de/) Anfang Oktober. Und da bekommst du dann Anregungen, die bis zur Rente reichen (wenn du alles mal probieren wills ;-)
 
  • Gefällt mir
Reaktionen: robins
Danke für eure Antworten,
meine Frage war einfach diese: Was ist besser für den Einsteiger geeignet?
Darauf habe ich keine Antwort bekommen, weder über google oder Wikipedia :(
Naja, ich werde mal mit objective c anfangen, oder es zumindest versuchen :D
mfg MrAM
 
viel Erfolg. Du kannst ja einen Blog führen, damit Neueinsteiger direkt einen Link haben. Dann müssten wir ihnen nicht immer die große Welt der Programmierung erklären und in einen Generationenstreit ausbrechen. Frägst du einen C++ Programmierer, der wird dir zu C++ raten, der Java-Programmierer schwört auf Java und der Schüler kennt höchstens (Ausnahmen bestätigen die Regel) VB. Daher haben wir 3 Programmiersprachen, 3 Meinungen und 3 Ergebnisse. Du willst für Mac OS und nicht für Windows programmieren: objective c, allerdings kannst du dir java auch im Kopf behalten. Diese Technologie ist zwar umstritten aber im Studienleben nicht mehr wegzudenken. Ebenso C++, was mich sehr verwundert.

p.s. Wieso wird den C++ und VB im Studiengang Wirtschaftsinformatik noch unterrichtet? Die erste ist zwar sehr mächtig, aber VB? Java sehe ich ja vollkommen ein, aber VB?
 
Doooch, von mir :)

Es ist nicht allzuviel Unterschied; ich würde es mal so sagen: da keine Mehrfachvererbung, etwas einfachere Handhabung von Konstruktoren und dem Fehlen von Destruktoren halte ich Objective - C für etwas einfacher. Dazu gibt es, auch Dank dem Erfolg des iPhone SDK, eine Fülle von recht aktuellen Büchern zum Thema, welche sich an Einsteiger richten. Dabei wird oft nicht nur auf die Sprache selbst, sondern auch auf das eng verbundene Cocoa - Framework eingegangen.
Folgende Empfehlungen:
1: Learn C on the Mac (C als Einstieg für C++/Objective - C scheint mir sinnvoll. Das Buch behandelt C auf Mac, i.e. mit XCode. Von der IDE abgesehen sind die Beispiele plattformneutral).
2. Objective-C und Cocoa (mein Favorit für den direkten Einstieg. Band 2 ist noch nicht erschienen, leider, für Einsteiger aber ohnehin nicht nötig).
3. Learn Objective - C on the Mac
4. Der Klassiker "Hillegass". Ich bevorzuge zwar No. 2 in der Liste, aber das Buch von A. Hillegass gilt als Standardwerk, weswegen es erwähnt sein sollte. Generell findest Du zB auf Amazon jede Menge Bücher mit Rezensionen....
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: robins
da keine Mehrfachvererbung, etwas einfachere Handhabung von Konstruktoren und dem Fehlen

kannst du mir da 1-2 Codebeispiele bringen? Weil Mehrfachvererbung finde ich schon wichtig, wenn man annimmt Leben - Mensch - Kind wäre doch eine 3 fache Vererbung. Oder verstehst du darunter was anderes? Wie sieht für dich eine einfache Handhabung von Konstruktoren aus? Mit vieler Programmiersprache hast du das "einfach" verglichen?
 
Leben -> Mensch -> Kind wird sicher gehen, Mehrfachvererbung wäre
...öhm... finde kein Sachbeispiel:
Code:
SacheA --
         \
          --> SacheC
         /
SacheB --
Hoffe das illustriert es einigermaßen, also eine Klasse, die von mehreren abgeleitet ist.
Aber ob es das in ObjC nicht gibt, dahingehend kann ich dir nicht weiterhelfen. Da es eine OOP ist, wird es eine "normale" Vererbung sicherlich geben.
 
  • Gefällt mir
Reaktionen: robins
Danke für das Beispiel. Hab Mehrfachvererbung jetzt verstanden.

Also in Java kenne ich bisher auch keine Mehrfachvererbung, eben "normale" Vererbung. OOP wird sich wohl in jeder Programmiersprache nicht viel nehmen. Außer es wurde nachträglich hinzugefügt, siehe ABAP.
 
Die Antwort ist ganz einfach. Weder C, C++ oder Objective-C sind einfache Sprachen. Noch dazu sieht Objective-C nicht gerade besonders schön und elegant aus. Aber du willst dir den Source-Code sicher nicht ausdrucken und an die Wand hängen. Wenn man objektorientieres Programmieren eh schon kennt wird man sich in sowohl in C++ wie auch in Objective-C zurecht finden.

Du könntest jetzt Windows virtualisieren und mit Visual Studio und VB entwickeln. Das wäre sicher ein einfacher Einstieg in die Programmierung.

Aber du willst ja die Vorteile eines Mac nutzen? Dann musst du dir die Cocoa-API anschauen. Du kannst mit tollen Tools arbeiten: Xcode und IB. Auf Basis der Human Interface Guidelines bekommst du ein GUI-Framework und weitere Apple-Frameworks zur Verfügung gestellt. Apple empfiehlt seit langer langer Zeit Objective-C hierfür zu benutzen.Es gibt aber auch Alternativen. "Unter der Haube" der Frameworks wirst du oft genug in C landen. Vor paar Jahren haben die Apple-Entwickler Objective-C 2.0 raus gebracht und die Sprache "moderner" gemacht. Daraus würde ich schliessen, dass C++ bei Apple kein großes Thema ist.

http://en.wikipedia.org/wiki/Cocoa_(API)
 
Danke für das Beispiel. Hab Mehrfachvererbung jetzt verstanden.

Also in Java kenne ich bisher auch keine Mehrfachvererbung, eben "normale" Vererbung. OOP wird sich wohl in jeder Programmiersprache nicht viel nehmen. Außer es wurde nachträglich hinzugefügt, siehe ABAP.
gibt es auch nicht, in Objective-C auch nicht aber in C++ Mehrfachvererbung bedeutet, man hat 2 Superklassen. Dies kann zu sehr üblen Programmierfehlern führen.
 
Noch dazu sieht Objective-C nicht gerade besonders schön und elegant aus.

Warum genau das denn nicht? Objective-C folgt der Smalltalk Idee, dass eine Programmiersprache natürlicher Sprache folgen sollte.

Bitte formuliere folgenden Pseudocode (mit richtigem Memorymanagement) "schön und elegant" in Java oder C++:

[Lisa throw:[Ball withColor:red] to:Tom]

Alex
 
  • Gefällt mir
Reaktionen: buk
Sehe ich ähnlich: Objective - C ist sogar sehr schön, mMn. Es ist halt ungewohnt für C/C++ Programmierer. Viele, mich eingeschlossen, brauchen eine Weile, um sich umzugewöhnen - inzwischen finde ich Objective-C erstklassig. Zum Beispiel inkludiert die Message

[myobject invokeMessage:withFancyParameter1:andCoolParameter2:andWeirdParameter3];

schon eine Art Dokumentation. Wenn man sich an die Konventionen hält, versteht man den Code sofort, weiss, was eine Methode macht, welche Parameter sie braucht und was selbige darstellen. Was zB bei

func(a, b, c, d);

nicht der Fall ist. Hier braucht man Doku (oder Header).

Objective-C ist, sofern man die Konventionen befolgt, sehr elegant (unnötig zu erwähnen, dass ich die Punktnotation, welche mit Obj-C 2.0 eingeführt wurde, nicht mag :), oder? )
 
  • Gefällt mir
Reaktionen: below
Wenn man von PHP kommt dann sieht der Source von C, C++, oder Java relativ freundlich aus. meine Aussage mit "schön und elegant" bezog sich (ironisch) rein auf die abschreckende Optik der fiesen eckigen Klammern. Wenn man nur ein wenig Zeit investiert um sich Objective-C anzuschauen wird man durchaus (dynamische) Eleganz finden. :)
 
meine Aussage mit "schön und elegant" bezog sich (ironisch) rein auf die abschreckende Optik der fiesen eckigen Klammern.

OK, wenn's ironisch war... Aber warum die Leute die eckigen Klammern nicht mögen entzieht sich mir. Im Übrigen sind () und {} schon besetzt.

Alex
 
naja, die Natürlichsprachlichkeit geht *mir* eben durch die eckigen Klammern verloren. Für mich erschweren sie den Lesefluß. vermutlich bin ich auch durch die alten C Sprachen vorbelastet. Denn für mich ist sowas wie:

Lisa->throw(new Ball(red),tom);

lesbarer als [Lisa throw:[Ball withColor:red] to:Tom]

weil eben besser strukturiert als die natürliche Sprache! Bis ich da die eckigen Klammern und :-Segmente richtig aufgeteilt habe, bin ich in der anderen Syntax längst weiter.
Das ist aber ganz sicher subjektiv! Der OO-Ansatz von Objective-C ist klar besser und macht die Syntax-Problemchen mehr als wett. Das Problem nicht zu wissen welcher Parameter was ist, beheben entweder die IDEs durch das einblenden der Doku sehr gut oder man behilft sich eben mit dem Build-Pattern und hat dann auch das benannte setzen von Attributen im Konstruktor.

Wer meint mit Mehrfachvererbung "mehr" zu haben, der irrt. Damit macht man sich relationale Strukturen kaputt(Symetrie und Kommuntativität leiden). Was immer dann auftritt wenn man Listen von mehrfach abgelittenen Objekten hat oder compare,deepcopy oder equals-Methoden auf solchen Objekten realisiert. Vererbung war das große Credo als OO noch neu war. Das Vererbung eine Lösung für Sonderfälle ist und das OO viel besser damit genutzt wird das ein Objekt ein Interface implementiert ist heute viel wichtiger ( in Objective-C wie in Java wie in ...). Es macht also Sinn das Objective-C sich da bewußt selbst beschränkt und auch auf den Mechanismus der Interfaces zurückgreift.

Ich würde sogar behaupten wollen das ein Objective-C ohne diese kleine Hemnis der eckigen Klammern/Doppelpunkt Syntax aufgrund seiner sonstigen großen Vorteile C++ längst an die Wand gespielt hätte. Wer von den üblichen C-Sprachen kommt ( C,C++,Java) der ist mit Objective-C einfach gehemmt und genau das reduziert die Akzeptanz fürchte ich. Umgekehrt wer mit Obejctive-C groß geworden ist, der wird es als besonders natürlich und lesbar empfinden und nicht verstehen warum andere damit schwerer klar kommen. Ich könnte wetten das man mit ein paar kleinen Änderungen bezüglich der Atrribute und Klammerei der Sprache eine deutlich höhre Akzeptanz verleihen könnte. Ein Versuch wäre das wert.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: _ebm_
@wegus: Da wir scheinbar aus dem gleichen Ursumpf entsprungen sind, geht es mir insgesamt genauso.

Mehrfachvererbung bringt immer riesen Probleme mit sich. (Beispiel: http://en.wikipedia.org/wiki/Diamond_problem). Vererbung ist Spezialisierung, nicht eine Collektion von Eigenschaften. Ich habe eben erst wieder Code gesehen, bei dem in der Basisklasse ausschließlich Utility-Funktionen versammelt waren. In tieferen Vererbungshirarchien verliert man da gern den Überblick, wo diese Methoden her kommen. Dann lieber eine Helper-Klasse mit (statischen?) Methoden!
 
diese kleine Hemnis der eckigen Klammern/Doppelpunkt Syntax

Das verstehe ich bis heute nicht, muss irgendwas psychologisches sein. {, ->, ; und ( sind OK, aber [ und : sind es nicht?

OK, vielleicht habe ich zuviel Lisp programmiert ;)

Alex
 
Ich für meinen Teil - der ich auch von anderen Sprachen kommt - hasse die Punkt-Syntax (erinnert mich an Java, was nicht grad mein Favorit ist) und es wäre mir lieber, man hätte sie sich gespart. Oder wenigstens konsequent und vollständig umgesetzt. Aber, wie schon jemand eingeworfen hat: letztlich ist vieles Geschmacksache und, nicht zu vergessen, Gewohnheit.
 
Zurück
Oben Unten