Quelle est la meilleure voie à suivre à long terme: C, Objective C ou C ++? [fermé]

StackOverflow https://stackoverflow.com/questions/109937

  •  02-07-2019
  •  | 
  •  

Question

Je voulais vraiment revenir à la programmation en C ++, mais je ne sais pas si je devrais revenir en C ++ (pour lequel je possède des connaissances de base en programmation sur console) ou si je devrais me tourner vers le C ou l’Objective C? Je regarde le long terme ainsi que la facilité de codage, tels que les bons rédacteurs, compilateurs, etc., ainsi que celui qui serait le plus rapide à configurer et à utiliser.

Pour accompagner cela, quel logiciel suggéreriez-vous pour travailler avec une langue suggérée?

[EDIT]

Certaines personnes ont mentionné qu'il est difficile de suggérer quelque chose si on ne sait pas ce que je fais. Je n'ai pas de programme spécifique en tête pour le moment, je commence par l'une de ces trois langues, que ce soit pour un investissement à long terme et un travail, ou comme point de départ pour autre chose.

Était-ce utile?

La solution

Je ne peux vraiment parler que de C et C ++. Apprendre n’aurait pas à faire de mal, pour la seule raison pour laquelle autant de code hérité est en C et C ++.

Pure C est souvent la seule option pour les systèmes d'exploitation, le développement de pilotes ou les environnements de développement intégrés. Les autres utilisations incluent les moments où les performances sont très critiques - où vous voulez être aussi "proches" que vous le souhaitez. aux éléments internes de la machine que possible. Il n’est jamais mauvais de connaître C parce que ces applications ne semblent pas disparaître de si tôt. C est aussi la "lingua franca" pour beaucoup d'applications * nix. Donc, si vous voulez contribuer à beaucoup de projets open source (apache / svn / cvs / etc), sachant que C est une exigence.

C ++, selon mon expérience, est utilisé lorsque vous souhaitez être "proche de la machine". comme pour le codage en C, mais vous voudriez avoir la possibilité d’inclure des niveaux d’abstraction plus élevés via une POO. La principale force du C ++ (et sa plus grande faiblesse) est son multi-paradigme. Il vous donne presque tout ce que vous pouvez faire en C, ainsi que de nombreuses fonctionnalités orientées objet. Par exemple, vous pouvez réutiliser autant de code C super-optimisé que nécessaire lors de la création de classes, en effectuant héritage / polymorphisme - autant "d'objet orienté". comme tu veux. Il existe même des moyens d'ajouter de la programmation fonctionnelle au mélange ...

On reproche souvent à C ++ d'essayer d'être trop de choses pour trop de gens. Les critiques disent que, pour tenter de tout faire, ce n’est pas très efficace. C ++ était la "lingua franca" pour les applications de bureau, mais Java et .Net ont vraiment enlevé de nombreux utilisateurs d’entreprise. Néanmoins, de nombreuses applications soucieuses à la fois de performances et utilisant l’énorme quantité de fonctionnalités supplémentaires, utiles, généralement suffisantes à vos besoins uniquement disponibles en C ++, choisiront C ++.

Autres conseils

Si vous travaillez principalement sous Windows, je vous conseillerais le C ++. Microsoft met beaucoup de travail derrière le nouveau C ++ / CLI et le compilateur C ++ natif. Avec les nouveaux ajouts TR1 et C ++ 0X, de nombreux problèmes qui existaient dans le passé sont résolus.

Je dirais - choisissez la langue de votre choix et restez-y pendant un moment. En attendant, concentrez-vous sur les algorithmes. Ce sont les blocs de construction des programmes. La langue n’est qu’une langue.

