Qu'est-ce qui différencie les programmeurs exceptionnels des très bons? [fermé]


59

Vous savez qui ils sont. Ils sont les stars du rock de la programmation:

  • Ils codent 10X plus rapidement.

  • Leur code fonctionne simplement.

  • Ils connaissent non seulement leur langue principale tant à l’intérieur qu’à l’extérieur, mais ils savent également comment cela fonctionne sous le capot.

  • Ils connaissent la réponse à la plupart des questions avant de la poser.

  • Quelques-uns d’entre eux ont inventé les principes de programmation que nous utilisons tous.

  • Et ils ont tendance à être inhabituellement humbles également.

Qu'en est-il de ces gens? Y a-t-il quelque chose dans leur processus de pensée qui est fondamentalement différent du programmeur supérieur à la moyenne? Ou sont-ils simplement des personnes très talentueuses qui travaillent fort?

En d'autres termes: comment puis-je leur ressembler? Je sais ce que je pense avoir besoin d'apprendre à être aussi bon, mais il me semble qu'il me faudra les dix prochaines années pour l'apprendre, puis mes connaissances seront obsolètes.


49
Les programmeurs exceptionnels n'ont pas de bloc try-catch autour de leur code. zing

11
@John: Je suis totalement en désaccord, j'ai vu la chose 10x en jeu encore et encore et cela semble être vrai, malheureusement. Je pense que le problème réside en grande partie dans le fait que la plupart des programmeurs professionnels ne peuvent pas réellement programmer, et certains ne peuvent même pas programmer des choses simples. Ce n'est pas qu'un codeur divin est 10 fois supérieur à un bon codeur, mais plutôt un codeur divin est 10 fois supérieur au pire codeur de son organisation ou de son équipe.
Pax Noctis

10
@fennec: Faites ou ne faites pas. Il n'y a pas try.
mmyers

29
Une expérience de 18 ans pour une langue inventée il y a 15 ans est vraiment impressionnante!
Ricky Clarkson le

15
@Tjaart - Non, c'est un nombre solide et des études depuis les années 1960 l'ont montré. L'étude initiale a été menée à la fin des années 1960 par Sackman, Erikson et Grant. Ils ont étudié des programmeurs professionnels avec une expérience moyenne de 7 ans et ont constaté que le rapport du temps de codage initial entre le meilleur et le pire programmeur était d'environ 20 à 1; le rapport des temps de débogage sur 25 à 1; de la taille du programme 5 à 1; et de la vitesse d'exécution du programme d'environ 10 à 1. Ils n'ont trouvé aucune relation entre la quantité d'expérience d'un programmeur et la qualité du code ou la productivité. (Merci à Steve McConnell).
Jon Hopkins

Réponses:


