¿Cuál es la diferencia entre los diferentes roles del desarrollo de software?

En un equipo de desarrollo moderno, no encontrará a nadie que cumpla solo uno de estos roles. Los miembros del equipo a menudo desempeñan varios de estos roles. Eso todavía permite que todos tengan un área de enfoque principal.

Desarrollador, ingeniero, programador, codificador y arquitecto tienen el mismo rol . Si alguien trata de decirte que él es un arquitecto y ya no escribe código, ¡despide al tipo! La razón por la cual estos roles no deberían tratarse de manera diferente es que cada desarrollador debería poder codificar / programar, debería tener habilidades de ingeniería (por ejemplo, no solo copiar / pegar fragmentos de código de Stackoverflow, sino aplicar habilidades como refactorizar, probar y básicamente trabajar en de manera organizada y productiva) y debe tener una comprensión de la arquitectura (cómo organizar su código y / o la infraestructura). Como dije, esto todavía deja espacio para que un chico sea un crack en la infraestructura de hardware, mientras que el otro conoce todos los secretos del lenguaje Ruby. ¡En cualquier caso, estas áreas de enfoque principal nunca deberían ser una excusa para dejar un espacio en blanco total en los otros campos de la ingeniería de software!

Un consultor es ligeramente diferente, dependiendo de en qué está consultando este rol. Idealmente, cada desarrollador también debería ser capaz de entrenar y ayudar a otros desarrolladores en el campo de su experiencia, al menos un poco. Si piensa en un consultor como alguien que presenta Scrum, alguien que ayuda a alinear el desarrollo con el modelo de negocio o alguien que intenta mejorar el estado de ánimo del equipo, es probable que sea un rol asumido por una persona diferente. Este consultor no necesita ser desarrollador, pero ciertamente ayuda a su trabajo, si al menos asumió este rol en el pasado.

¡Espero que esto ayude! Vea equipos multifuncionales o personalidades en forma de T para obtener más información.

Como algunos ya han dicho, estos títulos solo tienen relevancia en un contexto organizacional. Las responsabilidades varían mucho dentro de cada título o rol. La mayoría de las organizaciones no tienen todo esto al mismo tiempo.

Aquí hay algunas cosas para las que necesitamos talento de software:

  • Comprenda el software tal como existe para corregirlo o mejorarlo.
  • Comprenda un problema comercial y defina cómo el software podría resolverlo.
  • Comprenda un problema técnico y defina cómo el software podría resolverlo.
  • Comprenda una “clase” de problemas y defina una solución de software general que otros puedan usar para resolverlos.

Estas son cosas que las personas hacen con el código. Pero deja de lado algunos de los trabajos más interesantes:

  • Comprender cómo los humanos interactúan con las computadoras y definir esas interacciones.
  • Comprender la información que participa en la solución de un problema y organizar esa información.
  • Comprender los sistemas de trabajo y cómo definir sistemas de trabajo que interactúen y coordinen.

Y por último:

  • Entendiendo estos y definiendo abstracciones para representar elementos y estructuras de cada uno de estos para que puedan comunicarse con otros para trabajar y resolver problemas juntos.

Importa menos cómo te llamas y más de cuáles eres capaz.

Reclutador de tecnología aquí …

Muchas de esas diferencias son solo diferencias en el título de trabajo entre empresas.

Puede encontrar a alguien con el título de Ingeniero haciendo el mismo trabajo que un Desarrollador de software en otra compañía.

El consultor implica que usted es un profesional independiente en lugar de un empleado directo de la empresa. Pero incluso eso puede variar. Mi última compañía llamó a algunos empleados de alto nivel “Consultor”.

Lo único que mencionó que es significativamente diferente es el arquitecto. Diseñar la arquitectura o estructura de un proyecto de codificación es diferente de crear el código, y a menudo requiere un mayor conocimiento de los principios de desarrollo de software y ciencias de la computación.

En cuanto a la ingeniería, las áreas en las que es posible que desee buscar diferencias (en lugar de los títulos de trabajo que proporcionó) serían: desarrollador front-end, desarrollador UI / UX, desarrollador full stack, desarrollador back-end, ingeniero de sistemas, ingeniero de datos etc.

¡Cada uno de esos se enfoca en diferentes áreas!

Comencé a trabajar en software a principios de la década de 1970 y todavía veo el mismo desglose general de roles en el desarrollo de software. Se ha agregado mucha especialización, pero los roles básicos permanecen:

Gerente: responsable de obtener los recursos necesarios a tiempo y garantizar su calidad. También responsable de la gestión de riesgos.

Analista de requisitos: responsable de comprender las necesidades del cliente / cliente / usuario e identificar el mínimo que lo satisfará y las posibilidades que lo deleitarán.

Diseñador: responsable de seleccionar la tecnología, decidir qué capacidades se entregarán usando cada tecnología y organizar el producto total en componentes que se puedan crear, probar y ejecutar de manera eficiente

Programador: responsable de crear o adaptar software para cumplir con los requisitos de diseño en los niveles de calidad especificados (rendimiento, confiabilidad, mantenibilidad, etc.).

