Apprendre le C avant d’apprendre Objective-C

En tant que développeur Apple en herbe, je souhaite connaître l’opinion de la communauté s’il est préférable d’apprendre le C avant de passer à Objective-C et, finalement, à Cocoa Framework?

Mon intestin dit apprendre C, ce qui me donnera une bonne base.

J’apprendrais le C d’abord. J’ai appris le C (et fait beaucoup en C) avant de passer à Obj-C. J’ai beaucoup de collègues qui n’ont jamais été de vrais programmeurs C, ils ont commencé avec Obj-C et ont appris seulement autant de 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. D’habitude, je remplace alors 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 regardent) beaucoup mieux grâce aux objects (la programmation OOP peut rendre des programmes complexes bien plus intéressants que la functional programming, le polymorphism par exemple, est une fonctionnalité géniale) … et j’aime vraiment Obj-C (beaucoup plus que C ++! Je déteste la syntaxe C ++ et certaines fonctionnalités de langage sont largement dépassées et conduisent à de mauvais modèles de développement); cependant, lorsque 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 bonne fonctionnalité d’Obj-C (c’est pourquoi je l’aime bien plus que Java) est que vous pouvez passer directement du C à la volonté. Pourquoi c’est une si bonne fonctionnalité? Car tout comme Obj-C corrige beaucoup des inconvénients du C pur, le C pur peut réparer certains des inconvénients de 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 en connaissez les bases et que vous n’avez jamais essayé avec élégance comment résoudre certains problèmes courants, vous n’avez appris que la moitié des Obj-C. C est une partie fondamentale d’Obj-C. La possibilité d’utiliser C à tout moment et partout est une caractéristique fondamentale de celui-ci.

Un exemple typique est 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 lib OpenSSL). Nous avons utilisé un encodeur base64, entièrement écrit en utilisant les classes Cocoa. Cela fonctionnait bien, mais quand nous avons fait encoder 200 Mo de données binarys, cela a pris une éternité et la surcharge de mémoire était inacceptable. Je l’ai remplacé par un petit encodeur base64 ultra compact écrit entièrement en 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é NSSsortingng en sortie). Le codeur C était tellement plus compact, il battait le pur codeur Cocoa par le facteur 8 en vitesse et la surcharge de mémoire était également beaucoup moins importante. Les données d’encodage / décodage, les jeux de bits et les tâches similaires de bas niveau ne sont que les points forts de C.

Un autre exemple était un code d’interface utilisateur qui dessinait 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 objects avec des structs (après tout, les coordonnées des graphes ne doivent pas exister dans les objects), l’access à l’énumérateur avec des boucles simples et le déplacement des données entre les tableaux au lieu de l’autre, index pour index. Le résultat: une accélération par le facteur 4. Le graphique s’animait en douceur, même sur les anciens systèmes PPC.

La faiblesse de C est que chaque programme plus complexe est désastreux à long terme. Garder les applications C lisibles, extensibles et gérables demande beaucoup de discipline à un programmeur. Beaucoup de projets échouent parce que cette discipline manque. Obj-C facilite la structuration de votre application à l’aide de classes, d’inheritance, de protocoles, etc. Cela dit, je n’utiliserais pas de fonctionnalité C pure à l’extérieur d’une méthode, sauf si cela est nécessaire. Je préfère garder tout le code dans une application Objective-C dans la méthode d’un object; tout le rest va à l’encontre du but d’une application OO. Cependant, dans le cadre de 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 détails de C (y compris l’arithmétique des pointeurs, etc.) 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 à réfléchir plus rapidement aux objects.

En ce qui concerne les ressources disponibles, la documentation d’Apple suppose généralement une familiarité avec C, par conséquent, commencer avec le langage de programmation Objective-C 2.0 ne vous sera pas très utile. J’investirais dans une copie de la programmation en Objective-C de Stephen Kochan (en fonction de la rapidité avec laquelle vous souhaitez démarrer, vous pouvez envisager d’attendre la deuxième édition):

Programmation Objective-C Developers Library Programmation Bibliothèque de développeurs Objective-C 2.0

Il n’assume aucune expérience préalable et vous apprend Objective-C et autant de C que nécessaire.

