En primer lugar relájate. Lo que estás pasando es normal. Si te hace sentir mejor saber que al salir de la escuela y en la industria, las habilidades que necesitarás de inmediato son las que ya tienes. Dicho esto, las habilidades que aún tienes por delante serán cruciales más adelante para permitirte seguir ciertos caminos en tu educación. Dejame explicar.
En cualquier campo de la ingeniería hay dos preguntas principales: ¿cómo? ¿y por qué? (¿algunos podrían agregar cuándo? pero hoy esto es más una cuestión de negocios que pura ingeniería). La codificación competitiva le dio una buena comprensión de la pregunta anterior. Probablemente sepa cómo funcionan algunos algoritmos y ha aprendido cómo implementarlos de manera eficiente.
Sin embargo, nunca tuvo que lidiar con responder por qué. ¿Por qué un algoritmo es más adecuado para una tarea? ¿Por qué este algoritmo es mejor que otros? Lo más importante, ¿por qué este algoritmo es el mejor?
- ¿Las funciones de JavaScript como map (), reduce () y filter () ya están optimizadas para recorrer la matriz?
- ¿Cuál es el enfoque algorítmico para encontrar el primer entero positivo que falta si se proporciona una matriz entera sin clasificar en O (n) complejidad de tiempo y espacio constante?
- ¿Puede un algoritmo descubrirse a sí mismo?
- ¿Qué tiene de malo el algoritmo de recomendación de la historia de Quora?
- ¿Cuáles son los algoritmos de coincidencia de patrones más comunes?
La teoría entra en juego al responder esas preguntas; La parte científica en Informática.
Para comprender la respuesta de por qué un algoritmo es el mejor (u óptimo), debe comprender las limitaciones de la computabilidad. Necesitas entender la teoría de la complejidad. Supongo que esto es lo que te abruma en este momento. La teoría de la complejidad es bastante importante al menos para comprender, no dominar si la teoría no es su taza de té, si desea convertirse en un ingeniero de software realmente bueno, no solo un codificador.
Otros temas teóricos prácticamente útiles (eventualmente) son los autómatas, las matemáticas discretas, la lógica matemática y, en cierta medida, incluso el análisis matemático.
La diferencia entre un codificador y un ingeniero tiene que ver con la amplitud de habilidades. Un codificador suele ser una persona que conoce uno o dos idiomas, sus bibliotecas y sus usos principales. Un ingeniero maneja un espectro más amplio de herramientas, pero también tiene una buena comprensión de la plataforma y el sistema subyacentes. Un ingeniero generalmente está mejor equipado para razonar y decidir por qué y cómo; ella elaborará un plan para una solución y luego hará que los codificadores lo implementen.
La etapa en la que se encuentra ahora establecerá una base que le permitirá más tarde decidir qué tipo de profesional quiere ser. El ingeniero probablemente está escribiendo menos código y tiene que estar informado sobre todos los desarrollos tecnológicos. El codificador tiene diferentes tipos de problemas para resolver. No es necesariamente un trabajo más fácil, pero es más práctico, se necesita menos teoría para ser bueno en eso.
No estoy diciendo que los codificadores no entiendan los algoritmos completamente. Cuanto más practiques y crezcas, más profunda será tu comprensión. Algunas de esas teorías oscuras se volverán obvias después de un punto. Sin embargo, si desea continuar en campos más avanzados como la ingeniería de sistemas (lo esencial: lenguajes de programación, sistemas de tiempo de ejecución, programadores, sistemas operativos, etc.) o sistemas distribuidos (protocolos de consenso, elección de líderes, tolerancia a fallas, internetworking, etc.), usted ‘ Es mejor seguir el curso y no esperar a aprender a través de la práctica.
Hay muchos otros temas más complicados además de los algoritmos.