2010-05-17 11 views
20

He estado entrevistando a muchos programadores .NET últimamente y no he conocido uno que sepa qué IDisposable es o para qué se usa. ¿Es realmente irrazonable esperar que alguien con 4-6 años de experiencia lo sepa?Preguntas de la entrevista: ¿Es difícil de entender?

+2

En una nota relacionada, pero ligeramente diferente, a menudo escucho en entrevistas que un candidato describe "el patrón de eliminación". Si bien conozco y he usado el patrón de disposición, me parece que el conocimiento de este no es un indicador útil de la calidad o profundidad de un desarrollador. En parte porque es algo que solo necesitas si estás * implementando * IDisposable (versus * usando * it - juego de palabras intencionado), y en parte porque de todos modos no es un gran patrón. – hemp

Respuesta

32

No, lo siento. Si no conocen IDisposable, no entienden la duración del objeto en .NET, por lo que es seguro suponer que no tienen idea de cómo funciona GC. Para alguien que dice tener entre 4 y 6 años de experiencia, es un desarrollador de "arrastrar y soltar" o un mentiroso. De cualquier manera, no contratar.

+12

Bueno, podría tener la misma experiencia de primer año 4-6 veces :) – kemiller2002

+3

@Kevin: le pegaste al clavo en la cabeza. Muchos programadores pasan muchos años sin aprender nada más de lo que necesitan saber para escribir un software que funcione (pero mal escrito). –

+1

-1, esta respuesta solo asume que si el desarrollador no sabe que es IDisponible, no puede ser productivo – RollRoll

8

No lo creo. Si no comprende qué IDisposable es, ¿cómo puede comprender adecuadamente cuándo utilizar una declaración using?

Mi conjetura sería que mucha gente sabe que poner cierto código en el uso de declaraciones, pero no sé por qué lo cual es bastante miedo.

+4

La programación de culto a la carga sucede en todas partes. En realidad, no debería sorprendernos que ocurra con .NET también. – Oded

+1

Oh, no me malinterpreten, no me sorprende. Simplemente se pone un poco angustioso a veces cuando miras el código y tienes que preguntarte: "¿Realmente querían hacer esto, o se hizo esto, porque no sabían que no lo hacían?" – kemiller2002

+0

@Oded, tuve que jajarte: no mucha gente sabe lo que es un culto a la carga ... – code4life

2

estoy bastante sorprendido de que el conocimiento de IDisposable es demasiado baja. Siempre que tenga un recurso que deba cerrarse y no use la instrucción using, debe usar IDisposable.

+4

En realidad, debe usar una clase que * implementa * IDisposable. Y como la mayoría de los desechables que he visto o usado se disponen en su finalizador, es posible olvidarse de tirarlos(), nunca notarlos y no tener ningún problema. – cHao

2

acabar de tener una entrevista de trabajo hoy deseo me había pedido una pregunta como esa! Todos los programadores deben saber sobre IDisposable. Podría decirse que es la interfaz más importante para entender debido a la declaración using.

Me resulta impensable que un programador con 4-6 años de experiencia no sabe nada de esto.

7

Yo esperaría que los desarrolladores con ese nivel de experiencia para saber IDisposable. Sin embargo, es un tema complejo, si desea profundizar en todos los detalles. Joe Duffy wrote a rather elaborate post on the subject some years ago. No esperaría que todos los desarrolladores puedan cubrir todos los detalles sangrientos en esa publicación.

+0

Solo estoy hablando de un entendimiento básico, estoy de acuerdo en que no necesariamente deberías poder hablar sobre la publicación de Duffy en el contexto de una entrevista. –

1

Sí, no es razonable. Pocos programadores de nivel universitario + 3 a 5 años (el candidato preferido) han escrito código Win32 puro para saber cómo es un "recurso no administrado". Normalmente no aparece en sus años universitarios, Java es el idioma de enseñanza en la actualidad, un idioma que no tiene el mismo patrón.

