Comment puis-je m'assurer que j'apprends réellement à programmer plutôt que de simplement apprendre les détails d'une langue? [fermé]

82

J'entends souvent dire qu'un vrai programmeur peut facilement apprendre n'importe quelle langue en une semaine. Les langues ne sont que des outils pour faire avancer les choses, me dit-on. La programmation est la compétence ultime qui doit être apprise et maîtrisée.

Comment puis-je m'assurer que j'apprends réellement à programmer plutôt que de simplement apprendre les détails d'une langue? Et comment puis-je développer des compétences de programmation qui peuvent être appliquées à toutes les langues au lieu d’une seule?

Ryan
la source
25
Essayez d'apprendre une autre langue. Essayez de résoudre les problèmes que vous savez déjà résoudre dans votre langue maternelle dans votre nouvelle langue. Ce ne sera pas facile au début. Mais vous saurez que vous apprenez qu'une fois, la résolution de vieux problèmes d'une manière nouvelle devient nettement plus facile (remarque: cela peut prendre un peu de temps).
FrustratedWithFormsDesigner
42
En outre, les personnes qui affirment pouvoir apprendre une langue en une semaine doivent définir ce qu’elles veulent dire par "apprendre". "What do you mean you're not an expert in LanguageX?!? I can learn a language in a Week!". 1 semaine plus tard:"See, I've learnt the language, and here's a Hello World example I copied from Wikipedia to prove it!"
JohnL 10/10
9
Une question doit être posée. Construisez-vous votre logique dans la syntaxe ou utilisez-vous un modèle mental plus rapide et plus efficace? Je trouve que les programmeurs débutants ont tendance à penser en utilisant la syntaxe.
ChaosPandion
10
@PaulR: Cela ne m'a pas pris 10 000 heures pour apprendre à faire du vélo. Ou nager, d'ailleurs.
Robert Harvey
7
@PaulR Selon le dicton, il faut 10k heures pour maîtriser une compétence, pas simplement pour "l'apprendre"
Tobias Kienzler

Réponses:

96

Ne craignez pas de rencontrer un concept ridicule d '"habileté" si communément entendu dans des déclarations telles que:

  • Tous les langages de programmation sont fondamentalement les mêmes.
  • Une fois que vous maîtrisez bien une langue, vous pouvez choisir n'importe quelle autre langue rapidement et facilement.
  • Les langues ne sont que des outils, il y a une certaine magie cérébrale qui crée le logiciel.

Ces déclarations sont toutes basées sur une prémisse erronée et trahissent un manque d'expérience dans un large spectre de langages de programmation. Ce sont des déclarations très courantes auxquelles un grand nombre de programmeurs croient fermement, je ne le contesterai pas, mais je contesterai leur exactitude.

