¿Es posible que un aficionado se convierta en un buen programador? [cerrado]

46

Un programador profesional de tiempo completo puede hacer un gran trabajo al aprender continuamente de su trabajo. ¿Cómo puede un programador aficionado entrenar para convertirse en un buen programador?

** Si te gusta tocar música o cantar, puedes hacerlo porque es tu hobby y estás interesado, y puedes convertirte en un buen cantante o reproductor de música. Pero no necesitas convertirte en un cantante profesional o cantar para vivir. ¿Es esto también cierto para los programadores? ¿Algún programador aficionado que sea famoso?

Ted Wong
fuente
3
Derecha. Entonces Wozniak no fue un buen programador hasta que se vendió la primera Apple (y así se convirtió en un "profesional").
KeithS
Definir "bueno" ..
2
Cada programador "bueno" fue una vez un aficionado.
spudwaffle

Respuestas:

84

La clave para ser realmente bueno es trabajar en un buen equipo. Muchos aficionados trabajan solos, por lo que solo llegan tan lejos. En un equipo, aprendes de los demás y te vuelves disciplinado porque tus compañeros te golpearán con lo que sea útil de lo contrario.

Por esa razón, te propongo que te unas a un equipo, por ejemplo, un proyecto de código abierto, o hagas un proyecto de pasatiempo con algunos amigos.

usuario281377
fuente
99
+1 Por trabajar en un buen equipo. Tener personas igual o más capacitadas en su equipo es extremadamente motivador.
BenR
Olvidé la parte del equipo en mi lista de 'trampas', +1
keppla
2
+1 Creo que esa es la clave: aprender de las buenas personas que tienen más experiencia que tú. Sin embargo, unirse a un buen equipo es mucho más fácil decirlo que hacerlo.
1
+1 para el buen equipo. Si el equipo no es tan bueno o mejor que tú, no aprenderás.
Spencer Rathbun
44
No necesita estar en un equipo para aprender de otras personas.
Emanuil Rusev
53

El camino para ser bueno en la programación es el mismo que para cantar o tocar música: practicar, practicar, practicar. Si pasas suficiente tiempo desarrollando software regularmente durante varios años, es probable que seas bueno en eso, ya sea dentro o fuera de las horas de trabajo.

Ahora, además de pasar más tiempo practicando, hay otra razón por la cual los profesionales generalmente se vuelven mejores que los aficionados en cierto sentido (tanto en música como en programación). Si es un profesional, debe realizar tareas que no necesariamente le gustan, pero que pertenecen al trabajo más amplio de desarrollo de software (por ejemplo, pruebas, discusiones con clientes, redacción de documentación, configuración del entorno de desarrollo / desarrollo, escritura de scripts de compilación, etc. ) Y de vez en cuando también está presionado para entrar en áreas desconocidas, para aprender nuevos idiomas o plataformas. Como aficionado, no estás obligado a hacer nada que no quieras, lo que hace probable que te mantengas dentro de tu zona de confort durante la mayor parte de tu vida. En otras palabras, puede limitarse fácilmente a una o algunas áreas específicas que le gustan más,

OTOH, muchos desarrolladores profesionales también caen en esto, permaneciendo en la misma compañía haciendo el mismo trabajo de rutina sin apenas aprender nada nuevo durante décadas ... Entonces, la clave para mejorar es su actitud. Si sigue aprendiendo y busca conscientemente oportunidades para salir de su zona de confort hacia un territorio nuevo y desconocido, eventualmente superará a los enjambres de "profesionales" que se fosilizan lentamente. Una buena forma de hacerlo puede ser contribuir a algunos proyectos de código abierto.

Una lectura recomendada es The Pragmatic Programmer: From Journeyman to Master , con muchos consejos excelentes y muy prácticos sobre cómo seguir mejorando.

