Felicidades. Acabo de tirar su currículum en el montón de “no” y me estoy murmurando a mí mismo acerca de cómo los niños como usted son lo que está mal en esta industria y por qué tengo que volver a capacitar a cada ingeniero que contrate. Probablemente pienses que las bases de datos también son mágicas. Simplemente agregue otro índice allí y todos sus problemas están resueltos, ¿verdad?
¿Por qué estoy haciendo esto? ¿Soy solo un viejo gruñón al que le gusta poner obstáculos arbitrarios frente a posibles contrataciones?
La respuesta es todo lo contrario, de hecho. Si ha estudiado y es un ingeniero capacitado (tenga en cuenta cómo sigo usando esa palabra), encontrará que el proceso de la entrevista es sorprendentemente fácil. Estoy haciendo algunas preguntas sorprendentemente simples como “escribir FizzBuzz” o “¿JavaScript es un lenguaje funcional?” Hay algunas preguntas súper difíciles en la pantalla del teléfono que realmente no espero que recibas. Están allí para atraerlo sobre las cosas que aprenderá trabajando para mí.
- ¿Cuál es la última actualización del algoritmo SEO de Google en 2017?
- ¿Qué algoritmos se pueden usar para encontrar rutas más seguras en una red de modo que sea casi imposible de rastrear y ningún pirata informático pueda utilizarlo completamente?
- ¿Qué estrategia emplearías para vencer a un algoritmo de computadora jugando póquer matemáticamente perfecto?
- ¿Debería concentrarme en dominar algoritmos y estructuras de datos o desarrollar una buena aplicación? ¿Qué es más necesario a largo plazo?
- ¿Algún consejo para estudiar la complejidad del espacio para programar entrevistas? ¿Cuáles son algunos buenos recursos para aprender sobre la complejidad del espacio?
Entonces, si no estoy arrojando barreras arbitrarias en el camino, ¿qué estoy haciendo?
La respuesta es que estoy diseñando sistemas para proporcionar respuestas analíticas a partir de datos de escala de petabytes. Ahora que Google tiene a todos convencidos de que pueden buscar en Internet mientras escriben, tengo que proporcionar un rendimiento similar en mi aplicación web.
Lograr esto es increíblemente difícil. Una simple búsqueda de las especificaciones incluso en discos SAN de EMC me dice que no tengo suficiente rendimiento. Puedo pedir un hardware Infiniband más caro, pero no trabajo para Google. Tenemos un presupuesto aquí. Necesito encontrar una manera de tomar un montón de cajas baratas y lograr que funcionen juntas a velocidades interactivas. Una caja súper potente no puede hacerlo, pero tal vez un montón de IO en paralelo puede hacerlo.
Ahora todo lo que necesito hacer es pedirles a mis ingenieros que escriban un código de consulta en contra de esta estructura … Maldición. Uno de ellos solo trató de cargar todo el conjunto en la memoria y voló la pila en toda la infraestructura. Estamos haciendo retroceder su código. Él dice que el código funcionó en sus pruebas y no entiende por qué falló. Sacudo la cabeza, lo llevo a la pizarra y le explico que el concepto detrás de la memoria es como un depósito de datos que solo puede contener tanto. Un conducto directo (es decir, Streaming) está limitado solo por el tiempo (velocidad del movimiento de datos) en lugar de la capacidad.
Él dice que entiende y evitará ese error la próxima vez. Tal vez lo hará, que no lo hará. La capacidad mental para manejar problemas computacionales complejos es rara. Mucha gente exhibe el potencial, pocos se dan cuenta. Especialmente en este mundo de ideas tontas como “¿por qué necesito aprender estructuras de datos y algoritmos?”
Puede que finalmente tenga que despedirlo. Lo cual es una lástima porque de lo contrario me gusta. Simplemente no puede hacer el trabajo.
Lo que debe comprender es que su actitud lo selecciona a sí mismo para trabajos que coinciden con sus ideas de lo que es la programación. Sin embargo, estos no son trabajos divertidos ni son los que pagan realmente bien. Tampoco es probable que haga algo realmente importante.
Si está de acuerdo con ser un programador mal pagado y eventualmente abandonar su profesión para hacer otra cosa, entonces no aprenda algoritmos y estructuras de datos. Si la ciencia de la computación te excita realmente y realmente, entonces sabes qué hacer.
Seguir
En primer lugar, ¡déjenme agradecer a todos por su abrumador interés en esta publicación! Incluso aquellos de ustedes que criticaron su contenido invirtieron en respuestas razonadas que han mantenido el diálogo. Me siento honrado de estar en el centro de un tema tan importante.
En segundo lugar, me gustaría dirigirme a aquellos de ustedes que expresaron su preocupación por la dureza de esta publicación. Cuando decidí responder, quería algo más impactante que las respuestas anteriores. Algunas de las respuestas fueron muy buenas, pero ninguna de ellas tenía una conexión visceral que una persona joven pudiera agarrar y comprender. Al igual que una película busca establecer una conexión con su espectador presentando una situación en forma “cruda”, ese fue mi objetivo con esta publicación.
Otra forma de preocupación que recibí fue que esta era una historia literal. Por favor, comprenda que esto es solo una destilación de las situaciones con las que trato. Todas las circunstancias específicas han sucedido, pero no en el orden que ves aquí. Por ejemplo, la última vez que hice que un ingeniero revisara un búfer de ArrayList en medio del código de transmisión, no corría el riesgo de ser despedido. En realidad es un buen ingeniero y no estaba pensando en este momento.
Su código quedó atrapado en la revisión del código y no llegó a producción. Le di la capacitación sobre los depósitos de datos a él y a sus colegas para ayudarlos a internalizar mejor el concepto con la esperanza de evitar el mismo error nuevamente.
Despedir gente es una cosa difícil. Tienes que comenzar con “¿qué estoy haciendo mal?” y “¿cómo puedo solucionar la situación?”. Por lo general, implica un largo proceso de tratar de conocer al individuo donde se encuentra y encontrar estilos de aprendizaje que funcionen para ellos. Mucha gente responde al buen liderazgo y capacitación. Algunos parecen estar más allá de mi propia capacidad de alcanzar.
Dado que, en primer lugar, el objetivo es tratar de no contratar malos ajustes, la mayoría de los que he tenido que descartar son malos para mi equipo (es decir, problemas sociales que no mejoran) o no retienen las cosas sobre las que aprenden A largo plazo. La última situación es difícil para mí como líder empático porque parecerán mejorar antes de volver a sus niveles anteriores de rendimiento. Afortunadamente es una circunstancia rara, pero sin embargo conmovedora.
Me detendré aquí para decir que algunos de los mejores ingenieros que he tenido fueron aquellos que tenían poca experiencia en la creación de código escalable pero estaban entusiasmados con las oportunidades que se les presentaron. En algunos casos, estas personas estaban más motivadas a aprender y mejorar que alguien que se cree confiado en sus propias habilidades. Está lejos de ser una regla dura y rápida; Solo una observación interesante.
Tercero, noté que algunos argumentaron que mi experiencia es la excepción que prueba la regla. A lo que me gustaría señalar la sección sobre “actitudes de auto-selección”. La razón por la que a menudo tengo que contratar ingenieros menos calificados es porque compañías más grandes que la mía (Google, Orbitz, NavTec, SalesForce, etc.) están agotando a estos ingenieros tan rápido como pueden conseguirlos. Big Data ha creado una demanda MASIVA de ingenieros calificados que ha resultado en un déficit general en el mercado. Es por eso que tengo que arriesgarme en la contratación y espero que la capacitación que brinde sea suficiente. Todos estamos recogiendo los restos que quedan y esperando poder forjar estas contrataciones en algo impresionante. Eso es bueno para los ingenieros de software, pero solo si está dispuesto a reconocer que la informática y entender cómo funcionan las cosas es importante. De lo contrario, te eliminarán en las pantallas del teléfono y probablemente nunca entiendas por qué.
Finalmente, algunos de ustedes han expresado interés en trabajar en el entorno que describí. Estoy contratando en este momento, así que no dude en ponerse en contacto conmigo si se encuentra en el área de Chicago y cree que es una buena opción.
Para darle una idea de en qué se va a meter, trabajo en el espacio de Healthcare Analytics. El código transaccional es fácilmente el 95% de la industria y donde se enfoca la mayoría de las bibliotecas y software disponibles. Analytics es el 5% y, por lo tanto, es mal atendido por un puñado de herramientas de BI. Esas herramientas tienden a fallar en mi industria porque nos preocupamos mucho por el detalle de los datos (es decir, los pacientes individuales) y utilizamos los resúmenes como mecanismo para encontrar esos casos y no como un fin para ellos mismos. Esto crea una serie de desafíos que podría seguir y seguir durante horas. Baste decir que tendrá que comprender la mente de los optimizadores de bases de datos, trabajará en motores de predicados personalizados a gran escala, desarrollará una lógica OLAP personalizada e irá de un lado a otro aterrorizado por la complejidad de problemas y triunfante cuando los resuelves.