Consejos para estudiantes programadores.

Hola Habr! Les presento la traducción del artículo " Consejos para estudiantes de programación ".

Hay muchas cosas que me gustaría saber cuando comencé mi viaje como estudiante de software. Han pasado casi 10 años desde entonces y, desafortunadamente, no puedo compartir mi experiencia y conocimiento con mi "yo" pasado, solo con mis colegas más jóvenes. Esta publicación consta de algunos consejos útiles que me gustaría escuchar cuando tenía 18 años.

Decide que necesitas


Por supuesto, no necesita estar familiarizado con la lógica formal o las categorías si solo desea aprender a crear algo práctico (por ejemplo, una interfaz) y hacer eso. Hay dos caminos principales que difieren en esfuerzo, duración y resultado.

  • Puede dominar rápidamente un área, digamos en uno o dos años. No será inútil, hará algo y ganará la vida. Hay suficientes oportunidades de trabajo (al menos por ahora) que no requieren mucha flexibilidad.
  • Puede convertirse en un especialista bien establecido que haya dedicado mucho tiempo y esfuerzo a cosas fundamentales. Entonces puedes adaptarte, cambiar de carrera se vuelve relativamente fácil. Puede hacer aprendizaje automático, luego verificación formal, luego algo de programación de bajo nivel para el comercio, o ir al desarrollo del juego. Se necesita tiempo y dedicación: evaluaría este proceso durante al menos 6-8 años.

Abogo firmemente por el segundo camino, porque es más universal, interesante y aporta más a largo plazo. La tecnología cambia constantemente, por lo que querrá cambiar rápidamente a nuevas tecnologías.

Matemáticas


Aprende matemáticas porque las matemáticas son útiles. No puedo enfatizar esto. Cuando comience, podría pensar que no necesita álgebra lineal porque no conoce las aplicaciones. Sin embargo, para cualquier aprendizaje automático no trivial, lo necesitará. Necesitas estadísticas y credibilidad. Necesitará lógica, combinatoria, teoría de conjuntos, todo tipo de matemáticas discretas, teoría de grafos, teoría de computabilidad, gramáticas formales, cálculo lambda, semántica formal, topología, teorías de tipos, teoría de números, grupos, anillos, campos, categorías.

Nuevas tecnologías están surgiendo constantemente. Muchos de ellos se basan en modelos matemáticos existentes. Si conoces bien las matemáticas básicas, obtienes beneficios muy buenos:

  • La elección entre las nuevas tecnologías será mucho más fácil.
  • Comprenderá dónde deben aplicarse los nuevos métodos y dónde no.
  • Comprenderá por qué las soluciones son lo que son. Luego puede modificarlos para adaptarlos mejor al contexto.

Por ejemplo, tuve la impresión de que pocas personas entienden por qué no siempre tiene que usar el método de mínimos cuadrados para evaluar qué tan bien coincide su regresión lineal con los datos. Esto es necesario cuando los errores se distribuyen normalmente con el valor promedio correspondiente. Si este no es el caso, aplicará ciegamente una solución inadecuada sin siquiera pensar que parte del modelo necesita ser ajustado.

Aprende matemáticas para aprender el pensamiento matemático. Escribir evidencia te hace estricto en tus acciones. Siempre pensará en todas las rutas de ejecución posibles que su programa puede ejecutar para no introducir errores y problemas de seguridad. La claridad de pensamiento obtenida de la creación de evidencia es preciosa. También lo ayudará a escribir código breve y conciso.

Aprende lo mejor, usa las mejores herramientas


Elige tu primer idioma. Debe estar bien diseñado, es decir, tener:

  • Coherencia
  • Pequeño núcleo
  • La falta de complejidad innecesaria (por ejemplo, al aprender un idioma "complejo", hay cosas que solo necesita saber o recordar constantemente, no aportan nada útil para el aprendizaje).
  • Baja probabilidad de "pegarse un tiro en el pie".
  • Alto nivel, porque la programación es la solución de problemas y problemas , y no el dominio en ningún lenguaje. Conocer todas las pequeñas características de su idioma favorito no significa ser perfecto en la programación.

Recomiendo elegir uno de los siguientes idiomas:

  • Esquema (hay un excelente curso introductorio clásico "Estructura e interpretación de programas de computadora").
  • Smalltalk
  • Eiffel
  • ML

No tenga miedo de ser engañado por la aparente impopularidad de estos lenguajes, en el mundo de la programación, la popularidad no significa calidad.

¡No empieces con Python, te lo ruego! Está mal diseñado, es inconsistente y no te enseña a pensar estrictamente. No es necesario acostumbrarse a la mentalidad de "bueno, generalmente trabajando". Python tiene sus usos, pero no como primer idioma.

Si se acostumbra a lenguajes de baja calidad y herramientas de baja calidad, software de baja calidad y soluciones de baja calidad, inevitablemente los repetirá en su propio trabajo . Sea crítico, haga preguntas, critique todo, busque inconsistencias y deficiencias.

Por ejemplo, imagine que está aprendiendo un nuevo idioma Go. Google "Go language apesta" y lee por qué la gente lo critica. Algunos comentarios serán menores, pero otros realmente tendrán sentido. Probablemente obtendrá nuevos conocimientos al leer los comentarios críticos, evaluarlos y luego determinar si importan o son solo palabras vacías.

Piensa por ti mismo


He estado enseñando programación (C y ensamblador) desde 2009 a estudiantes de la Universidad ITMO en San Petersburgo. Muchas personas tienen problemas de programación y nunca logran aprender esto porque no crean código. Cuando consiguen el trabajo, intentan simular una solución existente, quizás tomando algunos fragmentos de Stack Overflow y personalizándolos a su gusto. Ok, tengo una solución, ¿qué más se necesita?