Péter Török
fuente
3
+1 Regla de 10,000 horas de Malcolm Gladwell de en.wikipedia.org/wiki/Outliers_(book)
StuperUser
Aunque un profesional tiene que hacer los trabajos desagradables, hay otro lado: los trabajos desagradables suelen ser trabajos aburridos y tediosos que enseñan poco. IOW, el aficionado a menudo puede aprender más al mismo tiempo al elegir desarrollar proyectos interesantes. PERO una lección importante es, por supuesto, que debes estar preparado para hacer el trabajo aburrido y tedioso. Me gusta especialmente su "contribución a proyectos de código abierto" porque eso significa trabajar con el código de otra persona - aprender con el ejemplo, cómo leer código desconocido, etc.
Steve314
@StuperUser su enlace está roto (el segundo paréntesis no está incluido en el hipervínculo).
Paperjam
Algunos de los mejores consejos que he leído: "Si quieres convertirte en un artista decente, dibuja. Todas las mañanas, haz un boceto, no puedes evitar mejorar" ... encuentra un proyecto ... hay muchos hay ganancias que necesitan ayuda ... pida consejo ("Estoy construyendo un sistema de facturación, ¿por dónde empiezo?", "¿Cómo manejo la seguridad contextual?", etc.) ... el costo de la falla es bajo y que sólo podría conseguir un concierto el pago fuera de él ..
Bobby D
@ Steve314, mejores profesionales escribirán herramientas para automatizar tareas tediosas mundanas. Al usar las herramientas adecuadas para el trabajo correcto, he reducido el tiempo para algunas tareas en cientos de factores. (Incluso mejores herramientas podrían haber sido capaces de automatizar esta tarea por completo de distancia, pero llegado a lo que se sentía como un buen equilibrio entre el esfuerzo y el tiempo ahorrado herramienta de escritura.)
sarnold
18

Pero para un programador aficionado, ¿cómo puede entrenarse para convertirse en un buen programador?

Te vuelves mejor aprendiendo, lo que en parte es hacer, en parte reflexionar sobre lo que se hizo.

Básicamente, no hay diferencia entre aficionado y profesional, pero las "trampas" se arreglan un poco diferente.

Las trampas de los aficionados son, en mi humilde opinión

  • La necesidad de terminar su proyecto, pase lo que pase, no es tan fuerte cuando no es profesional . Esto puede ser algo bueno, porque no te acostumbrarás a cortar esquinas cuando se trata de calidad, pero terminar (¡en absoluto! A tiempo es aún mejor) es una habilidad muy importante, que es más difícil de entrenar como aficionado, porque es fácil dejar morir un proyecto y comenzar otro.

  • La necesidad de comunicarse bien no es tan fuerte. En un proyecto profesional, existe un fuerte incentivo para comprender realmente a los clientes, incluso si son completamente incapaces de formar solo una oración coherente de cuál es el problema que quieren que resuelva. Si los malinterpreta, o (el caso habitual) no se da cuenta, de que no hablan de algo que necesita comprender, se convertirá en su problema, tarde o temprano. Un proyecto de aficionado puede perder fácilmente a todos los usuarios potenciales, debido a que no resuelve sus problemas, y ser 'terminado' de una manera técnica.

Las trampas profesionales son

  • A menudo hay poca motivación para mejorar . Estás allí 40 horas a la semana, sin importar si encuentras la cura para el cáncer o simplemente tomas café de una manera que parece productiva. Aprender es algo que haces principalmente por ti mismo y, a menudo, si intentas aplicar lo que aprendiste, hay fuerzas que trabajan en contra de eso (el pensamiento de grupo conservador, las jerarquías, incluso las guías de estilo pueden usarse como armas contra las mejoras). Se necesita mucho amor para la profesión no solo renunciar, reducir sus horas y buscar propósitos alternativos en la vida.

  • A menudo hay poco de qué aprender . Sí, uno PUEDE tratar de tomar todo como un desafío, pero debemos ser honestos: después de 1 año del código Spaghetti no se le permite refactorizar ("¡lo estás complicando!") En un idioma que tienes más años de experiencia en lo que probablemente durará, lo único que se aprende es construir una tolerancia contra la frustración y la política corporativa.

Si tocas música o cantas, puedes tocarlo por interés, aún puedes convertirte en un buen cantante o reproductor de música, pero no necesitas convertirte en un cantante profesional o cantar para vivir.

Por supuesto, no es necesario, pero ¿cuántos músicos rechazarían la oportunidad de renunciar a su trabajo y ganar dinero con su música?

En TI, estas oportunidades son un poco más probables que en Música, por lo tanto, creo que no es imposible convertirse en un famoso aficionado, pero a menudo, los aficionados hacen de su pasión su trabajo (con problemas similares que tienen los músicos cuando tienen que hacerlo). averiguar su línea entre comercio y arte)

