¿Cuándo puede llamarse ingeniero de software, es simplemente un programador o este título no es tan importante?

Veo la diferencia entre el programador y el ingeniero de software análoga a la diferencia entre un técnico y un arquitecto.

Un personal de mantenimiento sabe cómo hacer las cosas y tiene las herramientas para hacerlo. Sin embargo, el personal de mantenimiento está especializado. Un personal de mantenimiento en general puede hacer la mayoría de las cosas en la casa a menos que sea algo relacionado con plomería, calefacción, refrigeración o electricidad. Si necesita algo de fontanería, calefacción, refrigeración o electricidad, debe llamar a un técnico, que es más o menos un técnico especializado que ha aprendido las herramientas para reparar / mejorar ciertos sistemas complicados.

Un arquitecto, OTOH, tiene el conocimiento de todos los sistemas de la casa. Él / ella puede construir todo por sí mismo, aunque no lo hará. El arquitecto tiene la habilidad de comprender sus necesidades y traducirlas en ideas que pueda usar. El arquitecto no solo se preocupa por construir una casa para usted. Él / ella también se preocupa por cómo la casa interactúa con tu vida. ¿Que necesitas? ¿Qué necesitan tus hijos? ¿Cómo afecta su hogar a su vida laboral? ¿Cómo afecta tu vida social? ¿Cómo se adapta a tus pasatiempos? El arquitecto también sabe cómo hacer lo mismo de múltiples maneras, y puede elegir entre ellas. El arquitecto también se mantiene actualizado con las últimas herramientas y tecnologías, y se capacita en esas tecnologías. Y para mantenerse al tanto de los nuevos cambios, el arquitecto debe tener el conocimiento central de la ciencia detrás de las herramientas y tecnologías. Esto lo ayuda a aprender cosas nuevas más rápido. Esperas que el arquitecto sepa las mismas cosas que sabe el personal de mantenimiento, pero a un nivel más profundo de abstracción

En pocas palabras, el arquitecto va más profundo y más amplio que el personal de mantenimiento. Él / ella no solo conoce las cosas con un mayor nivel de detalle, sino que él / ella se encarga de comprender las cosas más allá de la tarea actual. Esto le permite al Arquitecto trabajar con mucha confusión. Cuando las cosas no están claras, las deja claras. El personal de mantenimiento sería más o menos, “dime qué hacer, lo haré”. El personal de mantenimiento sabe cómo hacer las cosas. El arquitecto debe saber cómo hacer las cosas.


Del mismo modo, un programador debe tener la capacitación técnica para hacer el trabajo. Puede que se especialice en una tecnología de nicho (desarrollo web, base de datos, big data, bla, bla), pero es de esperar que el programador haga un trabajo con objetivos bien definidos. Dales requisitos y diseño; ellos saben cómo usar las herramientas / tecnologías. Deberían poder descifrar el código.

Un ingeniero de software, OTOH, debería poder ser mucho más amplio y profundo, y también lidiar con mucha confusión. Él / ella debería poder describir cómo funciona cada parte del sistema, y ​​debería ser capaz de describir con un nivel de detalle más bajo. Al mismo tiempo, el ingeniero de software debería ser capaz de lidiar con los requisitos difusos. Debe saber cómo solicitar aclaraciones para que las necesidades del usuario puedan traducirse en algún tipo de idea de trabajo. El ingeniero de software debe poder capacitarse en nuevas tecnologías. El ingeniero de software debería preocuparse por cómo interactúa el sistema que se está construyendo dentro de su ecosistema. Debes poder pensar en Rendimiento / Integeración / Seguridad / Estabilidad. El ingeniero de software debería poder responder por qué las cosas se hacen de cierta manera


El problema está en la industria de TI, el ingeniero de software no existe (o existe, se llama Arquitecto y, a veces, se coloca en una torre de marfil). Y el programador puro tampoco existe. La mayoría de las personas que tienen títulos de TI tienen algún tipo de capacitación que los convierte en ingenieros. Se les da el conocimiento de la ciencia central detrás de la informática para que puedan capacitarse aún más. Sin embargo, los trabajos de programación junior los usan como programadores. Entonces, tienden a perder toda la capacitación y comienzan a llamarse a sí mismos como programadores. Cualquiera que se considere un programador está mirando las cosas de manera incorrecta. Tu trabajo no es programar. Tu trabajo es resolver problemas. Y resolver problemas es una función de ingeniería

