¿Por qué algunas personas son tan excepcionales en la programación y otras simplemente no lo entienden? Algo está pasando más allá de lo obvio. Buena voluntad efecto de caza?

Realmente no.

Pídale a alguien que nunca haya tocado una pelota de baloncesto que haga un tiro de 3 puntos. Lo que probablemente verá es una combinación de movimientos que es incómodo y ridículo. Pero cualquiera puede aprender a lanzar una pelota de baloncesto. Solo se necesita práctica.

Cuando ves a alguien que puede hacer 3 punteros fácilmente, lo que no ves son las horas de práctica que se realizaron en ese acto. Pero no son solo horas. Son semanas, meses, incluso años. Y es esta incapacidad para medir cuánto trabajo se requiere lo que crea la ilusión de que lo que hacen no puede ser logrado por ninguna persona común, y mucho menos por ti. Y hay más que no ves. El papá, el entrenador, los DVD, los videos de YouTube, la universidad a la que asistieron y los equipos en los que estaban.

Lo mismo se aplica para la programación. Un programador excepcional ha estado trabajando durante mucho tiempo. Algunos lo recogerán más rápido que otros, pero la cantidad mínima de trabajo requerida para lograr la competencia sigue siendo increíblemente grande. Luego, algunos terminan en el MIT, y para entonces lo que hacen puede parecer extraordinario y para usted puede parecer excepcional.

Los principales factores para adquirir la mayoría de las embarcaciones son nuestro umbral de inmersión y determinación. Debes estar inmerso mentalmente y determinado a seguir hasta que esos programas comiencen a ejecutarse o esos disparos comiencen a caer. Para esta pasión es la clave. Si te encanta cómo pasas tu tiempo, no es difícil. Es divertido. Eso nos lleva a la pregunta más importante. ¿Qué hace que alguien recoja una pelota de baloncesto o un libro sobre GNU Linux en primer lugar? ¿Qué hace a alguien apasionado?

Para un niño, la inmersión y la determinación son algo natural. Por eso no es difícil para un niño divertirse.

Esto se reduce a la historia de cada individuo sobre sus comienzos y sus orígenes. En la mayoría, si no en todos los casos, un programador competente tenía que haber comenzado temprano. Para eso, la mayoría de las veces, habrían necesitado algún medio para adquirir una computadora a una edad temprana. Las computadoras son caras, y probablemente obtuvieron ayuda, tal vez incluso un poco de aliento para continuar. El estímulo va mucho de padres a hijos, y las expectativas también. Las pelotas de baloncesto son más baratas, pero esa es la única diferencia.

Si eres mayor, tus comienzos ya han pasado y tus disposiciones están escritas en piedra. Si no implican programación y si la programación no resuena con nada en lo que eres bueno, entonces será increíblemente difícil. No se trata solo de inteligencia o capacidades físicas. Te resultará increíblemente difícil concentrarte y sumergirte. Es más probable que renuncies fácilmente si ya tienes mejores cosas que hacer o cosas que pagan mejor. Frente a la ilusión de que lo que hacen es mágico solo te facilitará distanciarte. De hecho, ¡es probable que te des por vencido antes de saber por dónde empezar!

Pero mire hacia atrás y piense en lo que es bueno y cómo lo hizo. ¿Qué te hizo elegir ese libro de baloncesto o Linux? ¿Alguna vez necesitas saber por dónde empezar? ¿Alguien tiene? Es solo una buena excusa, y generalmente queremos poner excusas cuando no queremos hacer algo. Lamentablemente, nuestros deseos naturales son una de las cosas más difíciles de adquirir o cambiar. Peor aún, con la edad viene una mayor resistencia a ese cambio, mientras que nuestras excusas siguen mejorando. Con la edad, se hace más difícil que los nuevos esfuerzos sean divertidos.

