¿Puede sugerir un camino lógicamente estructurado y concurrente para la ingeniería informática autodidacta que implique una exposición considerable y permita la manipulación de SML, HTML 5, Java, Linux, redes, tecnología de servidor, Excel y Big Data a través de Ruby?

Recomiendo mucho este libro si quieres ser un buen programador:

Organización informática estructurada (5a edición): Andrew S. Tanenbaum: 9780131485211: Amazon.com: Libros

Va desde el nivel del dispositivo a través de la lógica digital, la arquitectura, el sistema operativo, el ensamblaje y los niveles de computación paralelos. Es una forma realmente increíble de llenar los huecos en su comprensión de cómo funciona una computadora. Al menos si tiene dudas sobre algunos detalles, conocer las cosas de este libro lo ayudará a saber dónde buscar para llenar los vacíos más finos.

Hay más en CS que pueden ayudarlo como desarrollador, pero realmente depende de lo que esté haciendo. Podría recomendar algoritmos, pero puedes usar Wiki, Google algunos algoritmos, usar el conocimiento de tus colegas y solo usar bibliotecas. No tendrá una comprensión completa de todo, pero muchos programadores OK funcionan sin conocer bien los algoritmos. Sin embargo, si quieres ser bueno o genial, querrás entenderlos. Recomiendo el libro de Sedgewick:

Algoritmos (4a edición): Robert Sedgewick, Kevin Wayne: 9780321573513: Amazon.com: Libros

Aparte de eso, son referencias más específicas para las herramientas que va a utilizar. Creo que la mayoría de esas cosas se pueden aprender en el trabajo mientras haces cosas, donde puedes buscar cómo hacer algo, o quizás tus colegas tienen algunos libros que recomiendan. Una vez que tenga suficiente, probablemente pueda acceder a Amazon y encontrar los libros mejor calificados relacionados con lo que está trabajando.

Si no está escribiendo controladores de dispositivos o algo así, puede aprender Linux bastante bien simplemente eliminando Windows e instalando Ubuntu y jugando un poco con él por un tiempo. Sin embargo, deberías esforzarte para hacer cosas nuevas tú mismo. Si realmente necesita entrar en las entrañas del kernel de Linux, le recomiendo el libro de Robert Love (sí, sígalo también en Quora):

Desarrollo del kernel de Linux (3a edición): Robert Love: 9780672329463: Amazon.com: Libros

Pero el libro de Tannenbaum también tiene un poco sobre cómo funciona el sistema operativo en general. Desafortunadamente, no conozco muchas redes, por lo que no puedo darle una buena recomendación al respecto. Creo que si lees estos tres libros, o incluso solo los dos primeros, serás un muy buen ingeniero de software. Si necesita habilidades más especializadas, creo que podrá descubrir cómo obtenerlas una vez que tenga una base decente con todo esto.

Buena suerte.

No, pero te sugiero varios.
Los detalles de la pregunta dan un ángulo en el que necesita computadoras para algo más allá del estudio de su espectacular belleza, por lo que haré una suposición y lo aclararé señalándolo en un diagrama de Venn de tres elementos esenciales de las aplicaciones informáticas:


Como estás de acuerdo con (excesivamente) los punteros generales, ampliaré el área interesante, la anotaré con algunos titulares y dibujaré algunos caminos. Todo es de grano grueso y ondulado, pero mirando en todas las direcciones más o menos simultáneamente, tal vez puedas encontrar algunas cosas que estás buscando. Puede que no le interese sondear todo el camino en todas las direcciones, pero dado que desea material para cualquier lugar de hasta 5 años, creo que estos deberían ser suficientes para durar la distancia:


Se han hecho omisiones y generalizaciones crudas, se han omitido nombres de tecnologías específicas, todo podría elaborarse y ampliarse, pero aún puede tener un atractivo. Tenga en cuenta que esto se hizo con miras a la pregunta, debería verse diferente con un objetivo educativo más universal.

Solo un comentario final: leer 60 libros al año es muy bueno, pero si tiene que elegir entre eso y leer 15 libros + ponerlos en práctica, elija el último. Probablemente ni siquiera tengo que decir esto, pero la computadora realmente se ve mucho más suave en un libro que en silicio y cables.

Antecedentes

Conseguí muchos excelentes trabajos de ingeniería de software sin un título en informática.