keppla
fuente
Esto duele mi alma, es tan cierto para mí atm, lol. 1 año del código Spaghetti que no puedes refactorizar ("¡lo estás complicando!")
Terrance
1
"A menudo hay poca motivación para mejorar". Si alguna vez tuve un empleado que tratara el desarrollo de software de esa manera, prefiero despedirlo que una persona que trata de hacerlo mejor, incluso si están rompiendo cosas inadvertidamente de su intento.
@ Chris Marisic: entonces estaría encantado de trabajar con usted. lamentablemente, usted sería la excepción en la línea de mis empleadores
keppla
8

Me temo que hay más posibilidades de aprendizaje para los aficionados que para los drones corporativos a tiempo completo. Como aficionado, no está limitado a ninguna tecnología, entorno, diseño y metodología de desarrollo. Puedes hacer lo que sea útil para tu desarrollo personal. Como desarrollador a tiempo completo, es probable que trabaje en un mismo producto durante años, siguiendo la misma rutina, limitada por las mismas pautas corporativas. Para la mayoría de nosotros no es más que un estancamiento. Se puede aprender un poco de un entorno corporativo, una vez que esté familiarizado con los conceptos básicos comunes.

Esa es la razón por la cual muchos desarrolladores a tiempo completo también son aficionados, siguen codificando después del trabajo, juegan con sus propios proyectos de juguetes: es un poco de libertad necesaria para crecer.

SK-logic
fuente
6

Como programador aficionado, hoy en día tienes muchas posibilidades para mejorar tus habilidades. Hice lo siguiente para mejorar mis habilidades mientras estudiaba ingeniería de software.

Por supuesto, también debes aplicar tus conocimientos. Haga esto a través de una pasantía, un proyecto con amigos o un curso de estudio. Hay muchas maneras de mejorar, solo tiene que estar dispuesto a invertir su tiempo libre. Además, ¡ diviértete aprendiendo algo nuevo !

BenR
fuente
4

¿Es posible que un aficionado se convierta en un buen programador?

Sí, es posible , sin embargo, lleva mucho tiempo:

Lleva alrededor de diez años desarrollar experiencia en cualquiera de una amplia variedad de áreas, incluyendo el juego de ajedrez, composición musical, operación de telégrafo, pintura, piano, natación, tenis e investigación en neuropsicología y topología. La clave es la práctica deliberativa: no solo hacerlo una y otra vez, sino desafiarse a sí mismo con una tarea que está más allá de su capacidad actual, probarla, analizar su desempeño mientras y después de hacerlo, y corregir cualquier error. Entonces repite. Y repite de nuevo.


¿Cómo puede un programador aficionado entrenar para convertirse en un buen programador?

De nuevo de la misma fuente :

  • Interesarse en la programación
  • Programa
  • Hable con otros programadores.
  • Si quieres, pasa cuatro años en una universidad
  • Trabaja en proyectos con otros programadores.
  • Trabajar en proyectos después de otros programadores.
  • Aprende al menos media docena de lenguajes de programación
BЈовић
fuente
Yo no suelen +1 respuestas consistentes únicamente en los enlaces, pero este artículo es digno de la lectura. Gracias.
sarnold
¿Le importaría explicar esto con más detalle? ¿Cómo y por qué responde a la pregunta que se hace? Las "respuestas de solo enlace" no son bienvenidas en Stack Exchange
mosquito
1
@gnat El enlace lo dice todo; espero que sea mejor después de la edición.
BЈовић
3

Como aficionado, tiene más opciones para buscar mejores prácticas que muchos profesionales. Los profesionales a menudo están bajo presión para "simplemente hacerlo".

No he visto ningún curso como el que aprendí a programar, pero aprendí de algunos cursos gratuitos cortos (1-3 horas) presentados por la Universidad a la que asistía. Pretendían permitir que las personas de negocios entiendan el código que se está escribiendo para ellos. Los cursos presentaron un código muy bien escrito (comentarios incluidos) que resolvió un problema común de la vida real. Luego se revisó el código con una explicación de las características del lenguaje y por qué se usaron de la forma en que estaban. Ninguno de los cursos de idiomas completos que he visto da como resultado un código cercano a la calidad de lo que aprendí de ese curso. Pasaron un par de años antes de que empezara a estudiar Ciencias de la Computación.