Entonces nos rendimos y volvemos a lo que nos hace felices y cómodos. Pero no es porque apestamos. Es porque en eso nos hemos convertido. Y si has vivido tu vida persiguiendo lo que amas, no deberías tener ningún problema con eso.

  1. Aptitud. Algunas personas no tienen el talento natural o desarrollan las vías neuronales correctas cuando sus cerebros son más plásticos para ciertos tipos esenciales de pensamiento de la misma manera que algunos no tienen los atributos físicos para sobresalir en varios deportes. El papel de Saeed Dehnadi El camello tiene dos referencias de jorobas, el par de protuberancias en lugar de una curva de campana vista en una clase de programación introductoria en la que algunas personas no pudieron formar un modelo mental de asignación consistente y sugiere que la recurrencia y la concurrencia son otras aptitudes similares. Algunas personas simplemente no reciben indirección y punteros.
  2. Aprendizaje individual. Algunas personas resuelven problemas comenzando a nivel del suelo en lugar de pararse sobre los hombros de gigantes desde los cuales los objetivos son mucho más accesibles. No puede hacer nada interesante sin comprender la complejidad computacional, las estructuras de datos y las máquinas de estados finitos. La programación concurrente sin estado mutable compartido (a través del modelo de actor, programación funcional, etc.) puede hacer maravillas por su corrección y rendimiento. Los tipos de analizador estándar como el descenso recursivo (boost :: spirit) y LALR (yacc) hacen que el manejo de entradas con gramáticas o estructura sea mucho más fácil que los expresiones regulares. El conocimiento de la arquitectura de la computadora (caché, memoria, búfer de traducción) es esencial para algunos trabajos de rendimiento. En los sistemas distribuidos, las personas inteligentes pueden llegar por su cuenta al _Time, Clocks, and the Ordering of Events in a Distributed System_ de Lamport, pero no a las décadas de documentos que siguieron. Hay mucho aprendizaje y publicación sobre ingeniería de software que se remonta al _The Mythical Man Month_.
  3. Aprendizaje institucional. Los conceptos útiles a menudo surgen mucho antes de que se publiquen o se popularicen: conozco personas que revisaron modelos de código de productos de sistemas distribuidos en 2001 antes del documento _Paxos Made Live_ 2007 de Google y _MODIST 2009 de Microsoft Research: Verificación transparente de modelos de sistemas distribuidos no modificados_. Las personas que trabajan con personas que han trabajado en las fronteras pueden estar a la vanguardia. Del mismo modo, las cosas más relacionadas con los productos de construcción que los trabajos de investigación no se publican y las personas que no han trabajado con otros que han hecho mucho en las trincheras no están expuestas a ellos.
  4. Práctica y experiencia deliberadas. Construya seis productos comenzando en una hoja de papel limpia y luego evolucione durante años, aplique lo que aprende de cada uno para mejorar la próxima vez y superará a alguien expuesto a menos del ciclo de vida (solo trabajando en productos existentes) , que lo intentó menos veces o repitió los mismos años de experiencia una y otra vez.
  5. Pasión. Todo ese aprendizaje es poco probable en personas que no disfrutan el proceso lo suficiente como para ir más allá de los requisitos mínimos para obtener un título o mantener un trabajo.

Si y no. Como con cualquier cosa, hay niveles. Pero los excepcionales no tienen más comprensión de la verdad que cualquiera de los otros. Entonces, ¿por qué la demarcación? ¿Se supone que todos debemos asumir algún modo de bus de culo? Cuando miro alrededor, todo lo que veo son problemas (¿dónde, oh, dónde están los mejores y más brillantes?).

Para mí, cualquiera que pueda hacer álgebra puede codificar. Probamos esto con ingenieros en un proyecto complicado o dos. Entonces, debería haber una manera de tener la experiencia de codificación para los no algebraicos (mira, las habilidades numéricas de ninguna manera ponen a uno en una posición envidiable).

Ahora, si uno quiere soportar el tedio es una preocupación y eso no es necesariamente algo de lo que jactarse. Como en, ser todo pálido y no atlético (digamos, ¿por qué otra razón la metáfora troll?). Si a uno no le gusta el tedio, entonces otros tienen que soportar la peor parte del trabajo.

Por cierto, si los excepcionales juntaran sus cabezas, quizás tendríamos más estabilidad y seguridad. ¡Espere! Incluso tienen que soportar todos los problemas que acechan sobre los cuales tenemos poco control.

Me pregunto por qué hay tanto énfasis en lo que generalmente es un rasgo natural. Se trata más del zen que del zen. Y, realmente no hay necesidad de que aquellos con los más altos (supuestamente) lo dominen sobre aquellos que realmente podrían tener una comprensión más amplia.

¿Es esto una cosa SV? Me gustaría saber. Los emperadores allí están más desnudos de lo que algunos podrían pensar.

El mismo rango de habilidad existe en todos los campos. ¿Cuánto sabes sobre los bazos? La diferencia es que en la medicina hay un riguroso proceso de selección y capacitación, mientras que en la programación, incluso aquellos que no tienen capacitación y son intrínsecamente malos, se les permite hacerlo de todos modos.

De ningún modo. Esfuerzo, pasión y tiempo en este sentido.