Cela est prouvé simplement: passez une semaine (ou plus de deux jours à essayer de vous familiariser avec les principes fondamentaux de Haskell , Prolog ou Agda . Vous entendrez bientôt dans votre tête la vieille chanson de Sesame Street "Une de ces choses ne ressemble pas aux autres ...".

En fait, il existe toute une gamme de langages de programmation, de techniques et d’approches qui sont si différentes de ce que 95% d’entre nous faisons ou ont fait. Beaucoup ignorent totalement que ces concepts existent, ce qui est bien et que ces concepts ne sont pas nécessaires pour être un programmeur employé et même efficace.

Mais le fait demeure: ces techniques et approches existent, elles sont bonnes pour beaucoup de choses différentes et peuvent être très utiles, mais elles ne ressemblent pas à ce à quoi vous êtes habitué et les gens ne peuvent pas simplement les reprendre avec un après-midi de violon.

De plus, je dirais que dans la majorité des cas, les gens affirment qu'ils ont ou peuvent apprendre des choses aussi complexes que les langages de programmation si rapidement en une semaine, ils souffrent un peu de l'effet Dunning Kruger , Wikipedia:

L'effet Dunning – Kruger est un biais cognitif dans lequel des individus non qualifiés souffrent d'une supériorité illusoire, évaluant à tort leur capacité bien supérieure à la moyenne. Ce biais est attribué à une incapacité métacognitive des non-qualifiés à reconnaître leurs erreurs.

Je renvoie les gens à cet aperçu plus expérimenté du concept d’apprentissage par programme de Peter Norvig: Apprendre à programmer dans dix ans .

Des chercheurs (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) ont montré qu’il fallait environ dix ans pour acquérir une expertise dans une grande variété de domaines, y compris le jeu d'échecs, la musique composition, opération télégraphique, peinture, piano, natation, tennis et recherche en neuropsychologie et topologie. La clé est la pratique délibérative: ne pas le faire encore et encore, mais vous mettre au défi avec une tâche qui dépasse vos capacités actuelles, l'essayer, analyser votre performance pendant et après l'avoir fait, et corriger les erreurs éventuelles. Alors répète. Et répétez encore.


Certes, il existe un ensemble de principes généraux qui faciliteront l’apprentissage de toutes les langues!

Peut-être, mais je dirais que cet ensemble de principes est si vaste qu'il y aura presque toujours des langues en dehors de votre semaine. Au fur et à mesure que vous ajoutez de nouveaux concepts à la liste que vous connaissez bien et avec laquelle vous êtes à l'aise, cette liste de langues hors de votre portée immédiate risque de diminuer, mais j'ai du mal à croire qu'elle disparaîtra un jour. La liste des approches informatiques conceptuelles est si vaste qu'elle est déroutante, des langages concaténatifs aux langages basés sur les vecteurs en passant par les langages spécialisés dans l' IA ou la métaprogrammation ( ou des langages qui existent entièrement pour supporter les expressions régulières ).

Après dix ans, vous pourrez programmer en général. Cela signifie que vous pouvez écrire du code quelque peu décent dans certaines langues ou styles de langues. Donc, après 10 ans, vous êtes prêt à aborder ces innombrables concepts transversaux pour le reste de votre vie, et à moins d’être Edsger W. Dijkstra , Donald Knuth ou John D. Carmack , vous n’allez pas aller à tous d'eux.

Jimmy Hoffa
la source
11
Enh. Il y a une différence entre "connaître" une langue et être suffisamment compétent pour découvrir et corriger un bogue mineur. Un bon programmeur peut faire ce dernier assez rapidement, même dans les langues archaïques.
Telastyn
5
@ CharlesE.Grant Je pense que vous surestimez ce que la majorité des élèves apprennent à l'université, mais aussi combien de temps il faut pour devenir semi-compétent dans une langue comme Haskell ou Prolog. Je dirais qu'un ingénieur expérimenté du secteur, sans expérience en programmation fonctionnelle, mettrait bien plus d'une semaine à résoudre son premier bogue dans un programme Haskell.
Jimmy Hoffa
11
Je soutiens toujours que l'ensemble très fondamental de concepts est assez compact. Une fois que vous avez compris la réécriture des termes , vous disposez d'un outil pour définir le calcul lambda, le calcul SK, la machine de Turing, l'algorithme de Markov, etc. Un petit nombre d'idées véritablement fondamentales peut couvrir l'essentiel de la science informatique. Mais, bien sûr, l’expérience est nécessaire pour pouvoir discerner les schémas simples de choses apparemment complexes.
SK-logic
4
Je dirais que ce n'est pas tant l'effet Dunning – Kruger que le simple "langage de programmation" = "langage de programmation de style c". Après avoir connu une quantité décente de c ++, une quantité décente de C # et quelques notions de perl et de python, je m'attends à pouvoir maîtriser assez bien Java, PHP, etc. en une semaine. Pas nécessairement expert, mais au moins assez fluide. Je ne prends javascript dans quelques jours. À ce stade, il s’agit principalement d’apprendre les différences qui les séparent. Remarque: les langages les plus populaires du monde réel sont similaires à ceux du langage C. Ce ne serait pas nécessairement le cas de Prolog, par exemple.
neminem
2
@WayneWerner Sérieusement, la différence entre les langages Haskell ou Prolog et algol est tellement plus que la syntaxe, vous ne faites que perpétuer le mythe. Passez mon test ci-dessus: passez une semaine à essayer d'apprendre Haskell et voyez comment cela fonctionne pour vous. Honnêtement, ça va être bon pour vous, beaucoup à apprendre en le faisant.
Jimmy Hoffa
51

... comment puis-je développer des compétences de programmation qui peuvent être appliquées à toutes les langues au lieu d'une?

La clé de cette question est de transcender le langage et de ne pas penser au langage que vous codez.

WAT?

Les programmeurs polyglottes expérimentés pensent dans l' arbre de syntaxe abstraite (AST) de leur propre modèle mental du langage. On ne pense pas "j'ai besoin d'une boucle for ici", mais plutôt "j'ai besoin de faire une boucle sur quelque chose" et traduit cela en fonction de, pour, ou, ou itérateur ou récursion pour cette langue.

Ceci est similaire à ce que l'on voit dans l'apprentissage d'une langue parlée. Les personnes qui parlent plusieurs langues en pensent couramment le sens , et cela s’exprime dans une langue donnée.

On peut voir quelques indices de cet AST dans la paire de vidéos qui traitent des yeux. Compréhension de code avec suivi des yeux et expérience du code de suivi des yeux (novice) où sont surveillés les mouvements des yeux du débutant et du programmeur expérimenté. On peut voir le programmeur expérimenté «compiler» le code dans son modèle mental et le «faire tourner» dans sa tête, tandis que le débutant doit parcourir le code mot-clé par mot-clé.

Ainsi, la clé de la question du développement des compétences en programmation à appliquer à toutes les langues consiste à apprendre plusieurs langues de manière à pouvoir se distancer du modèle mental d’ une langue et à développer la capacité de générer l’AST pour un problème par eux-mêmes. une langue de tête qui est ensuite traduite dans une langue donnée.

Une fois que l’on a cette capacité à utiliser l’AST dans la tête, apprendre une autre langue dans une école de pensée similaire (aller à Befunge, c’est un saut de Java, mais pas autant de Forth ) devient beaucoup plus facile - c’est 'juste' traduire l'AST dans une nouvelle langue, ce qui est beaucoup plus facile les 3ème, 4ème et 5ème (etc ...) fois que c'est fait.


Il existe un article classique, Real Programmers Don't Use Pascal . Une partie de ceci se lit comme suit:

... le programmeur réel déterminé peut écrire des programmes en Fortran dans n'importe quelle langue

Il existe également des éléments pour lesquels vous ne pouvez pas simplement utiliser l'AST mental - vous devez également penser dans la langue. Cela prend un peu de temps (je suis toujours accusé d’écrire du code Perl en Python et mon premier code Lisp a été commenté: "C’est un très bon programme C.").

À cela, je dois signaler un article publié par l’ACM, Comment ne pas écrire le Fortran dans n’importe quelle langue . Le troisième paragraphe de l'article (sans les guillemets) aborde directement la question à l'examen:

Un bon codage présente des caractéristiques qui transcendent tous les langages de programmation généraux. Vous pouvez implémenter un bon design et un style transparent dans presque tous les codes, si vous vous y appliquez. Ce n'est pas parce qu'un langage de programmation vous permet d'écrire un code incorrect que vous devez le faire. Et un langage de programmation conçu pour promouvoir un bon style et une bonne conception peut toujours être utilisé pour écrire un code terrible si le codeur est suffisamment créatif. Vous pouvez vous noyer dans une baignoire avec un pouce d'eau, et vous pouvez facilement écrire un programme complètement illisible et incontrôlable dans une langue sans gotos ni numéros de ligne, avec une gestion des exceptions, des types génériques et un ramassage des ordures. Que vous écriviez Fortran ou Java, C ++ ou Smalltalk, vous pouvez (et devriez) choisir d'écrire du bon code plutôt que du mauvais.

Il ne suffit pas d'avoir l'AST, il faut aussi l'AST pour pouvoir traduire dans d'autres langues. Avoir un AST Fortran dans votre tête et écrire du code Fortran en Java n'est pas une bonne chose. Il faut aussi être suffisamment familiarisé avec la langue et ses idiomes pour pouvoir penser dans la langue (malgré ce que j'ai dit tout en haut).

