¿Qué es lo que realmente necesito aprender y hacer para convertirme en un ingeniero de software exitoso?

Si está buscando una carrera en el sector de la ciencia y la tecnología, la ingeniería de software es una elección emocionante. Según el Informe de 2016 de CareerCast de los 200 trabajos principales en los EE. UU., La ingeniería de software ocupa el puesto número siete. Está catalogado como una profesión con una alta probabilidad de crecimiento, un ambiente de trabajo agradable y una escala salarial superior al promedio.

Estas son algunas cosas que creo que definitivamente deberías saber:


¿Qué hace exactamente un ingeniero de software?
Según TryEngineering, los ingenieros de software “aplican los principios y técnicas de la informática, la ingeniería y el análisis matemático al diseño, desarrollo, prueba y evaluación del software y los sistemas que permiten a las computadoras realizar sus múltiples aplicaciones”.

Los ingenieros de software deben tener fuertes habilidades de codificación, pero a menudo están más involucrados con el desarrollo de algoritmos y el análisis y la resolución de problemas de programación que con la escritura de código. Están involucrados con el diseño y desarrollo de todo tipo de software.

Por definición, los ingenieros de software aplican principios de ingeniería a la creación de software. Este énfasis en la aplicación de conceptos de ingeniería al proceso de desarrollo de software es uno de los factores que distingue a los ingenieros de software de los desarrolladores de software.

La descripción de trabajo típica para un ingeniero de software incluye:

  • Experiencia, realización y experiencia utilizando herramientas y proyectos de código abierto.
  • Competencia en diseño de patrones, pruebas automatizadas y sistemas de tolerancia a fallas.
  • Capacidad para crear y mantener arquitectura de TI, almacenes de datos a gran escala y sistemas basados ​​en la nube.
  • Capacidad para construir canalizaciones de datos escalables y lenguajes específicos de dominio escalables.

Calificaciones clave para ingenieros de software
Las calificaciones para los ingenieros de software se pueden dividir en tres categorías principales: educación, conjunto de habilidades y rasgos de personalidad.

Educación: Si bien hay algunos ingenieros de software que no tienen un título, en su mayor parte, los ingenieros de software que buscan trabajar con grandes empresas tecnológicas necesitan al menos un título de licenciatura. Aquí hay una lista de las principales empresas de tecnología y el nivel educativo de sus ingenieros de software:

  • Microsoft: 74 por ciento – licenciatura; 36 por ciento – maestría; 7 por ciento – doctorado
  • Google: 84 por ciento – licenciatura; 50 por ciento – maestría; 20 por ciento – doctorado
  • Cisco Systems: 77 por ciento – licenciatura; 36 por ciento – maestría; 4 por ciento – doctorado
  • Facebook: 83 por ciento – licenciatura; 44 por ciento – maestría; 15 por ciento – doctorado
  • IBM: 66 por ciento – licenciatura; 21 por ciento – maestría; 2 por ciento – doctorado

Conjunto de habilidades: Si bien las habilidades más demandadas varían de una compañía a otra, dependiendo de las necesidades de la compañía, hay algunas habilidades básicas que todas las compañías valoran en los ingenieros de software. Los ingenieros deben poder codificar en varios idiomas, comprender los patrones y marcos de diseño, tener capacidades de refactorización y tener pasión por el código.

Según las últimas ofertas de trabajo, las principales compañías tecnológicas esperan que sus ingenieros de software sean competentes con:

  • Java: 62 por ciento
  • Metodologías ágiles: 46 por ciento
  • Javascript: 46 por ciento
  • Desarrollo de software: 41 por ciento
  • SQL: 40 por ciento
  • C #: 38 ​​por ciento

Rasgos de personalidad: los rasgos de personalidad útiles para los ingenieros de software incluyen:

  • Pensamiento analítico
  • Visión creativa
  • Visión para los negocios
  • Paciencia
  • Capacidad para trabajar como parte de un equipo, ya sea en una oficina o de forma remota.
  • Disciplina
  • Paciencia
  • Atención al detalle [1]

Notas al pie

[1] Cómo convertirse 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!

Las leyes inmutables son raras en la ingeniería de software, y cuando un ingeniero afirma haber encontrado una, ese ingeniero generalmente es considerado con escepticismo.

Los principios generales son más bienvenidos.

En esta publicación y episodio de podcast, transmito algunas filosofías sueltas sobre la ingeniería moderna de software. Estas son opiniones fuertes débilmente sostenidas. Agradezco el debate y la discusión.

1. No tienes que demostrar tu valía.

El software es un campo nuevo y nadie sabe cómo hacerlo. Si alguien dice que no está calificado y, por lo tanto, debe realizar trabajos de mantenimiento, debe interrogar a esa persona. Tenemos un sistema al revés donde las personas a las que se les paga menos hacen el trabajo más horrible. Tienden a ser jóvenes e ingenuos.

Esto no es un axioma.

La narrativa que venden las compañías gigantes a los ingenieros jóvenes es la siguiente: “tome su trabajo de $ 80k / año, haga el mantenimiento del software que le da a la compañía $ 1 millón y odie su vida”.

“Después de que haya pasado suficiente tiempo en el primer nivel de la mina de franjas intelectuales, le haremos un SDE 2, donde podrá realizar una refactorización de nivel ligeramente superior por $ 150ka al año, lo que hará que la empresa gigante $ 5 millones”.

Esto es lo que se llama un arbitraje.

2. No eres una mercancía.

Tenemos una mentalidad de línea de montaje de la era industrial. El software es más una artesanía. No creas que eres un diente reemplazable. No crea en el proceso de entrevista único para todos con problemas de pizarra. Estos sirven para eliminar tu individualidad y hacerte sentir como un trabajador de línea de montaje.

3. La ingeniería de software es un arte y una ciencia, pero raramente ambos a la vez.

El proceso de planificación y diseño es un arte, pero una vez que se cumplan los requisitos, puede proceder de manera más determinista. Lo mismo es cierto para las otras actividades cuantitativas en las que he participado: póker, música y escritura. Como discutimos Michael Rosenthal y yo, la cuestión del arte versus la ciencia es la misma pregunta que la estrategia versus la táctica.

4. No eres tu trabajo.

Aprendí esto muy temprano cuando jugaba al póker cuando tuve que dejar esa carrera, y lo uní estrechamente a mi identidad. Si hace que su trabajo sea lo mismo que quien es, entonces su autoestima se define por aquellos que lo juzgan en su trabajo.

Su trabajo es un medio para atender su propio propósito superior.

5. El mundo es un sistema distribuido.

Cuando realiza una acción en su teléfono inteligente, hay latencia antes de que se ingiera esa acción.

