Cómo transformarme de un programador promedio con un título de CS a uno de los mejores programadores en diez años

Nota: corro WeDoTDD.com , échale un vistazo …

Aprenda sobre el Movimiento de Artesanía de Software y XP

Esfuércese por trabajar con colegas Artesanas y Mujeres Artesanas de Software que siguen el movimiento de Artesanía en Software. Manifiesto para la artesanía del software. Lea los elementos de esta página: Manifiesto para la artesanía del software: recursos. Uno de los puntos importantes de la artesanía es tener la pasión de transferir conocimientos, así que esfuércese por encontrar a otros artesanos en nuestra industria y vea si puede trabajar con ellos … consiga un trabajo en el que se encuentren, etc. y aprenda de ellos y de su equipo. Si es una buena cultura.

Trabajan en lugares que durante la mayoría de su tiempo en el día a día como parte de su cultura, forman un programa en pareja (por ejemplo, BrainTree, Atlassian, Pivotal Labs, etc.). La programación en pares transferirá el conocimiento a ti 10 veces más rápido que tomar años para aprender lo mismo por ti mismo y luego descubrirás que TODAVÍA lo estás haciendo mal :). Al vincularse, descubrirá rápidamente cuáles son las buenas prácticas, diferentes formas de pensar y un montón de otros beneficios que vienen con el emparejamiento. Aprende el desarrollo guiado por pruebas de ellos. Y solo aprender TDD en sí mismo le enseñará mucho sobre su propio código que ni siquiera se dio cuenta.

Lee estos libros para comenzar:

The Clean Coder: Código de conducta para programadores profesionales (Serie Robert C. Martin): Robert C. Martin: 0076092046981: Amazon.com: Libros
y
El software Craftsman: Profesionalismo, Pragmatismo, Orgullo (Serie Robert C. Martin): Sandro Mancuso: 9780134052502: Amazon.com: Libros

Los foros

Haga una gran cantidad de preguntas sobre stackoverflow y no se sienta avergonzado o avergonzado de hacer preguntas en ese sitio. Hacer preguntas es cómo aprendes … incluso si son preguntas estúpidas. Obviamente, haz tu debida diligencia para practicar y buscar cosas, pero en realidad, apilar es un gran recurso porque obtienes respuestas con muchos puntos de vista de otros desarrolladores y diferentes tomas sobre cómo hacer lo mismo si golpeas un muro de ladrillos.

Visita el foro de Clean Code : Grupos de Google

Aprender sobre buen diseño

Lea el Código de Limpieza: Un Manual de Artesanía de Agile Software: Robert C. Martin: 9780132350884: Amazon.com: Libros

Echa un vistazo a los codificadores de limpieza por una tonelada de algunos de los mejores videos por ahí.

Lee las reglas de simplicidad de Xp

Leer: Las 4 reglas del diseño simple

Escrito por coreyhaines ᕕ (ᐛ) ᕗ uno de los mejores en términos de diseño y prueba de software. Tengo esto, y es una buena lectura corta pero tiene mucha buena información en cuanto a cómo mantener su diseño simple, que es el nombre del juego para mejorar su código.

Leer Refactorización: Mejorar el diseño del código existente: Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts: 9780201485677: Amazon.com: Libros

Practicando el diseño bien hecho

Por último, pero no menos importante, echa un vistazo a una de las publicaciones de mi blog Aprendiendo la arquitectura limpia y aplicándola mientras hace BDD

Buscar aprendizajes

Nuestra profesión está cambiando. El aprendizaje se está convirtiendo en la norma. Las empresas están empezando a valorar las buenas culturas y el código de alta calidad. Los aprendizajes son el resultado de esta fuerza de cambio y surgen en todas partes hoy en día.

Trate de obtener un aprendizaje en los lugares que los proporcionan. Por ejemplo, https://8thlight.com/apprenticeship/, ThoughtBot, etc.

Practica haciendo katas.

Y obviamente, una práctica dada, de noche. Los Katas de código son una buena manera de comenzar. Me ha llevado años de todas las horas de la noche llegar a donde estoy ahora. Practica como el infierno. Practica el código que disfrutas a través de un proyecto de código abierto (es más fácil decirlo que hacerlo para los nuevos desarrolladores), un juego, pero seamos más realistas en tu lugar, podrías intentar algo un poco más tangible para un Jr. Dev, como codifique un nuevo sitio web con la tecnología que quiera aprender, porque eso requiere que ejerza la pila completa (de principio a fin), lo cual es ideal si quiere llegar a cualquier parte.

Aprender TDD (Test Driven Development)

