¿Por qué las escuelas no cubren depuradores? [cerrado]

12

Después de otra pregunta de tarea sobre SO. Parece que la gran mayoría de los estudiantes no tienen idea de qué es un depurador o cómo usar uno. Siento que saber cómo usar un depurador es casi tan importante como otros aspectos fundamentales de la programación.

  • La pregunta es si la depuración no se debe enseñar y cómo utilizar las herramientas modernas de depuración junto con los fundamentos de la programación. Si no, porque no.
repetición
fuente
2
Erm ... ¿estás diciendo que gdb es una herramienta de depuración moderna ? No es un mal depurador, pero ciertamente no es lo último en tecnología.
Billy ONeal
1
Estaría de acuerdo, pero también respondí una pregunta si los estudiantes usaban Visual Studio y no sabían cómo o por qué usarían un depurador.
volver a ejecutar el
@rerun: Erm ... ay. ¿No pueden presionar el botón "reproducir" en el IDE? (Por cierto, hice +1)
Billy ONeal
system.out print logging es el último bastión de los perezosos e ineptos
66
@Jarrod, una generalización bastante amplia y tal vez demasiado. A veces, simplemente no puede utilizar un depurador en su programa donde se produce el problema.

Respuestas:

7

No es tanto el caso del uso de depuradores que debe enseñarse, sino las técnicas más generales de depuración . Esto incluiría enseñar cómo usar un depurador, por supuesto, pero también varias otras técnicas importantes, por ejemplo

  • pensamiento crítico
  • divide y conquistaras
  • depuración de printf, registro, etc.
  • control de escritorio
  • pruebas de estrés

Como beneficio adicional, muchas de las técnicas también se pueden aplicar a la resolución de problemas en áreas distintas de la programación.

Hay un libro bastante bueno sobre todo este tema, que probablemente deba ser leído para todos los estudiantes universitarios y para cualquiera que esté aprendiendo los conceptos básicos de la programación: Depuración de David J Agans .

Paul R
fuente
8

Los cursos de informática terciaria están diseñados para enseñar a los estudiantes los fundamentos de programación , como usted mencionó: estos conceptos se enseñan a los estudiantes con la esperanza de que asimilen los conceptos necesarios y los apliquen a una gama más amplia de lenguajes de programación y conjuntos de problemas.

Las herramientas de depuración, por otro lado, son un subconjunto en el área de implementación : cada herramienta es diferente para cada idioma (aunque los conceptos son los mismos). Estábamos expuestos a herramientas de depuración pero nunca las cubrimos en profundidad. Si pasamos más de una semana en herramientas de depuración, miraría hacia atrás, en retrospectiva, y consideraría que es una pérdida de tiempo. Prefiero aprender sobre notación BigO o polimorfismo. Sin embargo, si el poder de una herramienta de depuración no se ha transmitido (con éxito) a los estudiantes, entonces esa sería una necesidad ausente.

JK
fuente
3
+1. Traducido: Porque no todos usan MSVS, GCC / GDB, LLVM / CLANG, etc.
Billy ONeal
1
+1 aunque tengo que admitir que estoy de acuerdo con @rerun; Un curso (o parte de uno) que abarque conceptos básicos y herramientas que se utilizan en una tienda de software contribuiría en gran medida a lograr que los nuevos graduados sean productivos. Me he encontrado con varios que no parecían entender el control de fuente incluso después de usarlo por un tiempo.
Ken Henderson
Muchas de las habilidades con las que los desarrolladores promedio pasan mucho tiempo están cubiertas en la escuela. Control de código fuente, gestión de configuración en general, exploración de código, lectura de código, procesos de construcción, etc. Aunque entiendo que los títulos de CS necesitan cubrir los aspectos teóricos, creo que una clase de nivel senor donde los estudiantes trabajaron con una gran base de código existente encuentra y corrige errores y comprobarlo en el código y "desplegarlo" haría que un nuevo desarrollador sea mucho más útil.
volver a ejecutar el
3
Estoy totalmente en desacuerdo. Si se está escribiendo un código real (porque escribir código es una buena forma de practicar los conceptos científicos), entonces los estudiantes deben tener acceso a buenas formas de escribir ese código, y eso incluye hacer uso de un depurador si es necesario. Eso no quita el tiempo que se podría gastar en notación bigO: es liberar el tiempo que muchos estudiantes gastan en la fuerza bruta a través de errores menores. No se gana mucho de eso. Además, muchos otros cursos de ciencias (física, por ejemplo) incluyen habilidades prácticas de medición como parte de su plan de estudios.
Inca
2
El uso de un depurador requiere comprender cómo funciona la computadora, no solo el código. Consideraría esto una programación fundamental . Me he encontrado con demasiados estudiantes que simplemente no tienen idea de lo que su computadora está haciendo realmente, y eso no lo convierte en un buen programador.
edA-qa mort-ora-y
2

