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

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 repasar 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 desarrollar habilidades de propósito más generales. Dicho esto, pasar tiempo haciendo proyectos en desarrollo web es muy valioso, pero te beneficiarás jugando con unos cuantos backends y frontends diferentes, por ejemplo,

  • Backends: Ruby on Rails, Python + Django, Node + Express.
  • Frontends: “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 sentirse cómodo dentro de él. Es probable que puedas encontrar algún curso de Coursera para esto.

Recomendaría estudiar bases de datos, aunque no es necesario que sea demasiado formal, solo lo suficiente para sentirse cómodo dibujando tablas para una base de datos, explicando claves y claves externas y algunas combinaciones.

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

Por último, y con menor importancia, recomiendo estudiar 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 de tarjetas gráficas / CUDA)

Mientras aprende lo anterior, debería tener la oportunidad de jugar con algunos idiomas, al menos dos o tres de: Python, C, Java, JavaScript y quizás un par de otros. La capacidad de escribir cómodamente en al menos dos de estos es esencial y vale la pena tenerlos en cuenta al estudiar lo anterior.

En términos de libros para leer, recomiendo:

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

Finalmente, en la parte inferior de la lista, pero bueno si le interesa, puede aprender sobre seguridad informática (específicamente funciones hash, cifrados simétricos, cifrados asimétricos y RSA y firmas digitales), arquitectura informática y compiladores, pero francamente no me preocuparía. 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 algo de estructura a sus estudios, ya que están trabajando en proyectos con amigos para proporcionar una función de forzamiento.

¡Buena suerte!

Puede consultar estos consejos en freelancer.com:

1. No te vendas con una sola especialización.

Los días pasaron donde los desarrolladores intentaron 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 debe tener conocimientos en varios idiomas. Sí, las personas tienen preferencias y experiencia en varios campos, pero es imperativo tomar esas especificaciones como puntos fuertes 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. Toma 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 identificar problemas y prever soluciones inteligentes. Un algoritmo es básicamente un problema lógico, y un desarrollador debe poder explicárselo a un experto sin importar la complejidad. El desarrollador también debe poder diagramar el problema en un tablero. Los grandes desarrolladores tienen la capacidad de entender lenguajes, marcos y una variedad de herramientas de programación, pero cualquier problema debe ser resuelto en el resumen. A los desarrolladores que han perfeccionado las habilidades básicas en la programación les resulta 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 utilizan funciones de primera clase, pueden aprender fácilmente un idioma tras otro.

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

Los marcos son temporales independientemente de lo populares que sean, como Ruby on Rails. Tal vez White Rails sea 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 pueden ahorrar tiempo y ofrecer la funcionalidad adecuada. Si un desarrollador toma tiempo para aprender Ruby o cualquier otro lenguaje subyacente, tendrá un tiempo fácil para girar entre varios marcos.

4. Lanzamiento a diferentes niveles

Ha habido un debate sobre si uno todavía puede convertirse en un desarrollador de software de pila completa. La creciente ubicuidad de Elastic Beanstalk de Amazon y Heroku, ambos de los cuales son Platform as a Service (PaaS), ha hecho una clara distinción entre el servidor y el lado del cliente. Los especialistas en desarrollo de software ya no manejan tareas como el aprovisionamiento de capacidad para un nuevo servidor, ya que se pueden realizar de manera automatizada a través de servicios en la nube. Un desarrollador que está familiarizado con unos pocos servicios en la nube está mejor situado. Los desarrolladores no deben usar la Plataforma como un servicio como excusa para no entender los conceptos básicos del kernel del sistema operativo. No es suficiente decir que un programa automatizado no se puede romper. 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 un área determinada de experiencia, esto también implica apostar hacia dónde se dirige la tecnología. Se dijo que una persona que buscaba convertirse en un desarrollador de mainframe hace una década era miope. Del mismo modo, cualquier persona que trabaje duro para convertirse en administrador de sistemas se dirige a un callejón sin salida en su carrera. Como desarrollador, analice críticamente hacia dónde se dirige la tecnología. Existen programas y lenguajes específicos que son muy buscados en el mundo actual. Swift es uno de ellos, pero a medida que las nuevas aplicaciones siguen 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 una variedad de lenguajes multiplataforma.

6. practica todos los dias

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

7. Hacer uso de herramientas utilizadas por grandes desarrolladores.

