¿Es necesaria una programación competitiva para ser un buen programador?

No. Como una persona que ha tenido un historial de programación competitiva, creo que la programación competitiva le enseña muchas habilidades útiles, principalmente algoritmos, estructuras de datos, gráficos, pensamiento crítico, etc.

Sin embargo, en la programación competitiva, generalmente haces cosas que NUNCA harías en un entorno de producción, por ejemplo:

  • Definición de cachés con un tamaño máximo fijo
  • No liberar memoria cuando el programa termina con él
  • No cerrar identificadores de archivo cuando el programa termina con él
  • Haciendo todo dentro de main()
  • No verifica los códigos de error de las llamadas al sistema
  • Redirigir la entrada del archivo a stdin / stdout
  • Asignación de grandes cantidades de memoria en la pila
  • No validando entrada

etcétera etcétera.

Encuentro que muchos programadores competitivos son excelentes en lógica, pero no tan buenos en ingeniería de software, es decir, estructurar bien el código, usar abstracciones, escribir código comprobable y no crear un montón de deudas técnicas.

Ser excelente en la programación competitiva puede ayudarlo a obtener entrevistas técnicas, ya que la mayoría de las preguntas formuladas en las entrevistas técnicas son algorítmicas o de estructura de datos basadas en la naturaleza, sin embargo, la ingeniería de software del mundo real rara vez requiere habilidades de programación competitivas.

De ningún modo !

La mayoría de los trabajos (y es un eufemismo escribir “la mayoría”) son sobre Sistemas de Gestión de la Información (ESI)

Sí, la mayoría de los trabajos consisten en consultar algunos datos, transformarlos y mostrarlos.

No hay necesidad real de ser un genio. Además de eso, mira esto:

SELECCIONE p.Name, v.Name
DE Producción Producto p
ÚNETE a Compras.ProductVendor pv
ON p.ProductID = pv.ProductID
ÚNETE a Compras Proveedor v
ON pv.BusinessEntityID = v.BusinessEntityID
DONDE ProductSubcategoryID = 15
ORDENAR POR v.Nombre;

(Copiado de: Unir tres o más tablas)

¡Esta simple consulta resuelve un problema que puede demorar medio día en solucionar y en un día muy ineficiente!

Lo mismo cuando haces esto:

Hola

1 2
Jhon Sylvia

Muestra una bonita mesa y “2” y “Sylvia” están correctamente alineados.

Este tipo de cosas requieren un poco de pensamiento. Pero esa es una pequeña parte del desarrollador que implementa estos. Otro lo usa mucho.

La programación competitiva le dará una idea de estos problemas.

Puedes verme luchar aquí: Adventofcode 2016: Kotlin

¡Simplemente porque no tengo soluciones enlatadas! No es lo que hago en el trabajo, ni lo que hice. Aunque hice herramientas para deduplicar datos (más cerca de la programación competitiva) [Deduplicación de datos – Wikipedia].

PERO, si desea mejorar fuera de IMS, hágalo. Escritura de unidades, idiomas, bots, sistemas expertos, … Todo esto se acerca cada vez más a la programación competitiva . Cuando no está a la par: practica la codificación con divertidos desafíos de programación: CodinGame. (¡Donde realmente codificas bots para jugar!)

Ahora, puede intentarlo y sentirse disgustado porque es difícil. Siga los consejos de Use Livestreaming para obtener ayuda de programación en vivo – Livecoding.tv. Que citaré:

Para comprender cómo lucha un programador, debe ver cómo se programa, que es donde entra Livecoding.tv. Puede ver incluso programadores veteranos que intentan resolver un problema por enésima vez, rara vez la primera. De muchas maneras es un alivio darse cuenta de que las personas que han estado manejando estos problemas durante años necesitan tiempo para resolver las cosas. Estos codificadores también alientan a los principiantes a seguir intentándolo y a trabajar para motivar a los espectadores mientras comparten su experiencia.

Entonces, mira, juega, compite y disfruta .

No.

Puede ser incluso frustrante y desmotivador, depende de qué tan bueno sea la situación en la que aquellos que le dan orden tienen menos competencia que usted.

La mayoría del código que tiene que hacer comercialmente no es difícil en absoluto. Las personas que le pagan por la codificación no tienen idea de lo que realmente está haciendo. Usted es para ellos solo un código mono, que produce código para hackear místicamente un teclado, como transformar la referencia de pizza, café y cultura geek en cosas poderosas para sus computadoras que les permite estafar a otras personas de su dinero y destruir sus trabajos.

