¿Cómo entrevistar a un científico natural para un puesto de desarrollador? [cerrado]

30

Pregunta original

Ya hice algunas entrevistas para mi empresa, principalmente científicos informáticos para puestos de desarrollo, pero también algunos evaluadores y gerentes de proyectos. Ahora tengo que llenar una vacante en nuestro grupo de investigación dentro del departamento de I + D (nota al margen: "investigación" significa que tratamos de resolver problemas en nuestro dominio profesional / nicho de mercado utilizando software en proyectos de investigación junto con universidades, otras empresas, centros de investigación y organizaciones de usuarios finales. No es investigación en informática; no vamos a resolver el problema P = NP).

Ahora invitamos a un tipo con una maestría en química (con mucha física también en su CV), que nunca tuvo ninguna clase de informática. Ya hablé con él aproximadamente media hora en los días de carrera de una universidad local y no hay duda de que el tipo es inteligente. También sus notas son excelentes y se graduó con distinción. Para su licenciatura, necesitaba aprender a programar en Mathematica y me dijo creíblemente que le gustaba mucho programar. También resolvió un problema de química física que probablemente no entiendo usando su propio software, implementado en Mathematica, para su tesis de maestría. Incluye una GUI y un tamaño notable de 8,000 LoC. Parece estar muy atraído por lo que estamos haciendo en nuestro grupo de investigación y, para ser sincero, es bastante difícil para una PYME como nosotros conseguir buenas personas. También estoy muy interesado en contratarlo, ya que podría ayudarme a escribir propuestas de proyectos, informes, hacer presentaciones, etc. Probablemente también encajaría en nuestro equipo.

La única pregunta que queda es: ¿cómo puedo verificar si obtendrá las habilidades de programación que necesita para implementar software en nuestros proyectos, ya que esta será una parte importante del trabajo?

Por supuesto, le preguntaré qué es, eso es lo que lo fascina de la programación. También le preguntaré cómo procedió a escribir su software de ciencias naturales y cómo lo estructuró. Le preguntaré cómo logró obtener las habilidades y la información sobre el desarrollo de software que necesitaba. ¿Pero hay algo más que pueda preguntar? ¿Algo más concreto quizás? ¿Debo pedirle que explique su solución de Mathematica?

Para ser claros: no estoy buscando conocimiento en un idioma particular o una pila de tecnología. Somos una tienda .NET en desarrollo de productos, pero quiero tener una opción libre para nuestros proyectos de investigación. Así que estoy interesado en que la meta-competencia sea capaz de aprender lo que realmente se necesita.

Espero que esta pregunta sea respondible y no abierta, ya que realmente me gusta saber si hay una forma predeterminada de verificar la capacidad de obtener más habilidades de programación en el trabajo. Si algo no está claro para usted, por favor deme algunos comentarios y permítame mejorar mi pregunta.

Actualización para reflejar las respuestas dadas hasta 2011-12-01

Qué respuesta acepté y por qué

Gracias a todos por sus respuestas, la mayoría de ellas son bastante útiles, ¡así que voté mucho! Aunque la respuesta de Tom Squires obtuvo la mayor cantidad de votos, voy a aceptar la respuesta dada por el Príncipe Goulash . Por supuesto, Tom es objetivamente correcto, pero la respuesta de Prince es más útil para mí y revisé dos veces las preguntas frecuentes de que este es el criterio para aceptar una respuesta.

