¿Cómo evaluar un buen programador?
Llevo seleccionando y dirigiendo desarrolladores en todo tipo de tecnologías de desarrollo más de 17 años, y me doy cuenta de que a mucha gente le resulta muy difícil evaluar la calidad de un programador. Esto del desarrollo de SW para el común de los mortales es un misterio, un "arte" repleto de leyendas y mitos... para los ajenos a esta profesión entiendo que les parezca complicada porque tienes que estar en continuo aprendizaje... sobre todo para los "headhunters" cuando se lanzan a seleccionar este tipo de perfiles.
El desarrollo de Software o programación aún es una "práctica" más cercana al arte, que a la ciencia. Es necesario dominar unas técnicas, pero el cómo y el cuando se aplican es lo que diferencia a un artista o Hacker en nuestra jerga, de un "programador".
Para no hacer un post muy largo, si he de centrarme en seleccionar un desarrollador que no ponga en peligro mi proyecto, en el proceso habría que resolver estas 5 claves:
Estamos hablando de un conocimiento técnico y que buscamos un “método” de trabajo probado de calidad en el programador. Por tanto las 5 preguntas han de ir pensadas para poder valorar esto. Desde lo más básico a cuestiones de experto real.
- Yo no contrato un programador que no sepa leer y buscar soluciones en ingles, y por supuesto en Google. Es algo que les suele ocupar el 30% de su tiempo. Si no supera esa prueba está descartado y no le hago perder más tiempo.
- Nunca contrato un programador que no analice antes de dar una respuesta. Estoy cansado de entrevistar programadores que se fían de su intuición y desarrollan sin saber hacia donde van con la primera idea que se les ocurre. Dirigen el proyecto al CAOS. Para atrevido, y aventurero ya me pagan a mi. ;)
- Junto a esa pregunta busco que sepa explicar la solución mediante diagramas en una pizarra, de forma que compruebas como documentará si se requiere. Se le pide ver un trozo de código suyo en github o bitbucket para poder analizar su estilo de codificación, si sigue algún tipo de norma, nivel de documentación, nombres de variables, longitudes de cada linea, de clases,... uso de condiciones, excepciones…¿pep8?
- La última eliminatoria es saber como domina GIT. Debería enseñarse en el colegio, como sumar y restar.
- Finalmente y más subjetiva es pedirle que desarrolle alguna pequeña clase o una pequeña aplicación. Esta la hace desde casa.
Como ves, que sea Java o C o Python es exactamente igual… Por supuesto si es necesario para la posición el dominio de algún framework se le harán preguntas sobre el… pero eso suele haberse comprobado en el CV y en proyectos en los que ha trabajado… Con esas 5 preguntas… puedes estar confiado de que puede no ser un crack o no tener demasiada experiencia pero al menos tiene las bases sobre las que puedes construir.
Si quieres más puedes encontrarlo en mi blog: http://www.rafaelalcalde.blog/como-seleccionar-un-buen-programador/
Senior Software Engineer/Architect | Search | NLP | Data Engineering
8 añosYo empezaría por "¿Por qué lo llaman programador cuándo quieren decir Ingenieros de Software?". A partir de ahí, este tema daría para 3 o 4 entradas, no para una desde luego. De tu resumen hay ciertas cosas que comparte y otras que caen en topicazos
DevSecOps
8 añosgilipoyeces.. como se evalua a un dev es pidiendole proyectos propios acabados y si los tiene en github/lab o donde sea, mejor, si le gusta, seguro que tiene cosas y hay en donde de verdad se ve lo que puede llegar a hacer... me hacen gracia estas cosas porque es como un libro de embarazadas escrito por un hombre... os gusta pedir, pero no currar, dejar de "putear a los curritos" o os irá mal de primeras... tanto cuesta analizar un proyecto? pues mas cuesta pasar un test absurdo...
CTO & Desarrollador Full Stack: Python / Django y Angular/Ionic en Joinup
8 añosMis normas para un buen desarrollo: 1.Código en inglés 2. Commits atómicos 3. Espacios en vez de tabs 4. Nunca repetir código 5. Que funcione algo muy lejos de que esté bien 6. El que lo rompe lo arregla 7. Adaptate o intenta cambiarlo 8. Usa guías de estilo de código (pep8, jslint, etc) 9. Si una función o método no cabe en una pantalla... está mal! Divide! 10. No subas archivos autogenerados (hay excepciones) 11. Git es una herramienta... mal vamos si una herramienta no sabemos usarla 12. Hay que probarlo todo 13. Que cumplas todas estas reglas no quiere decir que algo esté bien Pera seleccionar personas es mucho más complicado...
Engineer, Agilist, Trainer, Coach, Podcaster, AVP at Citi
8 añosDos puntos más para el análisis: 1.- Que tenga ganas de aprender y trabajar en equipos. ¿Como evaluamos eso? Supongo que hay muchas formas pero una de las que veo más concreta e interesante, es que la persona tenga contacto con la comunidad local de desarrolladores, que participe en meetups y que no solo desde que está buscando trabajo, sino permanente. Y que la comunidad lo reconozca. Para que el reclutador pueda usar esta técnica, es obvio que también el mismo debe pertenecer a la comunidad, participar en los meetups y, en otras palabras, ser quien trabajará con la persona => soy de la idea de que los equipos recluten a sus compañeros, pero reconozco que aún no lo llevo a la práctica. 2.- El kacker es aquel que se apasiona con desafíos complejos, y los resuelve: el ser hacker no implica que sea lo que necesitas, pues un hacker suele trabajar solo, y que tiene un ego comparable con su maestría técnica. Quizá convenga tener algún hacker pero no creo que sea una norma contratarlos por serlo. Ahora bien, ojo que esta fue mi personal reacción frente a una etiqueta: "hacker". Hay que tener mucho cuidado con usar etiquetas pues no todos tenemos el mismo contexto de obviedad al respecto. Espero que estas ideas aporten. Saludos.