Entonces veo que TDD es una técnica / enfoque indispensable para codificar todo el código nuevo que hago. Simplemente funciona demasiado bien para no hacerlo. Está grabado en mí, y me encanta. Hay demasiados beneficios para no practicar TDD IMO.

¿Quieres saber quién está haciendo TDD? Encuentra aquí: WeDoTDD.com

Lea el desarrollo guiado por pruebas: por ejemplo: Kent Beck: 9780321146533: Amazon.com: Libros

JB Rainsberger – jbrains.ca Capacitación en línea

http: // formación online. jbrains / courses / wbitdd-01

Soy un suscriptor, excelente curso aquí y también responde preguntas a sus estudiantes … muy abiertos y entusiastas para ayudarlo a pasar al siguiente nivel.

UpCase por Thoughtbot

Upcase

Otra empresa de primera categoría … Recomiendo que te registres y te unas a UpCase, solo para eso, para que llegues al nivel superior, en la parte superior de tu juego como programador.

Ir a muchos encuentros

Como otros ya han mencionado, encuentros locales. Pero hay buenos encuentros y hay encuentros malos / mediocres . Vaya a reuniones donde encuentre un montón de personas apasionadas que quieran aprender y también compartan conocimientos. Por ejemplo, si estás en Chicago, Groupon tiene un excelente encuentro para Node.js. Y de la forma en que lo ejecutan, también tienen “Ayuda con la noche del proyecto” donde van y la gente se reúne para compartir y ayudarlo a responder las preguntas que pueda tener sobre su propio código y aprender cómo otros también están haciendo las cosas.

No vayas a las reuniones que solo tienen oradores y nadie habla después. Lo que quiero decir es que todos van a escuchar, pero en realidad no se involucran con nadie antes y después. Encuentre las reuniones en las que son muy activos y participe en eventos como “compartir código”, “programa de parejas”, etc. No, no estoy hablando de “hackathons”. Quieres ir a esas reuniones donde la gente habla antes y después de quienquiera que hable, porque obtendrás mucho más de eso que simplemente ir allí para escuchar a cualquier orador con el que se hayan alineado y luego irse sin conocer a nadie y hablar con el código. .

Ir a un retiro de código.

El concepto de un retiro de código fue originalmente iniciado por Corey Haines . No, esto no es un “hackathon” . Bastante diferente e IMO mucho más productivo y satisfactorio.

Se valora la programación de pares, Software Craftsmaship (mejorando uno mismo y guiando a otros), y un día completo de aprendizaje juntos trabajando juntos en katas. Estos son los tipos de desarrolladores de los que deberías buscar estar cerca y aprender. Estos eventos son ahora mundiales y crecen cada vez más todo el tiempo.

Me gustan las otras respuestas porque son muy informativas y creo que aplicaré algunos consejos yo mismo.

Una cosa que quería mencionar que nadie parecía decir es que también debes aprender a estar orientado hacia la carrera.

Centrarse en la tecnología en sí es excelente y sus habilidades estarán en demanda cuando las domine. Sin embargo, creo que también es importante tener en cuenta que será difícil aprender de otros si no estás en la situación correcta para hacerlo. Solo hay tanto que puedes aprender por tu cuenta, pronto necesitarás encontrar mentores y personas con más experiencia que tú para enseñarte sus caminos. Para ubicarse en las situaciones correctas, necesitará estar en red y orientarse hacia su carrera. En otras palabras, no solo seas un geek.

Le sugiero que comience a buscar ofertas de trabajo en línea y a la sección de requisitos y la sección de habilidades / experiencia deseables . Desde allí, busque desarrollar sus habilidades para cumplir con los requisitos, y vaya más allá.

Parte de ser el mejor es ser un mejor profesional en general, y para eso recomiendo lo siguiente como tarea:

  1. Cracking the Coding Interview, 6ª edición: 189 Preguntas y soluciones de programación: Gayle Laakmann McDowell: 9780984782857: Amazon.com: Libros
  2. Punto focal: un sistema comprobado para simplificar su vida, duplicar su productividad y lograr todos sus objetivos: Brian Tracy: 9780814472781: Amazon.com: Libros

Rompiendo la entrevista de codificación por Gayle Mcdowell te enseñará todo lo que necesitas saber sobre entrevistas técnicas para que puedas ingresar a las mejores compañías con los mejores ingenieros. Desde allí podrás aprender de los mejores.

Focal Point por Brian Tracy le enseñará sobre la administración del tiempo, el establecimiento de objetivos, la simplificación de tareas y un sistema para el éxito. Recuerde que una persona promedio con un sistema exitoso ejecutará círculos alrededor de un genio técnico sin plan ni dirección.

¡Buena suerte!