Si vous vous sentez un peu ambitieux, vous pouvez commencer par le didacticiel “Learn C” de Scott Stevenson , mais il comporte certaines conditions préalables (“Vous devez déjà connaître au moins un langage de script ou de programmation, y compris les fonctions, les variables et les boucles. Vous devrez également taper des commandes dans le terminal Mac OS X. “.

(Juste pour le compte rendu et pour le contexte: j’ai appris les deux en même temps en 1991 – cela ne m’a pas fait de mal. Cependant, j’ai une formation en BASIC, Pascal, Logo et LISP. )

J’ai beaucoup réfléchi à ce sujet avant d’écrire mon livre sur Objective-C. Tout d’abord, je crois vraiment que l’apprentissage du langage C avant d’apprendre Objective-C est le mauvais chemin. C est un langage procédural contenant de nombreuses fonctionnalités qui ne sont pas nécessaires pour la programmation en Objective-C, notamment au niveau novice. En fait, le recours à certaines de ces fonctionnalités va à l’encontre du respect d’une bonne méthodologie de programmation orientée object. 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é object. Cela peut amener le programmeur à partir dans la mauvaise direction, ce qui peut mener à une mauvaise orientation et à un état d’esprit erroné pour favoriser une bonne discipline de programmation orientée object. Juste parce que Objective-C est une extension du langage C ne signifie pas que vous devez d’abord apprendre le C!

Je pense que l’enseignement de Objective-C et du langage C sous-jacent en tant que langage intégré unique est la bonne approche. Il n’y a aucune raison d’apprendre qu’une instruction “for” provient du langage C et non de son langage Objective-C. En outre, pourquoi apprendre en détail des choses comme les tableaux C et les chaînes de caractères (et les manipuler) avant d’ apprendre par exemple sur les objects array (NSArray) et les objects ssortingng (NSSsortingng)? De nombreux textes C consacrent beaucoup de temps aux structures et aux pointeurs vers les structures, et parcourent 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. Cela réduit non seulement la courbe d’apprentissage, mais réduit également la quantité de matériel à apprendre (et certains d’entre eux de manière sélective) à l’écriture de programmes Objective-C.

Je suis d’accord que vous voudrez apprendre la plupart, sinon la totalité, des fonctionnalités C sous-jacentes, mais beaucoup peuvent être différées jusqu’à bien définir les classes et les méthodes, travailler avec des objects et des expressions et comprendre les concepts d’inheritance et de le polymorphism est bien compris.

Je me plongerai dans l’Objective C – si vous avez déjà quelques langues à votre scope, ce n’est pas la syntaxe qui est la courbe d’apprentissage, c’est Cocoa.

Je pense que, pour la plupart, l’apprentissage du C est une bonne idée, peu importe l’arène dans laquelle vous allez, du moins pour comprendre le fonctionnement interne du développement de logiciels avant d’utiliser des produits préemballés, 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 insortingnsèquement C dans votre code Objective-C, donc je suppose que c’est vraiment à vous de décider. Je suis une personne de base, mais parfois cela peut gêner et je connais plusieurs personnes intelligentes qui ont travaillé de haut en bas, je pense que le plus important est de comprendre le fonctionnement interne mettez vos capacités à part 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 surensemble de C ssortingct. Cela signifie que Objective-C peut supporter tout le code C normal, donc le code commun aux programmes C est forcément visible même dans Objective- Code C

En plus de regarder les choses uniquement du sharepoint vue du langage, 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 une solide connaissance du C d’abord.

J’apprendrais Objective-C et apprendrais tout ce dont vous avez besoin au fur et à mesure.

Les zones de C sur lesquelles vous ne dépendez pas beaucoup:

  • Arithmétique et tableaux de pointeurs. Je n’ai pas utilisé de tableaux C du tout.
  • C cordes. Les chaînes d’Objective-C rendent le travail plus agréable et plus sûr.
  • Gestion manuelle de la mémoire si vous utilisez GC dans Obj-C 2.1. Je recommande fortement cet itinéraire pour des raisons de rapidité de développement et de performances.

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 un excellent livre à explorer.

Il y a beaucoup de choses que vous ne pouvez pas faire uniquement en Objective-C, donc apprendre quelques compétences de base en C sera très 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, c’est une bonne chose à connaître. Je prendrais une semaine ou deux pour me familiariser avec C

Cela dit, je me suis simplement renseigné sur l’objective C, et je dois être honnête: je n’ai pas trouvé mon expérience en C aussi utile que je l’aurais cru. L’objective C était vraiment révélateur pour moi.

Vous pouvez passer directement à Objective-C, avec les avantages suivants:

  1. Vous apprendrez “quelques” C sur le chemin.
  2. Vous apprendrez les parties C qui sont pertinentes pour vous.

Au moins pour moi, il est plus facile d’apprendre une nouvelle langue lorsque je m’intéresse à une application ou à un échantillon spécifique, et j’échoue lorsque je dois apprendre une autre chose qui n’est pas exactement ce qui m’intéresse.

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 connais pas 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 mastering!), Alors allez-y, ce ne sera pas du temps perdu.
Personnellement, je pense que c’est toujours une bonne idée d’apprendre le langage C, cela donne un bon aperçu du fonctionnement de l’ordinateur. Après tout, la plupart des langues et des systèmes sont toujours écrits en C. Ensuite, continuez! 🙂