Internet y la biblioteca proporcionan muchos recursos y ejemplos. Creo que muchos de los ejemplos no son muy buenos para nada más que para hacerlo. Al mirar ejemplos, primero mire el código. ¿Puedes entender su propósito y estructura sin la explicación? Si es así, puede haber encontrado un buen ejemplo.

Algunas prácticas clave que debe aprender y aplicar:

  • SECO (no te repitas).
  • DRO (no repita otro); Use las bibliotecas de idiomas estándar, use otras bibliotecas.
  • Mantenga el código simple. El código elegante tiende a ser más difícil de mantener. Peor aún, los optimizadores a menudo producen un código de máquina más lento que el código más simple.
  • Los módulos deben tener un solo propósito. (Es mejor si ese propósito es hacer el trabajo o tomar decisiones).
  • Usa buenos nombres. No use nombres cortos para evitar escribir, use un IDE con autocompletar en su lugar. Comprenda las convenciones de nomenclatura de su idioma.
  • No optimices tu código. Espere hasta que pueda medir su rendimiento y sepa que optimizarlo tendrá un efecto notable.
  • Seguir aprendiendo. Aprenda a identificar recursos que le proporcionarán información útil que puede usar ahora.
BillThor
fuente
2

Si te gusta tocar música o cantar, puedes hacerlo porque es tu hobby y estás interesado, y puedes convertirte en un buen cantante o reproductor de música. Pero no necesitas convertirte en un cantante profesional o cantar para vivir. ¿Es esto también cierto para los programadores? ¿Algún programador aficionado que sea famoso?

De ningún modo. Es ingeniería de software . No se basa en el "talento natural". Ser un gran programador se basa en años de educación y años de experiencia . Solo obtienes eso trabajando en proyectos reales .

vartec
fuente
2
En realidad es, en gran medida, un talento natural. No puede entrenar a un ingeniero de software pobre para que sea excelente, pero generalmente puede entrenar a cualquiera para que sea bueno. Es muy parecido al talento musical o artístico, puedes entrenar a casi cualquier persona para que sea bastante bueno, pero no puedes entrenar a nadie para que sea genial, ellos se entrenan a sí mismos y probablemente sean mejores que CUALQUIERA de sus entrenadores. También, como los atletas de clase mundial, pocos han conocido un talento de programación de clase mundial que pueda explicar por qué la mayoría de los programadores no saben que existen :)
Bill K
2

En las entrevistas de trabajo a las que he asistido (por parte del empleador), siempre he pedido cosas que el entrevistado ha estado programando como aficionado (excepto las tareas escolares); haberlo hecho es una señal segura de interés genuino en el campo y tener pasión por aprender solo. No solo es posible, es casi un requisito para ser bueno.

Imre
fuente
2

¿Es posible? Si. Sin embargo, cuanto más tiempo dedique a programar, más tiempo tendrá para mejorarlo. Se ha dicho que se necesitan 10 años / 10 000 horas de práctica deliberativa para desarrollar experiencia en una habilidad técnica. No son 10 000 horas de hacer el mismo tipo de codificación en su zona de confort (por ejemplo, escribir código jQuery simple para diferentes sitios web), sino 10 000 horas de aprendizaje / lectura sobre programación / lectura de código fuente / escritura de código fuente / aprendizaje de otros idiomas / trabajar con otros, etc.

Si vas a dedicarle ese nivel de tiempo; también podrías conseguir un trabajo como programador y dejar el estado de aficionado. (A menos que sea rico de forma independiente).

dr jimbob
fuente
1

Todos somos aficionados en todo en un punto. Si quieres convertirte en un buen programador y es algo que disfrutas hacer, lo harás. La clave es programar por tu cuenta. La escuela te enseñará casi nada. La mayor parte de su aprendizaje se realizará solo y en el trabajo. Si quieres ser bueno, ve a ser bueno.

Yatrix
fuente
1

Dado el verdadero significado original de la palabra ( aficionado francés "amante de", del francés antiguo y, en última instancia, del latín amatorem nom. amator , "amante" - Wikipedia), a uno le gustaría creer que un gran número de profesionales también son aficionados. Si no amas tu oficio, ¿lo estarías practicando?

