• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Was soll ich als 1. lernen?

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Würde ich nicht sagen. Man lernt mit C am besten die Grundlagen. Man sollte sich wirklich klar machen, was ein Zeiger ist,
Wozu benötigt man diese Information, wenn man mit Objective-C programmieren will?

rekursive Aufrufe wirklich lernen
Habe ich ein-, zweimal benötigt.

und sich mit simplen bis schwierigen Algorithmen die Basics reintun.
Anwendungsentwicklung hat wenig mit Algorithmik zu tn.

Wenn du mit einer Sprache wie ObjC oder C# oder JAva anfängst, dann lernst du erstmal Libraries auswendig und verstehst Algorithmen nicht. Deshalb C oder C++ ohne Frameworks oder Libraries (malabgesehen von stdio oder so was), zumindest würd ich das so machen.
Man lernt aber mit C viele Sachen, die man dann später niemals mehr bracht. Und ich sehe auch nicht, wieso man nicht die notwendigen Dinge gleich in Objective-C lernen soll. Man lernt in der Fahrschule ja auch nichts über Pferdekutschen. (Obwohl da bestimmt ganz viele Grundlagen abgehandelt werden könnten.)
 

bloodworks

Strauwalds neue Goldparmäne
Registriert
01.09.06
Beiträge
643
nun amin ich denke, da haben wir eben grundverschiedene Auffassungen. Java zum Beispiel wurde ja auch zT entwickelt um Einsteiger gleich Anwendungserstellung zu ermöglich, was zu vielen sehr netten Programmen geführt hat. Bin aber trotzdem der Meinung, dass man erst mit den Basics anfangen sollte. Das ist wie in anderen Bereichen. Ich muss ja auch erst die allgemeine organische Chemie belegen umd dann später Dinge wie sagen wir mal Plasmid Klonierung verstehen zu können. Natürlich kann ich auch gleich oben Anfangen, aber irgendwann wird mir etwas fehlen, dass ich mir dann mühsam reintun muss.

Ein weiteres Argument für C oder C++ ist die rel. Platformunabhänigkeit. Mit ObjC Kenntnissen wirst du auf anderen Plattformen nur bedingt weiter kommen. Wenn du allerdings mit C++ angefangen hast und es Verstanden hast, ist es im Prinzip egal in welcher C Variantensprache du deine Anwendung machst. Syntax ist ja recht schnell gelernt.

BTW: ja dein Buch ist gut, Richie und Stroustrup sind aber so leids mir tut besser;) Und auch näher an ihren Sprachen drann. Logischer Weise.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Bin aber trotzdem der Meinung, dass man erst mit den Basics anfangen sollte.
Was sind denn die Basics? Erst mal ein bischen Assembler programmieren? Erst mal den Kanon "Imperativ, Deduktiv, Funktional" durchmachen?


Ein weiteres Argument für C oder C++ ist die rel. Platformunabhänigkeit.
Objective-C ist nicht mehr und nicht weniger Platformunabhängig als C oder C++.

Mit ObjC Kenntnissen wirst du auf anderen Plattformen nur bedingt weiter kommen. Wenn du allerdings mit C++ angefangen hast und es Verstanden hast, ist es im Prinzip egal in welcher C Variantensprache du deine Anwendung machst. Syntax ist ja recht schnell gelernt.
Also, ich bekenne: ICH habe C++ bis zum heutigen Tag nicht vollständig verstanden. Hat das überhaupt jemand?
Aber mal konkret: Welche wichtigen Dinge lernt man mit C++, die man nicht mit Objective-C lernt?

BTW: ja dein Buch ist gut, Richie und Stroustrup sind aber so leids mir tut besser;) Und auch näher an ihren Sprachen drann. Logischer Weise.
Das ist jetzt aber wirlich Äpfel mit Birnen verglichen.

