Dificultades en el desarrollo de software

3/24
Recursos

En la etapa de dise帽o y desarrollo estamos concentrados en encontrar cu谩les son los problemas que queremos resolver. Estos problemas los podemos dividir en dos grandes tipos de problemas.

Esenciales: Los podemos dividir en 4.

  1. La complejidad, cu谩ndo lo que tenemos que resolver es complejo en si mismo, por ejemplo calcular la mejor ruta entre ciudades.
  2. La conformidad.
  3. Tolerancia al cambio.
  4. Invisibilidad.

**Accidentales:**Est谩 relacionado con la plataforma que vamos a implementar, tecnolog铆a, lenguajes, frameworks, integraciones, etc.

Aportes 119

Preguntas 8

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Problemas en el desarrollo tenemos dos:
鈥** Esenciales** que tienen que ver con el problema que vamos a solucionar dise帽o y comprobaci贸n del concepto. Los dividimis en 4 partes:
聽聽聽聽聽聽鈥 Complejidad
聽聽聽聽聽聽鈥 conformidad
聽聽聽聽聽聽鈥 tolerancia al cambio
聽聽聽聽聽聽鈥 invisibilidad
鈥** Accidentales**: detalles de implementacion y produccion, lengiajes, integraciones, servers, frameworks etc. Los dividimos en tres partes:
聽聽聽聽聽聽鈥 Lenguaje de alto nivel
聽聽聽聽聽聽鈥 Multi-procesamiento
聽聽聽聽聽聽鈥 entornos de programacion

Los problemas accidentales nos traen ganancias cuando los resolvemos, incluso algunos son solucionables con al alguna libreria, api, etc. Lo verdaderamente importante es resolver los problemas esenciales.

Como solucionar dificultades esenciales:
Lo complejo de un desarrollo es lo esencial y no lo accidental. No hay ninguna bala de plata que solucione el problema esencial del desarrollo de software. Para ello nos dan 4 formas de resolver las dificultades esenciales:

No desarrollar: siempre que podamos primero ver si el problema se puede solucionar con un software ya existente, con algo de open source, servicios, integraciones y soluciones peque帽as que solucionen parte del probela etc.
Proptotypado rapido: son la evoluci贸n de las metodolog铆as agiles, la idea es obtener e fedback lo mas rapido posible de si estamos resolviendo el problema correcto. Para eso hay que ir evolucionando en pasos muy peque帽os y siempre obteniendo feedback. EL FEEBACK ES LA HERRAMIENTA DE DESARROLLO MAS IMPORTANTE DENTRO DEL DESARROLLO DE SOFTWARE MODERNO.
Desarrollo evolutivo: esta relacionado al tipiado rapido, consta de ir desarrollando en pasos peque帽os e ir evolucionando en ese sentido.
Grandes dise帽adores: personas que tengan la capacidad de dise帽ar una solucion simple y que resuleva el problema de la mejor forma y con la mejor calidad.

Excelente lo que dec铆a Brooks鈥 " Necesitamos grandes dise帽adores, los grandes dise帽adores, no son programadores que simplemente saben utilizar una tecnolog铆a sino que son ingenieros que saben abstraerse de ese problema puntual y entender un problema mas general que sepan dise帽ar una soluci贸n que es elegante y que sea simple tambi茅n, que sepan dise帽ar un sistema que resuelva de la mejor forma el problema y que a la vez tenga los mejores atributos de calidad"鈥

Dificultades en el desarrollo del Software

Se dividen en 2 tipos de problemas:

  • Esenciales: Especificaci贸n, dise帽o y comprobaci贸n del concepto
  • Accidentales: Detalles de la implementaci贸n y producci贸n actual

Esenciales

  1. Complejidad: Cuando el problema a resolver es complejo en s铆 mismo.
  2. Conformidad: Entender en que contexto se usar谩 el producto y como se adecuada al contexto imperfecto (Ejemplo: 驴Requiere internet, que disponibilidad existe de Internet?, 驴Requiere actualizaciones mayores?)
  3. Tolerancia al cambio: La medici贸n de cuanto podemos adaptarnos a los cambios.
  4. Invisibilidad: Dificultad de entender su forma, ya que es intangible, solo existen en c贸digo o documentaci贸n

Accidentales

  1. Lenguajes de alto nivel: Dificultad de dominar el stack tecnol贸gico.
  2. Entornos de desarrollo: Las dificultades expuestas por software de desarrollos, editores de textos, IDE鈥檚, herramientas de terceros.

