Lorsque j'ai commencé à apprendre à programmer, de vrais programmeurs pouvaient écrire des assemblages dans leur sommeil. Toute formation sérieuse en informatique comprendrait un peu de formation et de pratique en programmation à l'aide de l'assemblage. Cela a changé depuis, au point où je vois que les diplômes en informatique avec assemblage, s'ils sont inclus, sont relégués à une tâche et à un chapitre, pour un total de deux semaines de travail sur 4 ans de scolarité.
La programmation C / C ++ semble avoir suivi un chemin similaire. Je ne suis plus surpris d'interviewer des diplômés universitaires qui n'ont pas passé plus de deux semaines à programmer en C ++, et qui n'ont lu que C dans un livre quelque part. Bien que les diplômes CS les plus sérieux semblent encore inclure un apprentissage du temps important et l'utilisation d'une ou des deux langues, la tendance est clairement à un C / C ++ moins appliqué à l'école.
Il est clairement possible de faire une carrière produisant du bon travail sans jamais lire ou écrire une seule ligne de code C ou C ++.
Compte tenu de tout cela, est-ce que l'apprentissage des deux langues en vaut la peine? Doivent-ils absolument exceller? (au-delà des conseils évidents, non spécifiques à une langue, tels que "une bonne sélection de langues est probablement importante pour une éducation complète", et "c'est probablement une bonne idée de continuer à essayer et à apprendre de nouvelles langues tout au long de la carrière d'un programmeur, juste pour étirer les cellules grises ")
la source
Réponses:
Joel Spolsky (oui, que Joel) a soutenu il y a quelque temps que les vrais programmeurs difficiles savent comment utiliser des langages plus durs (comme C, C ++ et Lisp) et leurs constructions (comme les pointeurs et les fonctionnalités), et que les langages de niveau supérieur n'étaient généralement pas «assez» pour démontrer votre compétence.
Je peux comprendre son point de vue que les gens qui connaissent le C et le C ++ et qui sont vraiment bons dans ce domaine en savent beaucoup plus sur ce qui se passe sous le capot que les gens qui, par exemple, programment en Ruby (et seulement en Ruby). Je dirais que ça se passe comme ceci: si vous connaissez un langage "dur", c'est probablement une bonne preuve que vous êtes capable de programmer tout en respectant des contraintes sévères ou que vous maîtrisez des modes de pensée complexes. Si vous êtes bon dans une langue de haut niveau, vous pourriez tout aussi bien pouvoir programmer tout en respectant des contraintes sévères, mais il n'y a aucune preuve de cela.
Je ne pense pas que l'apprentissage du C ou du C ++ endommagera votre cerveau (certaines personnes semblent le croire cependant). En fait, l'apprendre juste pour apprécier de meilleures langues de niveau supérieur pourrait être une bonne idée.
la source
Oui, la connaissance de C (ou C ++) est nécessaire pour être un excellent programmeur (de nos jours).
Ce n'est pas la langue elle-même, c'est l'environnement.
Les programmes ne fonctionnent pas en vase clos. Un excellent programmeur connaît son environnement, comme un grand sculpteur connaît son matériel. Notre environnement de programmation actuel (systèmes d'exploitation, compilateurs, mise en réseau, etc.) est construit sur C / C ++.
Un excellent programmeur écrit des programmes efficaces et les met au point dans des situations réelles. Il doit connaître l'environnement - et il nécessite aujourd'hui de connaître le C / C ++.
Modifier: ne peut pas résister à l'ajout d'une référence de matrice. Morpheus pourrait se demander: voulez-vous prendre la pilule Java et continuer à vivre dans un monde confortable fourni par la machine virtuelle? Ou prenez-vous la pilule C et voyez à quelle profondeur va le trou du lapin?
la source
Je dois me référer à un autre article de Joel. Dans The Law of Leaky Abstractions , l'apprentissage de langages comme le C, le Lisp, le C ++ et les langages qui impliquent la gestion de la mémoire impliquent également l'apprentissage d'une façon de penser qui nous définit pour le reste de notre carrière.
Mon professeur dans ma classe Structures de données et algorithmes, William Spears, a expliqué à une salle d'étudiants sceptiques en informatique pourquoi nous n'étions pas en train d'apprendre les derniers outils. Les étudiants se sont plaints d'avoir l'impression de ne pas être préparés au «monde réel» parce que nous n'étions pas en train d'apprendre Java. Nous n'étions pas en train d'apprendre JavaScript. Il n'y avait pas de cours sur HTML. Nous n'étions pas en train d'apprendre [[INSÉRER LA TECHNOLOGIE ICI]].
Pourquoi n'avons-nous pas appris les derniers outils? Selon notre professeur, la technologie évolue si vite qu'en 4 ans, les outils que nous apprenons pourraient très bien être obsolètes. Eh bien, après quelques années dans l'industrie, je dois dire que je suis d'accord avec son évaluation.
Le but d'une formation en informatique est d'apprendre à apprendre. Trouver des solutions à de nombreux problèmes de développement nécessite souvent une capacité à sortir des sentiers battus qui ne peut venir que de l'apprentissage de base, fondamental, sous le capot, de l'informatique brute issue du travail avec C, C ++ et Lisp.
Lorsque ces abstractions dans le monde réel fuient, et elles le feront, une compréhension des bases est ce qui sépare la moyenne du meilleur.
la source
Laisses-moi le mettre comme ça. Supposons que vous deviez embaucher quelqu'un pour faire du travail en C ++, et quelqu'un qui a fait un projet C ++ à l'université, mais n'a programmé en Java que depuis l'obtention du diplôme. À l'inverse, supposons que vous deviez embaucher quelqu'un pour certains travaux Java, et quelqu'un qui a fait un projet Java au collège mais n'a programmé en C ++ que depuis l'obtention du diplôme.
Qui allez-vous être plus à l'aise d'embaucher? Je dirais que le gars C ++, car passer à l'utilisation d'un langage de collecte des ordures est beaucoup plus facile que de s'en éloigner. De même pour d'autres concepts et d'autres langages, comme passer de compilé à interprété, ou de statique à dynamique. Dans presque toutes les fonctionnalités par comparaison de fonctionnalités que vous pouvez faire entre les langages, C ++ sort sur la fin difficile, ce qui rend la programmation difficile, mais aussi une excellente base de référence pour juger un programmeur.
Pouvez-vous prospérer dans une carrière sans jamais toucher au code C ou C ++? Bien sûr, mais je ne voudrais toujours pas embaucher quelqu'un qui n'a pas pu ou peur de le faire.
la source
Non, il n'est pas nécessaire d'apprendre le C ou le C ++ pour être un bon programmeur mais le comprendre aiderait à effacer certains concepts de base comme la gestion de la mémoire.
la source
Il est clairement possible de faire une carrière produisant du bon travail sans jamais lire ou écrire une seule ligne de code C ou C ++.
la source
En bref, non, ils ne le sont pas. Ce sont des langages utiles à apprendre, mais vous pouvez facilement être un excellent programmeur sans toucher à une ligne de C ou C ++. La plupart des excellents programmeurs les auront probablement touchés, mais c'est d'ailleurs le point important - dans de nombreuses applications de nos jours, ils ne sont pas autant utilisés que .NET et Java, et en tant que tels, leur nécessité a quelque peu diminué.
Notez que je ne dis pas qu'ils ne valent pas la peine d'être appris, je pense que ce sont deux langues importantes à apprendre, surtout si vous prévoyez de faire carrière dans la programmation. Mais pouvez-vous être un programmeur décent sans jamais avoir touché non plus? Sûr.
la source
Cela dépend de vos intérêts.
Si vous voulez être en programmation système, oui, vous devrez apprendre le C / C ++ car ce sont des langages par défaut de CS. Afin de vous familiariser avec les concepts OS, les compilateurs, les structures de données, la gestion de la mémoire, etc., vous devez connaître le C / C ++. De plus, des tonnes de bons textes, livres et articles sont disponibles sur C / C ++, ce qui optimisera vos compétences en programmation. Il y a quelques jours dans / * Programmers * / j'ai lu une excellente réponse pour Why C - Parce que c'est proche du métal .
À l'inverse, si vous voulez vous limiter à la programmation d'applications, il n'est pas nécessaire d'opter pour C / C ++, commencez directement avec C # (.Net) / Java et vous obtiendrez un bon travail de développeur. Mais si vous aimez vraiment la programmation hardcore, je suis sûr qu'un jour vous commencerez à apprendre le C / C ++.
la source
Cela dépend totalement du domaine d'application dans lequel vous souhaitez travailler. Si vous voulez jouer dans le paysage intégré, vous devez à peu près connaître le C ou le C ++. C ++ est également probablement le langage le plus utilisé dans le développement de jeux. Si vous souhaitez travailler sur des applications Web, alors C ou C ++ peut ne pas être aussi important. Il n'y a pas de langage qui ait le prestige d'être tenu de connaître comme priorité pour définir un bon ingénieur logiciel.
la source
C a été nommé "portablement assemblé", ce qui est très vrai. Il a été conçu pour rendre Unix portable sur tous les processeurs et décrire un code très proche du jeu d'instructions du processeur sous-jacent.
Si vous souhaitez travailler à proximité du matériel réel, en étant dans des pilotes de logiciels ou de périphériques intégrés, etc., il n'y a aucun moyen de contourner C. Si vous voulez travailler dans les langues les plus courantes et de haut niveau, c'est une meilleure idée car de nombreuses fonctionnalités qui rendent C puissant rendent également C dangereux, donc elles ont été réduites ou simplement supprimées.
Personnellement, je considérerais qu'il est très important de comprendre ce qui finira par nécessiter l'exécution de vos programmes, car de nombreuses décisions de conception en dépendent, vous devez donc au moins savoir comment mapper du code sur le jeu d'instructions d'assemblage et comment il fonctionne dans la réalité. Matériel. Que les choses que vous tenez pour acquises prennent du temps et pourquoi.
Par conséquent, je suggérerais au moins de jeter un œil à C et à un code arithmétique avancé de pointeur, afin que vous sachiez ce que vous n'avez pas à gérer quotidiennement.
la source
C est utile à apprendre car il est proche du silicium. Le langage C ou assembleur vous donnera une bonne idée de ce que les ordinateurs peuvent faire et comment ils le font, et cela sera probablement utile pour comprendre ce qui est possible et ce qui est pratique. De plus, il y a beaucoup de code C qui pourrait vous intéresser, et un grand nombre de langages plus modernes utilisent une grande partie de sa syntaxe et de sa sémantique.
C ++ est un langage de niveau supérieur qui contient des fonctionnalités très intéressantes. Il a de nombreuses bonnes utilisations et est un langage puissant. D'un autre côté, il existe de nombreux autres langages puissants et utiles.
Donc, je recommande fortement d'apprendre ce qui se passe aux niveaux inférieurs, et C est un excellent moyen de les apprendre, donc je recommande fortement d'apprendre C. C ++ est facultatif; l'apprendre vous apprendra des choses, mais il existe d'autres façons d'apprendre la plupart d'entre elles, et si vous travaillez déjà dans une langue traditionnelle, il y a de meilleures langues à apprendre pour apprendre de nouveaux concepts.
la source
Cela dépend du type de logiciel que vous pensez créer. Les jeux sont souvent écrits en C / C ++ car c'est classiquement un langage plus optimisé en ce qui concerne le code exécutable. Ce que vous codez est à peu près ce que vous obtenez, en quelque sorte.
Cela étant dit, C # a également été utilisé pour programmer des jeux. C # est probablement l' un des les meilleures langues pour le développement d'applications de bureau, au moins sur la plate - forme Windows.
Avec Visual Studio, C # est devenu presque le seul langage de développement logiciel que j'utilise (excusant des langages comme SQL et PHP, etc.) car il est à toutes fins utiles, sanglant fantastique à mon avis.
Si vous développez sur Windows, je vous recommande fortement d'apprendre C # .NET en parallèle à toute autre chose.
Je ne pense pas que le C ++ soit une exigence en soi, mais c'est bien d'avoir une connaissance de niveau inférieur des pointeurs, de la gestion de la mémoire et d'autres concepts.
la source
@Nick Bedford a raison sur le domaine dans lequel vous travaillez. Mes homologues logiciels écrivent des pilotes de périphériques et des logiciels intégrés. C est le chemin pour y aller. Et ne pensez pas au C ++ comme un deuxième langage, ils se chevauchent énormément.
la source
Beaucoup ont dit que C est bon à apprendre pour la gestion de la mémoire et je suis d'accord. Pour mon avis sur l'apprentissage C, c'est qu'il est très bon d'apprendre pour apprendre à déboguer un programme. Beaucoup de choses peuvent mal se passer par écrit pour C qui vous oblige à réfléchir à la façon dont vous devriez déboguer vos programmes. J'utilise rarement un outil de débogage dans aucune de mes programmations (en C ou dans d'autres langages) simplement parce que C m'a appris à ajouter des utilitaires de débogage intégrés dans les programmes.
L'apprentissage du C / C ++ est-il nécessaire pour une carrière? Non, mais j'ai également vu beaucoup de développeurs Java qui ne connaissent pas beaucoup les bases de la programmation car ils n'ont appris que Java. Même chose avec les programmeurs Perl. L'apprentissage de plusieurs langues devrait être une exigence pour une carrière, que le C / C ++ soit l'un de ces langages ou non.
la source
Au début, je pensais que mon université était dans la génération de Dennis M. Ritchie pour avoir inclus C pendant 2 semestres quand il y a beaucoup de langages relativement nouveaux comme Java, Visual Basic et cetera. Mais le fait est, ou du moins maintenant je crois, que C est l'un des meilleurs langages qui vous aident à comprendre les concepts fondamentaux de la programmation.
Et sur la carrière sans apprendre le C (ou C ++) - Oui, c'est possible, mais l'apprentissage du C mettra en valeur vos connaissances en programmation.
la source
La réponse pour moi était oui. C et C ++ étaient tous les deux des cours obligatoires dans mon programme de diplôme CS, et je crois que la possession d'un diplôme CS ou connexe est une exigence minimale pour être un "bon programmeur". De plus, être un «bon programmeur» signifie pouvoir rationaliser les problèmes qui se produisent et comprendre pourquoi quelque chose ne fonctionne pas comme on pourrait s'y attendre. Trop de fois dans ma carrière, j'ai vu des individus perplexes à cause de problèmes et pensant que des forces surnaturelles travaillaient contre eux ... c'est ridicule.
L'OMI, connaissant C, démontre sa capacité à comprendre n'importe quel langage impératif et à résoudre des problèmes en utilisant l'un des outils les plus puissants jamais inventés par l'humanité.
la source
Un programmeur bien équilibré a plusieurs sacs de trucs dans sa manche, et ceux-ci comprennent:
1) Programmation de bas niveau ... C au minimum. Certains assemblages ne feraient pas de mal.
2) Programmation fonctionnelle ... Un langage fonctionnel pur, pas un hybride - Scheme fonctionne ici.
3) OOP ... Normalement, je dirais smalltalk, mais je suppose que nous pourrions aller avec Java maintenant.
la source
C est la mère de tous les langages de programmation .... les connaissances expertes en C vous permettent de connaître un autre langage comme Java en peu de temps.
C ++ est un jeu de balle complètement différent et est le plus complexe de tous.
la source
Il n'est pas nécessaire d'apprendre le C ou le C ++ pour être un bon (excellent) programmeur mais il est nécessaire d'apprendre l'assemblage pour être un bon (excellent) programmeur. Une excellente programmation signifie optimiser la mémoire, le Mhz, la bande passante, les contraintes de puissance, puis choisir la meilleure conception et / ou implémentation pour accomplir la tâche à accomplir. Chez les informaticiens, la principale faiblesse reste, après des décennies d'évolution des technologies, avec une gestion optimale des données. Il s'agit d'un ensemble de compétences enseignées en écrivant Assembly (tout assemblage; il peut s'agir d'ARM, ou MIPS, ou x86, ou d'un microcontrôleur, ou d'un DSP, ou même inférieur à cela, via verilog / VHDL).
la source
Ayant utilisé avec compétence c, c ++, assembly et Lisp, je dirais que cela n'a aucun sens d'avoir à apprendre un langage particulier pour être un bon programmeur. Mes expériences avec ce qui fait un bon programmeur est de pouvoir penser d'une manière qui résout les problèmes. Les langues vous permettent simplement d'exprimer vos compétences en résolution de problèmes. Par exemple, la simplicité de C vous permet d'exprimer facilement des algorithmes, tandis que Lisp vous permet de résoudre les problèmes de manière récursive. Un langage ne fait donc pas de vous un programmeur. Vous devez être un résolveur de problèmes avant de devenir un bon programmeur. Les langues ne sont que des outils que vous utilisez pour résoudre des problèmes.
la source
Il vaut la peine d'apprendre le C simplement pour acquérir une solide compréhension de la gestion de la mémoire. Idem pour C ++ sauf dans le but d'apprendre des structures de données.
la source
Non. Il existe de nombreux programmeurs pourris qui écrivent du code C / C ++. Ce qui fera de vous un bon programmeur, c'est de comprendre quand et pourquoi vous devrez écrire quelque chose en C / C ++
la source