Estoy comenzando mis estudios de posgrado en ingeniería y trabajaré en proyectos de ciencias computacionales. Noté que ha habido una discusión sobre las ventajas y desventajas de implementar sus propios algoritmos aquí . ¿El análisis de costo-beneficio de implementar sus propios algoritmos versus el uso de bibliotecas es diferente cuando es un estudiante principiante?
10
Respuestas:
En mi opinión, ser un estudiante principiante no cambia la respuesta de David Ketcheson aquí a la pregunta que ha vinculado en su publicación.
Codifique versiones mínimas de algoritmos que desea aprender. Luego déjalos a un lado. La codificación de sus propios algoritmos es más útil para el aprendizaje, pero para el código de investigación (o producción), a menos que sus objetivos de investigación sean escribir software que mejore las bibliotecas de vanguardia (si es que existen), usted ' es mejor usar bibliotecas. Es probable que las bibliotecas estén mejor documentadas, sean más escalables y más robustas que lo que usted mismo codifica, a menos que sea (o se vuelva) realmente bueno en la codificación. Además, es probable que las bibliotecas se prueben y depuren para usted (aunque, por supuesto, eso depende de quién escribió la biblioteca ...). Usted será responsable de respaldar, depurar y probar cualquier código que escriba para su tesis, y para ahorrar tiempo, ayuda a minimizar la cantidad de código que necesita escribir.
Los únicos otros escenarios en los que puedo pensar (es decir, puede haber otros) son:
fuente
Me gustaría dar un poco más de amplitud a la atenta respuesta de Geoff . En particular, quiero darle un poco más de perspectiva sobre el valor de sus esfuerzos de programación en comparación con sus esfuerzos de investigación en su carrera inicial como académico.
Descubrirá que poder escribir software para aumentar su investigación científica lo convertirá en un miembro valioso de casi cualquier equipo de investigación. Sin embargo, esta vez no será necesariamente considerado "valioso" por sus pares académicos o aquellos que contratan para puestos académicos.
De una encuesta de investigación de 2011 realizada en Princeton, "A Survey of the Practice of Computational Science" :
Eso no significa que no sea una buena idea implementar o rediseñar una biblioteca o aplicaciones principales, pero si va a participar en un desarrollo de software serio (más del 25% de su tiempo trabajando con código), conserve estos tres pensamientos en mente.
La complejidad y el riesgo crecen exponencialmente con el tamaño del proyecto y la cantidad de desarrolladores. Hasta que haya escrito o trabajado con piezas de software más grandes o equipos de desarrolladores que se extiendan más allá de su laboratorio, será difícil para usted obtener una buena apreciación de esto y pronosticar adecuadamente el esfuerzo.
Necesitas ser bueno. Se necesita una cierta madurez, tanto como programador y como científico de aplicaciones, para escribir software útil. Debe saber cuáles son las características importantes, dónde están los riesgos numéricos y poder pronosticar el esfuerzo de programación para un conjunto dado de características y robustez. Por supuesto, la única forma de recuperarse es pasar tiempo en proyectos en los que usted no es el líder o que pueden fallar o retrasarse de manera segura, lo que me lleva a mi punto final.
Aunque muchos laboratorios de investigación y puestos industriales valoran mucho la experiencia en programación, la programación científica puede actuar como un posible perjuicio para su carrera académica, incluso si su software beneficia a la ciencia más que sus documentos. Todo el tiempo que pasa aprendiendo a programar bien, programar, documentar su código y hacerlo robusto se traduce en documentos que no se escriben. Un asesor no siempre tendrá en cuenta los mejores intereses de su estudiante aquí, ya que este es uno de esos casos en los que el estudiante puede proporcionar trabajo que beneficie al grupo del asesor sin beneficiar el recuento de citas del estudiante. Busque uno o más mentores de confianza en el campo que le interesa y asegúrese de tener una comprensión clara de las contribuciones que se consideran valiosas. academia.stackexchange.com es un excelente lugar para hacer una pregunta de seguimiento sobre esto.
Como nota a pie de página: el número de proyectos de esfuerzo de una sola persona que avanzan significativamente en cualquier campo computacional está disminuyendo constantemente, ya sea un área de aplicación o algo más técnico, como el álgebra lineal densa. Un número cada vez mayor de paquetes de software que forman el "pan de cada día" de la investigación computacional son 10 años mayores o más. El código científico que no ha alcanzado este nivel de madurez tiende a tener más errores, menos funciones y documentación escasa. Intente evitar trabajar con código inmaduro que no se admite de forma activa, independientemente de su antigüedad.
fuente
Creo que el análisis de costo-beneficio depende de la alfabetización informática informática deseada que desea lograr durante sus estudios.
Para la mayoría de los científicos que trabajan con computadoras, el dominio de la computación científica es suficiente, esto requiere: una comprensión de alto nivel (abstracta) de los principales algoritmos utilizados y habilidades de programación que le permiten usar efectivamente bibliotecas de software (crear software, vincular, usar listas de correo).
Por el contrario, si planea convertirse en un experto en el campo de la computación científica, necesitará una comprensión profunda de los métodos numéricos, la aritmética de punto flotante y la tecnología informática. Puede aprender la teoría de estos temas de los libros, sin embargo, se necesita experiencia a través de la práctica para desarrollar y mantener habilidades avanzadas. Por lo tanto, puede ser una gran idea programar todo lo que usa mientras aprende (por ejemplo, si quiere cocinar como un Chef: ¡aprende comiendo lo que cocina y cocinando a menudo!)
Cuál es el nivel correcto de competencia depende de su carrera. Vea qué nivel de habilidades utilizan las personas que trabajan en su campo.
fuente