¿El estudio de algoritmos es relevante para el desarrollo actual?

Una cita famosa es “la optimización prematura es la raíz de todo mal”. Eso significa que no debe adivinar de antemano qué partes de su código serán un cuello de botella. Si hace eso, pasará mucho tiempo optimizando el código que se ejecuta muy raramente, o simplemente no necesita ser rápido (como algunos trabajos en segundo plano, tal vez). En cambio, comience a medir eso cuando la aplicación esté cerca de completarse, realice algunas pruebas de carga y descubra dónde duele el código.

Pero para hacer eso necesitas saber cómo optimizar el código. Debe comprender la O (n) del código que está escribiendo. Muchas veces, no es necesario optimizar el código, ya sea porque no necesita ser muy rápido o simplemente no se ejecuta con tanta frecuencia. Sin embargo, en algunos casos, el código debe ser MUY rápido, tal vez para darle al usuario una sensación de retroalimentación inmediata en una interfaz de cliente, o un fragmento de código que se ejecuta varios miles de veces por segundo. Un gran programador sabe de qué manera es apropiado en un escenario dado.

Agregar servidores NO es la solución. Facebook, Google y casi cualquier otra compañía de tecnología en el Área de la Bahía que maneja grupos de servidores en miles de personas echarían a su amigo más rápido de lo que podría decir “aumento de carga exponencial” si lo escucharan decir algo como “simplemente agregue más máquinas”, porque es completamente retrasado

Incluso si ignoramos por completo el hecho de que los servidores se convierten en un gasto bastante grande una vez que comienzas a comprarlos en paquetes de 100, y también ignoramos por completo el hecho de que el fragmentación y la replicación son problemas muy difíciles , todavía es bastante retrasado.

Agregar más máquinas funcionará en una situación teórica en la que el uso de su CPU aumenta linealmente con el uso de la aplicación. Por ejemplo, si obtiene 1000 usuarios más, simplemente agrega un servidor. Si obtiene 2000 usuarios más después de eso, simplemente agregue dos servidores.

Pero si pasa poco o nada de tiempo optimizando su código, puedo GARANTIZARle que hay muchos puntos en su código donde el uso de la CPU aumenta exponencialmente:


Es decir, a 1000 usuarios, necesita 1 servidor. Con 2000 usuarios, necesita 3. Con 3000 usuarios, necesita 7, y así sucesivamente.

Si tiene un código como ese, buena suerte resolviéndolo agregando más servidores una vez que su uso comience a aumentar. Estará quemando todo su tiempo y dinero construyendo esa granja de servidores, y aún no podrá mantenerse al día.

¡Sígueme si estás interesado en este tipo de cosas!

Ah, y si te gusta mi escritura, no te pierdas más.
sígueme en Quora y Twitter (http://twitter.com/mpjme)

Absolutamente tienes que entender los algoritmos. La mayoría de los problemas difíciles requieren soluciones algorítmicas y no se pueden resolver lanzándoles hardware.

Pero muchas empresas no tienen problemas difíciles. En esos casos, tiene razón. Pero la mayoría de las empresas tienen problemas difíciles; de lo contrario, no habría demanda de programadores informáticos.

El hardware puede ayudar, más RAM puede ayudar. Pero tiene sus límites. Por ejemplo, algunas cosas simplemente no se pueden hacer al mismo tiempo, por lo que tener 1000 servidores cada uno con CPU de múltiples núcleos múltiples no hará que funcione más rápido que una sola CPU con núcleo en su escritorio. Algunos problemas se benefician al tener mucha RAM, pero nuevamente solo hasta cierto punto.

Tiende a aumentar mucho más la eficiencia si comienza a utilizar un algoritmo y / o una estructura de datos más eficientes. Al menos en cuanto al costo en el peor de los casos donde el algoritmo no funciona mucho mejor que simplemente lanzar hardware adicional en el viejo algoritmo ineficiente. Pero en la abrumadora mayoría de los problemas, usar un algoritmo ingenuo es exponencialmente más lento que usar un algoritmo más óptimo.

Por lo tanto, “si” el problema puede resolverse simultáneamente a través del método ingenuo, entonces la norma es que el aumento necesario en hardware es exponencial. Por ejemplo, en lugar de 2 servidores, ahora podría necesitar 100. Mientras que el algoritmo óptimo significa que en realidad solo podría necesitar 1/10 de un servidor.

La única preocupación alternativa que puedo pensar podría ser su razón para preferir el aumento de hardware: el tiempo de implementación. Pero eso también supone que el rediseño de dicho algoritmo lleva más tiempo que ordenar, esperar, configurar y corregir fallas en el nuevo hardware. Este no es siempre el caso, por ejemplo, cambiar de una búsqueda lineal a una tabla hash puede ser un cambio tan pequeño como unos pocos caracteres en su código.