web-dev-qa-db-fra.com

Comment maîtriser vraiment un langage de programmation?

Je sais qu'en apprenant une langue, vous pouvez simplement acheter un livre, suivre les exemples et, si possible, essayer les exercices. Mais ce que je cherche vraiment, c'est comment maîtriser la langue une fois que vous l'avez apprise.

Maintenant, je sais que l'expérience est un facteur majeur, mais qu'en est-il de l'apprentissage des internes de la langue, quelle est la structure sous-jacente, etc.

Il y a des articles qui disent lire ce livre, lire ce livre, faire ce jeu et ce jeu. Mais pour moi, cela ne signifie pas maîtriser une langue. Je veux pouvoir lire le code des autres et le comprendre, peu importe à quel point c'est difficile. Comprendre quand utiliser une fonction et quand une autre, etc etc.

La liste pourrait s'allonger indéfiniment, mais je crois que j'ai fait le point. :)

Et enfin, prenez n'importe quel langage comme exemple si nécessaire, mais le mieux serait que C soit pris comme exemple.

106
cprogcr

Je dois répondre: "Tout ce qui précède." Les gens se demandent si le codage est un art, un artisanat, une discipline d'ingénierie ou une branche des mathématiques, et je pense qu'il est plus juste de dire que c'est une partie de chacun. Ainsi, plus vous apportez de techniques à la maîtrise de la langue, mieux c'est. Voici une liste partielle:

  • Utilisez la langue toute la journée, tous les jours. Habituellement, cela signifie être employé à temps plein dans la langue.

  • Lisez tout ce que vous pouvez sur la langue. Surtout, les "meilleures pratiques" et les idiomes.

  • Rejoignez un groupe d'utilisateurs pour parler avec les autres de la langue et de ce qu'ils en font.

  • Travaillez avec le code des autres! Il n'y a pas de moyen plus rapide d'apprendre ce qu'il ne faut pas faire dans une langue que de devoir nettoyer après quelqu'un qui a fait quelque chose d'horrible.

  • Soutenez le code que vous écrivez - chaque bug devient un tour d'horizon de vos pires décisions!

  • Étudier l'informatique et les langues en général

  • Apprenez une langue très différente. Un grand compliment à C serait un langage fonctionnel comme LISP. Cela changera complètement votre façon de penser votre langage procédural.

  • Apprenez à utiliser les frameworks et les API disponibles pour cette langue.

  • Prenez le temps de faire vos propres expériences avec la langue. Le SICP n'est pas applicable au C, mais l'attitude d'apprendre une langue en testant ses limites est très productive.

  • Lisez l'histoire de la langue pour savoir pourquoi elle a été faite telle quelle.

  • Assistez à des conférences pour entendre la langue des auteurs ou pour savoir ce que les leaders de l'industrie font avec la langue.

  • Suivez un cours de langue.

  • Enseignez la langue aux autres (merci à Bryan Oakley )

En résumé, faites tout ce que vous pouvez penser. Il n'y a aucun moyen de tout savoir sur la plupart des langues. Chaque technique d'apprentissage que vous utilisez apporte une perspective supplémentaire à votre compréhension.

168
GlenPeterson

10 000 heures de pratique suffisent.

Lire "Enseignez-vous à programmer en dix ans"

Points clés d'en haut:

  • Intéressez-vous à la programmation et faites-en parce que c'est amusant. Assurez-vous que cela continue d'être assez amusant pour que vous soyez prêt à consacrer vos dix ans/10 000 heures.
  • Programme. Le meilleur type d'apprentissage est l'apprentissage par la pratique.
  • Parlez avec d'autres programmeurs; lire d'autres programmes.
55
vartec

JAMAIS considérez-vous comme le maître de toute la langue jusqu'à ce que vous ayez implémenté une meilleure langue que cela. Ce qui signifie, pour apprendre comment fonctionne une langue particulière par en dessous, obtenez un livre qui vous apprend les concepts de compilateur/interprète de la langue. Par exemple:

  • C: Le livre du compilateur LCC

  • C++: La conception et l'évolution de C++ (Et puis continuez à construire votre propre compilateur C++ ou comprenez au moins l'implémentation de celui-ci en utilisant le GNU code du compilateur C++)

  • Java: Obtenez "Inside JVM" et obtenez le code source javac. Le code .C de "Java" est également utile

  • Python: implémentation CPython.

  • ObjectiveC: Presque n'importe quel matériel de Apple sur les internes de l'environnement d'exécution ObjC et les codes source du compilateur va vous aider.

  • LISP: SICP Book (vous apprend Scheme et un interprète-compilateur de base pour le langage LISP): LISP in Small Pieces (un autre bon livre).

37
Aniket Inge

Essayez d'utiliser la langue pour quelque chose pour lequel elle n'a pas été conçue. Écrivez un pilote de périphérique en Python ou une bibliothèque de manipulation de matrice en COBOL. Je pense que l'un des meilleurs moyens de maîtriser une langue est de vraiment la pousser, en essayant de faire en sorte que ses forces surmontent ses faiblesses.

