¿Son importantes las habilidades de depuración para convertirse en un buen programador?

24

Junto con las otras cualidades, ¿debería un programador necesitar buenas habilidades de depuración? Si tengo un solicitante que no pudo encontrar el error en el programa dado, pero fue capaz de resolver todos los acertijos y programas, ¿debería considerarlo para el trabajo?

EDITAR: - Los rompecabezas son bolas rojas, azules y rojo-azules normales como. Los programas son como encontrar k ceros continuos en una matriz. El programa de depuración es algo que falla debido a la condición que debería ser> =, pero en su lugar es>. Todo está en papel.

Manoj R
fuente
13
¿Se le permitió ejecutar el programa o tuvo que encontrar el error al mirar el código?
Michael K
99
Solo puede codificar tan bien como pueda depurar. los dos van de la mano en mi libro.
Demian Kasier
3
algunas personas son mejores que otras. A menudo es difícil detectar un error en un código extranjero, especialmente durante una entrevista estresante.
leed25d
66
@Fanatic: solo si solo está trabajando con su propio código. La mayor parte de la depuración que hago en el trabajo es desenterrar los errores de otras personas.
Mason Wheeler
3
@Manoj R, ¿estás seguro de que podrías encontrar el mismo problema con la misma cantidad de tiempo? ¿Estás seguro de que solo porque la solicitante no encuentra un problema en el papel en 20 minutos, no podrá ser buena con Google (Sí, puto Google) de su lado y un par de semanas de práctica?
Trabajo

Respuestas:

37

Si es muy importante

Acerca de ese candidato en particular, es posible que no estuviera lo suficientemente familiarizado con la base de código x para depurarlo.

Un buen solucionador de problemas debería ser capaz de depurar, ya que todo lo que generalmente se requiere es tener un método / enfoque muy lógico.

Noche oscura
fuente
1
Más que cualquier otra habilidad en programación, la depuración viene con experiencia y tiene menos que ver con el talento.
Pieter B
24

Si no puede depurar, no es un programador, y mucho menos uno bueno.

La depuración es una aplicación real y práctica no solo de habilidades técnicas sino también de análisis y procesos de pensamiento. Como resultado, lo calificaría como una prueba mucho más útil y relevante que la pizarra o las preguntas de la entrevista.

A menos que el trabajo que tenga implique pasar todo el día respondiendo preguntas teóricas, necesita a alguien que pueda aplicar las habilidades que tenga.

Sin embargo, lo que debe hacer es preguntarse si fue una prueba justa de la capacidad de depuración: ¿podrían ejecutar el código, poner puntos de interrupción, etc. de la misma manera que lo harían en el mundo real? ¿Qué tipo de error fue? ¿Es algo que el compilador recogería y marcaría (en cuyo caso es una pregunta bastante inútil ya que nunca tendrían que detectarlo)?

Si solo se escribió en papel, entonces es básicamente una prueba de lectura detallada y esa es una habilidad aún más abstracta que la pregunta promedio de una entrevista técnica y yo diría que prácticamente no tiene valor.

Jon Hopkins
fuente
2
+1 para "Pregúntese si fue una prueba justa de la capacidad de depuración" - Parece que no lo fue. Una prueba justa habría incluido código ejecutable con un depurador, es decir, ponerlos en un entorno de trabajo natural y normal (teniendo en cuenta que rara vez funcionarán sin depurador).
doppelgreener
11

Norma de contratación principal: en caso de duda, diga no.

Si necesita implementar una gran cantidad de código nuevo a bajo precio, puede obtener ese tipo, pero personalmente continuaría buscando.

BarsMonster
fuente
77
Contraté a mucha gente en mis años y lamenté a casi todos los candidatos "tal vez" que contraté.
JohnFx
10

A menos que el desarrollador pueda escribir código limpio todo el tiempo (absolutamente imposible), y solo trabaje en proyectos de "campo verde" (nunca será el caso), entonces sí, las habilidades de depuración son absolutamente esenciales. Absolutamente. He tenido experiencia con desarrolladores a los que no les gustaba depurar, por lo que se volvieron perezosos y arrojaron código al control de calidad para que lo probaran. Pero esos desarrolladores no duran mucho tiempo.

El desarrollo de software es un oficio y una habilidad para resolver problemas. Esos problemas incluyen tanto los problemas comerciales como los problemas con su código (y el de otros). Por cierto, muchos proyectos de mantenimiento tratan específicamente de corregir errores, por lo que la depuración es una habilidad absolutamente esencial.

