¿Se considera vago si uso un paquete de álgebra lineal para C ++?

11

Primero, permítanme dar algunos antecedentes antes de formular la pregunta. Estudio física y todas mis clases de programación han sido en lenguajes de programación fáciles como MATLAB. Por fácil quiero decir que el lenguaje piensa mucho en ti ... Durante los próximos años, tomaré cursos de informática y estoy pensando en seguir una carrera en programación.

Teniendo en cuenta que muchos cursos universitarios están en C ++, ¿se considerará vago el uso de un paquete de álgebra lineal (Armadillo) con una sintaxis similar a MATLAB?

Estoy codificando un algoritmo genético en este momento, y aunque fue rápido en MATLAB, está tomando mucho tiempo en C ++ sin la ayuda de estos paquetes.

¿Cómo funciona en la vida real? ¿Qué paquetes puedes usar?

Por ejemplo, no me gustaría construir mi conocimiento de C ++ con armadillo y no tener un conocimiento profundo de otros paquetes más utilizados como "vector.h", "algoritmo", "lista", etc.

DLV
fuente
99
Se le permite usar cualquier cosa que tenga una licencia compatible con su proyecto. De lo contrario, solo estás perdiendo el tiempo. (El tipo correcto de) la pereza es buena
Richard Tingle
Suponiendo que su plan de estudios los incluya, dudo que el uso de un paquete de álgebra lineal en sí mismo le impida aprender <vector>, <algorithm> y <list>.
Brandin
@ RichardTingle: uno puede usar cualquier cosa siempre que los superiores no lo prohíban ;-)
Doc Brown
Cambie lazya sensiblesu título y la respuesta es "sí" (suponiendo que esté haciendo una tarea que implique álgebra lineal, por supuesto).
Jerry Coffin

Respuestas:

21

El comentario de Richard es la mayor parte de la respuesta ya. Siempre que esté programando para cualquier cosa que no sea un ejercicio de clase, querrá reutilizar la mayor cantidad de código existente posible, con solo algunas otras consideraciones para equilibrar.

Las ventajas de la reutilización de código son:

  • Trabajas más rápido, porque ya se ha hecho algo de trabajo.
  • El código existente tiene una buena posibilidad de ser mejor que cualquier cosa que escribiría desde cero, porque probablemente haya existido por más tiempo, se haya probado y optimizado mejor.
  • Con frecuencia, el código existente está en un dominio con el que no está tan familiarizado. Por ejemplo, está haciendo simulaciones físicas, pero eso no significa que sepa mucho sobre cómo hacer que el álgebra lineal sea eficiente para calcular. El uso de código escrito por otros significa que puede apoyarse en su experiencia.

Solo hay algunas cosas a considerar:

  • Licencia. El autor del código que desea reutilizar posee los derechos de autor y no puede usar el código sin su permiso. Las bibliotecas vendrán con una licencia que le indica qué puede hacer con ellas, y si desea usar la biblioteca, debe cumplir con la licencia. Armadillo está bajo la Mozilla Public License 2.0, lo que significa que puede usarlo libremente.
  • Integración. Si su proyecto es más grande, puede ser bastante complejo integrar bibliotecas de terceros. Dependiendo de la cantidad de uso que obtenga de la biblioteca, puede que no valga la pena.
  • Distribución. Si una biblioteca solo está disponible como DLL o necesita algún registro en el sistema, pero su método de distribución debe consistir en "copiar este ejecutable en algún lugar", es posible que no pueda usar la biblioteca.

Como dice el dicho, en un programador, la pereza es una virtud.

Sebastian Redl
fuente
1
Lo toca, pero como la pregunta menciona el trabajo de clase, es importante no usar un paquete o biblioteca para la pieza que está tratando de aprender. Si está tratando de aprender cómo construir una red neuronal, puede usar una biblioteca para analizar argumentos, archivar io, pero escriba usted mismo la red neuronal.
Alan Shutko
3
Un punto importante que falta en su lista es el mantenimiento futuro. Cuando se considera utilizar una biblioteca de terceros, y es de código cerrado o de código abierto, pero demasiado compleja para permitir el mantenimiento futuro por parte de la propia organización, es necesario asegurarse de que el proveedor de la biblioteca proporcionará servicios de mantenimiento futuros (incluida la evolución de la biblioteca). ) por cierto período de tiempo. Esa es una de las principales razones por las que ciertas compañías de software no usan ciertas bibliotecas y prefieren crear las suyas propias, incluso si eso parece un desperdicio a primera vista.
Doc Brown
1

¿Qué quieres decir con "permitido"? Supongo que podría agregar algo aquí que podría ayudar a aclarar una idea errónea de algunos estudiantes principiantes: se le pide que escriba su propio código y algoritmos, etc., en la universidad, porque está aprendiendo un curso y desea consolidar lo que has aprendido en las clases escribiendo el código tú mismo. Tal codificación es una ayuda para su proceso de aprendizaje . Por ejemplo, después de aprender una estructura / algoritmo de datos en particular, usted escribe su propio código para ver cómo funciona y profundizar su comprensión. Esto tiene sentido.

Cuando estás haciendo un proyecto de programación de la vida real, no estás escribiendo código como ayuda para aprender algunos conceptos / conocimientos; Estás intentando producir un producto de ingeniería. La ingeniería no se trata realmente de invención, sino de construir sobre los cimientos establecidos por otros para abordar una necesidad práctica particular. Hay un dicho que dice que la programación es 80% de lectura / reutilización de las bibliotecas / códigos de otros y 20% de escritura propia. Puede ser un poco exagerado pero obtienes el espíritu.

En su caso, si está haciendo un proyecto de programación para un curso y le pide explícitamente que codifique su propio algoritmo, no querrá usar bibliotecas externas. Si está haciendo su propio proyecto de ingeniería, use tantas bibliotecas como sea posible antes de intentar crear la suya propia.

Aclare esta distinción y comprenderá lo que está haciendo.

xji
fuente