¿Qué debo aprender para convertirme en ingeniero de software?

Necesitarás un fondo en algoritmos. Este es un gran curso de Coursera que recomiendo encarecidamente si lo tomas en serio: https://www.coursera.org/special…

Será útil haber repasado algunas matemáticas, en particular la probabilidad, las matemáticas discretas (combinatoria) y el álgebra lineal.

La experiencia en desarrollo web es útil, pero con toda honestidad puede ser un poco “superficial” y más una práctica de memorización que el desarrollo de habilidades más generales. Dicho esto, pasar tiempo haciendo proyectos en desarrollo web es muy valioso, pero te beneficiarás de jugar con algunos backends y frontends diferentes, por ejemplo.

  • Backends: Ruby on Rails, Python + Django, Node + Express.
  • Frontales: “Vanilla” JS, JQuery, React, Angular (o Vue, o Polymer, o algo más)

Te beneficiarás de estudiar Programación Orientada a Objetos. Personalmente, no estoy de acuerdo con algunos aspectos, pero es importante estar cómodo con él. Probablemente pueda encontrar algún curso de Coursera para esto.

Recomiendo estudiar Bases de datos, aunque no necesita ser demasiado formal en esto, solo lo suficiente para sentirse cómodo dibujando tablas para una base de datos, explicando claves y claves foráneas y algunas combinaciones.

Recomiendo estudiar Networking, este libro es probablemente un gran conjunto práctico de contenido: https://hpbn.co/

Por último, y con menor importancia, recomendaría estudiar la Programación concurrente (“Programación paralela”), en particular la programación con semáforos y el paso de mensajes (a diferencia de la programación con tarjeta gráfica / CUDA)

Durante el aprendizaje de lo anterior, debería tener la oportunidad de jugar con algunos idiomas, al menos dos o tres de: Python, C, Java, JavaScript y tal vez un par de otros. La capacidad de escribir cómodamente en al menos dos de estos es esencial y vale la pena tenerlo en cuenta al estudiar lo anterior.

En términos de libros para leer, recomendaría:

  • Java efectivo
  • El programador pragmático
  • Código completo
  • Cracking the Coding Interview (como regla general, no me gustan los libros con énfasis en superar las entrevistas, ya que llevan a las personas a situaciones para las que no están bien equipados, pero es un contenido útil para refrescarse antes de las entrevistas)

Finalmente, un punto bajo en la lista pero bueno si tiene interés sería aprender la seguridad de la computadora (específicamente funciones hash, cifrados simétricos, cifrados asimétricos y RSA y firmas digitales), arquitectura de computadoras y compiladores, pero francamente no me preocuparía realmente sobre aquellos para cosas de nivel de entrada.

Esto es mucho trabajo, probablemente de un año a dos de trabajo enfocado principalmente en esto. Uno de los grandes desafíos será establecer metas y medir el progreso. Los cursos ofrecidos por Coursera son una forma útil de aportar cierta estructura a sus estudios, ya que están trabajando en proyectos con amigos para proporcionar una función forzada.

¡Buena suerte!

La ingeniería de software es una mezcla interesante de práctica y teoría.

En el lado de la teoría, debe habituarse a buscar / buscar en Google cosas que sean una buena intersección de interés para usted y novela. Tenga cuidado, algunos de los lugares comunes para obtener información (como stackOverflow) pueden ser muy intimidantes. Me intimidan, por ejemplo, y tengo un doctorado en informática y 25 años de experiencia en la industria. Así que no te preocupes si las cosas parecen confusas al principio.

Lee un libro de texto ocasional. No todo, solo partes interesantes. Realmente me gustan los libros de ‘Introducción a los algoritmos’ y Matemáticas discretas.

En el lado de la práctica, puede considerar escribir pequeñas aplicaciones para dispositivos móviles si tiene acceso a un teléfono Android o un teléfono ipad / ios y un mac. Aprender una plataforma móvil es una inversión importante y lleva mucho tiempo. La mejor manera de iniciarse sería tomar aplicaciones de muestra existentes que se envían con las plataformas de desarrollador para esos dispositivos, compilarlas e instalarlas en un dispositivo para asegurarse de que pueda, y luego hacer pequeños cambios para ver qué hacen. Experimente con diferentes partes de la aplicación para obtener más información sobre las opciones disponibles y amplíe su comprensión.

Eche un vistazo a los proyectos y comunidades de código abierto existentes, por ejemplo, en la falsificación de código fuente. Encuentre un programa o tecnología que le guste y quiera usar usted mismo. Alístate en el proyecto, construye y ejecuta una copia tú mismo. Verifique si hay errores pendientes o solicitudes de características, y considere implementarlos y contribuir al código abierto.

