¿Son muy buenos ingenieros de software capaces de trabajar en áreas técnicas muy diferentes?

No es raro, dependiendo del tipo de lugar donde trabajas. Si usted es un programador corporativo, es probable que se quede en una sola tecnología, pero si trabaja en una agencia, la tecnología se elige para adaptarse a la tarea, por lo que está expuesto a muchas más opciones.

Los mejores ingenieros entienden sus problemas en términos de algoritmos, y si bien harán todo lo posible para cumplir con las convenciones de su idioma elegido, podrían volver a implementarse en otro idioma con bastante facilidad ya que sus pensamientos son sobre el flujo, no la sintaxis.

No todos son políglotas multiplataforma, pero muchos de los que trabajo son. Big Nerd Ranch tiene personas excelentes y, por lo general, lleva un mes o menos pasar de la exposición a un idioma a tener fluidez en ese idioma.

Los proyectos de Big Nerd Ranch varían bastante: un año, trabajé en una gran aplicación web para administrar las operaciones de una empresa de servicios; una aplicación de mercado estilo eBay; una aplicación para iPhone que reproduce videos en tiempo real; soporte de accesibilidad agregado a una aplicación Mac existente; y escribió una aplicación de AppleTV. También brindé apoyo a una serie de aplicaciones corporativas (cosas como aplicaciones de ventas de campo o aplicaciones de relaciones con los accionistas). En la competencia anual de programación, mi equipo creó un nuevo control de entrada para nuestra oficina; eso requería programar el servidor Raspberry Pi en Elixir, pequeños controladores de luz en Arduino, y tenía aplicaciones de iPhone / Apple Watch / Android para los empleados, una aplicación de iPad para imprimir tarjetas de visitante y otra aplicación de iPad para mirar la puerta y colocar un GIF en Slack cada vez que alguien se acerca. Fueron dos personas haciendo toda esa programación en tres días.

Cuando no estaba trabajando en esos esfuerzos, pasaba tiempo escribiendo código en idiomas completamente nuevos para mí, usando marcos que normalmente no usaría, escribiendo publicaciones de blog sobre las tecnologías que estoy usando, o aprendiendo leyendo o asistiendo a una clase. Una semana, solo por diversión, escribí un clon de un viejo juego de arcade.

Antes de trabajar aquí, trabajé en varias otras compañías. En cada caso había una sola tecnología en uso (C ++, Java, .Net) con una pequeña porción de otros lenguajes utilizados para tareas de soporte (SQL, una pequeña secuencia de comandos de shell, algunas piezas de Python o PHP). caso, porque la mayor parte de los trabajos de ingeniería de software están en ese tipo de taller.

… pero si lo quieres, ¡puedes tenerlo!

Si está empleado, la verdadera pregunta es ‘¿alguien le permitirá hacer esto?’ La mayoría de los empleadores contratan para conjuntos de habilidades muy específicas y no están interesados ​​en dejar que te muevas de un lado a otro. De vez en cuando hay algún movimiento: soy desarrollador de bases de datos, y un empleador me permitió crear una aplicación de iOS que necesitaban. Pero en general, te contratan para hacer un tipo de trabajo específico. El trabajo que describió se dividiría en equipos y no habría mucho movimiento entre los equipos. Se trata tanto de ser un agujero de paloma o un maletín como cualquier otra cosa.

Del mismo modo, al cambiar de trabajo, sería difícil convencer a un empleador para que lo contrate en un campo en el que aún no ha trabajado. Tendrías que ser muy persuasivo para hacer eso.

Si trabaja por cuenta propia, tendría más libertad para trabajar en lo que quiera, por supuesto, pero probablemente no tendría todos esos tipos de productos.

Pero sí, es posible que una persona vaya de un área a la otra como lo describió. En general, una persona que trabaje en gráficos y juegos tendrá una buena formación en matemáticas y física. Sin eso, trabajar en esos campos específicos sería difícil. Pero la mayoría de los idiomas en el espacio comercial están basados ​​en C, por lo que es bastante fácil pasar de uno a otro: es como pasar del español al portugués. Es común, incluso. La mayoría de los desarrolladores con más de un par de años de experiencia pueden hablar varios idiomas que han usado, aunque se especializarán en uno o dos.

Absolutamente. Un buen ingeniero de software tiene habilidades que están disponibles en general para múltiples dominios. Y, en principio, si puede comprender un determinado problema con un cierto nivel de abstracción, puede aplicar el mismo conjunto de habilidades que aplicaría en cosas totalmente diferentes.

P.ej.

Software de escritura y horneado.

Si ve el proceso de horneado como un par de pequeños pasos que deben ejecutarse en un cierto orden, su mente verá todo el proceso como una tubería.

Es posible que nunca haya horneado antes, pero al resolver problemas, verá que el proceso reúne algunos componentes pequeños, que probó (probó) y funciona bien de forma aislada que lo llevarán al resultado final.

La habilidad para resolver problemas y el pensamiento analítico son generalmente buenos para todo.

Depende de la persona. Si esa persona es el tipo de persona “No fui entrenado para hacer eso”, entonces absolutamente no.

Si cuando se le pide que desarrolle software para interactuar con los detectores de gas nervioso, la persona (sin ningún conocimiento previo de gas venenoso militarizado) investiga cómo funcionan la química y los sensores y desarrolla un plan para diseñar y probar su creación, entonces sí.

Caigo en el segundo grupo. Y sí, he escrito el software Radar Jammer, el software de detección de gases nerviosos, el software de cartera de retiro y el firmware incorporado para hacer estallar cohetes errantes. No me importa cuál es tu problema. Si hay una solución de software, la encontraré.

Cualquier persona con amplios intereses y deseos de aprender cosas nuevas puede hacer contribuciones significativas a casi cualquier problema de ingeniería.

Algunos de nosotros realmente disfrutamos de ser lanzados de cabeza al fondo de la piscina, sin clases de natación.

He hecho todos esos trabajos. Ahora trabajo en aplicaciones móviles. Trabajé en un juego coinOP 3D en la década de 1990. Incluso arreglé la MMU primitiva en ese sistema (realmente solo el chip que miraba las líneas de dirección y lo traducía en líneas de selección de chip más un poco de estado interno y lógica para administrar eso). Conformidad con Unix y bibliotecas de subprocesos múltiples en Apple. Ah, y construí un montón de servicios de red a principios de los 90 cuando era nuevo y emocionante. Además de un montón de otras cosas.

… excepto de un trabajo a otro, no solía hacer muchos cambios radicales. Quiero decir que a veces lo hice (videojuego coinOP a servicios de red IP), pero luego fue un montón de cosas relacionadas durante la mayor parte de la década.

Sería mucho más difícil ir entre todas esas cosas, digamos una cada seis meses. Realmente lleva un poco de tiempo instalarse en un gran cambio y resultar un buen trabajo.

Esto puede ser respondido bien por los ingenieros de software de google, ya que son muy dinámicos y trabajan en diferentes proyectos.