Alex
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
Objective-C ist nicht mehr und nicht weniger Platformunabhängig als C oder C++.
Das ist FUD in Reinstform!
C und C++ sind für Embedded Entwicklung geeinget, Objective-C ist das nicht. C++ ist für spezielle embedded Entwicklungen im Sicherheitsbereich zugelassen. Nur Ada (bzw. der SPARK Subset) ist für die höchste Sicherheitsklasse zertifiziert. Crossplattform Softwareentwicklung kann man mit Objective-C vergessen, da es kein Framework gibt, daß auf allen Plattformen verfügbar wäre und qualitativ an Cocoa heranreicht. GNUstep hinkt der Entwicklung von Cocoa hinterher und ist alles andere als trivial zu installieren, wenn man es denn nutzen will. Die Ausnahmen ist debian (ubuntu), aber wer installiert sich eine bestimmte Linux Dist, wenn er ein Programm braucht?

Die üblichen kommerziellen Compiler auf den verschiedenen Plattformen unterstützen C, C++ und Fortran. Das schließt die Entwicklung mit Objective-C für viele Projekte aus, da oftmals die Plattformcompiler gefordert werden.
Also, ich bekenne: ICH habe C++ bis zum heutigen Tag nicht vollständig verstanden. Hat das überhaupt jemand?
C++ ist eine Multiparadigmenprogrammiersprache, Objective-C versucht alles mit einem Konzept zu erschlagen und das ergibt ätzend langsame Programme, da das Dispatching von Objective-C zwar leistungsfähig aber fürchterlich langsam ist.
Aber mal konkret: Welche wichtigen Dinge lernt man mit C++, die man nicht mit Objective-C lernt?
Generische Programmierung, Meta-Programming um mal zwei Techniken zu nennen.
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
Beginnt man am besten gleich mit der Sprache die man braucht um diese Apps zu programmieren oder gibt es da so einen Grundstein, den man haben sollte.
Am einfachsten ist es, wenn Du erstmal normale Programme zu schreiben versuchst. Ob Du unbedingt mit Objective-C anfangen willst, mußt Du selbst wissen. Der übliche Weg ist es nicht, dafür nimmt man in er Regel eine Skriptsprache, da man so leichter Fehler findet und nicht erstmal mit einem Debugger herumhantieren muß.

Falls es doch Objective-C sein soll, dann fang erstmal mit normalen MacOS X Programmen an, und lerne die Grundlagen von Softwareentwicklung bevor Du Dich an Software an einem iPhone heranwagst.
 

buk

Carola
Registriert
19.01.09
Beiträge
112
guude,

also ich bin der meinung der threadersteller sollte zuerst programmieren lernen und dann eine sprache!

regards,
buk
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Das ist FUD in Reinstform!
C und C++ sind für Embedded Entwicklung geeinget, Objective-C ist das nicht. C++ ist für spezielle embedded Entwicklungen im Sicherheitsbereich zugelassen. Nur Ada (bzw. der SPARK Subset) ist für die höchste Sicherheitsklasse zertifiziert.

Und was hat das mit der Sprache als solcher zu tun? Ich behaupte gar nicht, das ObjC jetzt die Sprache der Wahl ausserhalb von Mac/Phone OS ist, aber ich möchte auf die Trennung von Sprache und Framework hinweisen.
DANN kommen noch zusätzliche Dinge wie Zertifizierungen und Standards hinzu.

Genauso gut könnte ich jetzt sagen, dass ADA und C++ absolut ungeeignet für Cross-Platform Entwicklungen sind, weil ich damit weder auf Android noch auf dem iPhone etwas anfangen kann.

Alex

EDIT:
Generische Programmierung, Meta-Programming um mal zwei Techniken zu nennen.
Und man hat ein Problem, wenn man das nicht von Anfang an lernt?
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Das ist FUD in Reinstform!
C und C++ sind für Embedded Entwicklung geeinget, Objective-C ist das nicht. C++ ist für spezielle embedded Entwicklungen im Sicherheitsbereich zugelassen. Nur Ada (bzw. der SPARK Subset) ist für die höchste Sicherheitsklasse zertifiziert.
Alex hatte gesagt, dass es plattformunabhägig sei. Was das mit Sicherheitszertifizierung zu tun hat, verstehe ich nicht.