Si vous en avez appris / maîtrisé un, il ne vous reste que quelques semaines pour passer à autre chose, surtout si vous restez dans la même famille de langages (par exemple, C, C ++, Objective C, Java, C #, etc.).

Si vous pensez qu'Apple dirigera un jour le monde, Objective C.

À l'heure actuelle, je pense que le développement de l'iPhone Cocoa est là. Donc, Obj-C, personnellement.

Vous pouvez ignorer toute réponse qui n’a pas d’abord demandé ce que vous allez réellement faire. Sans cette information, la réponse est fausse, trompeuse ou tout simplement dénuée de pertinence.

Ma prise:

Parmi les trois choix que vous avez affichés, votre meilleur pari initial est probablement le C. Une fois que vous connaissez le C, maîtrisez ses bizarreries et le maîtrisez, apprendre le C ++ ou Objective-C sera probablement assez trivial. (Vos points les plus difficiles se trouveront du côté orienté objet du monde.)

Actuellement, Objective-C est utilisé le plus souvent sur les Mac, mais certains oublient que les outils GNU existent pour Objective-C et sont également pris en charge par GNUStep. (L’actuel Mac OS X est fortement basé sur l’ancien NextSTEP, dont GNUStep est plus ou moins un clone.) Le problème avec Objective-C est qu’il n’est pas largement utilisé en dehors de ces deux environnements, ce qui en fait un environnement étroit. (Et avec Obj-C, comme dans n’importe quel autre langage OO moderne, vous passerez beaucoup plus de temps à apprendre les classes de framework que les règles sous-jacentes syntax / lexical sous-jacentes.)

Je suis principalement un développeur C #. Cela paie mes factures et le fait si bien. C # ne figurait pas sur votre liste et je suppose que je sais pourquoi: on dirait que vous cherchez à vous rapprocher du métal, à être moins abstraite. Je comprends cela - et je pense que c'est le bon choix pour une croissance de carrière à long terme. J'ai commencé avec de nombreuses abstractions entre mon code et la boîte (d'abord professionnellement avec Java, puis VB6, puis .NET) et, par conséquent, je travaille maintenant très fort pendant mon temps libre pour jouer à la "rattrapage". avec le reste du monde - Je suis en train de parcourir le livre K & amp; R . Certes, je n'ai aucun besoin professionnel de me rapprocher de ce métal, mais je ressens un besoin personnel de comprendre la machine du mieux que je peux.

(De plus, ironiquement, je souhaite revenir au développement de Cocoa via Objective-C. J'avais l'habitude de travailler dessus il y a des années et je pense que je suis mieux placé pour le "récupérer" maintenant. Personnellement, j’ai le sentiment que la connaissance de C facilitera mon entrée dans Objective-C et qu’elle me rendra moins susceptible d’introduire des bogues désastreux liés à la mémoire dans mon code!)

À la fin de la journée, je pense qu'avoir la connaissance préexistante de C (alors que ce n'était pas, évidemment, nécessaire pour moi!) est une très bonne chose, et permet probablement de passer à d'autres langues au fil du temps ( ce que vous ferez , à moins que vous ne travailliez avec un système d’exploitation, un pilote ou un logiciel embarqué) soit plus facile et plus fluide. Je ne dis pas "vous ne pouvez pas vous en passer". Je dis cela en fonction de la formulation de votre question ... Je pense que c'est la bonne réponse pour ce scénario.

Je regarde votre question légèrement différemment et suggérerais en fin de compte que vous appreniez Objective-C. J'ai plusieurs raisons pour cela.

Premièrement, Obj-C a une manière très différente de voir le modèle OO tel qu’il est généralement implémenté dans des langages tels que C ++. Obj-C est basé sur Smalltalk et, en tant que tel, tous les "appels de méthode". sont implémentés sous forme de messages envoyés à l'objet approprié. Grâce à cela, les programmeurs ont été en mesure d'étendre cela à des techniques très intéressantes et assez puissantes. Une partie de la raison d’apprendre une nouvelle langue devrait toujours être de développer votre vision de la façon dont les choses peuvent fonctionner - Obj-C a beaucoup plus de potentiel que C ou C ++ à cet égard.

Deux, Obj-C, du moins sur Mac, est doté d’un cadre extrêmement puissant doté d’une excellente chaîne d’outils. C et C ++ n'ont pas vraiment le même framework cohérent sur toutes les plates-formes, bien que Microsoft soit probablement proche dans leur implémentation. Le simple fait de travailler avec Cocoa a suffi à me convaincre que l’obj-C est une excellente langue. La bibliothèque est vraiment bien pensée et me rend jaloux de ceux qui travaillent au quotidien avec elle.