Las personas para las que trabaja no tienen competencia.
Las personas para las que trabaja no tienen idea de lo que está haciendo.
Las personas para las que trabaja no tienen idea de ética.
Las personas para las que trabaja quieren deshacerse de usted, porque le está costando dinero.
Las personas para las que trabaja no aman las computadoras, no las entienden, no quieren y son completamente ignorantes de todo lo que valora.
Las personas para las que trabaja no pueden codificar, por eso lo contratan.
Las personas para las que trabajas te dan las cosas de mierda que no les gusta hacer o las cosas difíciles que son demasiado flojas o estúpidas para hacer.

Las personas con las que trabajas te temen.

No impresionas a nadie por ser un programador competitivo, sino a ti y a tus compañeros. Tus compañeros están en la misma base de código de mono que tú y puedes ganar su respeto, pero intentarán hacerte quedar mal y despedirte, porque saben que eres mejor y que eres peligroso para ellos, porque puedes hacer su trabajo

Serás un monje en una casa de putas toda tu vida. Porque la cultura corporativa es malvada y no es compatible de ninguna manera con la forma de vida que está viviendo un buen ingeniero o un buen científico.

La diferencia básica entre ellos y tú es que lo estás haciendo por amor. Para ellos, eso es solo un trabajo, lo están haciendo por dinero y es solo una asignación temporal donde quieren tanto dinero para la menor cantidad de trabajo y exposición posible y la oportunidad de obtener más dinero para el próximo trabajo y hacer carrera.

No les importa la seguridad, ni la eficiencia, ni nada de lo que te importa. Son verdaderamente malvados. La vida corporativa es malvada.

Asi que. Cuando haces programación competitiva, estás viviendo la buena vida de un ingeniero. El resto del mundo, todas las personas fuera de nuestro reino serán completamente indiferentes, incompetentes e ignorantes de lo que eso significa, significa para usted, para su trabajo o para nosotros.

Lo estás haciendo por amor. Y estás solo con esto. Los únicos con los que puedes compartir esto son otros ingenieros. No esos codificadores de carrera. Esas personas son una mierda. No aman lo que hacen y nunca pensarán en programación competitiva. Es demasiado esfuerzo para ellos. Y pueden subir más rápido y más alto que tú. Pueden convertirse en las personas que querrán comenzar a darle órdenes.

Y ese es el momento en que renunciarás e irás a otro lado. Donde la gente, al menos por un tiempo, lo entenderá hasta que vengan los tontos de la carrera y estropeen la diversión y todo el buen trabajo con su código de mierda pegado en caliente.

Asi que. Todo esto no es para tu carrera, lo estás haciendo por amor. Por tu cordura. Por tu orgullo. Para poder mirarte a la cara por la mañana cuando te paras frente al espejo y sonríes en lugar de odiarte y lo que estás haciendo. Es porque quieres vivir una vida plena y feliz. Y porque amarás lo que haces y harás lo que amas por el resto de tu vida. Y lo estás haciendo, porque nosotros los ancianos estaremos orgullosos de ti. Los que realmente cuentan, tu propia tribu.

No estás haciendo eso por el mundo corporativo. No, tu no. Olvida eso. Es un burdel y un mundo de maldad. Si desea ascender allí, hay formas más fáciles de hacerlo que el camino que ha elegido. Y las cosas por las que te recompensarán serán las cosas por las que te rechazaremos.

Y no hay intermedios entre esas dos formas. Puede hacerlo bien de una manera u otra, pero no de ambas. Y creo que ya has elegido tu camino.

La programación competitiva es el arma que tienes contra ellos. Lo que sabe dónde está parado, dónde están sus amigos, cuál es su valor, qué puede y qué no puede hacer. Aprendes a conocerte a ti mismo. Y con eso obtienes independencia del espíritu maligno que es la vida corporativa.

Y tienes la oportunidad de convertirte en humano, de seguir siendo humano. Y no se envenenó por esa cultura corporativa tóxica. Eres un guerrero monq. Eres un codificador. Eres un ingeniero. Vives por diferentes medios, por diferentes estándares y por diferentes valores.

Y con esto heredarás esta tierra. Es un juego que se juega desde hace mucho tiempo. Y lo estamos ganando. Despacio. Pero la ciencia se está haciendo cargo. La luz gana.