88
  • Humble: Un programmeur exceptionnel ne prétendra jamais que son code est le meilleur. En fait, il sera toujours à la recherche d'une meilleure solution (toutes les chances qu'il obtient.) .

  • Patient: Un programmeur exceptionnel aura une patience illimitée (Cela ne signifie pas pour autant qu'il va perdre des jours sur un problème. Voir: Guide de dépannage) .

  • Dépannage: Un programmeur exceptionnel sera capable de résoudre un problème en quelques minutes pouvant prendre plusieurs jours à votre programmeur moyen.

  • Curieux: un programmeur exceptionnel sera incapable de résister à la tentation de comprendre pourquoi quelque chose se produit.

  • Ingénieur: un programmeur exceptionnel va concevoir des systèmes plutôt que de créer un mélange de frameworks (cela ne signifie pas qu'ils n'utiliseront pas de frameworks) .


5
J'aime ton point "ingénieur"!
Cedric H.

1
@ Chaos - Le programmeur le plus rapide que je connaisse a construit son propre framework Web. Je pense que des choses comme celle-là rendent quelqu'un meilleur et plus rapide. Merci pour votre réponse. Je me sens moins impuissant à vouloir toujours réorganiser les choses.
Orokusaki

11
"Ingénieur" est un point crucial. Chaque ligne de code créera une base solide, plutôt que d’ajouter à une création instable comme Jenga.
Alex Feinman

5
Je ne le ferai pas -1 mais, en contrepartie, je suis admissible à tout cela. et je suce toujours. (À moins que les programmeurs moyens à mon exceptionnel que je compare ne soient en réalité terribles)
Steven Evers

1
@Chaos, "Curieux" mais seulement jusqu'à un certain point.

28

Vous en avez beaucoup parlé dans votre tout dernier point:

"Et ils ont tendance à être inhabituellement humbles, aussi."

Je pense que c'est une combinaison d'humilité - pas seulement extérieure mais aussi dans leur esprit. Ils acceptent de se tromper, de se tromper et ont très vite un sentiment de frustration. Beaucoup de programmeurs essaieront quelque chose, échoueront et deviendront très rapidement émotionnellement forts, un état anathème à l'écriture d'un bon code. Vous devez accepter le fait que vous n'êtes pas parfait et que vous allez bousiller (souvent!), Et que la meilleure chose à faire est d'apprendre à récupérer rapidement lorsque vous bousillez. C'est une confiance humble , du style "Je sais que je vais me gâcher, mais je sais aussi que si je continue d'essayer, je finirai par y arriver."

Il y a un dicton dans la PNL, "Il n'y a pas d'échec, seulement des commentaires." Pour être programmeur de rock star, je pense que vous devez accepter cela. Il n'y a rien que vous ne pouvez pas coder. Vous pourriez être lent au début, mais si vous continuez à essayer et que vous refusez de vous arrêter lorsque vous échouez ou si vous ratez quelque chose, vous livrerez. Et dans ce processus, vous apprendrez toutes les astuces mentales dont vous avez besoin pour devenir l’un des meilleurs.

Bien entendu, les conseils ne valent que leur source, alors ... tout ce que je pense.


“Je n'ai pas échoué, j'ai trouvé 10000 façons qui ne fonctionnent pas” - Thomas Edison
ninjalj

1
Le seul moyen d'apprendre rapidement est d'accepter le fait que vous pouvez vous améliorer et que vous voulez le faire.

25

Ils se soucient profondément de leur code.


2
Sans doute vrai.
Robert Harvey

3
Un pauvre programmeur ne peut-il pas se soucier de son code? Même si cela peut ne pas être aussi bon?
Walter

2
@Walter ils pourraient, mais je n'ai jamais vu ça. Le plus proche que j'ai vu est celui des programmeurs débutants qui tenaient profondément à leur code mais qui commettaient encore des erreurs de débutant (personne n'est à l'abri). Lorsque ces erreurs ont été signalées, elles ont été corrigées rapidement et rarement répétées.
JaredPar

15

Personnellement, les meilleurs programmeurs que je connaissais / connaissaient comprenaient les bases et n'étaient PAS l'expert dans une langue donnée. Ils avaient simplement une expérience suffisante sur à peu près tout. Le canonique "Jack of All Trades".

C’est plus que la science fondamentale, l’expérience dans les opérations réelles présente une valeur considérable. Les exemples, ceux qui comprennent la philosophie Unix et pourraient ainsi résoudre des problèmes inconnus avec différents outils fournis (IOW savent où regarder) surpassent de loin l’expert Java qui a codé une solution parallèle et filée.

Les programmeurs exceptionnels respectent également ceux qui les ont précédés. Ils ne détestent pas les modèles de données relationnels ni ne rechignent lorsqu'ils voient SQL comme une API formelle, ni ne bafouillent en mathématique avec FORTRAN. Ils savent que l'OO n'est pas la solution ultime et, avant tout, comprennent que la programmation est un ART, pas une science.


2
Le texte-fichiers grep, awk, sortet uniqpeut répondre à beaucoup de questions. Si vous en avez perlaussi, encore plus!

2
Je pense que c'est un artisanat, pas de science ni d'art.
Alexander Gessler

11

Quand j'ai commencé, je travaillais avec ce gars qui, à mon avis, était absolument brillant dans tout ce qu'il a fait en matière de programmation. Il l'est peut-être toujours, mais il est maintenant devenu directeur d'une entreprise en Asie du Sud-Est.

Quoi qu'il en soit, il a gardé les choses simples, et les choses simples fonctionnent. Ne souhaitant jamais écrire plus de lignes de code que nécessaire, tout ce qu'il a fait vient de fonctionner. Je faisais du rattrapage pendant un an pour me rapprocher de son niveau. L’autre chose, c’est le temps. Il travaillait depuis bien plus longtemps que moi à l'époque et il avait eu l'occasion de poser ces questions exactes encore et encore, jusqu'à ce qu'il connaisse (apparemment) toutes les réponses.

Il n'avait pas peur de poser des questions non plus. Je pense que c'est la plus grande chose.


On dirait que je suis tout à fait prêt (voir ma question compte sur SO)

2
@ acidzombie24 - Ou ... tu viens de commencer.
Orokusaki

haha orokusaki. +1

"Garder les choses simples" est l'une des beautés de Test Driven Development. Je ne peux pas le recommander assez fortement.

10

Matrice des compétences du programmeur

De nombreux sujets pour vous aider à identifier votre niveau en matière de programmation.


Connaissance de stackoverflow: 2 ^ n: Jamais entendu parler de cela O (n ^ 2): pose régulièrement des questions simples sur SO O (n): pose des questions intéressantes et est conscient des programmeurs.SE O (log (n)): Haut utilisateur sur un site SE lié à CS. ;-)
shuhalo

