JavaRush /Blog Java /Random-ES /¿Quién es un ingeniero de software? Ingeniería de softwar...

¿Quién es un ingeniero de software? Ingeniería de software versus programación “simple”

Publicado en el grupo Random-ES
Llamamos su atención sobre una adaptación de un artículo de Samer Buna sobre las diferencias entre ingeniería de software y programación, o cómo el desarrollo de un concepto de software difiere de "simplemente codificar".
¿Quién es un ingeniero de software?  Ingeniería de software VS
Todos los ingenieros de software pueden codificar, pero no todos los programadores pueden desarrollar conceptos de software. A algunas personas no les gusta el término "ingeniero de software" (también conocido como ingeniero de software) porque la mayoría de las veces usamos la palabra "ingeniero" cuando hablamos de algo más físico: construcción, por ejemplo. Nuestro artículo, por supuesto, no trata sobre el término en sí. Si de repente te provoca rechazo, puedes sustituirlo fácilmente por algo relacionado con la creatividad. “Creador de software”, “Autor de software”... ¡o incluso “Creador de software”!
Cuando hablamos de "ingeniero de software", nos referimos a una persona cuya tarea principal no es solo escribir código, sino crear una aplicación de calidad. Y en esto ve su vocación, aplicar un enfoque científico y métodos estadísticos a su trabajo. Para él, la programación no es sólo una forma de ganar dinero para comer.
La capacidad de programar no convierte automáticamente a una persona en ingeniero de software. Cualquiera puede aprender a codificar y es mucho más fácil de lo que parece. Cualquiera puede crear un programa sencillo para su propio uso, pero esto no garantiza que el mismo programa funcione para otros. Mi ejemplo favorito es este: muchos de nosotros cantamos en la ducha, pero, lamentablemente, esta interpretación no siempre es digna de un escenario profesional. Por supuesto, para disfrutar de una experiencia musical de alta calidad, lo más probable es que recurras a un profesional. ¿Necesitas más ejemplos?
  • Todos aprendemos matemáticas y escritura en la escuela, pero eso no nos convierte en matemáticos y escritores.
  • La mayoría de nosotros somos capaces de preparar un plato aceptable y a veces muy sabroso, pero no todo el mundo se atrevería a preparar una mesa para 100 personas para una cena en una embajada. En este caso contratamos a un cocinero.
  • ¿Estás listo ahora mismo para confiar completamente la construcción de tu nueva casa al hijo del vecino que crea impresionantes obras maestras con Lego?
El punto principal que intento transmitir en este artículo es que los programas simples son muy diferentes de los programas diseñados por ingenieros. La definición más simple del proceso de programación: elaborar una secuencia ordenada de acciones para una computadora con el fin de obtener algo específico como salida, dados los parámetros de entrada dados. El proceso de ingeniería de software es el diseño, redacción, prueba y curación de un programa de computadora para resolver problemas para muchos usuarios. Se trata de crear soluciones confiables y seguras que resistirán la prueba del tiempo y funcionarán para algunos desafíos posiblemente desconocidos más allá de lo obvio.
¿Quién es un ingeniero de software?  Ingeniería de software VS
Los ingenieros de software saben todo sobre los problemas que resuelven, las soluciones que proponen, las limitaciones de esas soluciones, su privacidad y seguridad. En mi opinión, si una persona no comprende la esencia del problema, ni siquiera debería empezar a programar su solución.

Mentalidad de ingeniería: búsqueda de soluciones aplicadas

Los ingenieros de software no consideran que escribir software per se sea su objetivo principal. Piensan en términos de satisfacer necesidades y resolver problemas . Esto es importante porque no todos los problemas requieren una solución de software. Algunos de ellos se pueden solucionar utilizando programas existentes. A veces, la aparición de algunos problemas se puede predecir de antemano y, con la ayuda de un diseño de programa competente, se pueden evitar en el futuro.

"Los intelectuales solucionan problemas, los genios los previenen"

- Albert Einstein

¿Quién es un ingeniero de software?  Ingeniería de software VS
Los problemas complejos a menudo requieren escribir muchos programas. Hay tareas que requieren la ejecución de aplicaciones en paralelo, mientras que otras requieren la ejecución secuencial de varios programas. Una serie de problemas pueden resolverse simplemente capacitando a los usuarios. Antes de empezar a crear un programa, un ingeniero de software se plantea una serie de preguntas:
  • ¿Qué problemas debo resolver?
  • ¿Qué más puedes hacer además de escribir código para resolverlos?
  • ¿Qué puedo hacer para facilitar estas tareas con la aplicación?

Calidad del programa y calidad del código.