J'ai vu du code Java écrit par quelqu'un qui n'avait pas arrêté d'écrire du code C. Il y avait un objet avec une méthode principale. Dans cet objet, il y avait un tas de méthodes statiques appelées par mainet des classes internes privées qui avaient des champs publics (et qui ressemblaient donc beaucoup à des struts). C'était du code C écrit en Java. Tout ce qui était fait était de traduire la syntaxe d'une langue à une autre.

Pour dépasser ce point, il faut continuer à écrire du code dans plusieurs langues, ne pas penser à ces langues lors de la conception du code, mais y penser lors de la traduction du dessin dans le code pour utiliser correctement les idiomes de langue.

Le seul moyen d'y parvenir - être capable de développer des compétences en programmation pouvant être appliquées à toutes les langues - est de continuer à apprendre les langues et de garder cette langue de programmation mentale souple plutôt que liée à une seule langue.

(Mes excuses à ChaosPandion pour avoir emprunté énormément à l'idée qu'il a présentée .)

Communauté
la source
3
Inutile de s'excuser. Je pense que vous avez écrit une réponse impressionnante.
ChaosPandion
Je voulais remercier la personne qui m'a fait penser à cela dans cette direction pour écrire la réponse.
3
C'est une très bonne réponse. Si seulement je pouvais voter deux fois.
Wayne Werner
2
En fait, c’est exactement la raison pour laquelle vous ne devriez pas apprendre d’abord au OO, car cela formate votre cerveau avec l’un des pires AST imaginables.
Morg.
1
@ JimmyHoffa - Vous avez peut-être raison. J'ai toujours d'abord enseigné en utilisant une langue et en introduisant lentement plus tard. Néanmoins, je pense que cela vaut la peine d’être explorée, car je peux toujours appuyer sur les freins et les amener à se concentrer sur une seule langue. (SML semble en fait un très bon choix.)
ChaosPandion
12

