Algunos conceptos se explican mejor por otro estudiante que acaba de entender un concepto que por un profesor que encuentra casi todo lo obvio.
Así que mi lista de conceptos difíciles de aprender está hecha de las muchas cosas que la mayoría de las personas hacen mal, incluso con muchos años de experiencia.
- Casos de borde
Casi todos pueden obtener la versión de un algoritmo que funciona feliz con un poco de trabajo.
No todos pueden obtener la permutación de posibilidades y casos de borde a la perfección.
- Código de organización
Casi todos pueden obtener una hoja de código mal diseñado que no se puede mantener, escupir un resultado coherente.
Ni siquiera todos pueden entender cuando ven un gran desastre, ¿por qué es un desastre?
- ¿Cuál es una fuente de información confiable para conocer el valor de una tarjeta de selección de Derek Jeter de 1992?
- ¿Cuánto puedo aprender en una vida? Quiero aportar lo más posible.
- ¿Qué es lo que la mayoría de la gente quiere aprender estos días?
- ¿Cuál es la mejor manera de aprender a bailar?
- Superación personal: Quiero aprender habilidades sociales. ¿Cuál debería ser mi plan de acción?
- Evitar la repetición
Esta complejidad surge de la necesidad de tener un sistema enorme _sometimos_ en su cabeza al mismo tiempo.
Diseñar bibliotecas pequeñas y hacer un diseño de abajo hacia arriba ayuda, pero llegará el momento en que necesite tener esta enorme monstruosidad en su cabeza al mismo tiempo, y fallará.
- Concurrencia
Si bien hay muchas estrategias para lidiar con muchas cosas que suceden a la vez con su realidad, tener muchas partes móviles es difícil. Ya que es difícil tener un sistema con miles de piezas pequeñas que se hablan entre sí.
Muchas de estas situaciones son solo casos particulares derivados del artículo de Brooks http://en.wikipedia.org/wiki/No_…, no se puede evadir la complejidad esencial de la realidad haciendo trucos dirigidos a la complejidad accidental de la programación.
Programar es difícil, porque la realidad es dura.