Crossplattform Softwareentwicklung kann man mit Objective-C vergessen, da es kein Framework gibt, daß auf allen Plattformen verfügbar wäre
er hatte gesagt, dass Objective-C plattforumunabhängg sei.

und qualitativ an Cocoa heranreicht. GNUstep hinkt der Entwicklung von Cocoa hinterher
GNUStep fehlen Sachen, die C++ garnicht erst anbietet. Mir ist jedenfalls kein Framework bekannt, dass wie Cocoa/10.3+ Bindings, Core Data und ähnliches anbieten. Wenn das also als "Hinterherhinken"" zu bezeichnen ist, welches die plattformunabhängige Programmierung ausschließt (offenkundig braucht man das dafür unbedingt, sonst ergibt dein Beitrag ja keinen Sinn), dann gilt das für C++ auch.

und ist alles andere als trivial zu installieren, wenn man es denn nutzen will. Die Ausnahmen ist debian (ubuntu), aber wer installiert sich eine bestimmte Linux Dist, wenn er ein Programm braucht?
Jetzt hast du dch endgültig vom Thema entfernt.

Die üblichen kommerziellen Compiler auf den verschiedenen Plattformen unterstützen C, C++ und Fortran.
Der gcc, nicht der Apple-gcc, unterstützt Objective-C. Ich würde den auf vielen Plattformen als üblich bezeichnen. Dass er nicht kommerziell ist (gemeint hast du wohl kostenpflichtig) stört mich dabei wenig. Auf Linuxen etwa würde ich sogar behaupten, dass es gar keinen üblichen kommerziellen Compiler gibt. Üblich ist der gcc.

Das schließt die Entwicklung mit Objective-C für viele Projekte aus, da oftmals die Plattformcompiler gefordert werden.
Sagt wer wo was? Übrigens würde ich für Linux immer noch den gcc als "Plattformcompiler" bezeichnen. (Wobei ich ehrlich gesagt auch nicht weiß, was ein Plattformcompiler überhaupt sein soll.)

C++ ist eine Multiparadigmenprogrammiersprache,
Ja, so wie das Chaos auf meinem Schreibtisch eine Multiparadigmenordnung ist. Anders formuliert: Für nichts zu gebrauchen.

Und gibt es da nicht ein Embedded C++?
http://de.wikipedia.org/wiki/Embedded_C++

Wenn doch C++ aufgrund seiner Multiparadigmenphilosophie für so viel geeignet ist, wieso muss man dann diesen chaotischen Moloch für Embedded-Computing wieder einschränken?

Objective-C versucht alles mit einem Konzept zu erschlagen und das ergibt ätzend langsame Programme, da das Dispatching von Objective-C zwar leistungsfähig aber fürchterlich langsam ist.
Das ist falsch.

Generische Programmierung, Meta-Programming um mal zwei Techniken zu nennen.
Zwei Hinzufügungen, um das Chaos perfekt zu machen.
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
nun amin ich denke, da haben wir eben grundverschiedene Auffassungen.
Das mag sein. Ichbin sogar manchmal mit mir selbst grundverschiedener Auffassung.

Java zum Beispiel wurde ja auch zT entwickelt um Einsteiger gleich Anwendungserstellung zu ermöglich, was zu vielen sehr netten Programmen geführt hat. Bin aber trotzdem der Meinung, dass man erst mit den Basics anfangen sollte.
Ach, ich habe fürher Maschinensprache (Ja, nicht einmal Assembler, weil man einen kleinen Fehler in einem Assemblerprogramm duchaus mal korrigiert, indem man die Opcodes selbst ermittelt und in den EPRom-Simulator eingibt) gemacht. Das sind Basics. Ich würde das niemanden empfehlen.

Wieso allerdings gerade C Basics sein sollen, verstehe ich nicht. C ist eine Hochsprache.

Das ist wie in anderen Bereichen. Ich muss ja auch erst die allgemeine organische Chemie belegen umd dann später Dinge wie sagen wir mal Plasmid Klonierung verstehen zu können.
Weiß ich nicht. Aber wieso empfiehlst du dannnict das Erlernen von Maschinensprache, wenn das angeblich so wichtig ist?

