¿Cuáles son los mejores recursos para convertirse en un buen ingeniero de software autodidacta?

Una manera de wikipedia de definir la Ingeniería de Software es la siguiente,

La ingeniería de software es el estudio y la aplicación de la ingeniería al diseño, desarrollo y mantenimiento del software”

Como puede ver, un buen ingeniero de software debe dominar todas las disciplinas mencionadas anteriormente, desde la definición del producto de software hasta su mantenimiento. Varias subdisciplinas de ingeniería de software incluyen ingeniería de requisitos, diseño de sistemas, desarrollo de sistemas, mantenimiento de sistemas, gestión de la calidad (esto se basa simplemente en un ciclo de vida de desarrollo típico).

Sigue estos para lograr el dominio en ingeniería de software:
1. Lea esto (Ingeniería de software). Esto le dará la visión general.
2. Cada disciplina tiene un conjunto de ética (página en computer.org).
3. “Agile es la nueva sexy”. Si no puedes ser lo suficientemente rápido, lo más probable es que fallarás. Conocer y practicar procesos de desarrollo ágil.
4. Considera esto como tu biblia (Inicio del Cuerpo de Conocimientos de Ingeniería de Software (SWEBOK))

Es muy probable que estos recursos lo hagan un experto en el campo de la ingeniería de software, lo que lo convierte en un mejor ingeniero de software. Pero esto es sólo teoría. Si quieres nadar, sumérgete en el agua. Los videos de YouTube son buenos, pero no lo suficiente como para ayudarte a nadar 🙂 Practica estos principios y trata de aplicarlo en todos tus proyectos. Esperemos que esto ayude 🙂

Algunas personas creen que técnicamente no puede ser un ingeniero de software a menos que tenga un título de ingeniería de 4 años (no estoy seguro de que un título de CS cumpla con los estándares de estas personas). Pero para la mayoría de las personas, es solo un título de trabajo que obtiene cuando alguien lo contrata como ingeniero de software. Estoy en el último grupo.

Los ingenieros de software dedican tiempo a planificar y diseñar sistemas, pero su implementación y mantenimiento ocupa la mayor parte de su jornada laboral. Y eso significa codificar. Mucha codificación.


Entonces, primero, te recomiendo que te sientas cómodo con un lenguaje de script moderno como Python (esencial para la ciencia de datos) o JavaScript (esencial para el desarrollo web).

Si elige aprender Python, debe morder la bala y pagar los $ 200 / mes por una suscripción a Udacity y luego aplicar su currículo completo de Python (algunos de los cuales son gratuitos).

Si elige aprender JavaScript, Free Code Camp tiene un programa gratuito de desarrollo web y JavaScript de extremo a extremo, una comunidad de apoyo y proyectos de cartera de la vida real (proyectos de construcción para organizaciones sin fines de lucro).

Para aprender los principios de ingeniería de software, que cambian de manera relativamente lenta, solo puede leer libros. Mark Roddy creó esta lista de lectura en 2010, y creo que aún se mantiene.

La respuesta real es “¡Depende!”. Depende de qué sector le interese más: front-end, full-stack, backend, data-science, etc. La base de todo esto puede resumirse como a continuación:

  • Elige tu lenguaje de programación favorito. Y aprenda cada concepto de ese lenguaje practicando para usarlo en un problema de código o en otro. Esto sentará una buena base para aprender otro lenguaje de programación, incluso si su paradigma es completamente diferente. Para apreciar A debes tener un gusto por B, porque en cierto sentido todo es relativo. Comenzarías a comparar idiomas en función de cómo resuelve algunos problemas.
  • Hacer Código Katas. Intenta resolver el mismo problema de diferentes maneras. Piense a través de los diferentes enfoques que ha intentado. Haz esto por cada otro código kata que hagas. ¡Ayuda!
  • Haz un mini-proyecto resolviendo algún problema. Revíselo después de un tiempo y vea si puede agregar características. Probablemente deberías estar abusando de ti mismo por el mal trabajo que hiciste. Esta es una buena realización. Piense en sus errores, piense cuál es la mejor manera en que tomó. Aprende de tus errores. Esto es lo que es experiencia real. La experiencia no está en número, sino en lo que aprendes a medida que trabajas a través de las cosas.
  • Elija un código de mini-proyecto o biblioteca de Github, y lea el código para ver cómo se resuelve algún problema. Leer y pensar a través de otros códigos ayuda a uno.
  • Lee libros, blogs, etc.
  • Comience a escribir sus pensamientos a través de blogs. Ayuda a su aprendizaje seguro.
  • Asista a reuniones y conferencias para obtener conocimientos de lo que está sucediendo. Podría inducir su aprendizaje. Después de todo, todos necesitamos una dosis de motivación y un sentido de propósito inducidos de vez en cuando.
  • Trate de compartir sus aprendizajes en reuniones y conferencias. Funciona la magia en ti – en serio.