Los servidores a veces te mentirán, pero los servidores tienden a la consistencia eventual. El mundo funciona de la misma manera. A corto plazo, los sistemas humanos nos mienten todo el tiempo, pero el mundo tiende a la consistencia eventual, la verdad finalmente se presenta.

Una analogía decente es la hipótesis del mercado eficiente: los mercados lentamente eficientes son un proceso eventualmente consistente.

El mundo es un sistema distribuido, ¿cuál es la consecuencia de esto? Tenemos que hacer los arduos cálculos de riesgo y recompensa que son obligatorios para cada programador de sistemas distribuidos.

Las fallas de cola larga pueden ocurrir y ocurren.

En un sistema distribuido, a menudo priorizamos la seguridad sobre la vida. En un sistema operativo distribuido, el programador toma todas las precauciones para evitar la pérdida de datos. Del mismo modo, si un escenario de la vida real presenta una pequeña probabilidad de un gran riesgo a la baja, debe tomar grandes precauciones. Si alguien te ofrece tirar un dado con 1000 lados, y si lanzas un 1-999, obtienes $ 100 millones, pero si sacas un 1000, te cortan la cabeza, el lado positivo está limitado, pero el lado negativo no es .

Puedo estimar cuánto $ 100 millones mejorarán mi vida, pero es imposible cuantificar cuán malo es que me corten la cabeza. Casi nunca aceptaría esa oferta, porque el valor esperado es infinitamente negativo.

Volviendo a las consecuencias de vivir en un sistema distribuido, hay una gran variedad de resultados potenciales en una transacción dada, y evaluar estos riesgos masivos de cola larga requiere mucho pensamiento y cálculo.

6. No eres un boleto de lotería.

Esta es una cita de Peter Thiel. Argumenta que deberíamos pensar en términos de cálculo en lugar de estadísticas porque si crees que el mundo es una lotería, entonces te darás permiso para perder.

Ejemplo: un ingeniero de software podría decir “Estoy postulando para un trabajo con 1000 solicitantes, por lo que las posibilidades de que obtenga el trabajo son bastante bajas”. Eso es mirar un juego de habilidad como un juego de suerte, y si no lo haces ‘ t optimice con mucha preparación y duerma para esa entrevista, entonces es su culpa.

Si juegas póker o Magic o Dominion, es fácil echarle la culpa a la pérdida, pero los mejores jugadores son los que optimizan a pesar de la mala suerte. Personalmente, me gusta jugar juegos en circunstancias en las que tengo mala suerte porque es más un desafío interesante y una mejor experiencia de aprendizaje.

“Los hombres superficiales creen en la suerte o en las circunstancias. Los hombres fuertes creen en la causa y efecto.”

– Ralph Waldo Emerson

La suerte es una idea que nos rescata cuando no hacemos suficiente diligencia debida.

Vivimos en una sociedad que ama hablar de suerte porque nos da una excusa cuando perdemos. Eso no quiere decir que no haya suerte en el mundo: muchas personas tienen mala suerte. Pero si está leyendo esto, es probable que esté en el 0.01% más afortunado.

Existe un argumento filosófico de larga data sobre si controlamos o no nuestro propio destino. En realidad, realmente no importa.

Debemos suponer que tenemos el control de nuestro propio destino.

Si no tenemos el control, no cambia nada si asumimos o no que tenemos el control. Pero si tenemos el control, sería muy peligroso para nuestro bienestar asumir que no tenemos el control.

7. Elija la acción sobre la planificación.

Hablar es barato y la ejecución es escasa.

Es por eso que a nadie le importan tus ideas, les importa ver tu prototipo. John Mayer dijo que todo lo que tenía que hacer para tener éxito es terminar sus canciones.

En Amazon, llamaron a esto “sesgo de acción”. En Facebook, “se mueven rápido y rompen cosas”.

Dicho esto, generalmente puedes elegir ambos. La planificación a largo plazo está subestimada porque pocas personas toman las acciones agresivas a corto plazo necesarias para iterar hacia ella. Si nunca ha visto frutos de planificación a largo plazo, es difícil ver el punto.

8. La ingeniería de software está llena de mentiras y personas que tratarán de aprovecharse de usted.

Tienes que descubrir qué creer por ti mismo.

También hay muchas personas geniales, pero depende de ti desarrollar la intuición y un fuerte razonamiento.

Hay una escena de The Big Short donde Mark Baum, interpretado por Steve Carrell, está parado frente a los banqueros diciendo “el mundo está lleno de fraude, nuestra comida es fraudulenta, nuestro sistema bancario es fraudulento, nuestra medicina es fraudulenta”, y si miras a tu alrededor e investigas cada una de estas cosas, descubres que estos sistemas tienen capas de engaño y mentiras: la ingeniería del software es la misma.

Por ejemplo, si llega a un lugar que le da muchas ventajas como almuerzo gratis o masajes en la espalda, comprenda que lo están haciendo porque le están pagando mal.

Si recibe un salario de $ 130k, opciones de acciones de $ 70k, almuerzo gratis y lavandería gratis, puede parecer un buen negocio, pero ¿qué dice eso sobre cuánto dinero le está haciendo a la compañía?

Según Business Insider:

  1. Apple: $ 1,865,306 por empleado
  2. Google: $ 1,154,896 por empleado
  3. Microsoft: $ 732,224 por empleado
  4. Amazon: $ 577,482 por empleado (era más alto antes de trabajar allí)

Esto ni siquiera está sesgado respecto de cuánto ganan con los ingenieros .

La economía del software no es intuitiva.

Lo loco del software es que se requieren $ 0 para hacer nuevas copias de un producto que solo tiene que escribirse una vez. Esto contrasta con la línea de montaje donde cada nueva unidad requiere un nuevo esfuerzo y fricción humana para reproducirse. Con el software, solo la primera unidad requiere mano de obra significativa para producir.

Como ingenieros de software, tenemos que repensar nuestro valor como trabajadores en un mercado con el alto apalancamiento de la economía del software.

Las compañías tecnológicas gigantes pueden llevar a cabo este arbitraje de ingenieros que pagan poco porque los ingenieros se dejan seducir por una serie de mitos.

“La tradición intelectual es de servilismo al poder, y si no la traicionara me avergonzaría de mí mismo”.

-Noam Chomsky

Hay una narración de un programador que es incapaz de hacer otra cosa que no sea programar. Algunos programadores hablan de esto con orgullo, diciendo cosas como “Solo soy un ingeniero, no quiero pensar en el lado comercial de las cosas, no entiendo el lado comercial de las cosas”.