El mundo corporativo nos odia. Odia nuestro internet, nuestra libertad de expresión, nuestro software libre, nuestras ideas sobre compartir, sobre el cuidado, toda nuestra comunidad, nuestros objetivos, nuestra cultura, nuestro idioma, nuestras formas de abordar las cosas y que nos tomamos el tiempo que una cosa necesita. Sobre hacer lo correcto y hacer lo correcto. Su dios es el dinero y la ganancia rápida. El nuestro es el código de amor.

Pero tenemos el verdadero poder. Y es por eso que estamos ganando. Las cosas realmente buenas solo van más allá de su fecha límite. Las cosas que quedan solo llegan si audazmente pasamos esa línea y lo hacemos bien. No porque seamos perezosos. Lo sabes mejor, estás tratando de ser un programador competitivo. Lo hacemos lo más rápido que podemos. Pero no más rápido que eso.

Me cago en los plazos de los ignorantes. Aprendí a dar una mierda por eso. Y es bueno que lo ignores. Es la línea que tenemos que pasar, si queremos que se haga algo por la eternidad. Y no ha hecho un truco rápido que necesita ser rehecho el próximo trimestre financiero. Y después de eso y después de eso …

Ese es el infierno de un ingeniero.

No, no es.

Personalmente, disfruto mucho la programación competitiva y participo en el concurso de programación ICFP cada verano. Utilizo la programación competitiva como herramienta para mostrarme dónde soy débil y qué habilidades y materias necesito para practicar más. Sin embargo, hay muchas otras formas de obtener esa información sin el énfasis tonto en el código desechable que resuelve precisamente un problema.

Me gusta la programación competitiva en parte porque proporciona un buen descanso de mi vida cotidiana de escribir y mantener el código que debe sobrevivir durante años, realizando tareas lamentablemente poco especificadas. No obstante, creo que es ese día a día lo que hace a un buen programador, no el ejercicio altamente presionado de “resolver este problema de juguetes en las próximas 3 horas” conocido como programación competitiva.

No es necesario Puede ser útil Para algunas personas, puede ser dañino.

Cosas con las que puede ayudar:

  • Ampliando tu conjunto de habilidades
  • Obligándote a confrontar tus áreas débiles honestamente
  • Enseñándole el valor de buenos casos de prueba
  • Ayudándole a aprender nuevos algoritmos con ejemplos y casos de prueba que aclaran su valor
  • Ayudándote a aprender la optimización
  • (Y, obviamente …) ayudándote a trabajar más rápido si eso es un problema para ti

Puede haber inconvenientes:

  • Puede hacer que priorice la optimización
  • No hace nada para enseñar la legibilidad y la facilidad de mantenimiento del código
  • Puede ser estresante y desmoralizante (si simplemente no te sientes cómodo bajo alta presión o no te las arreglas bien para ser golpeado, por ejemplo).

Es posible que no necesite las lecciones que la programación competitiva puede ofrecer y hay otras formas de obtener esos beneficios. Hay una manera de usar los sitios mientras se minimizan las desventajas …

Utilizo sitios competitivos para ayudar a aprender nuevos idiomas o ganar experiencia con áreas de desarrollo que no he probado antes. Sin embargo, rara vez entro en las competiciones. La mayoría de esos sitios ahora tienen grandes colecciones de desafíos de desafíos anteriores, completos con comentarios sobre buenas soluciones (a menudo no disponibles hasta que haya completado el desafío). Para que pueda usarlos para aprender a su propio ritmo, sin estrés.

La programación competitiva no es necesaria para convertirse en un buen programador. Sin embargo, programar en competiciones, al menos para mí, me motiva mucho a aprender resolviendo problemas que requieren que aplique algoritmos y estructuras de datos fundamentales, que es importante comprender para cada desarrollador.

Muchos programadores a menudo no implementan algoritmos clásicos que se encuentran en los libros de texto en el trabajo, pero son útiles para saber cuándo una tarea requiere eficiencia. Además, las principales compañías tecnológicas requieren posibles contrataciones para comprender e implementar completamente algoritmos y estructuras de datos.

En última instancia, no es necesario escribir código en las competiciones para ser bueno, pero son extremadamente útiles para agudizar sus habilidades para resolver problemas. Inicialmente, uno aprenderá mucho, pero a medida que aumente la experiencia, el programador no se beneficiará tanto.

Para mí, asistir a la programación competitiva (concursos en línea o en el sitio) es una oportunidad que puedes desafiarte a ti mismo. Además, muchas empresas técnicas o de software suelen evaluar a nuestros candidatos mediante la resolución de problemas que pertenecen a la programación competitiva.

