¿Cuáles son algunos tipos más especializados de la profesión de desarrollo de software?

Etiquetar a alguien como ingeniero de software es similar a un Doctor. La mayoría de ellos sabría un poco de todo (si obtuvieron un título en Ciencias de la Computación), pero se especializarían idealmente en 1-2 de ellos sobre los cuales desarrollarían su carrera. Más abajo en el camino profesional, ayuda a tener una comprensión justa de otras plataformas relevantes, así como estar en un rol de CTO / Arquitecto. Pero en una etapa temprana, recomendaría dominar un dominio que más le interese. Pruebe algunos de ellos, haga algunas pasantías, hackathlons para descubrir esto.

Por ejemplo, cuando busco desarrolladores, idealmente me gustaría que alguien tenga alguien que conozca Android, iOS, PHP y bases de datos. Pero es casi imposible encontrar a alguien que sea competente con todos ellos (si es así, póngase en contacto :). Por lo tanto, buscamos personas especializadas en 1 o 2 de ellos y los incorporamos al equipo. Un ingeniero con 2-3 años de experiencia que dice ser un experto en 3 plataformas debe tomarse con una pizca de sal.

A continuación se enumeran algunas profesiones en las que puedo pensar

  • Ingeniero de redes: idealmente conocerá Redes de computadoras, C, algunos elementos de hardware, secuencias de comandos y estructuras de datos (no bases de datos). Empresas como Cisco, Aricent, Ericsson tienen muchos de ellos. Las tecnologías son de muy bajo nivel y generalmente funcionan cerca del sistema operativo. También con el nuevo despliegue publicitario en SDN, este podría ser un dominio interesante.
  • LAMP: Una combinación de Linux, Apache, MySQL (Base de datos) y PHP / Python. Estos son los ingenieros que principalmente crean aplicaciones web o sitios web. Los encontrará en la mayoría de las empresas web y de comercio electrónico. Si planea hacer un inicio basado en la web, esta es una especialización que probablemente será útil en combinación con algunas habilidades de HTML / CSS.
  • Desarrolladores móviles: concéntrese en una o más de las plataformas móviles (iOS, Android, etc.) y en la programación orientada a objetos. Es ideal para que tales ingenieros también tengan cierta habilidad para la experiencia del usuario móvil, el diseño, etc.
  • Científico de datos: actualmente se trata de una especie muy solicitada con todo el alboroto en torno a Big Data. Utilizan plataformas como Hadoop para dar sentido a la información no estructurada en Internet. Acabo de leer un artículo, Cuidado, Europa: los científicos de datos vienen en camino, esto.
  • MainFrame: esto se percibe como una tecnología obsoleta, pero es relevante por algunas razones. Esta publicación resume algunos puntos si está interesado: ¿El mainframe está desactualizado?

Por supuesto, los algoritmos son importantes en todos los casos anteriores, ya que es fundamental hacer un buen software.

Espero eso ayude.

Tipos de desarrollo de software más conocidos:

Desarrollo de aplicaciones : diseño y codificación de software que utilizan los humanos para resolver un problema práctico particular. Por ejemplo, los desarrolladores del departamento de TI de una empresa pueden escribir una herramienta diseñada para ayudar al personal de ventas a administrar los datos de ventas. El término “desarrollo de aplicaciones” generalmente implica software no basado en la Web. Los lenguajes más comunes utilizados por los desarrolladores de aplicaciones son Java, Visual Basic, VB.NET y C #.

Desarrollo de sistemas : software de diseño y codificación que funciona detrás de escena. Por ejemplo, varios miles de ingenieros que trabajan en Microsoft desarrollando el sistema operativo Windows son desarrolladores de sistemas. Una subcategoría es el desarrollo de API, donde los ingenieros escriben código que está destinado a ser utilizado por otros desarrolladores que escriben programas de aplicación. Los lenguajes más comunes utilizados por los desarrolladores de sistemas son C y C ++.

