Prioridades para aprender métodos computacionales, ¿cuándo debo escribir mi propio código en lugar de usar bibliotecas como un estudiante graduado principiante?


10

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?


2
Tuve una larga respuesta, pero después de una discusión con otro mod, decidí eliminarlo y pedir una aclaración sobre su pregunta. ¿Cuál es el punto principal de tu pregunta? ¿Es "dónde enfatizo mi aprendizaje?", "¿Cómo recomendaría priorizar el aprendizaje frente al progreso del modelado?", "¿Elegir bibliotecas sobre códigos auto-implementados dependerá de los problemas que se resuelven?" O "¿Cuáles son los beneficios / inconvenientes de codificar mis propios algoritmos en una etapa mucho más temprana de mi carrera ". Mi respuesta fue demasiado amplia, y sería mejor darle una respuesta enfocada a una pregunta más enfocada.
Geoff Oxberry

Agregué la sección en negrita para aclarar exactamente lo que estaba preguntando pero dejé el resto intacto. Si siente que alguna de las otras partes debe eliminarse, siéntase libre.
Godric Seer

Gracias. Haré algunas ediciones para enfocar la pregunta y luego publicaré una respuesta.
Geoff Oxberry

Respuestas:


10

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:

  • No hay ninguna biblioteca que ofrezca las funciones que necesita. Considere contribuir a las bibliotecas de código abierto existentes o escribir su propia biblioteca de código abierto, para que otros puedan beneficiarse.
  • Necesita un rendimiento adicional y puede aprovechar la estructura de problemas especiales para obtenerlo. Luego, documente y modifique una biblioteca existente, o escriba una implementación de mayor rendimiento usted mismo.
  • Un supervisor insiste en que desarrolle su propio software. Bueno, usted está solo allí, pero le sugiero que mencione los puntos anteriores para tratar de convencerlos de que sería mejor usar bibliotecas (si eso es posible en su situación).

10

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" :

Los científicos dedican una cantidad considerable de tiempo de investigación a la programación. En promedio, los científicos estiman que el 35% de su tiempo de investigación se dedica a la programación / desarrollo de software. Si bien inicialmente se dedica algo de tiempo a escribir código nuevamente, una parte considerable del tiempo se dedica a muchas actividades tediosas. Por ejemplo, los investigadores en Política y Sociología que usaron R / Stata tuvieron que hacer una programación considerable para adaptar los datos del censo a formatos que los paquetes individuales en R / Stata entendieron. Algunos investigadores en Ingeniería Química tuvieron que aplicar ingeniería inversa al código heredado indocumentado que realizaba la simulación de llama, mucho después de que los autores originales se graduaran, para adaptar el código a los combustibles más nuevos ... A pesar de esto, la gran mayoría de estos investigadores sintieron que "ellos pasar más tiempo programando de lo que deberían "

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.


Ya me había preocupado por mi cuenta de papel. Dado que seré el estudiante de computación para un gran grupo de estudiantes experimentales, es probable que tenga muchas autorías segunda y tercera. También es probable que solo combine diferentes programas al principio (código 0D de mi laboratorio, código 2D de otra universidad, software Meshing de otro laboratorio de mi universidad). Definitivamente mucho para pensar en entrar en esto.
Godric Seer

6

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.