Lo que le voy a preguntar durante la entrevista.

  • Le dejaré explicar algunas tareas simples como el ejemplo en The Camel Has Two Humps mencionado por Chris Burt-Brown

  • Le pediré que explique algunos flujos de control más avanzados, tal vez en una notación gráfica.

  • Comprobaré su comprensión de la recursividad usando un ejemplo matemático.

  • Le dejaré explicar un algoritmo de su elección en lenguaje natural.

  • Le dejaré explicar su solución de Mathematica, en particular le preguntaré por su modelo de procedimiento, uso de herramientas, estructuración de código y software en general, así como diferentes capas de abstracción.

  • Para verificar su motivación, le preguntaré por su fascinación por el desarrollo de software.

  • Le preguntaré si está al tanto de lo que necesitará para aprender sobre el desarrollo de software empresarial. Especialmente quiero convertir la discusión en la dirección de trabajar en equipos, programación de pares, TDD, ya que espero que no sepa mucho sobre esto después de trabajar solo en su maestría.

Parece que va a ser una larga entrevista;)

Actualización después de la entrevista 2011-12-09

Nuevamente, gracias a todos por sus buenas respuestas. Pasó la entrevista con gran éxito. Nunca estuve más satisfecho con un solicitante. Su solución de Mathematica parece estar estructurada bastante bien. Pudo explicar dónde usaba las funciones de orden superior, aunque no sabía que se referían así. Él respondió a mis preguntas de recursión basadas en matemáticas, así como a tareas simples y cosas de control de The Camel Has Two Humps. Cuando estaba explicando algunos algoritmos, aprendí mucho sobre el ajuste no lineal;) También dijo honestamente que, por supuesto, no puede garantizar que podrá aprender cosas sobre el desarrollo de software profesional que no conoce hasta ahora. Pero él creía que siempre fue bueno aprendiendo nuevos conceptos, incluso solo, y que estaba realmente interesado en el desarrollo de software. También solicitó la pila de tecnología del proyecto, se le aplicaría primero, para echarle un vistazo en casa. También sentía curiosidad por la programación en pareja y el trabajo en equipo. Ahora espero que se concluya el contrato de trabajo.

Silas
fuente
99
Me parece maravilloso que las empresas estén dispuestas a contratar personas sin conocimiento de la tecnología que utilizan. ¡Ojalá encontrara tu compañía antes de hacer lo que hice con mi carrera!
NoChance
Emmad: Eso es lo que traté de explicar y quise decir con "metacompetencia". ¿Dónde está el beneficio de mi empresa cuando ahora contrato a un excelente programador de C # que no puede (o no quiere) aprender Scala / Lift cuando es necesario? Y para ser sincero: en realidad es bastante difícil conseguir buenas personas en Alemania. Especialmente cuando eres una PYME que no se encuentra en una metrópolis de moda como nosotros.
Silas
2
Pídale que investigue un poco sobre el flujo de control simple y otras técnicas muy básicas en un idioma específico. Luego, cuando entre, pídale que resuelva un problema usando esos.
Darren Young
2
He trabajado con algunos científicos convertidos en desarrolladores en mi puesto actual. En mi humilde opinión, tienden a ser muy buenos en el aspecto de desarrollo de resolución de problemas y no tan buenos en escribir código mantenible con buenos principios de OO. Si desea que haga más que escribir herramientas 'rápidas y sucias', es posible que necesite un desarrollador tradicional que trabaje con él.
Jordan Bentley
2
Yo soy bastante este chico. Tengo una formación en física / química computacional, y he desarrollado muchos modelos / códigos computacionales, junto con una serie de proyectos secundarios (a veces complejos y exitosos). Los principales ajustes que tuve que hacer en un entorno de desarrollo profesional tuvieron que ver con la metodología de desarrollo y el trabajo en equipo. Asegúrese de que comprenda lo que se necesita para trabajar juntos en el software. Asegúrese de que comprenda los métodos que utilizan (TTD / integración continua ese tipo de cosas) y lo que significa trabajar con ellos para su producción.
drxzcl

Respuestas:

21