Merci beaucoup pour ce lien! Cela m'a donné confiance en ce que je sais et m'a orienté vers les domaines à améliorer.
oksayt

7

J'ai appris la réponse à cette question dans un livre sur le poker Texas Hold'em, mais cela s'applique à toutes les tentatives frustrantes. Les meilleurs codeurs ne vont jamais en tilt. Going on Tilt est le moment où quelque chose ne fonctionne pas comme prévu et vous réagissez de manière à créer des erreurs exponentielles dans l'application globale. Dans les tournois de poker, cela signifie que vous placez de mauvais paris et que vous êtes éliminé.

En programmation, l'inclinaison vous oblige à vous arracher les cheveux et à écrire des patchs de code ridicules qui ne fonctionnent que dans certains cas de votre application. Tilt amène les programmeurs à ignorer les besoins du projet dans son ensemble, cherchant à obtenir une gratification immédiate pour résoudre le problème immédiat maintenant. Souvent, le problème est résolu aujourd'hui, mais l'application en souffre demain.

Les meilleurs codeurs prennent le concept d'inclinaison et le gèrent de manière à toujours pouvoir voir les problèmes d'un point de vue extérieur. Si cela échoue, buvez de la caféine.


Que suggérez-vous de faire en tant qu'activité pour surmonter le "tilt" lors de la programmation? Je le comprends tout le temps et je finis par recoder tout le temps.
Orokusaki

@orokusaki - L'activité la plus simple pour éviter l'inclinaison consiste à modifier une question fondamentale que les programmeurs se posent tous les jours. Quand on me confie un problème, au lieu de penser: "Pourquoi devrais-je résoudre le problème de cette façon?" demander: "Pourquoi devrais-je éviter de le résoudre de cette façon?" Souvent, la réponse à la question de savoir pourquoi vous ne devriez pas résoudre un problème avec une solution particulière vous donnera un ensemble d’indicateurs permettant de trouver une meilleure solution.
JMC

6

Programmeurs exceptionnels:

  • Se soucier de leur code
  • Attention aux utilisateurs qui utilisent leur code
  • Attention aux personnes qui vont maintenir leur code
  • Attention à la productivité
  • Attention au processus, pas seulement au produit

Deux choses à propos du facteur "10x":

  1. Il doit être appliqué de bout en bout. Il n’est pas bon d’écrire du code 10 fois plus vite si cela prend 10 fois plus de temps pour le tester, le retravailler et le maintenir.
  2. Je crois que le facteur "10x" est un reflet de la pauvreté d'un nombre élevé de programmeurs, par opposition à la qualité d'un petit nombre de programmeurs.

