¿Qué es lo más importante para las empresas de software: código abierto, proyectos extracurriculares o habilidades algorítmicas (habilidades de programación competitiva)?

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?

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:

  1. 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.
  2. 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.
  3. Aprendes a trabajar en equipo … aprendes a no ser desagradable … que terminarás teniendo que arreglar los errores de otras personas.
  4. 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!
  5. ¡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!
  6. 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.

More Interesting

¿Cómo obtenemos ideas para resolver preguntas de programación dinámica?

En robótica, ¿cuáles son algunos algoritmos de planificación de rutas fáciles de implementar en un Turtlebot en ROS?

¿Cuáles son las posibles amenazas para un algoritmo RSA y cuáles son sus contramedidas?

¿Cuáles son algunos ejemplos de colas de prioridad en Java?

Dada una lista de enlaces con punteros derechos, cada elemento de la lista tiene un enlace descendente que contiene otra lista de enlaces con punteros descendentes, de modo que cada lista derecha y abajo están ordenadas. ¿Cuál es la forma más rápida de aplanar la lista de enlaces de forma ordenada?

Teoría de grafos: ¿en qué se diferencian los árboles de expansión construidos a partir de Prim de los árboles de expansión construidos a partir de Kruskal?

¿Cuál es la mejor manera de aprender estructuras de datos y cuáles son los libros para comprender esto fácilmente?

¿Cuál es la complejidad temporal de las funciones incorporadas en C ++?

¿Cuál es la diferencia entre un tipo estable e inestable?

¿Cómo podemos predecir el género de un bebé mediante algoritmos de redes neuronales?

Cómo resolver el problema 144C en Codeforces

¿Cuál es la solución a este décimo problema polinómico de clase?

¿Las secuencias y series son importantes para el aprendizaje de algoritmos?

¿Cuál es el algoritmo más simple que permite a un robot descubrir e inventar?

Cómo escribir algoritmos de programación eficientes