El 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 le califica de acuerdo con la puntuación que obtiene del cuestionario u otra actividad interactiva. No estarás trabajando así en el mundo real. Es importante aprender como cualquier otro desarrollador, usando herramientas reales. Esto facilita el aprendizaje de cualquier nueva habilidad en la programación y facilita la transición. Puede ser difícil usar las herramientas utilizadas por los desarrolladores reales si eres un principiante, pero debes perseverar. Los programas en línea como Learn Verified le 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 de grupo y trabajo en su terminal. Puedes adaptarte para convertirte en un gran desarrollador si los agregas a tus manuales de capacitación.

8. Estudiar el código de otro desarrollador.

Si aspira a ser un gran desarrollador, busque formas de aprender el código de otras personas. Navega por los repositorios de GitHub y lee 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 se escribe y cómo funciona. Aprender el código de otras personas también es fundamental cuando se trata de la depuración, ya que se le pedirá que comprenda el código erróneo.

Aunque muchas personas pasan por alto esta habilidad, es beneficioso ver qué piensan los grandes desarrolladores y cómo escriben el código. No solo hojear el código. Sumérgete en él, aprende lo que debes y no debes hacer, recrearlo si es posible y entiende la funcionalidad. Intente aplicar ingeniería inversa a un código determinado y comprenderá cómo crear el suyo propio.

9. Pertenecer a una comunidad

Si está comenzando a perfeccionar sus habilidades como desarrollador de software, es importante encontrar una comunidad con la que aprender. Si te rodeas de personas con ideas afines, tu sistema de apoyo es amplio y podrás recurrir a ellos cuando te quedes atascado. Es posible perder motivación a medida que desarrolla el código, especialmente si no está funcionando. 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ó a un escritor famoso: “¿Cómo puedo convertirme en escritor?” La respuesta fue: si realmente quisieras ser escritor, no preguntarías, estarías escribiendo y nada podría impedirte hacerlo. Lo haces porque no puedes imaginar hacer otra cosa.

Dicho esto, aprende de los grandes. Lea “Codificadores en el trabajo” para diferentes perspectivas. Aprende la teoría, fundate en lo básico. Leer leer leer. Entonces construye cosas. Piense en lo que quiere construir y construirlo. Entonces constrúyelo de nuevo. Aplica las teorías, toma lo que aprendiste y construye una segunda y tercera vez. Luego pregúntate, si pudieras volver a empezar, ¿qué harías diferente? Entonces vuelve a empezar y hazlo de esa manera.

Conoce a otros ingenieros de software. Unirse a un grupo de usuarios locales. O empieza uno. Colaborar.

Aprende las herramientas. Estudia los IDE como un pintor estudiaría los pinceles.

Explorar. Encuentra tu camino. Configura tu entorno de trabajo ideal y accede a él. Si estás haciendo la pregunta, probablemente ya estás en camino. ¡Buena suerte!

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

Si bien este lema 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 un ingeniero de software, se ha convertido en una habilidad muy lucrativa para aprender y en una carrera popular para muchos. Los salarios de ingeniería de software actualmente tienen una tendencia de $ 169k / año, según YouWorth.

Salarios de Ingeniería de Software en San Francisco, CA

Entonces, ¿qué cosas debes hacer?

1. Siempre sé un estudiante .

Estás trabajando en un campo que está cambiando, creciendo, mutando constantemente. DEBES seguir el ritmo o te arriesgas a quedarte atrás. No creas ansiedad por conocer todos los idiomas, sino que obtienes un conocimiento práctico de muchos idiomas. Cuando salen cosas nuevas, es hora de volver a ser un estudiante. Lee, estudia, aprende, y nunca te detengas. Obviamente, cuantos más idiomas puedas dominar, mejor te volverás!

2. Crea tus propios proyectos .

Siempre tenga un ajetreo lateral / proyecto en marcha. Usa lo que sabes para construir cosas. Estos tipos de proyectos, los que te apasionan, son donde aprendes más. ¿Por qué? Porque te afecta directamente – ¡Es tu bebé! Probablemente esto no sea necesario para muchos programadores, pero conozco un poco de ese código de 9-5 y eso es todo. Es posible que esas personas puedan mantener un trabajo, pero les será más difícil crecer en su carrera.

3. Tener 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, realmente no funciona, ¿verdad? Esto absolutamente evitará que te quemas también.

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