Sugerencias generales / observaciones de la industria:

  • Las soluciones inteligentes están sobrevaloradas . Desea centrarse en generar código simple y fácil de mantener. Parte del código que escribí hace 20 años todavía es mantenido y enviado por alguna alma pobre de Microsoft, por ejemplo, después de pasar por una docena de manos. Si no pueden entender y mantener su código, lo tirarán a la basura.
  • Hazlo bien y simple . Optimice solo cuando sea necesario, en lugar de hacerlo temprano a expensas de la simplicidad.
  • Comente y siga las pautas de codificación . Lea un conjunto de excelentes pautas de codificación como los estándares de codificación Java o los estándares de codificación C ++ de Google. Siga un conjunto de pautas que le gusten mientras escribe su propio código. Escriba comentarios para explicar lo que está haciendo y por qué, en un grado razonable. Algunas personas no creen en los comentarios (‘el código ES los comentarios’), yo personalmente lo creo.
  • Haga coincidir su estilo de código con el código existente . Si está agregando a una base de código existente, intente hacer coincidir su estilo con el estilo empleado donde está codificando. En algunos casos, prefieren que actualice el código que toca y el código que lo rodea a una nueva guía de codificación, haga lo que prefiera.
  • Familiarícese con un IDE . Un entorno de desarrollo integrado, especialmente con depurador y compilación integrados, es su mejor amigo. Elige uno y sé muy bueno en eso. Mis principales sugerencias (gratuitas) serían: Visual Studio Express si está programando para Windows; IntelliJ IDEA edición comunitaria para Java y posiblemente C ++; Eclipse para Java y C ++. Añaden una cantidad TREMENDOSA de valor, lo que facilita la lectura, la edición, la refactorización y el formato del código. Las funciones integradas de construcción y depuración, así como el autocompletado, son increíblemente útiles.
  • Acostúmbrate a usar un depurador . Tener fluidez en la depuración a través de un depurador de nivel fuente es una de las mejores inversiones que puede hacer. Sin él, va a imprimir en la consola para descubrir qué está mal en sus programas, lo cual está bien, pero un depurador es mucho mejor. Y más impresionante 🙂

Eso es suficiente consejo para una mañana: ¡buena suerte!

Creo que los factores más importantes son el deseo y el tiempo en el teclado. Alguien le preguntó una vez a un famoso escritor: “¿Cómo puedo convertirme en escritor?” La respuesta fue, si realmente quisieras ser escritor, no lo preguntarías, estarías escribiendo y nada podría impedirte hacerlo. Lo haces porque no te imaginas haciendo otra cosa.

Dicho esto, aprende de los grandes. Lea “Codificadores en el trabajo” para diferentes perspectivas. Aprende la teoría, céntrate en lo básico. Leer leer leer. Luego construye cosas. Piensa en lo que quieres construir y constrúyelo. Luego, vuelva a construirlo. Aplica las teorías, toma lo que aprendiste y construye una segunda y tercera vez. Luego pregúntese, si pudiera comenzar de nuevo, ¿qué haría de manera diferente? Luego comienza de nuevo y hazlo de esa manera.

Conozca a otros ingenieros de software. Únase a un grupo de usuarios local. O comenzar uno. Colaborar.

Aprende las herramientas. Estudie las IDEs de la forma en que un pintor estudiaría pinceles.

Explorar. Encuentra tu camino. Establezca su entorno de trabajo ideal y acéptelo. Si hace la pregunta, probablemente ya esté en camino. ¡Buena suerte!

Mantenga un registro de descubrimientos importantes en un cuaderno / documento en línea, o guarde fragmentos útiles de código en, por ejemplo, Gist for GitHub (esto también puede compartir su código con otros).

Tómese el tiempo para jugar con nuevas ideas fuera de las limitaciones de tiempo y presupuesto del trabajo. Únase a un proyecto colaborativo de código abierto, o trabaje en un proyecto propio, pero encuentre una razón para probar nuevas tecnologías y evaluar su valor incluso antes de que su jefe se entere y le sugiera que use la próxima gran cosa. Esto significa que incluso si decides que no es la herramienta correcta, será porque lo has probado y lo has encontrado con ganas, no porque seas resistente al cambio. Un ingeniero de software que es resistente al cambio queda obsoleto en 5 años.

Conozca excelentes desarrolladores de software. Es mucho más fácil trabajar hacia algo si puede ver el resultado final. Trabaja con rompecabezas, trabaja con la vida. Obtenga modelos de roles y descubra lo que son y lo que los hace tan buenos. En realidad, es mejor si están solo unos pasos por delante de usted: todo está muy bien admirando al CEO de una empresa de tecnología, pero no es fácil ver el camino hacia allí desde donde se encuentra. Es mejor encontrar algo que pueda ver en pocos años.

Estudiar. Tendrá su propio estilo preferido, ya sea asistiendo a talleres, cursos en línea, leyendo documentos o libros de texto. Mantenerse al día es una cosa, pero también necesita actualizar su memoria sobre los fundamentos, especialmente si no los ha usado en mucho tiempo. Es fácil especializarse demasiado si no haces esto: terminas diciendo ‘No toco las bases de datos’ ‘No toco el front-end’ ‘No hago gráficos’ y antes de que te des cuenta estás sin trabajo para alguien que está dispuesto a tener una buena oportunidad en todo el lote. No digo que no se especialice, pero trate de mantener una comprensión amplia de los temas en torno a lo que está trabajando personalmente. Como dice Stanley Lee, su empleador puede pagar esta capacitación.

