Par ordre d'importance, s'il est possible de le faire et qu'il ne l'est pas, quels sont les fondements les plus importants pour savoir comment programmer. Algorithmes, itération, récursivité, etc.?
Notez que là où je mets, etc., c'est ma question. J'ai récemment lu un article sur Internet qui disait que 9 programmeurs sur 10 ne pouvaient pas haleter !
http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html
Je veux avoir une connaissance approfondie de ce que j'essaie réellement d'accomplir lors de la programmation et une compréhension exhaustive des outils de base à ma disposition. En gros je veux pouvoir peindre avec toutes les couleurs du vent.
Réponses:
Cette liste est un début ... vous posez une grande question!
J'ai répondu à une autre question dans le même sens (avec un contenu similaire) ici:
conseils, directives, points à retenir pour le rendu de code professionnel?
la source
Sous la rubrique " etc. " se trouve quelque chose qui peut facilement prendre 50% ou plus de votre temps.
Apprenez à déboguer.
Cela signifie apprendre la méthode scientifique . Je veux vraiment l' apprendre. Et puis l'appliquer avec une brutale honnêteté . Apprenez à dire précisément ce que vous savez être vrai, ce que vous savez n'est pas vrai et ces choses que vous ne connaissez pas. Chaque fois que vous attribuez un article à la mauvaise catégorie, vous vous rendez la vie beaucoup plus difficile.
Apprenez à dire «je pense» au lieu de «je sais». Vous ne pouvez dire «je sais» que lorsque vous «pensez» que quelque chose est vrai (ou faux), puis vous le prouvez!
De nombreux bugs sont triviaux, mais ils peuvent être difficiles à voir car vous "savez" ce que le code devrait être ... sauf que ce n'est pas le cas. Trouvez un ami pour l'expliquer. Demandez-leur d'être un "idiot expert": quelqu'un qui ne connaît pas votre code, mais dont vous savez que vous ne pouvez pas faire sauter BS. Ne soyez pas surpris si au milieu d'une description que vous leur faites, vous vous arrêtez soudainement et dites: "et ainsi vous pouvez ... voir ... voir que ... sh * t. Merci."
Les bogues non triviaux nécessitent un arsenal de techniques. Un classique qui peut rapidement mettre en évidence la plupart des bogues non liés au timing est Wolf Fence en Alaska. Il y a un loup quelque part en Alaska; construire une clôture coupant l'État en deux. De quel côté est le loup? Coupez ce côté en deux. Faire mousser, rincer, répéter. Faire cela 20 fois à des endroits bien choisis dans le code réduit la zone où le bug (loup) peut être à 1/1048576. Tuez ce loup.
Astuce: recherchez les ondes manuelles, physiques, mentales ou autres. Dès que vous (ou votre collègue) tressaillez / détournez / minimisez l'attention portée à une partie du code, devenez complètement enragé . Parce que la zone où vous connaissez le bug ne peut pas être, même si vous avez passé des heures / jours à chercher la chose d * mn et que vous ne le trouvez toujours pas ... c'est l'emplacement le plus probable pour le bug. Personne ne reçoit un «bye» , personne (y compris la machine, le système d'exploitation, le compilateur ou vous ) n'obtient une sorte de «respect dû». Il y a un bug. Période. Fin de phrase. Maintenant, allez tuer la chose d * mn.
Je ne connais aucune école qui enseigne le débogage comme un sujet à part entière. IMNSHO, c'est peut-être la preuve la plus flagrante qu'ils (universités / professeurs) ne vous apprennent pas à être programmeur, ils vous apprennent plutôt à être ... comme eux? Dur? Peut-être. Vrai? Forge ta propre opinion. Maintenant, prouve-le.
la source
Je crains que ce soit une question assez vaste à laquelle quiconque puisse répondre de manière concluante ou faisant autorité, d'autant plus que vous voulez une liste priorisée. Il y a beaucoup de programmeurs et ils travaillent sur des choses très différentes - bien sûr, les fondamentaux restent les mêmes, mais ce dont vous avez besoin pour rester actif dans votre mémoire peut être vraiment différent, et en effet, il y a beaucoup de tâches où vous pouvez rester jolie de haut niveau sans aller plus loin.
Il semble cependant que vous soyez vraiment préoccupé par la façon d'être un meilleur développeur, et pas seulement par un jack-of-one-trade. Je trouve cela admirable et je peux partager certaines des choses qui m'ont aidé à apprendre à programmer.
Presque toute la programmation se résume aux algorithmes et aux structures de données. À leur tour, ils sont des exemples de la question plus vaste - comment modéliser les choses et les processus du monde réel en une représentation telle qu'un ordinateur puisse comprendre. Si vous débutez, il peut être utile d'utiliser un langage de programmation de niveau supérieur (comme Java, Python, peu importe) pour vous familiariser avec la mise en œuvre de structures de données et d'algorithmes.
À un certain moment, après avoir joué avec les structures de données et les algorithmes, vous pouvez commencer à vous poser cette question rongeante "mais comment pouvons-nous dire à l'ordinateur quoi faire, à l'ordinateur le faisant réellement?" Ensuite, vous pouvez voir comment un ordinateur calcule réellement - comment la mémoire et le processeur travaillent ensemble pour exécuter des instructions, comment les systèmes d'exploitation font l'abstraction du matériel afin que vous puissiez écrire un programme qui, par exemple, ouvre un fichier, sans coder à un niveau bas particulier interface de disque dur.
C'est probablement un bon point de départ - comment les algorithmes et les structures de données modélisent les problèmes du monde réel, et comment un ordinateur effectue réellement le calcul. Connaître ce dernier est très utile pour maîtriser les langages de niveau inférieur comme C, qui utilisent beaucoup moins de fumée et de miroirs que les langages OO et de script :)
la source
YAGNI : " Implémentez toujours les choses lorsque vous en avez réellement besoin, jamais quand vous prévoyez simplement que vous en avez besoin."
D'après mon expérience, il est courant pour les "programmeurs" de prévoir de nombreux cas à l'avenir et d'essayer "d'améliorer" le code en ajoutant des codes pour les anticiper! Dans la plupart des cas, le code qu'ils ont ajouté ne fera que gonfler le code et ajouter de la complexité au code.
la source
La chose la plus importante à savoir pour être programmeur est que l'écriture de code est une tâche, et une attitude de "col bleu" ouvrière envers la production de ce que vous êtes payé pour produire vous permettra d'aller plus loin que tout apprentissage ésotérique.
Apprenez à entrer dans la zone. J'entends par là l'état mental lorsque vous vous concentrez uniquement sur votre tâche et que vous pouvez commencer à garder beaucoup de choses dans votre tête et comment elles interagissent en même temps. Une fois que vous avez l'habitude d'entrer dans la zone à volonté, commencez à vous soucier du reste. Jusqu'à ce que vous puissiez marteler du code comme une sorte de code martelant quelque chose, le reste est pratiquement inutile.
ÉDITER:
Si vous n'y croyez pas et que vous m'avez déçu, je crois que vous ne savez pas si vous avez la détermination de le faire pendant 20 ans. Je sais que je le fais parce que je l'accepte. ;)
la source
Une question récente, liée en quelque sorte à celle-ci, et Answer avait un lien vers ce blog qui traite du même problème sous un angle différent.
Le concept le plus important pour tout développeur est probablement "l'humilité" ... Une fois que vous acceptez, vous ne savez pas tout, vous êtes ouvert à l'exploration de solutions. La plupart des personnes qui écrivent des blogs sur la programmation sont dans le centile supérieur, et le problème est que beaucoup n'ont pas encore contrôlé leurs tendances narcissiques .... c'est pourquoi ils bloguent ..... Vous devez apprendre à identifier ces blogueurs et ignorer là-bas
Le blog lié n'est vraiment rien de plus qu'une diatribe - Dans chaque industrie se plaint que les récents diplômés sont inutiles sont communs, qu'il faut des années pour les rendre utiles et productifs. Le problème est peut-être que ces gourous autoproclamés attendent vraiment trop et ont oublié qu'une fois ils n'auraient pas pu résoudre FizzBuzz. Tout le monde ne peut pas être dans le 10e centile supérieur, par définition, la moitié des programmeurs sont en dessous de la moyenne ......
la source