Mark Freedman
fuente
Otra cosa que quiero agregar ... Parte de nuestro proceso de entrevista aquí, es que le damos al candidato un ejercicio tanto para depurar una aplicación como para agregarle un par de características pequeñas. Cada parte de este proceso se trata igual de importante.
Mark Freedman
7

Recordaría que hay muchos sitios web de tipo "pregunta de entrevista", y es completamente posible estudiar para muchas preguntas y acertijos. Una cosa que no puede estudiar es la depuración de código que nunca ha visto antes. O ha escrito suficiente código para saber cómo depurar o no lo ha hecho. Si se trata de una posición de nivel de entrada, no descartaría al candidato, pero si afirman tener experiencia con el idioma y no pueden depurar el código en él, ciertamente levanta una bandera roja.

TMN
fuente
5

La principal diferencia que he visto entre los programadores junior y los programadores senior es su habilidad para depurar. La habilidad para depurar es algo que solo viene con práctica y experiencia.

Por ejemplo, piense en un error extraño en el que un programa Java funciona bien en la consola en modo interactivo, pero falla cuando intenta utilizar una tubería Unix para la misma entrada. Si ha encontrado este problema anteriormente, puede verificar para asegurarse de que new Scanner(System.in)solo se llame una vez; El error es que consume el búfer cuando se canaliza, pero obviamente no cuando está en modo interactivo. Esperaría que un programador más experimentado identifique este error más rápido. Tal vez porque lo han experimentado antes, o porque han tenido otros problemas con el almacenamiento en el pasado.

En cuanto a la resolución de acertijos y la escritura de nuevos códigos, aunque la experiencia es importante, esto es algo en lo que un programador de nivel junior quizás pueda desempeñarse tan bien o incluso mejor que un programador de mayor nivel. Es decir, la inteligencia y la habilidad pueden tener un efecto mayor, que es independiente de la experiencia.

Si está en condiciones de invertir en un programador junior, que puede tener nuevas ideas y puede ayudar al equipo a "gelificar", y parecen estar bien escribiendo un nuevo código, continúe y contrate. Si está buscando un programador de nivel superior, entonces esta falta de habilidad de depuración puede ser una señal de advertencia importante: pueden tener diez años de experiencia que solo equivale a experimentar el primer año diez veces.

Como nota al margen, hay formas de mejorar la depuración sin tener primero 10 años de experiencia. Recomiendo el libro de Andres Zeller Por qué fallan los programas: una guía para la depuración sistemática como una forma de aprender principios científicos y comprender mejor cómo reproducir, encontrar y corregir fallas.

Macneil
fuente
Por lo tanto, la depuración es algo que viene por práctica, y se puede aprender, y no se le debe dar mucho peso al seleccionar candidatos.
Manoj R
1
Para ser claros: debe sopesarlo mucho para los desarrolladores senior, pero no tanto para los desarrolladores junior. Por ejemplo, alguien recién salido de la universidad, que comenzó a programar su primer año, podría tardar 10 veces más en depurar algo. Pero hay buenas razones para invertir en desarrolladores junior.
Macneil
5

Depende de tu entorno. Si juegas sodoku y otros rompecabezas todo el día, tal vez sería un buen candidato.

Sin embargo, si a veces tiene errores en su código, o no siempre funciona exactamente como se esperaba, le sugiero que obtenga a alguien bueno para solucionar problemas.

Contrata para lo que necesitas, no un ideal de lo que debería ser un programador.

JohnFx
fuente
3

Junto con las otras cualidades, ¿debería un programador necesitar buenas habilidades de depuración?

Sí.

El código de depuración es parte de la resolución de problemas. Nunca me he encontrado con un desarrollador que haya escrito código perfecto y cero errores. Un desarrollador depurará su código o el de otra persona. Es una necesidad

¿Debería considerarlo para el trabajo?

Tal vez, depende.

No poder depurar un programa en una entrevista probablemente no debería ser un factor decisivo si el solicitante pudo completar todos los otros acertijos y programas en la entrevista. Realmente depende de la profundidad y el aliento de la entrevista.

¿Cuánta depuración conlleva la posición? Si es mucho, entonces quizás se debería poner más peso en qué tan bien un solicitante puede responder la pregunta de depuración. Pero como solo mencionó que se hizo una pregunta de depuración, no parece ser.

esponja
fuente
2
+1 Para reiterar la depuración es necesario pero no es un factor decisivo durante la entrevista.
Gaurav
3

¿Debería un programador necesitar buenas habilidades de depuración?

Sí. Dicho esto, le pediría que considere que la metodología en la entrevista (es decir, estilo de prueba / prueba) no es perfecta (está bien, es defectuosa) en que muchas personas encuentran que el código en papel es una experiencia extraña y desconocida.