Más importante:
Cuidado. Debe ser importante para ti ser un gran desarrollador o terminarás siendo mediocre. Siéntase orgulloso de su trabajo y siempre sepa lo que habría hecho para darle esa ventaja adicional si hubiera tenido más tiempo o supiera lo que sabe ahora desde el principio. Aprecia lo que has aprendido durante cada proyecto. Siempre tenga una idea de la próxima área de mejora personal.

El consejo dado ya es bastante bueno, solo agregando a eso: lea The Pragmatic Programmer y la última edición de Code Complete. Ambos textos excelentes que le enseñan las mejores prácticas que impresionarán a cualquier persona para la que trabaje cuando obtenga un trabajo. Escriba todo el código que pueda, preferiblemente con otras personas. Participe en el código abierto, escriba voluntariamente el código de una organización sin fines de lucro o algo así; lo que sea que pueda hacer para demostrar que habla en serio y obtener algo de experiencia es bueno.

Ah, y lea un libro sobre estructuras de datos y algoritmos, y lea Patrones de diseño. No es un sustituto para un título de CS, pero es un comienzo muy importante. Después de eso, creo que un libro sobre sistemas operativos es muy útil, puede ser difícil de leer sin un curso universitario, pero definitivamente no es imposible.

Hay ciertos rasgos intangibles que diferencian a los grandes desarrolladores de otros en lugar de lo que saben. El conocimiento y la información están disponibles hoy para todos, pero el carácter es algo más fundamental. Después de trabajar con más de 1000 desarrolladores premium en el camino escalable ( Talento premium bajo demanda | Camino escalable , descargo de responsabilidad: soy el fundador aquí ) hemos podido identificar 7 cualidades que diferencian a los grandes programadores.

1. ACTITUD POSITIVA

Un gran programador se preocupa por su producto. Son positivos, están dispuestos a hacer todo lo posible para hacer el trabajo y dar lo mejor todos los días. Aunque es importante no agotar a un desarrollador con plazos urgentes frecuentes, a veces esto es inevitable. Cuando necesite llevar un producto al mercado o necesite enviar una determinada característica antes de la fecha límite, el gran programador dará un paso adelante y lanzará el producto siempre que sea posible. Porque les importa Un gran desarrollador no deja que su ego se interponga en la toma de comentarios. Una buena manera de inculcar una actitud positiva es darles proyectos interesantes para trabajar, darles un sentido de propiedad y alabarlos por su buen trabajo. Las startups pueden ofrecer opciones sobre acciones, pagar a los empleados por trabajar horas extras, proporcionar vacaciones remuneradas remuneradas o encontrar otras ventajas que garanticen que se conserven excelentes programadores.

CÓMO PROBAR ESTA HABILIDAD:

  • Preguntas de muestra de la entrevista: 6 preguntas de muestra , 4 preguntas vitales de la entrevista , respuestas de Quora .
  • Otras preguntas:
  • ¿Cómo manejas el conflicto? (aversión al conflicto u orientación a la solución)
  • ¿Te consideras afortunado? (arrogante o humilde)
  • ¿Cómo fue tu viaje a la entrevista? (Reclamante o sin preocupaciones)
  • ¿Con qué tipo de personas no te gusta trabajar? (¿traen a su jefe?)

2. HABILIDADES DE COMUNICACIÓN SUPREMA

Las buenas habilidades de comunicación se correlacionan directamente con las buenas habilidades de desarrollo. Un gran desarrollador es capaz de comprender los problemas claramente, dividirlos en hipótesis y proponer soluciones de manera coherente. Entienden los conceptos rápidamente, o hacen las preguntas correctas para comprender, y no necesitan tener todo escrito en el documento de especificación. Los grandes desarrolladores offshore generalmente hablan varios idiomas de manera coherente y se sienten muy cómodos con la documentación en inglés. En el mundo de la tecnología, el inglés es el idioma de facto de la mayoría de las interacciones de documentación e desarrollador. Si no lo hablan lo suficientemente bien, necesitarán intérpretes y traductores, haciendo que sus conocimientos sean de segunda mano y rápidamente obsoletos.

CÓMO PROBAR ESTA HABILIDAD:

  • Simule una reunión de scrum y vea cómo interactúan.
  • Déles un problema / escenario y vea cómo se comunican de manera efectiva.
  • 10 preguntas para hacer

3. EXCELENTE A LA VEZ Y GESTIÓN DE TAREAS

Los grandes desarrolladores son altamente confiables. Tienen una fuerte ética de trabajo y se presentan a las reuniones a tiempo. Una habilidad importante es la capacidad de estimar la cantidad de tiempo necesaria para completar una tarea, comunicarla y cumplirla. Los desarrolladores excepcionales son excelentes para administrar a sus clientes o líderes en lugar de que usted los administre.

CÓMO PROBAR ESTA HABILIDAD: la prueba generalmente está en el pudín. Una buena manera de evaluar a cualquier desarrollador en estas cualidades es firmar un contrato a corto plazo y tener un período de evaluación en el que todos brinden comentarios sobre el desarrollador. La clave es reconocer las fortalezas y debilidades de su equipo desde el principio y evolucionar el equipo en función del rendimiento. Si alguien no está cumpliendo, quizás deba tomar la difícil decisión de retirarlo del equipo y probar a alguien nuevo.