En la mayoría de los cursos de programación introductorios, el estado del programa es lo suficientemente simple como para que pueda eliminar cualquier error con algunas declaraciones impresas. También podría existir el problema de obligar a los estudiantes a hacer las cosas a mano para que tengan una idea de cómo y dónde en el código ocurren ciertos tipos de errores. Si no tiene idea de dónde buscar, entonces un depurador será bastante inútil.

davidk01
fuente
44
Un buen depurador es más fácil de usar que imprimir declaraciones. Las declaraciones de impresión requieren que de alguna manera tenga una forma de serializar sus datos en una cadena, lo que requiere su propio código (posiblemente corregido por errores) para realizar la serialización. Por ejemplo, un programa de lista enlazada es fácil de seguir en un depurador, pero las declaraciones impresas no ayudarán a un estudiante que está tratando de escribir un algoritmo transversal de lista enlazada, porque necesitaría ese algoritmo para escribir las declaraciones impresas correctas .
Billy ONeal
2
@Billy, entonces, ¿ir a través del código incorrecto les ayudará de alguna manera?
Neil Butterworth
1
@Billi ONeal, te equivocas. Un depurador del que estás hablando no existe. Los pasos interactivos a través del programa solo son útiles cuando ya ha identificado el problema con el registro de depuración. Nunca en mi práctica (> 20 años) tuve que usar un depurador con mi propio código: las afirmaciones y el registro adecuados siempre fueron suficientes. Solo estoy usando esas malditas herramientas con el código de las bibliotecas y el material heredado. Y, por cierto, poder serializar cualquier estructura de datos en algo legible siempre es una buena idea. Algunos idiomas / entornos ofrecen esto de forma gratuita.
SK-logic
1
@Billy ONeal, ¿cómo examinaría la memoria de un dispositivo de microcontrolador conectado a un puerto serie? Y, creo que no es una buena idea exponer a los principiantes a los lenguajes de bajo nivel con punteros y otras cosas antes de que estén lo suficientemente alfabetizados en estructuras de datos y algoritmos. Para entonces sabrán cómo depurar correctamente.
SK-logic
1
@Billy ONeal, la parte más difícil es identificar el momento adecuado para inspeccionar un valor en un depurador (por cierto, en la mayoría de los casos sigue siendo algo así como llamar a un método .dump (), no una inspección directa de memoria) o para imprimir un valor serializado. Con una infraestructura de registro de depuración adecuada, el problema se reduce a un análisis de los archivos de registro. En la mayoría de los casos, un simple grephace el trabajo. Sin pasos, sin puntos de interrupción condicionales, solo grep.
SK-logic
2

No es tan importante Casi nunca uso uno, y nunca lo he hecho. La mejor forma de depurar código es:

  • no escribas los errores en primer lugar
  • si los escribe, corríjalos pensando, no sumergiéndose en el depurador

Y para muchos softwares modernos y multiproceso, los depuradores tienen el efecto de ocultar errores en lugar de descubrirlos. Y definitivamente no deberían "enseñarse" a nivel de grado, como tampoco uno enseñaría cómo usar un procesador de textos.

