Mi amigo me pidió que interviniera en esto ya que soy un programador autodidacta y he trabajado en la industria durante más de 10 años.
Ya hay muchas respuestas en este hilo sobre recursos de aprendizaje, pero tal vez pueda darle algunas ideas sobre cómo estructurar su aprendizaje.
Primero, debes anticipar un cambio rápido.
Si bien hay fundamentos básicos (hablaré sobre cómo abordarlos a continuación), mi experiencia es que las principales herramientas del día a día en la caja de herramientas de un desarrollador profesional tienen una vida útil de aproximadamente 4-5 años.
Aquí hay un ejemplo aleatorio rápido de mi propia experiencia personal:
– 1999 – ~ 2001/2002: ASP clásico
– 2001/2002 -2003: ASP clásico con VB COM-dll-hell
– 2003 – 2006: ASP .NET con C # (.NET 1.1, 2.0 wow páginas maestras)
– Alrededor de 2006/7 dejé de hacer mucho con ASP profesionalmente, pero si volviera, usaría ASP .NET MVC con un marco Javascript MVC, probablemente más como una aplicación de página única (SPA).
Podría hacer listas similares para mi experiencia con C # (¿cómo vivimos sin Linq?), Java, Javascript, etc., pero entiendes la idea: la tecnología parece fluir en olas de 4-5 años … justo cuando pensabas que tenías relaciones bases de datos clavadas, te encuentras con problemas de escalabilidad y es mejor que tengas algunas respuestas como sharding o NoSQL o memcached.
Lo que esto significa es que si eres un programador práctico que resuelve problemas del mundo real, probablemente en un entorno empresarial, lo más probable es que en 4-5 años, estarás haciendo algo diferente de lo que eres hoy: o si se adapta a la nueva tecnología, no se mantendrá al día con los detalles y pasará a ocupar un puesto de gerente, o su cerebro se freirá y saldrá por completo de la industria.
Incluso para cosas que pueden parecer fundamentales fundamentales que no cambian, como HTML o C, por ejemplo, el cambio es rápido. El HTML de 2013 (diseños receptivos, CSS 3.0, marcos MVC de Javascript) tiene poca semejanza con el HTML de 2000, y hay todo un mundo de C ++ 11.
Por lo tanto, es importante comprender y aceptar las ondas tecnológicas, porque si no lo hace, rápidamente se convertirá en el tipo Cobol o AS400 en la trastienda que todavía se queja de esa nueva y elegante cosa llamada .NET. Los académicos también pueden sufrir esto, por lo que escuchará hablar de la desconexión entre el CS académico y la realidad de la industria.
¿Por qué algo de esto es importante para su pregunta?
Es importante porque necesita organizar su adquisición de conocimiento anticipando el cambio. Este es un tipo de aprendizaje muy diferente al aprendizaje, por ejemplo, cálculo, que no espera cambiar (incluso si cambian los métodos de enseñanza).
Entonces, ¿cómo haces para aprender mientras el paisaje está cambiando?
Personalmente he tenido mucho éxito adoptando un enfoque de cuatro puntas. Tengo cuatro cubos de aprendizaje separados, por así decirlo. Solicitó formas de aprender simultáneamente: le sugiero que trabaje en los cuatro cubos al mismo tiempo. En orden de importancia:
1) ¿Qué necesitas para hacer tu trabajo hoy? (Ola actual de tecnología: omita este paso si aún no está trabajando en la industria)
Su primer negocio es volverse altamente competente en lo que necesita HOY para hacer su trabajo. Si necesita saber HTML hoy, aprenda HTML hoy. Aprende sobre la marcha, durante la noche, lo más rápido posible. Trabaja durante el fin de semana. Bajo ninguna circunstancia se acerque a un libro sobre el desarrollo del kernel de Linux pensando que le ayudará a hacer su trabajo a menos que su trabajo sea el desarrollo del kernel de Linux. Para las herramientas que necesita hoy, le desanimaría a buscar un camino estructurado: toda la información que necesita está en línea. Solo necesita pasar de A a B y debe ser bueno para actualizar la información rápidamente para que pueda hacer su trabajo de manera efectiva. Solía leer muchos libros impresos, pero últimamente encuentro que el ritmo de cambio es demasiado rápido para imprimir (es posible que haya notado que la sección de libros de computadora de Barnes & Noble se está reduciendo, extrañamente). Aprende y aprende rápido.
2) Desarrolle una competencia central (sus herramientas de acceso)
No quiere ser un experto en todos los oficios / maestro de ninguno, por lo que le recomiendo elegir uno, tal vez dos idiomas y dominarlos, para mí, es C # y Java. Elija algo que sea un estándar de la industria con una alta tasa de adopción: preguntas principales de stackoverflow de perfil o sitios de trabajo. Esto es lo que aparece en la parte superior de su currículum, y le servirá a largo plazo. ¡Manténgase al tanto porque se agregan nuevas bibliotecas todo el tiempo! (java.util.concurent, System.Threading.Task). Bajo este encabezado: conviértete en un ninja con tu IDE, ya sea Visual Studio, Eclipse, IntelliJ o vim.
3) ¿Qué necesitas para hacer tu trabajo mañana? (Próxima ola de tecnología)
Cuando llegue la próxima ola de tecnología, no querrá quedar atrapado sin preparación. Si no estás preparado, te ahogarás y serás el chico de Cobol de la trastienda. Es útil tener en cuenta que su cerebro no querrá aprender cosas nuevas. Tu cerebro te dirá que las páginas web viejas y simples están bien, gracias, pero mientras tanto, ¿todos en sus 20 años están haciendo aplicaciones para iOS? Entonces, ¿cómo abordas el desafío de la tecnología emergente? Simple, juegas. Usted encuentra nuevas e interesantes tecnologías de vanguardia que puede ver que podrían ajustarse a una necesidad comercial de 2 a 6 años más adelante, y usted juega con ella. Quizás contribuyas a un proyecto de código abierto, o quizás solo juegues. Siempre esté jugando con algo que anticipa la próxima ola. Siempre mantenga los oídos y los ojos abiertos para conocer nuevos enfoques e ideas que pueda ver que podrían ser relevantes para que usted sea el tipo de referencia cuando ocurra. Pronto descubrirá que la tecnología de última generación es fácil de aprender una vez que sea útil con un par de idiomas (# 2).
4) Fundamentos (en curso)
Además de la ola actual de tecnología (prioridad n. ° 1 que pone comida en su mesa) y anticipando la próxima ola, que pone comida futura en su mesa, y tener una sólida competencia básica (C ++ / Java / etc.), los fundamentos básicos de aprendizaje le servirán bien. En mi caso, además de leer los clásicos (Mythical Man Month, Pragmatic Programmer, GoF Patterns, CLR via C #, Effective Java, Code Complete, etc.) también volví a la universidad y tomé un par de clases de matemáticas y CS. Pero hay una multitud de grandes recursos que otros han mencionado en este hilo (MIT). Por razones prácticas, trato esto como una prioridad más baja. Si tiene tiempo, priorícelo más alto.
Es importante que mantenga estos cubos separados. Si quieres hacer un curso de MIT CS Challenge – genial. Pero no confunda eso con el aprendizaje de Ruby para que pueda obtener su próximo cheque de pago o comenzar el próximo gran inicio, esa es la prioridad # 1. Si quieres volverte loco aprendiendo F #, fantástico, pero no pienses que eso te enseñará algoritmos fundamentales, aunque podría conseguirte un trabajo el próximo año. Y siempre refine sus habilidades básicas (# 2) a través de la práctica constante.