Esta es la cosa # 1 que me frustra sobre los jóvenes en la industria de TI. A muchos de ellos se les ha hecho creer que su trabajo es programar. No No No No. No necesitamos programadores. Necesitamos ingenieros que puedan resolver problemas. Si está resolviendo problemas y puede trabajar con ambigüedades para producir una idea que funcione, entonces usted es un ingeniero, no un programador. No tengas miedo de llamarte ingeniero

Sí, en última instancia, los títulos no importan. La actitud importa. La actitud de que las personas que trabajan con código son programadores lleva a la idea de que deben recibir requisitos perfectamente escritos, con un diseño perfectamente hecho, y si no los tienen, entonces se sentarán en sus manos. Esta actitud es la cosa # 1 que frena a la mayoría de los desarrolladores jóvenes. Lo que necesitamos son personas capaces de decirme, decirme lo que necesita, y se me ocurrirán algunas ideas. Esa es una mentalidad de ingeniería.

La programación es una herramienta de implementación. La ingeniería es un conjunto mucho más amplio de habilidades y técnicas. Por lo tanto, un “ingeniero de software” involucra muchos otros aspectos además de simplemente “programar”.

Ingenieros “construir”. Básicamente. Por lo tanto, se espera que “construya” sistemas de software. Para lograrlo, puedo asociarme con otro proveedor, evaluar soluciones empaquetadas y seleccionadas, dirigir un equipo de proyecto, evaluar y rediseñar una solución heredada, o simplemente sentarme y “construir” un prototipo. Todo esto es para definir una especificación de solución. Paso poco tiempo en realidad programando. Por el contrario, un programador pasará la mayor parte de su tiempo “escribiendo código”. Escribo las especificaciones: los códigos del programador para cumplir con mi diseño.

Un arquitecto de software lleva este nivel más arriba, en abstracción. Son responsables de seleccionar o desarrollar estándares para los que se construirá todo el software, y poseen la arquitectura de la solución general (varios bits de software). Hay muchas más interacciones comerciales y ejecutivas con las que lidiar. Los arquitectos pueden haber programado en sus inicios, pero hacen poco o nada una vez que tienen el rol de arquitecto.

He realizado muchos proyectos que involucran tanto hardware como software. Nunca “ diseño ” o “ fabrico ” computadoras, pero he hecho una gran selección de sistemas, dimensionamiento y evaluación comparativa. Considero que otro papel para el ingeniero de software. La mayoría de los ingenieros de hardware tienen muy poca profundidad en los sistemas de software. Y dado que el hardware de la computadora es realmente una mercancía en estos días (en comparación con hace 30 años), incluso muchas de las arquitecturas de la computadora (SPARC, Silicon Graphics, Intel, etc.) son solo parte de la historia. El cambio a la computación en la nube hace que el hardware sea aún menos significativo. Pero comprender el impacto de pasar del escritorio a la nube (o del mainframe a la nube), esto puede ser bastante exigente, y querrás un ingeniero de software ‘real’ en tu equipo.

En los EE. UU., Si tiene una licencia estatal, su título es “Ingeniero profesional”, que es necesario para la ingeniería civil y mecánica, especialmente importante para proyectos públicos. Es similar a una licencia de arquitecto. Pero tales pruebas y certificaciones nunca se idearon para el negocio del software, por lo que existe mucha confusión sobre lo que realmente significan varios títulos.

En los últimos 30 años, se han realizado muchos esfuerzos para lograr que la ingeniería de software cumpla con la “certificación profesional”. La mayoría de las personas que financian proyectos realmente quieren saber qué calibre de individuos están aportando a un proyecto. Si alguna vez sucediera, las realidades comerciales del negocio de software lo dejarían de existir simplemente porque tiene que “pagar más” por alguien que tenga una certificación profesional. También tiene problemas de responsabilidad profunda cuando se trata de medicina, aviónica, etc., de que una certificación profesional (si existiera para el software) estaría transfiriendo esa responsabilidad al profesional. ¿Alguna vez has leído una licencia de software? ¡No garantiza nada! Sin aptitud de uso. Sin garantía de idoneidad. ¡Ni siquiera la garantía de que realmente funciona según lo previsto! Tenemos un largo camino por recorrer para brindar una verdadera certificación a los sistemas de software. Y eso simplemente NO es en lo que están interesadas las compañías de software.