Dado que la depuración es un proceso , no la respuesta o el resultado (por ejemplo, el error ), sugeriría usar un diálogo o discusión interactiva como un mejor medio para evaluar las habilidades de depuración de un candidato. Si bien la mayoría de las personas utiliza un sistema informal de depuración ad hoc, los buenos candidatos tendrán un patrón similar en general, de hacer preguntas para comprender el sistema o los supuestos y los requisitos, luego aislar el problema (a menudo dividir y conquistar) y comparar metódicamente el código de los requisitos, y evaluar espera de entrada / salida, en lugar de un buen o mal grado de cambiar un montón de cosas a la vez sin orden ni concierto hasta que funcione.

También expreso reservas sobre los problemas de rompecabezas durante las entrevistas, particularmente en forma escrita, como si el candidato no tuviera los supuestos correctos del marco de referencia (el truco), el rompecabezas puede ser imposible de resolver para ellos. Es decir, muchos acertijos de entrevistas sufren de tener un único camino correcto, mientras que la vida es complicada y los pensamientos más creativos son aquellos que adoptan enfoques sorprendentemente novedosos para resolver un problema que puede no funcionar con un rompecabezas precocinado particular, con una solución esperada . Es como esperar que todos los trompetistas toquen jazz. Esto se puede manejar haciendo la pregunta como una discusión interactiva sin confrontación (la presión puede confundir la creatividad). Nuevamente, para mí, la respuesta es secundaria para ver que se expresa un buen proceso de pensamiento. Es probable que deba pedirles que piensen en voz alta, pero esto tiende a ser más productivo en mi experiencia.

No he leído ni evaluado el por qué fallan los programas de Zeller , pero puedo recomendar Debugging by Agans como una lectura corta y rápida que puede ayudar a solidificar el proceso de depuración ad-hoc en un esfuerzo más estructurado, concreto y organizado, que puede ayudar a Ser más eficiente en la depuración. También imprima una copia y cuélguela en su cubículo o solución alternativa, el póster de Reglas de depuración , es un recordatorio perfecto para esos días malos en los que nada parece salir bien. Tengo pocos días malos y paso menos tiempo depurando activamente (léase: rascándome la cabeza confundido ) tratando de seguirlos en espíritu, si no en letra.

mctylr
fuente
Gran respuesta. He pasado literalmente días buscando la solución de error más simple y, literalmente, tropecé en solucionar un error complicado en minutos. Un buen desarrollador debe tener una estrategia razonable. Y depende mucho de la aplicación. Digamos que su aplicación no presenta un problema cuando coloca un montón de declaraciones de impresión / registro o ejecuta la versión con símbolos. ¿Entonces que? El solicitante debe al menos ser capaz de articular algún tipo de estrategia coherente.
SnoopDougieDoug
2

Diría que la depuración es esencial, a menos que el programador sea tan bueno que nunca cometa errores. No estoy convencido de que eso sea imposible, pero no puedo imaginarlo con los lenguajes y herramientas populares actuales.

No me gusta el concepto de ser puesto en el lugar de esa manera en una entrevista. Si el candidato está nervioso (y quién no lo está), él / ella podría dejar un espacio en blanco como programador, puede ser capaz de manejar tales problemas de manera rutinaria. Entonces, si se tratara de un problema conocido de entrevista o prueba de comp-sci, el candidato podría conocer el resultado de memoria, pero no tener la capacidad de pensar en un problema nuevo. Además, si el candidato no está familiarizado con el idioma, tendrá que luchar. Muchos errores son difíciles porque un buen programador sabe lo que quería escribir, y su cerebro toma atajos mientras lee el código. No puedo encontrar el uso del estilo C de = where == debería haber sido utilizado por inspección, porque sé cuál era la intención, y mi cerebro tomará un atajo de análisis al leerlo.

Omega Centauri
fuente
1

Una buena parte de la resolución de problemas de programación, y para resolver un problema, debe conocer el problema central, no solo los síntomas o las inconsistencias. La depuración es el arte de identificar el problema central.

  • identificar el problema central
  • mejor capaz de visualizar el flujo

y muchos más.

Srikanth Remani
fuente
1

Agregaría un poco más a la situación al señalar el error y ver qué reacción tiene la persona. ¿Son demasiado dramáticos acerca del tipo "D'oh! Soy un idiota, eso fue tan tonto ...", demasiado apático en el campamento de "Sí, lo que sea", o estaba activo escuchando lo que estaba pasando equivocado con algún tipo de disculpa o comentario para denotar que entienden que arruinaron algo que deberían haber resuelto? Solo algo para pensar en situaciones futuras.