Choisissez une langue et commencez à coder. Python est un bon choix pour un débutant et des tutoriels sont disponibles en ligne pour vous permettre d’apprendre à le faire correctement.

Tout découle de ça. Vos intérêts vous mèneront vers des cadres et des concepts de conception qui ajouteront une sophistication à vos programmes. Vous découvrirez qu'il existe des cours en ligne que vous pouvez suivre pour vous familiariser avec les principes fondamentaux et la théorie, et qu'il existe différents paradigmes de programmation que vous pouvez explorer, etc.

Et oui, vous découvrirez des langues comme Haskell qui vous apprendront quelque chose de nouveau, une fois que vous maîtriserez les bases.

Certains programmeurs pensent probablement que toutes les langues sont identiques car elles n'ont pas été exposées à une langue qui leur fasse penser différemment. Tous les langages les plus couramment utilisés sont dérivés d'Algol (ils sont essentiellement des langages procéduraux) et parmi ceux-ci, la plupart sont des langages à accolades similaires au C. Tous font essentiellement les mêmes choses, bien que certains soient plus sophistiqués que d'autres.

Robert Harvey
la source
2
Ce n'est pas vraiment vrai cependant? Certains langages de programmation codent tout en tant que fonctions pures (y compris décisions + boucles). D'autres peuvent être modélisés avec des objets poussant et sautant à partir de jeux, etc. etc.
jozefg
1
Qu'est-ce qui n'est pas vrai? Vous devez apprendre à ramper avant de pouvoir marcher ou courir.
Robert Harvey
1
Ah, je devrais préciser, je voulais dire le dernier paragraphe, je suis d'accord avec le reste de la réponse
jozefg
1
J'ai remplacé le dernier paragraphe par un autre qui reflète mieux mon sentiment.
Robert Harvey
5

