¿Cuál es el mejor sitio de resolución de problemas para desarrollar habilidades de programación múltiples y críticas y conceptos de resolución de problemas?

Si bien puede haber algunos sitios web que cumplan con sus requisitos o la forma en que aprende, hasta ahora no he visto ninguno.

He estado enseñando programación desde 2006: he dirigido docenas de cursos de capacitación, consultoría de equipos para empresas de software y asesorado a algunos de mis ingenieros a lo largo de los años.

El mejor método para crecer como desarrollador durante los primeros años que he encontrado es construir un proyecto práctico desde cero. Lo más probable es que este no sea un gran proyecto para un cliente que confiaría ciegamente en usted sin una experiencia decente, por lo que elaborar un proyecto propio que utilice y que aborde problemas prácticos puede enseñarle mucho.

Existen diferentes habilidades que hacen que los ingenieros superiores sean más superiores que los junior, pero algunos de los principales son:

  1. Adherirse a convenciones de programación
  2. Código reutilizable
  3. Resolviendo problemas de rendimiento
  4. Monitoreo / registro
  5. Seguridad

Las convenciones son algo que puede verificar usted mismo. Existen numerosas herramientas de enlace, compiladores o analizadores de código estático puro que podrían evaluar su código en función de un libro de reglas que incluye los requisitos del lenguaje de programación o el marco que está utilizando.

Al principio, el código reutilizable es más difícil de comprender, pero construir su propio proyecto favorito que crece con el tiempo inevitablemente conducirá a una tonelada de código repetitivo que se distribuye de vez en cuando. En primer lugar, algunas de las herramientas de programación también analizan e informan sobre el código repetitivo (dependiendo de su pila técnica), y en segundo lugar, puede asignar 4 horas cada semana para refactorizar y mejorar su solución, lo que mejora la base del código y reduce la deuda técnica sin enfocarse en nuevas características. Esto también se refiere a la estabilidad de su aplicación a medida que crece, es decir, cómo los diferentes módulos juegan entre sí sin causar regresiones o errores difíciles de encontrar.

Los problemas de rendimiento son particularmente interesantes, ya que la mayoría de las soluciones genéricas resuelven un problema, pero fallan a medida que el proyecto crece debido a algoritmos no óptimos. Desde un punto de vista técnico, hay perfiladores que puede usar, junto con el aprendizaje del kit de herramientas de su sistema operativo y cómo afecta la ejecución de su código a la CPU, el consumo de RAM, las operaciones de E / S, el manejo de múltiples procesos / hilos a la vez.

Desde una perspectiva comercial, su proyecto favorito puede implementarse en un entorno de espacio aislado que es propenso a identificar errores similares. Por ejemplo, si su proyecto es una plataforma de listado de automóviles, puede ejecutar un bucle que llena la base de datos con cientos de miles o millones de automóviles y ver cómo funciona eso dentro de su aplicación. Consulte el módulo de archivo suyo, el motor de búsqueda y la vista única y vea cuál es el impacto en el rendimiento de tener 1M de automóviles en comparación con 100. Use las herramientas de creación de perfiles en mente para analizar el consumo de recursos, las consultas lentas de la base de datos y vea qué Los parámetros se ven muy afectados una vez que sus datos crecen.

Desde otro vector también puede simular mucho tráfico a su sitio web. Las herramientas de Shell, como ab o siege, le permiten ejecutar una gran cantidad de conexiones y usuarios concurrentes y ver cuáles son las capacidades de su solución. Hay herramientas de prueba de carga / estrés en línea que también se pueden comprar para fines similares. De esta manera, puede ajustar y modificar su aplicación, ejecutar las pruebas nuevamente y ver si las afecta de manera positiva.

4. Monitoreo / registro : además de la creación de perfiles y el seguimiento del rendimiento, puede implementar diferentes monitores e instalar registradores en su base de código para rastrear ciertos eventos o acciones y almacenar sus resultados para futuros análisis. A largo plazo, esto puede ser valioso a medida que su proyecto crece para identificar fácilmente los casos extremos y los errores extraños, y depurar el comportamiento del sistema no solo a través de un depurador de software (que de todos modos necesita aprender), sino a través de un sistema de registro en crecimiento que sigue de cerca las transacciones comerciales y garantiza el comportamiento adecuado de las mismas. Más adelante, esto se convertirá en un kit de herramientas de prueba automatizado: podrá construir pruebas unitarias, funcionales y de integración para su plataforma general (otro conjunto de habilidades clave de ingenieros de software).

5. Seguridad : si bien esto puede no ser trivial al principio, existen numerosas herramientas automatizadas que podrían usarse para las pruebas de penetración local de su plataforma. Pueden analizar diferentes problemas con su base de código, intentar romper contraseñas débiles o ejecutar inyecciones SQL ciegas en su base de datos. Incluso si no está claro al principio, un esfuerzo continuo le enseñará mucho sobre piratería informática blanca y cómo protegerse contra las prácticas de piratería estándar, especialmente la lista de los 10 principales de OWASP – Categoría: Proyecto de los diez principales de OWASP

Lo mejor de un proyecto para mascotas es que puede crecer infinitamente y puede desafiarse con diferentes características que le preocupan en particular. Solía ​​ejecutar tres proyectos favoritos en los días en que comencé, lancé 2 como herramientas gratuitas y también recibí muchos comentarios valiosos y procesables de diferentes usuarios. Agregar nuevas características fue un desafío, y cada característica que agregué resultó en 5 nuevos errores en mi sistema. Seguir el proceso anterior me permitió mejorar mis habilidades de codificación y comenzar a identificar problemas estándar, realizar un seguimiento de los cambios en un sistema de control de versiones, aprender a prestar más atención al rendimiento y más. Esto no excluye otros materiales de aprendizaje como libros, cursos de video y sitios de programación que complementan sus conocimientos o revisan ciertos aspectos desde una perspectiva diferente, lo cual es igual de valioso.

¿Cuál es el mejor sitio de resolución de problemas para desarrollar habilidades de programación múltiples y críticas y conceptos de resolución de problemas?
Por favor no mencione Codeforces, Topcoder, Hacke
rrank, Codechef

Pide los mejores sitios para resolver problemas, pero le prohibió a la gente mencionar algunos de los mejores como topcoder, hackerrank y codeforces.

Creo que deberías pedir sitios alternativos, prueba estos:

  • Kattis, Kattis
  • Sobre nosotros – Proyecto Euler

Supongo que estás hablando de programación competitiva.

Hay un sitio llamado USA Computing Olympiad que contiene muchos problemas de programación que puede resolver.

¡Feliz codificación!

codechef, spoj y topcoders.