Je ne sais pas C. Et pourquoi devrais-je l'apprendre? [fermé]

58

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:

  1. Parce que les langages de haut niveau sont facilement accessibles, davantage de "non-programmeurs" plongent et font des dégâts
  2. 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.

Stephen
la source
@Stephen Oh, désolé ... j'ai mal compris. (mais vous voyez pourquoi vous avez besoin d'apprendre c / c ++ à droite?)
ApprenticeHacker
1
@burningprodigy Oui, dans le cas où je devrais faire quelque chose où le C / C ++ est requis, ou qui me semble le plus logique, bien sûr, j'apprendrais le C. J'aurais des contacts avec ceux qui disent que vous devez apprendre le C pour pouvoir travailler efficacement développer dans des langages de haut niveau. Et c'est absurde.
Stephen
@burningprodigy laissez-nous poursuivre cette discussion sur le chat
Stephen
pouvez-vous nous donner un contexte (url) d'où "ne peut pas gérer les concepts de programmation comme le pointeur ..."?
K3B
S'il y avait une langue que j'aimerais apprendre, ce serait Common Lisp, pas C. En tant que développeur principalement en C #, je suis plutôt certain que j'en tirerais davantage parti. Nous avons déjà des pointeurs en C #. Surtout, je préférerais apprendre plus de façons d'aborder un problème que d'essayer de mettre en œuvre ma même solution de manière plus difficile. (Juste une note, je mens à moitié. J'ai fait du C et je sais que cela a ses avantages. Je voulais juste mettre en valeur un langage incroyablement puissant et expressif qui précédait le C de plus d'une décennie.)
Magus

Réponses:

113

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.)

Frank Shearar
la source
12
Frank: Vous avez frappé le clou sur la tête. Comprendre le fonctionnement d'un ordinateur, la gestion et l'allocation de la mémoire, ainsi que l'idée d'apprécier davantage les langages de niveau supérieur, sont les raisons pour apprendre le c .
Chris
12
Je suis d’accord avec cela, bien que: C ne vous rapproche que de quelques pas de la base, pas du tout au sol. Ok, il y a une chose appelée mise en mémoire. Mais qu'est-ce que cela signifie physiquement? Comprenez-vous le fonctionnement de l'ordinateur si vous ne comprenez pas l'électronique? Mécanique quantique? Etc. Je ne suis pas sûr qu'il y ait un seul esprit dans le monde qui comprenne profondément toute la chaîne alimentaire, d'un langage de haut niveau à C, en passant par la mécanique quantique.
Joonas Pulakka
14
Ma question est la suivante: comment pouvez-vous savoir comment fonctionne un ordinateur en interne? Que gagnez-vous? Apprécier ce que vous avez maintenant n’est pas une très bonne raison d’apprendre une langue de très bas niveau comme le C. C’est comme dire que je devrais apprendre Fortran pour apprécier ce que j’ai maintenant
TheLQ
18
@TheLQ Je suis sans voix. Comment pouvez-vous bénéficier de savoir comment fonctionne un ordinateur en interne? Vous comprenez mieux ce que vous faites, c’est ce que vous gagnez. Au lieu de cela: vous apprenez ce que vous faites réellement à la machine en premier lieu.
Frank Shearar
15
Je vais marquer ceci comme étant correct, car cela semble être la réponse favorite. Cela dit, je ne me soucie pas vraiment de "comment fonctionne un ordinateur" à un niveau fondamental, car cela ne m'aide vraiment pas à développer la prochaine fonctionnalité intéressante de mon application. C'est comme conduire une voiture: je suis très bon, mais je me fiche de la pression exercée par le fluide de freinage. Ça s'arrête juste quand je frappe le frein. De plus, je suis sûr que j'apprécierais davantage de conduire une voiture si je devais d'abord faire un tour en calèche pendant cinq ans. Cela ne veut pas dire que je suis incapable de postuler à quel point la situation est meilleure avec la voiture plutôt qu'avec le buggy.
Stephen
72

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.