Por supuesto que es posible: si te encanta la programación, la practicarás y, con el tiempo, serás bueno en eso. (Quizás nunca genial, dados los talentos personales o la falta de ellos), pero al menos bueno

StevenV
fuente
El verdadero significado de aficionado es el significado que se encuentra en el DEO o el NOAD. La etimología de una palabra no dicta su significado. "Alguien que se dedica a una actividad, estudio, ciencia o deporte como un pasatiempo en lugar de como una profesión".
Django Reinhardt
cierto. quizás debería haber escrito "significado original" en lugar de "significado real". Es lamentable que nuestro idioma actual no tenga una palabra común para "personas que hacen algo porque realmente les encanta hacerlo". Creo que eso ayudaría a responder la pregunta del OP: "¿Es posible que un aficionado se convierta en un buen programador?" Por supuesto que es posible: si te encanta la programación, la practicarás y, con el tiempo, serás bueno en eso. (Tal vez nunca genial, dados los talentos personales o la falta de ellos), pero al menos bueno.
StevenV
0

No sé qué define a un buen programador. Pero aprender algo propio y trabajar con un grupo de personas es algo diferente. Los programadores aficionados apasionados realmente aprenden cosas nuevas y piratean. Allí encontraron cosas más interesantes. Pero trabajar con un grupo de personas es un acto ligeramente disciplinado en el que colaboras, te comunicas, compartes / obtienes información de los expertos en esa área.

Pero obtener conocimiento es solo cuestión de pasión. Hay personas que pasaron noches aprendiendo cosas y finalmente terminaron trayendo algo nuevo al mundo como Bill G Mark Zuck, etc. No se puede comparar fácilmente. pero si desea ser un mejor ingeniero de software (no llamaré al programador), únase a una empresa o trabaje para algunos buenos productos que otros utilizan.

Finalmente, lea mucho para mejorar sus habilidades, actitud, actualizaciones de la industria, desarrollar un gusto e ir con pasión. ¡Las cosas te seguirán fácilmente!

sarat
fuente
Tanto Bill Gates como Mark Zuckerberg estudiaron ciencias de la computación en Hardvard hasta que comenzaron su propio negocio y abandonaron. No es un buen ejemplo de aficionados .
vartec
¡Dudo si Harvard ha jugado un papel importante en el desarrollo de sus habilidades de programación, excepto el entorno geek!
sarat
0

A la pregunta, "¿se han hecho famosos los programadores aficionados?" La respuesta es "Sí, pero la mayoría no se quedó así". El ejemplo más famoso en el que puedo pensar es Roy Fielding, quien realizó parte de su trabajo más importante mientras (creo) no remunerado en la Universidad (aficionado significa no remunerado por definición).

El truco para ser de calidad profesional es tener un mentor o un conjunto de mentores (como un equipo en un proyecto de código abierto) y una dedicación seria al tema. Como músico anteriormente profesional, mi experiencia es que ambos son necesarios para ser bueno como profesional o aficionado. Algunos pueden ser aprendidos por los libros, pero sin una crítica externa consistente se hace muy difícil superar los malos hábitos adquiridos como novatos.

Dicho esto, en el caso del programador, es mucho más fácil de aprender que el del músico: según mi experiencia, como músico es mucho más difícil como músico ver tus errores pedagógicos que ver el código que solo no funciona Por otro lado, también requiere una inversión de tiempo sustancialmente mayor para ser un buen desarrollador.

cwallenpoole
fuente
0

Como cualquier otra cosa, la mejor manera de mejorar en algo es sumergirse en el entorno en el que desea ser bueno y rodearse de personas muy superiores a usted que estén dispuestas a tolerarlo y enseñarle. No es fácil de hacer, pero eso es lo que he encontrado es la mejor manera de aprender a ser bueno en algo más rápido.

Pero cuando se trata de ser un programador verdaderamente talentoso, tienes que ser exactamente eso, ser talentoso. Si no eres un violinista con talento natural, nunca serás tan bueno como los maestros, sin importar cuánto lo intentes o qué instrumento compres. Del mismo modo, si no tienes ese don que hace que los programadores sean realmente geniales, nunca serás ellos tampoco.

stu
fuente