No importa qué título use, su currículum y cartera de proyectos son lo único que le importa a un posible empleador. Tienes que demostrar lo que puedes hacer, no importa si recién estás comenzando o si tienes 20 años de experiencia. A menudo le darán el título que desee, fuera de las organizaciones gubernamentales o de cumplimiento. Personalmente, espero que alguien que se hace llamar “ingeniero de software” tenga algún tipo de título de ingeniería. De cualquier tipo, y sé que entenderán cómo hace las cosas un ingeniero. Sin ella, generalmente me enfrento a algunos desafíos.

Realizo muchas tutorías y construiré una pista de certificación en esos proyectos. No me gusta dar certificados de capacitación, quiero que demuestre que puede completar un proyecto ‘real’ en un entorno ‘real’. Últimamente he estado haciendo “pistas de certificación” con Page en coursera.org para Data Science y Data Mining. Ambos conducen a “proyectos finales”, un proyecto real, con datos reales, para un cliente real, ¡perfecto! Estoy agregando estas “certificaciones” a mi currículum. ¿Tal vez obtendré una tasa de consulta más alta? ¿Tal vez conseguiré más negocios? Realmente no lo se. Pero esta es la única pista de certificación ‘abierta’ significativa que he experimentado. Por supuesto, existen las certificaciones de Microsoft y Cisco, pero creo que están muy enfocadas en el sistema operativo y la red, lo que no es especialmente útil para un “ingeniero de software”.

¿Crees que los ingenieros de software necesitan saber sobre minería de datos y ciencia de datos? Hay un montón de ingeniería de software realizada en Google, y nadie tiene una certificación de ingeniería … Pero si quieres construir algo, eso nunca se ha hecho antes, querrás ”
ingenieros “, no” programadores “.

Mucha gente ya ha escrito sus pensamientos.
Eso no significa que sean correctos. Perdieron dar suficiente referencia para corroborar su reclamo.

La programación y la ingeniería de software es algo totalmente diferente.
Las habilidades de programación son un subconjunto de las habilidades de Ingeniería de Software .

Para llamarse ingeniero de software primero, necesita saber qué es la ingeniería de software:
Del libro Ingeniería de software: un enfoque profesional de ROGER S. PRESSMAN, está escrito que:
Para construir un software que esté listo para enfrentar los desafíos del siglo XXI, debe reconocer algunas realidades simples:

  • El software se ha integrado profundamente en prácticamente todos los aspectos de nuestras vidas y, como consecuencia, la cantidad de personas que tienen interés en las características y funciones proporcionadas por una aplicación específica ha crecido dramáticamente. Cuando se va a construir una nueva aplicación o sistema embebido, se deben escuchar muchas voces. Y a veces parece que cada uno de ellos tiene una idea ligeramente diferente de las características y funciones del software que se deben entregar. Se deduce que se debe hacer un esfuerzo concertado para comprender el problema antes de desarrollar una solución de software .
  • Los requisitos de tecnología de la información exigidos por individuos, empresas y gobiernos se vuelven cada vez más complejos con cada año que pasa. Grandes equipos de personas ahora crean programas de computadora que una vez fueron creados por un solo individuo. El sofisticado software que alguna vez se implementó en un entorno informático predecible y autónomo ahora está integrado en todo, desde productos electrónicos de consumo hasta dispositivos médicos y sistemas de armas. La complejidad de estos nuevos sistemas y productos basados ​​en computadora exige una atención cuidadosa a las interacciones de todos los elementos del sistema. De ello se deduce que el diseño se convierte en una actividad fundamental .
  • Las personas, las empresas y los gobiernos confían cada vez más en el software para la toma de decisiones estratégicas y tácticas, así como para las operaciones y el control del día a día. Si el software falla, las personas y las grandes empresas pueden experimentar desde inconvenientes menores hasta fallas catastróficas. De ello se deduce que el software debe exhibir alta calidad .
  • A medida que crece el valor percibido de una aplicación específica, lo más probable es que su base de usuarios y su longevidad también crezcan. A medida que aumente su base de usuarios y el tiempo de uso, las demandas de adaptación y mejora también crecerán. De ello se deduce que el software debe ser mantenible .