No existe una categoría única de ” mejores programadores “: todos se especializan en un campo específico o invierten en un cierto tipo de conocimiento.

  • ¿Quieres ser un programador multidisciplinario cómodo en la construcción de todo tipo de productos?
  • ¿Está interesado en los componentes internos de los lenguajes de programación y está ansioso por crear el suyo propio?
  • ¿Quieres ser una sexy estrella de rock que puede escindir MVP en poco tiempo y lanzar productos para nuevas empresas?
  • ¿Está entusiasmado con la depuración de software de 30 años de antigüedad que agregaba 50 millones de líneas de código y continúa mejorándolo con el tiempo?
  • ¿Ha soñado con predicar paradigmas de programación como orador principal en todo el mundo?

Los programadores más destacados que conozco se encuentran en una o dos de las categorías mencionadas anteriormente . Han invertido más de una década especializándose en un campo peculiar, buceando mucho más profundo que cualquier otra persona a su alrededor, y continúan estudiando todos los días.

  1. Participan en hackatons, comunidades de inicio, desafíos de codificación.
  2. Construyen múltiples proyectos para mascotas: diferentes herramientas, scripts, bibliotecas, marcos.
  3. Contribuyen a bibliotecas y proyectos de código abierto.
  4. Ellos son mentores de los desarrolladores.
  5. Mantienen un círculo interno de estrellas de rock, charlan regularmente en línea y se reúnen de vez en cuando (la típica noche de geek o un hackaton de noche impredecible).
  6. Sus bibliotecas de origen contienen ” Código limpio “, ” El programador pragmático “, ” La pandilla de los cuatro “, ” Artesanía de software “, ” Diseño impulsado por dominio “, ” Refactorización de patrones “, ” Arquitectura de software en la práctica “, ” Prueba de Desarrollo impulsado ”,“ Entrega continua ”,“ Código completo ”, entre otros libros acreditados para ingenieros de software.
  7. Siguen un montón de podcasts, ven transmisiones en vivo de conferencias de desarrolladores y asisten a la mayor cantidad de ellos posible.
  8. Enseñan talleres o clases técnicas de vez en cuando.

Si quieres convertirte en un destacado programador, no dejes de aprender. Trabaja duro, experimenta, empuja más allá de tus límites. Rodéate de geeks que son más inteligentes que tú y esfuérzate por mejorar. Participa en un proyecto de software emocionante y desafiante. Contribuir de nuevo. Construye tus propias herramientas y automatiza tus procesos.

Un gran desarrollador a menudo se avergüenza de su código y flujo de trabajo creado hace uno o dos años. Mientras continúes progresando, siempre serás mejor y más eficiente en lo que haces.

  1. Encuentra un mentor. Si eres el programador con más experiencia en la sala, probablemente estés en la sala equivocada.
  2. Aprende a amar los rompecabezas, y la frustración que traen. Cuanto mayor sea la frustración, mayor será la alegría de resolverla.
  3. Cuando pueda, no resuelva los problemas que sabe cómo resolver, sino empéjese a lo desconocido. Confía en mí, nunca pasa nada interesante en la zona de confort.
  4. Se humilde. Date cuenta de que tu conocimiento es limitado y nunca abandones esa realización.
  5. No se enamore de ese lenguaje de programación especial, y luego defienda su supuesta superioridad en todos los foros disponibles. Solo terminarás roto de corazón.
  6. No entres en la programación por dinero. Eres una década demasiado tarde para eso. El dinero es un beneficio secundario, es el crecimiento lo que importa.
  7. Ejercicio. Le da a su mente tiempo para relajarse, y su tiempo subconsciente para resolver problemas en segundo plano. Además, se siente bien estar en forma.
  8. Asegúrese de dormir lo suficiente. Si logras lograr eso, asegúrate de hacerme saber cómo lo hiciste.
  9. Intenta evitar la adicción a la cafeína.
  10. Que te diviertas.

Lo mejor que puede hacer para convertirse en una gran industria, en mi opinión, es probar su código. Muchos programadores piensan de la siguiente manera: “Oh, funcionará. No voy a escribir pruebas para mi software o ‘perder el tiempo’ solucionando errores más pequeños. Dejaré que los errores crezcan hasta que sean grandes suficiente para merecer atención “.

Ejemplo 1
Mira a Microsoft que acaba de seguir lanzando código basura. ¿Recuerdas las infames pantallas azules de la muerte cuando hubo un error en el núcleo? ¿Por qué cree que pasó? Te daré una pista. No es solo culpa de Microsoft. Se debe a cualquier programador que escribió un código que interactuó con ese sistema operativo estandarizado.

