¿Qué diferencia a los programadores excepcionales de los realmente buenos? [cerrado]

59

Tú sabes quienes son. Son las estrellas de rock de la programación:

  • Codifican 10 veces más rápido.

  • Su código simplemente funciona.

  • No solo conocen su idioma principal por dentro y por fuera, sino que también saben cómo funciona bajo el capó.

  • Saben la respuesta a la mayoría de las preguntas antes de preguntar.

  • Algunos inventaron los principios de programación que todos usamos.

  • Y también tienden a ser inusualmente humildes.

¿De qué se trata esta gente? ¿Hay algo en su proceso de pensamiento que sea fundamentalmente diferente del programador superior al promedio? ¿O son simplemente personas muy talentosas que trabajan duro?

Para decirlo de otra manera: ¿cómo puedo ser como ellos? Sé lo que creo que necesito aprender para ser tan bueno, pero parece que me tomará los próximos diez años aprenderlo, y entonces mi conocimiento será obsoleto.

Robert Harvey
fuente
49
Los programadores excepcionales no tienen un bloque try-catch alrededor de su código. zing
11
@John: Estoy totalmente en desacuerdo, he visto la cosa 10x en juego una y otra vez y parece ser cierto, por desgracia. Creo que gran parte del problema es que la mayoría de los programadores profesionales no pueden programar realmente, y algunos ni siquiera pueden programar cosas simples. No es que un codificador divino esté 10 veces por encima de un buen codificador, sino que un codificador divino está 10 veces por encima del peor codificador de su organización o equipo.
Pax Noctis
10
@fennec: hacer o no. No hay ninguna try.
mmyers
29
¡La experiencia de 18 años para un idioma inventado hace 15 años es bastante impresionante!
Ricky Clarkson
15
@Tjaart - No, es un número sólido y los estudios desde la década de 1960 lo han demostrado. El estudio original fue realizado a fines de la década de 1960 por Sackman, Erikson y Grant. Estudiaron programadores profesionales con un promedio de 7 años de experiencia y encontraron que la proporción del tiempo de codificación inicial entre los mejores y peores programadores era de aproximadamente 20 a 1; la relación de tiempos de depuración de más de 25 a 1; del tamaño del programa 5 a 1; y la velocidad de ejecución del programa de aproximadamente 10 a 1. No encontraron relación entre la cantidad de experiencia de un programador y la calidad o productividad del código. (Gracias a Steve McConnell).
Jon Hopkins el

Respuestas:

88
  • Humilde: Un programador excepcional nunca afirmará que su código es el mejor, de hecho, siempre buscará una mejor manera (cada vez que tenga la oportunidad) .

  • Paciente: Un programador excepcional tendrá una paciencia ilimitada (Esto no significa que perderá días en un problema. Ver: Solucionador de problemas) .

  • Solucionador de problemas: un programador excepcional podrá resolver un problema en minutos que puede llevar días para su programador promedio.

  • Curioso: un programador excepcional no podrá resistirse a tratar de descubrir por qué ocurre algo.

  • Ingeniero: Un programador excepcional diseñará sistemas en lugar de crear una mezcla de marcos (esto no significa que no usarán marcos) .

ChaosPandion
fuente
55
¡Me gusta tu punto de "ingeniero"!
Cedric H.
1
@Chaos: el programador más rápido que conozco creó su propio marco web. Cosas como esa, creo, son las que hacen a alguien mejor y más rápido. Gracias por tu respuesta. Me hace sentir menos impotente al querer siempre rediseñar las cosas.
orokusaki
11
"Ingeniero" es un punto crucial. Cada línea de código creará una base sólida, en lugar de agregarse a una creación desvencijada como Jenga.
Alex Feinman
55
No lo haré -1 pero como contrapunto, califico para todo esto; y sigo apestando (A menos que los programadores promedio para mi excepcional con los que comparo sean realmente terribles)
Steven Evers
1
@Chaos, "Curioso" pero solo hasta cierto punto.
28

Golpeas mucho en tu último punto:

"Y también tienden a ser inusualmente humildes".

Creo que es una combinación de humildad, no solo exterior sino también dentro de sus mentes. Aceptan estar equivocados, cometer un error y tienen un cambio muy rápido de la frustración. Muchos programadores intentarán algo, fracasarán y luego se emocionarán muy rápidamente, un estado anatema para escribir un buen código. Tienes que aceptar que no eres perfecto, y que vas a equivocarte (¡a menudo!), Y que lo mejor que puedes hacer es aprender cómo recuperarte rápidamente cuando lo arruinas. Es una confianza humilde , como "Sé que me voy a equivocar, pero también sé que si sigo intentando, eventualmente llegaré allí".