Los ingenieros han sido seducidos por la perspectiva del industrial de que no podemos liderarnos, no podemos evaluar el costo de oportunidad y no entendemos el mercado en su conjunto.

Todas estas son mentiras, y el mundo será más eficiente y utilitario si los ingenieros toman el control de sus carreras y comienzan a evaluar las opciones fuera de su contexto inmediato y limitado.

9. No eres tus credenciales ni tu pasado.

Si comenzaste en ventas, puedes aprender a convertirte en ingeniero. Si comenzó como ingeniero y no le gusta, puede convertirse en un podcaster.

No necesita un título; si puede hacer el trabajo, puede obtener un trabajo como ingeniero.

En la entrevista con mi hermano Michael Rosenthal, habló sobre abandonar la escuela y hacer programación independiente, y cómo aprendió más rápido desde que salió del proceso educativo altamente seguido.

En el episodio de Seth Godin, habló sobre el sistema educativo en desuso y la disminución del valor de un título.

No te dejes definir por tu pasado y las etiquetas y mensajes que la sociedad te aplica. Puedes tomar el control de tu vida y definir tu futuro.

10. Como ingeniero de software, puede tomar riesgos profesionales agresivamente porque su desventaja está fundamentalmente limitada.

Deberías saltarte al trabajo. Pasamos la mayor parte de nuestro tiempo en el trabajo.

El mercado laboral es realmente bueno en este momento porque nuestra economía está siendo completamente reformada por el software. Se está generando una gran oportunidad económica:

  • AWS (todavía joven) lleva los costos de inicio de $ 50k + a ~ $ 0
  • Mobile (todavía joven) pone una supercomputadora que es más poderosa que la varita de Harry Potter en el bolsillo de todos
  • Los mercados emergentes aún no están en línea, lo que sugiere una gran demanda latente
  • Cada uno de los anteriores tiene efectos compuestos entre sí

Estos son fundamentos económicos, no señales técnicas espurias.

No les creas a los capitalistas de riesgo despotricando y enloqueciendo argumentando por valoraciones más bajas y gritando sobre una burbuja. No les creas a los antitecnólogos luditas que se burlan de sus cafés con leche.

Según cualquier proyección lógica, la gran demanda de ingenieros no se está disipando en el corto plazo … a menos que toda la economía se derrumbe en una terrible catástrofe de cisne negro, en cuyo caso su trabajo actual probablemente se evaporará de todos modos.

Como dijo David Heinemeier Hansson, vale la pena considerar con qué frecuencia su trabajo lo pone en un estado de flujo y tranquilidad. Si su trabajo es estresante y completamente desagradable, encontrar un nuevo trabajo debería ser una gran prioridad.

Puede consultar estos consejos por freelancer.com:

1. No te vendas con una especialización

Ya pasaron los días en que los desarrolladores buscaban impresionar a los empleadores con una sola habilidad, como ser un especialista en C ++ o Java. El panorama tecnológico del mundo contemporáneo requiere que seas flexible. Esto significa que un desarrollador tiene que estar bien informado en varios idiomas. Sí, las personas tienen preferencias y experiencia en varios campos, pero es imperativo tomar esas especificaciones como fortalezas y no como limitaciones. Los empleadores buscan desarrolladores de software que puedan aprender nuevas habilidades fácilmente, y aquellos que lo hagan de manera experta. Un desarrollador puede mostrar su destreza en Github, y esto atraerá a muchos empleadores.

2. Tome nota de lo básico

Aprender a programar y aprender un lenguaje de programación son dos cosas distintas. Un gran desarrollador tiene la capacidad de detectar problemas y prever soluciones inteligentes. Un algoritmo es básicamente un problema lógico, y un desarrollador debería poder explicárselo a un laico, independientemente de la complejidad. El desarrollador también debería poder diagramar el problema en una placa. Los grandes desarrolladores tienen la capacidad de comprender lenguajes, marcos y una variedad de herramientas de programación, pero cualquier problema debe resolverse en abstracto. Los desarrolladores que han perfeccionado las habilidades básicas en programación encuentran fácil identificar puntos en común. Por ejemplo, una vez que un desarrollador comprende que PHP y Javascript son lenguajes orientados a objetos que hacen uso de funciones de primera clase, pueden aprender fácilmente un idioma tras otro.

3. Los desarrolladores exitosos se centran en aprender el lenguaje subyacente en lugar del marco

Los marcos son temporales, independientemente de cuán populares se vuelvan, como Ruby on Rails. Quizás White Rails sea el preferido por muchos desarrolladores de software. Podría ser más simple que Volt o Sinatra, ya que los desarrolladores intentan trabajar en aplicaciones web a gran escala, y puede ahorrar tiempo y ofrecer una funcionalidad adecuada. Si un desarrollador toma tiempo para aprender Ruby o cualquier otro lenguaje subyacente, tendrá un tiempo fácil para cambiar entre varios marcos.

4. Lanzamiento a diferentes niveles

Ha habido un debate sobre si uno puede convertirse en un desarrollador de software completo. La creciente ubicuidad de Elastic Beanstalk de Amazon y Heroku, que son Plataforma como servicio (PaaS), ha hecho una clara distinción entre el lado del servidor y el del cliente. Los especialistas en desarrollo de software ya no manejan tareas como la capacidad de aprovisionamiento para un nuevo servidor, ya que pueden realizarse de manera automatizada a través de servicios en la nube. Un desarrollador que esté familiarizado con algunos servicios en la nube está mejor ubicado. Los desarrolladores no deben usar Platform as a Service como una excusa para no comprender los conceptos básicos del núcleo del sistema operativo. No es suficiente decir que un programa automatizado no puede interrumpirse. Debe haber alguien con las habilidades adecuadas para corregir la anomalía en caso de que lo haga.

5. Comprender las tendencias tecnológicas

Si un desarrollador elige una determinada área de especialización, esto es sinónimo de apostar a dónde se dirige la tecnología. Se decía que una persona que buscaba convertirse en desarrollador de mainframe hace una década era miope. Del mismo modo, cualquiera que trabaje duro para convertirse en administrador del sistema se encamina hacia un callejón sin salida en su carrera. Como desarrollador, analice críticamente hacia dónde va la tecnología. Hay programas e idiomas específicos que son muy buscados en el mundo actual. Swift es una de ellas, pero a medida que nuevas aplicaciones sigan llegando, podríamos ver a Swift relegado a otras áreas, como el desarrollo de juegos móviles. Todos los demás sistemas cambiarán a HTML5 y a una variedad de lenguajes multiplataforma.

6. Practica todos los días