Los buenos programas son claros y legibles. Son fáciles de ampliar, funcionan bien con otros programas y no será una pesadilla trabajar con ellos. La calidad del código no es negociable. Debe ser alto, eso es todo. Al considerarlo, excusas como el mal humor del programador o plazos demasiado ajustados (¡oh, esos plazos!) son inaceptables. Uno de los aspectos más importantes del desarrollo de software es diseñar el programa de tal manera que sea fácil de mantener y modificar en el futuro (¡hola, POO!). Hoy en día, casi todo el software es modificable; a menudo, este proceso ocurre incluso sin la participación del usuario o no requiere nada del usuario más que "su programa ha sido actualizado, haga clic en Aceptar o Posponer". Por supuesto, los usuarios tienen derecho a exigir nuevas funciones de las aplicaciones (especialmente si hablamos de software empresarial de larga duración escrito en Java o juegos en línea que se pueden jugar durante años).
¿Quieres saber más sobre la programación Java? ¡ Únase al grupo de desarrolladores de Java !
Un fragmento de código por sí solo difícilmente puede considerarse útil. La funcionalidad útil del software comienza cuando distintas aplicaciones se comunican entre sí, intercambian datos y trabajan juntas para realizar la tarea de presentar datos e interfaces a los usuarios.
¿Quién es un ingeniero de software?  Ingeniería de software VS
¡Los programas deben diseñarse teniendo en cuenta estos puntos! ¿Qué mensajes reciben? ¿Qué eventos se monitorean? ¿Cómo se produce la autenticación y la autorización? Otro signo igualmente importante de un buen programa es la claridad del código, no la cantidad de pruebas que ha pasado la aplicación o incluso una buena cobertura de las pruebas. Preguntas aparentemente simples: “¿Puede alguien además de mí entender mi código?”, “¿Podré escribir este código hoy y entenderlo en unas semanas?” Una cita popular sobre las dos cosas más difíciles de la programación dice:

"Sólo hay dos cosas realmente difíciles: la invalidación de la caché y la denominación de entidades"

—Phil Carlton.

La legibilidad del código es mucho más importante de lo que comúnmente se cree. Desafortunadamente, no es posible definir métricas o parámetros precisos para la claridad del código. Memorizar las normas lingüísticas generalmente aceptadas, buenos modelos de software y métodos de desarrollo ayudará en parte. Pero normalmente esto no es suficiente. Con el tiempo y la experiencia, los verdaderos profesionales desarrollan, por así decirlo, un “sentido de claridad”, algo parecido a la intuición. Una metáfora de la escritura funciona bien aquí: saber muchas palabras no te ayudará a escribir algo que sea conciso y de significado claro.

“Lo habría escrito más corto, pero no tuve tiempo”.

- Mark Twain.

La capacidad de corregir errores de forma rápida y sencilla es una característica clave de un buen software. Los errores en el programa deben enviar mensajes claros y registrarse centralmente para su seguimiento. Cuando se informa un nuevo error, la persona que lo solucionará debe tener la capacidad de depurarlo. Necesita conectarse fácilmente al sistema, acceder a la información de ejecución en cualquier momento y también poder verificar fácilmente la funcionalidad de cualquier parte del sistema.

Entornos y pruebas

Cuando los ingenieros de software desarrollan aplicaciones, hacen todo lo posible para asegurarse de que funcionen en computadoras de diferentes arquitecturas y con diferentes sistemas operativos. Es importante que el software funcione con diferentes resoluciones y orientaciones de pantalla, y también que no "consuma" más memoria y potencia de procesamiento de la necesaria.
¿Quién es un ingeniero de software?  Ingeniería de software VS
Cuando se trata de aplicaciones web, deben funcionar en todos los navegadores principales. Al crear una aplicación de escritorio, debe asegurarse de que se inicie y funcione correctamente en Mac, Windows y Linux. Bueno, el programa depende de los datos, entonces la aplicación debería funcionar incluso en el caso de una conexión de datos lenta o su ausencia. Para escribir un software, los ingenieros analizan todo tipo de opciones de escenario y planean probarlas. Todo comienza con elegir la opción ideal, en la que todo funcione sin errores. Luego documentan cualquier problema potencial y lo escriben en el plan de prueba. Algunos ingenieros comienzan escribiendo código, al que llaman caso de prueba, que simula escenarios para todos los problemas y errores probables. Y luego se escribe un programa que puede funcionar con cualquiera de las opciones consideradas. La habilidad única de un ingeniero de software talentoso no es saber cómo escribir código, sino comprender qué debe hacer exactamente la aplicación como resultado y cómo lograrlo. Cuando los requisitos de software del cliente son incompletos y posiblemente ambiguos, el ingeniero necesita evaluarlos y "comprenderlos" correctamente.

Costo y eficiencia