Soy muy parcial aquí porque comencé como desarrollador de software hace unos años con un doctorado en física, pero muy poca experiencia en codificación (que equivale a un curso de pregrado en Fortran). Claramente, depende del tipo de software que esté desarrollando, pero mi opinión es que las habilidades de codificación son muy fáciles de aprender por cualquier persona con habilidades científicas y de resolución de problemas medio decentes. No pretendo que sea un insulto para los programadores de toda la vida que han estudiado ciencias de la computación: por supuesto, hay aspectos técnicos que requieren una capacitación seria para dominar (por ejemplo, arquitectura de subprocesos múltiples y muy bajo nivel), pero supongo que eso es no el puesto que estás tratando de ocupar.

Para mi entrevista técnica para mi puesto actual, me enfrenté a un problema matemático razonablemente complejo y me pidieron diseñar un programa para resolverlo. El énfasis estaba en escribir un algoritmo que, una vez implementado, resolvería el problema. Podría escribir una respuesta simplemente usando palabras para describir mi solución, pero se me permitió escribir un código en un idioma de mi elección si así lo deseara. La prueba fue más sobre la capacidad de resolución de problemas y si pude "pensar como un programador". Obviamente, si hubiera candidatos con la misma capacidad y uno tuviera más experiencia en codificación directa, habría salido en la cima, pero eso me parece bastante justo.

La conclusión es: examina al candidato por las habilidades para las que lo estás contratando, no por los ideales que esperas que logre.

Príncipe Goulash
fuente
2
Habiendo trabajado con programadores que fueron científicos anteriores, no solo ignoran los detalles de bajo nivel, sino también las cosas de muy alto nivel. YMMV, por supuesto, pero el problema es la falta general de profundidad. No es que todos los trabajos necesiten eso ...
Donal Fellows
1
@DonalFellows: No dudo que los desarrolladores sin capacitación específica pueden carecer de amplitud y profundidad de conocimiento. Depende del rol y de la cantidad de capacitación interna que se ofrece.
Prince Goulash el
1
@DonalFellows: dado que el OP está interesado en determinar la capacidad de aprendizaje del solicitante, no su conocimiento actual ...
2
@DonalFellows: como dije antes, dado que el OP está interesado en determinar la capacidad de aprendizaje del solicitante , no su conocimiento actual ...
2
@ Mark Bannister: Un buen científico puede aprender, esa no es una pregunta útil aquí. Una pregunta más útil sería si el científico aprenderá lo que necesita saber. Eso es más un problema de personalidad. ¿Sabe el científico lo que no sabe sobre ingeniería de software?
David Thornley
37

¿Cómo puedo verificar si obtendrá las habilidades de programación que necesita?

No se puede . Es imposible probar con precisión una habilidad que aún no tiene. Tienes que hacer un juicio basado en su inteligencia y actitud. En última instancia, siempre será un riesgo.

Por experiencia personal, puedo decir que es muy posible pasar de la ciencia a la programación. Básicamente, ambos se reducen a usar tu cerebro para resolver acertijos complejos.

Tom Squires
fuente
8
+1 para "Ambos básicamente se reducen a usar tu cerebro para resolver acertijos complejos".
joshin4colours
1
¿Que pasa contigo? ¡Contrata al chico, por el amor de Dios! Recuerde que los programadores son simplemente operadores de torno de alta tecnología. Es entusiasta, inteligente y sabe mucha química. Si no lo contratas, entonces, la próxima vez que vayas a contratar a alguien dentro de un año, te patearás el trasero que no lo hiciste.
Pete Wilson el
1
No es raro que un graduado de CS pueda haber estado programando desde que tenían 13 años más o menos. Para cuando ingresan a la universidad, ya son programadores intermedios en la mayoría de las escalas. Eso no significa que no aprendieron nada de sus títulos. La programación es fácil ... Informática / Ingeniería suave no lo es. Esto no significa que no podrán contribuir y ser un miembro valioso ... Pero sí significa que probablemente nunca tendrán la misma base de CS.
user606723
6

No tengo ninguna fuente secundaria que verifique este documento, así que no puedo responder por ello, pero:

El camello tiene dos jorobas
http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf

Hemos encontrado una prueba de aptitud de programación, de la cual damos detalles. Podemos predecir el éxito o el fracaso incluso antes de que los estudiantes hayan tenido contacto con cualquier lenguaje de programación con una precisión muy alta, y probando con el mismo instrumento después de algunas semanas de exposición, con extrema precisión.

Chris Burt-Brown
fuente
3
Después de haber leído el artículo, creo recordar que he leído más sobre este estudio hace un tiempo. Simplemente no puedo encontrarlo de nuevo :( Editar: fue mencionado en Coding Horror , gracias por el recordatorio
Silas
Me ganaste, estaba a punto de responder con el enlace Coding Horror @Silas agregado
Izkata
5

¿Cómo puedo verificar si obtendrá las habilidades de programación que necesita?

Es muy sencillo. Dale las habilidades.

Ahora, esa no es una respuesta muy satisfactoria, pero déjenme explicarlo.

Llegué a la programación después de 3 años en Ingeniería Civil. Esa es una formación bastante sólida en física aplicada y matemáticas. No es la matemática teórica que daría un título de CS, pero vale algo. Lo que extraje de la experiencia en ingeniería fue una sólida formación en resolución de problemas . Cualquier persona con experiencia en matemáticas ya aprecia el concepto de elegancia cuando habla de una solución a un problema. Ya han recibido educación en refactorización, ya que han pasado el tiempo tomando seis páginas de scratch de pollo y convirtiéndola en una elegante prueba de media página para enviar.

Cualquiera que haya estudiado física ha desarrollado un enfoque intuitivo para elaborar una solución a partir de marcos básicos.

¿Y qué es la programación fuera de estas habilidades? - Lenguaje, modismos, patrones y marcos. Estos son fáciles de enseñar. Es la resolución de problemas lo que no puedes. Si puede proporcionar instrucciones en estas áreas, terminará con un buen desarrollador.

La pregunta se convierte en "¿Cuánto tiempo puede esperar a que se ponga al día?"

tl; dr; Puedes enseñar mecanografía. No puedes enseñar de manera inteligente.

Chris Cudmore
fuente
+1, Muy buena respuesta. Desearía que la gente tuviera opiniones más abiertas sobre las profesiones: tener un título en matemáticas no significa que no puedas hacer la programación para ganarse la vida, ni al revés. Aprender a aprender es la habilidad importante de la OMI.
K.Steff
2

Tengo una licenciatura en Ciencia de Materiales pero he trabajado toda mi carrera en el desarrollo de software.

Sugeriría que su candidato probablemente no tenga problemas con la programación básica y los algoritmos, pero cuando se trata de los requisitos de tipo más "ingeniería", puede necesitar alguna orientación. Con eso me refiero a estructurar bien su código, no tener 500 funciones de línea, probar de manera efectiva, diseñar para la eficiencia ...

La mayor parte de esto se puede enseñar, pero es posible que desee diseñar algunas preguntas para verificar esto.

Jaydee
fuente
2

También resolvió un problema de química física que probablemente no entiendo usando su propio software, implementado en Mathematica, para su tesis de maestría. Incluye una GUI y un tamaño notable de 8,000 LoC.

Me parece que el candidato ya sabe programar, dado que tal vez no tengan tanta experiencia como desarrollador dedicado, pero tienen un proyecto demostrable que han completado y que requiere una cantidad de trabajo no trivial para completarse. Como tal, es posible que pueda entrevistar al candidato de la misma manera que lo haría con un desarrollador que usa un idioma diferente al que usted usa, a saber:

  • Competencias principales : ¿entiende el candidato la lógica programática básica, el control de flujo y las estructuras de datos básicas?
  • Competencias avanzadas : ¿entiende el candidato la programación y el diseño orientados a objetos, las estructuras de datos avanzadas, las interfaces, las clases abstractas, etc.
  • Habilidades para resolver problemas : dado un problema, el candidato demuestra habilidades sólidas para resolver problemas.

El lenguaje que utiliza Mathematica es bastante avanzado y alguien que sea bueno escribiendo software para Mathematica debería ser bastante competente en otros ámbitos, por lo que centrarse en esa experiencia y usarla como base para codificar la experiencia podría ser una buena manera de abordar la entrevista.

rjzii
fuente
2

Hablando como un graduado de Ingeniería Aeroespacial convertido en programador, ciertamente es posible dar el salto de las ciencias naturales a la programación. Sin embargo, tenga en cuenta que la capacidad de resolver problemas no siempre se correlaciona con la capacidad de escribir código. Pareces darte cuenta de esto y eso es algo bueno.

Para mí, los conceptos más importantes para asegurarse de que comprende son el flujo de control y la recursividad (y el bucle en general como un subconjunto de esto). Antes de contratar a un candidato, incluso alguien que sea claramente muy inteligente, asegúrese de poder escribir un algoritmo de palabras simples para resolver problemas. Asegúrese de que pueda tomar ese algoritmo de palabras simples y convertirlo al menos en pseudocódigo. Incluso puede investigar para ver si al menos puede entender el concepto de polimorfismo, aunque no estoy seguro de que este sea el conocimiento necesario en esta circunstancia.

También tenga cuidado con la capacidad de resolver problemas de ciencias en Mathematica / MatLab / Lo que no significa que puede escribir un buen código. Simplemente significa que es capaz de aplicar principios de programación básicos (a veces extremadamente básicos), generalmente declaraciones if / else. Aprender a ser un buen programador generalmente requerirá un compromiso personal y del empleador con alguien en esta etapa. Advertencia: he conocido personas muy inteligentes que eran / son buenos ingenieros que no podían programar su salida de una bolsa de papel y, sinceramente, no podían comprender los fundamentos básicos del lenguaje.

Experiencia personal

Me gradué de la escuela con un título de ingeniería y un poco de experiencia en programación en mi haber. Había trabajado con una cantidad muy pequeña de C, bastante MatLab y algo de VB + Access. Me llevó unos 3 meses de estudio llegar a ser realmente útil como programador en una tienda VB.NET. Me tomó otros 9 meses llegar a ser completamente competente. Sin embargo, puedo decir con bastante confianza que mis habilidades para resolver problemas son superiores al 99% de otros programadores que he conocido en mi trabajo. Mis empleadores siempre me han considerado uno de sus activos más valiosos.

Conclusión

Es una propuesta de riesgo / recompensa, pero a menudo enfrentarse a alguien que tiene las habilidades de resolución de problemas puede ser rentable a largo plazo, siempre y cuando sean capaces de aprender los conceptos de programación y ambos estén dispuestos a invertir el tiempo en expandir su programación. conocimiento. Sin embargo, creo firmemente que debe poseer al menos una comprensión básica de los fundamentos de la programación antes de ofrecerle un trabajo. En mi experiencia, una vez que estás en este punto, puedes ir mucho más allá.

Mike Cellini
fuente
Gracias por su respuesta. Confirma la mayoría de mis pensamientos. Solo quiero agregar que he conocido a muchos científicos informáticos, que trabajan como desarrolladores y arquitectos durante años, que la OMI tampoco puede escribir un buen código. Incluso algunos de los que escriben artículos técnicos sobre programación. En pocas palabras: ser un buen programador siempre requiere que leas muchos libros, aprendas diferentes idiomas, etc., sin importar qué tipo de título tengas.
Silas
1

Comenzaría con algunas preguntas básicas sobre algoritmos y conceptos básicos para ver si está metido en la lógica de algoritmos y programación. Si es capaz de comprender qué es un algoritmo, puede desarrollar las habilidades necesarias para hacer cosas concretas después.

LostMohican
fuente
1

¿Cómo puedo verificar si obtendrá las habilidades de programación que necesita para implementar software en nuestros proyectos, ya que esta será una parte importante del trabajo?

Honestamente, estoy bastante seguro de que no obtendrá esta información de una entrevista de una o dos horas. Dele una tarea de programación en C # (algo no demasiado técnico) y una o dos semanas para resolver. Eso debería ser suficiente tiempo para aprender los conceptos básicos del lenguaje para alguien que ya ha aprendido programación con Mathematica. Luego haga una revisión del código con él y decida sobre esa base.

Doc Brown
fuente
1

¿Podría mirar Prácticas para programar en un entorno científico? (en Stack Overflow) para tener una idea de cómo es la cultura de programación de las ciencias naturales. De esa manera, usted está en condiciones de comparar su preparación con la de sus compañeros.

Para el caso, puede pedirle que describa las prácticas de programación a las que está acostumbrado para saber si es consciente de que hay otras formas de hacerlo .

Hay muchos "buenos programadores" en mi negocio cuya calificación es poder mantener suficiente estado en su cabeza para improvisar algún código de trabajo, pero cuyo trabajo tiende a ser desestructurado y difícil de mantener. Generalmente se les puede enseñar, pero ... tienen que ser enseñados.

dmckee
fuente
0

Otro departamento donde trabajo utiliza una variación en nuestra prueba estándar. La primera tarea es invertir las palabras en una cadena en su lugar. Luego, use ese código para invertir el orden de las palabras en la cadena, aún en su lugar. En lugar de usar un lenguaje de programación, hacen que el candidato diseñe los algoritmos en papel y los ejecute usando una placa Scrabble.

Peter Westlake
fuente
0

Yo pediría describir (usando lenguaje natural) un algoritmo para calcular algo de la física. Algo un poco más complicado que una fórmula simple y luego le preguntaría cómo vería su cálculo encapsulado en objetos (no es necesario el conocimiento de OOP, podría explicar cuál es su expectativa de un objeto). De esta manera puedes ver su pensamiento lógico. Esto es más importante que cualquier habilidad de programación.

alinoz
fuente
0

Primero, probablemente son bastante inteligentes, por lo que en el peor de los casos, pueden aprender a ser un buen programador con orientación. Sin embargo, si necesita que intervengan y sean un programador decente desde el principio, pídales que envíen un código de muestra que hayan escrito.

¿Se trata de una o dos funciones gigantes de usos múltiples o encapsularon la funcionalidad en los niveles apropiados de abstracción? ¿Están los números mágicos codificados en todas partes? ¿Está el código SECO? ¿Le dieron nombres razonables a las variables o es todo una abreviatura indescifrable o una sola letra variable? ¿Puedes seguir principalmente la lógica de su código? ¿Entienden lo básico de OO?

Pregunte qué utilizan para el control de versiones (git / hg / svn / cvs / bzr, etc.). ¿Han perfilado alguna vez el código o han utilizado un depurador? De ser así, ¿cuál o cuál es su estrategia genérica de depuración?

Si no pasan esta prueba y necesitas un buen programador desde el principio, omite a esta persona. De lo contrario, contratarlos, sugerirles que lean algunos libros de ingeniería de software (por ejemplo, Code Complete) además de libros genéricos de programación / CS.

(Para que conste, también soy un científico físico convertido en programador).

dr jimbob
fuente
-3

Como todavía está en una universidad o acaba de terminar, está acostumbrado a estudiar. Haga que lea y comprenda el libro de Patrones de diseño y después (o durante) un mes, tenga discusiones exhaustivas con él sobre los temas. (Creo que) esto puede decirle mucho sobre sus habilidades (no solo las difíciles (también esas), sino también cómo maneja comprender nuevos conceptos, comprender su uso, ver los pros y los contras, etc.). Pero te costará un mes de tiempo.

herby
fuente
8
-1 La pregunta era sobre cómo entrevistarlo, no cómo hacer que dejara de querer el puesto.
Peter Taylor