C als Basics zu bezeichnen ist jedenfalls eher bemerkenswert.

Natürlich kann ich auch gleich oben Anfangen, aber irgendwann wird mir etwas fehlen, dass ich mir dann mühsam reintun muss.
Wenn dir etwas von C in Objective-C fehlt, tust du es dir genau dann rein, wenn du das brauchst. Es ist ein merkwürdiges Vorgehen, erst eine Hochsprache zu erlernen, weil die die Basics zu etwas sein sollen, wobei die Hochsprache kein Basic ist und dann auch noch jede Menge Sachen enthält, die man gar nicht braucht.

Komischerweise verzichtet man auch in C++ weitestgehend auf Zeiger und nimmt stattdessen Referenzen, die technisch ähnlich funktionieren, aber eine andere Semantik haben. Mutmaßlich war da jemand der Auffassung, dass man die technische Implementierung nicht verstandenhaben muss. Und Objektzeiger in Objective-C muss man wirklichnicht als C-Pointer verstehen. Ganz im Gegenteil: Das führt meist ins verderben.

Ein weiteres Argument für C oder C++ ist die rel. Platformunabhänigkeit.
Nein, das wäre ein Argument für Java.

Mit ObjC Kenntnissen wirst du auf anderen Plattformen nur bedingt weiter kommen. Wenn du allerdings mit C++ angefangen hast und es Verstanden hast, ist es im Prinzip egal in welcher C Variantensprache du deine Anwendung machst. Syntax ist ja recht schnell gelernt.
C++ aber nicht.

BTW: ja dein Buch ist gut, Richie und Stroustrup sind aber so leids mir tut besser;) Und auch näher an ihren Sprachen drann. Logischer Weise.
Ich weiß nicht, was das mit dem Thema zu tun hat.

Wer mit dem Programmieren anfängt, will meist Anwendungen entwickeln. Dafür sind C und C++ schlicht ungeeignet.

+++

Übrigens verstehe ich nicht ganz, warum du auf meine konkreten Einwände an bestimmten Stellen deines Beitrages, nicht aufnimmst.
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Ähm...war dieser Thread nicht von einem Anfänger eröffnet? ;)
Ja, der Anfänger will sich aber mit generischer Programmierung im Embedded-Bereich beschäftigen und daher C+ lernen.

+++
Ich werde darauf gerade hingewiesen: Der TS wollte sich mit generischer Programmierung im sicherheitsrelevanten Embedded-Bereich beschäftigen. Das hatte ich schon wieder vergessen.
/+++

Oder aber, er will einfach ein paar Anwendungen für seinen Computer schreiben. (Nur so als fern liegende Möglichkeit.) Dann sollte er allerdings die Finger von C und C++ lassen und Java nehmen. (Oder, wenn man den Beitrag in einem Mac-Forum als solchen verstehen darf, Objective-C.)

+++
Da kommt nämlich auch kein Framework-Hersteller (so einer von den plattformunabhänggen) auf den Gedanken, erst einmal die Sprache zu erweitern und durch noch einen Precompiler zu schicken. Ist schon irre, eine "Multiparadigmensprache", deren Konzepte so "multiunbrauchbar" sind, dass man als Hersteller eines portablen Frameworks für die Anwendungsentwicklung erst einmal den Sprachstandard erweitern muss. Das ist dann wohl Multi--. (Man kan eben mit C++ prinzipiell aless machen, nur nicht das, was man gerade möchte.)
 

blueman-benny

Bismarckapfel
Registriert
13.04.09
Beiträge
140
Ich weiß das..ich wollte nur eure Diskussion ein wenig zügeln, denn ab Seite 2 dürfte er nicht mehr unbedingt durchblicken...selbst ich habe da noch so meine Schwierigkeiten, obwohl ich seit fast 1,5 Jahren am Ball bin...(bin quasi auch noch Grün hinter den Ohren).
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Mir war das schon klar. Ich wollte dir mit ironischem Ton zustimmen.