Estas realidades simples conducen a una conclusión: el software en todas sus formas y en todos sus dominios de aplicación debe ser diseñado .
Aunque cientos de autores han desarrollado definiciones personales de ingeniería de software, una definición propuesta por Fritz Bauer en la conferencia seminal sobre el tema todavía sirve como base para la discusión:

[Ingeniería de software es] el establecimiento y uso de principios de ingeniería de sonido para obtener económicamente software que sea confiable y funcione eficientemente en máquinas reales.

(para más definiciones ver Ingeniería de software)


El IEEE desarrolló una definición más completa donde establece:
Ingeniería de software es:

  1. La aplicación de un enfoque sistemático, disciplinado y cuantificable para el desarrollo, operación y mantenimiento de software; es decir, la aplicación de la ingeniería al software.
  2. El estudio de enfoques como en (1)

Si ha adquirido todas las habilidades descritas en Ingeniería de software, siéntase orgulloso y llámese Ingeniero de software.

Prefiero llamarme programador (o, mejor, tecnólogo ). Sí, los títulos de trabajo son lo suficientemente importantes como para que siempre negocie un título de ingeniería “equivalente al Director” en el proceso de oferta, solo porque me doy cuenta de que en el mundo real es necesario tener rango para hacer una mierda, porque así es como las organizaciones humanas son. Sin embargo, todo eso es realmente tonto.

Si alguna vez dirijo una empresa, el título principal será programador . Es decir, eres excelente en lo que haces y no tienes que justificarte. Los títulos sexys se darán a las personas de las que quiero deshacerme, pero que no son lo suficientemente malas como para despedir, a fin de que les sea más fácil seguir adelante.

El “ingeniero de software” es asqueroso y corporativo para mí. Usaré el término para hablar la lengua materna, pero lo que hacemos no es realmente ingeniería y el término es incorrecto. Estaría más de acuerdo con (y menos insultado por) el término si realmente se nos permitiera emplear la diligencia y la atención de ingenieros reales, en lugar de que se esperara que la mayoría de nosotros trabajemos en plazos nunca probados y descuidados.

Usted es un “ingeniero de software” cuando diseña software como profesión .

El software de ingeniería incorpora la idea de diseñar y desarrollar nuevas aplicaciones de software. Un programador (en mi opinión) podría ser un ingeniero de software, pero también podría ser un aficionado, un novato o alguien que simplemente toma los diseños de otras personas y los implementa.

El término “ingeniero” generalmente connota un estatus profesional, en oposición a un simple pasatiempo o interés.

EDITAR:
Tenga en cuenta que en el término “ingeniero de software”, la palabra “ingeniero” no tiene las mismas connotaciones que tiene con términos como “ingeniero civil” o “ingeniero industrial”. Con esos términos existe la idea de acreditación, regulación y licencia. Alguien no puede llamarse a sí mismo “ingeniero” e ir a diseñar y construir un puente colgante para uso público.

Sin embargo, en el momento de escribir este artículo, hasta donde yo sé, no existe una organización reguladora o de licencias para la ingeniería de software que tenga suficiente respeto y poder entre los profesionales del software que sus estándares se consideren autorizados.

Además de todas las diferencias teóricas en la definición, experimento una distinción muy práctica entre un “ingeniero de software” y un “programador”:

Un programador parece ser visto como alguien que es bueno escribiendo programas de computadora a pequeña escala (guiones, clases, funciones, …). Resuelve problemas de forma práctica y codifica pequeños guiones en muy poco tiempo. Pero un programador no tiene experiencia o incluso el concepto de un sistema grande que debe mantenerse durante más tiempo y debe vivir en entornos complejos (infraestructura, muchos usuarios, demandas de rendimiento). En ese sentido, un programador es visto como alguien que puede construir muy buenas casetas de perro, pero nunca se le confiaría el proyecto de construir un rascacielos.

Un ingeniero de software es alguien que tiene experiencia y métodos para hacer frente al software que dura más de unas pocas semanas y es más grande que unos pocos archivos en una máquina. Él es el único de confianza para construir un rascacielos. Importante: el ingeniero de software todavía escribe (o elimina) el código la mayor parte de su tiempo.