Hay un dicho en PNL: "No hay falla, solo retroalimentación". Para ser un programador de estrellas de rock, creo que tienes que aceptar eso. No hay nada que no puedas codificar. Puede ser lento al principio, pero si sigue intentando y se niega a detenerse cuando falla o arruina algo, cumplirá. Y en ese proceso aprenderás todos los trucos mentales que necesitas para convertirte en uno de los mejores.

El consejo es, por supuesto, tan bueno como su fuente, así que ... todo es solo mi opinión.

Pax Noctis
fuente
"No he fallado, he encontrado 10000 formas que no funcionan" - Thomas Edison
ninjalj
1
La única forma de poder aprender rápido es aceptar que puede mejorar y querer hacerlo.
25

Se preocupan profundamente por su código.

JaredPar
fuente
2
Indudablemente cierto.
Robert Harvey
3
¿No puede un programador pobre preocuparse profundamente por su código? ¿Aunque no sea tan bueno?
Walter
2
@Walter podrían pero nunca he visto eso. Lo más cercano que he visto son los programadores novatos que se preocuparon profundamente por su código pero que aún cometieron errores de novato (nadie es inmune). Cuando se señalaron esos errores, se solucionaron rápidamente y rara vez se repitieron.
JaredPar
15

Personalmente, los mejores programadores que conozco / conocían comprendían los conceptos básicos y NO eran expertos en ningún idioma. Simplemente tenían suficiente experiencia en casi todo. El canónico "Jack of All Trades".

Es más que ciencia fundamental, hay un valor significativo en la experiencia en operaciones reales. Por ejemplo, aquellos que entienden la Filosofía de Unix y, por lo tanto, podrían resolver problemas desconocidos con varias herramientas dadas (IOW sabían dónde buscar) superan con creces al experto en Java que codificó una solución paralela y roscada.

Los programadores destacados también respetan a quienes los precedieron. No odian los modelos de datos relacionales ni se encogen cuando ven SQL como una API formal, ni se oponen a FORTRAN en matemáticas. Saben que OO no es el final, y sobre todo entienden que la programación es un ARTE, no una ciencia.

Jé Queue
fuente
2
Para archivos de texto grep, awk, sort, y uniqpuede responder a muchas preguntas. Si tienes perltambién, ¡aún más!
2
Creo que es una artesanía, no ciencia ni arte.
Alexander Gessler
11

Cuando comencé, estaba trabajando con este tipo que pensé que era absolutamente brillante en todo lo que hizo en términos de programación. Es muy probable que todavía lo sea, pero ahora se ha convertido en el director de una empresa en el sudeste asiático.

De todos modos, mantuvo las cosas simples, y las cosas simples funcionan. Nunca queriendo escribir más líneas de código de las necesarias, todo lo que hizo simplemente funcionó. Estuve jugando para ponerme al día durante un año solo para acercarme a su nivel. Sin embargo, la otra cosa es el tiempo. Había estado haciendo cosas durante mucho más tiempo que yo en ese momento, y había tenido la oportunidad de hacer estas preguntas exactas una y otra vez, hasta que supiera (aparentemente) todas las respuestas.

Tampoco tenía miedo de hacer preguntas. Creo que eso es lo más importante.

usuario2358
fuente
Parece que estoy listo (vea mi recuento de preguntas en SO)
2
@ acidzombie24 - O ... acabas de empezar.
orokusaki
jaja orokusaki. +1
"Mantener las cosas simples" es una de las bellezas de Test Driven Development. No puedo recomendarlo lo suficiente.
10

Matriz de competencia del programador

Muchos temas para ayudar a identificar cuál es su nivel en temas de programación.

Maniero
fuente
Conocimiento de stackoverflow: 2 ^ n: Nunca he oído hablar de él O (n ^ 2): regularmente plantea algunas preguntas fáciles sobre SO O (n): plantea preguntas interesantes y conoce a los programadores. SE O (log (n)): Arriba usuario en un sitio SE relacionado con CS. ;-)
shuhalo
Muchas gracias por este enlace! Me dio confianza con respecto a lo que sé y me indicó qué áreas debería mejorar.
oksayt
7

Aprendí la respuesta a esta pregunta en un libro sobre el póker Texas Hold'em, pero se aplica a todos los esfuerzos frustrantes. Los mejores codificadores nunca se inclinan. Ir a Tilt es el momento en que algo no funciona como esperaba y responde de una manera que crea errores exponenciales en la aplicación general. En el torneo de póker, hace que apuestes mal y te eliminen.