13
TMN

Je vais vous faciliter la tâche. Vous ne maîtriserez jamais une langue. Période. Si vous pensez que oui, alors vous ne l'avez manifestement pas fait. Il n'y a pas de sommet de montagne que vous atteignez soudainement et dites "Eh bien, maintenant, je maîtrise parfaitement cette langue. Et maintenant?" Même les programmeurs chevronnés qui travaillent avec le même langage depuis des décennies vous diront que parfois ils rencontrent encore de nouvelles idées, processus, pratiques, etc. Le véritable objectif est de maîtriser votre compréhension conceptuelle d'un ou de plusieurs langages. La capacité d'apprendre de nouveaux concepts et la vitesse à laquelle vous pouvez adopter des fonctionnalités nouvelles ou modifiées dans le langage est beaucoup plus importante que la connaissance par cœur de chaque mot clé et syntaxe. Arrêtez de vous soucier de "maîtriser" une langue et simplement de vous soucier d'améliorer et d'affiner continuellement la qualité et l'efficacité de votre code. C'est ce que font les "maîtres".

11
Chris Pratt

Vous connaissez déjà la réponse à cette question

  • Vous devez utiliser la langue. Beaucoup. Pour résoudre un éventail de problèmes aussi divers que possible
  • Vous devez lire (et, idéalement, travailler avec) le code des autres peuples, de préférence ceux qui ont un degré de maîtrise (c'est-à-dire une compréhension approfondie d'au moins un aspect de la langue). Par extension, si vous pouvez parler aux gens de la résolution de problèmes avec la langue, tant mieux.

Cela se résume à un travail acharné et à la détermination et pour tout ce que vous n’y arriverez peut-être jamais.

Réfléchissez à la provenance de ce terme - pour devenir maître artisan, vous deviez être apprenti puis compagnon et seuls eux pourraient avoir la chance de devenir maître. En cours de route, on vous enseignait et vous pratiquiez et vous observiez et interrogiez les autres sur leur métier et (espérons-le) appreniez d'eux.

Il n'y a pas de solution miracle ...

6
Murph

Il n'y a pas de substitut à l'expérience. Pour maîtriser quelque chose, vous devez le faire/l'utiliser, pour beaucoup de choses différentes.

Alors allez-y et utilisez ce langage pour des exercices (comme Project Euler ) et des projets personnels, des choses dont vous avez réellement besoin ou des choses que vous pensez être intéressantes. Écrivez un jeu, écrivez une webapp, écrivez un analyseur, tout ce que vous voulez. Et à chaque étape, efforcez-vous de comprendre ce que vous faites plutôt que de simplement coller ensemble du code ou de suivre des instructions.

Je veux pouvoir lire le code des autres et le comprendre, peu importe à quel point c'est difficile.

C'est quelque chose que vous pouvez faire immédiatement après avoir compris la syntaxe de base. Prenez simplement du code et prenez le temps de le découvrir en détail. Recherchez des choses que vous ne comprenez pas ou posez des questions spécifiques sur des endroits comme Stack Overflow .

2
Michael Borgwardt