Los sistemas fallan, pero necesitaban mejorar su juego para hacer que su sistema sea más estable, y finalmente lo hicieron. Hoy en día, Windows es mucho más estable, pero aún parecen pensar que las personas quieren que se les reinicien en la mitad de su trabajo solo porque actualizaron su sistema.

Mac está ganando la guerra del sistema operativo simplemente porque prueban su código. Linux no tiene la corriente principal simplemente porque es muy potente y, por lo tanto, muy complejo. (Aunque Ubuntu y otros hacen tonterías para la gente, así que la mayoría de la gente puede usarlo).

Ejemplo 2
Fugas de memoria están por todo el lugar. Los punteros son el talón de Aquiles de la mayoría de los programas de estilo C. Si no puede administrar su memoria correctamente y su memoria llega a un cierto punto, podría volcar datos útiles en un archivo, iniciar una segunda instancia del programa, hacer que lea el archivo y eliminar la instancia anterior, y así omitir cualquier problema de memoria. (El sistema operativo purgará la memoria basura para ti, mientras que te ves genial para darte cuenta de que no puedes hacer tu trabajo correctamente al administrar tu memoria, por lo que tomaste un atajo razonable para solucionarlo).

La persona que usa su software no debería notar el intercambio, y en un entorno de servidor, eso podría significar la diferencia entre perder millones de dólares o ganar millones de dólares cuando se relaciona con el software empresarial.