Depurar de manera oportuna es una gran habilidad. Esto es un poco diferente a darle a alguien un problema donde se soluciona cuando se soluciona. A veces tiene que tomarse medidas agresivas para salvar el sistema, lo que debería reconocerse, ya que me imagino que a la mayoría de las compañías no les gustaría detener las ventas durante semanas, mientras que alguien soluciona un error en el software de contabilidad que usa la compañía.

JB King
fuente
1

La depuración es una habilidad crítica. En realidad, diría más que la resolución de problemas es la habilidad crítica. Alguien debe saber cómo definir el problema (incluyendo qué información del usuario pedir y qué registros ver), cómo reproducirlo, qué fuentes de datos tiene disponibles para diagnosticar el problema y cómo depurar y luego cómo solucionar un problema. sin romper otra cosa Sin embargo, determinar eso durante una entrevista es difícil.

Le daría un problema real para encontrar y la oportunidad de usar las herramientas disponibles y luego preguntarle qué pasos tomó para encontrar el problema o qué más podría hacer si no pudiera encontrar el problema en el tiempo asignado. Realmente está buscando a alguien que ataque el problema de manera algo sistemática y que tenga más herramientas en su kit de herramientas que solo el depurador y google (excepto en el nivel Junior cuando debería intentar al menos ambos) (alguien que no puede pensar en probar esas dos cosas probablemente no sea competente o al menos no me arriesgaría con él) pero probablemente todavía no tiene muchas herramientas avanzadas de solución de problemas).

Daría más peso a las habilidades de resolución de problemas que las respuestas a los acertijos (bueno, no las preguntaría en absoluto) ni a las habilidades de programación demostradas. Raramente he visto un desarrollador que pueda solucionar problemas y que no pueda escribir un buen código o hacer las correcciones necesarias. He visto a muchas personas que pueden improvisar un código para obtener un producto "en funcionamiento", pero no pueden solucionar un problema si su vida depende de ello. Principalmente porque no entienden lo que están haciendo o entienden el problema que están tratando de resolver. Los buenos solucionadores de problemas saben cómo identificar el problema real, no solo el síntoma. Y como ellos saben qué preguntas hacer para definir el problema para un nuevo desarrollo también.

HLGEM
fuente
1

Hay 4 a 5 habilidades clave en cualquier trabajo y la programación no es diferente. A nivel profesional, debes ser bueno en todas las habilidades fundamentales clave. Si tiene 4 de 5, todavía lo detendrá.

¿Te imaginas un vendedor que pueda presentar, convencer, articular, calificar a los clientes, pero no puede cerrar el trato? Están ahí y no los quieres en tu equipo de ventas.

La depuración es definitivamente una habilidad central que un programador no puede prescindir.

usuario39741
fuente
0

Tengo ese estilo de codificación, que requiere depuración penal. Cuando termino con 3 líneas de código, lo ejecuto y lo pruebo, a menudo imprimo un par de variables. En los casos, cuando obtuve resultados o comportamientos no deseados, puse muchos volcados en mi código, en lugar de depurarlos. Yo uso depurador real muy raro. Extraño pero cierto.

ern0
fuente
0

La depuración es la fase en el desarrollo de software que se produce después de que se haya realizado una cierta prueba en su software y se haya descubierto un error. Es el acto de buscar y corregir el error en su software. En muchos casos, encontrar el error generalmente requiere más tiempo que solucionarlo.

Es el proceso de eliminar los errores (las vulnerabilidades) inherentes a la aplicación / sistema informático. Si esto no se hace, los piratas informáticos pueden aprovechar los errores y pueden realizar una variedad de actividades maliciosas:

1) Pueden exponer la vulnerabilidad al público que conduce a una pérdida de ingresos, negocios y reputación para los desarrolladores y proveedores.

2) Los gusanos buscan sistemas vulnerables que puedan explotar y, por lo tanto, se copian en esos servidores. p.ej. En enero de 2003, el gusano Slammer aprovechó la vulnerabilidad en el servidor MS SQL.

3) Donde se han mencionado gusanos, ¿cómo podemos olvidar los virus? Los desarrolladores también aprovechan los virus para aprovechar los errores presentes en el programa con el objetivo principal de una exposición indecente ...

4) Y si los programas no se depuran correctamente, los consumidores nunca se quedarán si no obtienen el valor de su dinero. En ese caso, ni siquiera necesita un hacker para hacer el trabajo sucio, también podría confiar en el buen público.

Shylendra Madda
fuente