
Los algoritmos. Esos conceptos abstractos que se estudian en la teoría de computación y que luego raramente los usas en tu trabajo diario programando. ¿Cuándo fue la última vez que creaste una lista enlazada o diseñaste un algoritmo para búsqueda eficiente de datos? Probablemente nunca. De hecho, cualquier lenguaje o plataforma que se precie te ofrecerá "de serie" el 90% de los algoritmos que vas a necesitar usar alguna vez...
Sin embargo, cualquier problema que debas resolver usando un programa se reduce al final a crear un algoritmo, una serie de pasos lógicos y ordenados que te permiten resolver el problema de la manera más eficiente posible. Conocer la teoría y los conceptos que hay debajo de los algoritmos comunes (los que ya te da resueltos el propio lenguaje), aunque puedan parecer abstractos, en realidad marcan la diferencia entre un buen programador y un gran programador. ¿Por qué? Por muchos motivos entre los que cabe destacar:
- Los algoritmos nos enseñan a pensar de manera abstracta, lógica y ordenada.
- Con ellos aprendemos técnicas de análisis que nos ayudan a comparar posibles soluciones a un problema y saber elegir la más apropiada.
- Entenderemos mejor cómo funcionan por debajo muchas funcionalidades que usamos a diario, pudiendo sacarles más partido y optimizar su uso.
- Aprenderemos maneras poco intuitivas e interesantes de resolver muchos problemas. Este conocimiento puede que no nos resulte útil en el trabajo diario, pero el día en que surja la oportunidad de usarlo, será como una bendición divina.
En definitiva los algoritmos nos ayudan a programar de manera más eficiente y a escribir mejores programas.
Un algoritmo es un concepto y por lo tanto no depende del lenguaje en el que esté implementado. Así que para aprenderlos no es necesario atarse a un lenguaje de programación, pero ayuda tener implementaciones concretas que te los enseñen en la práctica.
Un recurso estupendo que hemos descubierto hace poco es el Swift Algorithm Club. Se trata de un repositorio de GitHub en el que el programador holandés Matthijs Hollemans ha explicado y resuelto con el lenguaje Swift decenas de algoritmos típicos en computación.
Los algoritmos están clasificados por categorías, como por ejemplo, búsqueda, ordenación, compresión de datos, estructuras de datos... Incluso sugiere algunos especialmente importantes para comenzar. Cada uno de estos algoritmos cuenta con una página explicativa sobre cómo hacerlos y una implementación completa en lenguaje Swift junto con los tests pertinentes. Por ejemplo, este es el correspondiente a un Pila o a una búsqueda binaria.
Todo el código es compatible con XCode 7.2 y Swift 2.1, y podemos bajarnos el repositorio completo (o parcial) para practicar sin conexión a Internet.
Un recurso muy interesante que nos dará muchas horas de entretenimiento.