3

la plupart d'entre eux ont l'air réservés et rien de spécial .. certains ont l'air super-intelligents .. ils préfèrent vérifier / déboguer les choses deux fois de tous les points de vue possibles, leur logiciel est sans faille dans le monde: p IMO certains programmeurs peuvent être plus lents, mais la qualité est meilleure, même les gens ordinaires peuvent comprendre le fonctionnement de leurs logiciels!

J'ai un ami qui a écrit son premier programme ASM à l'âge de 10 ans. Il a maintenant 24 ans, il n'a pas terminé ses études universitaires, mais cela ne l'a pas empêché de créer sa propre entreprise et de gagner des millions :), mais d'après ce que je vois est adroit en tout :)

Les programmeurs exceptionnels diraient très probablement que ce code peut être codé d'une autre manière - mieux que de dire que sa réputation est totalement fausse et que sa réputation est moins bonne :)

"Qu'en est-il de ces gens? Y a-t-il quelque chose dans leur processus de pensée qui soit fondamentalement différent du programmeur au-dessus de la moyenne? Ou s'agit-il simplement de gens très talentueux qui travaillent dur?"

Je pense qu'ils sont nés comme ça, c'est dans leur ADN: pi ne connaît pas leur processus de pensée, mais le meilleur programmeur que j'ai jamais connu souffrait d'épilepsie


3

Peu de choses différencient un exceptionnel d'un typique.

Exceptionnel:

  1. Passionné par son travail et s'efforce de livrer un chef-d'œuvre.

  2. Les performances et la qualité occupent une place importante dans leur esprit avant même que le codage ne commence.

  3. Ils pensent à l'amélioration continue après chaque publication.

  4. Ils veillent rigoureusement sur les solutions de rechange et adoptent très tôt.

  5. Leur thème dans la vie professionnelle est: "Ecrivez moins, transmettez plus".

  6. Ils continuent à penser aux perspectives logiques même lorsqu'ils ne codent pas.

Typique

  1. Parfois un peu passionné mais s'efforce de livrer parce que c'est un travail après tout. Si ce n'est pas un chef-d'œuvre, c'est OK. Au moins livré à temps.

  2. Je penserai à la performance plus tard, de toute façon, les PC sont assez rapides ces jours-ci.

  3. Améliorez uniquement lorsqu'il n'y a plus aucune option pour enregistrer un travail.

  4. Pas le temps de creuser dans d'autres technologies. Tenez-vous en à ce que votre travail exige maintenant. Apprendra d'autres choses lorsque le besoin s'en fera sentir.

  5. Leur thème est: "Faites ce qui est demandé et rentrez chez vous à temps".



0

L'auto-promotion , et je le dis de la meilleure façon possible. Avoir un travail comme celui de programmeur, en particulier dans une équipe, signifie que votre contribution personnelle ne correspond pas tout à fait à la réalité ou à qui incombait. Les personnes dont nous entendons parler et qui sont considérées comme de "grands programmeurs" sont les personnes de l’OMI qui ont maîtrisé l’art de faire connaître leurs contributions sans paraître égoïstes ni égoïstes. Dans de nombreux cas, il s’agit de créer les outils, les bibliothèques et les logiciels sur lesquels nous comptons pour gagner notre pain quotidien.


3
Peut-être, mais je crois que John Resig est bien connu pour ses réalisations remarquables avec Javascript et jQuery. Son matériel est largement utilisé parce qu'il est génial, pas parce que John possède d'excellentes compétences en marketing.
Robert Harvey

@ Robert Harvey - Ou, est-ce? Il est sans doute un grand programmeur, mais peut-être que ce qui le rendait vraiment bon à "exceptionnel" était le fait que son contenu avait pris de la popularité et qu'il était victime de son propre succès, devant faire face à la demande croissante? Lorsque vous aimez vraiment une chemise, mais qu'elle est trop grosse, n'essayez pas de la faire pousser avant de l'acheter. Il sera parti d'ici là. Achetez-le et faites de votre mieux pour le faire fructifier.
Orokusaki