Los principios generales son más bienvenidos.

En este post y episodio de podcast, transmito algunas filosofías sobre la ingeniería de software moderna. Estas son fuertes opiniones débilmente sostenidas. Acojo con satisfacción el debate y la discusión.

1. No tienes que probarte a ti mismo.

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

Esto no es un axioma.

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

“Después de que hayas pasado suficiente tiempo en el primer nivel de la mina intelectual, te haremos un SDE 2, en el que puedes hacer refactorización ligeramente superior a $ 150ka al año, lo que hará que la compañía gigante tenga $ 5 millones”.

Esto es lo que se llama un arbitraje.

2. Usted no es una mercancía.

Tenemos una mentalidad de línea de ensamblaje que queda de la era industrial. El software es más bien una artesanía. No creas que eres un diente reemplazable. No crea en el proceso de entrevistas de talla única con problemas de pizarra. Estos sirven para eliminar su individualidad y hacer que se sienta como un trabajador de la línea de ensamblaje.

3. La ingeniería de software es un arte y una ciencia, pero rara vez ambas cosas a la vez.

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

4. Tú no eres tu trabajo.

Aprendí esto muy temprano cuando jugaba al poker cuando tuve que dejar esa carrera, y había unido el póker a mi identidad. Si haces que tu trabajo sea lo mismo que lo que eres, entonces tu autoestima se define por aquellos que te juzgan en tu trabajo.

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

5. El mundo es un sistema distribuido.

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

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

Una analogía decente es la hipótesis de 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 todos los programadores de sistemas distribuidos.

Las fallas de cola larga pueden 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. De manera similar, si un escenario de la vida real presenta una pequeña probabilidad de un gran riesgo a la baja, debe tomar una gran precaución. Si alguien te ofrece tirar un dado con 1000 lados, y si sacas un 1-999, obtienes $ 100 millones, pero si sacas un 1000, te cortan la cabeza, el alza está limitada, pero el inconveniente no es .

Puedo estimar cuánta $ 100 millones mejorarán mi vida, pero es imposible cuantificar qué tan 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 requiere una gran cantidad de reflexión y cálculos profundos.

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: “Me estoy postulando a un trabajo con 1000 postulantes, por lo que las posibilidades de conseguirlo son bastante bajas”. Eso es considerar un juego de habilidad como un juego de suerte, y si no lo hace. Optimice con mucha preparación y duerma para esa entrevista, entonces es su culpa.

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

“Los hombres bajos 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 adora hablar de suerte porque nos da una excusa cuando perdemos. Eso no quiere decir que no hay suerte en el mundo, muchas personas tienen mala suerte. Pero si estás leyendo esto, es probable que estés en el .01% más afortunado.

Hay un largo argumento filosófico sobre si controlamos o no nuestro propio destino. En realidad, en realidad no importa.

Debemos asumir que estamos en 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.

Por eso a nadie le importan sus ideas, les importa ver su 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, por lo general puedes elegir los dos. 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 fructificar la planificación a largo plazo, es difícil ver el punto.

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

Tienes que averiguar qué creer por ti mismo.

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

Hay una escena de The Big Short donde Mark Baum, interpretado por Steve Carrell, se encuentra frente a los banqueros y dice que “el mundo está lleno de fraudes, 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, encuentras que estos sistemas tienen capas de engaño y mentiras: la ingeniería de software es la misma.

Por ejemplo, si llegas a un lugar que te ofrezca muchos beneficios como el almuerzo gratis o los masajes para la espalda, entiende que lo están haciendo porque te están pagando menos.

Si está obteniendo un salario de $ 130k, $ 70k en opciones de compra en acciones, almuerzo gratis y lavandería gratis, eso puede parecer una buena oferta, pero ¿qué dice eso de cuánto dinero está ganando la compañía?

Según Business Insider:

  1. Manzana: $ 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 que trabajara allí)

Esto ni siquiera está sesgado hacia la cantidad de ingenieros .

La economía del software no es intuitiva.

Lo que está loco por el software es que se necesitan $ 0 para hacer nuevas copias de un producto que solo debe escribirse una vez. Esto contrasta con la línea de ensamblaje donde cada nueva unidad requiere un nuevo esfuerzo y fricción humana para reproducirse. Con el software, solo la primera unidad requiere una 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 lograr este arbitraje de los 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í misma”.

