Saltar al contenido principal
LibreTexts Español

10.3: Desarrollo de software

  • Page ID
    155499
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    Desarrollo de Software

    Muchas de las metodologías discutidas anteriormente se utilizan para gestionar el desarrollo de software ya que la programación es compleja, y a veces los errores son difíciles de detectar. Aprendimos en el capítulo 2 que el software se crea a través de la programación, y la programación es el proceso de crear un conjunto de instrucciones lógicas para que un dispositivo digital siga usando un lenguaje de programación. El proceso de programación a veces se llama “codificación” porque la sintaxis de un lenguaje de programación no está en una forma que todos puedan entender, es en “código”.

    El proceso de desarrollar un buen software no suele ser tan sencillo como sentarse y escribir algún código. Es cierto que a veces un programador puede escribir rápidamente un programa corto para resolver una necesidad. Pero la mayoría de las veces, la creación de software es un proceso intensivo de recursos que involucra a varios grupos diferentes de personas en una organización. En las siguientes secciones, vamos a revisar varias metodologías diferentes para el desarrollo de software.

    Sidebar: El triángulo de calidad de gestión de proyectos

    Al desarrollar software o cualquier producto o servicio, existe tensión entre los desarrolladores y los diferentes grupos de interés, como la gerencia, los usuarios y los inversionistas. La Fig. 10.5 ilustra la tensión de los tres requisitos: tiempo, costo y calidad que los gerentes de proyectos necesitan para hacer concesiones. Desde la rapidez con la que se puede desarrollar el software (tiempo), hasta cuánto dinero se gastará (costo), hasta qué tan bien se construirá (calidad). El triángulo de calidad es un concepto sencillo. Afirma que solo se pueden abordar dos de los siguientes: tiempo, costo y calidad para cualquier producto o servicio que se esté desarrollando.

    Triángulo con las palabras alcance, tiempo y costo en cada esquina y calidad en el centro
    Fig 10.6 Triángulo de Calidad de Gestión de Proyectos. Imagen de Mapto tiene licencia Dominio público

    Entonces, ¿qué significa que solo puedas abordar dos de los tres? Significa que la calidad del producto terminado depende de las tres variables: alcance, cronograma y presupuesto asignado. Los cambios en cualquiera de estas tres variables afectan a las otras dos, de ahí la calidad.

    Por ejemplo, si se agrega una característica, pero no se agrega tiempo adicional al cronograma para desarrollar y probar, la calidad del código puede sufrir, incluso si se agrega más dinero. Hay momentos en los que ni siquiera es factible hacer el tradeoff. Por ejemplo, agregar más personas a un proyecto donde los miembros están tan abrumados que no tienen tiempo para administrar o capacitar a nuevas personas. En general, este modelo nos ayuda a comprender las compensaciones que debemos hacer al desarrollar nuevos productos y servicios.

    Lenguajes de Programación

    Una de las decisiones importantes que un equipo de proyecto necesita tomar es decidir qué lenguaje o lenguajes de programación se van a utilizar y herramientas asociadas en el proceso de desarrollo. Como se menciona en el capítulo 3, los desarrolladores de software crean software utilizando uno de varios lenguajes de programación. Un lenguaje de programación es un lenguaje formal que proporciona una forma para que un programador cree código estructurado para comunicar la lógica en un formato que el hardware de la computadora pueda ejecutar. En las últimas décadas, muchos lenguajes de programación diferentes han evolucionado para satisfacer muchas necesidades diferentes.

    No hay una manera única de categorizar los idiomas. Aún así, a menudo se agrupan por tipo (es decir, consulta, scripting), o cronológicamente por año cuando se introdujo (i., e. Fortran se introdujo en 1954s), por su “generación”, por cómo se tradujo al código de máquina, o cómo se ejecutó. Discutiremos algunas categorías en este capítulo.

    Generaciones de lenguajes de programación

    Los lenguajes tempranos eran específicos del tipo de hardware que había que programar; cada tipo de hardware de computadora tenía un lenguaje de programación de bajo nivel diferente (de hecho, incluso hoy en día, hay diferencias en el nivel inferior, aunque los lenguajes de programación de nivel superior ahora los oscurecen). En estos primeros idiomas, hubo que introducir instrucciones precisas línea por línea, un proceso tedioso.

    A continuación se resumen algunas características comunes para ilustrar algunas diferencias entre estas generaciones:

    Primera generación (1GL)

    Segunda generación (2GL)

    Tercera generación (3GL)

    Cuarta generación (4GL)

    Quinta generación (5GL)

    Tiempo introducido (est).

    1940 o antes

    1950

    1950s-1970

    1970s-1990

    1980s-1900s

    Instrucciones

    Están hechos de números binarios de 0s y 1s

    Usar un conjunto de sintaxis que sea legible por humanos y programadores

    La sintaxis es más estructurada y está compuesta por un lenguaje más parecido al humano

    La sintaxis es amigable para los no programadores

    Aún en progreso.

    Categoría

    Dependiente de la máquina

    Código de máquina

    Dependiente de la máquina

    Nivel bajo, Lenguajes de Ensamblaje

    Independiente de la máquina

    Alto Nivel

    Independiente de la máquina

    Abstracción de alto nivel

    3GL avanzados

    Programación lógica

    Ventaja

    Muy rápido, sin necesidad de 'traducción' a 0s y 1s

    El código puede ser leído y escrito por programadores más fácil que aprender código de máquina

    Más independiente de la máquina

    Más amigable con los programadores

    Propósito general

    Fácil de aprender

    Puede que no necesite programadores para escribir programas

    Desventaja

    Dependiente de la máquina, no portátil

    Debe ser convertido a código de máquina, aún dependiente de la máquina

    Puede pasar varios pasos para traducir al código de máquina

    Más especializados

    Aún temprano en la fase de adopción

    El uso de hoy

    Si es necesario para interactuar con hardware directamente, como controladores (es decir, controlador USB)

    Si es necesario para interactuar con hardware directamente, como controladores (es decir, controlador USB)

    Los 3GL modernos se usan más comúnmente.

    Los primeros 3GL se utilizan para mantener programas comerciales o programas científicos existentes

    Base de datos, desarrollo web

    Limitado

    Herramientas visuales, Investigación en inteligencia artificial

    Ejemplos

    Lenguaje de la máquina

    Lenguaje de montaje

    3GL tempranos: COBOL, Fortran

    3PLs modernos: C, C++, Java, Javascript

    Perl, PhP, Python, SQL, Ruby

    Mercurio, OPS5

    Statista.com informó que a principios de 2020, Javascript era el lenguaje más utilizado entre los desarrolladores a nivel mundial. Para ver la lista completa, favor de v isit Statista.com para más detalles.

    Sidebar: Ejemplos de idiomas

    Lenguaje de primera generación: código de máquina. En el código de máquina, la programación se realiza configurando directamente unos y ceros reales (los bits) usando código binario. Aquí hay un programa de ejemplo que

    agrega 1234 y 4321 usando el lenguaje de la máquina:

    10111001

    00000000

    11010010

    10100001

    00000100

    00000000

    10001001

    00000000

    00001110

    10001011

    00000000

    00011110

    00000000

    00011110

    00000000

    00000010

    10111001

    00000000

    11100001

    00000011

    00010000

    11000011

    10001001

    10100011

    00001110

    00000100

    00000010

    00000000

    Lenguaje de segunda generación. El lenguaje ensamblador da frases similares al inglés a las instrucciones de código automático, lo que facilita la programación. Un programa de lenguaje ensamblador debe ejecutarse a través de un ensamblador, que lo convierte en código de máquina. Aquí hay un programa de ejemplo que agrega 1234 y 4321 usando lenguaje ensamblador:

    MOV CX,1234 MOV DS: [0], CX MOV CX,4321 MOV AX, DS: [0]

    MOV BX, DS: [2] AGREGAR HACHA, BX

    MOV DS: [4], HACHA

    Los idiomas de tercera generación no son específicos del tipo de hardware que ejecutan y se parecen mucho más a los idiomas hablados. La mayoría de los lenguajes de tercera generación deben ser compilados, un proceso que los convierte en código de máquina. Los lenguajes conocidos de tercera generación incluyen BASIC, C, Pascal y Java. Aquí hay un ejemplo usando BASIC:

    A=1234 B=4321 C=A+B FINAL

    Los lenguajes de cuarta generación son una clase de herramientas de programación que permiten el desarrollo rápido de aplicaciones mediante interfaces y entornos intuitivos. Muchas veces, un lenguaje de cuarta generación tiene un propósito particular, como la interacción con bases de datos o la redacción de informes. Estas herramientas pueden ser utilizadas por aquellos con muy poca formación formal en programación y permiten el rápido desarrollo de aplicaciones y/o funcionalidad. Ejemplos de lenguajes de cuarta generación incluyen Clipper, FOCUS, FoxPro, SQL y SPSS.

    ¿Por qué alguien querría programar en un idioma de nivel inferior cuando requieren mucho más trabajo? La respuesta es similar a por qué algunos prefieren conducir automóviles de cambio de palanca en lugar de transmisión automática: control y eficiencia. Los lenguajes de nivel inferior, como el lenguaje ensamblador, son mucho más eficientes y se ejecutan mucho más rápidamente. También tienes un control más fino sobre el hardware. A veces, una combinación de lenguajes de nivel superior e inferior se mezcla para obtener lo mejor de ambos mundos: el programador creará la estructura general y la interfaz usando un lenguaje de nivel superior pero utilizará lenguajes de nivel inferior en cualquier lugar del programa que requiera más precisión.

    Compilado vs. interpretado

    Además de clasificar un lenguaje de programación basado en su generación, también puede clasificarse como lenguaje compilado o interpretado. Como hemos aprendido, un lenguaje informático está escrito en una forma legible por humanos. En un lenguaje compilado, el código del programa se traduce a una forma legible por máquina llamada ejecutable que se puede ejecutar en el hardware. Algunos lenguajes compilados conocidos incluyen C, C++ y COBOL.

    Un lenguaje interpretado requiere que se instale un programa en tiempo de ejecución para ejecutarse. Este programa en tiempo de ejecución interpreta el código del programa línea por línea y lo ejecuta. Los lenguajes interpretados son generalmente más fáciles de trabajar, pero son más lentos y requieren más recursos del sistema. Ejemplos de lenguajes interpretados populares incluyen BASIC, PHP, PERL y Python. Los lenguajes web como HTML y Javascript también se considerarían interpretados porque requieren de un navegador para ejecutarse.

    El lenguaje de programación Java es una interesante excepción a esta clasificación, ya que en realidad es un híbrido de los dos. Un programa escrito en Java se compila parcialmente para crear un programa que pueda ser entendido por la Máquina Virtual Java (JVM). Cada tipo de sistema operativo tiene su propia JVM, la cual debe ser instalada, permitiendo que los programas Java se ejecuten en muchos tipos diferentes de sistemas operativos.

    Procesal vs. orientado a objetos

    Un lenguaje de programación procedimental está diseñado para permitir que un programador defina un punto de partida específico para el programa y luego ejecutarlo secuencialmente. Todos los lenguajes de programación tempranos funcionaban de esta manera. A medida que las interfaces de usuario se volvieron más interactivas y gráficas, tenía sentido que los lenguajes de programación evolucionaran para permitir al usuario definir el flujo del programa. El lenguaje de programación orientado a objetos está configurado para definir “objetos” que pueden tomar ciertas acciones en función de la entrada del usuario. Es decir, un programa procesal se enfoca en la secuencia de actividades a realizar; un programa orientado a objetos se enfoca en los diferentes ítems que se manipulan.

    Por ejemplo, en un sistema de recursos humanos, se necesitaría un objeto “EMPLEADO”. Si el programa necesitaba recuperar o establecer datos con respecto a un empleado, primero crearía un objeto empleado en el programa y luego establecería o recuperaría los valores necesarios. Cada objeto tiene propiedades, que son campos descriptivos asociados al objeto. En el siguiente ejemplo, un objeto empleado tiene las propiedades “Nombre”, “Número de empleado”, “Fecha de nacimiento” y “Fecha de contratación”. Un objeto también tiene “métodos”, que pueden tomar acciones relacionadas con el objeto. En el ejemplo, hay dos métodos. El primero es “ComputePay ()”, que devolverá el monto actual adeudado al empleado. El segundo es “ListEmployees ()”, que recuperará una lista de empleados que reportan a este empleado.

    Objeto Empleado

    Objeto: EMPLEADO

    First_Name

    Apellido

    Empleado_ID

    Fecha de nacimiento

    Fecha de contratación

    ComputePay ()

    ListEmployees ()

    Herramientas de Programación

    Otra decisión que hay que tomar durante el desarrollo de un IS es el conjunto de herramientas necesarias para escribir programas. Para escribir programas, los programadores necesitan herramientas para ingresar código, verificar la sintaxis del código y algún método para traducir su código en código de máquina. Para ser más eficientes en la programación, los programadores utilizan herramientas integradas como un entorno de desarrollo integrado (IDE) o herramientas de ingeniería de software asistida por computadora (CASE).

    Entorno de Desarrollo Integrado (IDE)

    Para la mayoría de los lenguajes de programación, se puede utilizar un IDE. Un IDE proporciona varias herramientas para el programador, todo en un solo lugar con una interfaz de usuario consistente. IDE generalmente incluye:

    • un editor para escribir el programa que codificará por colores o resaltará palabras clave del lenguaje de programación;
    • un sistema de ayuda que brinde documentación detallada sobre el lenguaje de programación;
    • un compilador/intérprete, que permitirá al programador ejecutar el programa;
    • una herramienta de depuración, que proporcionará al programador detalles sobre la ejecución del programa para resolver problemas en el código; y
    • un mecanismo de check-in/check-out permite a un equipo de programadores trabajar juntos en un proyecto y no escribir sobre los cambios de código de los demás.

    Statista.com informa que 80% de los desarrolladores de software en todo el mundo a partir de 2018 y 2019 utilizan una herramienta de colaboración de código fuente como GitHub, 77% usa un IDE independiente como Eclipse, 69% usa Microsoft Visual Studio. Para obtener una lista completa, visite statista.com.

    Ingeniería de software asistida por computadora (CASE) Herramientas

    Si bien un IDE proporciona varias herramientas para ayudar al programador a escribir el programa, el código aún debe escribirse. Las herramientas de ingeniería de software asistida por computadora (CASE) permiten a un diseñador desarrollar software con poca o ninguna programación. En cambio, la herramienta CASE escribe el código para el diseñador. Las herramientas CASE vienen en muchas variedades, pero su objetivo es generar código de calidad basado en la entrada del diseñador.

    Construir vs. Comprar o Suscribirse

    Cuando una organización decide que es necesario desarrollar un nuevo programa de software, debe determinar si tiene más sentido construirlo ellos mismos o comprarlo a una compañía externa. Esta es la decisión de “construir vs. comprar”. Esta decisión de 'comprar' ahora incluye la opción de suscribirse en lugar de comprarla directamente.

    La compra de software de una compañía externa tiene muchas ventajas. Primero, generalmente es menos costoso comprar un paquete de software que construirlo. En segundo lugar, cuando se compra un paquete de software, está disponible mucho más rápidamente que si el paquete se construye internamente. En tercer lugar, las empresas o los consumidores pagan un precio único y pueden conservar el software durante el tiempo que la licencia lo permita y podría ser el tiempo que usted lo tenga o incluso después de que el proveedor deje de soportarlo. Las aplicaciones de software pueden tardar meses o años en construirse; un paquete comprado puede estar en funcionamiento dentro de un mes. Ya se ha probado un paquete comprado, y muchos de los errores ya se han resuelto, y se pueden comprar contratos de soporte adicionales. Es el papel de un integrador de sistemas hacer que varios sistemas comprados y los sistemas existentes en la organización trabajen juntos.

    También hay desventajas en la compra de software. Primero, el mismo software que estás usando puede ser utilizado por tus competidores. Si una empresa está tratando de diferenciarse en función de un proceso de negocio en ese software comprado, va a tener dificultades para hacerlo si sus competidores utilizan el mismo software. Otra desventaja de la compra de software es el proceso de personalización. Si compra un paquete de software de un proveedor y luego lo personaliza, tendrá que administrar esas personalizaciones cada vez que el proveedor proporcione una actualización. Con el aumento de la seguridad y la privacidad, las empresas pueden carecer de la experiencia interna para responder rápidamente. Instalar varias actualizaciones y lidiar con los errores encontrados también puede ser una carga para el personal de TI y los usuarios. Esto puede convertirse en un dolor de cabeza administrativo.

    Una solución híbrida es suscribirse. Suscribirse significa que en lugar de vender productos individualmente, los proveedores ahora ofrecen un modelo de suscripción que los usuarios pueden rentar y pagar periódicamente, como mensual, anual. El modelo de renta se ha utilizado en muchas otras industrias como películas, libros y recientemente se ha trasladado a industrias de alta tecnología. Empresas y consumidores ya pueden suscribirse a casi todo, como ya comentamos en capítulos anteriores, desde almacenamiento adicional en sus plataformas de correo electrónico como Google Drive o Microsoft Onedrive, hasta software como Quickbooks, Microsoft Office 365, hasta servicios de hosting y soporte web como Amazon AWS. Los proveedores se benefician de convertir ventas únicas en ventas recurrentes y aumentar la lealtad de los clientes. Los clientes se benefician del dolor de cabeza de instalar actualizaciones, tener el soporte de software y las actualizaciones atendidas automáticamente, sabiendo que el software continúa actualizándose con nuevas características. Un modelo de suscripción es ahora una opción predominante tanto para los consumidores como para las empresas.

    Incluso si una organización determina comprar o suscribirse, todavía tiene sentido pasar por muchos de los mismos análisis para comparar los costos y beneficios de construirlo ellos mismos. Esta es una decisión importante que podría tener un impacto estratégico a largo plazo en la organización.

    Servicios Web

    En el capítulo 3 se afirmó que el paso a la computación en la nube ha permitido que el software sea visto como un servicio. Una opción que las empresas tienen en estos días para licenciar funciones proporcionadas por otras empresas en lugar de escribir el código ellas mismas. Estos se llaman servicios web, y pueden simplificar enormemente la adición de funcionalidad a un sitio web.

    Por ejemplo, supongamos que una empresa desea proporcionar un mapa que muestre la ubicación de alguien que ha llamado a su línea de soporte. Al utilizar los servicios web de la API de Google Maps, pueden crear un Google Map directamente en su aplicación. O una empresa de calzado podría facilitar a sus minoristas la venta de zapatos en línea al proporcionar un servicio web de tamaño de calzado que los minoristas podrían incrustar directamente en su sitio web.

    Los servicios web pueden difuminar las líneas entre “construir vs. comprar”. Las empresas pueden optar por crear una aplicación de software por sí mismas, pero luego comprar la funcionalidad de los proveedores para complementar su sistema.

    Computación para el usuario final o Shadow IT

    En muchas organizaciones, el desarrollo de aplicaciones no se limita a los programadores y analistas del departamento de tecnología de la información. Especialmente en organizaciones más grandes, otros departamentos desarrollan sus propias aplicaciones específicas de departamento. Las personas que construyen estos no están necesariamente capacitadas en programación o desarrollo de aplicaciones, sino que tienden a ser adeptos con las computadoras. Una persona, por ejemplo, que es experta en un paquete de software particular, tal como una hoja de cálculo o paquete de base de datos, puede ser llamada a construir aplicaciones más pequeñas para su uso por su propio departamento. Este fenómeno se conoce como desarrollo de usuario final, computación de usuario final o TI sombra.

    La computación del usuario final puede tener muchas ventajas para una organización. En primer lugar, acerca el desarrollo de aplicaciones a quienes las usarán. Debido a que los departamentos de TI a veces están bastante atrasados, también proporciona un medio para que el software se cree más rápidamente. Muchas organizaciones fomentan la computación del usuario final para reducir la tensión en el departamento de TI.

    La computación del usuario final también tiene sus desventajas. Si los departamentos dentro de una organización son

    desarrollando sus propias aplicaciones, la organización puede terminar con varias aplicaciones que realizan funciones similares, lo cual es ineficiente ya que duplicó el esfuerzo. En ocasiones, estas diferentes versiones de una misma aplicación proporcionan resultados diferentes, trayendo confusión cuando los departamentos interactúan. Estas aplicaciones suelen ser desarrolladas por alguien con poca o ninguna formación formal en programación. En estos casos, el software desarrollado puede tener problemas que tienen que ser resueltos por el departamento de TI. La computación del usuario final puede ser beneficiosa para una organización, pero debe ser administrada. El departamento de TI debe establecer pautas y proporcionar herramientas para los departamentos que quieran crear sus propias soluciones.

    La comunicación entre departamentos contribuirá en gran medida al uso exitoso de la computación del usuario final.

    Barra lateral: Construyendo una aplicación móvil

    El desarrollo de software suele incluir la creación de aplicaciones para que se ejecuten en escritorios, servidores o mainframes. Sin embargo, la comercialización de la web ha creado categorías adicionales de desarrollo de software como diseño web, desarrollo de contenido, servidor web. El esfuerzo de desarrollo relacionado con la web para Internet ahora se llama desarrollo web. Las actividades anteriores de desarrollo web incluyen la construcción de sitios web para apoyar a las empresas o para construir sistemas de comercio electrónico y han hecho que tecnologías como HTML sean muy populares entre los diseñadores web y lenguajes de programación como Perl, Python, Java populares para los programadores. Los sitios web preempaquetados ahora están disponibles para que los consumidores los compren sin aprender HTML o contratar a un diseñador web. Por ejemplo, los emprendedores que quieran iniciar un negocio de panadería ahora pueden comprar un sitio web preconstruido con un carrito de compras, todo listo para iniciar un negocio sin incurrir en gastos costosos para construirlo ellos mismos.

    Con el auge de los teléfonos móviles, surgió un nuevo tipo de desarrollo de software llamado desarrollo de aplicaciones móviles. Statista.com pronostica que los ingresos de las aplicaciones móviles aumentarán significativamente de 98 mil millones de dólares en 2014 a más de $935 mil millones para 2023. Esto significa que la necesidad de desarrolladores de aplicaciones móviles también ha aumentado.

    En muchos sentidos, construir una aplicación para un dispositivo móvil es lo mismo que construir una aplicación para una computadora tradicional. Comprender los requisitos de la aplicación, diseñar la interfaz, trabajar con los usuarios, todos estos pasos aún deben llevarse a cabo. El proceso de decisión para elegir los lenguajes y herramientas de programación adecuados sigue siendo el mismo.

    Sin embargo, existen diferencias específicas que los programadores deben considerar en la creación de aplicaciones para dispositivos móviles. Ellos son:

    • La interfaz de usuario debe variar para adaptarse a diferentes tamaños de pantalla
    • El uso de los dedos como punteros o para escribir texto en lugar de teclado y mouse en el escritorio
    • Se deben cumplir los requisitos específicos del proveedor del sistema operativo para que la aplicación se incluya en cada tienda (es decir, la App Store de Apple o la Play Store de Android)
    • La integración con el escritorio o la nube para sincronizar los datos
    • Estrecha integración con otro hardware incorporado como cámaras, sensores biométricos o de movimiento.
    • Menos memoria disponible, espacio de almacenamiento y potencia de procesamiento

    Las aplicaciones móviles ya están disponibles para casi todo y continúan creciendo.

    Referencias:

    Javascript fue el lenguaje más utilizado entre los desarrolladores a nivel mundial (2020). Recuperado el 10 de diciembre 2020, de Satistica.com

    Documentación de la Plataforma Google Maps. Recuperado el 10 de diciembre del 2020 de https://developers.google.com/maps/documentation

    Herramientas de programación/desarrollo utilizadas por desarrolladores de software en todo el mundo a partir de 2018 y 2019 (2020). Recuperado el 10 de diciembre 2020, de S tatista.com

    Ingresos mundiales de aplicaciones móviles en 2014 a 2023 (2010.) Recuperado el 10 de diciembre 2020, de Statista.com