Información especial sobre el tema: ¿mencioné que, en el camino, es probable que te encuentres con muchos bromistas que agotarán tu energía y tu tiempo, desanimándote de lo que haces? Aprender a diferenciar a los críticos de los bromistas es un gran salvavidas.

Esto es lo que hice desde el inicio de mi carrera y continúo haciéndolo todo hasta hoy.

Comience con un buen lenguaje de enseñanza . Un buen lenguaje de enseñanza es muy simple y fácil de aprender. Es gratis desde el navegador que encuentras en lenguajes como Java, Python, JavaScript y C. (Sí, incluso Python es bastante crufty).

Un buen lenguaje de enseñanza te permite enfocarte completamente en los conceptos básicos de programación. (como OOP) sin ser distraído por rarezas y peculiaridades del lenguaje innecesarias.

No hay muchos buenos idiomas de enseñanza. Solo puedo pensar en Logo, Pascal, Scheme y Smalltalk. Recomiendo Smalltalk porque:

  1. Es uno de los idiomas más limpios, pequeños y simples del mundo; Su sintaxis puede caber en una tarjeta postal!
  2. Es puramente orientado a objetos, y OOP es el paradigma de programación más importante en la industria de TI. Simplemente no hay mejor manera de aprender programación orientada a objetos.
  3. ¡Cuenta con un fantástico entorno de codificación y depuración en vivo que puede amplificar su productividad hasta cinco veces!
  4. Smalltalk es más divertido que un barril de monos. Las otras lenguas de enseñanza están prestadas.

Para obtener más información, lea Por qué Pharo podría ser el futuro del desarrollo de software.

Para aprender Smalltalk, lea la respuesta de Kenneth Eng a ¿Cuál es el mejor lenguaje de programación para que un principiante aprenda desde cero?

Primero tienes que conocer tu nivel de interés en diferentes campos de la ingeniería de software.

como desea buscar redes, aplicaciones de escritorio, aplicaciones móviles, aplicaciones web o aprender algunas cosas que son utilizadas por todos, como algoritmos, inteligencia artificial, bases de datos, etc.

Cuando se decida, vaya a c ++ para cualquier campo que haya decidido (incluso si optó por la red). Y después de pasar unos 10-15 días con c ++, continúe con el diseño de algoritmos (es como la forma en que aborda su problema y lo resuelve con cualquier lenguaje de programación)

Luego, aprenda sobre la plataforma que desea utilizar, ya sea web, móvil, de escritorio (linux, mac o windows) …

Después de eso, puede optar por cualquier lenguaje de programación (para todos los campos excepto redes):

lenguaje como: – Java, C #, python, Ruby o incluso c ++ (más profundo) …

Con el lenguaje de programación puede ayudar a que su lógica se ejecute en cualquier plataforma (sistema operativo) …

Si tiene que tratar con datos (muchos datos), entonces tiene que ir al aprendizaje de la base de datos … comience con mysql o sqlite (más móviles), estos son programas de DBMS.

Y supongo que después de lidiar con todo esto por alrededor de 3-4 meses, te darás cuenta
qué hacer a continuación para …