La pila que aprendes realmente no importa, lo que importa es aprender haciendo. Tienes que dedicar tiempo a comprender tu nuevo oficio. Un día no es suficiente para convertirse en el gran desarrollador que quieres ser. El aprendizaje es un proceso continuo y no puede convertirse en un desarrollador de software de renombre después de 20 horas de práctica. Hay quienes dicen que necesita 10,000 horas para convertirse en un desarrollador de software experto. Para que consigas un trabajo como desarrollador de software, no solo necesitas las 10,000 horas de práctica, también necesitas tiempo dedicado. Por ejemplo, se necesitan más de 800 horas para comprender completamente el desarrollo web Full Stack. No es un trabajo de un día.

7. Haz uso de las herramientas utilizadas por grandes desarrolladores

Internet está lleno de recursos gratuitos como Codecademy. Sin embargo, no es un mundo de programación real, ya que escribe su código directamente en la web y se califica según la puntuación que obtiene de la prueba u otra actividad interactiva. No trabajarás así en el mundo real. Es importante aprender como cualquier otro desarrollador, utilizando herramientas reales. Esto hace que sea más fácil aprender cualquier habilidad nueva en programación y facilita la transición. Puede ser difícil usar herramientas utilizadas por desarrolladores reales si es un principiante, pero debe perseverar. Los programas en línea como Learn Verified lo ayudarán a aprender varias herramientas de desarrollo de software. El sitio utiliza procesos y herramientas básicos utilizados por los desarrolladores de software, como el desarrollo basado en pruebas, Git y GitHub, proyectos grupales y el trabajo en su terminal. Puede adaptarse para convertirse en un gran desarrollador si agrega estos a sus manuales de capacitación.

8. Estudie el código de otro desarrollador

Si aspira a ser un gran desarrollador, encuentre formas de aprender el código de otras personas. Explore los repositorios de GitHub y lea los códigos. Podría obtener documentación incorrecta, pero nunca obtendrá un código fuente incorrecto. Si aprende a leer el código fuente, comprenderá cómo está escrito y cómo funciona. Aprender el código de otras personas también es fundamental cuando se trata de depurar, ya que se le pedirá que comprenda el código erróneo.

Aunque muchas personas pasan por alto esta habilidad, es beneficioso ver cómo piensan los grandes desarrolladores y cómo escriben el código. No solo hojees el código. Sumérgete profundamente en él, aprende lo que se debe y no se debe hacer, vuelve a crearlo si es posible y comprende la funcionalidad. Intente realizar ingeniería inversa de un código determinado y comprenderá cómo crear el suyo.

9. Pertenecer a una comunidad.

Si recién está comenzando a perfeccionar sus habilidades como desarrollador de software, es importante encontrar una comunidad para aprender. Si te rodeas de personas de ideas afines, tu sistema de apoyo es amplio y puedes recurrir a ellos siempre que estés atascado. Es posible perder la motivación a medida que desarrolla el código, especialmente si no funciona. Una comunidad en línea puede ser una gran inspiración.

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!

La mejor respuesta a esta pregunta es esta. ¡Trabajas duro y nunca dejas de aprender!

Si bien este eslogan podría aplicarse a la mayoría de las carreras, es especialmente cierto en la programación.

Debido a la cantidad de tiempo y trabajo que lleva aprender a convertirse en ingeniero de software, se ha convertido en una habilidad muy lucrativa para aprender y una carrera profesional popular para muchos. Los salarios de ingeniería de software actualmente están en tendencia a $ 169k / año según YouWorth.

Salarios de ingeniería de software en San Francisco, CA

Entonces, ¿qué cosas debes hacer?

1. Siempre se un estudiante .

Estás trabajando en un campo que cambia, crece y muta constantemente. DEBE mantenerse al día o corre el riesgo de quedarse atrás. No se preocupe por conocer todos los idiomas de adentro hacia afuera, sino que obtenga un conocimiento práctico de muchos idiomas. Cuando surgen cosas nuevas, es hora de volver a ser estudiante. Lee, estudia, aprende y nunca te detengas. ¡Obviamente, cuantos más idiomas puedas dominar, mejor serás!

2. Crea tus propios proyectos .

Siempre tenga un trabajo lateral / proyecto en marcha. Usa lo que sabes para construir cosas. Este tipo de proyectos, los que te apasionan, es donde más aprendes. ¿Por qué? Porque te afecta directamente: ¡es tu bebé! Probablemente esto sea obvio para muchos programadores, pero sé algo de ese código del 9 al 5 y eso es todo. Esas personas pueden ser capaces de mantener un trabajo, pero tendrán más dificultades para crecer en su carrera.

3. Ten pasión por lo que haces.

Algo así como 23 pero haz lo que tengas que hacer para mantener tu pasión por la programación. Si lo amas, entonces trabajarás más duro en ello. Si estás trabajando duro y amas lo que haces, en realidad no funciona, ¿verdad? Esto también evitará que te quemes.

Cada vez que quiero aprender un nuevo idioma, me propongo un proyecto objetivo. Así que inventaré una aplicación que cubra los aspectos que quiero aprender, por ejemplo, base de datos, gráficos, presentación, concurrencia. Le recomiendo que establezca un objetivo relativamente ambicioso que amplíe su ingenio y lo obligue a buscar respuestas. ¡El proyecto podría ser tan simple como un administrador de tiempo personal (si es un principiante completo) o tan complejo como un sistema de negociación de acciones! Al lograr su proyecto objetivo, irá mucho más allá de simplemente aprender la sintaxis: aprenderá cómo el lenguaje encaja con las bibliotecas de software y muchos otros aspectos del entorno de programación.

En segundo lugar, además de algunos lenguajes básicos como Java, C ++, C # etc., debe aprender algunos lenguajes de script comunes como Python, Javascript, etc. Estos son útiles para el desarrollo web, la generación de herramientas, la optimización de su entorno e incluso la versión gestión de control (¡por nombrar solo algunos usos!).

En la mayoría de los casos, eventualmente necesitará algunas habilidades de base de datos. Aprenda sobre normalización, SQL y buenas prácticas de bases de datos en un mínimo absoluto. Hay muchos productos de base de datos gratuitos o de versión limitada que lo ayudarán a aprender. Comencé con Microsoft Access, luego MySQL, antes de pasar a Oracle, etc. En cualquier organización empresarial, la base de datos es el rey. Cuando analizo una empresa, siempre me dirijo directamente a las personas de la base de datos (y aplazo a los chicos y chicas orientados al proceso / funcional a las reuniones a la hora del almuerzo).

A continuación, debe familiarizarse con las Metodologías de desarrollo de software y el Control de versiones porque no puede escapar de estos dos aspectos importantes del desarrollo de software en el mundo real. La metodología más popular se conoce como Agile. Hay muchos libros y videos sobre el tema, pero debes familiarizarte con lo que sea lo último y lo mejor.

