Programación competitiva que rompe mitos: no es necesario que la aprenda

Ahora que tengo su atención con el título de la publicación, permítanme profundizar en mis puntos de vista de la programación competitiva.

¿Qué es la programación competitiva?

La programación competitiva es un deporte. Tienes que resolver un problema con un código que es rápido, consume la cantidad mínima de memoria y, a menudo, es prácticamente ilegible.

Es muy popular entre los estudiantes universitarios y aquellos que intentan ingresar a las grandes empresas, principalmente porque les ayuda a ubicarse en esas empresas. Desafortunadamente, millones de personas son contratadas debido a conocimientos que nunca utilizarían en sus trabajos.

El sistema esta roto

Aquí hay otro ejemplo de Hen-Wen:

Hay muchos ejemplos en los que puedo pensar.

El creador de homebrew: ¿un administrador de paquetes utilizado por casi todos los que ejecutan macOS? Rechazado. ¿El creador de WhatsApp? Rechazado por Facebook y Twitter.

Entonces, ¿Que esta pasando aquí? ¿No están estas personas lo suficientemente calificadas para trabajar en estas multinacionales?

No, la respuesta es que estos chicos pueden desarrollar herramientas útiles y escribir un gran software con una calidad de código de primera, pero probablemente no puedan (re) inventar un algoritmo para invertir un árbol binario en un límite de tiempo de 30 minutos.

Algunos de los mejores códigos escritos nunca se escribieron en 30 minutos. Algunos de los mejores algoritmos escritos en el kernel de Linux que se utilizan incluso hoy en día no fueron escritos en 30 minutos por Linus. Algunas de las mejores interfaces de usuario como Stripe no se diseñaron en 30 minutos.

Entonces, ¿cómo puede una persona de recursos humanos al azar en alguna compañía al azar decidir su valor en 30 minutos?

Así es como las empresas juzgan su "viabilidad": al ver si puede resolver un problema de juguetes que no tiene nada que ver con cualquier trabajo que haya hecho en el pasado o que pueda hacer en el futuro.

¿Se puede arreglar esto?

No lo sé. Puedo quejarme y gritar todo lo que quiera, pero honestamente no sé cómo las empresas pueden evaluar a una persona que solicita un trabajo de manera rápida y correcta.

Si quiere algo rápido, perderá muchos buenos candidatos como los mencionados anteriormente. Si no quiere perder a ningún buen candidato, la entrevista puede durar demasiado, mucho más de lo que la empresa puede pagar.

¡Programación competitiva! == Programación del mundo real

Las entrevistas para empresas son más un examen en el que tienes que memorizar y aprender cosas que no usarás después de conseguir el trabajo.

Cree que podría necesitar aprender el algoritmo de Dijkstra para trabajar en Google Maps, pero en serio, ¿cree que Google entregará uno de sus productos principales a alguien nuevo en la empresa? ¿Crees que no recibirás ayuda alguna de tus compañeros?

Probablemente estará trabajando en la interfaz del producto o en sistemas distribuidos en lugar de trabajar en uno de los algoritmos cor de Google. Esto significa que todo su conocimiento de "programación competitiva" es inútil.

Casi no encontrará utilidad para la programación competitiva en el mundo real. Ningún algoritmo que se ejecute en los servidores de producción de Microsoft está escrito en código ilegible, con nombres de variable cortos y sin sentido, sin documentar y optimizados solo para la velocidad y no la legibilidad o el mantenimiento.

La minimización y la mejora del rendimiento vienen más adelante, con herramientas automatizadas la mayor parte del tiempo. Lo más probable es que, si eres un codificador competitivo, hayas desarrollado el mal hábito de escribir código desagradable.

Cualquiera puede escribir código para máquinas. La pregunta es, ¿puedes escribir código para humanos?

Pero hay esperanza

Sentarse para entrevistas como esta y esperar que pueda resolver una pregunta de juguete que preparó durante 3-5 meses aprendiendo solo DSA y programación competitiva es una forma.

Hay otra forma: funcionará con menos empresas y personas, pero lo disfrutará y aprenderá muchas cosas del mundo real en el camino. También será más útil que aquellas personas que solo aprenden "codificación competitiva" por el simple hecho de hacerlo.