Puede intentar resolver problemas en Codeforces, Topcoder, Codechef, … de fácil a difícil. Además, puede aprender nuevos algoritmos, estructuras de datos de estos foros.

En resumen, la programación competitiva puede ayudarlo a obtener un mejor trabajo. Pero tampoco debe pensar que la programación competitiva puede ayudarlo a convertirse en un buen codificador, porque un buen codificador depende de otras cosas (como el conocimiento de las matemáticas, los lenguajes de programación, …).

La programación competitiva es casi tan necesaria para ser un buen programador como la habilidad en el curling para ser un buen conserje. Los problemas que aborda suelen ser poco realistas, y la capacidad de mantenimiento nunca es una preocupación, por lo que, por lo general, un buen programa competitivo es un grupo complicado demasiado complejo que aborda los casos de prueba correctamente y casi nada más. Nada de esto se traduce bien en una programación real, y la mayoría de las veces es todo lo contrario: nos vemos obligados a enseñar a las personas todos los malos hábitos que aprendieron en la programación competitiva.

Si quieres hacer una programación competitiva, hazlo. Es divertido y agudiza tu mente. Simplemente no esperes usarlo en situaciones de la vida real.

No. Los mejores programadores trabajan en equipos y cooperan con sus compañeros de trabajo en lugar de competir contra ellos. Programe de manera competitiva si disfruta de ese tipo de cosas y no se moleste de otra manera.

A2A

No. De hecho, recomendaría contra la programación competitiva como algo más que entretenimiento personal.

El gran problema con la codificación competitiva es que refuerza todo lo que está mal con el software:

  • Los ingeniosos one-liners ganan contra funciones descompuestas
  • Los nombres de variables de uno o dos caracteres ganan a los nombres descriptivos
  • Las tareas involucradas rara vez aparecen en la programación del mundo real

Entonces, si te estás enseñando a ti mismo con una programación competitiva, estás aprendiendo malos hábitos y habilidades que nunca usarás fuera de la competencia. Y cualquier empleador que los use en un proceso de selección está cometiendo un gran error.

Absolutamente no. Nunca he hecho programación competitiva en mi vida; de hecho, cuando aprendí a programar, no existía. Internet, tal como lo conocemos ahora, surgió con el advenimiento de la World Wide Web en 1991. Para entonces, había estado programando profesionalmente durante 13 años y por mi propio interés personal durante unos 17 años.

La programación competitiva probablemente puede mejorar sus habilidades, aunque personalmente, fuera del trabajo, prefiero presentar mis propias ideas para proyectos e implementarlas. Es más probable que mantengan mi interés a largo plazo y podrían dar como resultado un producto final que me gustaría utilizar. Además, puedo usarlos para experimentar con cosas nuevas que no he usado antes sin la limitación de tiempo de un concurso o trabajo.

No, no lo creo.

Si quieres convertirte en un buen programador, te recomiendo ayudar en proyectos de código abierto. De esta manera, aprende a trabajar en equipo y también a resolver problemas. Estas dos habilidades son muy importantes para cada codificador.

Lo que también es importante es el pensamiento lógico que puede mejorar mediante la implementación de principios matemáticos simples, problemas, etc., si cree que lo necesita.

La programación competitiva puede ser muy divertida y mejorar su capacidad de trabajar bajo presión, pero no creo que sea necesario.

No, no en lo más mínimo.

Es una idea relativamente nueva en la programación, y aunque algunas personas pueden disfrutarla, no tiene nada que ver con la programación en el mundo real.

Lo único que debes poder hacer para ser un buen programador es escribir buenos programas. ¡Eso es! Nada más que eso.

Escribe buenos programas.

Aprende en qué quieres ser bueno.

Si una empresa le paga por hacer una programación competitiva, hágalo, pero creo que los trabajos son escasos en el terreno.

Definitivamente no. No hay habilidad que solo se pueda enseñar durante las competencias de codificación. Sin embargo, si eres una persona que sobresale cuando se superan los plazos firmes y la competencia amistosa puede ser lo que te empuja más lejos de lo que podrías haber pasado. Solo tú puedes decir lo que te motiva. Si considera que las competencias de codificación son una tarea difícil de lo que no son para usted, encuentre otra forma más productiva de aprender.

¿Es necesaria una programación competitiva para ser un buen programador?

No.

Escribir código es necesario para convertirse en un buen codificador. Puede hacerlo sin que sea una codificación competitiva.