Charles Salvia
la source
5
Tu n'as pas l'air si snob. Ok peut-être un peu. :)
Stephen
7
Excellente réponse. J'ai programmé avec succès pendant dix ans sans apprendre le C et le C ++, et j'aurais pu poursuivre le reste de ma carrière sans même l'apprendre. Mais depuis que je l’ai appris l’année dernière, j’ai écrit de meilleurs logiciels, pas seulement en C ++, mais également dans mes autres langages.
John M Gant
3
Voici certaines choses que l’autre créateur de SO a à propos de la connaissance de C: joelonsoftware.com/articles/ThePerilsofJavaSchools.html joelonsoftware.com/articles/CollegeAdvice.html joelonsoftware.com/articles/fog0000000319.html
Isaac Kleinman
3
Pourquoi serait-il "complètement faux" de comparer C au latin? Je pense que c'est une excellente analogie. Le latin est partout autour de nous. 58% du vocabulaire anglais est influencé par le latin (directement ou par le biais d'autres langues romanes). Le latin est également la clé pour comprendre notre culture. Le droit, la démocratie, la religion, les infrastructures, l'urbanisme et toute une série d'autres domaines peuvent être rattachés à l'empire romain. Vous pouvez choisir d'ignorer C de la même manière que vous pouvez ignorer le latin, mais vous ne pouvez jamais les éviter. "Le latin et le grec ne sont pas des langues mortes. Ils ont simplement cessé d'être mortels." (JW McKail)
Anders Sjöqvist
2
@ AndersSjöqvist, ce serait une erreur, car plus personne ne parle latin, même si cela a profondément influencé le développement des langues vivantes. Tandis que C est activement utilisé et utilisé partout - dans à peu près tous les systèmes d'exploitation, machines virtuelles, bases de données ou interprètes. Le latin, par exemple, ressemble plus à ... Simula - une langue principalement morte qui a profondément influencé les langues vivantes sans pour autant être utilisée en dehors du monde universitaire.
Charles Salvia
12

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.

Charles E. Grant
la source
9
Ok, "C / C ++", je peux vivre avec (les juristes de la langue soient damnés). Et "Perl / Python / Javascript" est parfaitement raisonnable. Mais pour l'amour de Dieu, pourquoi "assembler / C / Lisp"? C'est comme dire "pomme / orange / Barrack Obama". Ces trois langues n'ont rien à faire l'une avec l'autre.
Jason Baker
@ Jason, le seul point commun que je suggérais, c'est que la plupart des gens trouvent ce trio de langues plus difficile à maîtriser à la volée. Il peut donc valoir la peine que les PO passent un peu de temps avec eux avant qu'un besoin immédiat de les utiliser ne se présente. La programmation arithmétique et fonctionnelle des pointeurs n'a pas grand-chose en commun, sauf que les gens semblent avoir à les regarder plus longtemps avant qu'ils aient un sens.
Charles E. Grant
Je ne pourrais pas être plus d'accord. À l'opposé, pour atteindre des niveaux d'abstraction plus élevés, le «technicien informatique de bureau» qui peut faire au moins une programmation sera généralement meilleur que celui qui ne le peut pas.
Emmet
7

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é.

