He estado haciendo programación competitiva durante años, pero ahora me encuentro despistado en mi clase de Algoritmos. ¿Qué tengo que hacer?

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?

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.

  • Deja de tomar notas.
  • Escuche atentamente al instructor y asegúrese de comprender.
  • Si no entiende, haga preguntas.
  • Obtenga un tutor, lea otro libro o encuentre un buen video de YouTube.

Esto tampoco es específico para una clase de Algoritmos.

Me sorprendí varias veces mientras tomaba notas y descubrí que interfería con mi capacidad de escuchar al profesor al mismo tiempo y comprender. Estoy seguro de que no es así para todos los estudiantes, pero lo sugiero en caso de que también sea tu problema.

De hecho, al hacer esta técnica, en realidad pillé a mi profesor de Química Orgánica cometiendo errores. La primera vez que sucedió, se rió y dijo: “Solo estaba verificando para ver si estabas prestando atención”. Pero la verdad del asunto es que no estábamos haciendo reacciones fáciles de 1 paso … Lo estábamos haciendo mucho tiempo, reacciones complicadas de varios pasos, por lo que es muy fácil cometer errores. Y si no lo hubiera corregido (en forma de pregunta para ser cortés), toda la clase tendría notas incorrectas.

De hecho, tomé notas en todas mis clases, pero nunca comencé a escribir algo hasta que entendí por primera vez lo que se decía. Y si no entiende, no tenga miedo ni se avergüence de hacer preguntas.

Si tiene miedo de hacer preguntas, la mayoría de los profesores se reunirán con usted en su tiempo libre y lo ayudarán a comprender los temas.

Otro truco que un par de profesores han compartido conmigo … es leer el capítulo antes de ir a clase (no después). Luego, habrá formulado muchas preguntas, para cosas que no comprende.

Leer otro libro sobre el mismo tema puede ayudarlo a obtener una perspectiva diferente.

Entonces … youtube tiene algunas de las mejores personas del mundo que hacen contenido que les apasiona. Incluso Google y Oracle tienen algunas gemas reales … Pero si encuentra que todavía necesita ayuda, necesitará un tutor donde pueda hacer preguntas y obtener comentarios inmediatos. E incluso puedes obtener un tutor en línea también.

Buena suerte !

Siéntate y aprende con cuidado. Coloca un gran muro mental entre las formas en que piensas mientras compites y las formas en que piensas en clase.

En el mundo real, las soluciones van a estar en algún punto intermedio: esa es la magia de la ingeniería.

Pero sin una comprensión de la arquitectura más formal y los patrones de ingeniería (ya sea que se aprendan o no en la escuela), no podrá encontrar ese punto medio más adelante.

El software de producción, escrito como código competitivo, terminará mal.

Cálmese. Si se asusta, solo empeorará las cosas. Cuando te sientas perdido, habla con tu maestro, con los TA y con los otros estudiantes. Y Stack Overflow siempre es un gran recurso también.

Mucho de lo que vas a tratar en los cursos universitarios de CS es más complicado que realmente difícil. Una vez que aprendes el truco, no es demasiado difícil de hacer. Pero a veces necesitas ayuda para descubrir esa parte.

Ya has comenzado un camino que podría ser gratificante. El problema es que aún no tiene la profundidad o la experiencia para estar bien redondeado. Le sugiero que aclare su mente y considere sus clases como una oportunidad para aprender nuevas formas de ver las cosas. Si quieres tener mucho éxito, elige algo que sea una perra y sé muy bueno en eso.

Si ha vivido y trabajado sin él durante años, ¿por qué necesita hacer algo?

Pero si sientes necesidad de eso, solo compra un libro 🙂