La programmation concerne la résolution de problèmes de telle manière que la solution puisse être exprimée dans une grammaire restreinte telle qu’elle puisse être mise en œuvre avec un langage de programmation. L'art de la programmation est donc l'art de résoudre des problèmes.

Certains langages invitent d'autres paradigmes de programmation tels que l'orientation d'objet, les événements, les multi-threads et le framework MVC. Ce ne sont que des modèles et des modèles et n’ont vraiment rien à voir avec la mise en œuvre.

Si vous pouvez vous asseoir et résoudre un problème sur papier de manière à ce qu'il puisse être facilement traduit en code et associé à un modèle approprié pour votre plate-forme, vous êtes alors un programmeur. Si tout ce que vous pouvez faire est de prendre ces solutions et de les mettre en œuvre dans la langue de votre choix, c'est un autre problème.

Je programme depuis 30 ans (OMFG!) Et utilise toujours la php.netrecherche de commandes en PHP car ce n'est pas mon premier langage.

Je dirais que l'expertise en langues est inversement proportionnelle à la fréquence à laquelle vous consultez le manuel ou le stackoverflow. L’expertise en programmation est votre capacité à résoudre les problèmes d’une manière compatible avec les langages de programmation.

Dans les nouvelles, j'ai appris Ruby la semaine dernière. Bien que je ne sois pas un "expert", je peux vous résoudre un problème que je pourrais écrire en Perl, puis passer un siècle à le traduire en Ruby pendant que je l'apprendrais davantage.

stevemarvell
la source
Votre commentaire est le premier que j'ai lu sur les modèles et les modèles! Je suis à 100% avec votre commentaire, une chose est d’avoir une langue et de commencer à faire un programme. Une autre solution consiste à réfléchir au problème et à trouver les outils appropriés pour le résoudre, puis à rechercher une langue et à commencer à programmer.
3

Je pense que, comme pour tout, la pratique rend parfait. Ne vous contentez pas de toujours faire la même chose ou d'utiliser toujours le même langage et continuez à apprendre des choses sur chaque projet.

Je pense que vous pouvez facilement faire un parallèle avec quelque chose comme apprendre à jouer de la guitare. Tout bon musicien peut apprendre à jouer une nouvelle chanson en très peu de temps, car il connaît déjà tous les accords et toute la théorie qui sous-tend la raison pour laquelle les accords sont joués comme ils sont. Comment obtiennent-ils ce bien? Ils ont juste joué tellement de chansons que tous les motifs ont été fusionnés, tout en complétant leurs connaissances avec la théorie documentée selon laquelle ces motifs souscrivent aussi.

Alors peut-être que vous pouvez très bien jouer quelques chansons, mais vous ne pouvez pas dévier ou prendre de nouvelles chansons rapidement. C'est probablement l'équivalent d'un programmeur .NET qui continue de créer la même application CRUD encore et encore, essayez quelque chose de nouveau, ajoutez des appels de service Web ou une interface utilisateur avancée, ou écrivez-le dans un tout nouveau langage. Lorsque vous rencontrez un problème, cherchez pourquoi les choses se passent comme cela, posez des questions sur Stack Exchange, etc. Éventuellement, vous verrez tous les schémas qui se présentent continuellement et connaissez une partie de la théorie sous-jacente et l'apprentissage d'une nouvelle langue ne semble presque aussi intimidant.