En la programación, la inclinación te hace arrancarte el pelo y escribir parches de código ridículos que solo funcionan en ciertos casos de tu aplicación. Tilt hace que los programadores ignoren las necesidades del proyecto en su conjunto, buscando gratificación instantánea para resolver el problema inmediato ahora. Muchas veces el problema se resuelve hoy, pero la aplicación sufre mañana.

Los mejores programadores toman el concepto de inclinación y lo manejan de una manera que les permite mirar los problemas desde una perspectiva externa, siempre. Si eso falla, bebe un poco de cafeína.

JMC
fuente
¿Qué sugieres hacer como una actividad para superar la "inclinación" durante la programación? Lo entiendo todo el tiempo y termino grabando cosas todo el tiempo.
orokusaki
@orokusaki: la actividad más fácil para evitar la inclinación es cambiar una pregunta fundamental que los programadores se hacen todos los días. Cuando se le asigna un problema, en lugar de pensar: "¿Por qué debería resolver el problema de esta manera?" pregunte: "¿Por qué debería evitar resolverlo de esta manera?" A menudo, la respuesta a por qué no debe resolver un problema con una solución particular le dará un conjunto de punteros para encontrar una mejor solución.
JMC
6

Programadores excepcionales:

  • Preocuparse por su código
  • Preocuparse por los usuarios que usan su código
  • Preocuparse por las personas que mantendrán su código
  • Preocuparse por la productividad
  • Preocúpese por el proceso, no solo por el producto

Dos cosas sobre el factor "10x":

  1. Tiene que aplicarse de principio a fin. No es bueno escribir código 10 veces más rápido si se tarda 10 veces más en probar, reelaborar y mantener.
  2. Creo que el factor "10x" es un reflejo de lo pobre que es un alto número de programadores en lugar de lo bueno que es un pequeño número de programadores.
darreljnz
fuente
3

la mayoría de ellos se ven reservados y nada especial ... algunos se ven súper inteligentes ... prefieren verificar / depurar las cosas dos veces desde todos los puntos de vista posibles, su software no tiene errores en el mundo: p IMO algunos programadores pueden ser más lentos, pero la calidad es mejor, ¡incluso la gente común puede entender cómo funciona su software!

Tengo un amigo que escribió su primer programa de ASM a la edad de 10 años, ahora tiene 24 años, no terminó la universidad, pero eso no le impidió crear su propia compañía, ganar millones :) pero por lo que veo, él es diestro en todo :)

los programadores excepcionales probablemente dirían que este código puede codificarse de otra manera, mejor que decir que es totalmente incorrecto una reputación de otros programadores inferior :)

"¿De qué se trata esta gente? ¿Hay algo en su proceso de pensamiento que sea fundamentalmente diferente del programador superior al promedio? ¿O son simplemente personas con mucho talento que trabajan duro?"

Creo que nacieron así, está dentro de su ADN: pi no sabe sobre su proceso de pensamiento, pero el mejor programador que he conocido tenía epilepsia

shegy
fuente
3

Pocas cosas diferencian un excepcional con un típico.

Excepcional:

  1. Muy apasionado por su trabajo y se esfuerza por entregar una obra maestra.

  2. El rendimiento y la calidad son el panorama general en su mente incluso antes de que comience la codificación.

  3. Piensan en la mejora continua después de cada lanzamiento.

  4. Vigilan estrictamente las alternativas y son los primeros en adoptar.

  5. Su tema en la vida profesional es: "Escribir menos transmitir más".

  6. Siguen pensando en perspectivas lógicas incluso cuando no están codificando.

Típico

  1. A veces es algo apasionado pero se esfuerza por cumplir porque es un trabajo después de todo. Si no es una obra maestra, está bien. Al menos entregado a tiempo.

  2. Pensaré en el rendimiento más tarde, de todos modos las PC son lo suficientemente rápidas en estos días.

  3. Mejore solo cuando no quede ninguna opción para guardar un trabajo.

  4. No hay tiempo para profundizar en otras tecnologías. Apéguese a lo que exige su trabajo ahora. Aprenderá otras cosas cuando surja la necesidad.

  5. Su tema es: "Haz lo que se te pide y llega a casa a tiempo".

RPK
fuente
2

Los programadores excepcionales aplican los principios espartanos .

Imagen que llama la atención:

ingrese la descripción de la imagen aquí

Este artículo: http://willcode4beer.com/design.jsp?set=codeReduction

Y esta cita:

