Érase una vez, escribí un artículo sobre el tema "Por qué las computadoras apestan" (en última instancia, "Computadoras" y " Lo que está mal con las computadoras " [el enlace está roto en el original, por lo que una copia del archivo web - nota del traductor ] en otras dos versiones, y el nombre original nunca salió). El artículo fue lo suficientemente largo, pero la esencia se redujo a la idea de que las computadoras son basura debido al hecho de que los programadores crean cosas complejas más salvajes que nadie más puede entender, y porque la complejidad se basa en una complejidad aún mayor siempre que todos El aspecto del programa no será inmanejable.

CPAP desde aquí
Lo que no sabía entonces era por qué los programadores hacen esto. Era obvio que estaban haciendo esto; pero ¿por qué la industria del software crea tanto código salvaje, complejo e ilegible? ¿Por qué continúa esto incluso después de que, al parecer, los desarrolladores deberían haber aprendido de la primera experiencia negativa? ¿Qué hizo que los programadores no solo escribieran códigos incorrectos, sino que lo siguieran haciendo una y otra vez?
Bueno, eso fue un misterio para mí, pero de alguna manera no estaba particularmente preocupado al principio. La idea misma de que "los malos programas provienen de malos programadores" es tan simple y obvia que sirvió de base para un estudio completo en el campo de la programación, que finalmente tuvo buenos resultados (que se describen principalmente en este blog, y también es el tema de libros que se están escribiendo actualmente). Se identificó el problema (programadores malos que crean complejidad) y, a primera vista, ella tenía una solución (crear reglas para el desarrollo de software que lo evitarían), y eso fue suficiente para mí.
Pero todavía me preguntaba si universidades, escuelas técnicas y programas educativos de renombre mundial se gradúan como programadores terribles, a pesar de décadas de experiencia en la enseñanza de técnicas de desarrollo de software. Por supuesto, muchos de los principios del diseño de programas nunca han sido confidenciales, y muchos buenos consejos están a la vuelta de la esquina, y muchos de ellos son muy generales. Incluso si la gente no fue a la escuela, ¿ no leyeron ese consejo?
Bueno, la verdad estaba más allá de mi imaginación, y me llevó casi cinco años trabajar en el Proyecto Bugzilla con la participación de una gran cantidad de desarrolladores, por lo que un buen día de repente me di cuenta de un hecho aterrador:
La gran mayoría (90% o más) de los programadores no tienen idea de lo que están haciendo.
No es que no hayan leído nada sobre el desarrollo de software (aunque probablemente no). No es que los lenguajes de programación fueran demasiado complicados (aunque lo es). El hecho es que la mayoría de los programadores no tienen idea de lo que realmente están haciendo. Simplemente imitan los errores de otros programadores: copiar el código e imprimir hechizos más o menos significativos en la computadora con la esperanza de que se comportará de manera similar a lo que esperan, sin tener una comprensión real de la mecánica de la computadora, ni los principios del desarrollo de software, ni el valor cada palabra y símbolo individual que ingresan en la computadora.
Esta es una declaración audaz, impactante e insultante, pero mi experiencia lo confirma. Personalmente revisé y califiqué el código de docenas de programadores. Leí el código de muchos otros. Hablé con muchos programadores sobre el desarrollo de software y leí artículos de cientos de desarrolladores. El número de aquellos que realmente entienden lo que están haciendo es solo alrededor del 10% de todos los programadores con los que he hablado, trabajado o escuchado.
Los desarrolladores de código abierto son lo mejor de lo mejor; Estas son personas que quieren programar incluso en su tiempo libre. E incluso entonces, diría que solo alrededor del 20% de los desarrolladores de código abierto son realmente buenos en lo que hacen.
Pero por que? Cual es el problema ¿Cómo puede ser que hay tantas personas trabajando en esta industria que no tienen idea de lo que están haciendo?
Bueno, parece que de alguna manera son "estúpidos". ¿Pero qué es la estupidez? Las personas no se vuelven estúpidas solo porque no saben algo . Hay mucho que no todos saben. Pero eso no los hace estúpidos. Esto los hace despistados sobre ciertas cosas, pero no son estúpidos. No, estupidez, estupidez real: significa no saber que no sabes algo . Las personas estúpidas piensan que saben algo, aunque no lo saben , o no se dan cuenta de que el campo de conocimiento es mucho más amplio de lo que piensan .
Esta "estupidez" es algo que se puede encontrar en casi cualquier campo, y el desarrollo de software no es una excepción. Muchos programadores simplemente no se dan cuenta de que puede haber ciertas leyes o principios generales para el desarrollo de software, por lo que ni siquiera intentan encontrarlos. Muchas compañías de software no intentan mejorar la comprensión de los desarrolladores de los lenguajes de programación que utilizan. Quizás esto se deba a que la gerencia cree que los programadores "ya deberían saber todo esto, ya que fueron contratados para hacer esto".
Desafortunadamente, esta vista es dañina cuando se desarrolla software, porque si quieres ser un programador realmente bueno, necesitas saber mucho . Cualquiera que crea que lo sabe todo (o que tiene un "punto ciego", por lo que no ve qué más aprender), difumina su código ideal en ausencia de conocimiento, conocimiento sobre la existencia de los cuales no Saben , y ni siquiera se dan cuenta, el hecho mismo de la falta de conocimiento .
No importa cuánto sepa, siempre hay algo más en cualquier campo, y la programación no es una excepción. Así que pensar que sabes que todo siempre está mal.
A veces es difícil determinar qué necesitas estudiar. Hay tantos datos, pero ¿por dónde empezar? Para ayudar con esto, se me ocurrieron un par de preguntas que necesito hacerme a mí mismo oa otros para descubrir qué áreas necesitan más estudio:
- ¿Sabe todo lo que puede sobre cada palabra y cada carácter en cada página de su código?
- ¿Ha leído y entendido completamente la documentación para cada función que utiliza?
- ¿Tiene un conocimiento excelente de los principios básicos del desarrollo de software, tan bueno que podría explicarlo a los programadores novatos de su organización?
- ¿Entiende cómo funciona cada componente de la computadora y cómo funcionan juntos?
- ¿Entiende la historia de las computadoras y cómo se desarrollarán aún más para comprender cómo se ejecutará su código en las computadoras creadas en el futuro?
- ¿Conoces la historia de los lenguajes de programación para comprender cómo ha evolucionado el lenguaje que usas y por qué funciona de esa manera?
- ¿Entiende otros lenguajes de programación, otros enfoques de programación y tipos de computadoras que son diferentes de los que usa para comprender qué herramienta es mejor para cada tarea?
- De arriba hacia abajo enumera las cosas más importantes para que un programador entienda qué código escribe. Si puede responder honestamente "sí" a todas estas preguntas, entonces definitivamente es un gran programador.
Quizás la longitud de la lista parece deprimente. “Wow, ¿lees la documentación de cada función? ¡Sí, tomará mucho tiempo! " De acuerdo, ¿sabes qué más tomará mucho tiempo? Conviértete en un buen programador sin leer la documentación. ¿Y sabes cuánto? La eternidad , porque esto nunca sucederá.
Nunca se convertirá en un buen programador simplemente copiando el código de otra persona y rezando para que funcione para usted. Pero lo más importante, invertir tiempo en capacitación significa convertirse en uno bueno [ programador - aprox. traductor ]. El tiempo que pase ahora lo convertirá en un programador mucho más rápido en el futuro. Si pasa mucho tiempo leyendo durante los primeros tres meses de aprendizaje de una nueva tecnología, probablemente será 10 veces más rápido en los próximos 10 años que si se apresurara a usarla sin leer nada.
Quiero aclararlo de inmediato, por supuesto, no funcionará solo leer tres meses y convertirse en un buen programador. En primer lugar, es demasiado aburrido: nadie quiere meter una teoría durante tres meses sin tener ninguna práctica. Pocas personas pueden hacer esto el tiempo suficiente como para convertirse en programadores, sin mencionar que son buenos de inmediato. Por lo tanto, quiero señalar de inmediato que la comprensión proviene de la práctica , y no solo de la teoría. Pero sin estudiar teoría, la comprensión puede no aparecer en absoluto . Por lo tanto, es importante lograr un equilibrio entre la programación práctica y la teoría.
No estoy atacando a ningún programador con el que trabajé personalmente, ni a ningún programador en particular en general. Admiro a casi todos los programadores que he conocido como persona, y espero admirar a otros si los conozco. En cambio, insto a todos los programadores a abrir sus mentes a lo nuevo, para que siempre haya un nuevo conocimiento, que la teoría y la práctica sean la clave para el dominio, y que no haya nada vergonzoso en no saber algo, si usted sabes sobre el hecho de que no sabes algo. Solo tómate el tiempo para averiguarlo cuando sea necesario.
De un traductor: intenté traducir en un estilo literario, por lo que quizás algunas declaraciones o ideas del original se distorsionaron debido al deseo de hacer que la traducción fuera más legible. Si es así, no conduzca con trapos cabreados, sino que escriba PM.