PS: Par “passer à autre chose”, je ne voulais pas dire “laisser tomber”, mais simplement “apprendre plus, apprendre différemment”. Une fois que vous connaissez C, vous pouvez ne jamais le laisser tomber: Java utilise JNI pour appeler les routines C pour les choses de bas niveau, Python, Lua, etc. sont souvent étendues avec du code C (Lua un emballage fin à la fonction C derrière), et ainsi de suite.

Oui, l’apprentissage du langage C avant tout autre langage avancé vous aidera à apprendre d’autres langues.

Selon Wikipedia , Objective-C est un super-ensemble ssortingct de C. Ceci étant, je suggère d’apprendre le C d’abord. Ensuite, lorsque vous apprendrez Objective-C, vous saurez clairement quelles parties sont ajoutées à Objective-C.

C vous donne très peu d’abstraction de l’assemblage. Certains compilateurs C vous autoriseront même à assembler en ligne. Cela peut être très utile pour réfléchir au fonctionnement de l’ordinateur, ce qui est important à savoir.

Cela étant dit, si vous êtes vraiment intéressé par Object-C, ne vous laissez pas coincer en écrivant quelque chose en C simplement parce que c’est “bon pour vous”. Vous n’avez pas besoin de vous frustrer lorsque vous essayez d’apprendre de nouvelles compétences. Il est important que vous vous amusiez avec ce que vous faites.

Voulez-vous être un développeur hard-core? Alors apprenez d’abord c.

Les livres dont vous avez besoin pour maîsortingser complètement c sont parmi les meilleurs écrits en technologie. Voici ce dont vous avez besoin:

C Langage de programmation

La bibliothèque standard C

L’objective C est suffisamment différent de C pour ne pas mériter d’apprendre d’abord C.

Du sharepoint vue de la syntaxe / langue-famille, il est presque préférable d’étudier SmallTalk (sur lequel est basé l’objective C)

D’un sharepoint vue pratique, concentrez vos efforts sur l’apprentissage d’une langue à la fois.

Plus tard, si vous souhaitez apprendre une autre langue, C ++, Java et Python sont 1) faciles à apprendre en tant que groupe 2) populaires et donc commercialisables 3) puissants.

Vous devez avoir des connaissances de base sur C avant de lancer Objective_C, mais vous n’avez pas besoin de maîsortingser chaque détail de C.

J’ai publié mes notes après avoir lu “Programmation en Objective-C” au cas où cela aiderait quelqu’un d’autre.

apprendre l’objective c avec programmation-

Selon de nombreuses langues que vous connaissez déjà, il peut être préférable de commencer à apprendre Objective-C. Les bases dans la plupart des langues sont fondamentalement les mêmes, c’est la syntaxe qui est différente. Apprendre d’abord C ne va pas vraiment faire la différence en ce qui concerne l’apprentissage d’Objective-C.

J’ai tout de suite appris Objective-C et cela a fonctionné pendant environ un an. J’ai eu du mal à lire le code C lorsque j’ai téléchargé un projet pour voir comment ça marchait. ObjC sans C, mais tôt ou tard, vous aurez besoin de C.

À mon humble avis, il faut d’abord apprendre au moins quelques C et surtout les pointeurs. C’est encore plus important si l’on vient d’un langage sans pointeur. Beaucoup de gens demandent à propos du code comme

NSSsortingng *ssortingng = [[NSSsortingng alloc] init]; ssortingng = @"something"; 

car ils ne connaissent pas la distinction entre un pointeur et l’object sur lequel il pointe.

Bien sûr, il n’est pas nécessaire d’apprendre tout ce qui concerne C avant de pouvoir commencer avec Objective-C, mais certaines choses fondamentales sont absolument nécessaires.

Heck no, allez directement à l’objective C!

Je suis passé d’ActionScript 3 à Objective C et j’ai déjà un stagiaire dans une entreprise!

Fais ce que tu veux.

Si vous apprenez une autre langue auparavant, vous aurez toujours de la confusion en écrivant la bonne syntaxe. Je ne connais pas le but, mais l’object C utilise une syntaxe étrange (pas commune) pour appeler des méthodes d’object. Il le nomme comme envoi de messages, oui, il s’agit d’un concept orienté object pur, mais la plupart des langages orientés object le nomment comme méthode d’appel et utilisent une syntaxe plus traditionnelle des méthodes d’appel. La récupération de la mémoire est également quelque chose de très étrange, l’object C est basé sur le compte de référence de l’ancienne école. Vous aurez donc du mal à 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 à détecter toutes les différences plus rapidement.