Te responderé en latín:
nanos gigantum humeris insidentes
O, como dijo el viejo Isaac Newton:
- ¿Hay alguna manera de ver cuántas personas y de qué país han descargado alguna aplicación?
- ¿Cuál es el software más poderoso que has visto?
- ¿Cuál es un buen software para diseñar logotipos?
- ¿Qué tipo de aplicaciones útiles se pueden construir sobre la API de HealthKit que Apple anunció hoy en WWDC en el espacio PHR / EHR?
- ¿Qué tan efectivos son los softwares antivirus como McAfee y Norton?
Si he visto más, es poniéndome sobre los hombros de gigantes.
En otras palabras: sería mejor construir sobre lo que ya está hecho, que comenzar de nuevo. No reinventa una estufa cada vez que quiere cocinar, ¿verdad?
Si está haciendo una pregunta como esta, supongo que no ha estado programando durante tanto tiempo. Está bien, una vez comencé a no saber nada también. Diablos, nací sin saber nada.
En aquel entonces, tenía el síndrome “No inventado aquí”. Cada vez que necesitaba codificar algo, lo inventaba yo mismo. Sistemas de bases de datos, mapeo relacional de objetos, un pequeño código aquí y allá, una abstracción ingeniosa. ¡Simplemente me gustó la codificación!
Entonces, un día tuve que entregar mi proyecto a otro programador. No teníamos documentación, por supuesto, porque estaba muy ocupado codificando cosas nuevas. Era solo un gran montón de código de espagueti, usando diferentes estilos, formatos, idiomas, paradigmas, y no me llevó mucho tiempo ver que esta no era una excelente manera de codificar.
Entonces, aprendí. Se necesita un gran hombre (o mujer) para admitir haber cometido errores. En estos días uso código de fuente abierta y trato de entender cómo funciona. Utilizo un conjunto limitado de paradigmas, y siempre trato de encontrar un buen patrón para implementar una determinada característica. Pruebo mi código, me aseguro de que tenga efectos secundarios mínimos, y así sucesivamente.
Más importante aún, documento casi todas las líneas de código que escribo y cada decisión que tomo. Si siento que debo escribir una función de utilidad o paquete, siempre considero si aún no está disponible. Cuando escribo la función o diseño el paquete, siempre lo hago para que otras personas también puedan usarlo.
Como resultado, paradójicamente, me he convertido en un codificador mucho mayor escribiendo menos código que escribiendo más código.