Desarrollo web : diseño y codificación de aplicaciones alojadas en un navegador web como Internet Explorer, Netscape Navigator o Firefox. Por ejemplo, un sistema de compras en línea como amazon.com es un ejemplo de desarrollo web. Los lenguajes más comunes utilizados por los desarrolladores web son HTML, JAVA, PHP, ROR, JavaScript, VB.NET y C #.

Desarrollo de sistemas integrados : software de diseño y codificación que funciona en dispositivos que no son de computadora. Por ejemplo, los ingenieros que escriben programas que controlan los sistemas de guía de dispositivos militares están escribiendo códigos de sistemas integrados. Los lenguajes más comunes utilizados por los desarrolladores de sistemas integrados son los lenguajes de ensamblaje, C y lenguajes especiales únicos.

Desarrollo científico : diseño y codificación de software que es principalmente numérico. Este tipo de programación es mucho menos común de lo que solía ser. Los lenguajes más comunes utilizados por los programadores científicos son C y C ++.

Test Automation : diseño y codificación de software que prueba otro software. Microsoft emplea a miles de estos ingenieros que tienen el título de ingeniero de diseño de software en prueba, o SDET para abreviar. Los lenguajes de programación más comunes utilizados por los ingenieros de prueba son Perl, Visual Basic, VB.NET y C #.

Desarrollo “Otro” : todo lo que no se menciona arriba.

¿Lo que hay en un nombre? Mi cargo actual es “Ingeniero de automatización”, que a menudo se entiende como ingeniería eléctrica en la industria, pero de hecho, soy ingeniero de software. Paso mi tiempo haciendo análisis y adquisición de datos, lo que me convertiría en un “científico de datos” en algunas empresas. Escribo software de control para máquinas, lo que me haría un “programador de CNC”. Los operadores de la máquina usan mis GUI, lo que me convierte en un “Desarrollador de GUI” y un “Diseñador de UI / UX”. Recopilo información de producción en una fábrica y la presento a la gerencia, lo que me convierte en un “Desarrollador de Business Intelligence”. Solía ​​trabajar como “lingüista computacional”, que era un trabajo completamente diferente.

Los títulos de trabajo son convenientes para la gestión y la contratación. Si un ingeniero de software con título de trabajo AAA deja la empresa, busque otro AAA y no un BBB, mientras que quizás un BBB también podría hacer el trabajo.
En mi opinión, cambiar de trabajo o de roles de vez en cuando lo convierte en un mejor ingeniero de software completo. Cuando finalizo un proyecto, trato de hacer algo diferente. Hacer el mismo trabajo durante muchos años no te hace realmente mejor en ese trabajo per se. Hacer muchas cosas diferentes (¡y hacerlo bien!) Te hace mejor en todo. En un tiempo limitado, un ingeniero de software decente y experimentado puede aprender un trabajo con un título diferente, siempre que el entorno de trabajo proporcione los recursos de aprendizaje necesarios. La aptitud para aprender y la forma en que reconoce y resuelve los problemas son mucho más importantes que su cargo actual.

El mismo título de trabajo puede significar algo diferente en una compañía diferente. El mismo trabajo exacto también puede tener un nombre diferente en diferentes empresas.

En mi opinión, el mayor desafío profesional es no especializarse en alguna u otra profesión. El mayor desafío y la característica más gratificante de la vida profesional es hacer algo importante todos los días.

Permítanme comenzar analizando sus posibles opciones de carrera:
1. Científico de datos o más matemático que desarrollo de software, por lo que técnicamente no puede llamarse una profesión de desarrollo de software.

2. Quants o CS Phd es más una profesión de investigación y nuevamente es muy diferente del desarrollo de software.

3. El ingeniero de redes / seguridad es más un paraíso para los piratas informáticos donde juegas con la seguridad del software o la seguridad del sistema. Una vez más, más que pura programación, es una combinación de programación, conocimiento del núcleo, protocolos de red, etc.