Robert: Absolument. Mais s'il venait juste de partager jQuery avec quelques amis et au travail, nous ne le saurions peut-être jamais. Nous le connaissons comme un grand programmeur justement parce qu'il a eu le courage, non seulement de partager jQuery avec le monde entier, mais également de le promouvoir activement en tant que meilleur moyen d'utiliser Javascript. J'aimerais voir plus de programmeurs (y compris moi-même) apprendre à le faire efficacement.
Gaurav

1
-1 Bien que cela puisse être vrai aux yeux des gestionnaires en matière de promotion personnelle, je ne l'ai jamais vu fonctionner chez d'autres développeurs. Parmi les développeurs, il ne faut pas longtemps pour savoir qui est bon, qui est moyen et qui craint. L'auto-promotion ne fait même pas partie de l'équation.
Dunk

1
@Gauruv - Je pense que les programmeurs "rockstar" sont ceux qui sont capables de prendre des problèmes difficiles et de les rendre vraiment simples. Ainsi, je ne penserais pas qu'un morceau de code est génial si je le regardais et disais "Woah - qui a écrit ça"? Bien que je pensais autrement hors de l'école, l'expérience du monde réel m'a appris que l'intelligence dans le code n'est pas une vertu. Je suis plus impressionné par les gens que je n'ai pas à m'inquiéter de savoir si leurs documents fonctionnent ou non, car je sais déjà que cela fonctionne sans jamais avoir à les regarder. Ces personnes sont rares et sont les véritables programmeurs de rock stars.
Dunk


0

Très bon article connexe: The Free Electron (de randsinrepose.com)

Je m'excuse de ne pas résumer l'article ici, mais les points ne sont pas facilement séparés de la prose.


Ne dit pas beaucoup pourquoi. Mais oui, ce sont les gens dont je parle.
Robert Harvey

En citant l'article: "Free Electron peut tout faire en matière de code. Ils peuvent écrire une application complète à partir de zéro, apprendre une langue en un week-end et, plus important encore, ils peuvent plonger dans une énorme pile de code spaghetti, comprendre et faire en sorte que cela fonctionne. Vous pouvez créer toute une entreprise autour d’un Free Electron. C’est aussi bon. "
Robert Harvey

0

Ils programment purement sur l'intuition. Pas besoin de penser que ça coule juste .


Sans doute vrai pour les personnes ayant de l'expérience dans n'importe quel métier, pas seulement en programmation. Qu'est-ce qui différencie spécifiquement les programmeurs d' exception ?
Robert Harvey

Eh bien, je ne suis pas l'un d'entre eux, donc je ne peux certainement pas répondre à cette question avec une certitude à 100%, mais je ne pense pas que ce ne soit pas une question de connaissance, mais plutôt un processus de pensée (sub consciemment). Je pense que les personnes exceptionnelles ont la capacité d’éliminer toute ingérence dans leurs pensées et de voir quelque chose sous une forme très simple. Plus quelque chose est simple, plus il est facile à traiter.
John Shaft

3
-1 C'est tellement faux de toutes les manières possibles. Je voudrais pouvoir -100. Je dirais exactement le contraire. Ils réfléchissent et résolvent le problème avant qu’ils ne commencent.
Dunk

@Dunk - Je ne suis pas d'accord. Avec ce que vous avez écrit, je dirais ce qu’est un programmeur normal. Il n'y a rien d'exceptionnel à ce sujet. Je compare les programmeurs exceptionnels aux guitaristes exceptionnels. Ils ne pensent pas aux notes qu'ils jouent, ils le ressentent simplement.
John Shaft le