Cualquier tonto puede hacer las cosas más grandes, más complejas y más violentas. Se necesita un toque de genio, y mucho coraje, para moverse en la dirección opuesta. - Albert Einstein

Ates Goral
fuente
55
La imagen es una ilustración de la notación Big-O.
0

Auto-promoción , y lo digo de la mejor manera posible. Tener un trabajo como la programación, especialmente en un equipo, significa que no es inmediatamente obvio dónde encaja su contribución personal en el panorama general, o quién fue responsable de qué parte. Las personas que conocemos y conocemos como "grandes programadores" son IMO, aquellos que han dominado el arte de dar a conocer sus contribuciones sin parecer egoístas o egocéntricos. En muchos casos, esto es mediante la creación de herramientas, bibliotecas y software en los que el resto de nosotros confiamos para ganar nuestro pan de cada día.

Gaurav
fuente
3
Quizás, pero creo que John Resig es conocido por sus notables logros con Javascript y jQuery. Su material es ampliamente utilizado porque es genial, no porque John tenga grandes habilidades de marketing.
Robert Harvey
@Robert Harvey - ¿O sí? Sin duda es un gran programador, pero ¿quizás lo que lo hizo realmente bueno a "excepcional" fue el hecho de que su material adquirió popularidad y fue víctima de su propio éxito, teniendo que mantenerse al día con la creciente demanda? Cuando realmente te gusta una camisa, pero es demasiado grande, no intentes convertirte en ella antes de comprarla. Se habrá ido para entonces. Cómprelo y luego haga todo lo posible para convertirse en él.
orokusaki
Robert: definitivamente. Pero si acabara de compartir jQuery con algunos amigos y en el trabajo, nunca sabríamos nada de él. Lo conocemos como un gran programador precisamente porque tuvo el coraje, no solo de compartir jQuery con el mundo, sino también de promoverlo activamente como una mejor manera de hacer Javascript. Me gustaría ver a más programadores (incluido yo mismo) aprendiendo cómo hacerlo de manera efectiva.
Gaurav
1
-1 Si bien esto puede ser cierto a los ojos de los gerentes cuando se trata de autopromoción, nunca lo he visto funcionar entre otros desarrolladores. Entre los desarrolladores, no lleva mucho tiempo darse cuenta de quién es bueno, quién es promedio y quién apesta. La autopromoción ni siquiera es parte de la ecuación.
Dunk
1
@Gauruv - Creo que los programadores "rockstar" son los que pueden resolver problemas difíciles y hacerlos realmente simples. Por lo tanto, no pensaría que un código es increíble si lo mirara y dijera "Woah, ¿quién escribió esto"? Si bien pensé lo contrario fuera de la escuela, la experiencia del mundo real me ha enseñado que la inteligencia en el código no es una virtud. Estoy más impresionado con la gente de que no necesito preocuparme si sus cosas funcionan o no porque ya sé que funciona sin tener que mirarlo. Esas personas son pocas y distantes y son los verdaderos programadores de estrellas de rock.
Dunk
0

1º - Saben lo que se corta cuando se enfrentan a la línea muerta.

Gedean Dias
fuente
0

Muy buen artículo relacionado: The Free Electron (de randsinrepose.com)

Pido disculpas por no resumir el artículo aquí, pero los puntos no se separan fácilmente de la prosa.

Nicole
fuente
No dice mucho sobre por qué. Pero sí, estas son las personas de las que estoy hablando.
Robert Harvey
Citando el artículo: "Un electrón libre puede hacer cualquier cosa cuando se trata de código. Pueden escribir una aplicación completa desde cero, aprender un idioma en un fin de semana y, lo más importante, pueden sumergirse en una enorme pila de código de espagueti, tiene sentido y, de hecho, lo hace funcionar. Puedes construir negocios enteros alrededor de un Electrón Libre. Son tan buenos ".
Robert Harvey
0

Se programan exclusivamente por intuición. No hay necesidad de pensar que simplemente fluye .

