Mon premier langage de programmation était PHP ( gasp ). Après cela, j'ai commencé à travailler avec JavaScript. J'ai récemment travaillé en C #.
Je n'ai jamais regardé des langues de niveau moyen ou bas comme C.
Le consensus général dans l'ensemble de la communauté de programmation est le suivant: "Un programmeur qui n'a pas appris quelque chose comme C, franchement, ne peut tout simplement pas gérer les concepts de programmation tels que les pointeurs, les types de données, la transmission de valeurs par référence, etc."
Je ne suis pas d'accord. Je soutiens que:
- Parce que les langages de haut niveau sont facilement accessibles, davantage de "non-programmeurs" plongent et font des dégâts
- Afin de pouvoir vraiment faire quelque chose dans un langage de haut niveau, il est nécessaire de comprendre les mêmes concepts similaires à ceux évoqués par la plupart des partisans de «apprendre au plus bas niveau».
Certaines personnes ont besoin de savoir C; ces personnes occupent des emplois qui les obligent à écrire du code de bas à moyen niveau. Je suis sûr que C est génial, et je suis sûr qu'il y a quelques mauvais programmeurs qui connaissent C.
Pourquoi ce parti pris? En tant que bon programmeur honnête et affamé, si je devais apprendre le C (pour une raison imprévue), je le ferais également. Compte tenu de la multitude de langues disponibles, les bons programmeurs ne devraient-ils pas se concentrer sur l'apprentissage de ce qui nous fait progresser? Ne devrions-nous pas apprendre ce qui nous intéresse? Ne devrions-nous pas utiliser notre temps fini pour aller de l' avant ? Pourquoi certains programmeurs ne sont pas d'accord avec cela?
Je crois que la recherche de l'excellence dans ce que vous faites est la caractéristique déterministe fondamentale entre les bons programmeurs et les mauvais.
Quelqu'un at-il des exemples concrets montrant comment des éléments écrits dans un langage de haut niveau, tels que Java, Pascal, PHP ou JavaScript, ont réellement bénéficié d'une connaissance préalable du langage C? Des exemples seraient les plus appréciés.
la source
Réponses:
L’avantage de connaître C, c’est que vous avez une très bonne idée du fonctionnement d’un ordinateur. Pas simplement comment votre modèle de programmation fonctionne, mais comment la mémoire est aménagée, etc.
Le seul niveau en dessous de C est l’assemblage parlé par un processeur particulier.
(J'ajouterais que le fait de connaître C vous permet également d'apprécier le peu de travail que vous avez à faire dans une langue de niveau supérieur. Et espérons, une appréciation des coûts associés au travail dans cette langue de niveau supérieur.)
la source
Je ne pense pas que les réponses ici correspondent vraiment à ce que cherchait le PO, alors je vais vous donner mon opinion personnelle.
Ecoute, je suis un snob C sans vergogne. Mon attitude est que si vous ne connaissez pas C, dans une certaine mesure, vous ne savez pas vraiment ce que vous faites en tant que programmeur. Donc, je pense que je suis le genre de personne "partial" dont vous parlez ici.
Cependant, en pratique, que vous sachiez vraiment ce que vous faites en tant que programmeur ne vous empêche pas nécessairement de développer un logiciel vraiment impressionnant et utile en utilisant des outils de haut niveau. Je veux dire, le créateur de Stack Overflow, Jeff Atwood, apparemment, ne connaît même pas C, et pourtant, je dirais que Stack Overflow est une application Web sacrément bonne.
Que vous décidiez ou non d'apprendre le C (ou C ++, ou l'assemblage) dépend du type de programmeur que vous voulez être. Si vous souhaitez simplement développer des applications Web ou professionnelles de qualité, c'est très bien - vous n'avez pas vraiment besoin d'apprendre le C. Mais si vous voulez vraiment exceller dans ce que vous faites, si vous voulez travailler sur des projets vraiment cool art, alors vous devez vraiment vous prendre suffisamment au sérieux en tant que programmeur pour vraiment comprendre le fonctionnement des ordinateurs. Puisque C est essentiellement le système d’exploitation de la langue, ainsi que le langage qui alimente à peu près tout le reste (du noyau Linux à la plupart des machines virtuelles Java, en passant par les interpréteurs Python et Ruby, les bases de données SQL, les serveurs Web et à peu près tous les pilotes de périphérique). , une compréhension intime de la langue va un long chemin.
Sans compter que la connaissance du C (ou du C ++) ouvre une énorme opportunité pour contribuer à de grands projets open source qui touchent des millions (ou des centaines de millions) de personnes. Vous souhaitez améliorer l’interpréteur Python ou le navigateur Web Chromium? Eh bien, vous devez connaître C pour le premier et C ++ pour le dernier.
C'est pourquoi il est complètement faux de comparer des langues naturelles mortes comme le latin ou des technologies obsolètes telles que le calèche. Une grande partie de notre infrastructure logicielle du XXIe siècle est alimentée par le code C, raison pour laquelle celui-ci reste aussi pertinent que jamais.
Donc, savoir si vous devez ou non apprendre C dépend vraiment de ce que vous voulez de votre carrière de programmeur.
la source
En règle générale, vous devez comprendre au moins un niveau d'abstraction inférieur à celui dans lequel vous travaillez habituellement. Pensez que votre interpréteur PHP ou JavaScript peut en réalité être implémenté en C ou C ++. Vous finirez par rencontrer un bogue dans l’interprète ou même une erreur d’exécution C. Si vous ne comprenez pas C, vous allez être limité à envoyer un rapport de bogue au responsable, en espérant qu'il puisse le reproduire et qu'il s'en soucie, puis vous tournez les pouces. Si vous connaissez C, vous pouvez leur dire exactement où se trouve le problème et en quoi il consiste.
Cela signifie également que si vous travaillez en C / C ++, vous devriez au moins pouvoir lire l'assemblage sur votre plate-forme.
En ce qui concerne l’apprentissage de C quand vous en avez besoin: j’observe que la plupart des programmeurs peuvent apprendre Perl / Python / Javascript à la demande, mais assembler / C / Lisp semble prendre beaucoup plus de temps; se pose.
la source
Je ne suis pas d' accord que vous avez besoin d'apprendre C d' abord , mais je crois que vous devriez apprendre C éventuellement . Toutes les abstractions ont des fuites et la compréhension de C facilite la compréhension de ce qui se passe réellement lorsque vous utilisez une abstraction sophistiquée de haut niveau. Cela dit, je pense aussi que tous les programmeurs sérieux devraient apprendre à lire au moins l'assembleur, pour la même raison.
L'apprentissage de ces concepts de bas niveau donne une capacité surprenante à raisonner sur des sujets de haut niveau. Par exemple, en C ++ et D, les arguments par défaut des fonctions virtuelles sont déterminés par le type statique (date de compilation) de l'objet, et non par le type dynamique (exécution). Cela n'a aucun sens si vous ne comprenez pas le fonctionnement de vtables et des conventions d'appel et pourquoi il serait extrêmement difficile d'implémenter des fonctions virtuelles dans le sens opposé.
la source
All abstractions are leaky
déclaration manifestement fausse .Le parti pris est un statu quo. Dans les temps anciens (années 1980 et antérieures), le C / C ++ était plutôt nécessaire pour les applications de performance. Cela a changé, mais les développeurs expérimentés viennent généralement de ce contexte old-skool et voient les choses dans ce contexte.
Pour le développement actuel, d'autres langages sont utilisés - C # est un langage populaire, tout comme Java, tandis que PHP et Python sont populaires pour les projets internes. Il est toujours utile de disposer de quelqu'un possédant au moins les connaissances de base dans ce domaine au cas projet PHP source pour, disons, votre système de suivi des bogues. Cependant, les spécifications du travail semblent toujours provenir de ce modèle standard écrit il y a 25 ans.
la source
Bien que je déteste publier le billet obligatoire sur le blog Joel, je suis d’accord avec lui ici . C est la lingua franca de la programmation. Je ne peux pas penser à un langage de haut niveau qui ne puisse pas être en quelque sorte en interface avec lui. Pour cette raison, C reste un choix populaire pour les choses de type programmation. Vous ne pouvez simplement pas vous connecter à certaines choses au niveau OS sans C.
En outre, que comptez-vous faire lorsque votre langage de haut niveau n’est pas assez rapide? Savoir écrire en C est particulièrement important lorsque vous utilisez un langage de haut niveau et typé dynamiquement, comme Ruby, Python ou PHP. Mais même les programmeurs Java et C # ont besoin de passer de temps en temps au C.
la source
Quelle belle fête de limace! (Comme on le dit soi-disant: est-ce un combat privé ou quelqu'un peut-il participer?)
J'étais professeur et ce que j'ai découvert (après quelques essais et erreurs), c'est qu'il était beaucoup plus facile de guider les étudiants à travers les concepts complexes de programmation s'ils comprenaient, à un niveau élémentaire, ce que faisait l'ordinateur. Pas dans tous les détails, mais le principe de base, comme la mémoire, les instructions, etc. Ce que j'aime de C, c’est qu’il est proche de la machine.
Cela ne veut pas dire que d'autres enseignants sont venus au même endroit. Ils ont commencé dans le langage de haut niveau (BASIC :-) et ont ensuite avancé, sans effets néfastes évidents.
Donc, au final, Stephen, vous pourriez avoir raison. Je ne le pense pas, mais je me suis déjà trompé.
la source
Je suppose que c'est un progrès.
Il y a vingt ans, il était généralement admis qu'il fallait apprendre l'assembleur pour comprendre ce que l'on gagnait dans les langages de niveau supérieur comme le C (c'est pourquoi j'ai dû suivre un cours d'assembleur au collège à l'aide de VAX Macro; devinez à quel point cela est utile. s'est avéré être sur l'obtention du diplôme).
Il y a une superstition qui dit que C est un peu difficile à apprendre et qu'il ne fournit quasiment aucune abstraction (les pointeurs et les flux d'octets le sont presque), apprendre que cela fera de vous un meilleur programmeur ou vous donnera une meilleure idée du fonctionnement du matériel. niveau.
Ce n'est pas forcément vrai. La norme C ne vous rapproche pas du métal plus que toute autre 3GL (Pascal, Fortran, etc.). Certaines implémentations en C peuvent fournir des crochets qui vous donnent un meilleur accès à certaines zones, mais en général les pointeurs nus sont à peu près aussi proches que vous le pouvez, ce qui n’est pas proche du tout. Vous ne pouvez pas accéder directement aux registres ou aux mots d'état, par exemple.
En fin de compte, tout se résume aux opcodes et aux modes d'adressage, donc si vous êtes vraiment intéressé par la façon dont les choses fonctionnent au niveau inférieur, vous seriez mieux servi pour apprendre l'assembleur sur C.
En soi, apprendre C ne fera pas (nécessairement) de vous un meilleur programmeur. Cela vous donnera certainement une idée des types de chaînes actuels et des bibliothèques de conteneurs normalisés, cependant.
la source
Une langue est un outil. Si vous devez seulement écrire des pages Web et autres, je suis sûr que vous pouvez vous en tirer sans avoir à apprendre le C, de la même manière que si vous ne fabriquez jamais que des maquettes en plastique, vous n'avez besoin que la clé n'est normalement pas nécessaire.
J'écris du code pour des systèmes embarqués avec des ressources de mémoire extrêmement limitées (le plus gros que j'ai fait récemment est de 16 Ko et c'était énorme). Sur ce marché, le C ou l'assembleur sont les seules options et aucun des langages de haut niveau moelleux ne fonctionne tout simplement pas.
la source
D'après mon expérience, C / C ++ a été pendant un certain temps un bon tampon qui séparait les bons programmeurs des codeurs VB6. Après avoir travaillé pendant cinq ans en C / C ++, j'ai trouvé un emploi dans VB6. J'ai été surpris par la qualité (ou le manque de qualité) des codeurs. Ils étaient peu intéressés par les entrailles de la langue, par le design ou par la performance. Malheureusement, lorsque la société a migré vers .Net, les codeurs C / C ++ et .Net utilisaient les mêmes outils. Les codeurs VB étaient encore pire que les codeurs VB.Net. La situation a empiré lorsque tout le développement est passé à ASP.NET. Soudainement, quiconque pouvait glisser et déposer un contrôle était un programmeur.
Sur le marché du travail, cependant, il n'y avait pas grand chose à différencier des codeurs endurcis (ex C / C ++) et des touristes.
En tant que tel, avoir C ou C ++ sur votre CV peut vous aider à vous différencier du riff-raff.
la source
Procoativement demandé: demandez-vous la confirmation que vous n'avez pas à apprendre le C? Si vous apprenez le C pur (pas nécessairement le C ++), vous obtiendrez une compréhension approfondie du modèle d'exécution d'un ordinateur. Surtout sur la mémoire et l'allocation. Ce genre de choses est également important pour les personnes programmant dans des langages de niveau supérieur.
Pour un programmeur PHP, la manière dont le code est exécuté sur la machine donnée est moins transparente. Cela n’a peut-être pas d'importance pour le programmeur PHP puisque le transfert de réseau est le goulot d'étranglement de l'application, etc.
Plain PHP / Python / C # a beaucoup de couches d'abstraction entre le langage et le processeur. ces couches sont si épaisses qu'elles ne vous permettent pas de regarder à travers elles. Lorsque vous apprenez le C, il y a une mince feuille entre vous et la CPU et le système d'exploitation. Cela ne facilite pas la programmation (et cela pourrait même ne pas être meilleur). Mais vous êtes en mesure d'apprendre le fonctionnement du processeur. Une fois que vous connaissez le C "intermédiaire", vous pouvez réellement commencer à relier ces connaissances au langage de niveau supérieur. C'est l'avantage immédiat que vous allez gagner.
À mon avis, un programmeur devrait toujours passer du temps à apprendre différents concepts de programmation. Il vaut vraiment la peine de jeter un coup d’œil sur C, mais aussi sur des langages de programmation encore plus avancés, tels que Clojure, Haskell, Prolog.
Vous ne devez pas devenir un maître dans ces domaines, ils vous apprendront simplement que les "niveaux" de langages de programmation ne sont pas binaires, mais qu'il en existe beaucoup. Apprenez à les connaître, de haut en bas (Assembleur). Cela fera de vous un meilleur programmeur.
la source
Vous devez connaître suffisamment C pour lire le code écrit en C, à cause de la grande quantité de code très important écrit dans le langage. C’est à peu près tout ce que vous retiendrez d’un manuel complet sur le sujet (j’ai utilisé la "programmation en C" de Kochan) sans avoir à coder dans le langage, de toute façon. Si vous vous retrouvez dans une situation vous obligeant à utiliser la langue de manière intensive, vous aurez une bonne base de travail sur laquelle vous pourrez construire. Vous voudrez probablement étudier quelque chose comme le livre d'assemblage de Duntemanns si la machine est une boîte noire abstraite pour vous. Je recommande également le "Code" de Petzold.
En dehors de cela - connaissances de base en C et connaissance de base de la machine sous-jacente - vous feriez mieux de passer votre temps d'étude à étudier des sujets réels, tels que SICP, TCP / IP Illustrated ou des livres sur les mathématiques concrètes, les algorithmes ou la structure de données. . Les vrais trucs.
Passer beaucoup de temps à étudier le C tout en codant en PHP ne vaut tout simplement pas le coût d'opportunité. Il y a plus de choses utiles à apprendre. C est vraiment juste une autre langue que vous pouvez bien apprendre seulement en étudiant et en utilisant, mais que vous pouvez apprendre quand vous en avez besoin.
Transpirer les choses difficiles.
la source
C est la langue utilisée pour écrire d'autres langues. Il vous permet d’avoir l’intimité avec le processeur et d’autres matériels à votre guise.
Si vous ne connaissez pas C, vous ne savez pas comment les autres langues obtiennent les résultats escomptés.
L'abstraction est un concept important, bien sûr, et tout le monde n'a pas besoin de savoir comment le cadre de son choix donne les résultats escomptés. Vous n'avez pas besoin de passer 20 ans à écrire C ou à penser à ce qu'il advient de vos vtables lorsque vous utilisez l'héritage multiple pour écrire du bon code.
Maintenant, vous pouvez conduire une voiture sans comprendre le fonctionnement d'un moteur à 4 temps ou même sans pouvoir utiliser un levier de vitesse (boîte de vitesses manuelle).
Cependant, si vous comprenez ce qui se passe sous le capot, vous pourrez, de temps à autre, obtenir des résultats exceptionnels que quelqu'un sans cette connaissance aura du mal à reproduire.
la source
C (et éventuellement C ++) est la mer dans laquelle vous nagez. Le système d'exploitation qui exécutera votre code est probablement codé en C (et C ++). Votre API native pour accéder aux services OS sera donc en C.
Si vous pouvez le faire sans savoir ce qui se trouve ci-dessous, vous n’avez pas besoin de savoir C. Cependant, la plupart des programmeurs doivent plonger dans des niveaux inférieurs à un moment de leur vie.
Il est également basé sur votre spécialisation des zones de développement. Par exemple, un développeur Web qui écrit HTML, Javascript et certains scripts côté serveur n'aura peut-être jamais besoin de savoir quoi que ce soit sur C, mais un développeur de système ou de jeu distribué le fera.
Il ne fait jamais de mal de passer quelques semaines à apprendre quelque chose d'aussi fondamental pour votre profession.
la source
C présente de nombreux avantages:
la source