Troisièmement, Obj-C est un sur-ensemble de C, donc, en l’apprenant, vous serez déjà familiarisé avec la syntaxe de C. De plus, la bibliothèque C Standard est assez anémique et peut être apprise très rapidement. Le C ++ est légèrement meilleur, avec boost disponible, mais boost n’est pas aussi cohérent que Cocoa.

En fin de compte, vous devez définir vos priorités. Si vous souhaitez simplement apprendre quelque chose de nouveau, optez pour Obj-C.

Cela dépend de ce que vous faites. Si je devais en choisir un, je dirais C ++. C'est plus multi-plateforme qu'Obj-C et moins pénible que C. Mais si vous programmez sur Mac, vous voudriez connaître Objective-C. Si vous faites de la programmation intégrée ou du piratage dans le noyau, vous voudrez probablement utiliser C.

Y a-t-il une raison pour laquelle ne pas utiliser C ++ et utiliser plutôt C ou Objective C? De nos jours, le C ++ a de loin la communauté la plus large, la plus grande base de code existante et est le mieux présenté des trois. Si vous pensez que cela n’est pas vrai, veuillez clarifier (sérieusement, je suis vraiment intéressé).

De plus, C ++ est le seul supporté par MS en termes de .NET (si vous envisagez de migrer vers .NET un jour, bien sûr).

Commencez par C, puis élargissez peut-être vos connaissances au C ++ si vous avez besoin d’une orientation objet. Objective C est une chose obscure comme Apple Script dont seuls les développeurs Apple ont entendu parler (le cas échéant), vous n'irez pas loin avec cette langue (sans vouloir offenser les adeptes de cette langue).

C est assez facile à apprendre (comparé au C ++) et vous avez de bonnes connaissances de base pour toute autre langue que vous voudrez apprendre plus tard (en particulier le C ++).

En ce qui concerne la réponse de Loren Segal, ce que vous voulez faire n'a pas d'importance lorsque vous voulez choisir entre C et C ++. C'est juste une question de préférence. Tous les deux ont les bibliothèques pour tout (puisque les bibliothèques C ++ ne sont souvent que des wrappers orientés objet autour des bibliothèques C), ils ont tous deux une énorme communauté, des IDE stables et des compilateurs.

Intel investit beaucoup dans les bibliothèques C ++ pour s’exécuter contre leurs processeurs. Étant donné qu'Intel semble dominer le monde des processeurs PC récemment, cela semble être un choix décent.

Pure C est un bon point de départ, quel que soit le langage de programmation sur lequel vous vous concentrez. Objective-C, en particulier, n’est que du code C de base, avec des idées Smalltalk parsemées au-dessus. Même si C ++ s’éloigne de C, il est toujours clair, à mon avis, que C est le langage le plus utile à connaître. En Objective-C, vous descendez souvent en C. En Ruby, Python, Erlang et d'innombrables autres langues, vous passez souvent en mode C. C’est aussi une langue que vous pouvez toujours utiliser sur tous les ordinateurs que vous touchez.

Je pense donc que chaque programmeur devrait vraiment connaître C. Au moins un petit peu.

J'ai récemment appris à Objective-C (parce que j'ai commencé à jouer avec Cocoa) après avoir été développeur C ++ pendant environ 10 ans.

J'ai trouvé l'expérience d'apprentissage d'objectif-C en plus du C ++ extrêmement instructive, même si je n'utiliserai probablement pas d'objectif-C pour un projet réel.

Objective-C et C ++ ajoutent tous deux une couche de programmation orientée objet au-dessus de C. Cependant, ils le font de manière presque complètement opposée. Il semble que chaque fois que C ++ a pris une décision de conception, Objective-C a fait le choix inverse. Par exemple, C ++ utilise le typage statique, alors qu'objectif-C utilise le typage dynamique. Ou (récent) objective-C utilise un garbage collection, contrairement à C ++.

Cela m’a fait comprendre beaucoup mieux les concepts de la programmation orientée objet et les choix de conception qu’elle implique.

Si vous souhaitez vous concentrer uniquement sur le système d'exploitation Windows, je suggère de commencer directement par C # (.Net Framework)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top