El control de versiones tiene muchas aplicaciones que van desde la seguridad del software hasta las pruebas del sistema / componente / integración hasta el control del ciclo de vida del producto. Una vez más, varios de estos paquetes son gratuitos o tienen una versión limitada que puede usar para familiarizarse.

Por último, está todo el tema de los requisitos y los planes de prueba. Estos NO son extremos opuestos del proceso de desarrollo (de hecho, el primer propósito de un plan de prueba debe ser probar los requisitos). Cuanto mejor escriba, lea y desarrolle estos documentos, más altos serán los roles que se le pueden asignar. Están fuertemente vinculados con las Metodologías, pero en realidad las considero una habilidad específica.

La pregunta más importante es “POR QUÉ” un ingeniero de software.
¿Has elegido tu especialidad en Informática que te fascina? O ¿Estás enamorado de la cultura corporativa y quieres ser un gran día algún día? ¿O porque todos dicen que es el campo más brillante y que obtendrás más oportunidades de trabajo? O el mejor: desea iniciar un inicio.
Si su razón es cualquiera de las anteriores, le solicito que verifique con sus prioridades de vida. Descubre lo que te apasiona. Luego, descubre formas de alcanzar tu sueño.
Nuevamente “Éxito” es un término relativo. ¿Qué define el éxito para ti? ¿Dinero, fama, estatus social?
Si sus respuestas son una de las anteriores, este es el motivo equivocado para elegir su sueño. Más bien concéntrese en cómo va a crear valor y cómo este valor creado será útil para otros seres humanos.

Sé que todo esto sonará como una conferencia aburrida. Pero cuando está cambiando mi vida y la de las personas que me rodean, me siento más animado a hacer más bien.

Soy un desarrollador web independiente. Hago sitios web para vivir. Además, animo a las personas a encontrar su pasión y, si es posible, ayudarles a comenzar a trabajar independientemente. Si alguna vez vienes a Bangalore, entonces puedes contactarme con respecto a esto. También organizo una reunión de profesionales independientes aquí: Desarrolladores web independientes de Bangalore
Así que siéntase libre de comunicarse cuando lo desee, pero lo más importante es seguir su pasión.
Te deseo lo mejor.

Esta es una gran pregunta, y la ingeniería de software es una gran carrera. Estoy seguro de que a otros les irá bien al dirigirse hacia recursos específicos para alentar su dirección.

Abordaré un poco el rumbo de la educación ya que recientemente he estado en el medio de las cosas.

Me parece que hay dos formas entrelazadas para los mejores trabajos de ingeniería. El primero es la ruta tradicional de la educación. Muchas de las mejores empresas contratan a nivel de entrada solo de las mejores escuelas, y muchas hacen de la educación su primer examen en la evaluación de currículums. ¿Por qué? No vale la pena su tiempo para revisar cientos de currículums del Podunk Community College en una feria de carreras con la esperanza de encontrar un ingeniero potencialmente brillante. Tendrás una enorme ventaja con un título de CS de una escuela de primer nivel. En Canadá, esa es la Universidad de Waterloo, que entiendo es uno de los mejores programas de ingeniería del mundo. Además, a los nuevos empleados (especialmente en compañías más grandes) a menudo se les ofrece más dinero solo por la marca de la escuela.
Dicho esto, si sus marcas no son suficientes, no se preocupe. ¡Un título de CS de una escuela menos prestigiosa o con un pequeño programa de ingeniería no es una trampa de por vida! Siempre puedes obtener un título de posgrado (mi ruta), o simplemente hacer cosas increíbles (ver más abajo). Dicho esto, debes estudiar lo más que puedas ahora. Baja la consola del juego y toma el teclado. Deberías centrarte en dos cosas:

  • Aprendiendo a escribir un gran código y jugando con las cosas.
  • Aprender matemáticas y obtener las mejores calificaciones que puedas.

La segunda forma es la menos tradicional, pero más importante para la ingeniería, de hacer cosas geniales. No necesitas universidad si no la quieres. Si tienes un gran blog, una serie de proyectos increíbles, aplicaciones en las tiendas y eres visible en línea, y conoces a algunas personas, hay una gran posibilidad de que te persigan. Todavía es absolutamente esencial conocer sus estructuras y algoritmos de datos básicos, por lo que si no obtiene un título de CS de 4 años, sería prudente saber cuándo ampliar primero la búsqueda y el gran tiempo de ejecución de O de quicksort. Coursera e iTunes U tienen muchos cursos de CS que puede tomar para repasar los conceptos básicos en lugar de la educación tradicional.

Combine ambos: una gran educación fundamental (lo que sea que parezca) y una gran cartera de proyectos para una carrera prometedora.

Estas son algunas prácticas que observé y adopté,

  • Suscríbase a algunos sitios web de tecnología populares y actualícese a la tecnología actual (al menos palabras de moda, en caso de que no encuentre tiempo). Puedes encontrar algunos de ellos aquí. ¿Cuáles son los mejores blogs de programación?
  • Cree un blog y comience a actualizar su blog con el contenido con el que se está actualizando. Puede actualizar todo lo que encuentre nuevo, aunque esté disponible en el sitio de Oracle / Microsoft, no se excluya y no lo dude.
  • Regístrese en un sitio de control de calidad como quora, Stack Overflow y comience a hacer / responder preguntas. Suscríbase a todas las tecnologías que conoce (no necesita ser experto en esa tecnología).
  • Familiarícese con las herramientas. Si siente algún patrón que puede automatizarse, primero busque y luego comience a desarrollarlo, sobre todo puede existir en Google. Intente averiguarlos y utilizarlos (por ejemplo, LogExpert, WinMerge, JALOPY – Jalopy, la herramienta de formateo del código fuente, etc.). Pero asegúrese de utilizar las herramientas más populares como eclipse, netbeans, visual studio al menos una vez.
  • La documentación es una de las partes importantes en la vida del ingeniero de software, incluso para los desarrolladores. Dedique algo de tiempo a la documentación e intente documentar casi todo lo que hace para su trabajo, porque es la cara que se lo mostramos a las personas no técnicas. No me importa el uso de ese documento.
  • Cree algunos proyectos en Git Hub, etc., intente usar estándares en su proyecto. Puede comenzar con un proyecto simple pero no olvide mantener los estándares.
  • Atajos de mecanografía y aprendizaje. Parece tonto, pero te hace diferente de los demás y le da un toque más profesional a tu vida de software.

