¿Es cierto que si me vuelvo competente en estructuras de datos y algoritmos, puedo aprender cualquier lenguaje de programación y habilidades técnicas muy rápido?

No. Tal vez te confunde un programador competitivo demasiado entusiasta que solo conoce estructuras de datos y algoritmos (y nada más) y hace un gran negocio. [Yo fui uno entre esas personas en el pasado].

Otra pregunta es: ¿qué estructuras de datos y algoritmos? Hay demasiados y es imposible y no tiene sentido aprenderlos porque algunos se usan solo en dominios particulares y otros son puramente de interés teórico. Por ejemplo, la mayoría de la gente sabe ordenar porque es un algoritmo general. ¿Qué pasa con el algoritmo W? Las personas que trabajan con sistemas de inferencia de tipos pueden encontrarse con tales cosas. Es decir, es específico del dominio y no tiene mucho sentido que una persona ajena a él aprenda.

Eres competente en algoritmos, estructuras de datos y matemáticas discretas no me da una imagen completa de ti como ingeniero de software (aunque es bueno tenerlos en tu caja de herramientas de resolución de problemas). No me dice nada acerca de su capacidad para construir y pensar en abstracción, diseñando arquitectura de la aplicación que también son importantes para construir software robusto.

Permítanme tomar un ejemplo: la multiplicación de matrices. Tú lo sabes. Tu no? Ahora puede modificarlo para aprovechar la memoria caché. ¿Qué sucede si quiero usar otros recursos de hardware para acelerarlo (como GPU)? Necesitas tener una idea aproximada de su arquitectura.

Algunas buenas lecturas

  1. Método amigable de caché para multiplicar dos matrices
  2. ¿Qué es el código “compatible con caché”?
  3. Optimice su código: multiplicación de matrices

Después de leerlos, puede tener una idea de que no todo son algoritmos y estructuras de datos.

Como siempre digo, los lenguajes de programación son herramientas para lograr un resultado específico .

Cuando programa, en realidad está formando una solución que construyó para resolver un problema, con un lenguaje de programación, por lo tanto, es una herramienta para su uso.

Si aprende y se vuelve experto en estructura de datos y algoritmos, se convierte en un solucionador de problemas de alto nivel y un constructor de soluciones. No garantiza el aprendizaje de lenguajes de programación muy rápido, pero le da una gran idea de lo que son y lo que hacen. Por lo tanto, puede asignar específicamente lo que desea hacer y lo que mejor se adapta para hacer que su solución sea eficiente y elegir un lenguaje de programación que satisfaga sus necesidades, ya que elimina la confusión. (Siendo una solución matemática o base de datos necesaria o manipulación de texto o etc.)

Saber lo que quieres te ayudará a aprender algo más rápido.

Nota: ¡Conozco maestros de algoritmos que casi nunca codifican! Simplemente ponen su magia en papel o pizarras blancas y la explican, e intentamos codificar. 😀

Las estructuras de datos, los algoritmos y los lenguajes de programación son todas herramientas. Sin embargo, todos son diferentes tipos de herramientas. Conocer las estructuras de datos y los algoritmos puede ayudarlo a aprender nuevas estructuras de datos y nuevos algoritmos. Ninguno de los dos lo ayudará a aprender lenguajes de programación. Conocer un lenguaje de programación puede ayudarte a aprender otro más rápido, pero ninguna de estas cosas te ayudará a aprender habilidades técnicas.

No aprendes programación aprendiendo las herramientas utilizadas por los programadores. Aprendes programación por programación. Debe aprender a descubrir qué es lo que se desea, cómo encontrar ideas de soluciones para lograr lo que se desea, diseñar esas soluciones y crear esas soluciones. Las estructuras de datos y los algoritmos realmente no se aplican al proceso hasta que llegue a la etapa de diseño, y no hasta que llegue al nivel detallado. Son más importantes en la etapa de creación, que también es el dominio del lenguaje de programación (aunque también pueden influir en el diseño).

Aprender a balancear un bate de béisbol no te ayuda a aprender a atrapar una pelota con un guante de béisbol. Aprender a usar el guante también no te ayudará a entender las reglas del juego. Saber todo eso te ayudará a jugar, pero si no practicas y realmente juegas, no serás bueno en eso. Lo mismo es cierto de la programación.

Me centraré en el tema de la informática, suponiendo que en cada dominio particular necesitará conocimiento dependiendo de ello.

No aprenderá fácilmente CUALQUIER lenguaje o habilidad de programación porque la ingeniería de software es compleja.

Si nos centramos solo en los lenguajes de programación, necesitará diferentes habilidades para aprender un lenguaje OO en lugar de un lenguaje funcional, solo por mencionar 2 estilos de programación comunes.

