Senderos perezosos
Al pedirles a los ingenieros de software que realicen una tarea específica, como escribir un algoritmo de generación factorial (muy común) u ordenar una lista simple o doblemente vinculada que sea fácil de recordar, no obtendrá ninguna idea sobre las habilidades del candidato, aparte de la capacidad de estudiar. También puede preguntar el código ASCII del carácter 'A'.
Las soluciones detalladas a muchos problemas son fáciles de encontrar en una variedad de materiales de referencia, a menudo en libros, que describen soluciones algorítmicas y específicas para todos los problemas comunes en una entrevista de programación.
Trabajé para una empresa y hablé en detalle con un colega sobre cómo fue la entrevista con un gran fondo de cobertura. Memorizó cuidadosamente todas las preguntas técnicas del libro ampliamente disponible de preguntas y respuestas de entrevistas, que el entonces empleado pasó como fuente de todas las preguntas de la entrevista.
Afortunadamente, mi colega es un ingeniero experimentado, pero aceptó realizar este ejercicio descaradamente monótono y mundano para mantener su trabajo. No tenía que hacer esto: la entrevista no solo fue una pérdida de su precioso tiempo, sino que no hizo nada para que la empresa contratante determinara su capacidad. Un colega se fue al cabo de un año, cansado del bajo nivel técnico en cuanto a contratación y gestión ineficaz ...
Memoria
Los mismos argumentos funcionan cuando escribe un algoritmo en un idioma en particular. En un proyecto real, ningún ingeniero de software escribiría una sección de código sin algún tipo de herramienta de verificación de sintaxis (por ejemplo, la finalización de código incorporada en el editor), sin referencia a algún tipo de documentación técnica, o simplemente sin copiar la solución terminada, ¿dónde está? quizás. No tiene sentido reinventar la rueda.
Apuesto a que la mayor parte del código que se ejecuta en los sistemas mundiales de hoy se originó como respuesta a Stack Overflow.
Con toda su practicidad, trabajar con la sintaxis de un lenguaje de programación específico comienza con la familiaridad y la aplicación. La persona que lo entrevista puede pensar que poner a prueba su conocimiento de los matices de un idioma en particular está poniendo a prueba su comprensión del idioma. Por ejemplo, puedo afirmar categóricamente que aunque he estado escribiendo en C durante casi 30 años, echo de menos constantemente la sintaxis.
De hecho, a medida que mi carrera se desarrollaba y me familiarizaba con los lenguajes que me interesaban, estaba constantemente confundido acerca de los matices de la sintaxis, digamos, C, C ++ y Objective-C. No porque sea un pésimo ingeniero de software (aunque algunos pueden estar en desacuerdo ...), sino porque solo el conocimiento que puede mantener en su cabeza y recordar en cualquier momento se almacena en su memoria.
Un buen ingeniero a menudo no sabe de inmediato la respuesta a una pregunta específica, pero definitivamente sabe dónde buscarla. Tal vez quiera preguntar cuál es el mejor lugar para encontrar información sobre las preguntas de la entrevista.
Tareas comunes
Algo que ya he mencionado: esta es una máxima: no reinventes la rueda. Por ejemplo, si está trabajando en C y necesita una rutina de puerto serie, no la escriba desde cero a menos que la situación lo indique. Quizás necesite un analizador JSON, un requisito muy común, a menos que esté escribiendo código en una placa incorporada con un recurso limitado, para un satélite en órbita geoestacionaria o en Malbolg ; entonces quizás debería simplemente sacar lo que ya escribió de la biblioteca. Lo más probable es que el código se haya utilizado durante mucho tiempo, esté completamente probado y tenga documentación detallada (y correcta). Es confiable.
Es poco probable que en la ingeniería de software moderna haya una tarea común que aún no se haya automatizado en la biblioteca, o cuyo algoritmo sea difícil de encontrar.
Si eres como yo, y sobre todo trabajas por amor al tema, entonces buscarás activamente posiciones donde implementes lo que ya has escrito antes: en busca de extraños, mundos nuevos, nueva vida, nuevas civilizaciones ...
De hecho, el concepto de ingenieros de software en un futuro lejano se ha comparado más de una vez con los arqueólogos del código, donde los ingenieros básicamente reutilizan el código existente y dedican relativamente poco tiempo a desarrollar y programar algoritmos nuevos y nuevos.
Discusión. Discusión. Discusión
Apoyo saber que la persona que está contratando conoce su negocio. Pero los métodos anteriores son completamente inútiles en mi opinión. No quiero ofender a nadie, lo digo como está.
Por ejemplo, simplemente hablando de paradigmas de programación en la ingeniería de software moderna, si un lenguaje sería una buena opción para una implementación específica, o si una metodología de ingeniería de software específica (Agile, te estoy mirando) es un tema de discusión mucho más útil y relevante.
Dirija una discusión para resaltar áreas de terreno común, vea cómo el candidato comprende nuevos problemas y posiblemente nuevas formas alternativas de resolver los viejos. Cómo ven los candidatos el desarrollo de las cosas, cómo empezarían a resolver algo. Mantente abierto, mantente alejado de detalles y trivialidades.
La clave aquí es la discusión. Me sorprende constantemente que muchas de las empresas que se consideran "con visión de futuro" y "líderes en su campo" todavía recurran a métodos de contratación obsoletos, monótonos y completamente predecibles, porque apenas aprecian la vena técnica real.
A menudo se dice que un solicitante de empleo debe entrevistar a una empresa de la misma manera que una empresa lo entrevista a él. Estoy totalmente de acuerdo.
Entrevistar a alguien con una lista de preguntas técnicas precisas siempre es una señal de alerta, especialmente cuando la gente no quiere alargar la discusión sobre un tema en particular. Esto a menudo muestra que el entrevistado puede no entender completamente lo que está preguntando, y cualquier respuesta que no coincida exactamente con lo que está escrito en el guión se considerará incorrecta.
Resumamos
Algunas empresas han adoptado mejores métodos de contratación, otras, bueno, se están quedando cortas. Aquí es donde les insto a ustedes, compañeros programadores, a que no se involucren con empresas que contratan a la antigua e insistan en pruebas y ejercicios de programación. ¡Especialmente para los largos!
He escuchado historias de empresas que solicitan que los proyectos se completen en la fecha límite de un candidato, lo que a menudo lleva días.
Otros tienen “pruebas de aptitud” genéricas para idiomas específicos, pruebas de opción múltiple, donde en un tiempo limitado, un indicio de niebla en su cabeza significa que ha fallado la entrevista.
Si eres un principiante, es posible que no estés en condiciones de saltarte una entrevista, y te entiendo totalmente, pero lo veo como una experiencia de aprendizaje. Adelante, desarrolle experiencia, aprenda tanto como sea posible, y si el trabajo lo decepciona, simplemente continúe. En el futuro, obtendrá más confianza, conocimientos y experiencia. Después de todo, la empresa se beneficia de usted, por lo que usted debería beneficiarse igualmente de la empresa.
Si es mayor y tiene más experiencia como yo, deje que la empresa de contratación hable con usted. Tenemos mucha experiencia, hemos visto y hecho mucho, las calificaciones son claramente visibles en el currículum y CV. Y estoy indignado de que me estén guiando por el proceso general de contratación y de que mi capacidad se haya probado varias veces.
Si cree que es un empleador digno y no puede entender por qué los candidatos aparentemente geniales se van y se van, observe de cerca cómo contrata a las personas.
<>
Otras profesiones y cursos
PROFESIÓN
CURSOS
- Profesión de desarrollador frontend
- Desarrollador web profesional
- Profesión Hacker ético
- Profesión de desarrollador C ++
- Profesión de desarrollador Java
- Desarrollador de juegos Profession Unity
- La profesión de desarrollador de iOS desde cero
- La profesión de desarrollador de Android desde cero
CURSOS
- Curso de JavaScript
- Curso de aprendizaje automático
- Curso "Matemáticas y aprendizaje automático para la ciencia de datos"
- Curso "Algoritmos y estructuras de datos"
- «Python -»
- DevOps
</>