Für den TS, der offenkundig einfach für seine berufliche Zukunft etwas programmieren lernen will, sollte es eine einfache und verbreitete Sprache sein. Da dürften sich auf den ersten beiden Seiten dieses Threads die Antwort bereits finden: Java.
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
01.03.07
Beiträge
665
Mit reinem C kann man noch viel schönere Sachen machen:
Code:
long a=1e4,d,h; unsigned b,c=21014,e,f[21014],g,i;
main(){for(;b=c,c-=14; i=printf("%04d",e+d/a),e=d%a)
  while(--b) d=h*b+a*(i?f[b]:a/5), g=b*2-1, h=d/g, f[b]=d-h*g;}
:cool:

ei ehrlich: Du findest eine Frau schön, die ihren Kopf an der linken Niere kleben hat, bei der sich eine Titte auf dem Hals befindet und eine weitere an der rechten Arschbacke und bei der die Vagina eine Öffnung am rechten Unterarm ist, der sich in der Mitte des Rückens befindet.

Schönheit entsteht eben im Auge des Betrachters …
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Jetzt wird's aber albern. Habe ich behauptet, das sei schöner Code?
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Es handelt sich bei dem Schnippsel um eine schöne (!) Kombination aus Codekürze und Programmnutzen, aber nicht im Hinblick auf Ästhetik und Wartbarkeit. Mehr wollte ich nicht behaupten.
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
Und was hat das mit der Sprache als solcher zu tun?
Falls es Dir entgangen sein sollte, Objective-C 2.0 wird von GNU gcc bisher nicht unterstützt. GNU gcc und GNUstep unterstützen nur einen veralteten Subset von Objective-C und Cocoa, und man tut niemanden einen Gefallen ständig Nebelkerzen zu werfen und krampfhaft das Gegenteil zu behaupten.
Genauso gut könnte ich jetzt sagen, dass ADA und C++ absolut ungeeignet für Cross-Platform Entwicklungen sind, weil ich damit weder auf Android noch auf dem iPhone etwas anfangen kann.
Auf zwei Plattformen ist es nicht verfügbar! Dafür gibt es reichlich Auswahl bei anderen Plattformen. Zum Beispiel: Qt und C++ sind für Windows, Linux, UNIX, MacOS X, WinCE und Linux embedded verfügbar. Da ist eindeutig ein qualitativer Unterschied zu Objective-C und Cocoa zu sehen. Ditto verhält es sich mit Java und einigen anderen Sprachen sowie Frameworks.
Und man hat ein Problem, wenn man das nicht von Anfang an lernt?
Das war doch nicht Deine Frage! Ich sehe persönlich es als sinnvoll an, daß man mit einer Skriptsprache anfängt und von C, C++, Objective-C die Finger läßt. Ada könnte auf Grund der Laufzeitumgebung schon eher geeignet sein, aber da hat man das Problem der Toolchain unter MacOS X. Insofern ist eine Skriptsprache wie Ruby oder Pyhon eindeutig die bessere Wahl, da man hier erstmal Grundkonzepte der Programmierung lernt, um dann später sinnvoll Applikationen fürs iPhone entwickeln zu können.
 

tjp

Altgelds Küchenapfel
Registriert
07.07.04
Beiträge
4.059
GNUStep fehlen Sachen, die C++ garnicht erst anbietet. Mir ist jedenfalls kein Framework bekannt, dass wie Cocoa/10.3+ Bindings, Core Data und ähnliches anbieten.
C++ ist eine Programmiersprache und GNUstep ein Framework. Wenn man hier einen sinnvollen Vergleich ziehen wollte, dann muß man schon die Sprachen bzw. Frameworks vergleichen. C++ hat eine Standard Library die Objective-C nicht kennt, und beim Vergleich z.B. von Qt und GNUstep sieht es nicht so schlecht für Qt aus. Es wäre halt mal angebracht den Blick über den Tellerrand zu wagen und nicht in uralten Vorurteilen zu schwelgen. Im Gegensatz zu Cocoa ist Qt Plattform unabhängig und auf den vorher aufgeführten Plattformen verfügbar. Es ist definitiv nicht das Mittel um die perfekte MacOS X Applikation zu schreiben, aber das sollte einem nicht dazu verführen Unsinn zu schreiben.