¿De qué manera aprender sobre algoritmos mejora sus habilidades de programación?

Hay más de una forma de aprender algoritmos.

Conocí a algunos ingenieros que los memorizaron por su nombre y pudieron escribir algo particularmente complejo con lápiz y papel que se compilaría de memoria.

De los pocos ingenieros que sé que pueden hacer eso, solo un pequeño subconjunto sabe cuándo aplicarlo a situaciones reales con solo pensarlo. Para aquellos que pueden, esto es particularmente útil cuando se hace diseño y pizarra para resolver problemas computacionalmente complejos.

Aquellos que solo conocen los nombres y fórmulas académicas son probablemente mejores programadores solo porque pasaron tiempo con buenos libros y eso es teóricamente más útil que leer novelas románticas, pero es más difícil medir cuánto mejor.

Conozco muchos más ingenieros que pasaron tiempo con algoritmos al aprender los patrones detrás de cómo funcionan las cosas. Si se colocan en el lugar, es posible que no puedan escribir nada con lápiz y papel cuando se les pide que demuestren un algoritmo por su nombre. Sin embargo, cuando se quedan solos con un problema, tienen las habilidades para resolverlo rápidamente porque han visto este tipo de cosas antes. Estoy más cerca de este último grupo, ya que me cuesta recordar lo que comí en el desayuno, y mucho menos el nombre del algoritmo que utilicé la semana pasada.

¿De qué manera aprender a patear la pelota mejora tus habilidades futbolísticas?

Todo programador que valga la pena debe tener un sólido conocimiento práctico de algoritmos. Por supuesto, algunas áreas necesitan un mejor conocimiento de ellas, pero no puedo pensar en un área que no lo haga.

Diría conservadoramente que el 95% de la programación gira en torno al uso de algoritmos, ya sea en su forma enlatada de alguna biblioteca, o adaptando algún algoritmo a un problema en cuestión o incluso (¡Egads!) Tratando de (re) inventar el algoritmo que necesita para resolver algo

La última situación es lo que generalmente sucede cuando no se sabe casi nada acerca de los algoritmos: intenta reinventar uno que ya existe, por lo general, aparece algo que es inadecuado (por ejemplo, un algoritmo de ordenación cuadrática) o simplemente incorrecto (algo que funciona en algunos casos, pero no todos). Puede quedarse atrapado durante días probando un problema prohibitivo (por ejemplo, un vendedor ambulante) porque no puede reconocerlo por lo que es.

Hay personas (muchos de ellos, creo) que saben que existen algoritmos y saben lo que hacen, pero nunca se molestan en saberlo mejor. Salen y los usan sin conocer sus áreas de aplicación, y se sorprenden cuando explotan, o tardan una eternidad, o comen toda la memoria disponible más 12891 núcleos.

Si se le proporciona un Algoritmo como una descripción escrita, o pseudocódigo, le obliga a pensar cómo va a escribir código que pueda implementarlo. Estos problemas están en el núcleo de la informática.

Es posible que nunca necesite escribir una burbuja o un tipo de intercambio, sin embargo, si sabe cómo hacerlo (en código), comprenderá cómo implementar la administración de la colección y la matriz.

Es posible que nunca necesite escribir su propia función factorial (n), o encontrar primos de orden grande, pero si escribe una, comprenderá conceptos como la recursividad, la gestión de la pila y el almacenamiento en caché.

¿Mejora tus habilidades? Por supuesto que sí … cualquier forma de aprendizaje es buena para ti.

Aquí hay una anécdota:

Un amigo estaba en una discusión de diseño en Facebook. Algunos ingenieros estaban proponiendo construir un sistema de colas distribuidas para manejar cien millones de registros. Mi amigo propuso simplemente ordenar esos registros. Resulta que resolver el problema usando la función de ordenación de Java tomó 2-3 minutos de tiempo de CPU en una sola máquina. Por lo tanto, no es necesario ejecutar un servicio distribuido :).

Comprender la complejidad del algoritmo y el tiempo de ejecución ayudó a ahorrar algunas semanas de tiempo de ingeniería y el dolor de mantener un nuevo sistema.

Para una serie de problemas, sin tener un algoritmo claro diseñado, uno simplemente no sabría qué programar.