Neil Butterworth
fuente
66
Creo que esto depende. Si está tratando de acostumbrarse al comportamiento de una base de código grande y mal documentada que no escribió, un depurador es una de las formas más rápidas de acostumbrarse a lo que está haciendo la base de código. Si está escribiendo todo el código, seguro, no necesitará un depurador a menudo, pero no todos estamos en ese lugar. +1
Billy ONeal
1
@Billy Debemos aceptar diferir. Intenta conocer un gran servidor de negociación MT con un depurador.
Neil Butterworth
@Neil: Nunca me he ocupado personalmente de ese tipo de cosas ... pero ya he depurado el código MT sin problemas. Quizás MSVC ++ me haya echado a perder: los depuradores hacen que sea muy fácil mostrar lo que los diferentes hilos están haciendo. Pero si estaba depurando en versiones anteriores a 2008 (creo que fue entonces cuando se agregó) podría ver cómo eso podría hacer las cosas más difíciles.
Billy ONeal
@Neil: No me malinterpretes, no estoy diciendo que el depurador sea un sustituto para pensar, o que debería ser lo único que mires. Solo digo que es una herramienta que en algunos casos puede facilitar la comprensión de algo. Si un depurador está causando más confusión, generalmente es fácil decir que está causando más confusión (porque te estás confundiendo más), y es entonces cuando apagas el depurador e intentas otra cosa. Es útil en algunos casos, pero no sustituye mirar el código / entrada / salida y pensar en lo que está sucediendo.
Billy ONeal
2
Sé que estás volando la cara de la sabiduría recibida por aquí. Pero estás en buena compañía con personas como Linus Torvalds, Larry Wall, Brian Kernighan y Rob Pike.
btilly
0

La depuración debe enseñarse porque los estudiantes son humanos y los humanos cometen todo tipo de errores, algunos de los cuales requieren la adquisición de algunos datos experimentales (información de depuración) antes de que ocurra cualquier aclaración sobre un error determinado.

La depuración no se enseña debido a la premisa (tal vez heredada del departamento de matemáticas) de que los programas deben ser correctos por diseño, tal vez incluso de manera demostrable. Y por lo tanto, los estudiantes no deberían "experimentar" con la programación correctamente. Sin embargo, esto ignora el proceso de fabricación en el mundo real de humanos imperfectos que desarrollan software para cambiar las especificaciones bajo presiones programadas, etc.

hotpaw2
fuente
Hmm ... tal vez mi escuela es diferente, pero no es así como se hacen las cosas en CWRU.
Billy ONeal
Probablemente depende del árbol de herencia del departamento histórico del curso de programación en cuestión.
hotpaw2
No estoy seguro de dónde sacas todo esto. Todas las clases introductorias pasan algunas conferencias sobre cómo localizar errores.
davidk01
@ davidk01 - Eso no explica la observación del OP, que he escuchado, no con frecuencia, pero más de una vez.
hotpaw2
@ hotpaw2: ¿Qué no explica la observación del OP? El hecho de que los estudiantes tengan dificultades para aprender a depurar programas no significa que no se les enseñe cuál es la conclusión a la que están llegando. He tomado varios cursos de programación como estudiante de pregrado y como estudiante de posgrado. En cada clase, el instructor ha dedicado al menos una conferencia para repasar un programa incorrecto y corregirlo para demostrar algunas técnicas comunes de depuración.
davidk01
0

Esta pregunta es extraña para mí. En mi universidad, el uso del depurador (JDB y el depurador Eclipse) se enseñó ya en la secuencia de ciencias de la computación del primer año. El uso de depuradores y otras herramientas de prueba se enseñó nuevamente en el curso sobre pruebas de software.

Personalmente, me resulta increíblemente difícil creer que cualquier buena escuela que esté tratando de preparar a las personas para ingresar a la fuerza laboral no esté enseñando sobre técnicas adecuadas de depuración y prueba. Obviamente, no pueden cubrir todos los aspectos, pero al menos pueden enseñar lo básico en el aula.

Thomas Owens
fuente
0

Averígualo por tu cuenta

No necesitaba y no quería que un profesor o un TA se tomaran el tiempo para enseñarme algo que pudiera resolver fácilmente por mi cuenta. Están allí para enseñarme los conceptos difíciles y guiar el aprendizaje. No están ni deberían estar allí para que no tenga que usar RTFM.

Aprende a aprender

La universidad debe consistir en aprender a aprender, no solo en tener a mano cada tema que no conoces. Si tienes tu mano constantemente a través de este proceso, fracasarás miserablemente en el mundo real.

Cuesta arriba, en ambos sentidos, a través de la nieve

Cuando fui a la escuela tampoco se molestaron en enseñarte el idioma. Se esperaba que lo recojas en tu propio tiempo. Te darían el proyecto y las instalaciones. Depende de usted rastrear la información que necesitaba para completar la implementación y presentar un programa de trabajo. Bastante similar al mundo real, excepto con horario de oficina.

dietbuddha
fuente