Ser competente en estructuras de datos y algoritmos es una de las condiciones necesarias para tener un punto de partida sólido para poder aprender cualquier lenguaje de programación o habilidad. Podría necesitar otro conocimiento también. Por ejemplo:

  • cómo funcionan los sistemas operativos de tiempo compartido, cómo diseñar un programa multitarea (multiproceso o multiproceso, qué es un proceso y un subproceso, las diferencias entre ellos, cómo acceder a los recursos compartidos de manera coherente);
  • cómo funciona el sistema de archivos;
  • cómo funciona la memoria volátil para evitar la pérdida de memoria o reducir la frecuencia de fallas de página;

En muchos casos, su marco de software se ocupará de algunos de estos problemas por usted.

Entonces, en conclusión, lo que necesita saber depende del marco de software que usará, así como del entorno en el que va a trabajar.

No. Te ayuda tanto como saber qué es un pentámetro yámbico te ayuda a aprender francés. La programación no es matemática. Es la resolución de problemas y el pensamiento lógico organizado: muchos programas útiles se escriben con nada más que aritmética básica.

En el mundo real, generalmente ordena una matriz como esta:

array.sort ()

Por lo general, no necesita saber qué algoritmo está usando la biblioteca o incluso (especialmente si está usando PHP) cuál es realmente la “matriz”. Es solo una estructura a la que puede referirse por número de elemento y “ordenar” la reordena.

Eso no quiere decir que los algoritmos y las estructuras no sean importantes, solo que generalmente no son sus preocupaciones centrales, al igual que las metáforas y las similitudes no son problemas importantes para la mayoría de las personas que escriben en inglés. La existencia de la poesía no cambia eso. Es solo un valor atípico esotérico de poca relevancia para los profesionales típicos la mayor parte del tiempo.

Debes aprender la estructura de datos y los algoritmos si quieres ser un buen programador, ¿te diré por qué?

Como programador, no solo querrás escribir una solución a un problema dado. Te gustaría escribir la mejor solución. Debería darte el mejor rendimiento en varios casos. Ahora el rendimiento depende de la gestión de la memoria, las estructuras de datos, los algoritmos, la concurrencia, etc. Si analiza allí, todos están relacionados entre sí. Tenemos pocos algoritmos en los que necesitamos usar cierta estructura de datos, que se asocia directamente con la memoria. Necesitamos manejar la concurrencia también en nuestro código. Entonces, aprende mucho cuando lee sobre varios algoritmos, estructuras de datos, comportamiento en varias entradas, etc. Y si comprende bien estos, puede escribir el mejor código. La programación de aprendizaje no sería muy difícil para usted después de esto.

No.

Si quiere ser bueno en la programación, solo necesita ser bueno en la programación.

Creo que mucha gente busca este tipo de cosas “Si aprendo x, puedo ser bueno en y”. Y no funciona así.

Si quieres ser bueno en el golf, aprende a jugar golf.

Si quieres ser bueno programando, haces programas.

Olvida todos los “si” y todos los “peros”.

Solo sé bueno escribiendo programas. Elige un proyecto y escríbelo.

No.

Pueden ser de ayuda.

Pero mucha programación se trata de dominios complejos.

Ejemplo rápido: obtuve un trabajo como programador de juegos y terminé aprendiendo sobre productos cruzados, ángulos de Euler y cuaterniones.

Mi conocimiento de las listas vinculadas y el tipo de inserción no aceleraron esto.

En general, sí, si reemplaza ‘any’ por ‘many’. Pero, ¿cómo puede dominar las estructuras de datos y los algoritmos? Trabaja en ellos en muchos lenguajes de programación diferentes. Por lo tanto, no es un atajo, y leer solo no es suficiente.

No pienso Cada lenguaje, además de las estructuras de datos, trae muchas características que los diseñadores de idiomas creen que serán útiles para desarrollar software. Estas características difieren mucho. Dominar C ++ o Haskell puede llevar mucho tiempo. Python puede tomar una semana más o menos.

Pero DSA seguramente lo ayudará a resolver el problema a un nivel superior.

Hacer una mortaja y una espiga bien ajustadas es una forma de unir dos piezas de madera. Pero la carpintería de mortaja y espiga no es fabricación de muebles … o muebles. Las estructuras de datos y los algoritmos podrían ser algunas de las muchas cosas que uno podría necesitar en el curso de la programación para obtener una apariencia de producto de software. Lamentablemente, no hay atajos o trucos para aprender a programar. Como otros han indicado, uno aprende programación haciendo productos de software.

No.