Algunas cosas menos priorizadas

  • Intenta comunicarte en inglés, al menos durante las reuniones.
  • Acostúmbrese a escribir actas de reuniones y elementos de acción en reuniones / conferencias.
  • Aprenda y siga algunas etiquetas sobre comidas, uso móvil y alimentación.
  • Controla tus emociones y sentimientos personales.

Todos estos son comunes para un ingeniero de software independientemente de su perfil si
son probadores, desarrolladores y ejecutivos de soporte. Y usted puede descubrir necesidades específicas en su propio perfil y trabajar en ello.

Para ser un buen desarrollador de software, necesita:

1. Mente analítica

  • No existe una definición estricta de una mente analítica. Una cosa es segura: si tiene una mente analítica, es capaz de pensar, observar datos, recordar y basarse en estas actividades, resolver problemas.
  • Desafortunadamente, esta es la habilidad más crucial y necesaria de un buen desarrollador de software. ¿Por qué “desafortunadamente”? Bueno, esto significa que no todos pueden convertirse en un buen desarrollador de software, incluso si realmente luchan. Tener una mente analítica es en gran medida una habilidad innata. Si no posee esta habilidad, es mejor cambiar el campo de interés.
  • Resolver muchos problemas algorítmicos y lógicos puede aumentar el nivel básico de capacidad de pensamiento analítico. Sin embargo, cada persona tiene su propio borde (“nivel máximo”, como en los juegos de rol) que no se puede superar.

2. Percepción general de un software

  • Crear software es como jugar al ajedrez: para ganar debes predecir algunos movimientos por delante. No solo debe mirar la presencia sino también el futuro mientras programa. Para ser un buen desarrollador de software, no solo puede centrarse en una pequeña pieza de software que está implementando.
  • No solo necesita saber cómo implementar algo, sino también por qué. Debe ver el software como un todo, no solo como la pequeña parte en la que está trabajando actualmente.
  • Debe comprender el impacto de su pequeña pieza en general. Con todo, simplemente necesita ver la imagen más grande.

3. Enfoque orientado a los negocios para el desarrollo de software

  • En mi definición de un buen desarrollador de software, no es suficiente estar orientado técnicamente. Puede ser un buen programador y su código puede ser de muy alta calidad, pero aún así no podrá comprender y satisfacer las necesidades de sus clientes.
  • Si no está orientado a los negocios, puede causar muchos problemas: malentendidos, falta de usabilidad o cambios tardíos en la funcionalidad.
  • Entonces, ¿qué significa ser un desarrollador de software orientado a los negocios? Hay muchos factores que influyen en esta característica de un desarrollador, pero en mi opinión, los más relevantes son los siguientes:
  • Comprender el software desde una perspectiva empresarial
  • Apreciación de las necesidades del cliente.
  • La capacidad de convertir los problemas comerciales en soluciones técnicas.
  • La capacidad de cooperar y comprender a las personas desde cosas no técnicas

4. Ansiedad por el trabajo en equipo.

  • Un buen desarrollador de software no es una persona que se sienta todo el día frente a la computadora y los códigos. Si se supone que un proyecto tiene éxito, la comunicación dentro del equipo es crucial. El intercambio de pensamientos, ideas, conocimientos y experiencias puede aumentar la eficiencia y la calidad de la solución.
  • Un desarrollador que no esté ansioso o que no pueda comunicarse con otros miembros del equipo no podrá integrarse en el equipo y en el proceso de desarrollo de software. Soy consciente de que hay muchos desarrolladores muy introvertidos que realmente están haciendo un gran trabajo y producen código de alta calidad. Sin embargo, en Agile, que es cada vez más común entre las empresas de TI, la codificación pura no es suficiente. La comunicación dentro de un equipo es una de las principales claves del éxito.

—————————————————————————————————————

Conclusión: La definición anterior de un buen desarrollador de software no sería aplicable hace varios años. Si no fuéramos ágiles, probablemente cualquier buen programador podría considerarse un buen desarrollador. Pero somos. Hoy en día, el mundo de TI necesita buenos desarrolladores de software ágiles que puedan analizar problemas, verlos desde una perspectiva más amplia, estén orientados a los negocios y estén ansiosos por trabajar en equipo. Sin ellos, los proyectos de TI no podrían manejarse mediante la metodología ágil. El manifiesto ágil se convertiría en un conjunto de principios insignificantes, no utilizados por nadie.

—————————————————————————————————————————

Ya había respondido antes. Si has pensado seriamente en convertirte en ingeniero de software, probablemente estés interesado en aprender más sobre cómo trabajar como ingeniero de software con un título en informática. Al aprender más sobre qué caminos educativos lo ayudarán a seguir una carrera como ingeniero de software, puede tomar decisiones informadas sobre qué especialización seleccionar cuando se inscribe en la universidad.

Convertirse en ingeniero de software

Si ha decidido que desea convertirse en un ingeniero de software, probablemente esté interesado en conocer qué caminos educativos lo ayudarán a lograr su objetivo. Al analizar los antecedentes educativos de los ingenieros de software, la Oficina de Estadísticas Laborales informa que generalmente obtienen una licenciatura en ciencias de la computación. Por esta razón, está claro que las personas que desean convertirse en ingenieros de software pueden hacerlo obteniendo un título en ciencias de la computación.

Si bien obtener un título en ciencias de la computación es una ruta segura a seguir cuando decides convertirte en ingeniero de software, debes pensar críticamente sobre otras opciones para determinar el mejor curso de acción. Por ejemplo, si está interesado en el diseño de juegos y se está preparando para trabajar como programador de juegos, obtener el título en informática será práctico e ideal. Obtener el título de CS también será ventajoso si planea trabajar para una corporación técnica como Intel, IBM, Google o Microsoft. Sin embargo, si está pensando en trabajar para una corporación no técnica que prioriza la creación de aplicaciones comerciales, sería ventajoso obtener un título en Sistemas de Información Administrativa. Debido a que este tipo de título proporciona habilidades generales de negocios y administración, puede ser práctico y quizás más ventajoso que un título de CS que implica dominar material que uno nunca puede usar.

En muchos casos, determinar qué tipo de título sería más ventajoso para usted puede ser tan simple como investigar sobre las empresas para las que planea trabajar. A menudo, los empleadores enumerarán el tipo de requisitos educativos para los puestos que ofrecen, y reconocer cuáles son estos requisitos puede ayudarlo a seleccionar el programa de licenciatura que un empleador aceptará.

Finalmente Conclusión ..

Si está pensando en seguir una carrera como ingeniero de software, debe saber que hacerlo puede brindarle varias recompensas personales y profesionales. También debe tener en cuenta que trabajar como ingeniero de software con un título en informática o sistemas de información de gestión es común y aconsejable.