Plan

  • Dices que tienes conocimientos previos de informática, por lo que te recomendaría hacer lo que quieras en una máquina Linux. Intenta hacer la mayoría de las cosas a través del terminal. Descargue una hoja de trucos de Linux y comience a usar Linux para su uso diario. Intente instalar algunos paquetes desde la fuente. Esto lo ayudará a comprender cómo se ve el software y le dará la oportunidad de conocer de cerca y de manera personal lo que está utilizando. (6 meses de uso continuo te harán sentir cómodo con el sistema operativo)
  • Aprenda a codificar en un lenguaje, Java preferible (ya que está interesado en todo lo relacionado con los grandes datos y el análisis) . Aprenda tipos de datos, matrices, E / S, bucles, sentencias condicionales, funciones, clases. ( 1 mes sería suficiente para aprender y practicar los conceptos)
  • Nunca use un IDE cuando esté comenzando (2 semanas) . Aprenda lo que se usa para compilar el código desde la línea de comandos. ¿Cuáles son los usos de las diferentes banderas y cómo establecer rutas? Después de dos semanas, cambie a un buen IDE.
  • Aprenda estructuras de datos básicos y algoritmos (2 meses). Comprenda las complejidades computacionales, Buscar, Ordenar, Árboles, Gráficos, NP-Completitud e implementar lo mismo en el idioma que elija, por ejemplo JAVA. También busque en algoritmos de cadena como KMP.
  • Aprender sistemas operativos básicos (1 mes). Parece que realmente no necesita comprender el sistema operativo en detalle. Solo revisa los conceptos básicos. Qué es un kernel, controladores, llamadas al sistema, procesos de subprocesos, programación, sistemas de archivos. La vista general básica sería más que suficiente.
  • Aprenda las características avanzadas del idioma que ama (1 mes) Como si fuera con Java. Aprende cómo funcionan las plantillas. También aprenda algoritmos ya implementados. Para C ++, intente aprender metaprogramación de plantillas, STL maestro, etc.
  • Aprenda patrones de diseño (2 meses) Una vez que comprenda su idioma lo suficientemente bien y comprenda un poco sobre OS y DS, intente aprender sobre varios patrones de diseño como el decorador o el patrón único. Debería tomar tiempo porque estás practicando muchas cosas
  • Learn Networking (I month) Nuevamente, una descripción general es lo único que se requiere. Conozca cuál es la diferencia entre un servidor y un cliente. ¿Cómo se puede escribir el código del lado del servidor? Comprenda el modelo OSI, intente jugar con algoritmos de programación y comprenda las compensaciones entre varios parámetros de red. Aprenda también la programación de sockets simples y pruebe y entienda cómo codificar una aplicación de chat simple
  • Instale la pila LAMP, Tomcat7 o algo así y vea cómo escribir una aplicación web. APRENDA cómo funcionan los serverlets e intente escribir algunos. Comprender Spring, Roo, Hibernate, etc. (3 meses)

Suma hasta 13 meses, pero puede exprimirse fácilmente en un plazo de 6-8 meses. En este momento, se sentirá cómodo con CS y luego podrá aprender lo que necesite.

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.

¿Cuál es el objetivo final de tu camino? Bueno … digamos, ¿qué te ves haciendo agradablemente dentro de un año? ¿Te entusiasmas con las aplicaciones móviles? ¿O le gusta reunir inteligencia de las consultas de Big Data? ¡Que ese sea tu proyecto paralelo y corre con él! Cuanto antes pueda identificar su objetivo, más claro será su camino. No solo aprenda las últimas tecnologías sin pensar, porque eso podría desgastar fácilmente a cualquiera. Pero cuando realmente empiezas a buscar implementar tu proyecto objetivo, es interesante que algunas de esas últimas tecnologías entren naturalmente en escena. 😉

Además, hay algo que Steve Jobs mencionó sobre su clase de caligrafía en su discurso de Stanford:

“Una vez más, no puedes conectar los puntos mirando hacia adelante; solo puedes conectarlos mirando hacia atrás. Así que debes confiar en que los puntos se conectarán de alguna manera en tu futuro. Tienes que confiar en algo: tu intestino, destino, vida, karma, lo que sea. Este enfoque nunca me ha decepcionado, y ha hecho toda la diferencia en mi vida “.

Steve nunca creó su camino. Pero en retrospectiva, vio el camino. Eso es bastante liberador, ¿no?

Parag Shah ha creado un sitio web Do It Yourself Computer Science, cuyo propósito es guiarlo a través de cursos en línea gratuitos que resultarían en una educación equivalente a un título de CS.

A nivel individual, si desea hablar con alguien que lo haya hecho, uno de los tipos que trabaja para mí y que comenzó una compañía conmigo es un desarrollador autodidacta muy hábil. Comenzó como estudiante de filosofía y la lógica que aprendió en la universidad lo ha mantenido en una buena posición como desarrollador. Me gustaría transmitir su dirección de correo electrónico y hacer una presentación.

Coursera es un buen lugar. ¡Solo lo estoy mencionando aquí con la esperanza de que aún no lo hayas escuchado desde que mencionaste OCW!

Haz lo que Scott H Young hizo. Acepta el desafío MIT.

More Interesting

¿Qué idiomas debo aprender para mejorar mi perfil como graduado en Informática?

¿Qué le recomendarías a un programador principiante de Delphi que haga con la interfaz de usuario?

¿Cuáles son los pasos que se deben seguir para ser un buen programador en C?

Soy un programador de Java. ¿Cuáles son las cosas que debo saber como programador de Python?

¿Qué debo saber sobre una especialización en informática, como estudiante de primer año?

¿Qué es lo mejor que puede hacer un estudiante de primer año con especialización en informática para crear un currículum?

¿Cuáles son las diversas formas en que puedo usar mi puntaje de Gate (Ciencias de la computación), opciones que no sean Mtech?

Incluso con un título en CS, ¿cómo puedo destacar de los millones de otros programadores que hay? ¿Hemos alcanzado la programación máxima? ¿Hay demasiada gente para muy pocos trabajos?

¿Necesitas mucho conocimiento en matemáticas para programar?

¿Qué cursos tomados a través del estudio en línea representan un título en informática?

Cómo sobresalirme si me colocan en Cognizant y pertenezco al campo ECE, siempre que solo conozca los conceptos básicos de C ++ o C

¿Puedo tomar Manipal Jaipur para ingeniería informática si realmente quiero hacer algo bueno en la codificación?

Me preocupa ser incapaz de completar las matemáticas de la escuela secundaria requeridas para la informática ya que las matemáticas nunca han sido mi punto fuerte, pero realmente quiero entrar. ¿Qué hago?

¿Puede una persona ser un programador disléxico?

Cómo colocarse en Google