4. HABILIDAD DE APRENDIZAJE RÁPIDO

Los grandes desarrolladores suelen ser sorprendentes autoaprendices. Tienen la capacidad de aprender nuevas tecnologías por su cuenta y no se sienten intimidados por las nuevas tecnologías. Tienen la capacidad de extraer datos dispares y procesar información sobre la marcha. Cada programador experimentará una situación en la que él o ella no sabe la respuesta. Los grandes programadores encontrarán diferentes recursos, hablarán con las personas adecuadas y encontrarán la solución pase lo que pase. La mejor habilidad que cualquiera puede tener es saber cómo aprender, y los grandes desarrolladores han dominado la habilidad del autoaprendizaje.

CÓMO PROBAR ESTA HABILIDAD:

  • Preguntas para hacer , bolsa de trabajo
  • Entrevistas de casos
  • Entrevistas estructuradas de comportamiento
  • Preguntas de adivinanzas

5. EXPERIENCIA TÉCNICA PROFUNDA Y AMPLIA

Los grandes desarrolladores han trabajado con un puñado de tecnologías el tiempo suficiente para convertirse en expertos y son competentes con muchas. Por supuesto, es importante encontrar un programador que haya trabajado en un producto similar al suyo o que utilice las mismas tecnologías. El programador adecuado para su proyecto podrá comenzar a ejecutar porque ya conocen las tecnologías correctas. Seguirán los estándares de codificación y escribirán un código que sea comprensible y comentado cuando sea necesario y que se pueda pasar a otra persona fácilmente. Al combinar sus habilidades cognitivas y su diversa experiencia en la industria, pueden llegar a soluciones óptimas rápidamente. Un desarrollador experimentado conoce bien las mejores prácticas como el desarrollo ágil, el software de gestión de tareas (Jira, Trello, etc.), el control de versiones (si conocen a Git, es una señal de que se han movido en sistemas anteriores como SVN) y están trabajando en diferentes entornos (entorno de desarrollo local y conocimiento práctico de implementación de aplicaciones), así que pregúnteles acerca de estas cosas.

CÓMO PROBAR ESTA HABILIDAD:

  • Pida ejemplos de trabajos anteriores: ¿Pueden mostrar productos anteriores que hayan construido, enviar muestras de código o capturas de pantalla de diferentes mejoras?
  • Referencias: pedir referencias. Hablar con emprendedores o CTO para los que han trabajado le dará una indicación de su habilidad técnica y sus otras cualidades intangibles.
  • Desafíos de programación: aunque la mayoría de los desafíos relacionados con el trabajo real no se parecen a los desafíos de programación que se encuentran en sitios como CodeEval , si un desarrollador puede tener éxito en algunos de los problemas basados ​​en algoritmos más difíciles en un corto período de tiempo, sabe que está lidiando con Una persona inteligente que conoce su informática.
  • Hackathons: hoy en día, muchas empresas han comenzado a contratar directamente desde hackathons. En los hackathons puedes ver a programadores altamente talentosos construir software en cuestión de horas. Es una excelente manera de evaluar la eficiencia de la programación, la necesidad de crear software utilizable y qué tan bien funcionan individualmente y en equipo.

6. UN BUEN JUGADOR DE EQUIPO

Otra excelente calidad de los desarrolladores premium es su capacidad para ayudar a otros desarrolladores a mejorar. Ofrecen ayuda a los compañeros de equipo cuando están estancados, enseñan nuevas habilidades a otros y escriben documentación que ayudaría a los compañeros de equipo no solo en su organización sino también en la comunidad de desarrolladores en general.

CÓMO PROBAR ESTA HABILIDAD: preguntas para evaluar las habilidades de colaboración

7. ALTO ENFOQUE EN EL USUARIO FINAL

Un buen programador hace lo que se le pide mientras que un gran programador piensa en el usuario final del software y trabaja para resolver sus problemas dentro de las capacidades de la organización. Un gran programador quiere saber que la característica que está creando es de gran valor y se retrasa cuando una característica no crea ningún valor para nadie. A veces, una característica es extremadamente difícil de construir o lleva mucho tiempo. El gran desarrollador comprenderá la necesidad de construirlo y motivará al equipo técnico a encontrar la solución.

CÓMO PROBAR ESTA HABILIDAD: liderazgo , 50 preguntas principales

OTRAS COSAS A CONSIDERAR:

La experiencia está sobrevalorada: aunque la experiencia es importante, no debería ser el único factor que utilice para contratar talento técnico. Alguien con una capacidad de aprendizaje rápido, gran actitud y habilidades de liderazgo emergentes podría ser más creativo con soluciones que son de gran valor para el negocio. La experiencia a menudo viene con el ego, y tomaremos la actitud correcta sobre la experiencia en muchos escenarios.

La importancia de estas cualidades difiere según el tamaño de la empresa: las empresas más grandes y maduras a menudo buscan un conjunto de habilidades específicas porque sus posiciones son más estáticas y definidas. Sin embargo, la capacidad de resolver problemas, aprender nuevas tecnologías, usar muchos sombreros y trabajar en equipos pequeños se vuelve más importante en un escenario de inicio.