Depende de lo que quieras decir con ingeniero de software. El mejor recurso para la ingeniería de software que he encontrado es la experiencia. Ten paciencia conmigo un momento. La mayoría de las respuestas aquí parecen estar relacionadas con la programación, y de hecho hay muchos recursos excelentes sobre programación (con muchos buenos ejemplos en las respuestas aquí). Siempre he sentido que el problema se descompone en tres categorías:

  • Programación. Elija un lenguaje razonable para el tipo de problemas que le gustaría abordar hoy. Aprendelo bien Mucha práctica. Mucha lectura del código de otros expertos respetados. Escribe algo más. Agregue un idioma según sea necesario o como le interese.
  • Algoritmos, estructuras de datos, lenguajes comparativos y el cuerpo de conocimiento generalmente referido como ciencia de la computación. Esto es lo que hace que el juego resuelva los problemas pequeños, resuelva los grandes problemas, los resuelva de manera efectiva (no solo de manera eficiente) y comprenda los límites de las soluciones para que pueda explicarlos.
  • “Ingeniería de software” es una cosa diferente para mí que las dos ideas anteriores. Es el proceso por el cual el software se entrega a los “clientes”. Es una entrega confiable y repetible y consistente de la solución. Comprender que una GUI es buena para crear pruebas de conceptos / prototipos iniciales en su escritorio, pero insuficiente para entregar en “producción”. Es la comprensión del flujo de entrega en cada paso y por qué se realiza cada paso. Es toda la automatización y disciplina. Sin disciplina, el software no escala. Todavía tengo que ver un curso sobre esto, porque en su mayor parte es capacitación en el trabajo. Y muchos lugares se equivocan. Los errores son costosos.

Tal vez la mejor metáfora que puedo darte sea cocinar. Puedes aprender a cocinar por ti mismo bastante rápido. Puedes ser bueno en un puñado de recetas y la práctica te hace rápido. Prepárese para preparar una comida de lujo para amigos y familiares, y usted saldrá un poco de su zona de confort, tal vez necesitando nuevas habilidades, nuevas herramientas, nuevas recetas. Toma una clase o dos y puedes mejorar dramáticamente tu juego, y las clases abarcan todo, desde clases nocturnas en la universidad local hasta Le Cordon Bleu. Luego está el paso a “restaurante” que cambia todo. Ahora se trata de la entrega confiable de alimentos a las personas con expectativas. Su fuente, lote, pre-etapa, preparación y herramienta de manera diferente. La “industrialización” del proceso es “ingeniería”. Y ahora eres parte de un equipo. Y hay un cliente. No importa si eres un taco o no, o un restaurante con estrella Michelin, es diferente. Ninguna cantidad de trabajo en el aula lo prepara completamente para todo el aprendizaje en el trabajo.

Y puedes empezar a aprender los tres a la vez. Solo entiende en cuál de los tres conjuntos de habilidades estás trabajando y no te olvides de los otros dos conjuntos de habilidades. Los dos primeros tienden a venir con la práctica, pero el segundo viene con la experiencia.

No puedo recomendar CodeHS lo suficiente.
He empezado a aprender a codificar más de un par de veces y ahora estoy enganchado.

Videos fáciles de entender.
Retroalimentación personalizada sobre su código de smart TAs.
Responden muy rápido.
Desarrollado a partir del plan de estudios de CS de CS106 de Stanford.
Codificación en el navegador.
Grandes ejercicios y retos.

Video tutoriales, bibliotecas / idiomas / documentación de productos / manuales, blogs, foros de discusión, grupos.

Peter Norvig tiene algunos consejos para usted:
Enseñe tu programación en diez años

Más allá de eso, los libros que puedo recomendar incluyen:

  • Estructura e interpretación de programas de computadora (sitio web del SICP)
  • El arte de la programación por computadora por el Prof. Donald Knuth
  • Los elementos del estilo de programación de Kernighan & Plauger
  • Cómo diseñar programas