Un ingeniero de software puede solucionar el problema rápidamente en la mayoría de los casos. Si cree que contratar a un programador experimentado "caro" aumentará sus costos, piénselo de nuevo. Cuanto más experiencia tenga el programador contratado, más rápido podrá ofrecer una solución sencilla, clara, fiable y fácil de usar. A largo plazo, esto definitivamente reducirá los costos de desarrollo de software.
¿Quién es un ingeniero de software?  Ingeniería de software VS
También es necesario considerar los costos de ejecución del programa. Cualquier programa utiliza recursos informáticos y no son gratuitos.
El trabajo de un ingeniero de software es escribir código eficiente que no utilice recursos informáticos innecesariamente.
Por ejemplo, el almacenamiento en caché de los datos a los que se accede con frecuencia es una de las posibles estrategias utilizadas para lograr el resultado deseado. Pero esta es sólo una de probablemente cientos de herramientas y soluciones que pueden hacer que un programa sea más rápido y eficiente. Un programador novato puede brindarle una solución económica, pero usar dicha solución en última instancia le costará a usted y a sus clientes mucho más que si trabajara con un desarrollador experimentado que creó una solución efectiva en primer lugar.

Centrarse en la experiencia del usuario

Un buen programador desarrolla teniendo en cuenta la Experiencia de Usuario (UX). La interacción hombre-máquina es un tema con infinitas investigaciones y soluciones. Cuantas más soluciones se apliquen, mejor debería resultar el programa. Aquí hay algunos ejemplos, solo para darle una idea de cuál es esta dirección:
  • Al diseñar formularios de entrada de datos como el correo electrónico, un buen programa debe ignorar las mayúsculas y minúsculas de la dirección de correo electrónico. No debería generar un error si se presiona la tecla CAPSLOCK porque la dirección de correo electrónico es única en minúsculas. Si el programa acepta una nueva dirección de correo electrónico como entrada, verifíquela al principio del proceso de entrada para alertar al usuario de que está utilizando un formato de dirección incorrecto. Esta solución incluye comprobaciones obvias, como la falta del signo "@", y también comprobaciones no tan obvias, como comprobar el orden incorrecto de caracteres como "gmail.ocm".

  • Cuando el usuario es redirigido para realizar alguna acción, un buen programa debería recordar su posición actual y devolverlo una vez que haya terminado. Un buen programa también debe recordar los datos ya transmitidos por el usuario, lo cual es importante para una mayor interacción con él.

    Supongamos que está buscando viajes aéreos como huésped en Expedia. Posteriormente decides crear una cuenta. La aplicación debería guardar todas tus búsquedas anteriores en la nueva cuenta y deberías poder acceder a ellas desde otros dispositivos.


  • ¿Quién es un ingeniero de software?  Ingeniería de software VS
  • Un buen programa se diseña teniendo en cuenta los escenarios de comportamiento del usuario. No es necesario simplemente agregar nuevas funciones de forma regular; ponerse en el lugar del usuario. Un día estaba reservando billetes de avión y olvidé incluir mi número de viajero frecuente. Después de recibir la confirmación, decidí ir al sitio web de la aerolínea y agregarlo para obtener el descuento. Para descubrir cómo hacer esto, trasteé en el sitio durante unos buenos 10 minutos. La aplicación era tan obvia que simplemente deambulé sin rumbo por diferentes páginas del sitio para encontrar lo que necesitaba. Más tarde descubrí que ya había llegado a la página correcta un par de veces, pero ni siquiera lo entendí, ya que el campo que necesitaba se perdió entre otros campos similares de gran tamaño.

    Resultó que para editar la información del viaje, necesitaba desplazarme por unas veinte líneas del formulario, ingresar el número de la tarjeta de fidelidad y el número de teléfono, sin los cuales no se podía enviar el formulario para su verificación. Este es un ejemplo de un programa que se desarrolló sin pensar en lo cómodo que se sentiría el usuario con él.

Fiabilidad, seguridad y protección

