sirve - php tutorial
¿Cuál sería un buen proyecto de muestra para pedirle a un programador prospectivo que codifique durante el proceso de contratación? (16)
Mi entendimiento es que solicitar una muestra de trabajo es una buena manera de determinar si alguien tiene las habilidades que usted está buscando, ya que algunas personas solo hacen una buena entrevista. Así que quiero pedir a los desarrolladores potenciales que escriban un código de muestra para mí.
Estoy buscando ideas sobre qué tipo de proyecto pequeño sería algo que podrían hacer en una o dos horas, y demostraría que tienen un buen conocimiento de la POO, buenas prácticas de codificación, etc. ¿Y qué buscar una vez que terminen? - Cómo evaluarlo de manera justa y útil.
Para el contexto, soy propietario de una pequeña empresa, entrevistando a posibles desarrolladores, para el desarrollo de PHP en proyectos internos. Puedo codificar PHP pero no soy un experto (parte del trabajo es refactorizar el código que he escrito para que esté mejor estructurado y sea coherente), por lo que también estoy buscando qué buscar al evaluar las muestras, dado que No soy un programador entrenado o super experimentado.
Especialmente para las personas que han hecho la contratación de este tipo antes y han utilizado este método.
También estaba pensando que podría darles un código para refactorizar, y ver cómo les va. ¿Alguna vez alguien ha realizado una prueba de refactorización como parte del proceso de contratación?
Aclaración: no estoy hablando de codificación durante una entrevista. Estoy hablando de codificación en lugar de una entrevista. Para el contexto, la inspiración para esta pregunta provino de este artículo en FastCompany sobre cómo las muestras de trabajo son mejores predictores del éxito en el trabajo que las entrevistas:
Por qué podría ser más sabio contratar personas sin conocerlas http://www.fastcompany.com/magazine/136/made-to-stick-hold-the-interview.html
¿Alguna vez has probado la programación de pares antes? Dos personas se sientan en una máquina, comparten el teclado y el mouse y hablan sobre lo que están haciendo a medida que avanzan. Creo que este es absolutamente el mejor enfoque, ya que, eventualmente (después de que ceda el pánico de todos), realmente indicará qué tan bien trabajan juntos.
Si no eres un gran programador, esta persona debería poder enseñarte y tranquilizarte. Si no son tan buenos, pero trabajan bien juntos, eso podría ser más deseable que una persona brillante pero desagradable.
Al final de la sesión, simplemente borre su trabajo. No es gran cosa.
Bueno, todo el mundo parece estar desalentando el esfuerzo de codificación para una entrevista. Estaré en desacuerdo con los desacuerdos. Para responder a su pregunta, si desea ver un ejemplo de qué es lo que tiene su código, coloque una calculadora simple en la mesa que está frente a ellos y pídales que escriban un programa para crear la calculadora de forma virtual. Dales media hora y mira qué tan lejos llegan. Algunos pueden terminar en ese tiempo.
Creo que lo mejor que puedes hacer es tratar de que un verdadero experto te acompañe en la entrevista. Contrata a un tercero si es necesario. No estoy seguro de que sea posible poder ofrecer una evaluación de calidad de alguien que es un desarrollador más experimentado que usted.
La otra cosa a tener en cuenta es que los desarrolladores realmente buenos pueden darse cuenta del hecho de que tienen más experiencia que usted, y si usted indica que usted es uno de los desarrolladores, puede que realmente los posponga (no tratando de ser ofensivo, simplemente significa en el contexto de ti lo que implica que no eres muy experimentado.)
Déles una dirección o un archivo de texto sin formato y pídales que creen un script simple para convertirlo en XML. Utilicé eso una vez y funcionó de maravilla.
Si desea probarlos en el lugar, pídales que inviertan una cadena. Desde un punto de vista organizativo, la perseverancia, la determinación y el entusiasmo son tan importantes como ser técnicamente adeptos, IMHO.
Estoy de acuerdo con bpapa acerca de que se trata de una entrevista en lugar de una prueba de ejecución, tal vez en lugar de eso considere hacer algunas preguntas sobre cómo se someterían a ciertas charlas relacionadas con la programación ...
Me gustan los problemas en streamtech . Son bastante fáciles y, a menudo, se pueden hacer en poco tiempo, pero muestran que el solicitante es capaz de pensar de forma estructurada y traducir esto a código estructurado.
En cuanto a la evaluación, utilizaría esto como una oportunidad para aprender. Haga el problema usted mismo primero, luego compare con el código del solicitante. Busque cualquier construcción que no conozca, luego pregúntese qué versión es más correcta .
Me gustaría prestar atención al consejo de Joel de que dar asignaciones de tareas para las entrevistas solo elimina a los mejores programadores (parafraseado de su libro). Los mejores programadores tienen muchas opciones y, por lo tanto, no querrán pasar por el ejercicio de una tarea de programación. Simplemente no se aplicarán. Eso te dejará con las personas de competencia media. Desafortunadamente, según mi experiencia, esos son los que tienen más probabilidades de tratar de verse mejor que ellos y, si usted no es un experto, los que probablemente lo engañen.
Aquí hay una opción alternativa. Haz que te señalen algún trabajo que ya hayan hecho. No necesariamente el código, sino el sitio. Durante la entrevista, hágales preguntas sobre cómo lo codificaron. ¿Qué estructuras de datos utilizaron? ¿Cómo se organizaron las clases o funciones? ¿Qué problemas tuvieron que superar?
Luego, como preguntas de programación tradicionales en la entrevista, podrían responder por ti en el lugar. De esta manera usted puede medir su comprensión y su sintaxis. Los dos no tienen que ser la misma pregunta.
Nunca he sido parte del proceso de contratación ... pero en las entrevistas que he hecho, me pidieron una vez que implementara una lista doblemente enlazada, y otra que elaborara un algoritmo, el clásico, cuántos puntos enteros dentro de un forma dada, en este caso tres puntos formando un triángulo, una vez en O (n ^ 2) y luego otra vez en O (n).
No creo que la forma de hacerlo sea hacer que programen algo, sino asegurarse de que sepan cómo resolverlo. Les da un problema o les hace una pregunta, y les dice que piensen en voz alta y observen su proceso de pensamiento. Esto no muestra exactamente si tienen un código limpio, pero dependiendo del problema, te da una idea de si saben o no de qué hablan.
Para responder a la pregunta:
Para PHP, creo que un carrito de compras, una libreta de direcciones y un foro serían buenos proyectos. Por lo general, cubren una amplia gama de temas de programación web: sesiones, registro, base de datos, procesamiento de formularios y autenticación.
En lo personal: parece que te pareces más a una persona de arquitectura que a un gurú de la codificación. No penalizaría al solicitante porque no puede inventar el nombre de una función oscura o no necesita referirse a otra parte. La clave es que él tiene la iniciativa y sabe dónde buscar (Dios sabe cuántas veces necesito buscar PHP.NET). Una buena pregunta para un experto en arquitectura, en mi humilde opinión, es decirle que tiene un conjunto de datos, pero tiene tres formas diferentes de mostrarlos y cada vista tiene diferentes operaciones. Si su respuesta es solo un SWITCH-CASE gigantesco, entonces puede ser la elección equivocada.
Personalmente me negaría a hacer esto cuando me lo pidieran. Una entrevista es una cosa, y hacer preguntas de programación en papel para evaluar el conocimiento técnico está bien, pero en realidad escribir un tipo de aplicación para alguien es facturable y no lo haría de forma gratuita. Incluso si solo se supone que toma una hora.
Creo que debería enfocarse más en lo que la persona ha hecho en el pasado y hacer preguntas técnicas para las que sabe las respuestas (ya que dijo que tiene un conocimiento limitado de PHP y desea un desarrollador de PHP).
Por lo general, depende del idioma para el que está contratando. Por ejemplo, cuando fui y di una entrevista para PHP, me pidieron que escribiera un script de blog, usando un marco MVC personalizado, mientras que cuando me entrevisté para una apertura como desarrollador de JS, me pidieron que codificara un determinado complemento en jQuery. Es más dependiente de ti contratar al tipo para el final. No quiere pedirle a alguien que le escriba un motor de recomendación de música y luego haga que trabaje en un procesador de pasarela de pagos.
Por lo general, los programadores débiles no entienden la recursión bastante bien, eso se debe a mis observaciones hasta ahora, ahora esto no tiene nada que ver con PHP directamente y, probablemente, una serie factorial o fibonacci recursiva no sería un gran problema, pero digamos que cargar un control de árbol con datos de una base de datos con alguna relación padre-hijo podría ser una buena muestra.
Además, como no eres un experto como dijiste, piensa en algo que puedas manejar con confianza.
Si no es un experto, le sugiero que tenga cuidado al tratar de evaluar a otros desarrolladores. Probablemente debería encontrar una mejor manera de evaluar las habilidades de desarrollo de otra persona si no está cómodo con su propio nivel.
No estoy seguro de que haya una buena solución para ti.
Haría las muestras de codificación muy sencillas y no tardaría una o dos horas. Los simples ejercicios de codificación que toman unos minutos deberían ser suficientes, combinados con otras discusiones sobre las mejores prácticas, marcos, preguntas de diseño, etc.
Tener una tarea pequeña y bien definida puede ayudarlo a examinar a las personas en igualdad de condiciones con una inversión de tiempo relativamente pequeña de su parte. No necesitas algo complicado para ver lo que la gente puede hacer.
En el pasado, les pedí a las personas que escribieran una pequeña aplicación web que ejercite algunos conceptos fundamentales. Mantenemos los detalles de lo que la aplicación debe hacer realmente simple.
También trataría de evitar las tareas que requieren un gran conocimiento adicional (a saber, no les pida que resuelvan un problema de su dominio de problema particular).
Editar:
Con respecto a las "tareas pequeñas y bien definidas": lo que trato de buscar es algo que incluye una descripción muy detallada de alguna lógica de negocios simple como parte de una tarea de programación más amplia. Por ejemplo, una de las tareas de programación que he dado en el pasado implica configurar una aplicación web Java simple e implementar algunas funciones. Nos aseguramos de describir detalladamente cómo debían funcionar las características para eliminar la ambigüedad. Esto fue por un par de razones:
- El punto es realmente ver si el candidato puede construir una aplicación simple desde cero, no ver si pueden adivinar correctamente lo que queremos.
- Si define la tarea realmente bien, puede ver más acerca de qué tan exhaustivo es alguien con el tipo de trabajo que probablemente realizará en una situación de negocios.
- Queríamos algo lo suficientemente flexible como para dar a los candidatos en diferentes niveles de experiencia.
Debo señalar aquí que creo que las tareas de programación se utilizan de manera más efectiva para verificar la competencia. Si asigna una tarea realmente difícil, o una que no está bien definida, es probable que no obtenga resultados que le indiquen lo que quiere saber (a menos que esté probando específicamente la forma en que el candidato maneja las dificultades). asignaciones o ambigüedad).
Una vez tuve que presentar un examen de Visual Basic MCP al final del cual ni siquiera se molestaron en darme el resultado.
Afortunadamente, cuando pregunté si me darían el resultado, estaba sentado en la pantalla Confirmar / Cancelar.
Así que presioné Cancelar, les agradecí por perder mi tiempo y me fui.
Me gustaría crear una aplicación no necesariamente buena e incrustar algunos errores. Se me ocurrirá alguna funcionalidad simple para agregar al programa.
¿El solicitante encuentra algunos errores?
¿Cómo se integra el código del solicitante en el código existente?
¿Se atasca el solicitante en algo que realmente no importa?
¿Se adapta el solicitante a la norma de codificación del código existente?
Después de este ejercicio, discuta el código con el solicitante. Esto puede ser más valioso que el código real.
NOTA: con respecto a la respuesta de @bpapa me aseguraría de que el problema sea nuevo y, obviamente, no se use en la producción.