¡Un arquitecto de software es alguien que nadie necesita! Las personas que se autodenominan arquitecto de software, por lo general ya no escriben código, pero intentan decirle a otras personas (ingenieros de software y programadores) cómo escribir y organizar su código. En ese sentido, son casi tan tóxicos para un proyecto como los consultores que no se ensucian las manos al menos de vez en cuando.

Esta es solo mi experiencia personal de las connotaciones prácticas asociadas con los términos programador e ingeniero de software. Puede ser diferente donde vives.

Técnicamente, nadie puede llamarse a sí mismo un “ingeniero de software”, ya que el uso del término “ingeniero” solo se puede aplicar a aquellos bajo la ley estatal que han aprobado los requisitos de licencia y certificación para la profesión de ingeniería. Legalmente hablando, no puedes llamarte a ti mismo con el sufijo “Ingeniero” en el título si no tienes licencia específica como tal.

Algunos estados lo restringen. Otros solo lo aplican si usted se destaca como un ingeniero profesional que ofrece servicios al público. En otros lugares como Canadá, no puede llamarse a sí mismo un “ingeniero” a menos que tenga una licencia como tal. Es un término protegido. Si bien no se aplica en industrias como TI, es técnicamente ilegal en Canadá llamarse a sí mismo un “ingeniero de software”.

Para mí, el sueldo, no el título, importa. Es un fenómeno cultural interesante donde la gente le da importancia a los títulos. Personalmente, podrías llamarme “Reina Sheba, Señora de la Lógica y Alquimista del Código Sagrado” y no me importaría mientras me pagaras a la tarifa acordada. Pero no tomaría un recorte salarial solo para obtener un mejor título.

En mi trabajo profesional ni siquiera firmo mi correspondencia con mi título. Lo veo como una forma de acicalamiento y pretensión para impresionar. El título solo es importante para mí, ya que necesito saber con quién estoy tratando.

Entonces no, no es importante para mí. La competencia importa, no el título.

Puede llamarse a sí mismo un ingeniero de software cuando sepa cosas completas sobre la mayoría del desarrollo de aplicaciones de software, independientemente de la plataforma o los lenguajes de programación.

Creo que los programadores suelen ser codificadores que codifican según los requisitos especificados en el documento de desarrollo o simplemente traducen el seudocódigo a un lenguaje de programación específico, mientras que un ingeniero de software puede comenzar desde el estudio de factibilidad y puede realizar efectivamente análisis de requisitos, diseño de aplicaciones de software, desarrollo real en el lenguaje / plataforma de programación deseado, pruébelo e impleméntelo con éxito y luego adminístrelo / manténgalo.

Hay muchas buenas respuestas anteriores, pero todavía hay varias cosas que decir sobre la pregunta. Estoy de acuerdo con los carteles que hablan sobre los requisitos más amplios para la Ingeniería de Software y el conjunto de habilidades más amplio requerido. No es necesariamente más valioso que la codificación, pero es diferente.

Cuando piensa en cómo quiere ser definido y qué quiere proporcionar a sus empleadores, vale la pena saber que la industria ha cambiado en el pasado y cambiará en el futuro. Cuando era un cachorro, no era necesario tener un título en informática para obtener un trabajo de programación. Más adelante en mi carrera, mi falta de título me obstaculizó. Obtener una maestría en ingeniería de software ayudó a abrir puertas nuevamente. Un MSCS también lo habría hecho, pero estaba buscando explícitamente un programa más amplio y lo encontré.

El estado de Texas recientemente comenzó a otorgar licencias a Ingenieros Profesionales en Ingeniería de Software. Tienen la intención de impulsar contratos de software estatales para requerir la aprobación de un ingeniero con licencia en el proyecto. Si las personas con esa visión tienen éxito y eso lleva el requisito de ingeniería a otros proyectos de software, veremos otro cambio en la industria.

La ingeniería de software es mucho más que una simple programación, de la misma manera que ser emprendedor no se trata solo de vender.

Claro, un ingeniero de software debe tener conocimientos básicos de programación como un emprendedor debe tener habilidades sociales básicas para “vender” su idea a otros.

Los ingenieros de software saben sobre análisis, diseño, gestión de proyectos, pruebas y el proceso para hacerlo todo. Los ingenieros de software están preocupados y hacen cosas y usan todas las mejores prácticas para repetirlo más tarde con la misma calidad o incluso menos. Por lo tanto, los ingenieros están más preocupados por poder entregar el mismo resultado utilizando el mismo proceso predecible.