TODO LO MEJOR

  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:

Gracias por el A2A Utkarsh. Todavía no soy un buen ingeniero de software si me preguntan qué debería haber hecho en la universidad para convertirme en un buen ingeniero de software. Y la respuesta sería:

1. Aprenda a codificar en un idioma primero.
2. Haga algo tangible con eso, aplicación web, aplicación móvil, aplicación de escritorio cualquier cosa.
3. Avance al siguiente nivel y lea sobre las tendencias actuales de la industria y lo que está de moda.
4. Elija algo que le interese y luego codifique para eso.
5. Trabaje con sus amigos / facultad para hacer un trabajo de investigación sobre ese tema.
6. Aprenda algo mientras tenga tiempo que no está relacionado con la ingeniería de software pero que lo ayudará a largo plazo: habilidades de gestión, finanzas, economía. Ampliar su dominio siempre lo ayuda a largo plazo como ingeniero de software y como empleado en su futura empresa.
7. Lo último es que si realmente disfrutas ser ingeniero de software, nunca lo dejes porque tus padres te están obligando a MBA o alguien actúa como mentor y te dice que GMAT tiene un mayor alcance. Trabaja para ti y no por dinero. Aunque esto suena muy complicado, pero muy pronto te darás cuenta de que pasas la mayor parte de tu tiempo trabajando en tu trabajo y, si no te gusta, no puedes ser bueno en eso.

Entonces, para resumir, leer, aprender, codificar, mostrar a otras personas, investigar para aprender cosas nuevas y mantener el fuego encendido.

Llevarse bien con la gente y ser honesto. Sencillo. Mis mayores problemas han sido manejar expertos de MSCS que no podían relacionarse con sus pares e incluso encontraron formas de ser molestos más allá de la comprensión. A los gerentes no les gusta supervisar a los niños; Paso muchas horas todos los días para ayudar a los miembros de mi personal a resolver problemas, de modo que cuando los empleados mismos son un problema, no estoy contento. ¡No hagas infeliz al jefe! Tenga en cuenta que no dije “tengo un problema” … eso es diferente.

Además, sea honesto sobre lo bueno y lo malo. Elogie a sus colegas, dé crédito a los demás. No hagas el 80% de la programación y las pruebas básicas de transferencia a tus compañeros simplemente porque eres demasiado importante para eso. Sí, yo también tuve eso.

Y sí, saber escribir software. Para la mayoría, este es un talento innato. Si no puede hacerlo bien en su primer año, entonces quizás no tenga el cerebro listo para ello. Palabras duras y esto no es (solo) un problema de inteligencia … paciencia, persistencia y perfección son necesarias en este negocio. Si no tienes los tres, entonces vete.

Haz amigos de tus colegas y confía en otros para que te ayuden. Naturalmente, ayuda cuando surjan las oportunidades. Siempre quiero que mi jefe hable bien de mí a su SO … todos hablan de su personal / compañeros de trabajo en casa, así que asegúrese de que su jefe diga “Wow, estoy en casa temprano y no estoy trabajando durante el fin de semana porque John resolvió nuestro problema con el cliente y implementará el nuevo software para el lunes “.

Entonces, después de que hayan pasado esos 10 años, tendrás muchos mentores para guiarte en el camino para usar los lenguajes de programación correctos, escribir un código desafiante, desarrollar ese sexto sentido para saber qué preguntas hacer para identificar los problemas … aprenderás haciendo No es muy diferente a la mayoría de las tareas en la vida.

Para convertirse en un ingeniero de software, solo necesita conocimientos teóricos, habilidades blandas y práctica de codificación.

  • Para desarrollar conocimiento teórico, lea la Serie de libros clásicos de ACM.
  • Si ya ha trabajado en una oficina durante algunos años, sus habilidades blandas probablemente sean lo suficientemente fuertes. De lo contrario, Cómo ganar amigos e influir en las personas sigue siendo el mejor libro para leer.
  • Para practicar la codificación, trabaje a través del plan de estudios de código abierto gratuito de 1.600 horas de Free Code Camp.

Una vez que haya desarrollado estas habilidades, trabaje a través de Cracking the Coding Interview para prepararse para sus entrevistas.

Use AngelList y LinkedIn para encontrar personas que conozca que trabajen en empresas en las que le gustaría trabajar, y pídales que le presenten un gerente de contratación.

No necesitas volver a la universidad o pasar por un campo de entrenamiento para convertirte en ingeniero de software. Una vez que obtenga un trabajo de ingeniería de software, se convertirá en ingeniero de software.

Primero debemos definir “qué es un ingeniero de software exitoso” para usted:
(Como mencionaste que el dinero no te concierne, no lo incluiré)

  • ¿Trabajando en una empresa grande y de prestigio?
  • ¿Ser el líder en proyectos de software importantes?
  • ¿Ser un experto reconocido en algún campo?
  • Desarrollar proyectos personales impresionantes?
  • ¿Algo más?

Todas estas definiciones de éxito tienen algo en común; Trabajando con gente.
No importa si desea ser un arquitecto de software sénior en una gran empresa o si desea desarrollar proyectos personales y ser un experto en algo, si desea tener éxito tendrá que tratar con el resto del mundo.

Por lo tanto, se trata de la actitud y la pasión más que del conocimiento, no me malinterpretes, necesitas conocimiento para tener éxito, pero no puedes ignorar las “habilidades blandas”.

Esté dispuesto a trabajar en equipo, escuche a los demás, sea amable, piense en resultados beneficiosos para todos, nunca deje de aprender, sea paciente con las personas y enséñeles en lugar de culparlos, cuide su cuerpo.

Perdón por desviarme del tema, pero tuve que mencionar esto, podrías ser un genio, pero no irás a ningún lado si nadie quiere trabajar contigo.

Si quieres ir rápido, ve solo. Si quieres ir lejos, ve juntos.

Volviendo al punto, puedo decir que busca una respuesta más cercana a “¿Ser un experto reconocido en algún campo?”, Así que enumeraré una serie de pasos que lo ayudarán a alcanzar su objetivo.

Primero, debe dominar los conceptos básicos de la ingeniería de software:

  • Diagramas de flujo
  • Estructuras de datos
  • Algoritmos de clasificación
  • Algoritmos de búsqueda
  • Expresiones regulares.
  • Notación Big-O
  • álgebra de Boole

Entonces necesitará conocimientos de alto nivel , como:

  • Patrones de diseño
  • UML
  • Patrones de arquitectura.
  • Programación orientada a objetos
  • Conocimientos básicos de los sistemas operativos.
  • Capas de red y función
  • Examen de la unidad
  • Integración continua
  • Control de versiones (SVN, Git, Mercurial)
  • Patrones arquitectónicos (SOA, MVC, etc.)
  • Mejores prácticas de programación
    Se trata de cómo escribir un buen código, nombrar variables, funciones, comentarios, etc.
  • Desarrollo ágil (SCRUM por ejemplo)

Si sabe eso, no importa en qué tecnología esté trabajando o en qué idioma esté utilizando, será reconocido como un excelente ingeniero de software y dominará fácilmente cada idioma, marco o tecnología que se crucen en su camino.

Espero que mi respuesta sea de alguna utilidad.

Te recomendaré algunos libros sobre las mejores prácticas de programación que cambiaron mi vida:

Code Complete: A Practical Handbook of Software Construction, Second Edition: Steve McConnell: 0790145196705: Amazon.com: Books

Código limpio: Un manual de artesanía de software ágil: Robert C. Martin: 9780132350884: Amazon.com: Libros

  1. Obtenga una pasantía (si aún está en la universidad): le enseñará las mejores prácticas de la industria del software
  2. Lea el código de otras personas y las Revisiones de códigos : pídale a alguien que sea un buen ingeniero que revise su código, esto le indicará dónde puede mejorar. Comente las revisiones de códigos de otras personas, que requerirán que comprenda lo que la otra persona está tratando de construir y su pensamiento detrás de abordar un problema de una manera específica. El código que es fácil de leer / revisar es un buen código.
  3. Patrones de diseño : le brindarán las herramientas para escribir código simple y reutilizable, utilizando construcciones que resuelvan desafíos de diseño específicos y que se utilicen ampliamente.
  4. Contribuya al software de código abierto : no solo lo mantendrá al tanto de los marcos y tecnologías más recientes, sino que también le permitirá trabajar con ingenieros en diferentes niveles de experiencia
  5. Cree algo de lo que esté orgulloso : no hay sustituto para construir un proyecto desde cero. También le da la confianza que necesitará para ser un gran ingeniero.
  6. Aprenda sobre las nuevas tecnologías : aprender sobre las nuevas tecnologías y por qué se crearon le dará a conocer los problemas comunes en la industria y cómo se resuelven. No necesariamente necesita aprender las nuevas tecnologías (hay tantas por ahí), sino conocer algunas que se usan comúnmente y por qué las personas las usan (o no).
  7. Lea los documentos de Google : Google publica muchos documentos que describen sus avances recientes. Su tecnología a menudo es novedosa para el resto de la industria porque Google trabaja a una escala que es mayor que la mayoría, si no todas, las compañías de software, que tiene sus propios desafíos. Comprender estos documentos le dará una idea de los problemas del software de escalado.

¡Escribir un gran software es un arte! Si vamos a comparar eso con una ocupación, lo compararía con un maestro escultor / carpintero / fabricante de vidrio que construyó catedrales. Si observamos de cerca las complejidades del trabajo que implican estructuras tan hermosas y gigantescas, puede darse cuenta de la profundidad de sus conocimientos en un área de trabajo. Similar es el caso de un gran ingeniero de software (no estoy hablando de la cantidad de personal que se muestra en la industria de outsourcing de software), como John Carmack, Dennis Ritchie y todos son artesanos.

Se necesitan años de aprendizaje para aprender pacientemente los bloques de construcción y aprender a doblarlos de acuerdo con su voluntad para hacer una hermosa estructura. ¡Tal paciencia y aprendizaje se está alejando lentamente del mundo tecnológico actual!

Para convertirse en un ingeniero de primera clase, algunas cualidades que necesita son:

  1. Fundamento matemático sólido: este es un elemento esencial para todas las ciencias, especialmente la informática. Se trata de 1 y 0.
  2. Debe tener fluidez en su idioma de elección, sea lo que sea C, C ++, Java ……
  3. Desarrolle habilidades de implementación sólidas: problemas simples y problemas complejos.
  4. Fundamentos sólidos en DS y Algoritmos (teóricos y prácticos): esto solo se puede lograr mediante la práctica y mucho trabajo duro. Muchas personas lo guiarán para obtener un trabajo fácil aprendiendo esto y aquello, etc. No vale la pena a menos que aprenda estos fundamentos muy bien. Puedes convertirte en ingeniero, pero no en uno bueno.
  5. Empatía: su conocimiento no significa que otros sean incompetentes. Simplemente aprendiste mejor, así que guíalos o ayúdalos, no los desprecies.
  6. Aliente a otros a convertirse en un software Artesano: compartir y difundir conocimientos lo ayuda a aprender y dominar mejor el tema. También es una forma de conseguir aprendices para ti mismo y convertirte en un maestro artesano.
  7. Aprende continuamente: mejora y evoluciona.
  8. Finalmente, contribuya al código abierto: ¡ayuda dejar un legado!

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!

More Interesting

Soy un estudiante de primer año en la universidad y una especialización en informática. ¿Puedo obtener pasantías de ingeniería de software en el verano justo después de mi primer año? ¿Qué habilidades necesito? ¿Y cuándo debo comenzar a solicitar pasantías?

¿Cómo lidian los ingenieros de software con los requisitos que se arrastran los gerentes que desean solo una característica más nuevamente?

¿Necesitas saber codificación antes de la universidad para convertirte en ingeniero de software?

Recientemente solicité a Apple una pasantía de desarrollo de software. ¿Cuándo puedo esperar recibir una respuesta?

¿Qué tan fácil o difícil es cambiar compañías como Google, Microsoft, etc. por un ingeniero de software en los Estados Unidos?

Soy un ingeniero de software. ¿Cuál es mi alcance en la investigación espacial?

Como estudiante de primer año en la universidad que actualmente está interesado (pero no está seguro) en seguir una carrera académica, ¿es mejor realizar una investigación durante el verano o realizar una pasantía en una de las principales compañías de software?

¿No estoy trabajando lo suficiente o mi empleador está estableciendo plazos irrazonables?

¿Qué puedo hacer con mi BS en Informática si no puedo ser contratado como desarrollador de software?

¿Cuáles son los roles de desarrollador de software y desarrollador de Oracle?

¿Puedo hacerme un ingeniero de software sin matemáticas?

Cómo convertirse en un buen ingeniero informático

¿Cuáles son algunas de las cualidades o habilidades básicas que necesita para ser bueno en la automatización de pruebas?

Como gerente de contratación de un ingeniero de software, ¿cree que los candidatos con trabajos a tiempo completo son más competitivos que los candidatos por contrato?

¿Vale la pena cambiar una carrera de programador de software con más de 6 años de experiencia a Business Analytics?