Básicamente, cualquier desarrollador de software debe poseer habilidades de programación (uno o varios idiomas), habilidades de depuración (¡sin las cuales está muerto!) Y habilidades de prueba (sin las cuales su software es un pedazo de basura).

Todo depende de tu interés. Si eres un poco entusiasta de las Matemáticas, entonces sigue la carrera de científico de datos, ya que esta profesión está en un ascenso astronómico y continuará aumentando durante al menos algunos años.

Si no quiere profundizar en las matemáticas y las estadísticas, busque la pista de programación de aplicaciones que lo llevará a una carrera en el desarrollo de software. Elija Java (si desea ir a la ruta empresarial o móvil) o python (si desea ir a la ruta de desarrollo web y de aplicaciones) y comience a aprender. Aprenda un lenguaje funcional como scala / erlang y estará en camino de convertirse en un genio de la codificación.

NOTA: LOS ALGORITMOS Y LA PROGRAMACIÓN son las dos cosas que estarán a su lado cada vez que las necesite. Piensa en ellos como tus mejores amigos.

En primer lugar, su lista no está completa. Para obtener una mejor lista de áreas de informática, verifique lo siguiente:

Esquema de la informática

Un ingeniero de software debe conocer los fundamentos de la mayor cantidad de áreas posible, pero no es posible especializarse en todas las áreas enumeradas anteriormente porque es una gran cantidad de información y tenemos tiempo (duración) y espacio (plasticidad de la memoria cerebral) restricciones 🙂

Desarrollo software de escritorio de música, y alguien probablemente pensaría que solo trabajo con programación de audio, pero la verdad es que uso gráficos, algoritmos, bases de datos, redes, seguridad, programación de audio y otras áreas de CS regularmente para diferentes tareas.

En mi opinión, todos los desarrolladores deben tener los fundamentos de Ingeniería de Matemáticas y Software (incluidos los algoritmos) como mínimo. Una buena universidad de TI debería cubrir esos campos y mucho más.

Algunos trabajos especializados que utilizan solo un pequeño subconjunto de las áreas anteriores podrían ser:

  • Desarrollador de bases de datos : este desarrollador utilizará la programación / configuración de la base de datos (tecnologías SQL o NoSQL) y, opcionalmente, conocimientos de seguridad y redes, pero probablemente no necesitará conocimientos de gráficos por computadora o conocimientos de inteligencia artificial.
  • Desarrollador front-end : este desarrollador utilizará habilidades de desarrollo de UI (HTML, CSS, Photoshop) pero probablemente no funcionará con programación de bases de datos, seguridad e inteligencia artificial.
  • Desarrollador de control de calidad : este desarrollador utilizará habilidades de desarrollo de la interfaz de usuario, secuencias de comandos para la automatización de la interfaz de usuario, etc., pero probablemente no utilizará programación de bases de datos, inteligencia artificial, redes, etc.
  • Desarrollador de backend : este desarrollador utilizará programación de bases de datos, seguridad, IA, programación concurrente y distribuida y similares, pero probablemente no funcionará con gráficos.

Siempre es una gran ventaja ser adaptable y poder trabajar en diferentes áreas. Sin embargo, en ciertos casos se requiere y aprecia la especialización en solo un par de áreas de CS (por ejemplo, para científicos de datos).

Siempre depende de los requisitos específicos del trabajo. Un desarrollador de QA en la compañía A podría tener diferentes responsabilidades que un desarrollador de QA en la compañía B. No creo que haya un conjunto estándar de requisitos para cualquier puesto.

Intentaré hacer esto lo más simple posible. Como ya ha mencionado una lista de profesiones, aquí se detalla el desglose en términos de desarrollo de software en el que debería centrarse.

Científico de datos

Fondo
Según IBM “Un científico de datos representa una evolución desde el rol comercial o analista de datos. La capacitación formal es similar, con una base sólida típicamente en informática y aplicaciones, modelado, estadísticas, análisis y matemáticas. Lo que distingue al científico de datos es fuerte perspicacia empresarial, junto con la capacidad de comunicar los resultados a los líderes empresariales y de TI de una manera que pueda influir en la forma en que una organización aborda un desafío empresarial. mayor valor para la organización “.