-Noam Chomsky

Hay una narrativa de un programador que es incapaz de hacer nada, excepto la programación. Algunos programadores hablan de esto con orgullo, diciendo cosas como: “Soy solo un ingeniero, no quiero pensar en el lado comercial de las cosas, no entiendo el lado comercial de las cosas”.

Los ingenieros se han dejado seducir por la perspectiva del industrial de que no podemos dirigirnos, no podemos evaluar el costo de oportunidad y no entendemos el mercado en su totalidad.

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 estrecho.

9. No eres tu credencial ni tu pasado.

Si empezaste 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 el abandono de la escuela y la programación independiente, y sobre cómo ha aprendido más rápido desde que abandonó el proceso educativo de gran seguimiento.

En el episodio de Seth Godin, habló sobre el sistema educativo depreciado y el declive de un título.

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

10. Como ingeniero de software, puede tomar riesgos de carrera de manera agresiva porque su desventaja está fundamentalmente limitada.

Deberías estar saltando 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 remodelada por el software. Se está generando masiva oportunidad económica:

  • AWS (aún joven) toma los costos de inicio de $ 50k + a ~ $ 0
  • El móvil (aún joven) coloca 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 completamente 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 espurias técnicas.

No te creas a los capitalistas de riesgo que están despotricando y delirando que defienden valoraciones más bajas y gritan sobre una burbuja. No le creas a los antitecnólogos de alta tecnología que se burlan de sus lattes.

Según cualquier proyección lógica, la alta demanda de ingenieros no se disipará pronto … a menos que toda la economía se derrumbe en una catástrofe espantosa de cisnes negros, en cuyo caso es probable que su trabajo actual se evapore de todos modos.

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

Si está buscando una carrera en el sector de la ciencia y la tecnología, la ingeniería de software es una opción emocionante. De acuerdo con el Informe de Calificaciones de Trabajos 2016 de CareerCast de los 200 trabajos principales en los EE. UU., La ingeniería de software logra el puesto número siete. Está catalogado como una profesión con una alta probabilidad de crecimiento, un entorno de trabajo agradable y una escala salarial superior a la media.

Estas son algunas cosas que creo que definitivamente debes saber:


¿Qué hace exactamente un ingeniero de software?
De acuerdo con TryEngineering, los ingenieros de software “aplican los principios y técnicas de ciencias de la computación, ingeniería y 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 en el desarrollo de algoritmos y en el análisis y solución de problemas de programación que en la escritura de código. Están involucrados en el diseño y desarrollo de todo tipo de software.

Por definición, los ingenieros de software aplican los 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 típica del trabajo para un ingeniero de software incluye:

  • Experiencia, logros y experiencia en el uso de herramientas y proyectos de código abierto.
  • Competencia en diseño de patrones, pruebas automatizadas y sistemas de tolerancia a fallos.
  • Capacidad para crear y mantener la arquitectura de TI, los almacenes de datos a gran escala y los sistemas basados ​​en la nube.
  • Capacidad para crear canales 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 de tecnología necesitan al menos una 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: mientras que las habilidades en la mayoría de la demanda 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 de diseño y los marcos, tener capacidades de refactorización y tener una pasión por el código.

Según las recientes publicaciones de trabajo, las principales empresas de tecnología esperan que sus ingenieros de software sean competentes en:

  • 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 un ingeniero de software

Cada vez que quiero aprender un nuevo idioma, me pongo un proyecto objetivo. Así que crearé una aplicación que cubra los aspectos que quiero aprender, por ejemplo, base de datos, gráficos, presentación, concurrencia. Te recomiendo que establezcas un objetivo relativamente ambicioso que extienda tu ingenio y te obligue a buscar respuestas. El proyecto puede ser tan simple como un administrador de tiempo personal (si eres un principiante completo) o tan complejo como un sistema de negociación de acciones. Al lograr su proyecto objetivo, irá mucho más allá del simple aprendizaje de 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., debería aprender algunos lenguajes de scripting 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ás algunas habilidades de base de datos. Aprenda sobre normalización, SQL y buenas prácticas de base de datos como mínimo absoluto. Hay muchos productos de base de datos gratuitos o de versión limitada que te 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 estoy analizando una empresa, siempre me dirijo directamente a la gente de la base de datos (y dejo a los chicos y chicas funcionales / orientados a los procesos a las reuniones del almuerzo).

