Trabajé como líder de equipo en varios proyectos a lo largo de los años, y pasé mucho tiempo entrevistando a posibles miembros del equipo.
NUNCA me han impresionado las habilidades de programación competitiva … de hecho, toda la programación competitiva parece ser completamente contraria a lo que necesito de alguien.
Piénselo de esta manera: está reclutando a un conductor para un servicio de limusina de alto nivel … y un conductor de autos de carrera viene a usted para el trabajo … ¿Suena eso como una buena idea?
- Cómo realizar un recorrido de orden posterior en un árbol binario
- ¿Cuál es la mejor manera de extrapolar una señal dispersa que proviene de un filtro de Kalman?
- Cómo desarrollarme bien en algoritmos y programación
- Cómo verificar si la suma de los números de la primera mitad y la segunda mitad de una matriz es la misma
- Cómo crear una ordenación rápida en C
La programación competitiva fomenta el código descuidado, descuidado e indocumentado, lleno de hacks feos y de ilegibilidad general, arrojados a toda prisa, es poco probable que hayan sido probados para casos de esquina, ciertamente no serán a prueba de piratas informáticos. No se pensó si “estamos resolviendo el problema correcto”. No tiene que ser portátil. ¡Nadie tiene que mantener un código de programación competitivo durante los próximos 10 años!
Eso es todo lo contrario de lo que quiero de alguien en mi equipo.
Quiero a alguien que considere cuidadosamente lo que está haciendo. Escribe código que sea fácil de entender para otras personas. Se toma el tiempo para pensar en casos de seguridad y esquinas que puedan aparecer como errores en el futuro. Quiero un código sólido que sea fácil de mantener y que tenga la menor cantidad de errores posibles. Quiero a alguien que pueda seguir con un proyecto que lleva AÑOS en completarse. Necesito a alguien que pueda cuestionar los requisitos si parecen “fuera de lugar”.
Si la persona que te está entrevistando es un programador competitivo entusiasta, tal vez tu destreza sea impresionante … ¡pero lo dudo mucho!
Así que olvídate de la programación competitiva … claro, es un pasatiempo divertido, ¡pero sinceramente espero que nadie le dé trabajo a nadie por eso!
Los proyectos OpenSource son útiles, especialmente para personas que no tienen experiencia laboral previa. Te enseñan varias habilidades que el sistema educativo generalmente no puede:
- Aprendes a leer el código de otras personas. Esto no es algo que se enseñe mucho, pero es lo que pasará la mayor parte de su tiempo haciendo como programador profesional.
- Aprende que su código debe ser legible por otros … esta es una habilidad difícil de aprender, pero es la más importante en mi humilde opinión.
- Aprendes a trabajar en equipo … aprendes a no ser desagradable … que terminarás teniendo que arreglar los errores de otras personas.
- No puedes elegir tus propios requisitos … eso es sutil. Cuando comienzas tu propio proyecto, puedes elegir lo que quieres implementar y lo que estás preparado para hacer para hacerte la vida más fácil. Pero aquí en el mundo real, ¡nuestros “clientes” (quizás “clientes internos”) pueden establecer los requisitos y usted no puede eludir a ninguno de ellos!
- ¡Realmente tienes que interactuar con usuarios reales! Si el proyecto en el que trabaja es realmente descargado y utilizado por personas reales, tendrá que hacer frente a sus vagos y contradictorios informes de errores y solicitudes de características (a menudo irrazonables). Esta es una educación!
- Como reclutador, puedo ver tus confirmaciones de código, puedo ver tus publicaciones en el foro de la comunidad, sé si otras personas del equipo te tienen en alta estima o si eres un dolor continuo en el trasero por ¡Todos los que trabajan contigo!
Entonces, sí, creo que si ha pasado mucho tiempo trabajando en un proyecto OpenSource de cierta estatura, es algo importante para incluir en su currículum.
(En mi última entrevista de trabajo, se mencionó que cierta biblioteca de gráficos (‘freeGLUT’) se estaba utilizando en el principal producto de software del empleador. Me preguntaron si estaba familiarizado con él. Pude mencionar casualmente que realmente escribí un ¡buena parte del código y lo manejé y lo mantuve por más de 3 años! La habitación se quedó en silencio … hubo muchos golpes en los teléfonos celulares y luego “¡Oh! ¡Eres * ESO * Steve Baker!” … Eso valió la pena. ¡oro!)
En cuanto a los “Proyectos extracurriculares”, pueden ser una forma valiosa de demostrar que puede completar un proyecto de principio a fin. Pero es posible que tenga que ser un poco cuidadoso con la forma en que explica su participación. Si bien es bueno mostrar un proyecto personal realmente genial que hiciste en tu tiempo libre, no quieres dar la impresión de que todos tus esfuerzos se consumirán al pensar en ese proyecto cuando se supone que estás trabajando en tu nuevo trabajo.
Los empleadores quieren (quizás de manera poco realista) que se dedique a trabajar en su proyecto, que esté pensando en sus necesidades, incluso cuando no esté en el trabajo. Quieren ser tu pasión, no tu proyecto privado. Entonces, tal vez debería presentar esas cosas como lo que hizo en el pasado que tuvieron éxito y que ahora están “hechas” en lugar de un trabajo continuo que consumirá su tiempo libre en su nuevo trabajo.
De todos modos, esos son mis sentimientos, es muy probable que otros tengan un giro diferente en las cosas.