Por esa razón, me gusta la definición IEEE de ingeniería de software como la aplicación de un enfoque sistemático, disciplinado y cuantificable para el desarrollo, operación y mantenimiento del software “.

En estos días, el término ‘Programador’ e ‘Ingeniero de Software (Desarrollador)’ se ha utilizado de manera intercambiable. Aquí está la diferencia entre ellos

  • El programador es alguien que puede resolver problemas manipulando el código de la computadora. Pueden tener una amplia gama de niveles de habilidad, desde simplemente estar “bien” con scripts básicos hasta ser un hechicero absoluto en cualquier idioma.
  • El ingeniero de software es un programador formalmente entrenado. No solo resuelven problemas o crean cosas, sino que lo hacen de acuerdo con un conjunto de principios de diseño e implementación. Estos incluyen aspectos como rendimiento, mantenibilidad, escala, robustez y (idealmente) seguridad.

Entonces, cuando te llamas ingeniero de software, te refieres a que eres un programador capacitado.

En una nota más clara, en India, puede llamarse a sí mismo ingeniero de software inmediatamente después de completar su licenciatura.

Este título no es importante ya que diferentes organizaciones tienen diferentes títulos para responsabilidades laborales similares.
Ingeniero de software no significa simplemente un programador, aunque las buenas habilidades de programación son un requisito básico del trabajo. También hay que ser bueno para comprender los requisitos comerciales y sugerir mejores formas de abordar y resolver un problema comercial de manera eficiente.
Simplemente conocer cualquiera de los lenguajes de programación no ayudará mucho, debe ser igualmente bueno en comprender cómo la tecnología está abasteciendo al negocio porque al final del día su negocio genera ingresos con el uso adecuado de la tecnología.

El mismo título en diferentes compañías puede significar lo mismo o no. Fuera del trabajo es similar, pero pierdo interés en los títulos fuera del trabajo.

Los títulos generalmente solo tienen valor para mí durante el proceso de la entrevista y cuando trato de navegar la política en ciertas culturas.

Con algunas organizaciones, ciertos grados de pago solo se pueden lograr en asociación con títulos específicos. Me importa lo suficiente como para que me paguen lo que creo que valgo.

La influencia técnica también puede tener valor para mí. En lugares donde se valora la meritocracia, los títulos no son interesantes.

A menudo he encontrado en la mayoría de los lugares, los problemas más difíciles solo son difíciles debido a la política y no a la tecnología.

En estas empresas, a veces ayuda un título ‘más elegante’. A veces duele.

Puede ser una tontería, pero con los ejecutivos, una mala idea de un “ingeniero principal” a menudo obtendrá más tracción que una buena idea que proviene de un “desarrollador de Java”. Al tratar de crear consenso con los equipos de DevOps, los títulos sofisticados pueden desactivarlos. Con ellos, un título de “Ese tipo que construye cosas que funcionan” suele ser lo suficientemente bueno.

Para responder a la pregunta, me llamo a mí mismo lo que tenga más sentido en la cultura en la que estoy. En una sola gran empresa que puede tener muchas subculturas, mi título cambia mucho.

En el Reino Unido, al menos, “ingeniero de software” no se usó mucho la última vez, “desarrollador de software” era mucho más común. Pero, en muchos lugares, ‘programador’ y ‘desarrollador de software’ se consideraban lo mismo, creo que en realidad solo se trataba de entornos de trabajo más formalizados donde las personas los considerarían cosas diferentes.

Personalmente, veo que ‘programador’ y ‘desarrollador de software’ son lo mismo, pero tal vez cuando lo considero más, es un poco diferente. Quizás un desarrollador / ingeniero debería poder pasar de la nada> al proyecto completado solo, pero quizás no se espera que un programador lo haga.

Sin embargo, mi instinto es que todo es casi lo mismo.

Los títulos tienden a ser específicos de la compañía y generalmente representan una combinación de antigüedad y nivel salarial. Es decir, el mismo título puede significar algo diferente en otro lugar. Esto es particularmente cierto si el título incluye alguna variación en la palabra “arquitecto”. Aunque realmente no veo el título “Programador” usado a menudo …