¿CÓMO PUEDE ALGUIEN CONVERTIRSE EN UN GRAN DESARROLLADOR?

Agudice la mente: con la accesibilidad a los cursos en línea, no tiene que ir a la escuela para convertirse en un gran desarrollador. Sin embargo, muchos programadores excelentes fueron a buenas escuelas y se especializaron en informática. Obtener un título en ciencias de la computación ayuda a comprender mejor la arquitectura y le brinda una perspectiva holística del mundo de la programación de computadoras. Estar sincronizado con lo último en tecnología ayuda a mantenerse actualizado. Lea muchos artículos y blogs sobre las últimas tendencias en tecnología, pruebe nuevos juguetes durante su tiempo libre, siga a las comunidades, asista a conferencias y agregue valor a la comunidad escribiendo.

Sigue a tu corazón: hacer cosas que te apasionen automáticamente te ayudará a mejorar. Los mejores programadores son curiosos, les encanta construir cosas y les encanta el impacto que la tecnología tiene en el mundo. Le ayudará a ser más creativo y adquirir habilidades en todos los ámbitos.

Obtenga la experiencia: al comenzar, no acepte un trabajo solo porque le paga bien. Tome un trabajo que lo ayudará a obtener una experiencia significativa en un corto período de tiempo. Incluso es por casi no pagar. Construye esa experiencia. Intenta trabajar para una startup. Trabajar para una gran empresa. Trabajar en todas las industrias.

Forme su caja de herramientas: la tecnología está cambiando muy rápidamente. Se están construyendo nuevas plataformas, se están desarrollando nuevos lenguajes y se están creando productos a un ritmo sorprendente. Es importante mantenerse adaptable y aceptar el cambio. Elija las últimas herramientas y forme su caja de herramientas. Un gran desarrollador aprende las herramientas desde el principio y luego crea cosas.

Vea mi respuesta aquí: la respuesta de Ethan Welborn a yo acabo de cumplir 17 años y estoy realmente interesado en las computadoras. No soy un genio, pero he decidido que realmente quiero trabajar en proyectos interesantes como automóviles sin conductor e implantes oculares, etc. ¿Qué puedo hacer ahora para prepararme para carreras tan intensas como esas?

Hay una sección en mi respuesta donde hablo sobre lo que debes saber si quieres ser un buen programador.

EDITAR:

1. Domina un lenguaje compilado de bajo nivel. Sugiero C / C ++.

2. Domina un lenguaje de scripting de alto nivel. Ruby, JavaScript, Python, lo que sea.

3. Tener una sólida comprensión del control de la fuente. Sugiero a Git.

4. Tener una sólida comprensión de las bases de datos, tanto NoSQL como SQL. Sugiero Postgres y MongoDB.

5. Conozca la línea de comando. Sugiero Bash. Zsh también es una buena opción.

Para comenzar su carrera: habilidades analíticas de resolución de problemas, capacidad de comunicarse con claridad y confianza. Estructura básica de codificación en pocos idiomas. No es necesario ser un experto en nada.

Mientras esté en su carrera: la capacidad de aprender rápido, olvidarse rápidamente y volver a aprender otra cosa rápida ayuda.

Cuando le pregunté a mi entrevistador que me contrató para mi primer trabajo, “¿por qué me entrevistan cuando saben que no conozco ningún idioma de computadora?”, Dijo: “No solemos contratar a alguien que sepa un idioma de computadora, nosotros contratar personas que creemos que pueden aprender todo lo que enseñamos ‘

Vi que tenía razón al respecto.

Hola,

Es genial que estés pensando en entrar en ingeniería de software. Creo que has tomado una gran decisión profesional. Los trabajos de Ingeniería de Software son uno de los trabajos más buscados en el mercado. Están bien pagados y tienen una gran demanda continua.

No sé en qué etapa de la vida se encuentra, pero le sugeriría un par de alternativas y puede sopesar los pros y los contras de acuerdo con sus necesidades y prioridades.

  • Obtenga un título en ingeniería de software, informática, ingeniería informática o cualquier campo relacionado. Aunque no te convertirás en un ingeniero de software completo una vez que te gradúes. Necesita obtener experiencia práctica y hacer muchos proyectos para aprovechar sus habilidades.
  • Tiene una opción de autoaprendizaje : sí, es posible leer algunos libros y aprender a codificar. Es difícil de hacer, sobre todo porque no tienes a nadie con quien intercambiar ideas y nadie que te dé comentarios o consejos. También puede trabajar en proyectos, pero de nuevo esto sería difícil ya que no obtendrá ninguna asistencia real. Sin embargo, no recomendaría este método.
  • También puede asistir a bootcamps, pero tampoco estoy convencido de que sea una buena opción. Todavía tengo dudas sobre cuánto éxito laboral puede generar. Esto es lo que ocurre con los bootcamps: como los bootcamps suelen ser programas acelerados, son principalmente intensivos en conocimiento y no en práctica. El enfoque hacia el aprendizaje de software es vital, y no hay sustituto para la práctica, una oportunidad por la cual no se encontrará en un campo de entrenamiento, donde solo seguirá acumulando cosas nuevas que aprende.
  • Si no tiene experiencia previa en codificación y desea convertirse en ingeniero de software. Te recomendaría la Escuela Holberton de Ingeniería de Software en San Francisco eso es entrenar ingenieros de software Full-Stack. Ofrece un programa de dos años y se centra en el aprendizaje basado en proyectos y el aprendizaje entre pares . Si desea capacitarse como desarrollador de stack completo y triunfar en el mundo de la tecnología al ser flexible en sus habilidades y mantener una amplia gama de posibilidades abiertas, este es el lugar para usted. Un plan de estudios intensivo en proyectos y métodos revisados ​​por pares fomentan una cultura de aprendizaje muy constructiva. El entorno y el enfoque es tal que inculca en usted el tipo de habilidad y adaptabilidad que la industria del software requiere hoy, ya sean sus habilidades de programación o habilidades blandas. Muchos de sus graduados trabajan para gigantes de software . Le animo a seguir su pasión.