Cuando la gente, literalmente, crea complementos de terceros solo para arreglar su software, usted sabe que tiene problemas. Ver: [Complementos de memoria de Firefox] ( https://addons.mozilla.org/en-US… )

Mozilla declaró que ahora tienen un grupo interno creado solo para resolver sus problemas de administración de memoria.

Resumen
La programación es un trabajo duro, y cada programador es humano, por lo que se producen errores. No estoy diciendo que no escribas código buggy. Lo que estoy diciendo es que cuando sabes que algo no funciona, asegúrate de arreglarlo. Escriba bibliotecas de prueba para probar su código en la infraestructura de destino y luego ejecute sus pruebas antes de propagar su código.

Como nadie parece tomarse las pruebas en serio, y sufro graves quemaduras al validar meticulosamente todo mi código, decidí por un tiempo simplemente aflojarme y no escribir o ejecutar pruebas. [Mire dónde me llevó.] (BaseUriParameter on \ Raml \ Method by CozyLife · Solicitud de extracción # 62 · alecsammon / php-raml-parser)

¿Como puedes ver? La prueba es la habilidad más importante que se debe aprender y usar para que nadie tenga que sufrir debido al código de mierda.

Primero, 10 años es un período muy largo, puedes hacerlo incluso en 2 años y te lo digo por mi propia experiencia porque pasé por el mismo dilema hace unos años. Qué necesitas hacer:

  1. Comprenda la relación entre el software y el hardware y cómo funciona realmente el código. No hay otro libro en la historia de la ciencia de la computación tan completo como El lenguaje oculto del hardware y software de computadora: Charles Petzold: 9780735611313: Amazon.com: Libros. Esta es una lectura obligada
  2. Aprenda estructuras de datos, algoritmos y patrones de diseño porque son la columna vertebral del desarrollo de software.
  3. Enfócate en el láser porque no puedes ser maestro en una cosa a menos que solo hagas una cosa. Por ejemplo, después de haber trabajado en Java, C y Oracle, me di cuenta de que amo más el desarrollo web. Entonces, me centré en PHP, Jquery, Javascript, Ajax, MySQL, HTML y CSS. Con estas tecnologías, podría trabajar en diferentes tipos de software, por lo que me centré más en el desarrollo del comercio electrónico. Hoy mis clientes confían en mí como un desarrollador de comercio electrónico que puede resolver cualquier problema en PHP y MySQL
  4. Aprende a través del hacer porque te enseña lo que nunca olvidas. Recuerdo que cuando aprendí Ajax (un pequeño código de javascript), diseñé un proyecto que obtendría datos de otro sitio web a través de ajax y lo filtraría a través de JavaScript y lo mostraría en mi propio sitio web
  5. Realice proyectos freelance desafiantes, ya que encontrará muchas tareas desafiantes que, al resolver, se agregarían a su experiencia. Una vez que aprendí una lección clave de un amigo que había completado su doctorado en matemáticas en 3 años y me preguntaría cómo lo hizo. Su respuesta fue: ” si crees que no puedes realizar una determinada tarea, cree que puedes hacerlo a medida que le dedicas más tiempo y esfuerzo “. Y lo experimenté y lo encontré 100% cierto.
  6. Haz de google tu profesor. Si estás atascado en algo y no sabes cómo hacerlo, solo pregunta a Google
  7. Preguntar a otros Si no encuentra respuesta a su pregunta después de buscar en Google, solo pregunte a otros en sitios web como Stack Overflow

Si desea convertirse en el mejor programador, haga solo un trabajo y es decir, programando. Hacer algo una y otra vez y aprender más sobre él regularmente, te hace dominar eso.

¡La mejor de las suertes!

Whoa, llamándote “promedio” es realmente humilde. Los programadores incompetentes (y otros profesionales) no exhiben tal autoconciencia. La forma más fácil de resolver su problema es visitar a un terapeuta o tomar “medicamentos” específicos (no siempre legales) para aumentar su autoestima.

Disfruté de la amplitud de opiniones: tecnología de los evangelistas, de los eternos eruditos, de la codificación de los puristas, de los programadores competitivos, de los expertos en redes … Todos los consejos apasionados y válidos. Aquí viene otro sesgado para ayudarte a cuantificar la programación.

Fui un estudiante A en la escuela secundaria y un estudiante heterosexual durante mis primeros tres años en la universidad. Un comandante de CS como tú. Aprendí a programar a la edad de 13 años en una estafa rusa de un PDP-11 ejecutando Unix y codificando en C. Me encantó desde entonces. No podía imaginar mi vida sin ella.

Pero algo faltaba. El reconocimiento. No, no del tipo científico. No los premios de programación competitivos. Hackathons y concursos algorítmicos no existían en ese entonces. No me importaría de todos modos. Yo no soy el tipo científico. Criado en una familia relativamente pobre sin coches, soy un bastardo codicioso. Mido el éxito en juguetes caros que puedo disfrutar. Ahora mismo, no cuando cumpla los sesenta. Tengo que tener lo que me perdí en mi infancia.

Me encantan (tener) coches de carrera y motos legales. Hice trackdays cuando tenía tiempo. Me toma ocho horas (con paradas) completar un Siglo (aquí, en OC accidentado si eso importa), pero me subo a un costoso Aero Felt mirando un Venge Especializado de $ 12K con frenos y cables completamente ocultos.

Una captura Quiero mi trabajo: la programación paga por todos los juguetes que deseo. Irreal, ¿verdad? Los ingenieros no tienen derecho al lujo. MBA, corredores de bolsa, vendedores de diferentes tipos … Pero no ingenieros. Funcionó por un tiempo, antes de la “subcontratación” generalizada “offshore”. Volverá a funcionar para mí una vez que inicie mi inicio. Que Venge está llamando mi nombre.

Así que aquí están los mejores programadores que conozco: Bill Gates, Sergey Brin, Elon Musk y Mark Zuckerberg. ¿Son competentes en Haskell? ¿Ganarían un hackathon o pasarían su propio proceso de contratación riguroso de la empresa? ¿Quién da un sh_t? Llegan a hacer lo que disfrutan y pueden comprar cualquier juguete en el mundo, lo cual se logra a través de la programación en lugar de la administración de negocios o el comercio de acciones.

Encuentra tu nicho y vete. No hagas prisioneros.

Programando juegos. Cubren muchos aspectos que te hacen pensar mucho:
Estructuras de datos
Algoritmos
Patrones de diseño
Matemáticas
Física
Audio
Gráficos (2D, 3D, texturas, esqueleto, malla, API, etc.)
Gestión de memoria de recursos
Hardware
Mejoramiento
Redes
Diseño de protocolo
Scripting
Almacenamiento
Versión de archivo de documento
Parches
Bibliotecas de código
Compilando
etc.

Comience con los que parecen fáciles (tipo / género) y luego avance progresivamente, Snake, Pac Man, Tetris, Candy Crush, Super Mario, Sims City, Spore, Diablo, FPS, RTS, MMORPG.

La programación no es todo acerca de la codificación. Es el proceso de comprender un problema y compilar con una solución creativa. No tienes que saber todo en C o C ++ para ser considerado un gran programador, pero debes saber cómo funciona, cuáles son los conceptos básicos, etc.

Cuando se enfrenta a un desafío difícil que necesita superar, simplemente reúne las piezas básicas y trabaja para encontrar una solución. Pero si no sabes lo básico, sería difícil para ti pensar siquiera en una solución, y mucho menos en una.

A medida que se considera que la programación es excelente, hay que aprender lo básico: bits, bytes, algoritmos, estructuras de datos, compiladores, se entiende la idea. Una vez que sepa eso, simplemente elija un proyecto que pueda interesarle y trabaje en ello. Cuando te quedas atascado, Stack Overflow es tu mejor amigo. Al final del proyecto, habrás aprendido mucho. Por último, si bien no menos importante. La programación es como los deportes. Se mejora con la práctica.

Tenga en cuenta que la programación es cada vez más fácil, especialmente en la última década. Habrá millones más de programadores en el mercado en el futuro cercano a medida que el acceso a internet y las computadoras lleguen a las poblaciones más pobres, la educación también se está convirtiendo en gratuita y en línea.

También depende de lo que esté detrás de tu visión de “mejor programador”. Tiendo a no usar el término ‘programador’ en estos días ya que su definición es muy estrecha, lo que puede ser intencional de su parte. Yo diría que el “mejor desarrollador” sería alguien con un conjunto más amplio de habilidades, incluidas las habilidades interpersonales, el liderazgo, la comprensión del producto / mercado y cómo trabajar con los clientes (internos y externos) para lograr el éxito.

En una tangente, una cosa que no he visto mencionada en las otras respuestas hasta ahora es desarrollar una mentalidad que busque formas de no tener que escribir código y hacer prototipos rápidamente. He visto muchos proyectos a los que se ha acercado un desarrollador increíble que ha juntado algunos sistemas existentes y ha creado un prototipo de un sistema en un día, cuando un equipo de programadores menores aún escribiría un sistema desde cero tres meses después.

El desarrollador valioso tiene mucho más alcance que solo su habilidad como programador y para ganar el mejor dinero y participar en los proyectos más interesantes, sería mejor ser más completo que un buen “programador”.

Mis sugerencias pragmáticas son:
1. Echa un vistazo a todos los grupos locales de Find your people – Meetup, etc., y encuentra a todas las personas que respetas localmente (red)
2. Encuentre las empresas más interesantes para las que le gustaría trabajar y comience a enviarlas por correo electrónico, trate de no estar limitado por la geografía. Trabaja con buenas compañías y buenos equipos, cualquier otra cosa es simplemente exasperante y una pérdida de tiempo.
3. Expanda su pensamiento más allá de solo el código en el negocio si quiere ser un buen desarrollador y no solo un buen programador, Agile es ideal para esto. Sugiero apuntar a las pymes con equipos Agile inteligentes como uno de los mejores entornos para mejorar rápidamente.
4. Tomará 10’000 horas de trabajo para estar bien.
5. Haz ejercicio, come bien y duerme para que tu ritmo esté en plena forma
6. Muévase rápidamente: es fácil ingresar a las empresas como graduados baratos, así que comience a orientarse en las que desea trabajar por ahora. No crea que necesita trabajar durante cinco años en una empresa local no profesional para mejorar sus habilidades por un momento, aproveche las ventajas de ser barato y estar interesado.

El resto debe caer en su lugar.

No solo trabajes duro. Trabajo inteligente.

Ver el cuadro más grande. ¿A qué quieres realmente aspirar? ¿Por qué quieres ser un gran programador? ¿Qué significa ser programador?

Programar no es solo codificar en nuestros rincones. Tienes la oportunidad de crear cosas que impactan en este mundo sin importar cuán grandes o pequeñas sean tus aplicaciones. Entonces, ser un gran programador significa ser consciente del impacto y el uso que tendrán sus aplicaciones. Para entender cómo tus aplicaciones mejorarán los negocios y las vidas de las personas. Ten en cuenta cada vez que desarrolles algo.

Luego, con eso claro, piensa en lo que debes hacer para llegar a ese camino. Por ejemplo, si desea crear aplicaciones web, comience por elegir el conjunto principal de tecnologías que desea dominar, con algunas tecnologías adicionales para probar.
Ser adaptable e interesado en aprender nuevas tecnologías es bueno, pero especializarse en algunas es importante, porque así es como se pueden crear aplicaciones aún mejores. Al especializarse no me refiero solo a la codificación de Java o .Net sin parar. Cada conjunto de tecnologías son diferentes ecosistemas con sus propios trucos y comportamientos, y para crear aplicaciones web realmente eficientes de tamaño empresarial, necesita saber por experiencia lo que realmente funciona en entornos de producción (aplicaciones en tiempo real), no solo mediante la codificación de un proyecto paralelo. en su localhost en casa. Por lo tanto, debe estudiar más a fondo y elegir sus proyectos que le permitan obtener experiencia relevante. Y por lo que observé en la vida real, los especialistas obtienen más puntos a menudo.
Por supuesto, aún necesita aprender cosas nuevas y, si algún día llegan mejores tecnologías, tendrá que adaptarse. Pero intente enfocarse primero en un conjunto primario, que le permita construir lo que desea (aplicaciones web, aplicaciones nativas, etc.).

Básicamente, al ser un programador más consciente y especializado en ciertas tecnologías le permite ser uno de los mejores.

Siento que estás haciendo la pregunta incorrecta.

Digamos que tienes dos programadores, Jack y Jill. Jack es uno de los mejores programadores del mundo. Jill es simplemente muy competente.

La administración les pide a ambos que implementen la salida de PDF en las aplicaciones web en las que están trabajando. Jack dice “seguro, no hay problema” y se sumerge primero en el formato de documento PDF. Construye un marco que permite renderizar a múltiples formatos de salida, incluida la pantalla, PDF y cualquier otro formato futuro. Por supuesto, aunque sea tan brillante como él, esto significa refactorizar una gran cantidad de código, y da como resultado una gran cantidad de código que los programadores menos brillantes tendrán dificultades para mantener. También le llevó dos semanas completarlo, momento en el que se descuidaron otras características.

Jill señala a la administración que los navegadores y sistemas operativos modernos permiten que el usuario imprima en PDF y pregunta si eso es suficiente. La gerencia dice “eso está bien, esta no es una característica muy importante de todos modos” y la pone en otras tareas más importantes.

El programador menos experto ha agregado mucho más valor.

¿Quién quieres ser, el programador que agrega valor o que puede ganar competencias de programación?

Aprender sobre marcos, bibliotecas y plataformas de terceros puede no hacerte necesariamente un mejor programador, pero te ayudará a agregar valor. Yo iría en esa dirección yo mismo. La mejor de las suertes para ti.

Solo hay uno realmente útil para esta pregunta y la respuesta no proviene de ningún libro de programación. Tienes que mirar a Kobe Bryant.

Hace unos años escuché una historia sobre la ética de trabajo de Kobe Bryant. Tal vez pasaron algunos años antes de que se retirara y todavía estuviera en la búsqueda de títulos de la NBA.

El artículo hablaba de cómo, después de un juego en la carretera, se encontraría a Kobe horas más tarde en la arena, después de que todos se fueran, practicando su tiro en salto. Y no solo su tiro en salto, él practicaría cada tiro diferente que pudiera tomar en la cancha.

Durante horas después del juego, el mejor jugador en el juego estaba en la arena del oponente, tomando tiros.

Eso me dejó perplejo.

Y luego escuché más historias sobre la legendaria ética de trabajo de Kobe. Hay una historia sobre cómo cuando estaba en el equipo de baloncesto del Equipo de EE. UU., Se presentaba al gimnasio a las 4 de la mañana para hacer acondicionamiento físico, luego pasaba horas practicando su tiro en salto hasta que hacía cientos de canastas.

Luego, alrededor de las 9 o 10, todos los demás se presentaban a la práctica.

Supongo que después de que se fueron, él siguió disparando.

Hay una razón por la que su equipo ganó 5 títulos de la NBA. Y por qué fue un MVP de la NBA. Y por qué fue el mejor jugador de su generación y quizás entre los 5 o 10 mejores jugadores de baloncesto de todos los tiempos.

Sí, tenía un talento ridículo y una ética de trabajo aún más ridícula.

Si quieres transformarte de media a excelente, conviértete en Kobe Bryant.

Escribe código como Kobe tomó tiros en salto. Hacer eso todos los días durante los próximos 10 años. Estarás entre los mejores.

-Brian

Puede que te guste mi otra escritura también.

Enviar. Escribir software que a la gente le encanta usar. Envíalo.

Si no estás seguro de lo que la gente ama, haz lo que amas. No es lo que te gusta hacer, sino lo que te gusta usar . Y envíalo a ti mismo. Luego otros.

Puede aprender a hacer un código que es “mejor” en un millón de formas abstractas pero que a nadie le importa. Muchos programadores codifican para escapar. En su lugar, codifique para confrontar . Resuelva los problemas que tienen las personas y resuélvalos de una manera que los deleite.

Es muy difícil hacer cosas que sean buenas. Comience pronto. Y no pierda el instinto de usar el deleite del usuario como su vara de medir.

Una segunda cosa: ser buenos refactorizando. Cuando tienes una aplicación que está al 80% y ahora sientes que estás caminando en el barro. Cuando las decisiones que parecían buenas no eran lo suficientemente buenas para mantener la arquitectura limpia. Cuando no esté seguro de cómo volver a la simplicidad y aún así obtener las características. Cuando estamos cansados ​​de mirarlo … Saber cómo proceder es lo que separa a los profesionales de los niños. Una vez que haya sacado un proyecto de ese lugar varias veces, comenzará a ser un gran programador. Así que no subestime la resistencia, o espere que simplemente ponga huevos de oro todo el día. Hacer que parezca fácil es un proceso largo.

Buena pregunta. Un póster te dirigió a convertirte en un experto en la materia. Ese es un camino hacia un buen salario. Otra es omitir la programación por completo e ir a ventas o administración, donde está el dinero real. Pero, la respuesta a su pregunta es elegir un problema de importancia social que le apasiona y que sea absolutamente suyo. Desarrolle las aplicaciones web, las aplicaciones móviles, la inteligencia artificial y todo para dominarlo. Tenga en cuenta que le llevará posiblemente 1 a 2 años para generar ingresos. Te llevará 6 años para ser conocido. Luego, después de eso, puedes venderte a un dinosaurio y hacer otro gran proyecto. No te dejes atrapar por el “nuevo marco” del aceite de serpiente ni por los miles de subparates baratos, solo hazlo solo durante al menos 6 meses hasta que realmente lo descubras. Necesitará aprender el marketing, así que debe estar dispuesto a hablar con extraños que posiblemente le compren a usted y les ESCUCHEN y escuchen sus necesidades. Tal vez algunos coincidan con tu pasión.

La antítesis es ir a trabajar en un gran equipo. Allí arreglarás errores. Todo el trabajo divertido se otorgará a empleados de mascotas o subcontrataciones a subcontratistas incestuosos. No aprenderá nada más que cuán inútil e improductiva es la empresa estadounidense.

Buena suerte. Que puedas ganar y hacer algo genial.

  • Averigüe qué áreas le interesan más y manténgase al día con los documentos académicos en esa área de CS
  • Encuentra programadores cuyo enfoque te inspire y sigue sus compromisos en Github.
  • Someter su propio código a escrutinio haciendo solicitudes de extracción para proyectos de código abierto, etc.
  • No te alejes de la arquitectura. Está bien reinventar la rueda como un ejercicio de aprendizaje. Construyó un sistema de archivos para Linux, un núcleo de sistema operativo o cualquier cosa que capture su imaginación. Compare su enfoque con los enfoques existentes, bien transitados.
  • Conviértete en un nerd del lenguaje de programación: revisa todo el espectro de lenguajes y bibliotecas … Echa un vistazo a Rust, OCaml, Erlang, Go, Racket, etc. Descubre y aprecia cómo las diferentes culturas y prioridades en los diferentes lenguajes reflejan verdades profundas sobre la programación. ingeniería de software, y CS.
  1. Retarte a ti mismo. Si crees que te estás volviendo bueno en algo que ya no estás aprendiendo, pasa a otra cosa, aprende eso y hazlo bien.
  2. Responde preguntas sobre el flujo de apilamiento y contribuye con Github.
  3. Haz tus propios proyectos. Aprenderás mucho a lo largo del camino mientras investigas para superar los obstáculos.
  4. Aprender cosas nuevas. Aprende a diario. Escribir código a diario.
  5. Atiende los retos de programación: codificador superior, etc …
  6. Siempre mejora tu código.

Esto es facil. Y gracias por una buena estimación realista. También muchas gracias por la gran pregunta.

Comience con el aprendizaje de Haskell, o al menos Scala.
Haz tantos problemas como puedas en projecteuler.
Aprender la teoría de categorías. Repetir. Repetir. Para que entre en tu cerebro.
Adelante y comience a contribuir a proyectos de código abierto, cuanto más frío mejor. Tal vez comience por escribir documentos o pruebas de unidad para ellos, eso es fácil.
Prueba tus propios proyectos / soluciones, hazte visible en github.
Leer leer leer. No pierdas tiempo en reddit, etc., es solo bla-bla-bla. Regístrate en Twitter para escuchar lo que dicen las grandes personas. Lea los artículos que se refieren.

Para resumir, da un paso lejos de tu zona de confort. Todo se trata de la práctica, no puedes convertirte en un súper codificador sin trabajo y perseverancia.

Contribuya a proyectos de código abierto para ver y aprender el código producido por otros desarrolladores.

Ayude a las personas de Stackoverflow incluso si no conoce la respuesta en primer lugar. ¿Por qué no tomas 20 minutos todos los días para ayudar a al menos una persona en Stackoverflow? Te hará comprender los problemas que los programadores, como tú, enfrentan y resolver.

Debe sobre todo convertirse en una pasión para ti.

Ruta personal, YMMV :

  1. Únete a una start-up.
  2. Elige un jefe, no un proyecto / empresa.
  3. Trabaja como loco, (solía trabajar 70 horas a la semana, ahora es un miserable 60)
  4. Sigue pidiendo comentarios y sigue trabajando en ellos.
  5. Pida nuevas responsabilidades, en lugar de simplemente asignárselas.
  6. Entra, escucha e intenta contribuir, diseña discusiones y reuniones de arquitectura.

Sin embargo, ya no trabajo en técnica para ser honesto, y tengo una experiencia de aproximadamente un año en el campo técnico. Yo era apenas un titular promedio de CS con virtualmente ninguna habilidad de programación.