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

Hace un menos de un mes que vengo haciendo algunas entrevistas de trabajo, tengo que aceptar que no me agradan mucho por varios motivos, o sea, lo pimero que siento es cierta indignación y no sé si está bien o mal sentirla pero es lo que a veces me pasa con este tema, ¿por qué? bueno, por que saco estas conclusiones, tengo más de 20 años dedicándome a la programación y sus ramificaciones, con lo cual he adquirido una experiencia de importante tenor. Muchos de mis trabajos se pueden ver en la red dado que hice varios aportes a la comunidad open source.

Pero bueno sacado afuera este primer sentimiento y esta especie de catársis, 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. En primer lugar cómo ya lo ha dicho Paul Graham para poder contratar buenos programadores tengo que primero SER un buen programador, es la única manera de entender este problema, sino, estamos perdidos, por que ¿cómo puedo saber lo que no sé? Imposible.

¿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, Emacs / Vi
  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 que lo que hace, se apropia de las cosas y tiene un deseo incontenible de hacer esa actividad que tanto nos gusta, cuando uno tiene pasión por lo que hace, 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, tener pasión es no poder parar de progamar, perder la noción del tiempo, entrar en 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, esa es la respuesta corta, hacker en su buena acepción. Es un lobo con hambre, con hambre de hacer cosas que lo desafíen, de hacer cosas inteligentes, con hambre de resolver problemas de forma inteligente como muy pocos lo pueden hacer.

Para un hacker el aburrimiento es su enemigo número 1, el hacker odia el aburrimiento, necesita hacer cosas divertidas, problemas que nunca haya resuelto.

Editor

Un hacker usa el mismo Editor desde hace años y no lo cambia por nada, ¿por qué? Por que le llevó años aprender a manejarlo MUY bien, y por que ha encontrado el editor que mejor le funciona para ser rapidísimo escribiendo y programando. Un hacker usa Emacs o Vi, jamás usa una Ide, las ides son insulto para él, son para gente blanda, humanos razos, el hacker pertenece a otra especie.

Linux

El hacker usa Linux (o alguna variante de UNIX) en todas sus máquinas, en la casa del Hacker está prohibido usar otros sistemas operativos. Linux es el sistema operativo que le ofrece al hacker la máxima excelencia técnica que él necesita para hackear, necesita el poder de la terminal, el poder de los comandos minimalistas que el Shell le ofrece, el poder para combinar comandos con pipes y resolver un script con una línea de BASH, casi como conjuros de una receta mágica.

Detectando la Pasión

Una buena manera de detectar entonces si un Programador/Candidato tiene pasión, es preguntando, por ejemplo: ¿Qué sistema operativo usás en tu máquina? ¿Qué editor usás? ¿Cuál es tu lenguaje de programación preferido? En todos los casos hay que preguntar por qué, tener en cuenta que las respuestas son importantes, pero debemos prestar especial atención en cómo responde a estas preguntas, es bueno entrar en confianza antes de hacerlas para que el candidato se sienta cómodo cuando tenga que responderlas, si es un candidato con pasión, se le va a notar en la forma de responder a estas preguntas. Es pertinente y quizás necesario además preguntar cuáles son las ventajas y desventajas de cada una de estas selecciones (SO-editor-Lenguaje). 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)