¿Cómo se puede mejorar sus habilidades de optimización de código?

Un problema de optimización es el problema de encontrar la mejor solución de todas las soluciones factibles, bueno, eso es lo que dice wiki sobre la optimización. En su mayor parte, en el ámbito de la programación, la optimización se siente como un Arte y una forma equilibrada de elegir qué optimizar y qué no. Cuándo optimizar y cuándo no.

A menudo conduce al auto sabotaje si no se ejecuta con cuidado.
A menudo, la optimización prematura puede provocar o es el resultado de

  • Código menos claro.
  • Mala arquitectura de código / arreglos.
  • Codificación menos segura.
  • Horas de programación desperdiciadas.

Aproximadamente el 97% del tiempo no necesitará optimización y para el resto el 3% solo debería preocuparse si es algo que se pueda cuantificar. La cuantificación puede ser cualquier cosa, desde el tiempo de respuesta, el costo incurrido, el uso de CPU, los requisitos de RAM, el requisito de subprocesos y cualquier cosa intermedia.

Primero debe comprender cuándo exactamente necesita optimizar su código. Luego puede proceder a optimizar su código. Necesitamos entender que cada tecnología es diferente y necesitaremos una estrategia y un enfoque diferentes para la optimización. No hay una bala de plata para lograr eso y puede suceder en diferentes niveles de granularidad.

El enfoque ideal sería evitar la necesidad de optimizar todos juntos mediante la inclusión de mejores prácticas fáciles de adaptar, que incluyen:

Iniciar o avanzar hacia una buena / mejor arquitectura

Elija o migre hacia la estructura de datos correcta

La base de datos: estructura correcta de la base de datos

Optimizar para la memoria.

Aunque estos 4 pasos son los bloques básicos para la optimización del código. Debe comprender en detalle qué se debe hacer exactamente en cada paso.

Una vez que tengamos una visión clara de las cosas que deben optimizarse, es posible que deseemos hacer un elemento / optimización a la vez. Aunque esto puede parecer demasiado trabajo y tiempo involucrado, esto garantiza una alta disponibilidad y granularidad de nuestros esfuerzos de optimización. Esto también conduce a menores posibilidades de propagación de errores en todo el sistema mientras mantiene bajo el costo de optimización.

Como esta es una pregunta general, daré algunas prácticas generales que sigo:

  1. No optimice: en serio, si algo es O (n ^ 2) y puede ser O (log2 n) y su peor conjunto de datos es decir hasta 1000 elementos, no se moleste. Si esto aún no es un cuello de botella o un requisito, aplazarlo para más adelante.
  2. Comience con algoritmos crudos: valídelos (por ejemplo, con pruebas unitarias) y cuando esté bastante seguro de que funcionan correctamente, comience a refactorizar para optimizar. Esto le ahorrará tiempo y le permitirá dejarlo para más adelante y, si falla al principio, aún tendrá una solución lista para la producción, por pobre que sea.
  3. Mida e identifique cuellos de botella: encuentre las rutas de código que se ejecutan con frecuencia y son lentas. Entonces tendrás que dedicar tiempo a esto. Si se trata de una consulta SQL, probablemente recurrirá a índices y desnormalización de sus tablas; de lo contrario, intente identificar el tipo de problema que está resolviendo e intente encontrar un algoritmo más eficiente. Para esto, sugiero un poco de lectura, pero no especificaré ningún libro en particular: hay mucho por ahí y Quora puede ayudar. Para medir cosas en producción, sugiero usar Google Analytics (Protocolo de medición de Google) y la sincronización de eventos: ¡esta cosa me ha ayudado mucho!
  4. Paralelo: si está en un entorno distribuido, el uso de técnicas como MapReduce le ahorrará un montón de tiempo. En una sola máquina, utilice su CPU multinúcleo. Si el problema es adecuado, considere usar una GPU, aunque asegúrese de ser explícito de este requisito o tener un método de CPU alternativo.
  5. Resultados de la memoria caché: es una compensación clásica entre tiempo y espacio. Imagine que existe un hashmap donde la clave es una pregunta y el valor es la respuesta. Si tuviéramos una tabla así para cualquier pregunta, muchos de nuestros problemas se resolverían de inmediato, ya que solo la complejidad de tiempo que sabríamos es O (1). 🙂 Pero en serio, si no hay otra forma, considere almacenar los resultados durante un período de tiempo limitado, especialmente si es poco probable que cambien con frecuencia. Si le preocupa que tenga datos obsoletos, en la mayoría de los casos probablemente esté bien, pero si no, puede hacer que sus métodos de actualización inteligentes invaliden la entrada de caché y estará listo para comenzar.

Estos son los que están en la parte superior de mi cabeza, pero supongo que es una buena lista corta. 🙂 Si está trabajando con desarrolladores más experimentados, debe pedirles opiniones cuando encuentre un problema en particular. Estoy seguro de que elegirán alguna combinación de los elementos de la lista anterior.

¡Salud!

More Interesting

Si dice que es competente en un lenguaje de programación al salir de la universidad, ¿qué grado de comprensión profunda necesita en dicho idioma para tener éxito en una entrevista técnica?

¿Cuál es la mejor manera de preparar la estructura de datos para programar entrevistas?

¿Cuál es la explicación y la prueba de la codiciosa solución en esta pregunta?

¿Cuáles son las preguntas formuladas durante las entrevistas de colocación?

Dada una matriz de enteros, para cada índice i, debe reemplazar el valor en i con el primer valor más pequeño que A [i] que viene después del índice i. ¿Cómo lo haces?

¿Dónde debo practicar para estructuras de datos y algoritmos? ¿Debería preferir GeeksforGeeks o el libro Coding Interview Questions de Narasimha Karumanchi?

¿Cómo y desde dónde debo prepararme para las preguntas de la entrevista como 'diseñar un software para ...'?

¿Cómo podemos encontrar el padre de un nodo en un árbol binario dado si no tiene un puntero para el padre?

¿Importa la experiencia en la programación de entrevistas?

Hay algunos problemas en Cracking the Coding Interview (sexta edición) que tienen una solución de más de 1 o 2 páginas. ¿Cuál es la posibilidad de que se pregunte durante una entrevista de pizarra?

Dada una cadena, ¿encuentra la longitud de la subcadena más larga donde ningún personaje se repite dos veces?

Tengo una oportunidad inesperada de entrevistarme con Google para una pasantía de otoño en dos semanas. ¿Cuál es la mejor manera de prepararse?

Cómo prepararme para una entrevista técnica de selección telefónica de booking.com

¿Cómo puedo convertir la lista [[1], [2], [3]] en [1, 2, 3] en Python? Básicamente, quiero que la lista sea aplanada.

¿Cómo podemos permutar una cadena de modo que todas las ventanas de tamaño 'k' tengan caracteres únicos?