Commencez par lire et comprendre ce qui est [~ # ~] sdlc [~ # ~] (aka, Durée de vie du développement logiciel- cycle). Il s'agit d'un processus itératif qui implique l'auto-amélioration, l'apprentissage, **practicing, practicing...**

enter image description here

Cela ouvrirait vos horizons sur les domaines que vous devez apprendre ou améliorer. Il existe plusieurs livres de génie logiciel de base que vous trouverez également très utiles à lire une fois que vous aurez créé vous-même quelques applications.

De plus, une fois que vous vous sentiriez confiant avec une langue OOP , vous pouvez commencer à apprendre les modèles de conception , et modèles de conception en tête d'abord est vraiment un bon livre à considérer. J'adore ce livre.

2
Yusubov

Du côté de haut niveau du problème, découvrez l'architecture: comment organiser vos projets, quelle est sa structure. Ne les laissez pas simplement grandir au hasard.

Au niveau intermédiaire, apprenez différentes techniques et paradigmes. Plus vous avez d'outils diversifiés dans votre répertoire, plus vous avez de pouvoir. Si vous n'avez étudié que Java, python et Ruby, vous n'avez été exposé qu'à une très petite partie de l'espace de programmation. Apprenez la programmation impérative et fonctionnelle, apprenez prolog et J. L'idée est non pas pour "maîtriser" une centaine de langues, mais pour découvrir différentes manières de résoudre les mêmes problèmes.

Du côté bas du problème, une chose qui pourrait vous aider à être un meilleur programmeur (en fait meilleur dans tout ce que vous faites) est d'avoir un bon modèle mental de la plate-forme. Par exemple, vous pouvez apprendre comment fonctionnent les structures de contrôle C et connaître les bibliothèques les plus courantes, mais si vous n'avez pas de modèle mental du fonctionnement des pointeurs et de la mémoire, vous aurez des problèmes avec des expressions modérément complexes.

2
José Dinuncio

Puis-je faire quelques suggestions?

Tout d'abord, si vous pouvez trouver un mentor pour discuter de votre utilisation de la langue, obtenir les meilleurs trucs et astuces et répondre quand une technique est meilleure qu'une autre.

Deuxièmement, entraînez-vous autant que possible et essayez la langue au maximum! J'avais l'habitude de travailler en équipe, ce qui (par amusement) choisirait un verbe ou un autre morceau du langage de programmation du manuel chaque jour. C'était une marque d'honneur si vous pouviez l'intégrer dans votre codage ce jour-là. Cela signifiait que toute l'équipe de programmation devait examiner et comprendre le terme (parfois) obscur afin de le comprendre et de l'utiliser efficacement. Certains jours, nous avons échoué, mais cette équipe était agréable à travailler et vraiment techniquement activée !!

1
Nicholas Sibson

Vous ne pouvez pas apprendre une langue du livre. Il vous suffit de pratiquer et de pratiquer. Ne pensez pas que vous pouvez apprendre une langue de ce livre particulier ou de cette source particulière. Pensez simplement que le langage de programmation est le même que le langage humain. Vous ne pouvez pas simplement apprendre l'anglais ou le français en lisant un livre particulier. Tout ce dont vous avez besoin est de l'utiliser dans la journée pour la vie de jour. Codez à partir de zéro, étendez ses fonctionnalités, essayez de construire quelque chose qui vous satisfera un peu. Et si vous pensez maîtriser un langage comme connaître tout le langage et utiliser chaque élément du langage de programmation dans un codage pratique ... VOUS NE POUVEZ PAS. Ou même si vous le pouvez, cela peut prendre 10 à 15 ans.

0
sumit

Les langages de programmation reflètent les idées derrière les paradigmes de programmation qui ont été développés pour cibler le développement de logiciels à usage général ou pour développer des logiciels à usage spécial. Par exemple, un langage de programme comme Java représente le paradigme du programme orienté objet, mais AspectJ (une extension de Java) est utilisé pour programmer selon la programmation orientée aspect).

Compte tenu de cette courte introduction, afin de vraiment maîtriser une langue, acheter et lire un livre seul ne serait pas très utile. Vous devez comprendre l'environnement dans lequel vous pouvez programmer en utilisant la langue souhaitée, en apprendre davantage sur le paradigme et, plus important encore, créer une application significative en utilisant la langue. Construire une petite application qui peut vous donner un avant-goût des différents outils fournis par la langue est une approche d'apprentissage très utile.

J'ai vu des gens venir de la communauté C pure sans rien apprendre sur l'orientation objet et avoir du mal à apprendre Java ou objective-c. J'ai également vu des gens avoir du mal à programmer des interfaces utilisateur quand ils n'ont pas '' t vraiment passé par la compréhension des éléments de l'interface utilisateur, la programmation événementielle, etc ...

J'espère que ça aide!

0
hsnm

J'ajouterais deux articles à la liste de Glen

  • Essayez de résoudre un problème difficile que d'autres ont, par exemple donner des réponses sur SO
  • Lire des blogs/livres de concepteurs de langues. C'est la meilleure ressource de connaissances approfondies. Vous sauriez quelle est la décision de conception derrière la raison X.
0
Lukasz Madon

Pour tirer parti de ce que @TMN a dit. J'ai eu beaucoup de succès dans l'apprentissage des langues en écrivant le même programme dans une langue différente.

Par exemple, écrire un programme qui lit dans un fichier CSV, analyse le texte, puis le réécrit dans un deuxième CSV avec les colonnes dans l'ordre inverse.

Comme ça,

Colonne1, Colonne2, Colonne3

à

Colonne3, Colonne2, Colonne1

Cela vous donnera une compréhension de base ou la langue. Ensuite, voyez ce que vous pouvez faire d'autre. Peut-être permettre la substitution de valeurs ou la réorganisation ou la lecture à partir de la ligne de commande. Rendez-le aussi complexe que vous le souhaitez.

Je pense aussi à ce que @GlenPeterson a dit,

Apprenez une langue très différente. Un grand compliment à C serait un langage fonctionnel comme LISP. Cela changera complètement votre façon de penser votre langage procédural.

Est une excellente idée. Je suggère un langage comme Haskell parce que dans les dernières versions, vous pouvez programmer en utilisant les quatre paradigmes de programmation OO, procéduraux, logiques ou fonctionnels. Même s'il s'agit en fait d'un langage fonctionnel, vous pouvez avec un certain effort mettre en œuvre les autres paradigmes, ce qui serait une bonne expérience d'apprentissage.

Super langage pour jouer avec.

0
Dan