En relaci贸n al Prototipado R谩pido, se menciona el desarrollo con metodolog铆a Agile. 脡sta es la nueva forma de desarrollo que dej贸 atr谩s a la metodolog铆a tradicional en cascada, o lineal, mencionada en el video anterior.
En la metodolog铆a Agile, se van desarrollando partes del sistema (o soluci贸n al problema) en peque帽os ciclos completos o iteraciones (en ingl茅s, Sprints), en general de 1 a 3 semanas cada uno, teniendo en cuenta las historias de usuario donde se encuentran los criterios de aceptaci贸n para cada componente del sistema. Al finalizar cada Sprint, el equipo de desarrollo recibe feedback por parte del cliente para ver si se debe volver a realizar cambios o se avanza con la siguiente Sprint, y esto se repite hasta completar los requerimientos totales del proyecto. Es importante la comunicaci贸n constante entre todas las partes involucradas, tanto para los desarrolladores para detectar errores o cambios a tiempo, como para la satisfacci贸n del cliente.

驴C贸mo resolver las dificultades esenciales?
4 formas de resolver las dificultades seg煤n la persona que comenta Guido.

No desarrollar sino comprar
Puede que ya alguien haya inventado una soluci贸n. 驴por qu茅 inventar la rueda?

Prototipado r谩pido
Se evoluciona el sistema de pasos muy peque帽os y siempre se busca obtener el feedback. 驴es lo qu茅 necesitabas?, 驴quieres que evolucione a partir de esa funcionalidad o hago otra nueva?

Desarrollo evolutivo
Est谩 alineado con el prototipado r谩pido, pero tiene m谩s que ver con la creacion y acumulaci贸n de sistema. obtener resultados chiquitos pero esos mismos ir evolucionando.

Grandes dise帽adores
Tienen capacidad para abstraerse del problema y crear una solucion simple, elegante, que resulva de la mejor forma y a la vez tenga los mejores atributos de calidad .