Habilidades requeridas

Interés por trabajar con números y preguntar “qué pasa si”
Capacidad para mirar múltiples fuentes de datos
Big Data (este es un mundo entero en sí mismo)

¿Qué hago para ser un científico de datos?

Debe ser curioso: explorar, hacer preguntas, hacer análisis de “qué pasaría si”, cuestionar los supuestos y procesos existentes. Armado con datos y resultados analíticos, un científico de datos de primer nivel luego comunicará conclusiones y recomendaciones informadas a través de la estructura de liderazgo de una organización.

Desarrollador Quant

Fondo
Como su nombre indica, Quant Developer es una persona que es buena con las técnicas cuantitativas: métodos matemáticos y estáticos. Los desarrolladores de Quant suelen trabajar para la gestión de riesgos, finanzas, análisis de crédito, etc.

Habilidades requeridas

Plan de autoestudio para convertirse en un desarrollador cuantitativo

Espero que esta información sea útil.

¡Buena suerte!

Un área es el análisis numérico. Estos chicos tienen un profundo conocimiento de los procesadores, compiladores y memoria, pero necesitan saber muy poco sobre redes, bases de datos, GUI, etc.
Otra área son los controles integrados. Necesita saber mucho sobre hardware, pero muy poca base de datos, GUI, etc.

En cuanto a las profesiones de desarrollo de software, la mayoría solo en un par de esas áreas. Los momentos en los que trabajará en todas esas áreas serían si trabajara en una startup o en una pequeña empresa.

En mi caso, trabajo en desarrollo frontend. Hay otros equipos que trabajan en las bases de datos y el desarrollo del servidor de fondo, pero mi equipo trabaja en el desarrollo del cliente. Esto significa que somos una interfaz ligera para un servidor de fondo.
Yo uso :

  • Lenguajes de programación : así es como se desarrollan los desarrolladores
  • Algoritmos : esta es básicamente la forma en que completa una actividad
  • GUI : tenemos un componente visual muy grande para nuestra aplicación, por lo que trabajamos mucho con el desarrollo de la GUI JavaFX

Yo no uso :

  • Bases de datos : no necesariamente es algo en lo que tendrá que trabajar, especialmente en el desarrollo de aplicaciones livianas o cuando trabaje en equipos grandes.
  • Redes : no trabajo específicamente en esto, pero hay otros en mi equipo que incursionan en una pequeña red. Esto también depende realmente del tipo de aplicación en la que trabaje
  • Compilador : no trabajo con esto en absoluto. Me arriesgaría y diría que la gran mayoría de los desarrolladores no trabajan en compiladores de codificación, a menos que eso sea lo que están desarrollando; sin embargo, aún es bueno entender cómo funciona su compilador en caso de que haya errores.

¡Espero que esto ayude!

Realmente se trata del conocimiento de la industria. Las industrias tienen necesidades especializadas que dictan la ingeniería de software utilizada. Por ejemplo, el negocio de la energía tiene un conjunto diferente de necesidades que, por ejemplo, las finanzas, que también es diferente al cuidado de la salud. Luego hay diferentes roles dentro del proyecto. Backend chicos, Frontend, middleware, interfaz DB, agente de usuario interfaz todo eso. Es un acto de equilibrio entre volverse demasiado especializado y, por lo tanto, no comercializable si pierde su trabajo y ser un maestro de nada.

Una de las grandes áreas para entrar ahora es Salesforce, ya que se están convirtiendo en una plataforma para que la gente construya a partir de ella. Encontrar un buen programador de Saleforce es como encontrar un unicornio. Aprenda a usar Apex y visite http://Force.com si está interesado

Definitivamente estás en el camino correcto con respecto a las profesiones que acabas de enumerar. Cada una de esas profesiones abarca múltiples campos de estudio.