Je me retrouve constamment à courir dans cette expression "ne réinventez pas la roue" ou "ne réinventez jamais la roue" lorsque je pose des questions sur SO. Ils vous conseillent d'utiliser des frameworks ou des packages existants. Je sais d'où vient cette attitude puisqu'il n'est pas sage de perdre du temps sur quelque chose que d'autres ont déjà résolu. Ou c'est ça?
En tant qu'étudiant, je trouve qu'en utilisant un code que d'autres ont écrit pour résoudre mon problème, je ne peux pas en apprendre autant que je le voudrais et je gagne moins en perspicacité. Et parfois, je pense que cette phrase s’adresse principalement aux programmeurs qui travaillent dans des délais serrés et non à des étudiants comme moi.
Est-ce si mauvais de "réinventer la roue"? Peut-être que je pense que c'est faux? Peut-être pourrais-je éviter de réinventer la roue tout en apprenant beaucoup?
la source
Réponses:
Je pense que vous faites un bon point. La plupart des programmeurs sur ce site sont probablement des professionnels en activité dont l'objectif est de créer des logiciels de qualité le plus rapidement possible. Réinventer la roue fait échouer cet objectif à deux égards.
Cela dit, dans un environnement universitaire, l’objectif est d’ apprendre , et non de fournir des logiciels sur un budget. Réinventer une roue pour comprendre le fonctionnement des rayons ou des essieux est un excellent moyen d'atteindre cet objectif. C'est pourquoi de nombreux programmes de programmation incluent un cours sur la compilation de compilateurs alors que très peu de programmeurs en activité ont besoin de le faire.
la source
La réponse dépend beaucoup du contexte. Si vous souhaitez mieux comprendre les structures de données en essayant de mettre en œuvre une table de hachage, «réinventer la roue» est la meilleure chose à faire. Si vous apprenez à écrire des compilateurs et avez besoin d'une table de symboles, implémenter votre propre carte de hachage au lieu de la réutiliser à partir de la bibliothèque standard est une perte de temps totale.
la source
En tant qu'étudiant, je m'attendrais à ce que vous commenciez votre formation en programmation en copiant d'abord une roue ou deux pour commencer, puis en apprenant à modifier les roues pour voir comment elles fonctionnent et en comprendre les limites. Plus tard, vous pourrez même créer votre propre roue pour voir si vous pouvez améliorer la conception ou pour montrer à votre superviseur de cours votre compréhension des concepts en jeu.
En tant que professionnel, je m'attendrais toutefois à ce que vous sachiez quelle roue utiliser pour résoudre un problème donné et à quel moment il peut être approprié de modifier une roue existante si elle ne résout que partiellement votre problème. Si vous ne trouvez aucune roue , vous avez peut-être identifié une niche de marché, ou vous n’avez pas exploré suffisamment, et vous devez être suffisamment expérimenté pour savoir quand il serait approprié de créer une nouvelle roue de votre posséder.
La question de savoir quand il est approprié de réinventer une solution est complexe, et il faut du temps et de l'expérience pour savoir quand il serait peut-être préférable de créer une nouvelle version de quelque chose qui a déjà été fait auparavant. Lorsque vous développez depuis peu de temps, il est préférable d’utiliser simplement une solution existante et de demander à vos mentors de vous suggérer des options. Lorsque vous avez des délais serrés et beaucoup d'incertitude dans un projet, utiliser quelque chose d'existant peut vous faire gagner beaucoup de temps et reste votre premier choix. Vous pouvez toujours choisir d’utiliser d’autres solutions ultérieurement, s’il ya lieu, même si cela implique de réinventer votre roue .
la source
En tant qu'enseignant ou programmeur, je lutte constamment avec le côté opposé du problème: quand dois-je demander aux étudiants de réinventer la roue?
Prenons ces situations simples: nous étudions un algorithme de tri et je définis des tâches pour écrire un programme qui trie certaines données; ou travaillant sur la fonctionnalité de date, et je demande un calendrier.
Pour les deux, il existe d'innombrables bibliothèques prédéfinies et fonctionnalités disponibles; mais je veux que les étudiants les évitent et développent leur propre version d'un algorithme de tri ou d'un calendrier.
Maintenant, prenons cet autre exemple: j’ai chargé une tâche de rédiger une application simple pour, par exemple, planifier des rendez-vous. Cela nécessitera probablement un tri, un calendrier, etc. Cette fois-ci, "ne réinventez pas la roue" s'applique: je ne veux pas que les étudiants se débattent avec les problèmes résolus, mais plutôt assembler les fonctionnalités existantes pour obtenir un résultat.
Ma difficulté est de savoir combien de choses vous demander de recréer l'existant, ce qui vous incite à apprendre et présente l'avantage de poser des problèmes fréquents avec des difficultés que je peux utiliser pour vous faire pratiquer le métier, et combien je devrais placer vous dans un contexte réel, où les roues ne sont pas réinventées?
Pour répondre plus directement à votre question, deux suggestions:
la source
Pratique, je doute que les 1000 premières lignes de code écrites par quiconque soient uniques.
Développez votre jeu d'outils L' utilisation d'un framework présente plus d'avantages lorsque vous comprenez ce qu'il fait (vous pouvez le faire vous-même.) Afin que vous sachiez comment l'appliquer.
Comprendre les "roues" Utiliser une roue mal construite ou usée ou une roue qui ne va pas, n'est pas une excuse pour s'en tenir aveuglément à cette règle générale. Il se peut que vous manquiez de temps, de financement et d’expertise.
Il y a peu d'absolus .
la source
Les étudiants n'ont pas de budget pour terminer leurs travaux, mais il y a des dates d'échéance à prendre en compte.
En tant qu'étudiant qui était étudiant jusqu'à récemment, je pense que la quantité de réinventer une roue qui convient dépend de la classe pour laquelle vous effectuez le travail. Vous ne voulez pas écrire votre propre bibliothèque de sockets pour une classe de développement Web et de conception (si vous pouvez le faire et rendre le travail dans les délais, que faites-vous en prenant une classe aussi facilement?), Mais il vous manquerait beaucoup si c’était une tâche pour une classe de réseaux. Bien sûr, les professeurs tiennent généralement compte de ces éléments lorsqu'ils créent des travaux. Vous effectuerez donc principalement des travaux liés au cours mais, parfois, il est également important de savoir ce que vous ne devriez pas écrire vous-même.
Cela dit, une fois que vous quittez l’école, il est difficile de trouver le temps de construire des choses qui existent déjà. Saisissez toutes les occasions possibles lorsque vous le pouvez, pendant que vous êtes encore à l’école.
Si vous obtenez le pinceau "Utiliser la bibliothèque X / framework Y" sur SO, commencez votre question par "J'écris moi-même X pour en savoir plus".
la source
Si vous n'avez pas de date limite pour votre projet, IMO, il est préférable de réinventer la roue. Si vous n’avez pas d’emploi ou si vous souhaitez apprendre à programmer, et non à faire de la programmation payante, à quoi sert-il d’avoir recours à des raccourcis qui ne feront pas de vous un meilleur programmeur? Bien que cela soit vrai, il est certainement utile de savoir utiliser les bibliothèques, les frameworks et le code des autres utilisateurs.
la source
Dans la vraie vie, la roue est réinventée encore et encore. Si nous cherchons les raisons, nous pourrons peut-être mieux comprendre le moment où nous devons réinventer la roue de la programmation.
Depuis l'époque sumérienne, beaucoup de choses ont changé:
Comment cela se traduit-il dans le monde du logiciel? Bien,
la source
Je suis un étudiant nouvellement éduqué. À l'école, nous «apprenions» asp.net et C #, ces deux années d'études, nous n'avons jamais essayé de créer notre propre système de messagerie électronique, notre système de connexion ou notre système de gestion de contenu (CMS). .
Nous avons commencé 102 étudiants, 23 ont terminé. 4 personnes a un travail. La raison ?: Ces 4 personnes (y compris moi) savaient programmer avant de commencer réellement l'éducation.
Le reste du peuple est perdu. Parce que nous n'avons jamais «réinventé la roue». Nous n'avons jamais appris comment le code fonctionne réellement. C'est assez simple de construire un système de connexion complet, avec gestion des utilisateurs - Mais les étudiants de mon éducation ne savent pas comment le faire. Parce qu'ils ne savent pas comment fonctionne un système de connexion.
Je suis triste, à un moment donné, en fait perdu 2 ans, sans rien apprendre. - Je souhaite que les enseignants du monde entier disent: Ouais, nous savons qu'il existe des cadres, où le code existe, vous pouvez les utiliser dans la vie réelle .. Mais sur cette formation, vous apprendrez à programmer.
De nombreuses formations en programmation sont très courtes, elles doivent donc couvrir beaucoup de choses au cours de cette période. Je pense qu'il serait préférable que la liste de choses soit réduite de moitié et consacre plus de temps à la programmation. Les gens peuvent «inventer un nouveau type de roue» s'ils savent comment construire une «roue» normale. Les gens ne sont pas stupides s’ils ont un peu de connaissances, mais vous ne pouvez pas demander à un homme qui ne sait rien des voitures de construire une voiture. Mais demander à un homme qui sait comment construire un vélo aurait beaucoup plus facile. avec en fait la construction de la voiture.
la source
Cela dépend vraiment de ce que vous faites. Si vous essayez de comprendre les roues, c'est une bonne idée de les réinventer vous-même. Cependant, si vous essayez de comprendre les voitures, réinventer les roues ou les moteurs à combustion interne est généralement une perte de temps et une source de distraction.
Ainsi, par exemple, lorsque vous souhaitez comprendre le fonctionnement d'un index de recherche en texte intégral, essayez de créer le vôtre. Si vous essayez de créer une application pour la gestion de documents, il est préférable de réutiliser une bibliothèque existante, car l'essentiel de votre travail consiste à obtenir l'architecture et l'application utilisateur en même temps.
la source
Oui, il convient de demander aux étudiants de ne pas réinventer la roue. Mais il faut bien comprendre ce que cela signifie pour un étudiant: écrivez ce qui est pertinent à la tâche. Cela ne signifie pas que si l'affectation consiste à écrire un bubbleort, vous la copiez sur Wikipedia, pas plus que l'utilisation de array.sort ou d'équivalents si votre structure ou votre langage le fournit. Mais une fois que vous avez couvert les différents algorithmes de tri, écrit votre propre tri de bulles et votre tri rapide, ne vous embêtez pas pour le réécrire à chaque nouvelle affectation, utilisez le tri intégré ou ce que vous avez écrit, ne refait plus le même processus. .
Réinventer la roue consiste à ne pas perdre de temps, ce qui est valable aussi bien pour les étudiants que pour les professionnels - la différence réside dans les objectifs qui y sont énoncés. Les étudiants devraient apprendre, donc quelque chose qui ne leur permet pas de mieux comprendre, est une perte de temps - après avoir écrit une bulle, vous savez ce que ça fait, vous savez pourquoi vous ne voulez pas l'utiliser sur un grand ensemble. et le réécrire encore et encore est une perte de temps. Vous n'allez rien apprendre de nouveau lors de la 25e réécriture.
Pour les étudiants, cela ne signifie pas que vous n'écrivez pas ce que les autres ont écrit, cela signifie que vous ne devez pas refaire ce que vous avez déjà maîtrisé - ce temps qui pourrait être mieux dépensé pour ce que vous n'avez pas maîtrisé.
la source
Beaucoup de réflexions et d’efforts ont été consacrés à la création d’une roue. Le conseil est de "ne pas réinventer la roue", mais vous pouvez aller de l’avant, procéder à une ingénierie inverse et comprendre pourquoi certaines choses sont faites de la façon dont elles sont faites. Après cela, vous pouvez essayer d’implémenter la roue à votre guise, ce qui pourrait aboutir à l’une ou l’autre des trois fins logiques.
Pour moi, étudiant, il ne faut pas réinventer la roue, mais essayer de l’ingénierie inverse et en comprendre les implications.
la source
Je dirais que cela dépend de si vous réinventez pour voir comment la roue fonctionne ou si vous réinventez la roue en train d'accomplir une autre tâche. Il existe certainement des rouages que chaque élève doit mettre en place au moins une fois par eux-mêmes. Vous devez savoir comment certaines structures de données élémentaires et certains algorithmes fonctionnent afin de comprendre leur incidence sur les performances de votre code ou de choisir ceux à utiliser dans diverses circonstances.
Les piles, les tas, les listes chaînées, les arbres, etc. valent certainement l'investissement dans le temps à mettre en œuvre une fois; puis toujours après ceux fournis par le framework. Toute personne utilisant un plugin jQuery doit en écrire au moins un, mais vous n'êtes pas obligé d'écrire tous les types de ceux que vous utiliserez. Je dirais qu'il est utile, mais pas nécessaire, d'écrire un petit planificateur de processus ou un mini-système d'exploitation afin que vous puissiez comprendre ce qui se passe sous le capot d'un ordinateur. Vous devez cependant comprendre comment fonctionnent les processus, les threads, etc.
Une fois que vous avez une bonne connaissance pratique, il peut également être important (et amusant) de revenir en arrière et de mettre en œuvre de nouvelles structures / algorithmes pour mieux les comprendre. À moins que ce ne soit votre travail ou que vous en soyez vraiment doué, je continuerais à utiliser ceux qui existent déjà dans votre code.
la source
La réponse dépend de si vous souhaitez apprendre ou créer.
Si l’apprentissage est l’objectif visé, "réinventer la roue" peut vous donner une meilleure idée et une meilleure compréhension que d’utiliser les roues existantes (fonctions de la bibliothèque).
Mais si l'objectif est de créer un produit complexe, alors "réinventer la roue" peut être une pratique qui prend beaucoup de temps et aidera peu à la création du produit.
Néanmoins, si l'objectif de l'âme est d'apprendre à disposer de suffisamment de temps et d'endurance, il est préférable de "réinventer la roue", car elle permet de personnaliser chaque fonctionnalité.
la source
Eh bien, il y a deux aspects à cela.
Tout d'abord, si vous essayez d'apprendre, il peut être utile de faire certaines choses à partir de zéro ou d'utiliser des interfaces de niveau inférieur à celui nécessaire. Cependant, il est toujours nécessaire d'identifier ce que vous apprenez: si vous voulez en savoir plus sur le protocole HTTP, vous n'avez pas besoin de programmer vous-même les sockets. Ne réinventez que les choses que vous apprenez et ne le faites que pour vraiment les explorer et les comprendre.
Mais l' une des compétences les plus importantes d'un programmeur professionnel consiste à sélectionner, à connaître et à utiliser des logiciels préexistants. C'est quelque chose que vous devez également apprendre. Une grande partie des questions sur les OS semblent provenir de personnes incapables de lire la documentation.
Enfin, la programmation repose sur une base théorique substantielle. Vous devrez utiliser les deux exercices pratiques, associés à la lecture, pour apprendre la théorie.
la source
J'ai fait face à la même situation. C'est à cause de la différence de perception dans l'industrie et les universitaires.
Si vous ne "réinventez pas la roue", vous ne pouvez absolument pas étudier quoi que ce soit à l'école ou comprendre comment quelque chose fonctionne.
Dans une industrie, l’objectif est de produire un produit en un minimum de temps et d’effort.
Personnellement, j'aime bien aller dans les terriers de lapin et je déteste la philosophie de l'industrie, mais c'est comme ça que les entreprises se font et on ne peut pas se plaindre.
la source
Le jargon des hackers Lexikon a un très bon commentaire sur la réinvention de la roue :
Il serait donc bon de réinventer la roue, mais assurez-vous de rechercher les solutions des autres avant ou après l'avoir fait.
la source
Réponse A: Réinventer la roue. Cela approfondit votre compréhension des structures de données et des algorithmes et rend beaucoup plus probable que vous écrivez de bonnes choses. Je suis sûr que lorsque Guido van Rossum commençait à utiliser Python, les gens lui avaient dit de ne pas réinventer la roue. Il y avait déjà beaucoup de langues. Pourquoi écrire sur Google alors qu'il y avait déjà Yahoo! Que diriez-vous de Clang? Apprenez tout. Sois un géant. Ne laissez pas les petites personnes vous limiter. Réponse B: Si un instructeur vous dit quoi faire, donnez-lui ce qu'il veut, ou juste un peu plus, même si cela semble idiot. Si vous voulez AUSSI devenir fou en proposant une solution étonnante et en lui donnant un lien, continuez. Tout d’abord, cependant, remplissez les conditions énoncées comme données afin qu’il soit heureux.
la source
Si vous êtes étudiant et que, par conséquent, votre projet n’a pas de date limite, il est préférable de "réinventer la roue". Si vous programmez simplement pour apprendre à programmer, sans gagner de l'argent, pourquoi prendre des raccourcis qui ne vous aideront pas à apprendre? Pourquoi ne pas le faire à la dure? Mais, lorsque vous deviendrez un programmeur actif, les gens seront sceptiques si vous ne savez pas comment utiliser les frameworks ou les bibliothèques ...
la source
Faites ce que la tâche / la question / l’examen vous demande de faire.
Il y a des années, j'étais assistant de classe en programmation C. Une question d’examen était «Écrivez un programme pour copier un fichier». Plusieurs étudiants ont posé le même type de question: peuvent-ils générer un processus et exécuter la commande OS cp?
Ce que nous leur avons demandé, c'était: "Votre programme copiera-t-il le fichier?"
La question de l'examen leur a demandé d'écrire du code pour copier un fichier. Si la réponse ne contenait pas de code C copiant le fichier (par exemple, une entrée ouverte, une sortie ouverte, une boucle pour lire / écrire des octets, une entrée fermée, une sortie fermée), le fichier n'était pas copié.
Si l'enseignant dit d'utiliser un framework ou une bibliothèque (par exemple, une classe graphique pourrait vous dire d'utiliser une bibliothèque 3D), utilisez ce qu'ils vous disent d'utiliser. Ne pas inventer le vôtre ni en utiliser un autre. Quoi que ce soit de différent, l'enseignant aura plus de difficulté à noter votre travail.
Lors d'un entretien d'embauche, une connaissance des cadres courants vous aidera à répondre aux questions. Créez vos propres projets pour apprendre. Bonne chance dans tes études.
la source
cp
leur programme, le fichier serait en fait copié.