KDiTraglia
la source
1

Je ne vais pas aborder le temps nécessaire pour apprendre une langue ou ce que cela signifie d'apprendre une langue, mais plutôt votre problème actuel: comment déterminer si vous avez appris à programmer ou si vous avez appris un langage de programmation .

Vous avez appris à programmer si vous avez appris à décomposer un problème en processus discrets, puis à utiliser ces processus pour résoudre votre problème. Vous avez appris un langage de programmation si vous avez appris la syntaxe d'un langage et savez comment ajuster le fonctionnement d'un processus lorsqu'il est implémenté dans ce langage.

Cela ne veut pas dire que vous devriez programmer dans Fortan lorsque vous utilisez Lisp ou additionner les valeurs d'une colonne dans une table dans une base de données à l'aide d'un curseur. Juste que la langue est un détail de mise en œuvre. Une solution qui peut changer les processus nécessaires, mais pas le besoin d’identifier et de créer des processus - à la fin, il existe une implémentation réelle, avec des entrées / sorties et des résultats souhaités.

jmoreno
la source
1

Ma stratégie a toujours été de me concentrer sur des compétences pures plutôt que sur des compétences spécifiques.

Au lieu d’apprendre la syntaxe spéciale de Python (ou n’importe quel langage), peu importe ce que vous voulez faire, consacrez votre cerveau à la résolution de problèmes abstraits, comme comment résoudre au mieux tous les problèmes de cette catégorie.

De cette façon, vous saurez quoi faire, peu importe la langue, et posséderez surtout des compétences intemporelles pouvant être utilisées pour programmer dans n'importe quelle langue.

Évitez plus particulièrement les outils encombrants, tels que MySQL, ou les langages basés sur les opinions, tels que Java, car tout ce que vous apprendrez en utilisant ces outils aura une grande proportion de connaissances spécifiques à cet outil, qui deviendra vite inutile.

Contrairement à ce qui a été dit dans de nombreuses réponses, n'écoutez PAS les autres programmeurs. Vous êtes un noob et il est impossible de distinguer le faux de la réalité, il est donc préférable de tout prendre avec une cuillère à soupe.

Vous voulez interroger tout le temps et accepter uniquement lorsque la solution est rapide, élégante et fiable.

Morg.
la source
1
"N'écoutez PAS les autres programmeurs" - oui, bien sûr. "- Comment sauriez-vous si vous avez écrit du code lisible et facilement maintenable? - Votre pair vous le dira après avoir examiné le code. Justification: vous ne pouvez pas le déterminer vous-même car vous en savez plus en tant qu'auteur sur ce que le code en dit lui-même. Un ordinateur je ne peux pas vous dire, pour les mêmes raisons qu’il ne peut pas dire si une peinture est un art ou non. Vous avez donc besoin d’un autre humain capable de gérer le logiciel pour examiner ce que vous avez écrit et donner son opinion ... " ( source de citation )
Gnat
@fait fais ce que tu veux. Je vous dis simplement que, puisque la plupart des programmeurs ne peuvent pas coder pour de la merde, leurs retours sont potentiellement dangereux, et vous devriez apporter des sacs et des sacs de sel pour gérer cela. De plus, je crois que "éditable et lisible par des abrutis" n'est pas du tout un gage de qualité. Croyez ce que vous voulez mais n'allez pas le faire simplement parce que les gens ne sont pas d'accord avec votre vision.
Morg.
mon vote indique une évaluation de la qualité du message , pas si je suis d’accord ou pas (accord, je pense plutôt que vous avez un point ici). J'ai cité un autre avis non pas parce que c'est opposé, mais parce qu'il a une explication solide (voir "JUSTIFICATION"). Si vous pouvez imaginer une explication aussi solide pour étayer votre opinion, vous pouvez modifier le message pour l’ajouter
Gnat
peu importe. contenu> forme. gardez votre forme, je vais garder mon contenu.
Morg.
0