@ Pablo - Je suppose que nos expériences diffèrent. D'après mon expérience, les développeurs normaux ont une intuition et pensent à tort que cela coule à flots. Ainsi, ils créent beaucoup de déchets. Les développeurs exceptionnels prennent le temps de comprendre où ils vont. Le fait que quelqu'un puisse vous montrer à la volée comment concevoir votre composant ne signifie pas qu'il le fait par intuition. Je parie qu'ils l'ont déjà fait ou qu'ils ont une vue d'ensemble du système déjà conçu dans leur esprit, sinon dans la documentation. Ainsi, ce que vous appelez intuition, c'est vraiment suivre un plan réfléchi.
Dunk

0

Les codeurs exceptionnels ont une influence sur un projet dépassant le cadre de leur propre code et détectent les problèmes avant qu'ils ne surviennent en raison de leur expérience. Ils améliorent les compétences de tous les membres de l’équipe et préservent leurs projets d’une mauvaise conception et gestion.

Ils ont en fait créé quelque chose d'exceptionnel.


0

mais il me semble que cela va me prendre dix ans pour l'apprendre, puis mes connaissances seront obsolètes.

Ce sera. Vous avez déjà établi que ces gars-là sont 10 fois plus rapides, c'est pourquoi ils l'apprennent en 1 an et il vous en faut 10. Pour le sérieux, je pense que c'est qu'ils sont déjà très intelligents quoi que ce soit), ils aiment coder et, pour une raison quelconque, ont (ou trouvent) une abondance de temps libre pour s'exercer à coder ou pour travailler sur des projets personnels.

Si vous posez cette question ici, vous n'avez probablement pas ce qu'il faut (ne vous inquiétez pas, je réponds ici, alors je ne le ferai probablement pas non plus). Ne vous inquiétez pas, vous pouvez tout de même devenir fou si vous aimez coder.


0

Il y a beaucoup de messages bien intentionnés sur Humilité, Ingénierie, Passion, Patient, Dépannage. OMI ceux-ci sont tous nécessaires. Cependant, ils décrivent les 30% des meilleurs programmeurs.

Je pense que vous parlez des programmeurs vraiment exceptionnels, le top 1%.

Une des choses que j’envie du talent très rare occasionnel avec lequel je travaille est leur capacité à garder une très grande quantité de détails sur un système complexe à la fois, et à pouvoir le rappeler rapidement. Je pense que je peux le faire à l'occasion, peut-être une fois par mois, lorsque je suis vraiment dans la zone. Ce sentiment est merveilleux. Le développeur auquel je pense semble pouvoir être dans cette zone la plupart du temps .

C’est ce trait unique, IMO, en plus des capacités d’humilité, de curiosité, d’ingénierie, de passion, de patience et de dépannage qui les rendent vraiment exceptionnels.


0

Avoir la qualité de la motivation personnelle et de l'autodétermination ainsi que la volonté d'entrer dans un abîme de l'inconnu et d'être à l'aise avec la confusion absolue dans le cadre du processus est énorme. Ce n’est pas tant une bonne idée de départ que ce que l’on pourrait penser car le cerveau devient bien meilleur dans les choses qu’il fait et pense toujours. Je venais de rien au collège et je suis devenu très aisé juste par pure persistance, ne jamais abandonner, étant ce gars qui a gardé un problème quand tous les autres en ont eu marre d'essayer de le résoudre. Après ce type de persistance, les problèmes sont devenus de plus en plus faciles, passant du noob au collège à la honte pour la plupart d'entre eux. Le simple talent ne suffit pas et peut parfois conduire à se reposer sur ses lauriers.

Également, Robert Harvey, vous continuez à relier mes publications lorsque je mentionne tout ce qui concerne mon système de gestion de contenu que j'ai écrit à partir de rien. Vous voyez plusieurs autres listes listant des liens qu’ils peuvent avoir écrits ou non. Vous repoussez des personnes motivées, ce qui est ironique de voir que vous avez posté ceci. Vous êtes "l'homme" dans ce petit univers et vous ne lisez pas les choses à leur mérite, mais vous vous contentez de faire semblant et de supprimer à votre guise. Vous aimez aussi beaucoup trop Star Wars et vous passez probablement la main aux portes à ouverture automatique de l’épicerie, ce qui vous donne l’impression de croire que vous avez la force.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.