En tant que programmeur débutant, devrais-je privilégier la création de mes propres bibliothèques plutôt que l'utilisation de bibliothèques tierces?

12

En tant que programmeur débutant en Python, est-ce une bonne idée de créer et de comprendre mes propres bibliothèques avant de passer à des bibliothèques tierces avancées contenant les fonctionnalités dont j'ai besoin?

Certains projets (par exemple les frameworks web comme Django) sont probablement trop gros pour cette approche. Mais d'autres projets (par exemple Web Crawlers, bibliothèques de graphes, analyseur HTML) semblent être réalisables.

Je crains que le recours précoce à des bibliothèques tierces ne freine ma croissance.

Remarque: cette question et cette question semblent se concentrer davantage sur des programmeurs expérimentés, qui sont probablement plus axés sur l'efficacité de la réutilisation que sur l'avantage de l'apprentissage. Je pense que ma question concerne les débutants.

MikeRand
la source
5
"rien de plus qu'un intégrateur de bibliothèque plutôt qu'un programmeur": les clients veulent que vous soyez productif. Être capable d'évaluer et d'intégrer des bibliothèques existantes est une compétence importante dont vous avez besoin pour être productif. S'il n'y a pas de bibliothèque disponible qui répond à vos besoins ... sinon concentrez-vous sur la résolution du problème commercial que votre application résout
Hamish Smith
2
Quelle distinction faites-vous entre «intégrateur de bibliothèque» et «programmeur». En 30 ans - même en créant des contrôleurs de périphériques intégrés au niveau de la puce - je n'ai jamais travaillé sans bibliothèques. Pouvez-vous expliquer cette distinction?
S.Lott
Mal formulé. Ont édité.
MikeRand
Je préfère embaucher un intégrateur de bibliothèque. Pourquoi se concentrer sur le comment alors que vous pouvez vous concentrer sur les fonctionnalités? Après avoir vu quelques dizaines de vélos mal réinventés, je grimace à l'idée d'en voir un autre. La conception d'une bibliothèque est un travail difficile et un exercice d'équilibre. Un magasin de logiciels typique ne se spécialise pas dans la conception de bibliothèques n'a pas les bonnes compétences, les ressources et la patience pour bien faire les choses. Méfiez-vous des réécritures. Il vaut mieux utiliser du code qui a été testé par d'autres que de recommencer à zéro. Ce n'est que lorsqu'il y a un vide qu'il faut inventer l'OMI.
Job

Réponses:

12

C'est toujours un compromis.

En tant que programmeur débutant, vous devriez vous poser deux questions lorsque vous envisagez de réutiliser du code par rapport à réinventer la roue carrée:

  1. Vais-je en savoir plus sur le problème que je veux résoudre en écrivant tout à partir de zéro ou en me concentrant sur le domaine du problème et en mettant de côté la complexité non critique du problème qui m'intéresse?
  2. Est-il plus important pour moi de résoudre le problème actuel ou est-il plus important que je comprenne certains concepts fondamentaux?

Si vous n'avez pas besoin de terminer votre projet, c'est bien de faire tourner vos roues sur des problèmes complexes que d'autres personnes ont déjà résolus, car vous apprendrez quelque chose. Mais vous passerez probablement à autre chose avant de «terminer», ce qui peut ou non vous importe. D'autres projets commenceront à briller rapidement lorsque vous vous lancerez dans un domaine complexe qui semble simple jusqu'à ce que vous commenciez à essayer de le résoudre vous-même.

Ne soyez pas obsédé par l'abandon du contrôle parce que vous vous remettez à la façon de penser de quelqu'un d'autre; concentrez-vous davantage sur ce que vous essayez d'accomplir.

Si votre objectif est d'écrire un analyseur HTML parce que vous voulez comprendre comment fonctionnent les analyseurs, allez-y. Si votre objectif est d'écrire un analyseur HTML parce que vous souhaitez purifier les entrées utilisateur ou transformer des bits HTML aléatoires, vous êtes probablement concentré sur la mauvaise chose, car vous êtes probablement plus intéressé par l'application de l'analyse que par l'analyse elle-même. . Si vous avez envie d'écrire un analyseur HTML parce que vous ne voulez pas prendre le temps de comprendre la bibliothèque de quelqu'un d'autre, vous perdez probablement votre temps, car, au moins dans ce cas, je garantis que quelqu'un d'autre a passé plus de temps à comprendre comment pour résoudre ce problème efficacement que vous n'aurez. Dans des cas vraiment triviaux, vous pouvez gagner du temps en ne réutilisant pas de code, mais dans des cas complexes, à moins que la bibliothèque que vous utilisez ne suce ou que votre capacité à lire la documentation et les exemples de code ne suce,

D'un autre côté, je dirais que cela vaut la peine d'écrire votre propre bibliothèque de graphes, car vous serez plus concentré sur les algorithmes fondamentaux transférables et les structures de données que vous pourrez appliquer à d'autres domaines, même si vous finissez par utiliser la bibliothèque de quelqu'un d'autre lorsque vous travaillez sur ces problèmes.

JasonTrue
la source
Cadre fantastique pour réfléchir au problème. Très appréciée.
MikeRand
8