A continuación, debe familiarizarse con las metodologías de desarrollo de software y el control de versiones, ya que no puede escapar a estos dos aspectos importantes del desarrollo de software en el mundo real. La metodología más popular es conocida como ágil. 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 de sistemas / componentes / integración hasta el control del ciclo de vida del producto. Nuevamente, varios de estos paquetes son gratuitos o tienen una versión limitada que puede utilizar para familiarizarse.

Por último, está todo el tema de los requisitos y 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 escribas, leas y desarrolles estos documentos, más altos son los roles que te pueden otorgar. Están muy vinculados con las metodologías, pero en realidad las considero una habilidad específica.

Déjame tratar de 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 caminos”, “excelente desarrollador de barcos”, “excelente desarrollador de tanques”, “excelente desarrollador de aviones” o algo así?

La masa está mal informada 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 / computadora portátil y la gente piensa “wow”. Una vez más, los medios de comunicación que difunden información muy errónea, como algunos niños de 9 años, han desarrollado un software increíble o han pirateado un sitio web, algunos ingenieros de software han creado una aplicación increíble. 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 dejarte pensar a través de él.

Ahora, vamos a centrarnos en el desarrollo del término. 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 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 el que aprendes cuál es el problema que debe resolverse, cuál es su solución y luego cuáles son las herramientas necesarias para resolverlo, te conviertes en un buen desarrollador de software. Cuando sabe cómo gestionar cada aspecto del desarrollo de software en un tiempo determinado, es un excelente desarrollador de software. Excelente programador es otra cosa sin embargo. Allí se enfoca solo en tres cosas “El código de software como 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”.

¿Qué debes hacer?

Aprende y aprende y aprende.

¿Qué aprender?

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

Espero haber podido darte una idea.

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

Abordaré un poco la táctica de la educación ya que recientemente he estado en medio de las cosas.

Me parece que hay dos formas entrelazadas para los mejores trabajos de ingeniería. La primera es la ruta tradicional de la educación. Muchas de las mejores compañías contratan el nivel de entrada solo de las mejores escuelas, y muchas hacen que la educación sea su primera prueba en la selección de currículums. ¿Por qué? No vale la pena dedicar tiempo a analizar cientos de currículos del Podunk Community College en una feria de carreras con la esperanza de encontrar un ingeniero potencialmente brillante. Vas a tener una gran ventaja con un título de CS de una escuela de primer nivel. En Canadá, esa es la Universidad de Waterloo, y entiendo que es uno de los mejores programas de ingeniería del mundo. Además, a los nuevos empleados (especialmente en compañías grandes) a menudo se les ofrece más dinero solo por el nombre de marca de la escuela.
Dicho esto, si tus marcas no son suficientes, no te preocupes. ¡Un título de CS de un programa de ingeniería menos prestigioso o de una escuela pequeñ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 tan duro como puedas ahora. Baja la consola del juego y levanta el teclado. Debes centrarte en dos cosas:

  • Aprender a escribir un gran código y simplemente jugar con las cosas.
  • Aprendiendo matemáticas y obteniendo 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 la universidad si no la quieres. Si tiene un gran blog, una serie de proyectos asombrosos, aplicaciones en las tiendas, y es visible en línea, y conoce a algunas personas, existe una gran posibilidad de que lo busque. Todavía es absolutamente esencial conocer sus estructuras de datos y algoritmos básicos, por lo que si no obtiene un título de CS de 4 años, sería prudente saber cuándo realizar la primera búsqueda y el gran tiempo de ejecución de Quicksort. Coursera e iTunes U tienen muchos cursos de CS que puedes tomar para repasar los conceptos básicos en lugar de la educación tradicional.