Hay un gran número de programadores .NET que han escrito código .NET durante años y han enviado código de producción sin alguna vez eliminando nada. Recomendaría otras preguntas de la entrevista:

  • ¿Por qué Java no necesita el patrón IDisposable?
  • ¿Por qué los programadores de .NET se salen con la suya sin deshacerse nunca de nada?

que las pruebas de visión en lugar de la programación de memoria. ¿Quizás más apropiado para la segunda entrevista?

+2

Otorgo que un desarrollador cuya experiencia primaria provenga de otros idiomas no se haya topado con IDisposable, pero eso también significa que ** no ** (todavía) es un desarrollador .NET competente. Si eso se debe usar o no como criterios de contratación es un tema totalmente diferente. Cualquier persona que afirme tener "años" de experiencia con .NET que no entiende los conceptos básicos de la recolección de basura, especialmente cuando solicita trabajos de .NET, tiene una comprensión muy superficial de .NET. Por lo tanto, exageran su experiencia o probablemente no sea el desarrollador de calidad que busca Jonathan. – hemp

+0

Yo contrato candidatos que tienen el sentido del caballo innato para saber cómo traducir un problema de la vida real en un algoritmo. El conocimiento de la contabilidad nunca es un problema, fácilmente cubierto por una revisión del código. El sentido y la experiencia del caballo están débilmente conectados. –

+1

Un programador de .NET que nunca ha usado dispose también sería un programador que nunca se ha ocupado de la base de datos o el acceso a archivos. Ambos son definitivamente sin contrato donde trabajo. –

13

No es razonable esperar que alguien para entender IDisposable, pero también me he dado cuenta de que aquí en desbordamiento de pila, IDisposable preguntas con temas de sólo son superadas por las preguntas de Linq en términos de su frecuencia de aparición. Es obvio que muy pocos programadores realmente entienden todo lo que deberían sobre esto, y honestamente no estoy seguro de por qué; que no puede ser que son todos sin reservas, creo que es sólo que hay muy poca educación sobre el mismo.

Para aquellos de nosotros que vinieron de Delphi o C++ y han tenido que hacer la gestión de recursos manual en el pasado, esto es cegador obvio, pero para las personas que aprendieron en Java o Python o incluso VB, no tanto. Y nunca recibirá una advertencia del compilador si olvida Dispose un objeto; si eres autodidacta en lo que respecta a la programación de .NET, podrías pasar años sin darte cuenta de que realmente es un problema.

Así que con esto en mente, yo no inmediatamente dejar a alguien en una entrevista si no entienden el significado y el uso adecuado de IDisposable, pero yo lo consideraría una señal de alerta, como tantas otras cosas . No es tan malo como (por ejemplo) no saber cómo atravesar una estructura de árbol o no poder escribir FizzBuzz.

Creo que es una buena pregunta, y si alguien nunca antes la hubiera escuchado, probablemente le daría una explicación muy rápida y luego haría una pregunta de seguimiento: ".NET Garbage Collector solo puede administrar memory. IDisposable le permite liberar explícitamente otros tipos de recursos. ¿Puede pensar en algún recurso que caiga dentro de esta categoría? " Si no pueden responder a esa pregunta tampoco, luego Me preocuparía, porque indicaría ignorancia no solo de una interfaz específica en .NET Framework, sino de la administración de recursos en general. Incluso si le enseñaron Java en la escuela, debe comprender que debe cerrar los archivos y las conexiones que abre.

Otra bandera roja, quizás incluso más grande, es si alguien dice que necesita poner cada IDisposable en un bloque pero no puede explicar por qué ni enumerar ninguna excepción a la regla (es decir, métodos de fábrica). Eso es peor para mí porque podría ser una indicación de las tendencias de programación de culto de carga.

Así que sigue haciendo la pregunta, pero quizás atempere tus respuestas. No finalice la entrevista de inmediato si alguien no puede responderla. Considere que un programador de .NET en realidad nunca tiene para aprender esto a fin de escribir el software que funciona (aunque con errores).

Cuestiones relacionadas