Probador: responsable de garantizar la calidad del producto. No necesitaríamos a estas personas en un mundo ideal. En el mundo real son críticos.

Escritor: responsable de parchear sobre fallas no corregibles en el diseño y el código para que las personas puedan usar el producto.

Estos son solo el papel más importante en un proyecto de tamaño mediano. Una persona a menudo puede realizar más de uno de estos roles, a veces incluso simultáneamente.

Muchos de estos roles se pueden dividir en otros más estrechos. Por ejemplo, puede haber diseñadores de interfaz de usuario, diseñadores de objetos, diseñadores de bases de datos, diseñadores de mensajes, etc. También puede haber probadores de funciones, probadores de estrés, probadores de seguridad, etc.

Hablando vagamente, esto es lo que hacen las personas con las siguientes designaciones.

  1. Desarrollador.
  1. Escribe código.
  2. Construye la aplicación.
  • Ingeniero
    1. Escribe el código
    2. Construye la aplicación
    3. Decide qué marcos / bibliotecas usar
    4. Explica cosas a los no técnicos.
  • Programador
    1. Escribe código.
    2. No necesariamente construye una aplicación. Por ejemplo, un tipo que escribe código para operar un brazo mecánico en alguna fábrica sigue siendo un programador, pero no un desarrollador o un ingeniero.
  • Arquitecto
    1. Escribe menos código que los desarrolladores, ingenieros y programadores.
    2. Trabaja en diagramas.
    3. Decide qué pila de tecnología usar. es decir, decisiones como la aplicación de escritorio vs web, la base de datos NoSQL vs SQL, etc.
    4. Hace recomendaciones sobre a quién contratar y cuántas personas nuevas traer.
    5. Hace que las partes interesadas comerciales entiendan lo que es posible y lo que no.
  • Consultor
    1. Puede ser cualquiera de los anteriores, pero funciona como contratista en lugar de a tiempo completo. A los contratistas se les paga más y trabajan menos horas. Pero se pagan por hora, no tienen beneficios, los contratos duran por períodos fijos y pueden ser despedidos en cualquier momento. Vacaciones y días de enfermedad significan pérdida de pago.
    2. Se contratan consultores para resolver problemas específicos. Por lo general, se traen cuando el proyecto se retrasa.

    Digo vagamente, porque las personas en software no ocupan puestos de autoridad como lo hacen en otros lugares. Al menos, la autoridad que poseen no proviene de sus designaciones. En cambio, obtienen autoridad del nivel de comprensión de la pila tecnológica. Muchas veces, los desarrolladores junior son más inteligentes que sus contrapartes senior y terminan asesorándolos. Entonces, hay mucha superposición entre estos roles.

    Una interpretación común es que un “ingeniero de software” es alguien que “construye sistemas”, mientras que un “desarrollador” es alguien que “escribe código” en general. En este marco, el grupo de desarrolladores también incluye a otras personas como diseñadores, algunos gerentes de proyectos técnicos, científicos de datos, ingenieros de datos, etc. Creo que algunas compañías simplemente usan el término “desarrollador de software” de la misma manera que “ingeniero de software”, mientras que otras no tienen suficiente cultura de ingeniería para hacer una distinción en primer lugar. Al final del día, no se trata del título exacto que usa una empresa, sino que tienen una visión clara de los diferentes roles de los empleados que escriben código, cómo encajan en el negocio general y cómo interactúan entre sí. .

    Además, en una empresa comercial, los títulos no importan demasiado. Como me dijo un colega anterior, “puedes llamarme cavador de zanjas, si me pagas mi bono, no me importa”. Los resultados a corto plazo son más un motor que una carrera profesional a largo plazo.

    Para no quedar empantanado en los aspectos técnicos de la industria del software, usaré una analogía: para simplificarlo, comparemos el proceso de creación de software con el de crear una mesa de comedor y las personas necesarias para diseñarlo y construirlo:

    Programador : este es básicamente el aprendiz en muchos sentidos, la persona que sabe barnizar madera, taladrar agujeros, usar una cinta métrica e incluso un calibrador Vernier. Sin embargo, alguien debe proporcionarle orientación sobre cómo construir una tabla. Un supervisor necesita decirle la longitud de la madera para cortar, qué tornillos usar y dónde perforar la madera. Al final del día, habrá podido crear una mesa con sus dos manos, pero no puede hacerlo sin orientación y supervisión. En el mundo del software, este es el tipo que conoce uno o más lenguajes de programación y puede aplicarlos para escribir una función o una clase, pero no puede imaginar y crear una aplicación completa de principio a fin sin supervisión. Con suficiente tiempo y trabajo duro, progresará para convertirse en un desarrollador / ingeniero / arquitecto de software.

    Desarrollador de software : suponga que desea tener una mesa de comedor personalizada construida para su hogar. Como persona no técnica, tiene una idea de cómo le gustaría que se viera la tabla terminada, pero no sabe cómo construirla usted mismo. Entonces, sale y encuentra a alguien que puede construir una mesa personalizada desde cero de acuerdo con sus requisitos específicos, es decir, le dice al tipo más o menos qué tan grande es su habitación y la longitud de la mesa, la cantidad de sillas que desea hacer espacio para etc. El desarrollador de software es la persona que puede crear una aplicación personalizada de acuerdo con los requisitos del cliente. Debido a que él está a cargo del desarrollo del software, tiene cierta libertad creativa, pero en última instancia necesita hacer que el cliente feliz siguiendo los requisitos de un cliente específico.

    Ingeniero de software : ahora suponga que usted es el dueño de una empresa que diseña y fabrica muebles. Este es un juego de pelota completamente diferente ahora porque ya no estás tratando de satisfacer las necesidades de un solo cliente, sino más bien un mercado completo en todo tu país. Entonces, en lugar de obtener una sola mesa diseñada y construida, está buscando obtener miles de mesas construidas. Para realizar el trabajo, necesitará una persona con un conjunto de habilidades completamente nuevo que vaya más allá de las habilidades del desarrollador de software. Los principios de ingeniería de software deben aplicarse al problema. Estos incluyen patrones y principios de diseño. El ingeniero de software tiene una visión más amplia pensando más adelante haciendo preguntas sobre el escalado y la reutilización. Al crear miles de mesas, uno debe pensar en crear un producto atractivo que no solo complazca a un cliente, sino que a muchos les encantará. Esta persona también piensa qué materiales son rentables y la durabilidad. Está bien y bien crear una tabla, pero esta persona también piensa en cómo duplicar el diseño una y otra vez para que cada copia se vea exactamente igual a la siguiente y tenga la misma calidad. El ingeniero de software es la persona que diseña y desarrolla software que se venderá no solo a una persona sino a muchas.

    En la superficie, el desarrollador de software puede parecer muy similar a un ingeniero de software, pero en mi opinión, las principales diferencias entre los dos son sus personalidades o las circunstancias que se les imponen, es decir, no se trata tanto de habilidades técnicas. El desarrollador de software suele ser un tipo de acceso directo o una persona que busca soluciones rápidas y acumula muchos departamentos técnicos. Esto se debe en parte a las rígidas limitaciones de tiempo y presupuesto con las que trabajan los desarrolladores de software porque facturan por hora. Además, cuando está desarrollando un producto y facturando por hora, ese producto solo será tan bueno como debe ser, es decir, “¿realmente necesitamos esta función, cuánto va a costar? ¿Podemos encontrar una solución rápida? para ese problema al no gastar más tiempo y dinero, etc. “.

    Por último, un desarrollador de software generalmente trabaja en varios proyectos al mismo tiempo, lo que significa que su enfoque está disperso y sus prioridades cambian día a día. La falta de enfoque y priorización da como resultado el desarrollo de productos de menor calidad. Por otro lado, un ingeniero de software generalmente trabaja en un solo proyecto a la vez y se le asigna un presupuesto mayor sin tener que cronometrar horas. Un presupuesto mayor también permite más tiempo para concentrarse en la estrategia y el diseño del producto en lugar de simplemente trabajar sin pensar, es decir, correr como pollos sin cabeza.

    Arquitecto de software: continuando con nuestra analogía, la empresa de muebles no solo tendrá un solo comedor como producto, sino muchos tipos diferentes de productos. Esto requiere que una persona técnica supervise el diseño y la creación de cada producto, lo que conlleva una serie de desafíos adicionales. Esta persona necesita pensar en la reutilización, por ejemplo, ¿podemos usar el diseño de la tabla A cuando estamos trabajando en la tabla B tal vez modificándola un poco? Esta persona también puede ser responsable de pensar en los costos generales, por ejemplo, o qué proveedores de madera deberíamos usar para crear los mejores / más baratos productos, etc. El Arquitecto de software es la persona que piensa en todos los productos que se están diseñando y se pregunta cómo estos productos encajar en el panorama general de la empresa. En empresas muy grandes que tienen productos muy grandes, se puede asignar un Arquitecto de Software para supervisar solo un producto y se pueden asignar ingenieros a los componentes de los productos grandes.

    Para resumir; La diferencia entre todas estas personas es el alcance de su visión y responsabilidades en el proceso de diseño y desarrollo de software. Por supuesto, hay muchos otros títulos (especialmente los de gestión) en esta industria, pero elegí centrarme solo en los muy técnicos.

    La industria de TI tiene diferentes roles en el desarrollo de software que se enumeran a continuación:

    Ingeniero de software

    El trabajo del ingeniero de software incluye el diseño y desarrollo de software a nivel de sistema como sistema operativo, sistema embebido. Entienden mejor tanto el hardware como el software.

    Analista de sistemas

    El analista de sistemas investiga y analiza un problema comercial y encuentra la solución. En general, los requisitos de recopilación de clientes o negocios y de acuerdo con eso, él encuentra la solución. Requiere conocimientos tanto técnicos como comerciales.

    Analista de negocios

    Es una persona que se comunica con una persona técnica, gerente y usuario final. Él es un centro del campo del proyecto. Su tarea es recopilar la necesidad y los requisitos del proyecto, explicarlo a una persona técnica, hacer documentación. Requiere comprender la tecnología, pero no requiere tener un título en tecnología.

    Soporte técnico

    Son un trabajo para fabricantes y proveedores de hardware para resolver el problema del cliente comercial. Pero la mayoría de las veces trabajan compañías de usuarios finales que apoyan el monitoreo y el mantenimiento de la tecnología del lugar de trabajo para responder a las solicitudes de los clientes.

    Ingeniero de redes

    Este es uno de los roles técnicamente exigentes en el desarrollo de software. Su función consiste en configurar, administrar, mantener y actualizar el sistema de comunicación. Además, realiza estrategias de seguridad, almacenamiento de datos y recuperación ante desastres.

    Consultor técnico

    El consultor técnico proporciona experiencia técnica para el desarrollo, implementación de software y cada etapa del desarrollo de software. Su papel consiste en lanzar un contrato, diseñar un sistema, gestionar un proyecto.

    Ventas técnicas

    Puede requerir menos mano involucrada en un proyecto, pero aún es importante entender la estructura del proyecto, vende software y es por eso que necesita entenderlo. Su papel implica la reunión, la conferencia y la propuesta de redacción.

    Gerente de proyecto

    Organiza personas, tiempo y recursos para asegurarse de que el proyecto cumpla con los requisitos establecidos y se complete a tiempo y presupuesto. Trabaja en el proyecto de principio a fin. El gerente de proyecto requiere la habilidad de habilidad blanda, buena experiencia y una buena base de tecnología para que pueda proyectar un equipo técnico y un gerente comercial de alto nivel.

    Desarrollador web

    El desarrollo web es el equipo que trabaja en el proyecto. Debe ser un buen trabajo en el mundo de hoy. Implica una programación hardcore y un diseño más creativo de la nueva interfaz del sitio web.

    Probador de software

    En un proyecto, el error tiene un impacto en el código y la reputación de la industria de TI. Encuentra el error en el proyecto que tiene un impacto masivo en el proyecto. No requiere conocimientos de programación, pero necesita comprender el código.

    Empresa de desarrollo de productos de software en India

    Codificador: resuelvo problemas pirateando recursivamente código hasta que funcione. Mira, soy ágil!

    Ingeniero: Soy un Codificador, ¡pero me gusta sonar más importante!

    Programador: mi empresa no me deja llamarme ingeniero.

    Desarrollador: Ver programador.

    Líder: Soy un desarrollador, y lo he visto y hecho todo en mis 2 años de experiencia.

    Arquitecto: Soy un líder que se supone que sabe cómo cumplir mejor los requisitos no funcionales. Oy vey ¿Qué, quieres saber cómo predeciblemente obtener requisitos funcionales en el código? Idiotas, ya no hacemos eso, ¡somos ágiles!

    Probador: Visto por última vez saliendo del edificio con una caja de cartón.

    Consultor: Soy un desarrollador o arquitecto experimentado, pagué mucho para dar consejos o procesos que no necesita, ya sabe, no aplicará o es demasiado tarde. Además, me veo mejor que tú con un traje.

    Grupo de interés: Sé lo que quiero, creo que sí, y tú también deberías. Espera, dame un minuto. He cambiado de opinión.

    Analista de negocios: se supone que debo saber cómo funciona el negocio, pero tendré que verificarlo. Déjame contactarte.

    Gerente de Proyecto: ¿Cuánto tiempo más? ¿Ya llegamos? ¿Por qué necesitamos codificadores de todos modos? En estos días, los pasantes lo harán de forma gratuita. ¿Qué quieres decir con que no sabes cuánto tiempo tomará?

    Capitalista de riesgo: Salí, no puedo repetir el éxito, así que ahora me llamo VC.

    Friki
    Científico de la computación

    Escriben código ( sí, sé que es una bomba ). Puede que no sea el código más bonito o mejor factorizado, pero hace el trabajo. No se trata del diseño del código o de las ” buenas ” prácticas, se trata de probar lo que se propusieron probar. Un informático es tanto matemático como tecnólogo ( tienen 31337 habilidades matemáticas ), no solo necesitan saber que las cosas funcionan, sino que tienen que demostrarlo. La comunicación y las habilidades de las personas son rasgos deseables, pero no se enfatizan. El proceso de software y las habilidades de dinámica de equipo son rasgos deseables, pero no se enfatizan. Tienen una gran amplitud de conocimiento general de todo su campo, pero se especializan profundamente en una o varias áreas estrechas. En estas áreas se les considera expertos de clase mundial. Trabajan en cosas relacionadas con su investigación en su tiempo personal.

    Programador
    Los programadores escriben código increíble. Hacerlo limpio, bien factorizado y sin errores son preocupaciones muy importantes, pero no a expensas de hacer el trabajo. Se trata de conocer el significado de ” buen código ” dentro de su dominio. Necesitan tener algunas habilidades matemáticas, pero esto no es una preocupación primordial. Necesitan conocer buenas (mejores) soluciones a los problemas, pero no necesitan demostrar que es la mejor solución. Una buena amplitud de conocimiento algorítmico es imprescindible . Tienen una gran habilidad en un área amplia de experiencia y también tienen un conocimiento razonablemente bueno de áreas relacionadas. La comunicación y las habilidades de las personas son rasgos deseables, pero no se enfatizan. El proceso de software y las habilidades de dinámica de equipo son rasgos deseables, pero no se enfatizan. Trabajan en proyectos de software personal que les interesan en su tiempo libre.

    Desarrollador
    Ellos escriben el código. Es importante que esté bien factorizado y limpio, pero otros factores a menudo tienen prioridad. Las habilidades matemáticas son muy opcionales, pero ayuda a ser consciente de los problemas comunes y las soluciones relacionadas con el dominio en el que se encuentran. Las habilidades de comunicación y de las personas son primordiales. La dinámica del proceso y del equipo son habilidades básicas. Son generalistas consumados sin ninguna especialización verdaderamente profunda . Son expertos en encontrar formas de evitar problemas y conectar componentes para cumplir un conjunto de requisitos. En su tiempo personal, están intentando construir el próximo Facebook o participar en actividades que no tienen nada que ver con la programación, el desarrollo o la informática.

    • Los desarrolladores son programadores en mayor o menor medida.
    • Los informáticos son programadores en mayor o menor medida.
    • El software empresarial es el dominio del desarrollador.
    • Los Googles y Microsofts del mundo persiguen a los programadores (y en menor medida a los informáticos). Los desarrolladores que terminan allí se convierten en gerentes de producto.
    • RnD y academia son el dominio del informático (y en menor medida el programador)

    Lo que hay que recordar aquí es que ninguno de los tres es despectivo o ” malo ” de ninguna manera. Uno no es más o menos deseable que cualquiera de los otros. Son simplemente dimensiones diferentes ( con algunos cruces ) del campo en el que todos estamos involucrados. Personalidades particulares se identificarán más con una, pero eso no significa que las tres no puedan ” desangrarse ” entre sí y combinarse favorablemente. Es completamente posible ser un desarrollador increíble y un gran programador ( aunque es difícil con tantas cosas importantes en las que centrarse ). yo

    Encuentro que la mejor clasificación es la siguiente:
    Informático : desarrolla algoritmos fundamentales basados ​​en las matemáticas, analiza el rendimiento algorítmico de varios parámetros, etc.
    Desarrollador : reúne algoritmos conocidos en un método para resolver un problema del mundo real. En esencia, aplica el trabajo fundamental
    Programador : toma el trabajo de los científicos y desarrolladores informáticos y lo traduce en código que se ejecutará en cualquier máquina que sea relevante.

    una persona puede tener atributos de cualquiera de estos roles. Esta es una investigación fundamental simple para la transición orientada a las habilidades. Compare eso con una situación en la que tiene que diseñar una prueba de diagnóstico basada en la secuencia de ADN.
    Hay un científico que descubre la PCR y la aplica a la secuencia de interés, y un ingeniero que la diseñará en una forma más útil, y un técnico que lo hace con regularidad, y los tres finalmente proporcionan la solución.

    Según yo:
    Codificador: Alguien que escribe código a partir de un pseudocódigo (código escrito para ser entendido solo por humanos. Busca en Google si no sabes lo que significa).

    Programadores: Alguien que escribe código de un problema, creando pseudocódigo ellos mismos.

    Ingeniero de software: uno crea software ensamblando el código. A veces también pueden escribir partes de código para crear el software.

    Hackers: Uno que es más ineligente que los demás. Conozca casi todo lo que hay que saber sobre computadoras. Nadie sabe de su identidad ya que la mantienen en secreto.

    Crackers: algo tan inteligentes como los hackers, pero usan su inteligencia para malos propósitos.

    Informáticos: trabajan en teoremas, álgebra (booleana), etc. Son literalmente científicos en informática.

    Desarrollador: Uno que es más versátil y puede crear aplicaciones simples completamente por su cuenta. Algo parecido a los ingenieros de software pero novatos.

    Desarrollador web: un desarrollador que trabaja en páginas web y aplicaciones.

    Estás aprendiendo HTML y CSS. Estos son idiomas para un desarrollador web. Pero estos apenas son lenguajes de programación. Una vez que llegue a Javascript, será un poco difícil para usted. Para aprender Javascript primero, debe leer la página del libro en 7chan.org (Javascript: The Good Parts)
    Realmente ayudará, pero ya deberías saber algo de Javascript. No te sumerjas en el libro. Además de estos, debe aprender un lenguaje poderoso como Java, C, C ++, etc.
    Ingrese a Topcoder y también trabaje en algunos proyectos interesantes en GitHub si es realmente serio.

    TL; DR

    Computadora + Ingeniero, Científico, Programador, Desarrollador, todos van al mismo resultado final.

    Educativamente , existen ingenieros de software y científicos de software, programador y desarrollador son eufemismos industriales para el trabajo que se está realizando. Los graduados de ingeniería de software necesitan realizar pasantías, lo que los hace un poco más “listos” para el mercado laboral real que los especialistas en informática, pero eso es todo.

    Profesionalmente, prácticamente no existe diferencia en cuanto al trabajo que realizan. Sin embargo, el título de ingeniero de software en sí puede ser un problema en algunos países sin la designación de ingeniero profesional (P.Eng). Por ejemplo, en Canadá, el título de Ingeniero de Software está específicamente reservado para P.Eng y, según la provincia en la que se encuentre, es posible que no pueda usarlo como empleador. Sin embargo, en EE. UU., El título de ingeniero en el puesto de trabajo es un privilegio industrial y el concepto de ingeniería profesional no se aplica al campo de la informática / ingeniería.

    Es más oscuro de lo que debería ser. Tengo una Maestría en Ciencias de la Computación con enfoque en Ingeniería de Software. La ingeniería de software se define típicamente como la aplicación de las mejores prácticas de ingeniería tradicionales y nuevas para la creación de software. Esto generalmente implica aprender sobre los diversos enfoques para cada una de las fases de desarrollo de software: análisis de requisitos, diseño, codificación, pruebas, mantenimiento e implementación. El desarrollo de software, en mi opinión, es algo más informal, una expansión o sinónimo de “programación”.

    Algunos o todos estos términos parecen sufrir una pequeña inflación de títulos para mí. En el pasado (los años 70 y 80), cuando la cascada SDLC era el modelo de desarrollo principal, las personas que escribían código eran “programadores” y las personas que escribían documentación eran “analistas de sistemas”. Ahora el código está escrito por “ingenieros de software” o “desarrolladores de software” y el documento está escrito por “arquitectos”, “diseñadores” o “marketing”.

    La verdad es que la ingeniería de software abarca todo lo anterior.

    Un poco de consejo relacionado. Evite como las compañías de Ébola donde los diseñadores no programan y los programadores no diseñan.

    Pasé tres años en una empresa que analiza de cerca los títulos de trabajo. Si bien puede no haber una diferencia en la superficie entre “Desarrollador de sitios web” y “Programador de computadoras”, estos trabajos tienen descripciones de trabajo distintas. Hay muchos sitios web que le darán estimaciones de amplio rango de salario. Aquí hay un ejemplo de Salario experto.


    Estas estimaciones se basan en una variedad de factores, como años de experiencia, nivel educativo e incluso el código postal donde existe el trabajo. Los datos se recopilan de dos fuentes principales: proporcionados por los empleados y proporcionados por el empleador. La primera es muy poco confiable y tratada como tal por los economistas que analizan estos datos.

    Después de haber sido un desarrollador de sitios web que trabaja para la compañía que produjo este gráfico, puedo decirle que no confío mucho en estas estimaciones. Sin embargo, si observa varios sitios como PayScale – Comparación de salarios, Encuesta de salarios, Búsqueda de salarios y ¡Bienvenido a Salary.com! , obtendrá una mejor idea de qué título de trabajo le queda mejor.

    La diferencia clave entre los roles de desarrollador y arquitecto

    Visión, responsabilidad y liderazgo.

    En nuestro último grupo de usuarios, preguntamos a las personas cuál creían que era la diferencia clave entre los roles de desarrollador y arquitecto. Dije que publicaría los resultados, así que aquí están:

    • El arquitecto tiene la responsabilidad de garantizar la coherencia de todos los aspectos del proyecto como un sistema integrado.
    • Arquitecto responsable de la calidad técnica general, desarrollador de decisiones de implementación más bajas.
    • Autoridad y conocimiento.
    • El arquitecto mantiene la visión y observa el sistema antes de que se construya.
    • Ser el titular de la visión.
    • Cuánto tiempo tardan en deshacerse de sus errores.
    • El dinero y la voluntad y el impulso para liderar a las personas.
    • Autoridad y liderazgo.
    • Un líder que puede aplicar / compartir su amplia experiencia.
    • Supervisor pragmático de la solución técnica.
    • Poder, fama, dinero.
    • Responsabilidad y responsabilidad.
    • Comunicándose tanto con el negocio como con los técnicos, vendiendo la visión a ambos.
    • (¿siempre?) Tener las mejores ideas de diseño.
    • Visión.
    • Alcance y visión.
    • Responsabilidad.
    • Altitud (el tamaño de sus horizontes) o la cantidad de tiempo que pasa en las reuniones :-).
    • Los arquitectos son más guapos.
    • Mirando hacia afuera, no mirando hacia adentro desde el equipo de desarrollo.
    • Tu impresión de ti mismo y la impresión de los demás de ti.
    • Su visión de los sistemas. Los arquitectos pueden ver micro y macro (hacia adentro y hacia afuera) mientras que los desarrolladores ven micro y hacia afuera y necesitan que el arquitecto los lleve para ver macro / hacia afuera.
    • Mantener y comunicar una visión macro consistente del sistema en desarrollo.
    • Necesitar tener una opinión pero delegar y escuchar a los demás.
    • Un arquitecto adopta una visión holística y es (con suerte) capaz de comprender el panorama general.
    • Tomar decisiones de diseño más grandes (que no se pueden “deshacer” fácilmente) y asumir la responsabilidad de ellas.
    • Preocupado con la imagen más grande.
    • Arquitecto define arquitectura, infraestructura, diseño general del sistema, tecnologías y marcos. El desarrollador lo implementa.
    • No hay una sola diferencia clave, pero una es que los desarrolladores no son responsables de todo el proyecto, pero los arquitectos sí.
    • Responsabilidad, es decir, alcance, unificación de equipos y clientes.

    Creo que estarás de acuerdo; Hay algunas respuestas realmente interesantes. La visión y “ver el panorama general” son los temas más comunes, aunque la responsabilidad y el liderazgo también tienen una gran importancia. Si está leyendo esto y no se unió al grupo de usuarios, ¿qué piensa?

    Hablando de grupos de usuarios, el próximo está programado para el martes 4 de marzo y presentaremos / discutiremos un estudio de caso de un pequeño proyecto en el que participamos un par de nosotros el año pasado. Seguirán más detalles, pero esta es su oportunidad de diseccionar un pequeño proyecto y echar un vistazo a las razones detrás de las decisiones que tomamos.

    La programación es una pequeña parte del proceso de desarrollo de software.

    La programación es solo la parte de tomar una especificación y convertirla en un programa.

    El desarrollo de software abarca el campo Req reunión, prueba, programación, implementación y entrega.

    El ingeniero de software es alguien que no solo puede programar sino que también puede optimizar el proceso con los programas. Esto es importante porque para muchos escenarios la respuesta correcta es cambiar primero el proceso y luego descubrir la solución tecnológica.


    Entonces, si estuviéramos diagramando esto

    Ingeniero informático y programador informático son dos nombres incorrectos en la industria de TI. En la industria, ni el programador ni el ingeniero describen el papel del empleado que desempeña.

    Lo que está preguntando aquí está estrechamente relacionado con ” ¿Cuál es la diferencia entre Ciencias de la Computación e Ingeniería y Ciencias de la Computación?

    Bueno, el ingeniero informático trata la mayoría de los casos con partes de hardware + software de un sistema en particular. Como el desarrollo de procesadores, GPU, placa base, aplicaciones en chip, dispositivos de interfaz, micro programación (relacionada con microprocesadores), aplicaciones de gestión de memoria, suministro de carga, ciclos de ráfaga de CPU, etc.

    Ingeniero informático = Ingeniero de software + Ingeniero eléctrico + Pionero de hardware

    Mientras que, Computer Programmer siempre se encuentra jugando con el desarrollo de aplicaciones de software. Su enfoque principal es desarrollar, mantener y probar software . Generalmente, un programador informático es el único responsable del desarrollo de un módulo particular / pequeña parte indivisible del software.

    Programador de computadoras = Desarrollador de software + Familiarizado con lenguajes de computadora + Conoce tecnologías de sitios web – Enfoque eléctrico

    Nota: en la ecuación anterior resté el Enfoque eléctrico 🙂

    Cualquier duda ??

    Desarrollador: Oficina de Estadísticas Laborales de EE. UU.

    Programador de computadoras: Oficina de Estadísticas Laborales de EE. UU.

    Desarrollador web: Oficina de Estadísticas Laborales de EE. UU.

    Arquitecto de redes informáticas: Oficina de Estadísticas Laborales de EE. UU.

    Tenga en cuenta que la Oficina de Estadísticas Laborales de EE. UU. No desglosa la ocupación como usted. No incluyen al ingeniero de software, que anteriormente se equiparaba con el desarrollador.

    El único arquitecto que enumeran es un arquitecto de redes. Esto puede no ser porque están atrasados. La arquitectura es un trabajo para un desarrollador / ingeniero de software.

    La descripción del programador casi suena como un codificador, que puede no existir fuera del ámbito de un mecanógrafo especial.

    Puede obtener un PE en ingeniería de software, pero es probable que el examen fundamental sea la versión de ingeniería de sistemas digitales de EE. Siempre pensé que el examen fundamental era general, que requería revisión de química, bioquímica, junto con termo, electrónica, etc. Los sistemas digitales FE son menos abarcativos. Tengo problemas con eso, ya que estoy más dispuesto a querer revisar la mecánica y la IA. Entonces, el sistema digital omite la mecánica (tratando de recordar cuánto) y menciona la IA. (Es esta mención de una vez).

    Puedes ser consultor incluso si te contratan en W2. Pero, 1099 es la forma habitual.

    La ley es básicamente que, como consultor, usted es quien debe decidir cómo avanzar en un proyecto, y establece sus propias horas de trabajo. ¿Cuántas horas le quedan al proyecto? Y puede contratar a sus propios muchachos si es necesario (pero eso depende más de cosas como la junta estatal de ecualización u otras oficinas similares).

    Muchos de estos límites son arbitrarios y no reflejan los requisitos reales del trabajo, los proyectos o el mantenimiento de los productos.

    No es que la Oficina de Estadísticas Laborales de los Estados Unidos diga que el trabajo de programación (en su forma pura) está disminuyendo. Pero, dice que la web está aumentando mucho. Pero, incluso ellos no pueden predecir el futuro.

    Hay una distinción útil entre estos términos. A algunas personas no les gusta hacer la distinción, pero puede ser necesario y útil saber la diferencia entre diferentes niveles de habilidad, habilidad y experiencia.

    Como ingeniero y gerente de ingeniería, es esencial para mí saber esto sobre las personas con las que trabajo o contrato. Tampoco quiero poner a alguien por encima de su cabeza, eso los frustra y hace que el producto sea malo. Tampoco quiero desperdiciar la habilidad y habilidad de alguien con un trabajo trivial. Eso también es malo tanto para ellos como para la empresa. También es bueno que la gente sepa sobre las otras personas en sus equipos también.

    Un programador es una persona que puede escribir código y crear software, pero a menudo lo hace según el diseño y las especificaciones del sistema de otra persona. Los programadores a menudo carecen de un conocimiento más profundo del lenguaje y la plataforma en la que están trabajando.

    Un desarrollador de software es un programador experimentado que puede diseñar componentes principales de un sistema con éxito. Un desarrollador tiene un profundo conocimiento del idioma y la plataforma con la que está trabajando.

    Un ingeniero de software es un desarrollador que puede pensar con éxito en todo el sistema desde una vista de arquitectura de todo el sistema hasta el diseño e implementación de componentes más detallados y puede ver los efectos de los cambios de un área del sistema a otra. Entienden las compensaciones de ingeniería que se están haciendo y pueden ver las consecuencias de esas compensaciones.

    La programación es principalmente codificación. La ingeniería es principalmente diseño, es decir, pensar en cómo interactuará su codificación con el otro código que ha escrito, el SDK del idioma, la plataforma, etc. Los tres niveles necesitan saber cómo codificar, pero cuanto más alto vaya, más el énfasis está en los efectos del código y menos en las realidades prácticas de escribir ese código.

    • Codificadores: pueden entenderlo. Funcionará, pero no será bonito.
    • Programador: escriba código y comprenda algoritmos. A menudo trabajan solos y bien.
    • Desarrollador: son los mejores generalistas, pueden usar muchos sistemas e idiomas diferentes y hacer que se comuniquen entre sí. Son verdaderos y amplios profesionales, trabajan con personas y se comunican bien.
    • Ingeniero de software: un ingeniero de software es alguien que aplica un enfoque formal o estructurado para el desarrollo de software. Piensa en la corrección, integridad, reutilización y trabajabilidad que coinciden con el objetivo final para el producto terminado. Una definición alternativa buena y corta puede ser: un ingeniero de software es uno empleado para resolver problemas mediante la aplicación de tecnología de la información.
    • Los desarrolladores son programadores en mayor o menor medida.
    • Los informáticos son programadores en mayor o menor medida.
    • El software empresarial es el dominio del desarrollador.

    More Interesting

    Soy un desarrollador de software que desarrolla IU con QT C ++ y conozco la programación de sistemas integrados para microcontroladores PIC. Tengo interés en explorar el desarrollo del kernel de Linux y los BSP. ¿Cuál debería elegir para mi carrera a tiempo completo dada la tendencia reciente?

    Estoy comenzando mi estudio como desarrollador de software. ¿Cómo debo convertirme en un desarrollador exitoso en grandes empresas?

    Cómo comenzar mi carrera como probador de software sin experiencia

    ¿Es cierto que no es probable que los desarrolladores de software se conviertan en CEO porque no están dispuestos a abandonar la programación y centrarse solo en los negocios?

    ¿Cuál es la mejor empresa de desarrollo de software en Estados Unidos?

    ¿Cuál es un buen plan de un año para convertirse en desarrollador de software?

    ¿Cuáles son algunos problemas para los equipos y clientes de desarrollo de software?

    ¿Es cierto que los desarrolladores de software no pierden el tiempo en televisión o películas, y dedican todo su tiempo libre a proyectos paralelos y a mejorar sus habilidades técnicas?

    Como desarrollador de software, ¿cómo debo mantenerme fuerte y seguro cuando alguien dice que mis habilidades técnicas son malas?

    ¿Qué tan alta es la barrera de entrada para Apache Spark para tareas que no son de aprendizaje automático?

    ¿Puede uno convertirse en desarrollador de software después de los 40? ¿Conoces a alguien que lo hizo con éxito?

    ¿Por qué hay cada vez más desarrolladores de software que pierden sus trabajos cuando envejecen?

    Cómo pasar de ser ingeniero / desarrollador de software a ejecutivo

    Como desarrollador de software, ¿cuál es un buen nicho para entrar donde puedes reunir a algunos amigos y desarrollar un producto para vender?

    ¿Debo hacer una maestría en ingeniería de software si quiero convertirme en desarrollador de software? ¿Hay alguna alternativa mejor?