Por ac谩 hay una traducci贸n a espa帽ol del art铆culo: (https://gist.github.com/esparta/582e43af7b803e0aaf69)

Aca les dejo el link del documento al que hace referencia:
http://worrydream.com/refs/Brooks-NoSilverBullet.pdf

Problemas Esenciales
Tratan sobre entender el concepto y el dise帽o de lo que vamos solucionar.
Se dividen en 4:
Complejidad,
cu谩ndo lo que tenemos que resolver es complejo en si mismo, por
ejemplo calcular la mejor ruta entre ciudades
conformidad,
驴en qu茅 contesto se va a usar?, 驴se adecua a cada situaci贸n?, Ejemplo. 驴siempre tendra coenxi贸n a internat? 驴qu茅 pasa si no?
tolerancia al cambio
Imagn铆nate que hiciste un programa para facturar, 驴qu茅 pasa si en el futuro camb铆an las leyes de ese pais? 驴se podr谩 ajustar el software?
invisibilidad.
Es dif铆cil entender en todo momento su forma. Ya que su "forma"
est谩 plasmada en c贸digo, infraestructura, diferentes momentos de
desiciones que quedaron palsmados en algun momento. Nada de
esto se ve.

Problemas Accidentales
Tienen que ver con la plataforma que lo vamos a instrumentar, los frameworks, cuestiones del lenguaje de programaci贸n, etc.

Guido es un crack, di贸 una explicaci贸n magistral durante practicamente 10 minutos sin edici贸n.

Un gran dise帽ador fue Steve Jobs, en el libro The Secrets of Steve Jobs de Carmine Gallo, 茅l habla sobre c贸mo Jobs tomaba algo ya existente, lo refinaba quitando cosas innecesarias y haciendo un dise帽o limpio y elegante.

Resumen:

En la etapa de dise帽o y desarrollo estamos concentrados en encontrar cu谩les son los problemas que queremos resolver. Estos problemas los podemos dividir en dos grandes tipos de problemas.

Esenciales: Los podemos dividir en 4.

La complejidad, cu谩ndo lo que tenemos que resolver es complejo en si mismo, por ejemplo calcular la mejor ruta entre ciudades.
La conformidad: Este soft 驴en qu茅 contexto se va a utilizar? Como debe adecuarse (vamos a tener disponibilidad de internet?)
Tolerancia al cambio: Una vez terminado va a poder cambiarse? (en un soft que calcula impuesto, debido al cambio de las leyes en el tiempo=
Invisibilidad: La dificultad de comprender su forma, ya que es intangible

Accidentales: Est谩 relacionado con la plataforma que vamos a implementar, tecnolog铆a, lenguajes, frameworks, integraciones, etc.
El lenguaje (lenguaje de alto nivel para poder trabajar mejor)
Multi-Procesamiento: Viene a resolver el feedback, nos enteramos mucho m谩s r谩pido
Entornos de programaci贸n: Lenguajes, librerias, capacidad de ejecutar codigo compilado

鈥淐onsidero a la especificaci贸n, dise帽o y comprobacion del concepto la parte dificil de hacer software.
(鈥) Si esto es cierto, hacer software siempre ser脿 dif铆cil. No existe la bala de plata鈥 (brooks Jr. 1986)

Se comprende que lo que realmente importante es la parte Esencial y no la accidental.
Lo accidental va ir evolucionando por el contexto.

Ahora, 驴Como resuelvo los problemas esenciales?
No desarrollar: Utilizar un sistema ya existente, aprovechar el open source.
Prototipado r谩pido: Es obtener feedback lo antes posible, ir avanzando en pasos peque帽os. Y valerme del usuario.
Desarrollo evolutivo: Plantea que vayas teniendo con resultados mas que peque帽o e ir evolucionando esto
Grandes dise帽adores: Saben abstraerse del problema puntual y entender un problema m谩s general. Obteniendo una resolucion elegante.

Pregunta de examen: 驴Por qu茅 no existe la bala de plata que resuelva las dificultades del desarrollo de software?

*DIFICULTADES EN EL DESARROLLO DE SOFTWARE

En la etapa de dise帽o y desarrollo estamos concentrados en encontrar cu谩les son los problemas que queremos resolver. Estos problemas los podemos dividir en dos grandes tipos de problemas.

Esenciales: especificaci贸n, dise帽o y comprobaci贸n del concepto.

Accidentales: Detalles de la implementaci贸 y producci贸n actual.

ESENCIALES:

  • complejidad (an谩lisis detallado,tiempo de calculo)

conformidad (contexto a utlizar)

Tolerancia al cambio (cuanto cambia el problema a trav茅s del tiempo) adaptabilidad

Invisibilidad (entender su forma, plasmada en c贸digo, infraestructura)

ACCIDENTALES:
problemas con tecnolog铆as, Software, hardware, etc.

  • lenguaje de programaci贸n

Multi-procesamiento

Entornos de programaci贸n

鈥淐onsidero a la especificaci贸n, dise帽o y combrobaci贸n del concepto la parte dif铆cil de hacer software. (鈥) Si esto es cierto, hacer software siempre ser谩 dificil. No existe la bala de plata鈥

**驴Como resolver las dificultades esenciales?
**

No desarrollar, aprovechar el Open Source

Prototipado r谩pido (metodolog铆as 谩giles)

Desarrollo evolutivo ( iterativamente, cada vez ir cambiando el sistema, evolucionandolo)

Grandes Dise帽adores (Arquitectos)

En la etapa de dise帽o y desarrollo estamos concentrados en encontrar cu谩les son los problemas que queremos resolver. Estos problemas los podemos dividir en dos grandes tipos de problemas.
Esenciales: Los podemos dividir en 4. los problemas esenciales en entender el concepto de lo que vamos hacer, entender el dise帽o y las especificaciones.
La complejidad, cu谩ndo lo que tenemos que resolver es complejo en si mismo, por ejemplo calcular la mejor ruta entre ciudades.
La conformidad. al contexto imperfecto en el que el software
Tolerancia al cambio. por la constante incertidumbre del problema y de su especificaci贸n.
Invisibilidad. intr铆nseca del software como artefacto y la dificultad de representar visualmente para ayudar en su comprehension.

Accidentales: Est谩 relacionado con la plataforma que vamos a implementar, tecnolog铆a, lenguajes, frameworks, integraciones, etc.
Los lenguajes de alto nivel resuelven el problema de la diferencia entre la especificaci贸n de una soluci贸n y su ejecuci贸n en una computadora.
El Multiprocesamiento resuelve un problema de recursos computacionales y velocidad de feedback.
Los entornos de programaci贸n resuelven la necesidad de conocer y retener detalles de implementaci贸n del contexto del desarrollo.

驴Como resolver las dificultades esenciales?

  1. Complejidad -> No desarrollar, comprar
  2. Conformidad -> Prototipado r谩pido.
  3. Tolerancia al cambio -> Desarrollo Evolutivo
  4. Invisibilidad -> Grandes Dise帽adores / Arquitectos


Esenciales : Se dividen en 4 tipos de problemas

  • Complejidad: cuando un dominio de un problema es complejo en s铆 mismo. En el caso de adiciones y todas las acciones que conlleven al sistema a ser m谩s complejo.

Por ejemplo:
Calcular la ruta m谩s corta entre dos ciudades, esto es un problema muy complejo debido a la cantidad de c谩lculos que conlleva.

  • Conformidad: en qu茅 contexto se usa el software y c贸mo debe adecuarse al mismo.

Por ejemplo:
驴Vamos a tener conexi贸n de Internet en todo momento? 驴Que calidad de conexi贸n vamos a tener?, debemos modelar con respecto a las limitaciones que tengamos.

  • Tolerancia al Cambio:Posibilidad del cambio en el mismo y que sea responsivo a diferentes contextos.

Por ejemplo:
Las leyes de facturaci贸n y de impuestos se aplican de tal manera que no nos permiten realizar c谩lculos sencillos, como puede ser que entre una fecha determinado tengamos que aplicar leyes X y otras Y.

  • Invisibilidad: Problemas de tangibilidad nula.

Accidentales : Est谩 relacionado con la plataforma que vamos a implementar, tecnolog铆a, lenguajes, frameworks, integraciones, entre otros, que tienen 3 Entornos:

  • Lenguajes de alto nivel.

  • Multi-procesamiento.

  • Entornos de programaci贸n.

鈥淐oncidero a la especificaci贸n, dise帽o y comprobaci贸n del concepto es la parte dif铆cil de hacer software. (鈥) Si esto es cierto, hacer software siempre ser谩 dif铆cil. No existe la bala de plata.鈥 - Del libro No Silver Bullet (Frederick P. Brooks Jr., 1986)

Creo entonces que lo mas dif铆cil siempre ser谩 encontrar soluciones que hagan su trabajo de forma r谩pida, econ贸mica y precisa.

Tipos de problemas:
Complejidad: el requerimiento de calculo de muchas variables y mucho tiempo para analizar su soluci贸n.
Conformidad: Definir las condiciones en las que se ejecutar谩 el software.
Tolerancia al cambio: Cuanto cambia el problema al cual le dise帽amos la soluci贸n.
Invisibilidad: Entender como funciona el software.

Dificultades esenciales: Concepto y metodolog铆a del software.
y dificultades accidentales: Problemas relacionados con IDE, lenguaje o dificultades tecnicas.

Soluciones a las dificultares esenciales:
Comprar OSS
Prototipado Rapido
Desarrollo evolutivo
Grandes dise帽adores - arquitectos de software

Me encanto esta clase, lo que se indica es super importante entenderlo, en especial lo relacionado con las metodologias agiles. Buen abreboca, me dieron grandes expectativas de lo que se viene.!

Apuntes:
Dificultades en el desarrollo de software

Se puede dividir en dos tipos de problemas: ++Esenciales ++鈥 Accidentales

Dificultades Esenciales
Especificaci贸n, dise帽o y comprobaci贸n del concepto.

Complejidad
Cuando un dominio del problema es complejo en s铆 mismo.
Conformidad
驴En qu茅 contexto se va a utilizar el software? 驴C贸mo tiene que adecuarse a ese contexto?
Tolerancia al cambio
Una vez terminado, podr谩 cambiarse o ser谩 dif铆cil de cambiar. No tiene que ver tanto con la tecnolog铆a o implementaci贸n sino con cu谩nto cambia el problema que estamos resolviendo y cu谩nto podemos adaptarnos a esos cambios.
Invisibilidad
Trabajar con software es dif铆cil al no ser tangible, lo que dificulta entender su forma.

Dificultades Accidentales
Detalles de la implementaci贸n y producci贸n actual. Suelen ser lo que m谩s a menudo nos encontramos.

Lenguajes de alto nivel
El crecimiento del lenguaje de alto nivel resuelve la dificultad de que la m谩quina entiende 0s y 1s.
Multiprocesamiento
Resuelve el problema del feedback.
Entornos de programaci贸n
Facilitan el desarrollo del software.

Si lo complejo del desarrollo del software es lo conceptual, lo esencial y no lo accidental, entonces esas ganancias de 贸rdenes de magnitud en las que se hizo mucho m谩s simple o mucho m谩s productivo el desarrollo de software, no existen m谩s.

驴C贸mo resolvemos las dificultades esenciales?

No Desarrollar: Comprar 鈥 OSS
Si tenemos un problema que es esencialmente dif铆cil quiz谩s la soluci贸n es utilizar alg煤n sistema ya existente y no tener que desarrollar uno a mano. Aprovechar Open Source. Utilizar programas ya disponibles y conectarlos con soluciones m谩s peque帽as.
Prototipado r谩pido
La evoluci贸n de este pensamiento son las metodolog铆as 谩giles y por ende el prototipado r谩pido. La idea es obtener feedback lo antes posible de si estamos resolviendo el problema correcto. Vamos evolucionando nuestro sistema siempre obteniendo feedback del cliente final.
Desarrollo evolutivo
Alineado a la creaci贸n y acumulaci贸n de sistema. Ir cambiando el sistema. Tratar de obtener resultados m谩s chiquitos y despu茅s ir evolucionando eso, muy alineado con metodolog铆as 谩giles.
Grandes dise帽adores
No son programadores que simplemente sabe utilizar una tecnolog铆a, sino que son ingenieros que saben abstraerse de ese problema puntual y entender un problema m谩s general, que sepan dise帽ar una soluci贸n que sea elegante y que a la vez sea simple.

Les comparto mi resumen de la parte en que se me hizo un poco complicado entender
en la frase de que no existe la bala de plata se refiere a que debemos
tener en cuanta que es lo que resuelve cada librer铆a ya que no todas resolver谩n el problema esencial que se pide implementar en un sistema. Para ello nos dan 4 formas de resolver las dificultades esenciales:

  • **No desarrollar: ** Optar por comprar o utilizar un sistema ya existente o tambi茅n apoyarnos con c贸digo ya existente (c贸digo open source) para desarrollar peque帽as partes.
  • Prototipado rapido la idea es obtener feetback con prototipos con el fin de tener todo bien en claro para la el desarrollo del sistema.
    -Desarrollo evolutivo la idea es tener un producto funcional y a partir de ello ir evolucionando.
    -Grandes Dise帽adores ingenieros que saben abstraerse del problema y ver un problema mas general, que resuelvan de manera elegante lo que necesita el sistema de forma puntual sin perder calidad.

RESUMEN:
Dificultades en el desarrollo de software:

Las nuevas tecnolog铆as resuelven problams accidentales o esenciales?

Hay que analizar el contexto del problema para dise帽ar la soluci贸n del momento.
Las dificultades esenciales son aquellas inherentes al nivel de abtracci贸n de m谩quina, a la manipulaci贸n que tenemos de esas abstracciones, al grado de complejidad y libertad de las variables, a la conformidad y tolerancia al cambio del dise帽o.

Las dificultades esenciales se pueden solucionar:
No desarrollando, buscando solucioens previas e integrando subsistemas es mucho m谩s eficiente.
Prototipado r谩pido, metodolog铆as 谩giles de trabajo. Feedback constante del usuario es crucial para metodolog铆as modernas.

Desarrollo evolutivo, plantea que consigas resultados peque帽os y de all铆 crezcas. Grandes dise帽adores, son ingenieros que se abtraen dle problema puntual y entienden un marco m谩s amplio para una soluci贸n simple y elegante. La mejor calidad con el m谩s alto grado de refinamiento.

Me llevo con grandes aprendizajes de esta clase sin embargo el punto mas importante es ser un gran dise帽ador , esto me lleva a lograr tener una mejor abstracci贸n del problema para poder irlo creando parte a parte que al final tenga el producto desarrollado.

Pienso que el an谩lisis de los problemas a trav茅s del m茅todo causa-ra铆z es una buena manera de encontrar lo que se debe resolver. Igualmente la regla 80/20 de Wilfredo Pareto.

El feedback es la herramienta m谩s importante del desarrollo de software moderno.





DIFICULTADES
Se dividen en dos tipos de problemas
ESENCIALES

  • Complejidad: Dependiendo de la dificultad del problema
  • Conformidad: los contextos en los que se usa nuestro software
  • Tolerancia al cambio: Los cambios del problema que podemos ir resolviendo
  • Invisibilidad: La forma y infraestructura en la que est谩 creado el software

驴C贸mo resolver las dificultades?

  • Mirar la opci贸n de no tener que desarrollar desde 0 el problema
  • Prototipado r谩pido: evaluar si se est谩 resolviendo el problema lo m谩s r谩pido posible (se necesita feedback)
  • Desarrollo Evolutivo: hacer un sistema que se puede adaptar seg煤n diferentes requerimientos
  • Grandes desarrolladores: crear un sistema que resuelva el problema de la mejor manera posible seg煤n lo requiera el problema

ACCIDENTALES

  • lenguaje: La dificultad del lenguaje que usemos
  • Multi-procesamiento: Problema de cantidad de procesos que puede llevar la m谩quina que actualmente se est谩 resolviendo
  • Entorno programaci贸n: APIS y librer铆as

驴Qui茅n es Frederick P Brooks Jr?

Dejo mis apuntes de esta clase por si a alguien le sirve.
En formato PDF
Y a continuaci贸n en im谩genes:

Todav铆a se utiliza la metodolog铆a en cascada para algun proyecto en 2019 / 2020 ?

El problema accidental que m谩s veo es cuando un software se ha construido usando cierto lenguaje de programaci贸n o base de datos y para optimizarse se tiene que migrar a sistemas m谩s eficientes.

Prototipado r谩pido

El concepto de arquitectura de software se refiere a la estructuraci贸n del sistema que, idealmente, se crea en etapas tempranas del desarrollo.

el punto decisivo es la agilidad

Problemas Esenciales CCTI

  • Complejidad
  • Conformidad
  • Tolerancia al cambio
  • Invisibilidad

Para resolverlos se debe usar

  • No desarrollar
  • Prototipado r谩pido
  • Desarrollo evolutivo
  • Abstraerse del problema, ver el problema mas general

Problemas Accidentales PT

  • Plataforma
  • Tecnolog铆a
    Lo accidental se va ir solucionando por el contexto

Hace mucho que pase esta clase en la universidad y no me acuerdo de nada de esto

Problemas esenciales: necesarios para que el software s铆 solucione el problema que se quer铆a
Problemas accidentales: el c贸mo solucionamos los problemas esenciales

les dejo un resumen:

Los problemas esenciales en el desarrollo de software son aquellos que son cr铆ticos para el 茅xito del proyecto y son necesarios para lograr un software de alta calidad, como el dise帽o, la implementaci贸n, la verificaci贸n y validaci贸n, y el mantenimiento.

Por otro lado, los problemas accidentales en el desarrollo de software son aquellos que surgen debido a errores o incertidumbres en el proceso de desarrollo, como errores de codificaci贸n, problemas de rendimiento, problemas de escalabilidad, problemas de seguridad, problemas de compatibilidad, problemas de documentaci贸n y problemas de calidad. Es importante tener en cuenta ambos tipos de problemas para lograr un software de calidad.

馃挕 Los detalles accidentales van y vienen, los problemas esenciales se aferran al problema que se trata de resolver en cuesti贸n, si no se abarcan en el dise帽o, se quedaran en la soluci贸n propuesta por el arquitecto de software, como un parasito. ( Veas茅 la deuda t茅cnica )

Ac谩 est谩 el paper 鈥淣o Silver Bullet鈥 de Frederick Brooks
https://www.cs.unc.edu/techreports/86-020.pdf

Que gran clase!

Debemos saber cuando es un problema accidental o esenciales, porque a veces las librer铆as solucionan un problema por un tiempo determinado, entonces hay que saber identificar.

Problemas esenciales

Complejidad : Complejidad a nivel t茅cnico sobre la regla de negocio.
Conformidad : Contexto del software y adecuaci贸n, tener en cuenta limitantes en sitio y usuarios
Tolerancia al cambio : Cuando puede cambiar el problema al que se intenta apuntar con el Software, por ejemplo leyes fiscales.
Invisibilidad : Intangible, por eso importante documentar.

Problemas accidentales

Lenguajes de alto nivel : Lenguajes mas cercanos al lenguaje humano.

Multiprocesamiento : Desarrollar con mas feedback. Estado espec铆fico de la tecnolog铆a.

Entornos de programaci贸n : Si un entorno nos facilita el desarrollo tendremos ventajas sobre ingenieros del pasado.

No silver bullet trata sobre el verdadero desarrollo de Software, lo esencial de este se guarda todav铆a en su dise帽o, en la comprobaci贸n del concepto mas no en una soluci贸n t茅cnica y temporal que puede solventar mediante una librer铆a u otra.

隆隆Extraordinaria explicaci贸n!!

Al final el software es como la vida, tener dinero, herramientas, contactos te puede solucionar todas las dificultades accidentales. Pero de nada sirve si vos internamente no sos capaz de resolver tus dificultades escenciales, y adem谩s se le suma el tener que descubrir cual es o son tus propias dificultades escenciales a resolver.

驴C贸mo resolver las dificultades?

No desarrollar: Comprar - OSS: Es el primer camino. Apoyarse en una herramienta ya existente para abordar el problema. Una herramienta privativa, open source, etc.

Prototipado evolutivo: Es el desarrollo de soluciones basados en metodolog铆as 谩giles. Se busca obtener un producto r谩pido para determinar r谩pidamente si se est谩 abordando correctamente la necesidad o si no. El feedback es la herramienta m谩s importante del desarrollo de software moderno.

++Desarrollo evolutivo: ++Tiene que ver con el anterior pero est谩 m谩s alineado a lo que es la creaci贸n y acumulaci贸n de sistema, es decir, desarrollar iterativamente pero no hacer una evoluci贸n sino ir cambiando el sistema. Se basa en obtener peque帽os resultados y cada vez hacer que la soluci贸n evolucione

Grandes dise帽adores: No son programadores que saben usar tecnolog铆a, sino que son ingenieros que saben abstraer el problema puntual y entender un problema m谩s general. Son capaces de dise帽ar soluciones elegantes y que sean simples, que resuelvan el problema de la mejor forma y que a la vez tenga los mejores atributos de calidad en las partes en que el problema lo requiera.

el problema esencial como el accidental son desafios que se presentan en el desarrollo, aunque los problemas esenciales son mas de la capacidad inteleptual del equipo de analizar y proponer soluciones. en cambio, el accidental tiene que ver con el conocimiento de la herramientas existentes y sus actualizaciones para usarlas a conveniencia.

Abstracci贸n!

Un gran dise帽ador ser谩 el que sepa como abstraer un gran problema y encontrar la mejor soluci贸n que sea elegante y simple con mucha calidad

Hacer software es de las cosas mas dificiles que existen, pero a su ves, es el arte m谩s divertido y poderoso

Construir software tiene muchas implicaciones, es riguroso crear software de calidad.

por esta clase especificamente me atrever铆a a afirmar que la inteligencia artificial nunca va a reemplazarnos del todo.

Excelente clase! 馃槂

Para tener en cuenta respecto a la Tolerancia al cambio:

Todo el software que triunfa cambia, debido a dos procesos:

  • Primero, cuando un programa resulta 煤til, la gente intenta usarlos para nuevas aplicaciones en el l铆mite o m谩s all谩 del dominio original para el que se dise帽o. La presi贸n para extender las funcionalidades proceden de usuarios a los que les encantan las funciones b谩sicas e inventan nuevos usos para ellas.

  • Segundo, el software exitoso sobrevive m谩s all谩 de la vida del hardware para el que fue dise帽ado. Si no son nuevos computadores, son nuevos discos, pantallas, impresoras鈥; y el software debe adaptarse para estas nuevas oportunidades.

Una nota interesante de No Silver Bullet respecto a la Tolerancia al cambio o Variabilidad es: 鈥淓l software vive dentro de un entorno cultural de aplicaciones, usuarios, leyes y hardware. Todo este entorno cambia continuamente, y esos cambios inexorablemente fuerzan a que se produzcan cambios en el software鈥.

Ahora con la salida de GitHub copilot y el avance de la IA considero que cada vez se resolver谩 m谩s r谩pido el problema de la complejidad.

Dificultades en desarrollo de software

Podemos dividir estos en dos tipos de problemas

Esenciales

Especificaci贸n, dise帽o y comprobaci贸n del concepto

  1. Complejidad: Es cuando el problema a resolver es complejo por si mismo.

  2. Conformidad: El contexto del uso del software, y la adecuaci贸n al mismo.

  3. Tolerancia al cambio: Una vez terminado el software, 驴Qu茅 tan f谩cil se podr谩 modificarse?.

  4. Invisibilidad: El software no tiene forma f铆sica, si no que esta representado en c贸digo, infraestructura, etc.

Accidentales

Detalles de la implementaci贸n y producci贸n actual, como: software, tecnolog铆a, framework, etc.

  1. Lenguaje de alto nivel: Las maquinas entiende solo lenguaje binario, los lenguajes de programaci贸n se abstraen de esto, construyendo lenguajes de 鈥渁lto nivel鈥 el cual es mas cercano al lenguaje humano, para una mayor facilidad de interacci贸n y creaci贸n de este.

  2. Multiprocesamiento: Actualmente con la tecnolog铆a actual, nos permite tener varios proceso al un铆sono, esto no da la opci贸n de tener mucho mejor feedback y sistemas muchos mas 贸ptimos.

  3. Entornos de programaci贸n: Es el editor de c贸digo, que muchas veces traen herramientas que nos facilitan el trabajo a la hora de programar, ejemplo: visual studio code, atom, etc.


驴C贸mo resolver las dificultades esenciales?

  1. No desarrollar: Si la soluci贸n a tu problema ya existe, cons铆guela! No es necesario reinventar la rueda si esta ya existe, toma esa soluci贸n mas peque帽a y int茅grala a tu soluci贸n grande.

  2. Prototipado r谩pido: Metodolog铆as 谩giles, obtener feedback lo antes posible de que si estamos resolviendo el problema correcto.

  3. Desarrollo evolutivo: Metodolog铆as 谩giles, obtener resultados peque帽os e ir evolucion谩ndolas.

  4. Grandes dise帽adores: Son desarrolladores que sean capaces de abstraerse del problema puntual y entender un problema mas general, generando soluciones simples pero con calidad.

Si esto es cierto, hacer software siempre ser谩 dif铆cil.

Muy buena clase.

no habr谩 una soluci贸n para los errores cometidos en lo escencial

En este curso se puede aprender a comprender documentaci贸n para la creaci贸n de software?

Las dificultades en el desarrollo de software se dividen en dos tipos:
鈥 Esenciales: Se centran en las especificaciones, dise帽os y comprobaci贸n del concepto.
o Complejidad: Cuando el problema a resolver es muy complejo.
o Conformidad: En qu茅 contexto se va a utilizar y como se adecua ya que el contexto no es perfecto.
o Tolerancia al cambio: Una vez concluido el software se puede implementar nuevos cambios, por ejemplo las leyes de facturaci贸n.
o Invisibilidad: El software no es tangible ya que est谩 plasmado en condigo, infraestructura, diferentes momentos de decisiones.

鈥 Accidentales: Detalles de la implementaci贸n y producci贸n actual 鈥淟enguaje, Server, base de datos鈥
o Una dificultad t铆pica es el leguaje a utilizar
o Multiprocesamiento: Resuelve el problema del feedback, por ejemplo tiempo de pruebas.
o Entornos de programaci贸n: La evoluci贸n de las tecnolog铆as las cuales podemos utilizar, por ejemplo el utilizar librer铆as.

驴C贸mo podemos resolver las dificultades esenciales?
鈥 No desarrollar: Si el problema a solucionar es esencialmente complejo, la soluci贸n podr铆a ser no desarrollas y buscar alternativas como por ejemplo comprar software que ya resuelve el problema o aprovechar el Open Source.
鈥 Prototipado r谩pido: Lo esencial es desarrollar partes peque帽as y obtener feedback del cliente para as铆 determinar si lo que estamos realizando es lo que se necesita, esto permite la evoluci贸n.
鈥 Desarrollo Evolutivo: Obtener resultados peque帽os y posteriormente realizar nuevas implementaciones.
鈥 Grandes dise帽adores: Dise帽ar sistemas que resuelvan los problemas de forma 贸ptima.

La complejidad

Con esto se me ocurre que JQuery como tal resolv铆a algo accidental, algo temporal y no algo esencial. Con esto no estoy diciendo que JS lo resuleva todo, pero si estoy diciendo que ahora JQuery ya no resuelve lo que resolv铆a en alg煤n tiempo.

muy aclarados es muy real

el desarrollo evolutivo con prototipados 谩giles son un pilar muy importante en nuestra 茅poca para la estructura y desarrollo de cualquier proyecto.

Buena Explicacion.!! 馃槂

Creo que este punto es la esencia de los problemas accidentales del desarrollo del software.

Siento que en este curso he encontrado el material que he estado buscando. Dise帽ar una soluci贸n elegante a un problema viendo me parece de lo m谩s interesante y satisfactorio. Excelente curso. Muy entusiasmado por continuar!

No Silver Bullet. Por qu茅 no existe la bala de plata?

Complejidad

  • De la complejidad de la funci贸n procede la dificultad de llamar a la funci贸n, lo que hace dif铆cil de usar al programa.
  • De la complejidad de la estructura procede la dificultad en extender el programa para realizar nuevas funciones sin crear efectos laterales.
  • De la complejidad de la estructura proceden los estados no previstos que se convierten en agujeros en la seguridad.

Conceptos extra铆dos de:

reconocer cuales son las dificultades a las que te enfrentas y de que tipo te puede dar una idea de como sortearlas y obtener un mejor software

Es en resumen para mi el mejor momento de la clase, indica que los problemas fundamentales del desarrollo de software son complejos de solucionar, no es cuestion de una libreria o un framewok

en teoria deberiamos enfocarnos en resolver lo esencial que ya alguien resolvio lo accidental

prototipados rapido en si seria prueba, error y solucion

El desarrollo evolutivo es la mejor opci贸n para solucionar dificultades esenciales

me hubiera gustado saber esto antes de empezar a programar solo me hubiera ahorrado tiempo

No entiendo por qu茅 la forma que m谩s le gusta a Guido de solucionar los problemas esenciales es no desarrollar. Es curioso

La divisi贸n de los problemas esenciales y accidentales me permiti贸 saber identificarlos mejor y poder atacar a cada uno de acuerdo a lo necesario

Dificultades de desarrollo de software La momento del de desarrollar la arquitectura debemos tener en cuenta cu谩les son las dificultades a resolver聽 La dividimos en dos tipos las dificultades esenciales y las accidentales聽 Los esenciales los dividimos en 4 La complejidad: que en s铆 lo complejo de solucionar el problema a resolver聽 La conformidad: es tener en cuenta en contextos va a funcionar el software las limitaciones y condiciones en la cual va a funcionar聽 La tolerancia al cambio: es la tolerancia del software a las variaciones que pueda tener el problema a resolver . La invisibilidad :es que en si el software es invisible intangible no podemos verlas ni palparlas聽 Y la accidentales sin todas aquellas que est谩n ligadas a la tecnolog铆a plataforma y las limitaciones de compatibilidad

La tolerancia al cambio

La conformidad

Invisibilidad

DIFICULTADES: accidentales

驴C贸mo resolver las dificultades esenciales? No desarrollar

Desarrollo evolutivo

Creo que a la hora de dise帽ar y desarrollar un proyecto, es muy importante tener habilidad de discernir en lo que se est谩 haciendo, es decir, si estamos creando una soluci贸n, preguntarnos constantemente, es esta una soluci贸n viable?, es simple? habr谩 una soluci贸n distinta?.. etc
El poder del discernimiento es muy grande, y se que no viene al caso, pero me gustar铆a compartir esto xd鈥 llega un momento, en el cual discernimos todo, nos preguntamos todo, y no damos nada por hecho, 驴por que estoy aqu铆? 驴donde estoy? etc鈥
y llegar谩 el momento en el que estaremos durmiendo, en nuestros sue帽os, y nos preguntaremos algo de eso, y quiz谩s鈥 quiz谩s al preguntarnos, al discernir nos daremos cuenta de que estamos so帽ando, y entonces, pues habremos despertado en un sue帽o!
quiz谩s podr铆amos hacer eso mismo ahora, y nos dar铆amos cuenta de que en este momento estamos durmiendo, estamos so帽ando鈥 jajajajja saludosxd

La Calidad no es Utilizar herramientas que resuelvan problemas accidentales o utilizar las ultimas tecnologias de moda, es comprender y que nos confirmen los criterios de aceptacion de los interesados del proyecto.

No desarrollar, qu茅 locura y s铆 jajaja

no desarrollar, hacerlo simple

buena explicaci贸n

Excelente vamos por ello

Excelente clase!

De gran contenido esta clase!