Il y a l'approche théorique. Découvrez comment les ordinateurs fonctionnent réellement sous la couverture. Comment les instructions de base des processeurs sont-elles combinées pour rendre les opérations et les structures plus complexes que nous prenons pour acquis dans les environnements de programmation de haut niveau.

Il y a ensuite l'approche de programmation la plus pratique. Le principal problème qui pèse souvent sur les personnes qualifiées de "mauvais programmeurs" est qu’elles ne connaissent qu’une seule langue. Et même s’ils connaissent les autres, ils les programment de la même manière qu’ils le font avec leur langue maternelle. C'est un cycle qu'il faut rompre s'ils veulent vraiment apprendre à programmer. La réponse par défaut à cette question consiste à apprendre au moins une langue de chaque paradigme de programmation. Donc, apprendre un langage POO, un langage fonctionnel, un langage de script, etc., etc. Et par apprentissage, je ne veux pas dire apprendre la syntaxe . Vous apprenez une langue en l’utilisant réellement pour créer quelque chose.

Personnellement, lorsque je veux apprendre une nouvelle langue, j'utilise les casse-tête de Project Euler . Je vais à un casse-tête que j'ai déjà résolu dans un langage POO (à titre d'exemple) et j'essaie de le résoudre en utilisant un langage fonctionnel tout en essayant de suivre les meilleures pratiques du nouveau langage. Lorsque vous résolvez le même problème en utilisant deux approches fondamentalement différentes, vous ne voyez pas seulement quelles sont les véritables différences, mais elles vous indiquent également les zones communes. Ces domaines communs qui sont partagés par toutes les langues constituent la vraie programmation , les différences ne sont que des manières différentes de la réaliser.

Système en panne
la source
4
Je n’appellerais pas l’apprentissage du comportement physique d’un ordinateur une "approche théorique"; une "approche théorique" consisterait à apprendre la théorie, à lire la thèse de la religion et à en apprendre davantage sur l’isomorphisme de curry howard, à apprendre le calcul lambda et le bases de la théorie des nombres, ce sont des fondements théoriques. Ne pas dire que votre réponse est bonne ou mauvaise, mais simplement que je parlerais de cela comme d’une approche concrète et non théorique car elle manque de théorie.
Jimmy Hoffa
@ JimmyHoffa - Bons points!
Système
1
"Comment les instructions de base du processeur sont enchaînées (...)" semble une idée terrible pour les débutants (OP n'a pas indiqué qu'il en était un, mais supposons, par souci d'argumentation. Il enseignerait des "micro-optimisations" sans vraiment enseigner comment pour optimiser (une architecture en 3-5 étapes peut être considérée comme un peu dépassée ...). Ne vous méprenez pas - fascinant de CA - mais une appréciation "correcte" nécessiterait des mots comme "hors service" et "multiscalaire", et probablement après une expérience de base en programmation
Maciej Piechotka
0

Eh bien, la plupart des choses que je voulais dire ont déjà été dites. Ce que je voudrais ajouter, c'est une analogie très simple.

Si les langages de programmation sont considérés comme de simples outils, même dans ce cas, il n'y a absolument aucune logique à être bon dans l'un, mais à être bon dans l'autre.

Pensez à un groupe de maîtres sabreurs réputés, qui ont soudainement posé leurs épées et sont partis au combat avec des lances après 7 jours d’entraînement. Ce qui se passerait? Ils seraient massacrés.

Les langues ne sont souvent pas difficiles à apprendre, mais il faut de la patience et de l'exercice pour être doué. De plus, il n’ya pas de bonne façon d’apprendre à programmer.

Apprendre une programmation, c'est comme jouer à un jeu de rôle. Parfois, vous utilisez des épées, parfois des lances, parfois un bouclier. Chaque ennemi que vous tuez, vous obtenez des points d'expérience. Une fois que vous avez assez de points d'expérience, vous montez de niveau. Maintenant, maîtriser une épée ne vous rendra pas excellent avec les arcs et les flèches. Mais une partie de l'expérience que vous avez acquise précédemment augmentera votre endurance et votre vitesse.

Voici quelques choses à faire lors de l’apprentissage d’une langue.

  • Lisez à propos de la langue. si cela semble intéressant, essayez vous-même l’application hello world.
  • Lire des tutoriels, des astuces, des blogs.
  • Créez des applications simples pour le plaisir.
  • Testez différentes fonctionnalités.
  • Si vous l’aimez vraiment, achetez des livres et / ou des tutoriels vidéo.
  • Rechercher de bonnes bibliothèques.
  • Cherchez des réponses, demandez seulement si vous ne trouvez pas les réponses.
  • Aidez les autres à demander des réponses (où mieux qu'ici?)
  • Faire quelque chose d'utile. Faire une application de calculatrice peut être un bon exercice, mais si vous créez une application de liste de choses à faire et que vous utilisez en fait sur votre PC / téléphone, le sentiment est 100 fois satisfaisant.

Découvrez de nouvelles langues, explorez de nouvelles bibliothèques, découvrez de nouvelles astuces sur votre temps libre. Avant de vous en rendre compte, vous serez surpris par votre propre talent.

Sayem Shafayet
la source
0

Dans mon cas, j'apprends à programmer grâce aux éléments suivants:

  1. Apprenez des maîtres. Écoutez des podcasts de programmation, lisez des blogs professionnels dans le thème de votre choix, lisez / regardez des tutoriels merveilleux faits par des gourous dispersés sur le Web et, enfin, lisez des livres épiques comme The Pragmatic Programmer . Ce livre contient de nombreux bijoux de programmation accumulés au cours de la carrière des auteurs. Un moyen sûr d’apprendre à coder consiste à savoir comment les autres programmeurs réussis le font.
  2. Expérience en faisant. Lire à ce sujet et savoir est une chose, le mettre en pratique et le faire fonctionner en est une autre. Il n’ya pas de meilleur enseignant que l’expérience, mettez donc votre casquette de codage et commencez.
  3. Demandez à quelqu'un qui sait. Tout comme vous le faites maintenant, n’ayez pas peur de demander quelles sont les meilleures pratiques ou les meilleures façons de faire les aînés de votre équipe, ou si vous avez la malchance de ne pas avoir accès aux dits aînés, mentors ou gourous, Ensuite, il reste le reste de stackexchange et Internet à poser.

En outre, comme vos commentateurs l'ont mentionné, n'oubliez pas de maîtriser également vos outils. L'apprentissage de toutes les meilleures pratiques et des meilleures théories est inutile et sera mal mis en œuvre si vous ne connaissez pas suffisamment votre outil, dans ce cas, un langage de programmation.

Maru
la source
0

Je pense que si vous pouvez penser de manière analytique, vous avez un bon début.

Apprenez la langue de votre choix et construisez-vous à l'aide d'une série d'exemples, par exemple tels que présentés dans presque tous les livres de programmation.

Ensuite, essayez de résoudre vos propres problèmes. Essayez de trouver différentes solutions et comparez-les. La vitesse et l’utilisation de la mémoire sont des facteurs importants qui sont couramment utilisés. Discutez de vos solutions avec d'autres programmeurs.

Lisez le code des autres programmeurs et essayez de comprendre pourquoi ils ont résolu le problème de cette façon.

Vous devriez également lire quelques livres sur les algorithmes pour avoir un aperçu des approches standard. Les nouveaux problèmes sont souvent des modifications d'anciens problèmes.

Beaucoup de pratique et de travail avec le code, même en équipe, vous aideront à augmenter vos compétences étape par étape.

J'espère que mon opinion répond à votre question au moins partielle.

MrSmith42
la source