John Shaft
fuente
Indudablemente cierto para personas con experiencia en cualquier ocupación, no solo programación. ¿Qué diferencia específicamente a los programadores excepcionales ?
Robert Harvey
Bueno, no soy uno de ellos, así que definitivamente no puedo responder a esta pregunta con 100% de certeza, pero no creo que se trate de conocimiento sino de proceso de pensamiento (subconscientemente). Creo que las personas que son excepcionales en cualquier cosa tienen la capacidad de aclarar cualquier interferencia en sus pensamientos y ver algo de una manera muy simple. Cuanto más simple es algo, más fácil es procesarlo.
John Shaft
3
-1 Eso es TAN MAL en todas las formas posibles. Desearía poder -100. Yo diría exactamente lo contrario. Piensan bien y resuelven el problema antes de que comiencen.
Dunk
@Dunk - No estoy de acuerdo. Con lo que escribiste, diría que es lo que hace un programador normal. No hay nada excepcional en eso. Comparo programadores excepcionales con guitarristas excepcionales. No están pensando en las notas que están tocando, simplemente lo sienten.
John Shaft
@Pablo - Creo que nuestras experiencias difieren. En mi experiencia, los desarrolladores normales siguen la intuición y piensan erróneamente que simplemente fluye. Por lo tanto, crean mucha basura. Los desarrolladores excepcionales se toman el tiempo para comprender a dónde van. El hecho de que alguien pueda mostrarle sobre la marcha cómo debe diseñar su componente no significa que lo haga por intuición. Apuesto a que lo han hecho antes o tienen la vista panorámica del sistema ya creado en su mente, si no en la documentación. Por lo tanto, lo que llama intuición es realmente seguir un plan pensado.
Dunk
0

Los codificadores excepcionales tienen influencia en un proyecto más allá del alcance de su propio código y detectan problemas antes de que sucedan debido a su experiencia. Hacen que todos en el equipo sean mejores y salvan sus proyectos de un mal diseño y gestión.

Realmente han creado algo que es excepcional.

JeffO
fuente
0

pero parece que me tomará los próximos diez años aprenderlo, y luego mi conocimiento será obsoleto.

Va a. Ya has establecido que estos tipos son 10 veces más rápidos, por eso lo aprenden en 1 año y te lleva 10. Para la parte seria de la respuesta, creo que es que ya son súper inteligentes (podrían ser muy exitosos en cualquier cosa), les encanta la codificación, y por alguna razón tienen (o encuentran) una gran cantidad de tiempo libre para practicar la codificación o trabajar en proyectos personales.

Si está haciendo esta pregunta aquí, probablemente no tenga lo que se necesita (no se preocupe, estoy respondiendo aquí, así que probablemente tampoco). No se preocupe, aunque todavía puede llegar a ser loco si le encanta la codificación.

Kevin
fuente
0

Aquí hay muchas publicaciones bien intencionadas sobre Humildad, Ingeniería, Pasión, Paciente, Solucionador de problemas. OMI, todos estos son obligatorios. Sin embargo, describen el 30% de los mejores programadores.

Creo que estás preguntando por los programadores verdaderamente excepcionales, el 1% superior.

Una de las cosas que envidio por el talento ocasional muy raro con el que trabajo es su capacidad de mantener una gran cantidad de detalles sobre un sistema complejo en su cabeza al mismo tiempo, y poder recordarlo rápidamente. Creo que puedo hacer esto en ocasiones, tal vez una vez al mes, cuando realmente estoy en la zona. Este sentimiento es maravilloso. El desarrollador en el que estoy pensando parece poder estar en esa zona la mayor parte del tiempo .

Es este rasgo, IMO, además de la capacidad de Humildad, Curiosidad, Ingeniería, Pasión, Paciencia y Solución de problemas lo que los hace verdaderamente excepcionales.

Kyle Hodgson
fuente
0

Tener la calidad de la automotivación y la autodeterminación, así como tener la voluntad de entrar en un abismo de lo desconocido y sentirse cómodo con estar absolutamente confundido como parte del proceso es enorme. No se trata tanto de la inteligencia inicial como se podría pensar porque el cerebro se vuelve mucho mejor en las cosas que siempre está haciendo y pensando. Vengo de la nada en la universidad y luego me puse muy bien solo por pura persistencia, nunca me rendí, siendo ese tipo que tenía problemas cuando todos los demás se cansaban de tratar de resolverlo. Después de ese tipo de persistencia, los problemas se volvieron cada vez más fáciles y pasaron de ser un novato en la universidad a avergonzar a la mayoría de ellos en este momento. El talento puro no es suficiente y a veces puede llevar a descansar en los laureles.

Además, para Robert Harvey, sigues enlazando mis publicaciones cuando menciono cualquier cosa que tenga que ver con mi CMS que escribí desde cero. Verá varios otros enlaces de listas que pueden o no haber escrito. Estás presionando a las personas que están motivadas, lo cual es irónico que hayas publicado esto. Eres "el hombre" en este pequeño universo y no lees las cosas por mérito, sino que simplemente trabajas y borras a tu antojo. También amas demasiado Star Wars y probablemente agitas tu mano hacia las puertas de apertura automática en la tienda de comestibles, creyendo que tienes la fuerza.

revs Joonha
fuente