La plupart des programmeurs débutants sous-estiment largement la complexité d'un problème. Cela conduit à de nombreuses situations désagréables, mais je vais me concentrer sur une seule: elles rejettent beaucoup de bibliothèques tierces pour être "gonflées" ou "trop ​​compliquées". Ensuite, ils essaient d'écrire leur propre code pour faire le même travail, et en font un gâchis complet, car ils ne prévoyaient pas toutes les choses qu'ils auraient à gérer.

Prenez l'exploration Web et l'analyse HTML. Vous semblez avoir une attitude plutôt désinvolte vis-à-vis de ces tâches - ce qui m'amène à croire que vous n'avez jamais essayé de les faire à une échelle très réduite. Voici une courte liste non exhaustive des problèmes potentiels qu'un véritable robot d'indexation doit gérer:

  • HTML mal formé.
  • Encodages à plusieurs caractères (le monde entier ne fonctionne pas en ASCII).
  • Liens générés ou modifiés par JavaScript.
  • Liens vers des fichiers binaires de plusieurs gigaoctets.
  • Types de mime incorrects.
  • Plantage au milieu d'une session d'exploration.
  • Puits de goudron.
  • Consultants SEO.
  • Microsoft.
Mike Baranczak
la source
6

Je crains que le recours précoce aux bibliothèques tierces ne freine ma croissance et ne fasse de moi un intégrateur de bibliothèque plutôt qu'un programmeur.

C'est faux.

Le recours précoce aux bibliothèques tierces vous apprendra comment fonctionnent les bonnes bibliothèques.

Un développement prématuré est toujours une perte de temps. Écrire vos propres bibliothèques sans étudier attentivement (c'est-à-dire utiliser) les bibliothèques existantes vous condamne à réinventer la roue - mal - pour le reste de votre carrière.

J'ai passé de nombreuses heures facturables à nettoyer ces dégâts.

S.Lott
la source
Je ne suis pas sûr d'être entièrement d' accord avec cela .. Parfois, les bibliothèques tierces sont mal écrites et peuvent réellement enseigner de mauvaises habitudes. Si les algorithmes sous-jacents sont bien compris, alors réinventer la roue peut être une bonne idée, puis les comparer à d'autres bibliothèques pour voir dans quelle mesure la vôtre se compare bien aux autres. Dans les deux cas, une forme de mentorat est évidemment extrêmement bénéfique :)
Demian Brecht
Cela dit, il est avantageux d'étudier l'API existante :)
Demian Brecht
2
@Demian Brecht: "Parfois, les bibliothèques tierces sont mal écrites et peuvent réellement enseigner de mauvaises habitudes" Bien que cela puisse être vrai, la plupart des projets open source sont fortement vérifiés par une communauté d'utilisateurs et les mauvaises idées ne résistent pas à la sagesse de la foule. De plus, «mal écrit» est un jugement qu'aucun n00b ne peut faire efficacement.
S.Lott
@ S. Lott: Eh bien dit: (re n00b) :) Et je suppose que vous auriez juste faire attention à qui les bibliothèques 3ème partie que vous regardez, comme certains l' ont très petites communautés ( le cas échéant). Par exemple, fouiller des projets aléatoires sur github peut commencer à vous conduire sur le mauvais chemin.
Demian Brecht
2
@Demian Brecht: Vous ne pouvez développer aucun jugement avant d'avoir vu une variété de bibliothèques. Il n'y a aucun moyen possible de "pré-filtrer" les bibliothèques pour un n00b à utiliser. C'est toutes les bibliothèques ou pas de bibliothèques.
S.Lott
4

Cette phrase, qui est la première, est très logiquement problématique pour moi:

En tant que programmeur débutant en Python, est-ce une bonne idée de créer et de comprendre mes propres bibliothèques avant de passer à des bibliothèques tierces avancées contenant les fonctionnalités dont j'ai besoin?

Comment pouvez-vous croire que vous pouvez écrire efficacement des bibliothèques de fonctionnalités avancées (votre mot) en tant que débutant qui seront aussi correctes, complètes et testées que les bibliothèques existantes?

Cela ne mentionne même pas l'énorme quantité de temps que vous perdriez à réinventer une roue que vous ne comprenez pas en tant que débutant, abandonnera finalement lorsque, si vous êtes chanceux, vous réalisez que vous êtes au-dessus de votre tête et devez apprendre la quitter la bibliothèque quand même.

Prenez par exemple l'analyse HTML, vous mentionnez cela comme possible, il n'y a aucun moyen de faire un meilleur travail que Beautiful Soup en tant que débutant. Clair et simple, vous échouerez. Les choses que vous pensez réalisables ont d'énormes problèmes de complexité que vous ne prenez pas en compte, vous ne connaissez pas le domaine du problème avec suffisamment de détails pour comprendre la complexité, vous êtes voué à l'échec juste à partir de cela.

Mon opinion est d'apprendre ce que d'autres personnes ont fait et ont déjà résolu votre problème jusqu'à ce que vous ne trouviez pas quelque chose qui résout votre problème.


la source
1

Ce n'est que mon opinion, mais je suggérerais de créer vos propres bibliothèques pour un code assez simple et réutilisable. Pour quelque chose de plus complexe, vous pouvez utiliser des bibliothèques tierces, qui ont été construites et testées à fond (espérons-le!). La création d'une bibliothèque robuste peut prendre beaucoup de temps, selon ce qu'elle est. Je suis sûr que vous obtiendrez de nombreuses pratiques de programmation simplement en créant votre application!

Jon Onstott
la source