¿Qué es importante saber y estudiar para ser un excelente programador? ¿Es importante practicar programación competitiva?

make_me_a_programmer (ME)
{
conjunto de habilidades de matriz = {algoritmos, estructuras de datos, lenguaje_programación}
mientras que (iam_alive)
{
Keep_coding (conjunto de habilidades);
nivel_programación ++;
}
}

Siempre esté codificando y seguirá mejorando cada vez más 🙂

1. Aprende un lenguaje de programación. Ponte cómodo con eso. Medio de poner tus pensamientos abajo.
2. Algoritmos: cerebro de su programa
3. Estructuras de datos: como bloques de lego para construir su programa de manera eficiente y también facilita la programación.
3. Aprenda trucos para obtener un mejor rendimiento y eficiencia (Reduciendo la complejidad del tiempo, utilizando mejores estructuras de datos)
4. Aprenda estilos de codificación, para que pueda comenzar a escribir código limpio (también conocido como código bonito: P): simplemente embellece su programa (NO ES UNA HABILIDAD NECESARIA)
La mejor manera de adquirir buenas habilidades de codificación es leer el código de otro codificador superior en codechef, etc.

La programación competitiva es algo divertido, pruébalo, participa si te gusta.

PD: ¡Sigue mejorando a medida que practicas! Buena suerte 🙂

¡No sigas codificando! Debe asegurarse de no estar atrapado en un callejón sin salida de codificación. He conocido a muchas personas que terminan programando durante años sin mejorar.

La clave es probar cosas nuevas e intentar hacer las cosas viejas de manera diferente. Estoy seguro de que puedes decir eso sobre todas las habilidades, así que enumeraré algunos puntos específicos:

  • Aprende más idiomas. En lugar de aprender un idioma en su potencial absoluto, aprenda varios idiomas. Cada idioma tiene puntos fuertes y puntos débiles, pero lo más importante es que los enfoques de programación son diferentes. Cuantos más paradigmas vea, mejor podrá abordar cualquier problema en el futuro.
  • Usa más bibliotecas. Esto es básicamente lo mismo que los idiomas, cada biblioteca tiene un enfoque diferente para un problema. Cada biblioteca encapsula la experiencia y el conocimiento de algún equipo de desarrolladores en alguna parte, al usar esa biblioteca se obtiene una idea de cómo piensan. Cuantas más perspectivas tenga, mejor programador será.
  • Cambiar dominios. No se limite a hacer aplicaciones comerciales o desarrollo web. Pruebe controladores de bajo nivel, aplicaciones financieras, videojuegos, bases de datos, herramientas médicas o cualquier dominio en el que no haya trabajado antes. Una vez más, cada dominio tiene sus propias necesidades, prácticas preferidas y ejerce diferentes habilidades de programación. Estos enfoques diferentes tienden a trasladarse a sus proyectos futuros y le ofrecen más opciones.
  • Aprender procesos de desarrollo. Al menos deberías conocer los conceptos básicos de cosas como Scrum y Agile. Estos métodos representan las opiniones de muchos otros programadores en lo que se necesita para producir un buen software. No tiene que estar de acuerdo con ellos, pero siempre hay algo que aprender de ellos.
  • Acéptalo y sigue adelante. Los perfeccionistas no son buenos programadores. Si no puede reconocer un problema con su código, entonces se está engañando a sí mismo. Siempre habrá problemas con su código. Tienes que aprender qué es el código aceptable y cuándo es el momento de seguir adelante.

¿La programación competitiva juega un papel en esto? Claro, si quieres. Sin embargo, no es necesario. También puede atraparte rápidamente. Si pasas años resolviendo problemas de algoritmos, te perderás la gama más amplia de problemas de programación. Sin embargo, hacer la competencia o el desafío ocasionales no puede doler.

La programación es una herramienta, no un fin en sí misma.

Si bien es bueno ser un gran programador, después de un tiempo experimentarás rendimientos decrecientes. Recomendaría invertir en conocimiento de dominio además de habilidades de programación.

Dicho esto, la lista de Steve Yegge es bastante buena.

Ser bueno en la programación competitiva, es decir, ganar, y ser un excelente programador a menudo son cosas completamente diferentes.

Un programador excelente tiene una buena oportunidad de obtener buenos resultados en cursos de programación competitivos siempre que pueda olvidar las siguientes lecciones duramente ganadas

  • Siempre comprobando la validez de sus entradas
  • Manejando todas las condiciones de error correctamente
  • Documentando completamente su código
  • Obteniendo revisión de código de otros
  • Escribir excelentes rutinas de prueba, etc.
  • Tratar con todos los casos de esquina y escenarios de “no puede pasar”
  • Escribir para mayor claridad y facilidad de mantenimiento.
  • Diseñando y escribiendo para reutilizar
  • Reutilizando bibliotecas existentes, etc. siempre que sea posible

En resumen, casi todo lo que los convierte en un excelente programador.

Para que un programador competitivo se convierta en uno excelente, necesita aprender todo lo anterior hasta que sea automático.

El problema con la programación competitiva es que “terminar primero” a menudo tiene un bono en términos de determinar el ganador. Alienta un estilo de programación rápido y hacky, que nunca aceptaría en nadie que trabaje para mí.

Debería consultar la excelente respuesta de Michael O. Church a ¿Qué hace el 1% de los mejores ingenieros de software que el otro 99% no?

  • Arquitectura de software
  • Arquitectura de datos

Esto puede sonar muy claro y lo son. Sin embargo, hay muchos conceptos dentro de estos dos temas que, cuando se entiendan y apliquen, facilitarán su vida y mejorarán su programa.

More Interesting

¿Por qué es imposible tener un tipo de comparación mejor que el tiempo O (nlogn)?

¿Para qué aplicaciones son especialmente adecuados los lenguajes de programación lógica? ¿Cuándo usarías un lenguaje como Prolog? ¿Cuáles son las aplicaciones más exitosas de la programación lógica?

¿Podría hacerlo sin espacio adicional y en tiempo de ejecución O (n)?

¿Cuál de los enfoques (conexionismo, evolutivo, bayesiano, etc.) tendrá la mejor oportunidad de desarrollar un algoritmo maestro de IA?

¿Por qué los finalistas de Topcoder no comparten su experiencia en los tutoriales de YouTube para principiantes? Cualquier principiante agradecería la ayuda para desarrollar sus habilidades para resolver problemas.

¿Por qué es importante el análisis de algoritmos?

¿Por qué Java utiliza diferentes algoritmos de clasificación para diferentes tipos de datos?

¿Cuáles son algunos problemas del mundo real que podrían resolverse con la programación / codificación?

¿Podría un algoritmo informático convertirse en el presidente de los Estados Unidos?

¿Cuál es la mejor manera de ordenar una matriz de objetos en javascript?

Cómo fusionar tres matrices ordenadas en una sola matriz ordenada de manera eficiente

¿ISRO emplea el aprendizaje automático en alguno de sus sistemas de trabajo actuales?

¿Qué representan realmente los números de Grundy en un juego?

Cómo implementar un algoritmo de programación de CPU del sistema operativo que evita que se produzcan puntos muertos

¿Es posible aprender automáticamente los diferentes métodos y algoritmos de aprendizaje automático?