Debes aprender a escribir código desde cero. ¡Los tipos de habilidades necesarias para hacer esto son muy diferentes de las habilidades obtenidas al interferir con el código existente!

Programar es hacer una elección consciente. Está en el estado A (tiene acceso a varias funciones / bibliotecas de idiomas y sabe cómo combinarlas); desea obtener el estado B (las construcciones de lenguaje se combinan para resolver el problema). ¿Cómo se construye una ruta de A a B? Ahora esto es programación real, resolución de problemas .

Cuando comienzas a escribir programas desde cero, se vuelve un poco difícil, pero es absolutamente necesario aprender a construir cosas desde cero. Para mejorar las habilidades de resolución de problemas, es importante estudiar algoritmos y estructuras de datos. Tome un buen libro y resuelva problemas de olimpiadas en línea. Recomiendo los algoritmos de Dasgupta para empezar, luego el libro clásico de Cormen. Todo esto te abrirá un mundo completamente nuevo, lo prometo.

Una parte adicional del proceso de creación de software es el desarrollo de la arquitectura de software; Es imposible aprender cómo estructurar adecuadamente sus programas sin crearlos de 0 a 100.

Amplía tus horizontes


Programe todos los días, haga proyectos de terceros todo el tiempo. Esta es una manera muy simple (y en su mayoría precisa) para que yo, como maestro, comprenda que es muy probable que mi estudiante tenga éxito. Una pregunta: ¿qué programas en tu tiempo libre?

Sus maestros simplemente no tienen tiempo suficiente para hablar sobre todo. Al final, después de salir de la universidad, debes continuar estudiando por tu cuenta hasta que te jubiles. Si te apasiona lo que haces, aprenderás diferentes tipos de software para divertirte, y esto te dará mucha más experiencia y habilidades que tus compañeros menos motivados.

Idealmente, deberías probar todo: escribir tu propio compilador, tal vez un sistema operativo de juguete, un servidor http, un motor de base de datos, juegos, rakecasting, crear algún tipo de redes neuronales, escribir una aplicación móvil simple, escribir un programa incorporado ..., puedes continuar tu mismo. Pon todos tus proyectos en GitHub y siéntete orgulloso de ellos: tu futuro empleador puede echarle un vistazo. Use esta cartera para sus propios fines.

Es bien sabido que reclutar a un buen programador es extremadamente difícil. Muchos programadores que solicitan un trabajo tienen problemas para escribir cosas triviales como FizzBuzz. Si tiene proyectos existentes alojados en GitHub, el empleador estará más seguro de que usted es adecuado para él.

Ponte a prueba con diferentes herramientas e idiomas. Si alguien te dice que todos los idiomas son similares, es una simplificación o una falta de experiencia. Déjame explicarte un poco.

Un modelo computacional es un conjunto que consiste en operaciones básicas y formas de unirlas en el orden necesario para crear algoritmos complejos. Algunos lenguajes tienen modelos computacionales muy similares, y algunos varían ampliamente.

La programación es mucho más que el conocido C / Python / Java / C ++ / C # / Go / Javascript, construido sobre los mismos principios: imperativo, estructural, un poco con OOP y azúcar sintáctico para simular otros estilos de programación. El mundo de la programación es ENORME. Que tal:

  • Lenguajes de programación funcionales industriales con sistemas típicos complejos y bien pensados ​​(Haskell, Ocaml).
  • Lenguajes funcionales con tipos dependientes que permiten no solo programar, sino también registrar evidencia (Coq, Agda, LEAN).
  • Lenguas Concatenativas (Adelante).
  • Programación lógica (Prolog, Refal).
  • Máquinas de estados finitos (expresiones regulares, Promela).
  • Lenguajes fuertemente extensibles que le permiten implementar casi cualquier construcción de sintaxis, como Lisp, Forth, Camlp4 / 5, Rebol.
  • Lenguajes específicos de dominio (JetBrains MPS, XText).

Cada nuevo modelo de computación es difícil de entender, porque es una nueva forma de pensar. Pero el esfuerzo y el tiempo lo valen.

Ser sociable


Tuve mucha suerte de conocer gente increíble. Mis asistentes me ayudaron a mejorar mis habilidades, aprender algo nuevo, ver el mundo desde una perspectiva diferente. Aislarse a sí mismo no le hará ningún bien a largo plazo: necesita que otras personas hablen para comprender lo que están haciendo, lo que están pensando.
Si su amigo leyó un artículo interesante y se lo contó, simplemente ahorró mucho tiempo porque le dio conocimiento procesado y cristalizado.

Apégate a personas apasionadas e inteligentes e intenta aprender de ellas. Se sorprenderá de cuánto puede aprender durante el almuerzo con sus camaradas que desean compartir los detalles de su trabajo o investigación. Esta variedad de ideas es una de las principales razones por las que corporaciones como Google le dan comida gratis.

Pregunte a las personas que son mejores en la revisión de códigos y en la lectura de su código. Al aprender el trabajo de otra persona, puedes aprender mucho. Las revisiones de código lo ayudarán a aprender a escribir código aún mejor. Esta es quizás una de las formas más efectivas para convertirse en un mejor programador muy, muy rápido.

Escribir pruebas


Es tan importante que necesita un artículo separado para esto. Las pruebas son una parte integral de la creación de software, e incluso personas como yo que trabajan en software probado formalmente (lo que significa que debe ser formalmente rigurosamente matemático) escriben pruebas, aunque podría pensar que las garantías dadas por la evidencia son mucho más fuerte

Espero que esto pueda ayudar a alguien a tener una mejor imagen, aprender más rápido y convertirse en un mejor programador; Si tiene alguna pregunta, con gusto lo ayudaré. Buena suerte

Source: https://habr.com/ru/post/es425363/


All Articles