Réponses:
J'apprendrais d'abord le C. J'ai appris le C (et j'ai beaucoup fait en C) avant de passer à Obj-C. J'ai beaucoup de collègues qui n'ont jamais été de vrais programmeurs en C, ils ont commencé avec Obj-C et n'ont appris que le C que nécessaire.
De temps en temps, je vois comment ils résolvent un problème entièrement en Obj-C, aboutissant parfois à des solutions très maladroites. Habituellement, je remplace ensuite du code Obj-C par du code C pur (après tout, vous pouvez les mélanger autant que vous le souhaitez, le contenu d'une méthode Obj-C peut être entièrement du code C pur). Sans aucune intention d'insulter un programmeur Obj-C, il existe des solutions très élégantes dans Obj-C, ce sont des solutions qui fonctionnent (et ont l'air) beaucoup mieux grâce aux objets(La programmation POO peut rendre les programmes complexes beaucoup plus beaux que la programmation fonctionnelle; le polymorphisme par exemple est une fonctionnalité brillante) ... et j'aime vraiment Obj-C (beaucoup plus que C ++! Je déteste la syntaxe C ++ et certaines fonctionnalités du langage sont tout simplement excessives et conduire à de mauvais modèles de développement à mon humble avis); cependant, quand je réécris parfois le code Obj-C de mes collègues (et je ne le fais vraiment que si je pense que c'est absolument nécessaire), le code résultant est généralement 50% plus petit, ne nécessite que 25% de la mémoire utilisée avant et est environ 400% plus rapide à l'exécution.
Ce que j'essaie de dire ici: chaque langue a ses avantages et ses inconvénients. C a des avantages et des inconvénients, tout comme Obj-C. Cependant, la très grande fonctionnalité d'Obj-C (c'est pourquoi je l'aime même plus que Java) est que vous pouvez passer à C brut à volonté et inversement. Pourquoi est-ce une si grande fonctionnalité? Parce que tout comme Obj-C corrige de nombreux inconvénients du C pur, le C pur peut corriger certains des inconvénients d'Obj-C. Si vous les mélangez, vous recevrez une équipe très puissante.
Si vous apprenez seulement Obj-C et que vous n'avez aucune idée de C ou que vous n'en connaissez que les bases et que vous n'avez jamais essayé avec quelle élégance il peut résoudre certains problèmes courants, vous n'avez en fait appris que la moitié d'Obj-C. C est une partie fondamentale d'Obj-C. La possibilité d'utiliser C à tout moment et partout en est une caractéristique fondamentale.
Un exemple typique était un code que nous avons utilisé qui devait encoder des données en base64, mais nous ne pouvions pas utiliser une bibliothèque externe pour cela (pas de bibliothèque OpenSSL). Nous avons utilisé un encodeur base64, entièrement écrit en utilisant des classes Cocoa. Cela fonctionnait bien, mais lorsque nous l'avons fait encoder 200 Mo de données binaires, cela a pris une éternité et la surcharge de mémoire était inacceptable. Je l'ai remplacé par un minuscule encodeur base64 ultra compact écrit entièrement comme une fonction C (j'ai copié le corps de la fonction dans le corps de la méthode, la méthode a pris NSData en entrée et renvoyé NSString en sortie, mais à l'intérieur de la fonction, tout était C). L'encodeur C était tellement plus compact qu'il battait l'encodeur Cocoa pur par le facteur 8 en vitesse et la surcharge de mémoire était également beaucoup moins. Encoder / décoder des données, jouer avec des bits et des tâches similaires de bas niveau ne sont que les points forts de C.
Un autre exemple était un code d'interface utilisateur qui a dessiné beaucoup de graphiques. Pour stocker les données nécessaires pour peindre les graphiques, nous avons utilisé NSArray. En fait, NSMutableArray, puisque le graphique était animé. Résultat: animation graphique très lente. Nous avons remplacé tous les NSArray par des tableaux C normaux, des objets avec des structures (après toutes les informations de coordonnées du graphe ne sont rien que vous devez avoir dans les objets), l'accès à l'énumérateur par de simples boucles for et avons commencé à déplacer des données entre les tableaux avec Memcopy au lieu de prendre des données d'un tableau à l'autre, index pour index. Le résultat: une accélération du facteur 4. Le graphique s'animait en douceur, même sur les anciens systèmes PPC.
La faiblesse de C est que tout programme plus complexe devient laid à long terme. Garder les applications C lisibles, extensibles et gérables exige beaucoup de discipline de la part d'un programmeur. De nombreux projets échouent car cette discipline fait défaut. Obj-C vous permet de structurer facilement votre application à l'aide de classes, d'héritage, de protocoles, etc. Cela dit, je n'utiliserais pas la fonctionnalité C pure à travers les frontières d'une méthode à moins que cela ne soit nécessaire. Je préfère conserver tout le code d'une application Objective-C dans la méthode d'un objet; tout le reste va à l'encontre du but d'une application OO. Cependant, dans la méthode, j'utilise parfois exclusivement du C pur.
Vous pouvez facilement apprendre C et Objective-C en même temps - il n'est certainement pas nécessaire d'apprendre les minuties de C (y compris l'arithmétique des pointeurs et ainsi de suite) avant de commencer avec les ajouts d'Objective-C au langage, et en tant que programmeur novice commencer rapidement avec Objective-C peut vous aider à commencer à «penser aux objets» plus rapidement.
En termes de ressources disponibles, la documentation d'Apple suppose généralement une familiarité avec C, donc commencer avec le langage de programmation Objective-C 2.0 ne vous sera pas très utile. J'investirais dans une copie de Programming in Objective-C de Stephen Kochan (selon la rapidité avec laquelle vous voulez démarrer, vous pouvez envisager d'attendre la deuxième édition):
Bibliothèque des développeurs Objective-C de programmation Programmation Objective-C 2.0
Il ne suppose aucune expérience préalable et vous apprend Objective-C et autant de C que vous en avez besoin.
Si vous vous sentez un peu ambitieux, vous pourriez commencer par le didacticiel «Learn C» de Scott Stevenson , mais il comporte quelques prérequis («Vous devriez déjà connaître au moins un langage de script ou de programmation, y compris des fonctions, des variables et des boucles. ll devra également taper des commandes dans le terminal Mac OS X. ").
(Juste pour mémoire et pour le contexte: j'ai appris les deux en même temps en 1991 - cela ne semblait pas me faire de mal. Cependant, j'avais une formation en BASIC, Pascal, Logo et LISP. )
J'ai beaucoup réfléchi à ce problème avant d'écrire mon livre sur Objective-C. Premièrement, je crois vraiment qu'apprendre le langage C avant d'apprendre Objective-C n'est pas la bonne voie. C est un procédurelangage contenant de nombreuses fonctionnalités qui ne sont pas nécessaires pour la programmation en Objective-C, en particulier au niveau novice. En fait, le recours à certaines de ces fonctionnalités va à l'encontre de l'adhésion à une bonne méthodologie de programmation orientée objet. Ce n'est pas non plus une bonne idée d'enseigner tous les détails d'un langage procédural (et d'attaquer la solution d'un problème avec des fonctions et des techniques de programmation structurées) avant d'apprendre un langage orienté objet. Cela peut faire démarrer le programmeur dans la mauvaise direction, conduisant potentiellement à développer une mauvaise orientation et un mauvais état d'esprit pour favoriser une bonne discipline de programmation orientée objet. Ce n'est pas parce que Objective-C est une extension du langage C que vous devez d'abord apprendre le C!
Je pense qu'enseigner l'Objective-C et le langage C sous-jacent comme un seul langage intégré est la bonne approche. Il n'y a aucune raison d'apprendre qu'une instruction «for» provient du langage C et non de son surensemble de langage Objective-C. De plus, pourquoi apprendre en détail des choses comme les tableaux C et les chaînes (et les manipuler) avanten savoir plus sur les objets tableau (NSArray) et chaîne (NSString), par exemple? De nombreux textes en C consacrent beaucoup de temps aux structures, aux pointeurs vers des structures et aux itérations dans des tableaux avec des pointeurs. Mais vous pouvez commencer à écrire des programmes Objective-C sans connaître aucune de ces fonctionnalités du langage C. Et pour un programmeur novice, c'est un gros problème. Non seulement cela raccourcit la courbe d'apprentissage, mais réduit également la quantité de matériel qui doit être appris (et certains d'entre eux sélectivement filtrés) pour écrire des programmes Objective-C.
Je conviens que vous voudrez apprendre la plupart, sinon la totalité, des fonctionnalités C sous-jacentes, mais beaucoup peuvent être différées jusqu'à une solide compréhension de la définition des classes et des méthodes, du travail avec des objets et des expressions de message, et de la compréhension des concepts d'héritage et le polymorphisme est bien compris.
Je plongerais directement dans l'Objectif C - si vous avez déjà quelques langues à votre actif, ce n'est pas la syntaxe qui est la courbe d'apprentissage, c'est Cocoa.
Je pense que, pour la plupart, apprendre C est une bonne idée, quel que soit le domaine dans lequel vous vous dirigez, au moins pour comprendre le fonctionnement interne du développement logiciel avant d'utiliser des produits préemballés, de cette façon si quelque chose ne va pas. vous avez une meilleure chance de comprendre le fonctionnement interne. Il y a beaucoup de discussions à ce sujet sur SO, et c'est une question plutôt subjective, mais en général, vous utiliserez intrinsèquement C dans votre code Objective-C, donc je suppose que cela dépend vraiment de vous. Je suis un type de personne à la base, mais parfois cela peut gêner et je connais plusieurs personnes intelligentes qui ont travaillé de haut en bas, je pense que la partie importante est que vous compreniez le fonctionnement interne comme il le fera démarquez vos capacités de celles qui ne le font pas et augmentez vos capacités.
C'est une bonne idée d'apprendre C avant d'apprendre Objective-C, qui est un sur-ensemble strict de C. Cela signifie que Objective-C peut prendre en charge tout le code C normal, donc le code commun aux programmes C est lié à apparaître même dans Objective- Code C.
En plus de regarder les choses d'un point de vue purement linguistique, vous constaterez que Mac OS X est un système d'exploitation Unix complet. Toutes les bibliothèques de niveau système sont écrites en C.
Il est probablement possible d'apprendre les deux en même temps, mais je pense que vous apprécierez et comprendrez davantage Objective-C si vous avez d'abord une solide connaissance pratique de C.
J'apprendrais Objective-C et j'apprendrais autant de C que nécessaire au fur et à mesure.
Les zones de C dont vous ne dépendez pas beaucoup:
Lorsque vous apprenez Objective-C et Cocoa, vous ne pouvez pas éviter d'apprendre des bits de C. Par exemple, les rectangles sont couramment représentés par CGRect, une structure C.
Si vous avez le temps, apprenez par tous les moyens C. Comme d'autres l'ont dit ici, le livre de Kochan (deuxième et première éditions) est excellent comme livre dans lequel plonger.
Il y a beaucoup de choses que vous ne pouvez pas faire uniquement en Objective-C, donc l'apprentissage de certaines compétences de base en C sera assez critique. Vous aurez au moins besoin de comprendre les déclarations de variables et les fonctions de base de la bibliothèque C, sinon vous serez frustré.
Honnêtement, tant de langages sont basés sur la syntaxe C qu'il est bon de se familiariser avec. Je prendrais une semaine ou deux pour vous familiariser avec C malgré tout.
Cela dit, je me suis juste enseigné l'Objectif C, et je dois être honnête: je n'ai pas trouvé mon expérience C aussi utile que je l'aurais pensé. L'Objectif C m'a définitivement ouvert les yeux.
Vous pouvez accéder directement à Objective-C, avec les avantages suivants:
Au moins pour moi, il est plus facile d'apprendre une nouvelle langue lorsque je suis intéressé par une application ou un échantillon spécifique, et j'échoue lorsque je dois apprendre autre chose qui ne m'intéresse pas exactement.
Vous pouvez toujours affiner vos connaissances en C plus tard si vous vous intéressez à la programmation de niveau inférieur.
Mieux, je ne sais pas, encore moins car je ne suis pas familier avec Objective-C.
Mais les bases de C ne sont pas si difficiles à apprendre, ce n'est pas un langage très complexe (en termes de syntaxe, pas en termes de maîtrise!), Alors allez-y, ce ne sera pas une perte de temps.
Personnellement, je pense que c'est toujours une bonne idée d'apprendre le C, cela donne un bon aperçu du fonctionnement de l'ordinateur. Après tout, la plupart des langages et des systèmes sont toujours écrits en C. Alors continuez! :-)
PS: Par "bouger", je ne voulais pas dire "laisser tomber", juste "apprendre plus, apprendre différemment". Une fois que vous connaissez C, vous pourriez ne jamais le laisser tomber: Java utilise JNI pour appeler des routines C pour des trucs de bas niveau, Python, Lua, etc. sont souvent étendus avec du code C (la référence Lua suppose même juste des connaissances C pour certaines fonctions qui un wrapper fin à la fonction C derrière), et ainsi de suite.
Oui, apprendre le langage C avant tout autre langage avancé vous aidera à apprendre rapidement d'autres langages.
C vous donne très peu d'abstraction de l'assemblage. Certains compilateurs C vous permettront même d'assembler en ligne. Cela peut être très utile pour réfléchir au fonctionnement de l'ordinateur, ce qu'il est important de savoir.
Cela étant dit, si vous êtes vraiment intéressé par Object-C, ne vous laissez pas coincer à écrire quelque chose en C simplement parce que c'est "bon pour vous". Vous n'avez pas besoin de vous frustrer pendant que vous essayez d'acquérir de nouvelles compétences. Il est important que vous vous amusiez avec ce que vous faites.
Voulez-vous être un développeur hard-core? Ensuite, apprenez d'abord c.
Les livres dont vous avez besoin pour maîtriser complètement c sont parmi les meilleurs écrits de la technologie. Voici ce dont vous avez besoin:
L'objectif C est suffisamment différent de C pour ne pas mériter d'apprendre C d'abord.
Du point de vue de la syntaxe / famille de langues, il vaut presque mieux étudier SmallTalk (sur lequel l'objectif C est basé)
D'un point de vue pratique, concentrez vos efforts sur l'apprentissage d'une langue à la fois.
Plus tard, si vous souhaitez apprendre un autre langage, C ++, Java et Python sont 1) faciles à apprendre en tant que groupe 2) populaires et donc commercialisables 3) puissants.
Vous devez avoir une connaissance de base de C avant de démarrer Objective_C, mais il n'est pas nécessaire de maîtriser tous les détails de C.
J'ai publié mes notes après avoir lu "Programmation en Objective-C" au cas où cela aiderait quelqu'un d'autre.
En fonction de nombreuses langues que vous connaissez déjà, il peut être préférable de simplement commencer à apprendre Objective-C. La base dans la plupart des langues est fondamentalement la même, c'est la syntaxe qui est différente. Apprendre d'abord C ne fera pas vraiment une grande différence en ce qui concerne l'apprentissage d'Objective-C.
J'ai tout de suite appris Objective-C et cela a bien fonctionné pendant environ un an maintenant, j'ai juste eu des difficultés à lire le code C lorsque j'ai téléchargé le projet pour voir comment ils fonctionnent, mais maintenant je ressens vraiment le besoin d'apprendre C.Vous pouvez essayer d'apprendre ObjC sans C, mais tôt ou tard, vous aurez besoin de C.
À mon humble avis, il faut d'abord apprendre au moins un certain C et en particulier sur les pointeurs. C'est encore plus important si l'on vient d'une langue qui n'a pas de pointeurs. Beaucoup de gens posent des questions sur le code comme
NSString *string = [[NSString alloc] init];
string = @"something";
puisqu'ils ne connaissent pas la distinction entre un pointeur et l'objet vers lequel il pointe.
Bien sûr, il n'est pas nécessaire d'apprendre tout le C avant de pouvoir commencer avec Objective-C, mais certaines choses fondamentales sont absolument nécessaires.
Heck non, allez directement à l'objectif C!
Je suis passé d'ActionScript 3 à Objective C, et j'ai déjà un stagiaire dans une entreprise!
Faites ce que vous voulez.
Si vous apprenez une autre langue avant, vous aurez toujours de la confusion dans l'écriture de la bonne syntaxe. Je ne connais pas le but, mais Object C utilise une syntaxe étrange (pas courante) pour appeler des méthodes objet. Il le nomme comme l'envoi de messages, oui, c'est vrai en conséquence pur concept orienté objet, cependant la plupart des langages orientés objet nomment cela comme méthode d'appel et utilisent une syntaxe plus traditionnelle des méthodes d'appel. Le ramassage des ordures est également quelque chose de très étrange, Object C est basé sur le nombre de références de la vieille école. Vous aurez donc des difficultés à l'accepter si vous passez d'une autre langue. J'écris un livre Guide de migration rapide Object C pour les programmeurs C / C ++ dans l'espoir d'aider les gens à comprendre toutes les différences plus rapidement.