Est-il considéré comme paresseux si j'utilise un package d'algèbre linéaire pour C ++?

11

Tout d'abord, permettez-moi de donner quelques informations avant de formuler la question. J'étudie la physique et tous mes cours de programmation ont été dans des langages de programmation faciles comme MATLAB. Par simple, je veux dire que la langue fait beaucoup de réflexion pour vous ... Pour les prochaines années, je vais suivre des cours d'informatique et je pense poursuivre une carrière en programmation.

Étant donné que de nombreux cours universitaires sont en C ++, l'utilisation d'un package d'algèbre linéaire (Armadillo) avec une syntaxe similaire à MATLAB sera-t-elle considérée comme paresseuse?

Je suis en train de coder un algorithme génétique en ce moment, et bien qu'il soit allé rapidement dans MATLAB, cela prend beaucoup de temps en C ++ sans l'aide de ces packages.

Comment ça marche dans la vraie vie? Quels packages êtes-vous autorisé à utiliser?

Par exemple, je ne voudrais pas développer mes connaissances C ++ avec armadillo et ne pas avoir une connaissance approfondie d'autres packages plus largement utilisés comme "vector.h" "algorithme" "liste" etc.

DLV
la source
9
Vous êtes autorisé à utiliser tout ce qui a une licence compatible avec votre projet. Sinon, vous perdez juste votre temps. (Le bon type de) la paresse est bonne
Richard Tingle
En supposant que votre programme les inclut, je doute que l'utilisation d'un package d'algèbre linéaire en soi vous empêche d'apprendre <vector>, <algorithm> et <list>.
Brandin
@RichardTingle: on est autorisé à utiliser n'importe quoi tant que les supérieurs ne l'interdisent pas ;-)
Doc Brown
Changez lazyen sensibledans votre titre, et la réponse est "oui" (en supposant que vous effectuez une tâche qui implique l'algèbre linéaire, bien sûr).
Jerry Coffin

Réponses:

21

Le commentaire de Richard est déjà la plupart de la réponse. Chaque fois que vous programmez autre chose qu'un exercice en classe, vous voudrez réutiliser autant de code existant que possible, avec juste quelques autres considérations à équilibrer.

Les avantages de la réutilisation du code sont:

  • Vous travaillez plus vite, car certains travaux ont déjà été effectués.
  • Le code existant a de bonnes chances d'être meilleur que tout ce que vous écririez à partir de zéro, car il existe probablement depuis plus longtemps, a été mieux testé et mieux optimisé.
  • Souvent, le code existant se trouve dans un domaine que vous ne connaissez pas très bien. Par exemple, vous faites des simulations physiques, mais cela ne signifie pas que vous savez très bien comment rendre l'algèbre linéaire efficace à calculer. L'utilisation de code écrit par d'autres signifie que vous pouvez vous appuyer sur leur expertise.

Il y a juste quelques éléments à considérer:

  • Licence. L'auteur du code que vous souhaitez réutiliser en détient le droit d'auteur et vous ne pouvez pas utiliser le code sans sa permission. Les bibliothèques seront livrées avec une licence qui vous indique ce que vous pouvez en faire, et si vous souhaitez utiliser la bibliothèque, vous devez vous conformer à la licence. Armadillo est sous la licence publique Mozilla 2.0, ce qui signifie que vous pouvez l'utiliser librement.
  • L'intégration. Si votre projet est plus grand, il peut être assez complexe d'intégrer des bibliothèques tierces. Selon la quantité d'utilisation que vous retirez de la bibliothèque, cela peut ne pas en valoir la peine.
  • Distribution. Si une bibliothèque n'est disponible que sous forme de DLL ou nécessite une inscription auprès du système, mais que votre méthode de distribution doit consister à "copier cet exécutable quelque part", vous ne pourrez peut-être pas utiliser la bibliothèque.

Comme dit le proverbe, chez un programmeur, la paresse est une vertu.

Sebastian Redl
la source
1
Vous y touchez, mais comme la question mentionne le travail en classe, il est important de ne pas utiliser de package ou de bibliothèque pour la pièce que vous essayez d'apprendre. Si vous essayez d'apprendre à construire un réseau neuronal, n'hésitez pas à utiliser une bibliothèque pour l'analyse des arguments, fichier io, mais écrivez vous-même le réseau neuronal.
Alan Shutko
3
Un point important manquant sur votre liste est la maintenance future. Lorsque vous envisagez d'utiliser une bibliothèque tierce, et qu'elle est soit open source, soit open source mais trop complexe pour permettre une maintenance future par la propre organisation, il faut s'assurer que le vendeur de la bibliothèque fournira les futurs services de maintenance (y compris l'évolution de la lib ) pendant un certain temps. C'est l'une des principales raisons pour lesquelles certaines sociétés de logiciels n'utilisent pas certaines bibliothèques et préfèrent créer les leurs, même si cela semble gaspillage à première vue.
Doc Brown
1

Qu'entendez-vous par «autorisé»? Je suppose que je pourrais ajouter quelque chose ici qui pourrait aider à clarifier une idée fausse de certains étudiants débutants: on vous demande d'écrire votre propre code et algorithmes, etc., etc. à l'université, parce que vous apprenez un cours et que vous voulez consolider ce vous avez appris en classe en écrivant vous-même le code. Un tel codage est une aide à votre processus d'apprentissage . Par exemple, après avoir appris une structure / un algorithme de données particulier, vous écrivez votre propre code pour voir comment cela fonctionne et approfondir votre compréhension. C'est logique.

Lorsque vous faites un projet de programmation réel, vous n'écrivez pas de code pour aider à l'apprentissage de certains concepts / connaissances; vous essayez de produire un produit d'ingénierie. L'ingénierie n'est pas vraiment une invention, mais s'appuie sur les fondations déjà posées par d'autres pour répondre à un besoin pratique particulier. Il y a un dicton selon lequel la programmation consiste à 80% à lire / réutiliser les bibliothèques / codes des autres et à 20% à écrire les vôtres. Cela peut être un peu exagéré, mais vous obtenez l'esprit.

Dans votre cas, si vous faites un projet de programmation pour un cours et qu'il vous demande explicitement de coder votre propre algorithme, vous ne voudriez pas utiliser des bibliothèques externes. Si vous faites votre propre projet d'ingénierie, utilisez autant de bibliothèques que possible avant d'essayer de créer le vôtre.

Obtenez cette distinction claire et vous comprendrez ce que vous faites.

xji
la source