Combine ambos: una gran educación fundamental (sea lo 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 popular 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 lo que encuentre nuevo, aunque esté disponible en oracle site / microsoft site, no le dé exclusiones y no dude en hacerlo.
  • Regístrese en el sitio de control de calidad como quora, Stack Overflow y comience a hacer / responder preguntas. Suscríbase a todas las tecnologías que conozca (no necesita tener experiencia en esa tecnología).
  • Familiarizarse con las herramientas. Si siente que se puede automatizar cualquier patrón, primero realice una búsqueda y luego comience a desarrollarlo, principalmente puede existir en Google. Trate de encontrarlos y utilizarlos (por ejemplo, LogExpert, WinMerge, JALOPY – Jalopy, la herramienta de formato de código fuente, etc.). Pero asegúrese de usar 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 por su trabajo, porque es la cara que mostramos a las personas no técnicas. No importa el uso de ese documento.
  • Cree algunos proyectos en Git Hub, etc., trate de usar estándares en su proyecto. Puedes comenzar con un proyecto simple, pero no olvides mantener los estándares.
  • Escribiendo y aprendiendo atajos. Parece una tontería, 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

  • Trate de comunicarse en inglés, al menos durante las reuniones.
  • Haga un hábito de escribir minutos de reuniones y acciones en reuniones / conferencias.
  • Aprende y sigue algunas etiquetas sobre el uso, el uso móvil y la alimentación.
  • Controla tus emociones y sentimientos personales.

Todos estos son comunes para un ingeniero de software independientemente de su perfil, ya sea
Son testers, desarrolladores y ejecutivos de soporte. Y uno puede encontrar necesidades específicas en su propio perfil y trabajar en ello.

Para ser un buen desarrollador de software, necesitas:

1. Mente analítica

  • No hay una definición estricta de una mente analítica. Una cosa es segura: si tiene una mente analítica, puede 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 la 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 global de un software.

  • Crear software es como jugar al ajedrez: para ganar necesitas predecir unos cuantos movimientos por delante. No solo debe mirar la presencia, sino también el futuro durante la programación. Para ser un buen desarrollador de software, no solo puede centrarse en una pequeña parte del 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.
  • Necesitas entender el impacto de tu pequeña pieza en general. Con todo, simplemente necesitas ver la imagen más grande.

3. Enfoque orientado al negocio para el desarrollo de software.

  • En mi definición de buen desarrollador de software, no es suficiente tener una orientación técnica. Puede ser un buen programador y su código puede ser de una calidad realmente alta, pero aún así no logrará comprender y satisfacer las necesidades de sus clientes.
  • Si no está orientado a los negocios, puede causar muchos problemas: malentendidos, falta de capacidad de uso 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 problemas de negocios en soluciones técnicas.
  • La capacidad de cooperar y entender a personas de cosas no técnicas.

4. El entusiasmo 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 ideas, ideas, conocimientos y experiencias puede aumentar la eficiencia y la calidad de la solución.
  • Un desarrollador que no esté ansioso o 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 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 compañías 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 ser considerado un buen desarrollador. Pero somos. Hoy en día, el mundo de TI necesita buenos desarrolladores de software Agile que puedan analizar problemas, verlos desde una perspectiva más amplia, orientados a los negocios y ansiosos por trabajar en equipo. Sin ellos, los proyectos de TI no se podrían manejar mediante la metodología ágil. El manifiesto ágil se convertiría en un conjunto de principios insignificantes, que nadie utilizará.

Ya había respondido antes. Si ha pensado seriamente en convertirse en ingeniero de software, probablemente esté interesado en aprender más sobre cómo trabajar como ingeniero de software con un título en informática. Al aprender más acerca de las vías educativas que lo ayudarán a seguir una carrera como ingeniero de software, puede tomar decisiones informadas sobre qué especialidad seleccionar cuando se inscriba en la universidad.

Convertirse en un ingeniero de software

Si ha decidido que desea convertirse en un ingeniero de software, es probable que esté interesado en conocer qué caminos educativos le 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 al obtener 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 decide convertirse en ingeniero de software, debe pensar de manera crítica 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 ciencias de la computación será práctico e ideal. Obtener el grado 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 da prioridad a la creación de aplicaciones empresariales, sería ventajoso obtener un título en Sistemas de información de gestión. 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 grado de CS que involucra el dominio de 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 hacer una investigación sobre las compañías para las que planea trabajar. Es frecuente que los empleadores enumeren 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 y 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 una licenciatura en informática o en gestión de sistemas de información es común y recomendable.

TODO LO MEJOR

Gracias por la A2A Utkarsh. Todavía no soy un buen ingeniero de software si me preguntas qué debo haber hecho en la universidad para convertirme en un buen ingeniero de software, te lo puedo decir. Y la respuesta sería:

1. Aprende a codificar en un idioma primero.
2. Haz algo tangible con eso, la aplicación web, la aplicación móvil, cualquier aplicación de escritorio.
3. Avance al siguiente nivel y lea sobre las tendencias actuales de la industria y lo que está de moda.
4. Escoge algo que te interese y luego codifica para eso.
5. Trabaje con sus amigos / profesores para obtener un trabajo de investigación sobre ese tema.
6. Aprende algo mientras tienes tiempo que no está relacionado con la ingeniería de software pero que te ayudará a largo plazo: habilidades de administración, finanzas, economía. La expansión de su dominio siempre le ayuda a largo plazo como ingeniero de software y como empleado en su futura empresa.
7. Lo último es que si realmente disfrutas siendo ingeniero de software, nunca lo dejes porque tus padres te están obligando a obtener un 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 cinematográfico, muy pronto se dará cuenta de que pasará la mayor parte del tiempo trabajando en su trabajo y, si no le gusta, no puede ser bueno en eso.

¡Así que 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 el manejo de expertos en MSCS que no pudieron relacionarse con sus compañeros 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; Dedico muchas horas todos los días para ayudar a los miembros de mi personal a resolver problemas, de modo que cuando los propios empleados 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, sé honesto sobre lo bueno y lo malo. Elogie a sus colegas, dé crédito a los demás. No haga el 80% de la programación y transfiera las pruebas básicas a sus compañeros simplemente porque es demasiado importante para eso. Sí, yo también he tenido 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 tal vez no tenga el cerebro para hacerlo. Palabras duras y esto no es (solo) un problema de inteligencia … La paciencia, la persistencia y la 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 siempre que surjan las oportunidades. Siempre quiero que mi jefe hable bien de mí a su SO … todos hablan sobre su personal / compañeros de trabajo en casa, así que asegúrese de que su jefe diga “Wow, estoy en casa temprano y no trabajo durante el fin de semana porque John resolvió el problema de nuestros clientes y desplegará el nuevo software para el lunes! “.

Entonces, después de esos 10 años, tendrá muchos mentores que lo guiarán en el uso de los lenguajes de programación correctos, redactó un código desafiante, desarrolló el sexto sentido para saber qué preguntas hacer para identificar los problemas … Aprenderás haciendo. No 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 construir el conocimiento teórico, lea la Serie de Libros Clásicos de ACM.
  • Si ya has trabajado en un trabajo de oficina durante algunos años, tus habilidades sociales probablemente sean lo suficientemente fuertes. De lo contrario, Cómo ganar amigos e influenciar a 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 en Cracking the Coding Interview para prepararse para sus entrevistas.

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

No necesitas volver a la universidad ni a través de un bootcamp para convertirte en un ingeniero de software. Una vez que obtenga un trabajo de ingeniería de software, se convertirá en un ingeniero de software.

La pregunta más importante es, “POR QUÉ” un ingeniero de software.
¿Ha elegido su especialidad en informática que le fascina? O ¿Está usted enamorado de la cultura corporativa y desea ser un pez gordo algún día? O ¿Porque todos dicen que es el campo más brillante y obtendrás más oportunidades de trabajo? O la mejor: quieres iniciar una startup.
Si su razón es cualquiera de las anteriores, le pido que verifique sus prioridades de vida. Descubre lo que te apasiona. Luego, descubre maneras de lograr 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, entonces este es el motivo equivocado para elegir su sueño. Más bien enfóquese 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 vida de las personas que me rodean, me animo más a hacer más bien.

Soy un desarrollador web freelance. Hago sitios web para ganarme la vida. Además, aliento a las personas a encontrar su pasión y, si es posible, a ayudarlos a comenzar a trabajar de manera independiente. Si alguna vez vienes a Bangalore, entonces puedes contactarme con respecto a esto. También organizo una reunión de freelancer aquí: Desarrolladores web independientes de Bangalore
Así que siéntete libre de llegar cuando quieras, pero lo más importante es seguir tu pasión.
Te deseo lo mejor.

  1. Tu cerebro debe estar conectado de forma extraña para que algo como esto tenga sentido para ti: if (reg_exp (‘^ [A-Z0-9 ._% + -] {1,64} @ (?: [A- Z0-9 -] {1,63} \.) {1,125} [AZ] {2,63} $ ‘, correo electrónico) === VERDADERO) {// 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 centrarse en un problema para solucionar los problemas de manera efectiva cuando surjan.
  4. Sé lo suficientemente humilde para aprender de tus compañeros.
  5. Sea lo suficientemente hábil en su oficio para que pueda compartir las mejores prácticas y los buenos patrones de diseño.
  6. Comprender que la TI es un panorama en constante cambio. La Blackberry que es la tecnología de vanguardia de hoy puede convertirse en forraje de canon como consecuencia del iPhone del mañana. Esta es una espada de dos filos: mantiene la TI fresca e interesante; sin embargo, se arriesga a elegir gastar tiempo aprendiendo una tecnología, un marco, etc. que termina por marchitarse en la vid.
  7. Sepa que esto lo mantendrá despierto por la noche:

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 importantes proyectos de software?
  • ¿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 empresa grande o si desea desarrollar proyectos personales y ser un experto en algo, si quiere tener éxito, tendrá que tratar con el resto del mundo.

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

Esté dispuesto a trabajar en equipo, escuchar a los demás, ser amable, pensar en resultados ganar-ganar, nunca dejar de aprender, ser paciente con las personas y enseñarles en lugar de culparlos, cuidar su cuerpo.

Lo siento por alejarme del tema, pero tuve que mencionar esto, podrías ser un genio pero no irás a ninguna parte si nadie quiere trabajar contigo.

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

Volviendo al tema, 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 meta.

Primero, necesita 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ás un alto nivel de conocimiento , como:

  • Patrones de diseño
  • UML
  • Patrones de arquitectura.
  • Programación orientada a objetos
  • Comprensión básica 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 lo sabe, no importa en qué tecnología trabaje o en qué idioma use, se lo reconocerá como un excelente ingeniero de software y dominará fácilmente todos los idiomas, marcos o tecnologías 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:

Código completo: Manual práctico de construcción de software, Segunda edición: Steve McConnell: 0790145196705: Amazon.com: Libros

Clean Code: Un manual de Agile Software Craftsmanship: Robert C. Martin: 9780132350884: Amazon.com: Libros

  1. Obtenga una pasantía (si todavía 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ódigo : pídale a alguien que sea un buen ingeniero que revise su código, esto le indicará dónde puede mejorar. Comente sobre las revisiones de código de otras personas, que requerirán que usted entienda 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 resuelven desafíos de diseño específicos y son ampliamente utilizados.
  4. Contribuya con el 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 se sienta orgulloso : no hay sustituto para construir un proyecto desde cero. También te da la confianza que necesitarás 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 solucionarán. No necesariamente necesitas aprender las nuevas tecnologías (hay muchas por ahí), pero debes conocer algunas de las que se usan comúnmente y por qué las personas las usan (o no).
  7. Lea los documentos de Google : Google publica muchos artículos que describen sus avances recientes. Su tecnología a menudo es novedosa para el resto de la industria porque Google trabaja a una escala mayor que la mayoría de las compañías de software, si no todas, que tienen sus propios desafíos. La comprensión de estos documentos le dará una idea de los problemas del software de escalado.

¡Escribir un gran software es un arte! Si comparamos 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 involucradas en estructuras tan hermosas y gigantescas, puede comprender la profundidad de su conocimiento en un área de trabajo. Similar es el caso de un gran ingeniero de software (no estoy hablando de la cantidad de personas que se muestran en la industria de la subcontratación de software): los gustos de John Carmack, Dennis Ritchie y todos ellos son tales Artesanos.

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

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

  1. Sólida base matemática: este es un bloque de construcción esencial para todas las ciencias, especialmente la informática. Se trata de 1 y 0.
  2. Debe ser fluido en el idioma que elija, sea cual sea C, C ++, Java …
  3. Desarrollar fuertes habilidades de implementación – problemas simples y problemas complejos.
  4. Sólidas bases en DS y Algoritmos (teóricos y prácticos): esto se puede lograr solo con la práctica y con mucho trabajo duro. Muchas personas lo guiarán para obtener un trabajo fácil al aprender esto y eso, etc. No vale la pena a menos que aprenda esto. Fundaciones muy bien. Puede que te conviertas en ingeniero, pero no en uno bueno.
  5. Empatía: tu 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 Artisan de software: compartir y difundir el conocimiento lo ayuda a aprender y dominar mejor el tema. También es una forma de obtener aprendices para ti mismo y convertirte en un maestro artesano.
  7. Aprender continuamente – mejorar y evolucionar.
  8. Finalmente, contribuya al código abierto – ¡ayuda a dejar un legado!