Tutoriales de idiomas:

  • Haskell: el oficio de la programación funcional por Simon Thompson
  • ¡Aprende un Haskell para un gran bien!
  • Programación en esquema por Abelson y Eisenberg
  • Programación Funcional en Scala por Chiusano & Bjarnason
  • Scala por ejemplo por el Dr. Martin Odersky ( http://www.scala-lang.org/sites/… )
  • ML para el programador de trabajo por Lawrence Paulson

Una palabra: INTERNET

Los mejores recursos son aquellos que están al día. Los libros simplemente no lo cortan. También obtiene acceso a algo que es mucho más importante el acceso a la comunidad de ingeniería de software. El desbordamiento de pila, los foros de Java y otros foros relacionados con la tecnología están llenos de expertos que le brindarán múltiples formas de resolver sus problemas diarios de software.

Una habilidad importante para dominar cuando se usa internet es la relevancia de la búsqueda. Debe saber cómo definir su consulta para obtener el resultado que desea. Recuerda que Internet está lleno de gran información, pero también está lleno de mierda.

Una de las habilidades más importantes en el desarrollo de software actual es la capacidad de desarrollar el código como parte del equipo.

Para obtener y perfeccionar esta habilidad, sugiero unirme a cualquier tipo de equipo tan pronto como sea posible. Si aún no hay trabajo, este podría ser un proyecto de código abierto. Trate de publicar su código donde alguien vea y comente. No todos los comentarios son positivos, pero parte de las habilidades es aprender a responder correctamente a las críticas.

Cuando aprenda tecnología o lenguaje en particular, también aprenda qué reglas usualmente sigue la comunidad. Se preocupa mucho por la denominación de variables, el estilo de código habitual, la arquitectura de programa habitual, los ámbitos de visibilidad variable. Un desarrollador que ignora tales reglas no es un ajuste, incluso si el código finalmente lo hace como se espera. Tenga en cuenta que algunas reglas son específicas de un grupo y que necesita adaptarse rápidamente para cumplirlas. Leer comentarios de revisión de código en GitHub.

Por supuesto, nadie hablará con usted si realmente no puede programar, pero tan pronto como pueda, la falta de capacidad para el trabajo cooperativo puede convertirse fácilmente en un cuello de botella.

Compra y lee The Art of Computer Programming .

Deberías estudiar muchas matemáticas si no lo has hecho. Cualquier ingeniero de software o programador que le diga que las matemáticas no es importante (o no hace hincapié en aprenderlo) en este campo no es un buen programador y mentir. Matemáticas concretas: una base para la informática es un excelente lugar para comenzar.

Si eres nuevo en la programación, no deberías pasar demasiado tiempo en una computadora todavía. No sabes cómo programar. Su cuello de botella no es la capacidad de presionar teclas. Es cómo modelar problemas y representarlos en una máquina. La máquina no te enseña cómo hacer eso. Solo puede hacer lo que se dice. Es mejor pasar el tiempo aprendiendo a explicar las cosas lo suficientemente bien como para que incluso una computadora pueda realizarlas de acuerdo con sus intenciones.

  1. Visita codecademy.com. Aprende todo lo que puedas aquí.
  2. Piensa en un proyecto que quieras crear. Investigue y lea lo que necesitará para completar, y retoque lo que no aprendió en Codecademy.
  3. Red, y hablar con las personas que tienen experiencia en el campo.

Si desea convertirse en un ingeniero de software bueno y exitoso, hay muchos recursos para aprender en línea y fuera de línea en forma de video tutorial.

Puede abe para captar el conocimiento rápidamente, solo con el siguiente enlace obtendrá cursos gratuitos y de pago relacionados con el desarrollo de software, desarrollo web, desarrollo móvil, wordpress, etc. Cursos de aprendizaje en línea | Cursos de Desarrollo Web en Eduonix

Hola ,
Creo que deberías empezar por consultar este sitio web llamado codeacademy.
http://www.codecademy.com/
Proporciona instrucciones sencillas paso a paso para Javascript, Ruby, Html, Python.
Puede que te guste.

Consigue un trabajo como desarrollador. Luego otro. Y otro. A medida que avanza, verá muchos ejemplos de ingeniería: la mayoría de ellos serán negativos (ejemplos de lo que NO debe hacer). Si tiene suerte, puede trabajar en un entorno con software bien diseñado, pero en mi experiencia esto es raro. Mientras lo haces, lee mucho de listas de libros y de expertos como Joel Splosky y observa que muchas personas experimentan los problemas con los que están luchando tus empresas. Intenta aprender de esto. Solicite a las personas mayores soluciones para la optimización de la base de datos o el código frontal. Aprende de todos. Eventualmente, se convertirá en su propio arquitecto, ya sea para un proyecto personal o para una aplicación en el trabajo. Haz lo mejor que puedas y aprende de tus propias deficiencias. Siga este ciclo unas cuantas veces más y puede llamarse ingeniero de software.

Yo diría que estos dos recursos son bastante buenos para empezar:

Aprende Python de la manera difícil

Aprende C de la manera difícil

Todo lo que tienes que hacer, es seguir las lecciones una por una y continuar.

¿Por qué demonios querrías hacer eso? Considerar como una alternativa informática en la Universidad del Pueblo.

Descargo de responsabilidad: no tengo nada que ver con este canal de YouTube (me suscribí a él, pero no creo que cuente de todos modos).

Este video prácticamente resume todo. Es un superconjunto de la respuesta de Quincy Larson (sea lo que Quincy Larson dice que es correcto) y Will también tiene su parte de experiencia en la industria (junto con los mejores tutoriales de javascript de pila completa), por lo que sugiero que también lo escuchen.