Espero haber respondido tu pregunta. La mejor de las suertes en tus futuros intentos.

Desde que comencé a programar hasta que obtuve mi primer trabajo como ingeniero, me he estado haciendo esa misma pregunta. Hay mucha información errónea y diferentes tipos de consejos, tanto que puede ser abrumador.

Para descubrir cómo podría ingresar a la ingeniería de software, decidí comenzar a entrevistar a ingenieros de software exitosos sobre sus historias. ¿Cómo se convirtieron en ingenieros? ¿Cuál es su consejo? ¿Qué les gustaría saber?

Mira las entrevistas gratis en mi sitio:

http://www.madisonkanna.com/inte

Si tiene alguna exposición a C, esquema y una especialización en matemáticas, entonces diría que las tendencias actuales en lenguajes de programación deberían sentirse cómodas.

Básicamente hay dos partes de ingeniería.

  1. Fundamentos de CS, algoritmos, estructuras de datos, concurrencia, paralelismo, subprocesos, etc.
  1. Estas son las cajas
  • Entrada y salida (IO)
    1. Llamadas de red, etc. ¿Cómo se mueven o muestran los datos de un lugar a otro? Por ejemplo, del servidor al navegador o de la memoria a la impresora, etc.
    2. Así es como las cajas de 1 se canalizan juntas

    Diría que probablemente esté más familiarizado con los elementos en 1, aunque la concurrencia y el paralelismo y otros problemas de hardware y memoria serán nuevos.

    Luego están los elementos en 2. De muchas maneras, este es el nombre del juego (para bien o para mal) para un gran desarrollo. Por lo tanto, querrá familiarizarse con los conceptos de llamadas API y serialización.

    Entonces tienes todo el lado del cinturón de herramientas. Como estudiante de matemáticas, puedo decir que no hay que subestimar esto. Mucha gente recomendará una idea u otra. Otros prefieren la línea de comando. Instaría a alguien en su posición a que no solo salte sobre lo primero que se le presente, sino que pase un tiempo serio jugando y descubriendo cómo quiere interactuar con el sistema operativo y el sistema de archivos. ¡Puede que seas un amante de emacs y no lo sepas!

    Finalmente tienes diferentes paradigmas de programación. La programación funcional (FP) se está convirtiendo en la corriente principal en este momento, ya que su objetivo es tratar la programación como sonidos matemáticos como un buen ajuste. Yo diría que Scala es una gran opción, además de que es un lenguaje FP indulgente, tiene mucho soporte y herramientas modernas y sería una excelente forma natural de detectar la concurrencia y el paralelismo.

    Hay cursos gratuitos en línea como el excelente curso diseñado por el profesor Marrin Ordersky, creador del lenguaje y su seguimiento I coursera, programación reactiva.

    Obviamente, debe ser técnico y aprender lo básico de la informática: estructuras de datos, algoritmos, principios del sistema operativo …

    Pero ser un buen ingeniero de software no se trata solo de habilidades técnicas, las habilidades de comunicación importan mucho en el software.

    Además, un ingeniero de software resuelve problemas y debe evitar la complejidad innecesaria: aprende a ser pragmático y pregunta por qué.

    Aquí hay algunos libros que es posible que desee leer (el primero es una lectura obligada):

    • Introducción a los algoritmos, 3ª edición Introducción a los algoritmos, 3ª edición: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: 9780262033848: Amazon.com: Libros
    • El programador pragmático: de oficial a maestro El programador pragmático: de oficial a maestro: 0785342616224: Computer Science Books @ Amazon.com
    • Soñando en código: dos docenas de programadores, tres años, 4.732 errores y una búsqueda de software trascendente Soñando en código: dos docenas de programadores, tres años, 4, 732 errores y una búsqueda de software trascendente: Scott Rosenberg: 9781400082476: Amazon. com: Libros

    ¡Y no olvides que escribir código = crear errores!

    1. Su cerebro debe estar conectado de una manera extraña para que algo como esto tenga sentido para usted: if (reg_exp (‘^ [A-Z0-9 ._% + -] {1,64} @ (?: [A- Z0-9 -] {1,63} \.) {1,125} [AZ] {2,63} $ ‘, correo electrónico) === TRUE) {// correo electrónico válido};
    2. Esté preparado para pensar mucho sobre el diseño y escribir muy poco.
    3. Debe tener la paciencia y la capacidad de concentrarse en un problema para resolver problemas de manera efectiva cuando surjan.
    4. Sé lo suficientemente humilde como para aprender de tus compañeros.
    5. Sea lo suficientemente hábil en su oficio para poder compartir las mejores prácticas y buenos patrones de diseño.
    6. Darse cuenta de que TI es un panorama en constante cambio. El Blackberry que es la tecnología de punta de hoy puede convertirse en carne de canon a raíz del iPhone del mañana. Esta es una espada de dos filos: la mantiene fresca e interesante; Sin embargo, se arriesga a elegir pasar tiempo aprendiendo una tecnología, un marco, etc. que termina marchitándose.
    7. Sepa que esto lo mantendrá despierto por la noche:

    Algunos de los mejores desarrolladores de software que conozco son cambiadores de carrera. Es decir, tenían un trabajo en una profesión completamente diferente y luego se convirtieron en desarrolladores. Por ejemplo, conozco personas que se han convertido en desarrolladores increíbles después de ser abogado, profesor, arquitecto (edificios físicos), asistente legal.

    Además, los mejores desarrolladores de software que conozco tienen estas 3 cosas en común:

    1. REALMENTE les encanta escribir código
    2. Son solucionadores de problemas natos
    3. Disfrutan aprendiendo múltiples idiomas y tecnologías.

    Déjame intentar responder según mi entendimiento.

    “Excelente desarrollador de software”: ¿qué significa eso exactamente?

    ¿Alguna vez escuchó el término “excelente desarrollador de automóviles”, “excelente desarrollador de edificios”, “excelente desarrollador de carreteras”, “excelente desarrollador de barcos”, “excelente desarrollador de tanques”, “excelente desarrollador de aviones” o algo así?

    Mass está mal informado sobre el desarrollo de software. Y daré crédito a todas las películas que muestran a un chico adolescente haciendo algo increíble en su computadora / laptop y la gente piensa “wow”. Una vez más, los medios que difunden información muy errónea como un niño de 9 años ha desarrollado un software increíble o hackeado un sitio web, un ingeniero de software ha creado una aplicación increíble solo. Vamos, si es tan fácil, entonces por qué IBM tiene 450,000 empleados, por qué TCS, CTS, INFOSYS, etc. emplean a cientos de miles de personas. ¿Son tontos? Este párrafo para permitirte pensarlo detenidamente.

    Ahora, centrémonos en el desarrollo a plazo. Simplemente significa que algo no se está inventando sino que se está construyendo a partir del conocimiento, la habilidad, la materia prima y el esfuerzo existentes. El desarrollo de software es algo similar. Aprendemos lenguajes de programación, aprendemos la estructura de datos, aprendemos técnicas de análisis de complejidad de algoritmos, aprendemos las mejores prácticas seguidas por la industria y aprendemos cómo trabajar en equipo. Si tienes control sobre todas estas cosas, eres un desarrollador de software. Ahora, durante el período en que aprende cuál es el problema que debe resolverse, cuál es su solución y cuáles son las herramientas necesarias para resolverlo, se convierte en un buen desarrollador de software. Cuando sabe cómo administrar todos los aspectos del desarrollo de software de manera temporal, es un excelente desarrollador de software. Excelente programador es otra cosa sin embargo. Allí se concentra solo en tres cosas: “El código de software como la solución del problema”, “Eficacia del código de software que ha escrito” y “Qué tan bien se comportará su solución cuando se amplíe a una gran base de usuarios”.

    Que deberias hacer

    Aprende y aprende y aprende.

    Que aprender

    Cualquier lenguaje de programación que te ayudará a escribir código. El lenguaje de programación no es demasiado importante, pero es bueno saber varios idiomas. Lo más importante que debe aprender son: Estructura de datos, Algoritmos, Arquitectura de computadoras, Matemáticas y cualquier lenguaje de programación en profundidad.

    Espero haber podido darte una idea.

    Esta es una pregunta difícil, así que tengo una respuesta que quiero que respondas: ¿qué QUIERES hacer? Si se le diera la opción de cualquiera de los trabajos anteriores (arquitectura, control de calidad / pruebas, automatización, desarrollo), ¿cuál elegiría y qué estaría haciendo?

    Ahora que tiene una comprensión básica de todos estos temas, es como si estuviera a punto de ingresar a su segundo año de escuela de medicina, es hora de comenzar a pensar en una especialización, lo que impulsará su comprensión de un tema y su carrera camino en una dirección dada.

    Una respuesta directa sería “Al ser reclutado por una empresa de TI”

    Si entramos en detalles, el ingeniero de software es un trabajo muy versátil. La razón por la que digo esto es porque los Ingenieros de Software realizan múltiples funciones según los requisitos de la Organización. Esto incluye el desarrollo que podría estar escribiendo un nuevo código por completo o trabajando en una herramienta ya desarrollada para cumplir con sus requisitos, probando, trabajando principalmente en documentos de Word y Microsoft Excel, preparando manuales de usuario, etc. Además, muchos ingenieros de software estarán en el banco sin ningún trabajo durante meses.

    Esta imagen resume acertadamente el cronograma de un ingeniero de software

    Al llegar a la parte más importante de “Cómo”, le brinda una ventaja si posee habilidades de lenguajes de programación, aunque no es obligatorio. Las empresas lo capacitarán en función de sus proyectos existentes y su cartera de proyectos.

    Entonces, la conclusión es que, para convertirse en un ingeniero de software, basta un buen trabajo con entrevistas con habilidades decentes.

    Todo lo mejor !!!!

    ¡He estado usando Pluralsight durante casi un año y los cursos han sido bien diseñados y muy beneficiosos para mí! Estoy trabajando para agregar más habilidades a mi representante de desarrollo, pero también hay cursos para TI. Algunos de los entrenadores hablan despacio para mantener mi atención, pero la interfaz fácil de usar de Pluralsight permite aumentos de velocidad, reduciendo el tiempo que necesita mirar y facilitando mantener la concentración.

    Sugeriría buscar tecnologías de desarrollo web: Ruby on Rails o Python Django podrían ser un buen lugar para comenzar. También estudie tecnologías del lado del cliente (HTML, Javascript, etc.). Esto se debe a que (a) te estás enseñando a ti mismo; y (b) actualmente desempleado. El desarrollo web de aprendizaje enfrenta ambos problemas: puedes aprender por ti mismo * y * el desarrollo web se presta fácilmente al trabajo independiente, ya que habrá una mayor demanda de clientes de pequeña / mediana escala. Dado que tiene poca o ninguna experiencia, deberá comenzar con trabajos pequeños, tal vez incluso regalos para amigos (crear un sitio web para el negocio de un amigo, etc.) y desarrollar cosas más grandes.

    Me encontré con esto recientemente.

    Hubo 3 programadores. Más fresco, Programador Senior y Programador Ninja.

    El gerente de proyecto solicitó una cotización de tiempo de todos los 3. Diciendo: debe pasar por este campo, pero tenga en cuenta que puede haber minas de bombas en el medio.

    Fresher dijo: Es una tarea de 10 minutos, lo haré.
    El Programador Senior dijo: Mirando la complejidad de la tarea y con algo de tiempo de amortiguación, lo haré en 2 días hábiles.
    Ninja Programmer dijo: Es una tarea de 10 minutos, pero citemos por 15 minutos.

    Mientras cruzaba, el programador de Fresher comenzó con entusiasmo pero se encontró con muchas minas y se lastimó gravemente y pudo completar el camino en 2 días, completamente exhausto y herido.

    Programador senior cruzó cuidadosamente y manteniendo una distancia segura de las minas, cruzó con éxito el campo en un tiempo dado.

    Programador Ninja, caminó pacientemente y cruzó el campo en 10 minutos.

    Tanto el programador Fresher como el Senior se sorprendieron y le preguntaron: ¿Cómo cruzaste el campo de manera tan eficiente?

    Ninja sonrió y dijo: No puse minas en primer lugar.

    Moral:
    1. Te hace un gran programador cuando codificas para mañana .
    2. No dudes en volver a escribir la lógica cuando sea necesario, estarás haciendo un favor a tus programadores sucesores.
    3. Piense antes de codificar, también puede hacer algunos trámites antes de escribir el código real.
    4. La re-usabilidad no es obligatoria, a menos que sea factible.

    More Interesting

    ¿Cuál es el mejor software POS para negocios minoristas?

    ¿Cuáles son algunas de las habilidades equivalentes de grado CS que posee un ingeniero de software que no tiene un título?

    ¿Debo elegir 'teoría de la computación' o 'ingeniería de software' para mi electivo?

    Si me convirtiera en ingeniero de software, ¿debería esforzarme por convertirme en uno en Google o en una compañía de videojuegos?

    ¿Es fácil convertirse en un reclutador técnico con experiencia en ingeniería de software? ¿Se necesita alguna capacitación o certificación?

    ¿No conocer Java obstaculizará mi carrera como ingeniero de software?

    ¿Cuál es su consejo sobre seguridad para un programador de arranque SaaS?

    ¿Qué debe incluir una cartera de redacción técnica?

    ¿Cómo es ser ingeniero de software?

    Cómo convertirse en un desarrollador de software sin universidad

    ¿Cómo debería un ingeniero de software de 25 años invertir su tiempo y dinero para aprender? ¿Qué debe aprender?

    Como desarrollador de nivel medio, estoy totalmente confundido por las propiedades que mis superiores ponen en cosas como el estilo ¿alguien puede explicar?

    Si la ingeniería de software o cualquier otra ingeniería no es una buena idea (lo peor que se puede hacer con su vida), ¿qué se debe elegir como carrera?

    ¿Las empresas consideran que los ingenieros de doctorado están sobrecalificados?

    ¿La mayoría de las compañías de software ofrecen un teléfono celular a ingenieros / desarrolladores de software de nivel básico?