En mi opinión, la diferencia más importante entre un desarrollador de software profesional y un aficionado es tener en cuenta parámetros como la fiabilidad, la seguridad y la protección de la aplicación a la hora de crearla.
Un verdadero profesional sabe que es responsable de la seguridad de su solución.
Partes del programa deben ser tolerantes a entradas incorrectas, estados incorrectos e interacciones incorrectas. De hecho, esto es muy difícil de hacer cumplir y es la razón principal por la que escuchamos historias de personas que mueren debido a errores de software. Los usuarios han ingresado, están ingresando y seguirán ingresando datos incorrectos en el programa. Esto debe aceptarse como un hecho. Además, algunos lo hacen a propósito, con el objetivo de interrumpir la aplicación y acceder a los recursos disponibles.
¿Quién es un ingeniero de software?  Ingeniería de software VS
He aquí un ejemplo de la vida real: la persona presuntamente responsable de la reciente filtración de datos de Equifax está acusada de no cumplir con sus responsabilidades laborales, que era desarrollar soluciones para resistir entradas malas y maliciosas en todos los productos de software puestos a disposición del público. Los incidentes relacionados con la seguridad de la información implican no sólo entradas incorrectas y maliciosas, sino también datos ingresados ​​incorrectamente. Si un usuario ha olvidado su contraseña, ¿cuántas veces puede intentar ingresarla? ¿Lo bloquearás después de esto? ¿Qué pasa si alguien más intenta bloquear su cuenta? ¿Puede un usuario transmitir sus credenciales a través de un canal de datos no cifrado? ¿Qué pasa si la solicitud de inicio de sesión proviene de una ubicación inusual? ¿Qué hará si el intento de inicio de sesión parece ser automático? ¿Qué ha hecho para proteger a sus usuarios de secuencias de comandos entre sitios, falsificación de solicitudes entre sitios y phishing común? ¿Tiene una estrategia de respaldo en caso de un ataque DDoS en sus servidores? Estas preguntas resaltan sólo algunas de las cuestiones que deben considerarse. El programa protegido no guarda información importante en forma de texto. Lo protege con un cifrado unidireccional complejo (uno que es fácil de cifrar pero casi imposible de descifrar sin la clave). Estas son medidas de respaldo en caso de que el programa sea pirateado. Los piratas informáticos descubrirán datos cifrados que les resultarán inútiles. Surgen problemas inesperados incluso en los mejores programas. Un programador que no está preparado para su aparición difícilmente puede considerarse un profesional. Hasta que no espere un comportamiento inesperado, no es ingeniero. Es el "autor de programas inseguros". Los errores en los programas no siempre son obvios. Nuestra capacidad intelectual para anticipar y prevenir errores conocidos es limitada. Es por eso que los ingenieros de software comprenden la importancia de contar con buenas herramientas que les permitan escribir software correcto y seguro.

Herramientas necesarias

No hay duda de que necesitamos herramientas de desarrollo diferentes y buenas. A menudo se subestima su función, pero en realidad ahorran mucho tiempo y esfuerzo, simplificando algunas tareas en un orden de magnitud. Imagínese si todavía tuviera que cargar archivos a través de FTP para su implementación, por así decirlo, a la antigua usanza. ¡Imagínese depurar problemas de rendimiento y de red sin Chrome DevTools! ¡Y qué ineficiente sería escribir código JavaScript sin ESlit y Prettier hoy en día!
¿Quién es un ingeniero de software?  Ingeniería de software VS
Cualquier herramienta que reduzca el tiempo de retroalimentación mientras escribe código debe ser bienvenida. Cuando encuentro una herramienta que antes no conocía, pero que es verdaderamente útil y eficaz, sólo puedo lamentar no haberla utilizado antes de ese feliz momento.
Herramientas mejores y más modernas te ayudarán a convertirte en un mejor programador. Encuéntralos, úsalos, aprécialos y, si puedes, mejóralos. Y no se obsesione con lo mismo: quién sabe, tal vez con una nueva herramienta dedique tiempo a instalarla y aprenderla una vez, y luego resolverá los problemas muchas veces más rápido.

La evolución de la ingeniería de software.

Nadie puede aprender ingeniería de software en dos meses, seis meses o incluso un año. No le enseñarán cómo ser ingeniero de software en un curso, universidad o campo de entrenamiento. He estado estudiando durante los últimos veinte años y sigo estudiando ahora. Sólo pude considerarme cómodamente un programador experimentado después de una década de aprender, desarrollar, crear y mantener aplicaciones utilizadas por miles de usuarios. La ingeniería de software no es para todos, pero todos deberían aprender a resolver sus problemas usando una computadora. Si puedes aprender a escribir programas simples, deberías hacerlo. Si puede aprender a utilizar software disponible públicamente, debería hacerlo. Si puedes aprender a utilizar software de código abierto y personalizarlo tú mismo, ¡tienes un superpoder! Cada día trae a los desarrolladores nuevos desafíos, nuevos problemas, por eso es necesaria la ingeniería de software. La tarea principal de esta profesión es crear software para que una persona común y corriente no tenga que lidiar con él durante muchos años. De modo que no es necesario realizar largos estudios para interactuar con los programas. Y, sin embargo, los ingenieros de software piensan constantemente en crear mejores herramientas que puedan resolver problemas conocidos más complejos y en hacer todo lo posible para garantizar que los nuevos problemas aparezcan con la menor frecuencia posible.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION