Gastón Ramos

Blog personal

Guía de Entrevista técnica para Rubystas

Escrito en dos mañanas del 16 y 17 de Julio de 2024

Read this article in English

Hace menos de un mes que vengo haciendo algunas entrevistas de trabajo. El proceso me genera preguntas sobre qué debería observarse en una entrevista técnica y cómo evaluar la experiencia de una forma justa.

Pero bueno, también entiendo que del otro lado no es fácil tampoco, por que ¿cómo hacer para chequear/comprobar que la persona que están por contratar está calificada para el trabajo? repito once again, no es fácil. Ahora me voy a poner del lado del empleador/entrevistador, y por supuesto que tengo que hacerme las preguntas del rigor, a saber; ¿Cuáles son las cosas importantes que debo obeservar? ¿Qué es lo importante para mí *empleador* o para mí como CTO? ¿Cuáles son los aspectos innegociables? ¿Cuáles son los negociables? Obviamente que debo hacer un análisis de este hermoso problema que es contratar programadores.

¿Qué significa ser un buen programador?

¿Qué es ser un buen Rubysta?

Cómo siempre yo voy a hacer mi lista de cosas importantes, y acá vamos...

  1. Pasión
  2. Ser Pragmático, resolución de problemas, ser resolutivo
  3. Ruby, conocimentos del lenguaje buscado
  4. Entender el stack de Rails y poder explicarlo
  5. TDD
  6. SQL
  7. Ser exquisito con el código
  8. Linux/Shell / Shell Scripting
  9. Saber manejar bien el editor que uno elige
  10. Saber manejar bien la terminal
  11. Saber explicar cómo funciona HTTP, de forma simple
  12. Saber explicar cómo funciona un servidor Web
  13. Dominar Git
  14. Conocer las versiones de Rails y Ruby
  15. Ser austero con las deps
  16. Tener muchas ideas, poder expresarlas rápidamente en código (spykes)
  17. Colaboraciones en proyectos Open Source
  18. Escribir cosas en un Blog
  19. Formar parte de una Comunidad
  20. Saber instalar y configurar un Servidor Web

Pasión in Natta, no exista tal cosa

Son muchas cosas ¿eh? jajaja. Bueno vamos una por una. ¿Por qué es importante para mí que un programador tenga Pasión? ¿Es innegociable? Son dos muy buenas preguntas y vamos a intentar responderlas.

La pasión es importante, no sé si innegociable, pero es muy importante, por que cuando uno siente pasión por lo que hace, se apropia de las cosas y siempre quiere mejorar, es como una sed de conocimientos y de logros. Tener pasión es discutir con amigos si Ruby es mejor que Python, o discutir si tenemos que programar 100% TDD, o si la programación funcional es mejor que la programación Orientada a Objetos, tener pasión es hacer algo y querer mostrarseló a un amigo para que vea ese script tan genial que acabás de escribir o entrar en estado de Flow. Ahora bien, ¿la pasión es algo que viene con uno? la pasión ¿es algo que se tiene o no se tiene? NO La pasión se gana, y para esto hay que trabajar, y hay que trabajar duro para poder tenerla y sentirla, de hecho el trabajar duro en algo que sea difícil de hacer, que requiera habilidades genera estado de Flow, y por lo tanto pasión. Tener pasión es amar lo que hacemos

Volviendo al tema en cuestión, ¿es detectable la pasión? ¿Cómo podemos detectar pasión en un Programador? Excelente pregunta mi querido Gramos. Un Programador con pasión es un hacker en su buena acepción: alguien curioso, que disfruta los desafíos y busca resolver problemas de forma inteligente.

Para un hacker el aburrimiento es su enemigo número 1: disfruta hacer cosas interesantes y enfrentarse a problemas que nunca haya resuelto.

Detectando la Pasión

Una buena manera de conocer qué entusiasma a un Programador/Candidato es preguntarle por un problema que haya disfrutado resolver, algo que haya aprendido recientemente o un proyecto que haya querido compartir con otras personas. Las respuestas importan, pero también debemos prestar atención a cómo explica sus decisiones, lo que aprendió y las ventajas y desventajas de los caminos que eligió. El interlocutor tiene que ser lo suficientemente hábil para hacer que el candidato no se sienta examinado, sino que sienta que está en una charla entre amigos, de esta forma él podrá responder a estas preguntas con soltura y de forma genuina.

Quiero decir que la detección de la pasión no es fácil y que si vos lector tenés más ideas me escribas a ramos.gaston@gmail.com

Ser Pragmático, resolución de Problemas

¿Qué significa ser Pragmático?
No están fácil de explicar... Pero bueno ser pragmático implica aprender algo nuevo todos los días, por más que no sea algo tan grande, pero lo importante es hacerlo todos los días, ser prgamático es hacerse responsable de las cosas, mejorar el código de nuestro proyecto día a día, no tener miedo a los cambios, adoptar una nueva tecnología sin miedo, en cuestión de días, testear nuestro código con tests automáticos, hacer automatizaciones, comunicarse de forma efectiva con los demás, confiar en el equipo y en los compañeros.
Recomiendo fuertemente leer El programador pragmático.

Conocimientos de Ruby

Voy a escribir una guía de conocimientos del Lenguaje, la voy a hacer basada en Ruby, pero se puede tranquilamente trasladar a otro lenguaje.

  1. Instalación y Manejador de Versiones ( Rbenv, Chruby, ruby-install )
  2. Operaciones con listas ( map, reduce, iteradores )
  3. Operaciones con Strings ( gsub, tr, regexs )
  4. Clases, objetos, módulos
  5. Tests (Rspec, Minitest)
Bueno, para no caer en el error generalizado de querer hacer un test técnico enoooorrrrme, la idea es darle al candidato un ejercicio o 2 en ruby y que la solución del ejercicio incluya algunas o todas las cosas que puse en la lista de arriba, y ATENCIÓN! el objetivo del ejercicio no es que el candidato lo termine, aunque sería deseable, sino más bien es ver si el candidato se mueve con soltura al resolverlo y al programar, acá la idea sería hacerlo con él al lado onda Pair Programming, sino se puede estar en el mismo lugar físicamente, lo hacemos a distancia.
Bueno en este punto debemos observar cómo el candidato utiliza las herramientas de las que venimos hablando, podremos observar como se maneja usando la terminal, como usa el editor, como escribe el programa y cómo lo prueba, es importante hacer una lista de las cosas que queremos observar y dejar por escrito cuáles son las habilidades que debe demostrar.

Probablemente continúe...

Lecturas recomendables:

Como hacer lo que amas (Paul Graham)
Grandes Hackers (Paul Graham)