¿Cuáles son las lecciones más valiosas que ha aprendido como programador en el campo de la programación?

  • Julio César utilizó con mucho éxito el principio de “divide y vencerás” hace más de 2000 años. Hoy utilizo el mismo principio para atacar un proyecto de programación grande al dividirlo en partes más pequeñas y simples. Esto es muy difícil de transmitir a los estudiantes.
  • Documento a medida que avanza. Decida lo que se supone que debe hacer cada función, escriba un comentario de encabezado con sus entradas y salidas y, a continuación, escriba el código real. Esto es aún más difícil de comunicar a los estudiantes. Hecho correctamente, le permite razonar sobre el problema y su solución en varios niveles. Algo como esto:
    • Bien, el programa principal necesita leer la entrada, procesarla y dar salida a las respuestas. Así que escribe el programa principal como una serie de llamadas a funciones. Las funciones en sí son solo apéndices en este punto. Pero puedes definir la interfaz de cada función. Por ejemplo, aquí hay una función que lee un archivo y coloca esos datos en alguna estructura de datos (como una matriz). Devuelve un puntero a esa estructura o un puntero NULO si ha llegado al final del archivo. Ahora su programa principal solo tiene que hacer un bucle (llamar a las funciones de lectura, proceso y salida) hasta que la función de lectura devuelva NULL.
    • La función de proceso toma una matriz como entrada y produce algo como salida. A menudo sucede que cada elemento de la matriz se puede tratar por separado. Entonces, cuando es hora de escribir la función, lo más probable es que tenga un bucle que se repita a través de todos los elementos de la matriz. Para cada uno, llame a una función que procesa ese elemento. Asegúrese de que el bucle funcione, luego escriba la función que procesa un elemento.
    • Sigue haciendo esto. En cada nivel, escriba el código como si estuviera seguro de que las funciones a las que llama (que aún no ha escrito (aún son apéndices en este punto) funcionarán correctamente (esto a veces se denomina “programación con ilusiones”). Asegúrate de que todo funcione a ese nivel. Luego baja un nivel.

Estas son, obviamente, generalizaciones generales, pero tienen razón en más casos que en errores.

Nunca se trata del lenguaje; Siempre se trata del algoritmo.

Se sobrestima el rendimiento y se subestima la simplicidad.

La mejor manera de manejar la concurrencia es evitarla.

No cree variables de espionaje, siempre nombrelas apropiadamente; Además, no confíes en las variables por sus nombres. Los nombres son engañosos.

Si tiene que escribir más código de mantenimiento que la característica en sí, eso significa que lo está haciendo mal.

No programes para el mejor de los casos.

Siempre use los recursos mínimos requeridos.

Si no ha pensado en los casos de falla, simplemente PARE. No lo codifiques todavía.

Desafortunadamente, tu primer código de trabajo va a ESTAR. Nunca tendrás la oportunidad de volver y cambiar de nuevo. Por lo tanto, trata de hacerlo correctamente (tanto como puedas) en el primer disparo.

Siempre es bueno tener un código que sepa cuándo funciona y cuándo no, que tener un código que funcione bien, pero ¿no sabe por qué?

Debes aprender esto: Divide y conquista el algoritmo – Wikipedia

Escribir código para resolver un problema es la parte fácil y escribir un código mantenible que resuelva el problema es más difícil.

Cómo desarrollar una habilidad y construir cosas. Aquí está el proceso:

  • Elija una dirección o algo para hacer, posiblemente respalde esto con datos
  • Haz un plan básico dada la información limitada que tengas
  • Haz tu mejor esfuerzo para ejecutar, utilizando libros y recursos en línea a medida que avanzas
  • Después de un período de esto, mire dónde se encuentra y, dado lo que aprendió, forme otro plan para el siguiente paso / fase de desarrollo, o cambie de marcha y cambie de dirección

Elija una dirección u objetivo general, luego ingrese al plan, ejecute y analice el ciclo.

Repita este proceso una y otra vez y desarrollará tres habilidades:

  • Habilidades de programación holística en el mundo real (o cualquier habilidad que persigas)
  • Capacidad arquitectónica / de planificación, la capacidad de secuenciar eventos de manera útil sobre la marcha
  • Capacidad de aprendizaje rápido: la capacidad de desarmar recursos y profundizar en las cosas buenas muy rápidamente para obtener respuestas en el menor tiempo posible

No subestimes el enfoque eficiente sobre el trivial.

Cuando construyes algo, quieres construir lo mejor con lo que tienes. En programación, “mejor” a menudo significa ser eficiente. Es decir, haciendo las cosas rápido. Con el paso de los años, gradualmente aprende a apreciar la importancia de la eficiencia. Puede significar la diferencia entre un problema que se resuelve en unas pocas horas a unos pocos segundos. Traducido al mundo real, nunca doy por sentado lo que pueden hacer algunos ajustes en aras de la eficiencia.

La lección más valiosa que puede aprender como programador de computadoras es que no todos los problemas son problemas de programación.