Construye algo. Cualquier cosa. Y luego construya más sobre eso. Tenga una cartera sólida. Tener un conjunto de habilidades completo que sea útil para las empresas. Domina con una pila de tecnología: hazte cargo de ella. Ten proyectos, blogs, experiencia para demostrar que eres lo que hay en tu currículum. Construya conexiones, establezca contactos con personas, solicite sus recomendaciones.

En muchos lugares, la codificación competitiva no es la única forma de aprobar una entrevista: hay todo tipo de personas que dirigen todo tipo de empresas. Una persona que esté de acuerdo con mi punto de vista y esté dirigiendo una empresa no contrataría personas solo por su conocimiento "competitivo".

Tu trabajo puede llevarte a lugares que no podrías imaginar. La forma más fácil es seguir siempre a la multitud. Pero nada bueno es fácil, al menos si eres lo suficientemente ambicioso. Mezclar la cantidad justa de ambición y coraje puede hacer maravillas.

El mundo necesita grandes programadores para progresar, para hacer avanzar a la humanidad, no personas que puedan ser contratadas.

No confunda DSA con programación competitiva

Inicialmente no quería escribir esta sección, pero sabía que mucha gente confundirá esto. DSA - Estructuras de datos y algoritmos es algo diferente. Montón, mapas, matrices, vectores, listas enlazadas, .etc, todos estos también son muy útiles en la programación del mundo real.

La parte divertida es que también puede desarrollar esa comprensión con la experiencia. Nunca aprendí explícitamente sobre "heap" usando un gran curso DSA de 50 horas. Y si está aprendiendo a programar, no necesita una comprensión muy profunda de eso también.

Se requiere DSA en profundidad cuando se desea aprender informática, no programación. Comprenda la diferencia, la informática es la teoría, la programación es práctica.

Sea consciente de las cosas que existen, los algoritmos que existen y las estructuras de datos que existen. No es necesario que los aprenda o los memorice todos. Me suena increíblemente estúpido memorizar o aprender algo que rara vez se usa cuando puedo obtenerlo con un poco de ayuda de colegas e Internet.

Mi historia

Estoy no un codificador competitivo, probablemente la única CS Undergrad en mi universidad que nunca tocó competitiva de codificación en la universidad .

¿Por qué? Porque lo probé hace 4-5 años y lo odié. ¿Por qué? Porque podía verme gastando 3-5 horas de mi día, todos los días, resolviendo problemas que no me consiguieron nada. Sabía un par de cosas más sobre cómo abordar la siguiente pregunta, pero ¿fue eso suficiente para tener un impacto? ¿Fue eso suficiente para destacar entre la multitud?

¿Qué bien estaba haciendo? Sentí que estaba perdiendo el tiempo con preguntas que ya estaban resueltas. Puede ser diferente para todos, pero me alegro cuando veo que otras personas usan las cosas que programé (comencé como desarrollador web para entonces).

No podía soportar perder el tiempo aprendiendo algo que nunca usaría en el mundo real. Solía ​​participar en Code Jam de Google y en la Hacker Cup de Facebook en el pasado. Pero pronto me aburrí y me frustré, por la falta de una palabra mejor, y nunca volví a hablar. Conseguir un trabajo o una pasantía no me concierne, nunca lo hizo.

Una vez me senté para las entrevistas de Google en el campus. Tenían una ronda de preselección de currículums como la primera ronda, a diferencia de todas las otras empresas donde estaba la primera ronda, espere, ronda de codificación competitiva. Bueno, los 7 años de experiencia en sistemas y desarrollo web se fueron por el desagüe.

De todos modos, para Google, fui la única persona en ser preseleccionada con un GPA de 7.5 (el GPA más alto es 10 en India). El resto de las 10 a 15 personas estaban por encima de 8.5 o 9.

No volví a pasar de la ronda competitiva, pero eso me enseñó que era posible entrar en la primera ronda de una empresa como Google con solo tu currículum. Por lo tanto, es importante trabajar en eso.

Conclusión

TL; DR: no necesita aprender codificación competitiva para tener éxito en la vida. Necesitas aprender algo que te guste tanto que lo domines, y eres imbatible en tu campo. Eso es todo.

¿Tienes puntos de vista y opiniones? ¡Conéctese conmigo en Twitter e Instagram y hablemos!