Dsimcha
la source
2
Apprendre à lire une langue d'assemblée peut-être. Le problème, c’est que j’utilise plus de 10 familles de processeurs différentes et que l’apprentissage de toutes les variantes est une recette pour la confusion et le chaos. Essayez de comparer AMD SHARC avec Atmel AVR32 et TI MSP430.
uɐɪ
@ Ian: C'est vrai. Idéalement, vous devriez apprendre le langage d'assemblage de l'arche pour laquelle vous développez le plus. Pour la plupart des gens, je suppose que ce sera x86 ou ARM.
dsimcha
3
"Tous les programmeurs sérieux devraient finalement apprendre à lire au moins l'assembleur" Ce sont des commentaires comme ceux-là qui m'ont permis de commencer avec cette question. Je pense que vous êtes simplement partial, monsieur. Bien que j'aime ce que vous avez dit sur les abstractions qui fuient. Ça a du sens. D'un autre côté, ces choses ne font pas une grande différence dans le monde réel dans mon arène. J'utilise toujours l'abstraction de haut niveau, qui fuit ou non.
Stephen
1
@Stephen, vous devriez essayer d’écrire un langage assembleur. Les processeurs 8 bits ne sont pas difficiles et essayer d’implémenter la même petite chose à la fois dans 6502 (comme le C64) et Z80 (comme dans les ordinateurs de bureau CP / M) est en réalité très instructif. expérience en raison de différences de conception très fondamentales (page d’index et registres).
+1 malgré la All abstractions are leakydéclaration manifestement fausse .
Thomas Eding
7

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.

JohnL
la source
6
"Les spécifications de l'emploi semblent toujours provenir de ce modèle standard écrit il y a 25 ans." Vous ne pourriez pas être plus correct.
Stephen
Félicitations, John!
Mark C
6

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.

Jason Baker
la source
lol. Les conseils de Joels dans la colonne liée: "Vous feriez mieux d'ignorer ce que je dis ici et de créer plutôt un logiciel permettant aux autres étudiants de trouver des personnes avec qui sortir."
Stephen
3
@Stephen: Si vous voulez que les gens vous remarquent vraiment, faites-les soit poser ou payer.
Fred Nurk
@Fred Excellent conseil, lol.
Stephen
6

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é.

Mike Dunlavey
la source
4

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.

John Bode
la source
Je suppose que "l'appréciation" est une façon de le dire. Dans ma classe de programmation au lycée, il s'agissait principalement de "Je dois utiliser cette fonction. Comment convertir un LOLOMGCHAR * en un WTFBBQCHCH *?"
Katana314
Je pense que C était facile à apprendre. au moins c'était juste pour moi de lire Kernighan & Ritchie.
robert bristow-johnson
2

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.

uɐɪ
la source
1
C'est génial ... Mais tout le monde ne fait pas ça. L'implication semble être que les personnes qui n'écrivent pas pour des systèmes intégrés ne font que jouer et ne font pas de développement sérieux - du moins, prenez votre analogie de modèle dans le contexte de votre système. Ce n'est clairement pas le cas et il est possible d'écrire des applications de production à grande échelle sans jamais toucher à C.
JohnL
Bien sûr, il est possible d'écrire des applications de production à grande échelle sans s'approcher de C. J'ai écrit du code pendant 10 ans avant de pouvoir utiliser C. J'ai utilisé PL / M, Pascal, ADA ainsi que l'assembleur. Celles-ci étaient aussi bonnes que C pour apprendre les mécanismes sous-jacents de la machine et souvent mieux pour produire un code sans erreur.
uɐɪ
Génial - bien que votre réponse ci-dessus ne m'ait pas donné l'impression que vous pensiez de cette façon, d'où ma réponse ...
JohnL
Avez-vous une expérience avec les moteurs Java ciblant l'utilisation intégrée?
2

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.

dave
la source
2

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.

Wirrbel
la source
2

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.

naftalimich
la source
1

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.

Bill Michell
la source
1

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.

Mert Akcakaya
la source
1

C présente de nombreux avantages:

  1. C est un langage de bas niveau. Vous pouvez utiliser c pour développer le noyau et le pilote.
  2. C est la langue la plus rapide.Beaucoup de logiciels de puissance être développé par c. Par exemple: memcached, redis, nginx, apache, mysql etc.
  3. C est un langage multi-plateforme. Le programme développé par c peut s’exécuter sur toutes les plateformes. Les autres langages multi-plateformes ne peuvent pas le faire. Java, python, php, etc. ne peuvent pas s'exécuter sur la plate-forme iOS.
  4. C ++ ne peut pas fonctionner sur de nombreux systèmes embarqués.
Edward Shen
la source