Etiquetas
Los que leen habitualmente mi blog conocen mi opinión sobre la «ingeniería del software tradicional», muchas veces hablé de ello y del «mal» que hacen en general a la profesión, y hasta como limitan la innovación.
Nunca me gustó que se llame «ingeniería» a un proceso que tiene poco que ver con los de las ingenierías tradicionales, entre ellas que las tradicionales poseen una serie de herramientas analíticas y cuantitativas para evaluar y estimar riesgos y tolerancias. En el desarrollo de software no tenemos esas herramientas, quizás nunca las tengamos: no es lo mismo trabajar en la construcción de elementos físicos, limitados por leyes fundamentales de la física, con pocas combinaciones posibles, con la construcción de programas informáticos que no tienen esas limitaciones físicas, ni en las combinaciones posibles.
Este tipo de visión propuesta desde el mismo nombre «ingeniería» nos lleva a errores muy importantes, por ejemplo el de suponer que las construcciones físicas y las matemáticas [los programas] son equivalentes. No sólo hace «daño» a los proyectos que nunca pueden cumplir plazos y presupuestos, sino también a la propia «ciencia» y profesión informática. Es un engaño, fundamentalmente a los propios profesionales. Así se cometen errores derivados como reclamar colegios, regulaciones y normas y procedimientos similares a otras ingenierías: las soluciones equivocadas son más perjudiciales que los problemas abiertos. Además es ponernos una venda en los ojos para no observar el verdadero potencial de la informática, ni para darnos cuenta de dónde está la innovación (que no es precisamente seguir haciendo el mismo software de siempre).
Escribí bastante sobre estos temas, fundamentalmente en apuntes críticos con la creación de los colegios oficiales informáticos. El núcleo de la argumentación es la que comentaba antes, incluso de crear una «pseudociencia» (p.e. en Recursividad, punteros, estadísticas y pseudociencia del software, Diseño, ingeniería, ágiles… y frameworks, Redescubriendo al Dijkstra provocador 18 años después), además enseñado en la universidad como si de leyes científicas se tratasen –quizás lo que más daño hace–.
También critiqué al establishment de la «ingenieria del software», dominado por tecnológos pocos «científicos» –en su mayoría empleados de grandes corporaciones de desarrollo de software para empresa de Fortune 500– que en ninguna de sus publicaciones científicas presentan los datos para que puedan ser contrastados (algo inherente del software privativo) y sometidos al peer review (que no es aceptable en ninguna otra rama científica). Este mismo establishment ha ignorado durante muchos años al software libre con sus métodos de diseño y desarrollo completamente contradictorios con los propuestos por la «ingeniería tradicional» (muy bien expuesto en al «Catedral y el Bazar» de Eric Raymond).
Muchas de las respuestas que tuve –incluso entre supuestos reputados profesionales– es que «hago daño a la profesión» [sic].
Pero ahora está surgiendo el mea culpa de los gurús incondicionales de la «ingeniería del software». El reconocido gurú Tom DeMarco (gracias Paco) que escribió el artículo de opinión Software Engineering: An Idea Whose Time Has Come and Gone? (algo así como «Ingeniería del software: ¿una idea de tiempos pasados?») que es en gran parte una autocrítica a sus ideas y libro de referencia Controlling Software Projects: Management, Measurement, and Estimation.
Resumo sus ideas fundamentales con algunas de sus frases traducidas literalmente:
- Hoy en día todos comprendemos que las métricas de software cuestan dinero y tiempo, y que deben ser usadas con moderación.
- El desarrollo de software es inherentemente diferente de las ciencias naturales tales como las física, por lo que sus métricas son muchas menos precisas para capturar lo que deben describir.
- La frase más citada del libre es «No puedes controlar lo que no puedes medir». Esta frase contiene una verdad real, pero cada vez me sentía más incómodo con el uso que hice de ella. Está implícita en la frase (y en título del libro) que el control es un aspecto importante, quizás el más importante, de cualquier proyecto de software. Pero no lo es.
- Muchos proyectos se han realizado sin demasiado control pero han generado productos maravillosos tales como Google Earth o la Wikipedia.
- Esto nos lleva a la desagradable conclusión que el control estricto es algo que importa mucho en proyectos relativamente inútiles y mucho menos en proyectos útiles. Sugiere que mientras más te enfoques en el control aumenta la probabilidad de que estás trabajando en un proyecto que se esfuerza por generar algo de valor relativamente menor.
- ¿Estoy diciendo que está bien ejecutar proyecto sin control o con un control relativamente menor? Casi. Estoy sugiriendo que deberíamos seleccionar primero a los proyectos cuyo control preciso no importe demasiado.
- Estoy llegando gradualmente a la conclusión que el momento de la ingeniería del software vino y se marchó.
- En los últimos 40 años nos hemos torturado por nuestra ineptitud en acabar proyectos a tiempo y con el presupuesto previsto. Pero como sugerí antes, no debería haber sido el objetivo supremo.
- El objetivo más importante es la transformación, crear software que cambie el mundo, o que transforme una empresa, o la forma en que hace negocios.
- El desarrollo de software es y será siempre algo experimental. Lo construcción real de software no es necesariamente experimental, pero sí lo es su concepción. Allí deberíamos enfocar nuestros esfuerzos. Allí es donde deberíamos haberlo hecho siempre.
Está muy bien que por fin los gurús de la «ingeniería [tradicional] de software» comiencen a reconocer errores y dejar de ignorar a los métodos y filosofías tan habituales del software libre y de proyectos que han sido realmente innovadores desde el punto de vista de gestión de proyectos de software. Todavía se queda corto y esta opinión me deja la misma sensación de dejè vu que me produjo hace unos diez años la moda de lo métodos ágiles y la programación extrema: era algo que ya se veía hace tiempo en el software libre y de hecho era mucho más radical que las «radicales» nuevas metodologías y métricas. Por ejemplo.
Tom DeMarco cita a dos proyectos que le parecen notables para mostrar la contradicción con las ideas tradicionales: Wikipedia y Google Earth. Pero resulta que ambos tienen muy poco que ver y no han sido «seminales» en sus aŕeas.
El software de la Wikipedia [un wiki colaborativo] es muy sencillo y no fue el primero en hacer un programa de este estilo. el éxito e importancia social de al Wikipedia es el proyecto global, y cómo ha conseguido formar una enorme comunidad de gente que comparte valores de fomentar la divulgación libre del conocimiento. Poco tiene nada que ver con «desarrollo de software», sino con valores y conceptos mucho más amplios.
Google Earth es un programa mucho más complejo pero que ya eran comunes desde principios de la década de los ’90, con el auge de las estaciones 3D (el líder indiscutible era Silicon Graphics, SGI) y la realidad virtual. De hecho Google Earth surge de la compra de una empresa (Keyhole) que a su vez se basó en otras ideas e implementaciones previas de 1994. El logro fundamental de Google Earth poder acceder a esa cantidad de datos y dejarlos a disposición de todo el mundo, algo que antes sólo podían hacer muy pocas empresas. (En todo caso yo hubiese mencionada a Google Maps, porque mostrar esa información usando sólo HTML y Javascript sí fue una innovación importante, junto con Gmail mostraron el camino del desarrollo de aplicaciones Web/Ajax complejas).
Si yo tuviese que elegir proyectos de software realmente indicativo de las contradicciones con las «métricas tradiconales», por ejemplo:
- Núcleo Linux: Es muy complejo desarrollaro un núcleo de sistema operativo, la variedad de hardware es enorme, los bugs tienen consecuencias graves, se necesitan mucho conocimientos, tiene una enorme cantidad de elementos independientes, las combinaciones de caminos de ejecución de casi infinitas. Aún así se desarrolló uno que funciona desde los superordenadores más grandes del mundo a los teléfonos móviles, con el aporte de miles de programadores sin ningún tipo de reuniones, coordinación, diseño previo o siquiera documentación básica (ahora ya hay bastantes libros y documentos).
- KDE/Gnome: Dos proyectos complejos, independientes pero competidores e incluso «con esfuerzos inaceptablemente duplicados», pero que cada uno aportó innovaciones en distintas áreas y se integran o usan en entornos diversos como escritorios completos a dispositivos móviles o multimedias (por ejemplo el Sfari/Webkit que se ejcuta en Mac, iPhones, Androids y Nokias es derivado directo del KHTML de KDE).
- Sistema GNU/Linux o BSD (+ X.org, +GNOME/KDE, +multitud de software): Ejemplo radical de cómo se pueden construir sistemas complejos muy completos basados sólo en una coordinación o consenso mínimó para las interfaces entre ellos. Estas interfaces además son muy simples y no han dejado de evolucionar sin necesidad de «cambios drásticos».
Cualquiera de los tres proyectos es –en código fuente– órdenes de magnitud más grande que la Wikipedia o Google Earth, además ninguno de ellos dependió de una empresa o fundación, y tienen una complejidad y diversad de uso mucho mayor.
Por eso, está muy bien que empiecen a descubrir todo un mundo allí fuera, que creció y se desarrolló sin seguir las métricas y métodos «tradicionales». Es aún una mejor noticia que los gurús de la ingeniería del software empiecen la autocrítica de las ideas erróneas que han fomentado durante 40 años.
Estaría ahora muy bien que los fanboys de esa «ingeniería» empiecen a aceptarlo. Pero sería mucho mejor que los responsables de planes de estudio y asignaturas de «ingeniería del software» en las carreras informáticas sean conscientes del problema, al menos ya tienen a uno de sus gurús poniendo en dudas los cimientos de su [pseudo] ciencia. Quizás así dejaremos de leer y escuchar falacias tales como «para ser buen director de proyecto no hace falta saber programar», «un proyecto es malo si no tiene un diseño previo bien especificado y documentado», o el mantra:
[…] podemos y/o debemos gestionar un proyecto de software de la misma forma que un proyecto de arquitectura.
Futurología: en unos pocos años veremos que el hot topic en las publicaciones de ingeniería del software serán estudios de caso de grandes proyectos de software libre. Nos hablarán de la radicalidad de los métodos ágiles usados, la coordinación debil, el software evolutivo, la complejidad de las relaciones sociales entre programadores y usuarios, la influencia del uso real de los usuarios para el diseño del software, la importancia del release often, del peer review, los casos reales de uso no previstos por los programadores… y volveré a sentir una sensación de dejà vu.
Muy de acuerdo con esta anotación. Felicidades.
Pingback: ¿”Ingeniería” del software? Ahora vienen los mea culpa
Sin ser ingeniero pero tras llevar bastantes años en esta profesión, todo lo que comentas es algo que más o menos intuía y veía a diario.
Grandes proyectos megasuperplanificados y organizados que se demoraban y volvían incontrolables frente a otros que (software libre principalmente o programas creados «anárquicamente» pero por gente competente) crecían y evolucionaban con salud y sin tantas zarandajas de diagramas de Grant ni montones de pogüerpoints con «casos de uso», etc.
Mira que llevan diciéndolo años, pero no se escarmienta: «There is not silver bullet».
Últimamente tengo la suerte de trabajar con gente competente y motivada y cada vez lo tengo más claro: un proyecto de software tiene que estar dirigido (o coordinado, o planificado) por programadores, no por gerentes.
Estamos de acuerdo en lo fundamental. Las metodologías ágiles se basan en dar más importancia a lo que hay que hacer que al control férreo de métricas y programadores. La mayoría tienen un grado de burocracia y ceremonia muy bajo o que tiende a cero.
Por otro lado sí que creo que es necesario medir, pero sabiendo para qué, y conociendo que según cómo se haga el simple hecho de medir puede influir en los resultados.
Necesitamos medir para poder hacer estimaciones en proyectos de presupuesto cerrado. Necesitamos medir para poder comparar productividades entre lenguajes de programación.
Aún así el margen de error que manejamos es muy alto, y estamos lejos de poder dar verificaciones formales a nuestros programas.
El software libre, por otro lado, creo que sí está acercando el desarrollo a las ingenierías tradicionales: no hay verificación formal, pero sí verificación por parte de pares, el código libre es reutilizable, adaptable y modificable.
Creo que el problema no está en que le demos a nuestra profesión un nombre u otro, sinó como bien dices en las falacias que trae asociadas el nombre.
Para ser un buen jefe de proyecto hay que preocuparse por conocer el trabajo que se tiene que realizar, tanto de programación como de sistema, simplemente porqué es mucho más fácil ponerse en lugar de la gente a la que gestionas si conoces qué les estás pidiendo que hagan, así que conviene conocer programación, sistemas, bases de datos y si conviene saber hacer un buen café.
Al final lo más importante y lo más interesante de nuestra profesión son las personas.
Tienes más razón que un santo, y lo triste es que cuanto mayor responsabilidad se tiene en proyectos de software, más se tiende a desconectar de los aspectos técnicos y funcionales, para atender a temas legales y contractuales, que en última instancia sólo servirán para «cubrirse las espaldas» sin aportar nada al proyecto original.
Muy buen artículo. Nunca me gustaron esos «analistas» de librillo y corbata.
Sin embargo viendo el modelo flexible también me surgen dudas:
El «problemón sin solución» viene a la hora de marcar los criterios de calidad (que no de estandarización) ya que la alta variabilidad que comentas hace imposible encontrar algún punto de partida.
Por ejemplo mirando el caso de KDE (en los otros no sucede) parece que han variado los criterios de «calidad» y tras conseguir un sistema estupendo «3.5» dan un giro repentino hacia un sistema más «usable/amigable» pero con una pontencia, siempre dentro de mi subjetividad, mucho menor. Y esto me hace pensar que podrían entrar en un ciclo de desarrollo oscilatorio donde en una versión van a valorar más la pontencia y en la siguiente más la usabilidad sin llegar a una meta concreta.
«que en ninguna de sus publicaciones científicas presentan los datos para que puedan ser contrastados (algo inherente del software privativo) y sometidos al peer review (que no es aceptable en ninguna otra rama científica).»
IETF
conbinaciones es con m
@elhumero, qué vergüenza, gracias.
Enhorabuena por el blog y por tu papel en la universidad, Ricardo. Uso windows pero aprecio tu obra.
¿ Por qué atribuyes a la palabra «ingeniería» cosas relacionadas con «las físicas y las matemáticas» ?
La palabra proviene de Ingenio, así que puede haber una ingeniería del Software, solo que muy pocas personas lo saben usar …
En mis largos años de tanta teoría me he vuelto un devoto servidor de las mejores prácticas, son la única luz en tanto complejo desierto de claridad.
«Coma yerba, millones de vacas no pueden equivocarse»
¿Plagio? Juzgad vosotros mismos, el mismo articulo, hoy:
http://www.codinghorror.com/blog/archives/001288.html
Por lo menos aguanta unas semanas para que no sea tan cantoso.
@ubersoldat
No sé si sólo eres troll, no sabes leer, o eres bastante tonto, o todo junto:
1. Mira el enlace que sale en «gracias Paco» que hay en el cuerpo del apunte.
2. Lee los dos artículos.
3. Lee la definción de plagio.
4. Si no entiendes inglés o no has leído ambos, mejor cállate antes de acusarme de cometer ilícitos penales.
Hay que aguantar cada cosa… la ignorancia envalentonada.
Hace años que vengo diciendo que la informática es igual que el periodismo: deben de dejar de ser carreras universitarias «de ciclo completo» y mejor dejarlas para los que ahora van a ser los master. Y me explico. Para hacer un buen programa económico (igual que para hacer un buen artículo de economía) lo primero que hace falta es «saber» de economía. Y después, estudia la «técnica» para saber implementarlo (o escribirlo). Primero se tiene que tener la idea de qué pintar (el Guernica) y después saber cómo (uso de pinturas y brochas/pinceles). Si sabes mucho de pinturas, oleos, acrílicos, tamaño del pincel, tipo de cerda que usas, etc. posiblemente serás un «técnico» con un saber erudito pero inutil porque nunca pintarás el Gernica.
Recuerdo a una amiga que terminó la Licenciatura de Informática [sic] (en la UPM, que es «la buena» en Madrid, no las que han surgido después en otras, que son solo academias y de las malas y que antes era Licenciatura y no Ingeniería) que el primer proyecto que le encargaron fue un programa de contabilidad… 6 meses tuvo que estar estudiando contabilidad porque no sabía lo que quería el cliente.
Y no digamos ya de aquellos que estudian una carrera (que los profes hacen «dura» de forma innoble para otorgarle una mayor credibilidad frente a otras ingenierías) para después dedicarse a vender (=comerciales) software privativo…
Se puede decir más alto pero no más claro.
El núcleo de Linux tiene TANTOS desarrolladores. En la versión 2.6.24 había «sólo» 1057 desarrolladores. Son muchos, pero no tanto como cabría pensar.
Además, no todos contribuyen de la misma manera.
Cito de la página de Linux Kernel development:
«Despite the large number of individual developers, there is still a relatively small number who are doing the majority of the work. Over the past three years, the top 10 individual developers have contributed almost 15 percent of the number of changes and the top 30 developers have contributed 30 percent.»
También, si contamos por cantidad de cambios, RedHat, Novell, IBM e Intel han contribuído, cada una, más que la propia Linux Foundation, aunque en verdad los que más contribuyen son desarrolladores individuales o cuyo empleador es desconocido.
No podría estar más en desacuerdo.
Accepto que los ejemplos citados són si duda un claro reflejo de que en determinados proyectos la Ingeniería del Software no es en absoluto una buena fórmula, pues tal y como muy bien explicas limita la creatividad.
Pero para una crítica como esta no vale con poner 3 ejemplos en los que ha triumfado la ruptura con esta doctrina, pues hace falta un análisis de la otra parte.
Porquè has olvidado comentar proyectos como SAP? Un software creado bajos los más rigurosos y estrictos parámetros de la Ingeniería del Software. No digo que sea lo mejor que le ha pasado al mundo empresarial pero no se puede cuestienar que la E.S. es la clave de su éxito. Proyectos como edreams, CUDA, Cg… són inalcanzables sin la E.S.
Sin embargo estoy deacuerdo en que limita la creatividad y ciertos proyectos es inviable sostentarlos en la E.S.
En mi opinión, lo certero está en saber discernir cuando un proyecto requiere aplicar E.S. y cuando no. Si se aplica bien el criterio ambos casos seran un acierto.
Totalmente de acuerdo con el artículo. Te vas a echar encima a todos los fanboys de ingeniería, pero los argumentos serán una buena coraza.
El debate sobre el control exceciso también se da en la gestión de empresa, y de hecho se llega a las mismas conclusiones.
En un entorno competitivo y cambiante, que prima la innovación y poner un producto nuevo y único en el mercado lo antes posible y siendo el primero lo importante son otras cosas y no el control.
El control es necesario, pero en dosis pequeñas, hay que tener cintura como gestor para saber qué controlar y donde dar libertad a tus empleados para que tengan una libertad mental que les permita innovar.
En el desarrollo de software es ingual, pero además es siempre así, siempre se debe estar innovando, sino estás muerto como producto o empresa.
Yo lo he visto en el desarrollo de software desde hace muchos años, los proyectos que más controlaba aportaban mucho menos valor, y los que daba libertad salían más rápido y mejor, ¿por?, pues básicamente porque los programadores tenían la libertad mental para innovar o hacerlo lo mejor posible. A veces subestimamos la potencia de la inteligencia humana e intentamos domarla con controles absurdos.
Ahí lo dejo:
Cuántas ingenierías han recibido tantos avances en 30 años?
Que es muy fácil decir las cosas pero vamos, lo de los plazos y proyectos críticos… desde el punto de vista de que se le encargue un producto a la empresa? o desde el punto de vista de «pues hoy me apetece empezar tal proyecto…» que desde las trincheras y sin necesidades todo es muy bonito.
Muchos halagos a google earth pero cuanto dinero puede «tirar» esta empresa sin despeinarse y que no cause perdidas? toda esa información tan grandiosa que comentas también vale dinero.
A ver si vamos a encumbrar a Google y lleva camino de ser peor que Microsoft.
@andy
¿Te parecen poco 1057 programadores que trabajan y coordinan remotamente en el núcleo? Es una barbaridad.
Y si cuentas los 17-18 años de historia del Linux debe haber mucho más.
Si a eso le sumas el número de programadores que han intervenido para el desarrollo de las diferentes partes fundamentales de un sistema GNU/Linux completo deben superar los varias decenas de miles, sino supera el centenar. ¿Qué empresa dedicó esa cantidad de programadores?
No sé como no te das cuenta de lo impresionante que son los números.
Tu post me hace recuerdo a las palabras de respuesta de los desarrolladores que leí en algún lugar cuando alguien preguntaba: ¿Cuándo estará listo Diablo 3? (refiriendosé al juego de Blizzard): «Estará listo cuando esté listo». Y aunque ignoro cuanta libertad tengan los desarrolladores de esa compañía con respecto a los paradigmas de la ingeniería de software, me parece que es una respuesta acertada.
A mi parecer queda pendiente de análisis el problema de convencer al cliente que encarga el desarrollo de software a medida, que nuestra estimación acerca cuanto tiempo y dinero va a tomar el proceso es muy inexacta.
Ahí va un estudiante de ingeniería a llevar la contraria. Por favor, no me masacreis…
Creo que en el artículo se mezclan un montón de conceptos muy poco relacionados. En la investigación existen tiempos, pero por motivos evidentes no pueden ser estrictos. Aunque en la práctica, también intentan serlo.
Por otro lado, un objetivo de la ingeniería es formar gente que sea capaz de encontrar la rentabilidad del proyecto y eso es imposible si no existe una manera de medir.
Lo que leo en el artículo tiene su razón de ser en grandes y complejos proyectos, pero oigan, la mayoría de los proyectos son pequeños y como en cualquier otra creación, deberíamos estar capacitados para dar fechas y plazos.
Por otro lado tampoco creo que la programación extrema es una forma de enfocar las cosas, pero también tiene su métrica.
Si bien me ha gustado mucho el artículo y me ha hecho reflexionar, creo que se confunde el moldeado de la escultura con la invención del yeso.
También creo que la informática parece tender a desdoblarse entre la parte científica e innovadora (y por tanto imprevisible) y la parte repetetiva que es la que compete a las ingenierías y que es la gran mayoría del día a día.
Aunque no me he incorporado aun al mundo laboral, actualmente me encuentro desarrollando mi proyecto fin de carrera. Desde un principio mi profesor me propuso realizar un proyecto de una forma libre. Yo decido lo que implemento y lo que no, uso los metodos y las tecnologías que creo mas convenientes, me impongo el ritmo de trabajo (por ahora bastante alto), uso metodos agiles (parecido a xp) para el desarrollo de mi sistema… Todo esto ha influido positivamente en el proyecto, ya que aparte de trabajar más comodo, pasas menos tiempo con formalismos, documentos e informes que sirven mas para «perder» el tiempo que para otra cosa. Te permite tener la mente centrada en lo que verdaderamente importa, hacer una aplicacion innovadora y de calidad, porque al final lo que el usuario ve es eso.
Siempre he pensado que la Ingeniería del Software ganaría mucho si sus practicantes supieran programar.
Aunque fuera el «hola, mundo».
Sin entrar a valorar lo que dices en profundidad, lo que dice la drae a cerca de un ingeniero: «Persona que discurre con ingenio las trazas y modos de conseguir o ejecutar algo.» Y sobre ingeniería: «Estudio y aplicación, por especialistas, de las diversas ramas de la tecnología.»…
Así que no entiendo la manía esa de decir que la Ingeniería Informática no es lo que se conoce como una ingeniería clásica…
@angel
> Así que no entiendo la manía esa de decir que la Ingeniería Informática no es lo que se conoce como una ingeniería clásica…
O sea que no te has leído (o valorado los artículos) pero argumentas que son lo mismo –y por lo tanto lo contrario– sin argumentar técnicamente, sólo con una definición de la RAE.
Hum… me parece bien que opines lo contrario, la mayoría de gurús de la ingeniería del software opinan igual que tú, pero hombre, al menos argumenta adecuadamente, o «valora» a los artículos 🙂
Mucho no ingeniero con envidias me parece a mi.
Que un ingeniero puede cagarla en el diseño , logicamente.
El que se crea que el software libre se hace anarquicamente… se referira a los de pequeña escala, que se meta en el equipo de desarrollo de una distro de linux aver si hace lo que le sale de las pelotas.
Pero claro aqui hay mucho no ingeniero que para ellos la crisis de los 70 fue tonteria, no les hace ni programacion orientada a objetos ellos tiran hacia delante con ASM y te crean un proyecto grande…
Hay datos y estadisticas de que de 100 proyectos 1 salia adelante por eso tubo que salir la INGENIERIA y dejar de ser ARTESANIA.
@Angel, se dice tal cosa porque en la ingeniería clásica existe un sistema de razonamiento previo para garantir la posibilidad del proyecto o la investigación. Este sistema es la física o la matemática. Mientras que en la informática tienes el UML y el prueba/error sin más.
Pingback: Top Posts « WordPress.com
Siempre he sido defensor de los métodos de la ingeniería del software que me enseñaron y tengo que reconocer que el artículo de DeMarco me ha dado mucho que pensar.
Sigue valiendo el «no se puede controlar lo que no se puede medir» y es evidente que, como bien dices, no tenemos herramientas para medir el software correctamente.
Después de la lectura del artículo creo que podemos afirmar que la ingeniería del software clásica introduce un overhead inaceptable en proyectos de software innovadores o experimentales y que, por tanto, la mayoría de sus principios no son aplicables ni válidos y los ejemplos que pones son buenos.
Dicho esto, vamos a situarnos en el contexto de los proyectos de software que desarrollo habitualmente. Este tipo de proyectos se desarrollan sobre una base tecnológica conocida y las funcionalidades a implementar tienen una forma y complejidad conocidas en otros proyectos.
Es sencillo adivinar cuántos métodos de clases hay que programar para una funcionalidad y clasificarlos por complejidad en dos o tres grupos. Sabiendo cuánto tarda un programador con una herramienta determinada se pueden obtener estimaciones muy precisas del tiempo necesario para implementar las funcionalidades e incluso del número de líneas de código o tablas en una base de datos.
Esas son medidas realistas y certeras, aunque no 100% precisas que son imprescindibles para que las organizaciones que desarrollan software a cambio de dinero puedan planificar sus gastos e ingresos.
¿Cómo lo hacemos para introducir innovaciones en un proyecto? Con un margen mucho más abultado y nunca introduciendo más de 2 ó 3 novedades en el desarrollo de un proyecto. Por supuesto, éstas se estiman en tiempo, tamaño y complejidad pero aumentando la previsión de esfuerzo.
Teniendo en cuenta que se desarrollan una docena de proyectos al año, nos plantamos con un orden de 30 innovaciones o mejoras técnicas en la forma o proceso de desarrollo de programas al año.
En otras palabras, se presentan contraejemplos clarísimos que (como ya dijiste hace años) demuestran que los principios de la medida del software no son aplicables en el mundo real y yo los uso cada día con éxito, con poco overhead.
Me atrevería a decir que las medidas en software sólo pueden aplicarse si se dispone de una base de conocimiento etadístico suficientmente ámplia como para que las estimaciones sean precisas y si los proyectos de software que se desarrollan son muy similares entre ellos, algo que pasa muy a menudo en el software de gestión.
En cuanto al debate terminológico me es indiferente que me llamen informático, programador, ingeniero de software o picador de código, aunque en muchas organizaciones (sobre todo españolas) hay una jerarquía de mando donde los programadores son el escalafón más bajo y a algunos les parece despectivo que les llamen programadores. Allá ellos.
Por último, y para terminar, se debería evitar la comparación del mundo de los bits con el de los átomos en todos los aspectos y eso incluye comparar la ingeniería del software con la arquiectura o la ingeniería industrial.
Por supuesto, todas estas particularidades son aplicables únicamente a la ingeniería del software y no a otras disciplinas de la informática como la arquiectura de computadores donde sí que existen métodos cualitativos de medida, aunque sean el voltaje de una placa base. El software, cada día más, es un arte y no una ciencia.
Hola Ricardo,
Que la ingeniería aplicada a la informática no existe tampoco quiere decir que las actividades que comprende aquello que llamamos ingeniería informática no existan. Quiere decir que le damos un nombre, digamos, poco afortunado.
Si hablamos en concreto de ingeniería del software, el hecho de aplicarle el calificativo de “ingeniería” ha hecho mucho daño, estoy de acuerdo contigo. Principalmente por el equívoco y expectativas que genera y que en mi opinión un sector academicista lejos de aclarar, ha potenciado, jaleado por aquellos que querían ver en ese mismo calificativo su escalera hacia alturas jerárquicas libres de los ponzoñosos vahos axilares de los compañeros programadores.
Me reconocerás que de alguna manera tenía que llamarse a ese intento de dotar de predictibilidad a la disciplina (intento que nace hace ahora poco más de 40 años) y que el hecho de explorar nuevas abstracciones y enfoques al “problema del software” es bueno y hasta divertido. Quiero decir que el intento no es malo en sí mismo: explorar está bien, ir más allá de las conclusiones que te permiten los hechos, no tanto.
También ha habido muchos actores que se han aprovechado de esa especie de piedra filosofal de la ingeniería del software (la alquimia del siglo 21) para arrimar el ascua a su herramienta CASE, a su ciclo de conferencias, a su gurú-libro de turno o a su máster, que te iba a convertir por fin en el capataz de obra que siempre habías querido ser.
Y el futuro dirá, veremos qué abstracciones, prácticas y modelos se quedan y qué abstracciones, prácticas y modelos se van por la senda de la evolución a la correspondiente charca de brea.
En todo caso yo veo un ecosistema más o menos saludable.
Lo que encuentro a faltar a veces en tus reflexiones son actores como las empresas de desarrollo-consultoría-implantación y en mi humilde opinión ejercen un poderoso influjo en el estado de la actividad. Usan, en general, aquellos elementos cuya sola mención puede nublar la vista del cliente y hacerles ganar un contrato, pervirtiendo su uso sin rubor alguno un microsegundo después de la firma.
Pero claro, tampoco se puede culpabilizar al tiburón por depredarse a sus inferiores tróficos, qué culpa tendrá él de haber nacido con esos dientes.
Todo normal, en definitiva…
Saludos,
Joaquim Anguas
Señor Galli:
Llevo tiempo siguiendo sus argumentaciones contra la Ingeniería Informática y siempre he pensado que no valía la pena contestar a sus interesadas y manipuladas argumentaciones.
Pero como son las 6 de la mañana de un día insomne y tras leer su lamentable artículo, vejatorio y absurdo, que se nota está escrito por un funcionario frustrado al que parece molestarle que otros reivindiquen sus derechos, pues me he decidido comentarle alguna cosita:
Es muy triste ver que un profesor universitario pueda decir todos los días cosas como las que Usted dice; ver como arremete contra todo el que le lleva la contraria.
Es muy triste ver a todos sus acólitos seguidores como le hacen la pamplina a todas sus delirantes ocurrencias.
Es muy triste ver como de forma reiterada y sin justificación alguna (sinceramente me pregunto ¿por qué?) arremete contra quienes defienden la profesión de Ingeniero Informático.
Es muy triste ver como se niega a ver la verdadera realidad de los profesionales de la Ingeniería Informática desde su púlpito, sin bajar a tierra, sin ver las condiciones laborales de quienes rompen sus ilusiones como un globo de agua que se estrella contra el suelo, cuando llegan al mercado laboral y son sistemáticamente explotados. Es muy triste ver que ya no sólo son pisoteados por la patronal del sector sino que llega Usted por detrás para rematarlos.
Es muy triste.
Pingback: Ingeniería del software a debate. « LegnitaPress
Simplemente impresionante!
Galli, independientemente del contenido de tus posts (que francamente considero que dices lo que sea para tener notoriedad, pues es lo único que persigues), tu talla moral se ve perfectamente en tus comentarios, denigrando e insultando a los que no piensan como tú.
No amas el software libre, te amas a ti mismo, como cuando no dudaste en pervertir el espíritu del software libre y utilizaste el código liberado por otra persona para desprestigiarlo (sin tener ni puta idea de las circunstancias en las que se había creado ese código).
Antes de hablar de conceptos más elevados como Ingeniería o profesiones, aprende conceptos más básicos como educación, respeto y humildad.
Son opiniones… aunque yo opino que en una empresa privada que evidentemente busca el beneficio económico, A LA LARGA le sale rentable hacer un buen análisis y diseño del proyecto acompañado de su documentación, siempre que se trate de proyectos a los que se les espera dar una continuidad y una evolución, claro está, no vas a ponerte a hacer un diagrama UML para hacer un «Hello, world»… Estas cosas del la IS siempre dan una mayor facilidad a la hora de la escalabilidad de un proyecto o de retomarlo por otro equipo de programadores, etc. Que conste que lo digo desde la experiencia.
Aún así puedo admitir que la IS no se ajuste «exactamete» a la definición tradicional de ingeniería, pero de ahí a oir chorradas como que la Ingeniería Informática debe dajar de ser una ingeniería ¡¡o incluso una carrera!!, por favor…
La IS es UNA PARTE de la Ingeniería Informática, de hecho yo soy ITI Sistemas y ni siquiera la estudié en la carrera porque era optativa en mi plan de estudios… sin embargo si que estudié cosas típicas de la ingeniería como Cálculo, Álgebra, Física, Eletrónica, Estadística, a parte por supuesto de Arquitectura de Computadores, de Redes, de SSOO, de periféricos, Programación MUY A FONDO (no como se hace en los cursillos estos que la gente cree que te convierten en «programador»), Inteligencia Artificial, Sistemas Industriales (discretos y continuos), … ¿sigo?. Un II o ITI no tiene por qué dedicarse solo al software, así que ya vale de chorradas, sí lo digo por tí Gisgirigis.
PD: Por cierto, para tu tranquilidad Gisgirigis te diré que en ITI Gestión ya se estudia Contabilidad, Administración de empresas y esas cosillas.
No estoy nada de acuerdo. La potencia sin control no sirve de nada. El software esta fatal y los usuarios mosqueados, y de esto deriva la mala fama que tenemos los informáticos. Los proyectos deberían ser mas estructurados y definidos, y eso es la ingeniería del software. Claro que hay técnicas malas, como también las hay buenas, y por supuesto también hay desfasadas e innovadoras.
En el trabajo tengo un compañero que siempre se queja de tener que programar con el ejemplo del arquitecto que no tiene que poner ladrillos en las obras, para decir que el como ingeniero no tiene que programas, solo planificar, medir, etc… Menos mal que al menos es buen programado, pero no veas como se keja xDDD
Todo esto me parece perfecto. ¿quieres decir que hay que obligar a los clientes a aceptar contratos sin estimación de costes y dejar a los programadores que hagan lo que crean necesario sin restricciones?
¿en qué mundo vives? Eso es completamente imposible y todos tenemos que llevar un plato de comida a la mesa cada mes.
No estoy del todo de acuerdo con el artículo.
Es cierto que comparar la informática con las ingenierías tradicionales, como la industrial, es un error, porque el mundo virtual de la información no se rige por las mismas leyes, y la combinatoria es más amplia, aparte de que cambia muy rápidamente (imaginemos que a los ingenieros de caminos les hicieran diseñar con materiales nuevos y diferentes cada 4 años). Yo más bien la compararía, por ejemplo, con las «ciencias económicas», que tienen su parte científica, pero también mucho de especulación, intuición…
También es cierto que proyectos como el núcleo de Linux han progresado sin tener un equipo que haga reuniones habituales, con unas especificaciones cerradas, etc., sino un poco «cada uno por su lado», aunque haya una sincronización.
Ahora bien, la informática no es sólo eso. En según qué entornos, las especificaciones sí son necesarias. No todo son redes sociales, enciclopedias o programas de software libre (que no se «venden» directamente a nadie y que, por tanto, no tienen unos requerimientos concretos, salvo lo que los mismos programadores intuyen que hace falta).
En un proyecto hecho a medida para una empresa (pongamos por caso el software y firmware de un Eurofighter), o un producto que quieras sacar al mercado (el MS Office por ejemplo), ve tú a los responsables de tu departamento diciendo que pasas de especificaciones, o que el plazo es totalmente indefinible.
El ejemplo de la wikipedia me parece especialmente desafortunado, porque es cierto que ha crecido con la contribución de mucha gente, pero a nivel de usuario, de entrar información. Lo que es el soporte informático , el programa, no es tan descomunal como la wikipedia en sí como centro de información, y es un proyecto que perfectamente se hubiera podido desarrollar siguiendo los métodos de la «ingeniería» con unos recursos no muy grandes.
En definitiva, de acuerdo que la informática no es como caminos, canales y puertos, pero ojo: hay proyectos y proyectos. Aún así, muy interesante.
Estoy en total desacuerdo
No puedes comparar proyectos como
GNU/Linux, KDE y demás con la realidad empresarial, en la que se busca RENTABILIDAD.
Desarrollar un software complejo es difícil, pero aún lo es más estimar el esfuerzo que requiere ese desarrollo, y hacer que ese esfuerzo sea rentable; y ahí es donde entra la ingeniería del software
¿Cuál hubiera sido el coste de GNU/Linux si hubiera que pagar las horas de trabajo de las miles de personas involucradas en el proyecto? ¿Hubiera sido menor ese coste si se hubieran utilizado metodologías de desarrollo más formales? Si no puedes contestar a esto, y no puedes, tus argumentos no demuestran nada con respecto a la validez de la ingeniería de software «tradicional»
Un saludo
@diego
Entonces dile a DeMarco, que cita a la Wikipedia que es software libre y de una fundación sin fines de lucro.
También cita a Google Earth, un software «no comercial».
Yo lo que veo es que hay mucha gente que no sabe lo que es la Ingeniería.
La ingeniería es coger un *catálogo* de piezas, mirar 6 números y poder elegir la que necesitas. Con algunos de esos 6 números te vas a una tabla de otro *catálogo* y buscas otra pieza y la eliges y sabes:
1. Que funcionarán juntas
2. Qué límites de funcionamiento puedes exigirles a ambas piezas por separado
3. Que con otra fórmula y alguna aproximación que está probada como aceptable, puedes saber qué límites puedes exigirles a ambas piezas juntas
3. Que si no te valen esos límites, vas de nuevo al catálogo, buscas otra pieza y ya está
4. Que el día de mañana tu máquina X o construcción Y va a resistir un tiempo determinado y unas cargas determinadas porque a. está calculado y b. puedes hacer pruebas de carga y tener una comprobación fiable dentro de unos límites conocidos
Más aún, la Ingeniería es que, gracias a eso, sé, porque puedo calcularlo, cuánto me van a costar los materiales y cuánto va a tardar el proyecto. Más aún! Que aunque eso no sea *exacto*, puedo calcular el margen de error con un determinado índice de fiabilidad.
La Ingeniería es que puedo hacer esos catálogos, que puedo reducir las características de un rodamiento a 12 parámetros y unas tolerancias, ponerlos en una hoja de especificaciones y ofrecerlo al mundo con esa fiabilidad.
El problema es que ninguna de esas cosas se puede hacer al desarrollar software.
¿Alguien puede, acaso, decirme que un programa funciona correctamente? Más aún, ¿alguien puede decirme cómo calcular tolerancias, límites de funcionamiento y fiabilidad de un software? ¿Alguien puede decirme que si, tras hacer pruebas (porque catálogos no hay, claro, veo que el componente X no me sirve, puedo intercambiarlo por el componente Y, sin introducir cambios en el resto del proyecto?
No. El problema real es que no sabemos qué es la Ingeniería.
Y ojo, que sí, que *algunas* técnicas de las que se usan en la Ingeniería pueden ser aplicables al desarrollo de software. Por supuesto. Igual que algunas técnicas usadas en la Ingeniería son aplicables a otras mil cosas. Pero eso no las convierte en Ingeniería.
@Paco Ros:
Lo que comentas de las estimaciones es aparentemente razonable. Pero en realidad es poco más que especulativo. Hacer estimaciones en el desarrollo de software es algo que incluso los *gurús* del tema lo consideran un «arte», en gran medida basado en la *experiencia personal* y la *intuición*.
Y no, esas medidas no son ni reales ni certeras, pero el problema no es ese. El problema no es, tampoco, que no sean 100% precisas, sino que no hay un modo de calcular cuánto de precisas son.
Si, mucha Wikipedia y mucho Google Earth… pero no contestas a argumentos como los de Diego, que en mi opinión son demoledores.
Se nota que que no has trabajado mucho como empleado de una cárnica, desde el fantástico mundo del funcionariado se ve todo muy bonito.
Pingback: Críticas a la ingeniería del software
Yo lo que veo es que hay mucha gente que no sabe lo que es la Ingeniería.
La ingeniería es coger un *catálogo* de piezas, mirar 6 números y poder elegir la que necesitas. Con algunos de esos 6 números te vas a una tabla de otro *catálogo* y buscas otra pieza y la eliges y sabes:
1. Que funcionarán juntas
2. Qué límites de funcionamiento puedes exigirles a ambas piezas por separado
3. Que con otra fórmula y alguna aproximación que está probada como aceptable, puedes saber qué límites puedes exigirles a ambas piezas juntas
3. Que si no te valen esos límites, vas de nuevo al catálogo, buscas otra pieza y ya está
4. Que el día de mañana tu máquina X o construcción Y va a resistir un tiempo determinado y unas cargas determinadas porque a. está calculado y b. puedes hacer pruebas de carga y tener una comprobación fiable dentro de unos límites conocidos
Más aún, la Ingeniería es que, gracias a eso, sé, porque puedo calcularlo, cuánto me van a costar los materiales y cuánto va a tardar el proyecto. Más aún! Que aunque eso no sea *exacto*, puedo calcular el margen de error con un determinado índice de fiabilidad.
La Ingeniería es que puedo hacer esos catálogos, que puedo reducir las características de un rodamiento a 12 parámetros y unas tolerancias, ponerlos en una hoja de especificaciones y ofrecerlo al mundo con esa fiabilidad.
El problema es que ninguna de esas cosas se puede hacer al desarrollar software.
¿Alguien puede, acaso, decirme que un programa funciona correctamente? Más aún, ¿alguien puede decirme cómo calcular tolerancias, límites de funcionamiento y fiabilidad de un software? ¿Alguien puede decirme que si, tras hacer pruebas (porque catálogos no hay, claro, veo que el componente X no me sirve, puedo intercambiarlo por el componente Y, sin introducir cambios en el resto del proyecto?
No. El problema real es que no sabemos qué es la Ingeniería.
Y ojo, que sí, que *algunas* técnicas de las que se usan en la Ingeniería pueden ser aplicables al desarrollo de software. Por supuesto. Igual que algunas técnicas usadas en la Ingeniería son aplicables a otras mil cosas. Pero eso no las convierte en Ingeniería.
Respecto al tema de las estimaciones, hacer estimaciones en el desarrollo de software es algo que incluso los *gurús* del tema lo consideran un «arte», en gran medida basado en la *experiencia personal* y la *intuición*.
Y no, esas medidas no son ni reales ni certeras, pero el problema no es ese. El problema no es, tampoco, que no sean 100% precisas, sino que no hay un modo de calcular cuánto de precisas son.
Ricardo,
Basta de autoflagelación!
Programar será un tinglado experimental, difícil de medir, en el que haya que aplicar en algunos casos metodologías ágiles para avanzar, en otros no tiene porque ser malo intentar planificiar y medir siendo más deterministas. Estas circunstáncies confieren más valor a nuestra profesión y no menos.
Lo que cuenta es saber aprovechar los conocimientos y tener motivación para aprender día a día e INTENTAR hacer bien tu trabajo.
No veo nada malo en que un informático con titulación reivindique su condición de Ingeniero y su especialización en ingeniería del software maxime si su trabajo es desarrollar software conforme a unos requerimientos y una planificación.
Creo que es factible sentirse bien e incluso orgulloso de tu trabajo.
A mi los estudios me han proporcionado una base técnica y práctica muy valiosa. El resto lo tengo que poner yo con mis inquietudes y esfuerzo… como en el resto de estudios y profesiones, no te jode…!
No veo porqué hay que ser tan críticos con los estudios de ingeniería en informática.
És una profesion maravillosa, llena de restos y no pasa nada si el CODIGO es mejorable o tiene algunos BUGS! De hecho el código tiene que ser testeado, repasado, mejorado, existen los prototipados, versiones de prueba, los key users, testers, las desviaciones de tiempo/coste de los proyectos, las auditorias, los juicios, la cárcel, y la muerte, blah blah..
Cuando contestas otros puntos de vista críticos con tu visión parece que quieres dar a entender que el que programa MAS MEJOR es el que tiene la RAZóN.
Pues yo lo digo bien alto! Yo programo como puedo y mis programas se podrían MEJORAR MUCHO (para mi esto es una obviedad). Pero no hace falta MEJORARLOS mientras CUMPLEN con su cometido.
Cuando uso código de otros desarrolladores le hecho un vistazo por encima/testeo y parcheo aquello que no me sirve/falla y no me queda tiempo pa más.
Cuando un desarrollador me enseña un programa bien hecho pues le felicito y le agradezco su tiempo y dedicación, y si no tiene la carrera le invito a que encuentre tiempo para írsela sacando pues le va a ser muy gratificante ampliar los conocimientos relacionados con la informática.
Un saludo.
No estoy para nada de acuerdo con lo que se dice en este articulo.
Simplemente decir que aunque tenga parte de razón en que la ingeniería del software da una base de funcionamiento a grandes corporaciones de software en la planificación, en el resto esta hurgando en la letra de las definiciones y sus interpretaciones más que en su esencia y significado.
Por lo demás, y obviando la dicotomía que presenta entre software libre y propietario, o la raspadura en temas de todo tipo como los colegios informáticos (con los que no estoy de acuerdo por diferentes motivos, pero sí creo necesaria una regulación que no hay). La ingeniería del software tambíen puede ser aplicada a proyectos open source, como conozco casos, donde siempre será más recomendable que un producto freelance, salvando odiosas comparaciones.
La ciencia no és perfecta, pero és lo que sabemos. Por tanto la no aplicación de ésta, aunque puede beneficiar a casos puntuales, la norma general sería que gradualmente volveríamos a la generación que convivía con código spaguetti de los 80, sencillamente por dificultades en el mantenimiento.
Hay una serie de hitos logrados gracias a la ingeniería del software que nos han dejado en la cómoda posición que ahora ocupamos, y desde la que parece que algunos quieren saltarse ciertas normas básicas en defensa de cierta interpretación muy personal del software libre o de intereses propios.
Este tío no tiene ni idea de lo que es una Ingeniería Informática ni IS. Esta claro que IS es más inexacta que otros aspectos de las Ingenierías pero eso no significa que no sea útil. Sin una planificación un proyecto es muy difícil que salga adelante dentro de unas condiciones establecidas. No voy a discutir si puede tener éxito o no un proyecto anárquico aunque no he visto ninguno y no estoy de acuerdo con tus ejemplos (tienen más planificación de la que crees y otros no son proyectos tan grandes como puedan parecer) pero está claro que las posibilidades se reducen drásticamente, pura estadística. Respecto los ataques contra la Ingeniería en general que he podido leer, solo tengo que decir que se nota que no saben lo que es o no han logrado sacarla y eso les molesta. Hay mucha gente que se cree que por sacarte dos cursillos (normalmente de programación), leer dos artículos sobre el kernel, etc… ya son «informáticos» que tiene los conocimientos suficientes como para menospreciar una carrera y eso solo indica ignorancia.
@kangal
> Este tío no tiene ni idea de lo que es una Ingeniería Informática ni IS.
Si recurres a argumentos [falacias] de autoridad empieza mostrando tus credenciales 🙄
@Eduardo S.
La «planificación» no define a una ingeniería, lee el inicio del apunte sobre las «herramientas». No se trata sólo de una discusión sobre la palabra, sino que el abuso de la analogía con otras ingenierías no ha servido de nada… o en el mejor de los casos, ya no sirve.
La ingeniería [tradicional] del software vivió encerrada en su mundo de «control», cuando eso no es así en ningún proyecto innovador, y ningún proyecto de software libre. Los Fortune 500/1000 o 10000 son una ínfima minoría de empresas, que ni siquiera representan a la media. Pero esos eran los típicos casos de estudio en la «comunidad científica de la ingeniería del software». Se olvidaron de todo lo demás.
La excusa de «pues hay que vivir de hacer páginas web a la carnicería» tampoco es válido. No se necesitan, ni se usan, «metodologías tradicionales» para hacer proyectos sencillos.
La «revolución» de las metodolgoías ágiles de los últimos 10 años no es tal, en software libre se viene haciendo lo mismo desde bastante antes. Pero para los que nunca han conocido un proyecto de software libre aquello les pareció la monda… y por no hacerlo no descubrieron otras formas de desarrollar, desde sistemas basados en control de versiones distribuidos (como GIT), sistemas de revisión de pares on-line (como el que hizo Guido von Rossum para Google, que está liberado) o el Launchpad que se usa para Ubuntu (y que acaban de liberar). Son herramientas y «métodos» que funcionan, en proyectos muy gordos, y que integran programadores, reportes de bugs, traductores, usuarios.
Estoy de acuerdo en que las metricas no lo son todo y que no garantizan que un proyecto va a terminar en tiempo y va a funcionar. Solo garantizan que hay x porcentaje de comentarios, que se probo durante y dias, que costo z euros, etc
Pero estas muy equivocado en cuando a como se hacen los proyectos libres. Una vision un pelin romantica del software libre.
Los proyectos libres, uno a uno, no se parecen en nada a un bazar, donde cada uno va y pone el tenderete con lo que quiere y es la «evolucion» la que decide cual se queda. Eso como mucho sirve, y de lejos, si miras el sistema completo: montas el kernel que quieres, con el gestor de ventanas que quieres, con el editor que quieres y el navegador que te da la gana… Siempre que sean medianamente compatibles y seas un friki (y decidir en la instalacion de un linux que navegador quieres marcando un checkbox no lo es, es elegir una opcion que otro te ha puesto a huevo)
Pero despues, todos esos proyectos, uno a uno, tienen una planificacion enorme y desde luego no se parecen en nada a un bazar, si no mas bien a una catedral en la que uno o un reducido grupo de arquiectos sabe donde va cada ventana.
No se puede meter en el kernel oficial lo que a uno le da la gana, si no lo que Linus o el responsable de la rama te deja meter. No puedes hacer con el KDE lo que quieras, si no lo que te dejan. Tu puedes enviar lineas y lineas de contribuciones, pero seran revisadas por el responsable del proyecto y seran incluidas solo si cumplen con la calidad necesaria y con la linea que los responsables del proyecto quieren que este siga. Improvisacion la justa.
Puedes bajarte el kernel y hacerte tu propio kernel, claro, pero sera solo para ti.
El halo romantico del «esto es la union del buen royito en que una comunidad en la que cualquiera puede aportar lo mejor que sepa» que tienen los proyectos libres es en su mayoria una ensoñacion para periodistas, blogueros y gente que no contribuye a ningun proyecto. Los que contribuimos (yo lo hago, y llevo un proyecto pequeño pero con aportaciones de voluntarios) sabemos y aceptamos que cada proyecto tiene un director, que no se llama asi pero que lo es, que decide y filtra contribuciones.
Puede entrar cualquiera, igual que en teoria cualquiera puede trabajar para Microsoft, Google o la NASA, pero en un proyecto de SL hay una meritocracia en la que las aportaciones primero son filtradas y poco a poco se van tomando mas responsabilidades, igual que en una empresa primero se pasa por una entrevista de trabajo en la que se le evalua.
Dejar de propagar esa idea de bazar porque es mas falsa que un judas de plastico. Hay un control muy estricto de como se hacen las cosas en los proyectos libres. Tal vez no se mire el porcentaje de comentarios pero si el estilo de programacion (a mi me echaron para atras una clase por declarar las variables al principio del fichero como dice el estandar en vez de hacerlo al final, como estaba en el resto del proyecto), tal vez las fechas de salida sean muy elasticas, y tal vez se confie en los usuarios para hacer el depurado de las pruebas sacando alfas, betas, rc y despues versiones .1 a los pocos dias (lo de FireFox en cada release no tiene nombre), pero los proyectos libres tienen una orientacion clara, un roadmap claro y un control muy claro de lo que se mete y lo que no. No es tan diferente al proyecto de una empresa. La unica diferencia es que en un proyecto libre hay que ser mas flexible con los tiempos de entrega de los «trabajadores» porque son voluntarios.
A ver si ahora vais a pensar que cualquiera mete lo que quiere en el kernel…
Credenciales: estudiante de 5º Ingeniería Informática en la UJI.
Alguién ha estimado alguna vez desviaciones/costes de los proyectos de desarrollo de código libre por amor al arte…?¿ Porqué el hecho de que las horas de los «colaboradores» y el número de colaboradores de un proyecto de código libre no se cuantifiquen no significa que salga una burrada de tiempo perdido validando/reescribiendo…
a ver si va a parecer magia lo que en realidad es tiempo/ sudor/ esfuerzo inútil/ parcheo / verificación /sangre/ burla / auditoria / juicio i muerte!
Que los desarrolladores no cobren no significa que no existan unos costes! O creeis que el por amor al arte el tiempo no deja de correr?? Que sea codigo libre no significa que se tenga que tirar a la basura un montón de código inservible/obsoleto/ WTF code…. y la gestión de merder que se organiza què?¿
Venga ya!
@kangal
> Credenciales: estudiante de 5º Ingeniería Informática en la UJI.
Credenciales: ingeniero en informática, doctor en informática, profesor de informática, programador de varios proyectos (unos libres y otros no), > 40 publicaciones científicas.
@anonimo claro
Estás equivocado porque no dije que «todo sea bazar» (de hecho soy bastante crítico bastante a Eric Raymond). Además no dije que todos siguieran un mismo estilo de coordinación.
Sólo comenté las características de unos pocos proyectos de software libre. Ninguno de ellos está controlado por ninguna corporación, ni tiene un diseño pre-sestablecido sobre el que se desarrolla. De hecho los coordinadores de esos proyectos –el más notable es Linus– aseguran que es «evolutivo» y «darwinista». No lo digo yo.
Me da la impresión que cada uno entiende lo que quiere, no lo que se dice.
@perell
¿Y qué coño tiene que ver los costes de software libre en la discusión? ¿cuando dije algo de los costes o que no existiesen? Otro con problemas de comprensión lectora y muchas ganas de trollear 🙄
*Aviso*: me ha quedado un poco largo, lo siento:
Buenas tardes, primero me gustaría poner mis credeciales sobre la mesa como han dicho anteriormente para que se sepa quién lo escribe, soy Ingeniero en Informática (Superior) e Ingeniero Técnico en Informática de Sistemas (27 años de edad), con 4 años de experiencia en el sector empresarial (startups y empresas cosolidadas) y más de 9 años en contacto con el software libre.
Me gustaría comentar este artículo y por ende el de DeMarco, ya que hay muchas partes referenciadas y traducidas. Al leer el artículo de DeMarco lo primero que se me viene a la cabeza es una falacia «sequndum quid», no basta mostrar un par de ejemplos que te validen y olvidarte del resto. ¿Cuántos proyectos de Software Libre se han abandonado? ¿Cuántos de Software Privado se han abandonado?¿qué proyectos de Software libre son rentables?¿cuáles no?…
El segundo comentario es concierne a la interpretación que se realiza del artículo o incluso de las conclusiones que se sacan del mismo. DeMarco en ningún momento se opone a la Ingeniería del Software, no dice que no deba usarse, dice, o yo entiendo, que es mucho más importante llevarcontrol en proyectos que tienen poco margen de beneficio, y mucho menos importante en proyectos que poseen un margen abismal, lo cual es perfectamente lógico desde el punto de vista empresarial. Lo siguiente que pone en duda es el por qué se realizan estos desarrollos que poseen tan poco margen y que parecen poco importantes. Aquí encuentro dos fallos de concepto, el primero de ellos es basar la importancia del software en su margen de beneficio y el segundo basar la construcción de software en la importancia en lugar de en las necesidades.
El desarrollo corporativo y el desarrollo de software libre, hoy por hoy no pueden compararse, la primera y principal diferencia son los plazos
. En software libre directamente no existen o siempre pueden ser retrasables sin un impacto económico, el desarrollo corporativo es practicamen
te inflexible, lo que conduce muchas veces al chapucismo. Esta primera variable es un dato a favor de la planificación, (aunque quizá el principal error sea poner un deadline a un proyecto) una planificación correcta permite *INTUIR* costes y plazos no olvidemos que las métricas nos da
n estimaciones por lo tanto es normal que los proyectos se alarguen (las estimaciones siempre suelen ser positivas para ganar al cliente), no h
ay que confundir nunca estimación con verdad absoluta.
Una segunda variable son las normas de desarrollo, que un proyecto de software libre no se guíe por métricas ágil no significa que no se utilic
en ciertas partes como repositorios, normas de estilo, guías de integración, protocolos de producción, revisiones formales, fases de prueba, control de tickets, documentación y mantenimiento. De hecho cualquier proyecto de los nombrados en el artículo poseen todas estas premisas (desde el kernel de linux hasta kde). De hecho normalmente para que cambios que se propongan se hagan, se basan mucho en el «prestigio» del desarroll
ador, lo que asegura cierta calidad en el código.
La segunda variable a tener en cuenta es la especialización del equipo de desarrollo, de manera general la gente que contribuye a proyectos de
software libre son mejores *programadores* y más especializados que la gente en un equipo corporativo (y encima gratis), es una simple cuestión de experiencia en el desarrollo, si te dedicas a ello por hobby y además por curro no queda más remedio que ganar experiencia. Además los aprendices en el desarrollo de software libre (de proyectos importantes) suelen realizar «tareas sencillas». En un equipo de desarrollo hay perfiles de todo tipo y es complicado no asignar «tareas complejas» a gente sin experiencia y viceversa.
Existen más variables: tipo de usuarios a los que va dirigido el software, reusabilidad, etc… Aunque practicamente todas al final se reducen
a cuestiones monetarias y creo que no es necesario exponerlas todas una a una.
La cuestión final es utilizar el paradigma de ingeniería del software apropiado para cada proyecto, no es necesario matar moscas a cañonazos yexisten paradigmas para todos los gustos y desarrollos. Utilizar la ingeniería del software no es obligatorio pero es una manera de ofrecer unas garantías mínimas de calidad y de rendimiento económico, sin quitar que se puedan llegar a producir proyectos e calidad sin utilizar ningún tipo de métrica (entre otras cosas porque no siempre es necesario).
Si he leido sobre ti en la wikipedia (LOL) y sobretodo los comentarios (borrar la entrada de la wiki, sobre tu prepotencia, etc…) unos grandes credenciales.
Ricardo…
Era una pregunta…WTF!
Bueno, ok. Yastá… ya me calmao…
Sinceramente, ¿tu crees que los costes de desarrollo de un proyecto, sea cual fuere su naturaleza, són despreciables a la hora de valorar los métodos y filosofias de desarrollo de proyectos? ¿No crees benvolgut Ricardo, por lo tanto, que sería interesante estudiar los costes indirectos de grandes proyectos de codigo libre como los que citas en el artículo?
Un puto troll.
@perell, si es por eso, era una broma, por eso el smiley 🙄
Pero sigo sin entender el tema de los costes, ni los mencioné, ni veo que sea parte fundamental del problema de definir qué es iungeniería de software. Los análisis de costes se hacen hasta para fabricar tiritas.
El fondo de la cuestión es que durante 40 años se transimitió la idea de «una ingenieria informática» (la que todo se puede medir, controlar, pre-definir, especificar a priori) que desde hace años hay evidencias de que no es la correcta, cuando Dijkstra ya lo decía hace 20 años (lee en enlace «Redescubriendo al Dijkstra provocador 18 años después»).
Ahora uno de los promoteres de esa visión reconoce el error de la exageración. Yo estoy totalmente de acuerdo con él… desde hace bastante años 🙂
Vaya montón de comentarios contraproducentes y off-topic.
Aquí lo que se discute es que no se puede controlar lo que no se puede medir y se debate si es cierto o no que no existen medidas cuantitativas de medición del software.
DeMarco, autor de uno de los libros de cabecera sobre ingeniería del software y medición de software sostiene que estaba equivocado, que no se peude medir y pone como prueba algunos ejemplos de programas innovadores.
Yo sostengo que es cierto que no se pueden medir los proyectos experimentales e innovadores pero sí (al menos con un intervalo de confianza) los repetitivos y conocidos, que son la mayoría de los desarrollos de gestión que realizan las empresas que miden software.
Voy a volver a leer el artículo de DeMarco porque no veo dónde coño habla de costes y de si la ingeniería se llama ingeniería o a partir de qué curso de carrera se puede comentar con autoridad sobre ingeniería del software.
Tampoco veo que ninguno de los comentaristas (yo tampoco) haya publicado su réplica en el IEEE.
Asocias que no haya una corporacion detras o que no haya un plan previo publicado con que la ingenieria del software «tradicional» no se aplique, pero el KDE tiene un diseño muy estricto, un plan de desarrollo, fechas de entrega, diferentes departamentos (i18n, graficos, componentes…) cada uno con sus responsables, un roadmap futuro con fechas ¡¡que mas o menos respetan!! Eso si, igual no usan el project, o no tienen la pegatina del isoX000 o no tienen una secretaria en la puerta, y no hacen entrevistas a los que quieren trabajar en ello.
Y el kernel sera todo lo evolutivo que Linus diga, pero El es la Naturaleza ahi porque es el que decide que especie prospera y cual no. A no ser que se refiera es que de vez en cuando sacan el driver de algun raton olvidado… Y si no es el en concreto, son las personas en las que ha delegado. Y eso tambien lo ha dicho el.
La ingenieria del software tradicional tal vez tenga que revisarse porque esto evoluciona mucho (no tanto en realidad, y vuelve sobre sus pasos cada pocos años, aunque se disfrace de rabiosa novedad), pero no se puede ni mucho menos descartar. Y menos aun, poniendo ejemplos basados en los proyectos exitosos del software libre, porque para nada se parecen a la idilica Comunidad de la que se habla por ahi.
Decir que el KDE no tiene un diseño preestablecido…
@Paco Ros: «(al menos con un intervalo de confianza)»
El problema es que en realidad no puedes determinar el intervalo de confianza de un modo «fiable».
La Ingeniería es lo que es porque puedes ir a un catálogo, buscar una pieza basándote en 6 parámetros y escoger la que necesitas porque es la que necesitas. Y eso lo sabes con una tolerancia y una fiabilidad, y con unos límites operativos que están perfectamente tabulados en el catálogo. La Ingeniería es lo que es porque puedes hacer tus piezas y ponerlas en un catálogo ofreciendo esas tolerancias, límites operativos y márgenes de seguridad en una tabla.
¿Puedes calcular de alguna forma esas cosas para un determinado software? ¿Puedes garantizar el funcionamiento de un software en unos límites operativos que han sido calculados (i.e. no basados en tu experiencia personal)?
Ok. Agradezco aclaraciones.
Porque los ingenieros informáticos muchas veces esgrimimos esas metodologías para explicar que intentamos planificar/pautar/cuantificar con más o menos acierto el desarrollo de proyectos, y eso se traduce en una forma de llevar a buen puerto los proyectos de desarrollo.
Yo creo que queda claro que deben coexistir diversas metodologías, cada una adaptable al entorno y características. Bienvenidos sean los nuevos enfoques y las bajadas de burro de los popes.
El problema viene cuando puede pensarse que detrás de un gran proyecto de codigo libre sin metodologia bien descrita/documentada se puede pensar que no se ha aplicado metodologia (yo creo que si que la hay y podria estudiarse en cada caso cual ha sido el modelo de éxito).
Reusumiendo:
Sin conocer demasiado de cerca el tema, creo que tras los grandes desarrollos de codigo libre se ocultan uno o más programadores que usan SU propia metodologia (indescifrable quizás, pero metodología en esencia), para llevar a buen puerto el desarrollo.
Un saludo.
Vale, ya se quien eres, Gallifante…
Lo que tu digas chico.
Este articulo es un poco de hipocrita fariseo. Yo creo que es al revés, importantes proyectos llevados por programadores que sabian mucho de lo que querian pintar pero no sabian lo que era un oleo, un pincel, o la mezcla de pinturas se han ido a la basura porque el que ha venido detrás (es decir, un servidor) no sabia que coño querian hacer con trozos de codigo superparanoicos que no los entendia ni su puñetera madre, por precisamente, no llevar la metodologia que dices que no hace falta.
Hipocrita: Porque escribes eso y estas pensando lo contrario. Se crearán los colegios y se regulará el sector y si te molesta tiras de esta.
Fariseo: Porque te mola la farandula de los fariseos, es el crear polémica e ir al contrario de todo el mundo. ¿te han pagado algo los del colegio de telecomunicaciones, el colegio de matemáticos o el de industriales para realizar este articulo?
No es necesaria la ingenieria del software pero bien que telecomunicaciones quiere absorber nuestras competencias sobre su titulación si regulada y superprotegida. Para luego regular nuestra parte. Ahi no dirás nada seguramente.
No se porque mezclas «el software libre» con la creacion de los colegios, regulación, etc. El software libre seguirá existiendo, y os otro tema totalmente aparte.
Totalmente de acuerdo con el concepto Ricardo. Soy Ingeniero Técnico con 9 años de experiencia y cada vez creo menos en las metodologías y demás zarandajas y mas en el código. También creo que es una cuestión de experiencia. Recién salidos del huevo de la universidad mantenemos un estigma difícil de eliminar salvo con el paso del tiempo. Como bien decía John Carmack: «dejádme de APIs y ponedme sobre el metal». 😉
Creo sinceramente que tu opinion refleja tu ignorancia… esto que decis: «Los que leen habitualmente mi blog conocen mi opinión sobre la “ingeniería del software tradicional”, muchas veces hablé de ello y del “mal” que hacen en general a la profesión, y hasta como limitan la innovación.
Nunca me gustó que se llame “ingeniería” a un proceso que tiene poco que ver con los de las ingenierías tradicionales, entre ellas que las tradicionales poseen una serie de herramientas analíticas y cuantitativas para evaluar y estimar riesgos y tolerancias. En el desarrollo de software no tenemos esas herramientas,»
cuando decis «no tenemos esas herramientas» estás mintiendo, y mentis, porque pretendes desde tu blog pedorro dar una opinion autorizada, cuando evidentemente ante tal ramalazo de ignorancia no queda mas que pensar que lo que escribis es nada mas y nada menos que una burda simplificacion de la realidad, y te estas cagando literalmente en el trabajo de mucha gente que hace ingenieria de software, verdadera ingenieria, sinceramente creo que sos un ignorante y que para opinar tenes que leer, pensar, procesar y luego, dar opiniones menos taxativas, que lo unico que demuestra es que la boca la tenes para hablar al pedo. Pensa antes de escribir… salame.
Deberías pensar que la gente que le hace mal a esta profesion, es gente como vos, no la que trata de aplicar un metodo, no quienes usan herramientas y proopnen su uso…..
Para hablar de «ingenieria de software tradional» deberia haber un conceso que explique, aclare y defina qué es «ingenieria de software tradional» y que le llamas vos tradicional en una ingenieria, que como ingenieria tiene maximo 41 años (en 1968 fue el primer congreso realizado bajo el titulo de ingenieria de software)
disculpame pero tu articulo está herrado de cabo a rabo…nada tiene que ver la fisica y la matemanica en una comparacion con la ingenieria…menos del software, ambas son herramientas que dan soporte a la ingenieria, lo mismo que el metodo cientifico y el proceso de evolucion de una ingenieria.
Los errores de los gurues, son errores, igual que los errores que cometieron los agilistas al pensar que y tratar de hacer calsar todos los proyectos como agiles… cuando no lo son ni deberian serlo.
si leiste al menos un paper de Dijkstra… te felicito volve a leerlo, y lee sobre todo «on teaching computer science» y lee las criticas que le hacen a su postulado sobre la no existencia de la ingenieria de software, quizás sirva un poco para habrirte la cabeza….
La catedral y el bazar… bueno otra cosa, que indenfica que sos un ignorante, pero hace una cosa mirate el video Fred Brooks el mismo que the mithical man month… si ese viejito buena onda, y escucha lo que dice sobre la catedral y el bazar y escucha tambien como al final de su charla propone lo que sería un metodo de desarrollo agil e iterativo…
haces ingenieria libre de contexto animal!… fijate que restricciones tiene cada metodo de desarrollo primero, fijate para que contextos sirven y para cuales no…. pero no generalises…porque eso hacen los estupidos.
los meaculpas… es gente que esta aprendiendo y es una ingenieria que esta evolucionando…
asi como un edificio no se construye igual que un casa o igual que una tapera en una villa miseria o igual que «mi cuartito del fondo» hecho por mi para jugar al poker con mis amigos….
bueno igualmente, a mi resulta sensato pensar, que pueden utilizarse distintos metodos de desarrollo para distintos tipos de proyectos de software.. que podrian ser:
un nuevo sistema operativo end to end, un mp3player para mi, piloto automatico para un avion, el control inteligente de un robot que controla los estados vitales de un paciente, etc.
un abrazo,
gracias por postear este articulo… estoy seguro que no vuelvo a leer tu blog.
Completamente erróneo este post. Utiliza una demagogia fuera de lo común en cuanto a la ejecución de proyectos libres. Mezcla conceptos como se dice en el anterior comentario y todo para decir que ¡adelante, sed chapuzas, es lo más rápido y sensato!.
Yo estoy harto de ver y trabjar en proyectos amplísimos los cuales no podrían salir a la luz si no fuera por la ‘ingeniería del software’ aplicada, unas veces con más éxito que otras.
El hombre en la luna, tan de moda estos días, nunca habría sido posible sin lo que es la ingenería en todos sus campos, llevada a su máximo desarrollo, la del software incluída, por supuesto. Habría llegado el hombre a la luna como proyecto ‘libre’?. Yo creo que no.
La métrica tradicional no es solamente contar ‘el tiempo’ que se tarda en hacer una tarea…consiste en pensar esa tarea, planificarla, buscar errores, soluciones y toda una serie de pasos IMPRESCINDIBLES para su ejecución correcta.
Saludos.
Bueno, quería aportar aquí mi experiencia como consultor en una compañía española que, entre otras cosas, fabrica software. Comencé como programador profesional hace 10 años, y me dedico a la consultoría TI desde hace más o menos 5.
Mi máxima es ‘Cada cosa para lo que es’, y soy consciente que la función de un ingeniero (para mi entender, ojo) es dar soluciones a una necesidad de un tercero, optimizando en la medida de lo posible los recursos empleados para ello.
Nuestra empresa ha adoptado CMMi nivel 3 como marco de procesos (lo que se supone que es el colmo de la formalidad), y como deja bien claro este modelo, hay distintas tipologías de proyectos particulares en una empresa, con sus ciclos de vida particulares.
Y ahí creo que está el quid del asunto. Según la tipología de proyecto, sus restricciones, complejidad, color, sabor… conviene utilizar las herramientas adecuadas.
Por ejemplo: imaginaos si no estuvieran planificados de antemano los sistemas y subsistemas de información del Apolo, o de un avión… ¿dejamos que los usuarios finales hagan las pruebas en una beta release? Va a ser que no, además de que otros muchos departamentos tienen que realizar su trabajo contando con componentes que aún no están disponibles.
Caso opuesto: ¿le hago una matriz de trazabilidad exaustísima a un proyectillo de midleware de adaptación entre servicios web, y planifico cada minuto del personal del proyecto… pues hombre, casi no… Ahí una metodología agil vendría mejor.
En este sentido, dependiendo del proyecto, conviene usar una «metodología» u otra, sobre todo para intentar obtener resultados reproducibles en otros proyectos.
En el software empresarial, pasa algo que no pasa con el software libre, que es la necesidad de rentabilidad. Ese condicionante es el que tiende a añadir (y tristemente en gran número de casos, exagerar) una necesaria capa de control sobre los recursos del proyecto.
A una comunidad de sofware libre, sólo algún troll le puede exigir que necesita lista una feature concreta para tal día. A una empresa con ánimo de lucro un cliente le va a exigir que la tenga para tal día, porque tal otro quiere comenzar a usarla para obtener beneficios de negocio: quiere seguridad, y rentabilizar su inversión desde lo antes posible.
Por lo tanto, esa predictibilidad de la que hablaba antes es un valor apreciado por los clientes, y las metodologías generalmente ayudan a obtener resultados reproducibles, siempre que se sea coherente y se utilicen, como siempre, las herramientas (metodologías) adecuadas.
@eiko
Estoy en principio de acuerdo con lo que dices, si se remarcan las siguientes excepciones:
1. El CMMi es genérico para todo tipo de organizaciones, proyectos, procesos y desarrollos. No está ligado a la ingeniería del software, no la define, no es exclusiva de ella.
2. CMMi es usado por la NASA, lo que no quiere decir que sea usado para el desarrollo de todo el software (para el Apollo 11 seguro que no, porque todavía no existía, de hecho ni existía el concepto de «ingeniería de software»).
3. Que sepas una metodología, o una parte del CMMi no te convierte en ingeniero, ni que puedas aplicarlo para gestionar, medir y planificar un proyecto de software.
4. Que seas «ingeniero informático» no garantiza que sepas programar siquiera el módulo más sencillo del antiguo Apollo (que por cierto, ha sido liberado: http://menea.me/fjds ) ni la aviónica de un Airbus. No sé por qué se recurre a ese mantra, se nota que los que lo dicen nunca han siquiera mirado los modelos de certificaciones complejos que usan.
Veo en muchos comentarios que se habla de dos tipos de proyectos:
– Los innovadores, ciencia ficción solo al alacance de empresas como google o cuatro barbudos en un garaje con mucho tiempo libre y pocas relaciones sociales.
– Los repetitivos, el pan nuestro de cada día en las empresas de desarrollo de soft de gestión.
Esto me recuerda a cuando vino un consultor de CMMI y nos explicaba el modelo, la primera transparencia tenia una bonita foto con una fabrica embotelladora y nos decia: «el objetivo es construir un proceso de desarrollo de software repetible, para poder estimar los costes de los siguientes proyectos en base a los anteriores». Por supuesto este señor no sabría ni programar una calculadora… pero es experto en procesos de calidad de desarrollo de software (sic).
Siempre que se habla de repetibilidad o predictibilidad en un desarrollo de sofware me pregunto lo mismo, ¿y si es repetible porque lo hacemos?, ¿si es siempre lo mismo con pequeñas variaciones porque no automatizamos la creación de este software?. Si el objetivo de la ingenieria del software es buscar la forma de hacer software de forma «repetible y controlada» entonces no vamos por el buen camino. Si es repetible debería ser un problema resuelto y a otra cosa mariposa.
A esto creo que es a lo que se refiere en ultima instancia deMarco, se pregunta que valor tiene medir si medir solo sirve para controlar proyectos mediocres, si medir sólo sirve para perpetuarnos en la mediocridad. Si tengo una empresa que se dedica a hacer siempre el mismo tipo de proyectos, llevo 20 iguales ya puedo intuir lo que tardare en el siguiente, pero cual es el trabajo de un ingeniero ¿ser capaz de medir lo que tardaré en el proyecto 21?, ¿»ingeniarselas» para generalizar, construir un framework o un producto que me permita no tardar lo «predicible» sino varios ordenes de magnitud menos en entregar el proyecto 21?.
Yo creo que este es el verdadero mensaje y reflexión que deberiamos hacer, queremos una ingeniería del software para seguir siendo mediocres o queremos una ingeniería del software para avanzar y cambiar las cosas.
Una pregunta: ¿Cuantos productos se construyen en las empresas de soft?, ¿Cuantos desarrollos a medida sota, caballo y rey base de datos, pagina güeb etc,etc?, si la ingeniería de software solo sirve para medir cuanto voy a tardar en hacer la siguiente mediocridad, que paren que me bajo.
Excelente post, muy informativo y viene en buen tiempo.
Soy estudiante de postgrado en una universidad tecnologica de mi pais y durante mis estudios de Ingenieria lleve una clase llamada «Ingenieria de Software», ahora la vuelvo a llevar en el postgrado y una de las primeras cosas que nos dicen es: «Esta ingenieria, realmente no es una ingenieria», le falta mucho desarrollo antes de poder considerarse asi, pero más importante, no es necesario que lo sea, su tiempo paso.
ahora la clase se enfoca en distintos metodos para trabajar con el software, mas respondiendo a problemas de manejo de proyectos bajo distintas condiciones y muy enfocado en metodos agiles.
En mi empleo he utilizado principalmente «EXtreme Programming» y «agile» y algunos hibridos de otras metodologias y los he visto triunfar en sistemas muy complejos, de evolucion rapida y que manejan sistemas viatales para organizaciones importantes. Todo esto manejado por un equipo pequeño, separados por miles de kilometros, pero que dan resultados.
Según mi experiencia los proyectos software que se pueden diseñar son aquellos que se corresponden con aplicaciones con modelos ya probados, por ejemplo típica empresarial con alta/baja de registros con persistencia en BBDD y con una lógica interna más o menos imaginable.
El problema son los modelos de aplicaciones que todavía no existen o descubren un nuevo paradigma. ¿Cómo se puede diseñar una aplicación que vivirá en la web todos los años que la apoye una comunidad y evolucione con ella? Eso no se puede medir ni tampoco planificar. Así veo el caso de las aplicaciones que citas como ejemplo. Que sean software libre no sé si es casualidad o quizás es que no podía ser de otra manera porque sea algo intrínseco a la visión de futuro que acompañan esos desarrollos.
Me ha gustado mucho también la futurología que añades. La eficacia de las metodologías ágiles frente a las tradicionales es algo probado para el caso de desarrollos que considero como no planificables, y parece que el ciclo de vida software ha vuelto a mutar y quizás ya no se puedan considerar evolutivos a las ampliaciones que se hacen al software sino más bien sería parte del mismo desarrollo del producto que mientras se use no se puede considerar finalizado.
Estoy de acuerdo, la «ingenieria del software» no es el camino. Pero no saber cual es el camino correcto, no justifica pensar que no hacer nada al respecto, fue o debe ser lo correcto.
Me explico mejor: Todo esta hecho de alguna forma, proceso o metodo. Nada ocurre al azar (aunque parezca serlo en ocaciones) que no lo conozcas o sepas interpretar, es otro asunto.
Y es justamente el error que cometemos cientificamente como civilizacion con la Mecanica Cuantica, que rije actualmente todos los aspectos tecnologicos. Pues en si la mecanica cuantica se resume en «aproximaciones» solo eso. Lo cual quiere decir, que hay limites. Si con un pensamiento cuantico deseamos llegar mas alla ! simplemente, no podremos pues al final, las aproximaciones son solo eso.
La verdadera conducta que rije el optimo control del desarrollo de software, esta mas alla !
Lastima, esperemos que los nuevos grandes cerebros retomen el ultimo trabajo de Einsten y lo completen. Pues la mecanica cuantica esta llegando a sus limites, asi de sencillo.
Saludos.
Creo que hablando de software y en concreto de ingeniería del software, es un error caer en generalizaciones, tanto para apoyar las prácticas de ingeniería del software como para tacharlas de inútiles. El primer caso es el error en que han incurrido muchos al tratar de aplicar metodologías a ciegas sin pensar si para ese proyecto merece la pena o hasta qué punto merece la pena la sobrecarga de ciertas fases. Hay quien se dió cuenta y por ello la moda de las metodologías ágiles.
En el segundo caso tenemos casos como este artículo de Gallir. Ricardo, la mayoría de las críticas que pones sobre la mesa las haces suponiendo que el software siempre es algo innovador y por tanto altamente impredecible. Ahí incurres en un error porque precisamente ese software es muy minoritario. El software de gestión, que es con diferencia del que más proyectos se realizan, es mucho más cuadriculado hasta el punto que en muchos casos el fracaso de un proyecto estriba en una mala captura de requisitos por ejemplo. En ese tipo de proyectos la fase más crítica puede ser el análisis tranquilamente mientras que la implementación tiene bastante menos misterio. Un caso típico son los proyectos SAP por ejemplo.
En el caso contrario están proyectos como los que citas donde la propia programación por lo complejo es lo crítico, sin hablar ya de campos como la bioinformática o la inteligencia artificial. Un proyecto innovador es lógico que requiera metologías alternativas o una libertad mucho mayor. Esto no ocurre sólo informática sino en cualquier otro campo.
Como tú mismo has puesto en el post, no es la primera vez que tratas el tema en tu blog. Yo creo que tienes razón en lo que dices pero te equivocas de lleno en la generalización y lo que es peor, tu opinión parece tan extrema que el típico personaje que considera una total pérdida de tiempo documentar o simplemente pensar dos veces las cosas antes de enchufarse a un IDE deben estar bastante complacidos. Me da que has escrito el artículo pensando más en tirar una puñalada a los colegios que en la informática en sí (no, yo tampoco estoy colegiado)
Recomiendo la lectura en inglés de lo dicho por DeMarco y el “uso” dado en este blog, para que cada uno en función del ancho de su frente saque sus conclusiones.
Yo ya lo he hecho: esto está lleno de inexactitudes, frases sacadas de contexto, mezcla de conceptos y demás falacias. Son tantas que salen unos mensajes muy largos de escribir y leer. Además, algunos ya lo han hecho con bastante acierto.
Respecto a la regulación y colegios (¿Por qué mezclas? ¿ha caído la audiencia de tu blog?) solo citar lo que ya dijiste en su día, corrígeme si me equivoco, que se harán por el interés general y no por ser ingeniería, ni ciencia ni demás historias. Creo que este punto está suficiente claro.
Por si es necesario, quería comunicaros que el Parlamento, en representación de la sociedad, por el interés general y POR UNANIMIDAD de todas las fuerzas políticas, han aprobado la toma en consideración de la creación de los consejos de colegios de ingeniería (y técnica) informática.
Al que no le guste, o no lo crea conveniente, puede votar en contra. Para eso, esto es una democracia.
@quicksort
te contesto porque tu comentario es el típico que aunque tengas buena voluntad has entendido lo que te conviene, sacas conclusiones propias sobre mis intenciones y acusas de generalizar pero lo haces peor:
1. En ningún momento dije que el «software libre sea innovador», sino que las «metodologías de desarrollo de software libre» son muy distintas a las «tradicionales», no reconocidas por el «establishment» y luego aparecen cosas como la XP que se consideran revolucionarias en la «industria» cuando la misma idea se usaba desde años atrás en software libre.
2. En ningún momento siquiera insinué que las metodologías o «buenas prácticas» sean inútiles. Tampoco dije que la mayoría del software sea innovador.
3. No dije en ningún momento que no debería aplicarse ninguna metodología –no sé de dónde coño sacáis estas ideas– mucho menos en el software de gestión. Dije en todo caso que en «softrware innovador o experimental» es muy difícil aplicar métricas (y por lo tanto más difícil de controlar).
4. Respecto al SAP, ni lo mencioné porque no soyu experto, pero me parece que poco has mirado cuál es la forma de desarrollo de las «personalizaciones» SAP.
¿Puedes decirme dónde está la generalización?
@José Antonio
¿puedes indicar dónde manipulé, trgiversé o saqué de contexto lo que reproduzco del artículo de DeMarco? (creo que tradució bastante bien y respetando el contenido e ideas generales).
O bien no has leído lo que escribí, o tienes problemas de comprensión lectora del inglés.
Veo la generalización en los ejemplos que das:
– Linux
– KDE/GNOME
– GNU/Linux
Utilizas esos ejemplos como muestra del fracaso de la ingeniería del software y yo creo que eso es un error.
Pasas por alto todo ese software de gestión, o los llamados sistemas de información, proyectos donde la ingeniería del software tradicional sí que ha tenido una repercusión mucho mayor.
He mencionado SAP de pasada porque lo conozco por terceras personas, efectivamente no tengo experiencia con él pero ya digo que por lo que tengo oído ese tipo de proyectos, que además representan un porcentaje muy grande del tipo de desarrollos que se hacen, se encuadran mucho mejor en los esquemas del software tradicional. Alguien podría decirte que la ingeniería del software sí que ha tenido cierto éxito porque «funciona» en esos proyectos e incurriría en la generalización contraria a la que tú haces.
Por otro lado, veo que de entrada tienes una definición de ingeniería bastante limitada y te cito:
«Nunca me gustó que se llame “ingeniería” a un proceso que tiene poco que ver con los de las ingenierías tradicionales, entre ellas que las tradicionales poseen una serie de herramientas analíticas y cuantitativas para evaluar y estimar riesgos y tolerancias. En el desarrollo de software no tenemos esas herramientas, quizás nunca las tengamos: no es lo mismo trabajar en la construcción de elementos físicos, limitados por leyes fundamentales de la física, con pocas combinaciones posibles, con la construcción de programas informáticos que no tienen esas limitaciones físicas, ni en las combinaciones posibles.»
¿Desde cuando ingeniería implica necesariamente proyectos puramente físicos?
Basta que mires las definiciones de la RAE:
ingeniería.
1. f. Estudio y aplicación, por especialistas, de las diversas ramas de la tecnología.
2. f. Actividad profesional del ingeniero.
ingeniero, ra.
(De ingenio, máquina o artificio).
1. m. y f. Persona que profesa la ingeniería o alguna de sus ramas.
MORF. U. t. la forma en m. para designar el f. Silvia es ingeniero.
2. m. ant. Hombre que discurre con ingenio las trazas y modos de conseguir o ejecutar algo.
Es perfectamente válido hablar de ingeniería del software. Otra cosa es que estés en contra de lo que unos u otros consideren ingeniería del software, pero en el momento en que tú tienes un proyecto en mente, piensas en qué hay que hacer, cómo hay que hacerlo y finalmente lo haces tú, o organizas un equipo para que lo haga y realizas un seguimiento, eso es proyecto de ingeniería. Será más difícil medir y por tanto predecir dependiendo del tipo de software que proyectes, pero al final no es tan distinto a proyectos de otras disciplinas. De lo contrario, si no es ingeniería ¿Qué es?. ¿Realizar un proyecto de un sistema de información es ciencia? Ciencia sería estudiar acerca de nuevas técnicas de compiladores o algoritmos, nunca una implementación o proyecto. Bueno, y mucho menos arte desde luego.
@quicksort
> Utilizas esos ejemplos como muestra del fracaso de la ingeniería del software y yo creo que eso es un error.
Falso, muestro esos ejemplos como alternativa a los ejemplos que dió DeMarco, ya que son mucho más representativos de los ejemplos que dió, especialmente el de la Wikipedia.
Y los doy porque son proyectos muy grandes y complejos que han tenido éxito sin el uso de las métricas y metodologías «tradicionales» y aún así siguen siendo ignorados y los estudios científicas siguen sin ser aceptados por las revistas de ingeniería de software «tradicionales» (las del «establsihment») simplemente porque no la comprenden.
> ¿Desde cuando ingeniería implica necesariamente proyectos puramente físicos?
Estás respondiendo a un tema muy técnico con definiciones de la RAE, ¿desde cuándo la RAE define procesos de la ingeniería? Es una falacia, o como mínimo es como discutir en una revista científica con artículos del Muy Interesante.
Tal como lo digo aquí, y lo dijo Dikstra (está citado), el término ingeniería surgió a raíz de una reunión de la OTAN, y a partir de allí se empezó a asumir erróneamente que podríamos ser igual que las otras ingenierías «físicas». Este tipo de argumentos es muy común y puedes verlo en comentarios de este blog, cuando equiparan construir software con construir un edificio.
Ese es el abuso de la analogía que critiqué, y al que llamao «ingeniería tradicional», que es la misma que critica ahora mismo DeMarco (dice exactamente lo mismo al referirse a las «naturales»).
> Es perfectamente válido hablar de ingeniería del software.
Otra vez, yo no lo dije. ¿Puedes citar?
Critiqué a «esa ingeniería» [sic], la «ingeniería tradicional», la del «establishment», pero basta con mirar lo que pongo por ejemplo en «futurología» para darte cuenta que no critico el uso de la palabra per se, sino el abuso de la analogía y el «establishment».
Es el mismo abuso que ya criticaba Dijstra, y que él consideraba que hace mucho daño a la «ciencia» ya que se propagó la idea de que es similar a una ingeniería civil o eléctrica (curiosamente DeMarco dice 20 años después más o menos lo mismo, y lo siento, pero si es por autoridad Dikstra lleva las de ganar).
Y la otra crítica es que esa «ingeniería tradicional», la de libros y publicaciones científicas ha ignorado durante décadas los métodos y «buenas prácticas» usadas en software libre. Simplemente porque no la entienden o desconocen completamente (como el hecho de elegir Wikipedia como algo representativo del software libre y su «ingeniería).
De nuevo, insisto, me hacéis decir cosas que no dije, suponéis intenciones que no están escritas y respondéis a eso.
No sé si es problema de «no leer», de comprensión lectora o de que no se toleran ideas diferentes a las preconcebidas sobre la «ingeniería del software». De todas formas es descorazonador.
A ver, entonces, realizar el proyecto de sistema de información de una empresa ¿para tí es ciencia?
Si no es ingeniería ¿qué es?
¿Alguien que realiza un proyecto de sofware? ¿Es un científico? ¿Tú qué te consideras? ¿Ingeniero? ¿Científico? ¿Artista???
Y yo no trato de menospreciar a la ciencia ni mucho menos. Simplemente veo una clara diferencia entre ciencia y aplicación de la misma.
@quicksort
¿Y ahora de dónde sacas lo de ciencia, ingeniería o arte? Es otro tema diferente, y no deja de sorprenderme estas desviaciones de tema en vez de cuestionar concretamente a mis respuestas. Es una eterna huida hacia adelante (o hacia atrás, no lo sé).
En primer lugar que lo de «ciencia vs ingenería» ya lo he tocado varias veces, incluso del «cisma» que algún día se producirán en las carreras informáticas para separar bien los estudios de ciencias de la computación con los de ingeniería. Y escribí sobre esos planes de la ACM:
https://gallir.wordpress.com/2008/10/26/bolona-integridad-de-la-academia-y-las-fuerzas-del-mercado/
https://gallir.wordpress.com/2008/04/28/sintonizar-universidades-y-empresas-pero-%c2%bfque-debe-saber-un-ingeniero/
etc.
Lo que sostengo consistentemente:
1. La ingeniería informática NO es similar a las otras ingenierías. Lo dije siempre, ahora lo reconoce DeMarco, pro eso lo cito.
2. La elección del nombre ingeniería en tiempos tan tempranos y con énfasis en dar una imagen de «seriedad» a las empresas –fundamentalmente desde las propias universidades y asociaciones profesionales– generó el error del abuso de las analogías a tal punto que la «ingeniería tradicional» pretendió emularlas durante 40 años. Lo dice DeMarco, por eso lo cito.
3. La confusión de «ingeniería software» = «uso de metodologías» como si fuese lo único que define a la «ingeniería» (más en #4 y #5)
4. El desarrollo de software tiene mucho de artesanía y creatividad [matemática] que no se puede medir tan fácilmente, ni reemplazar un programador por otro como si se tratasen de obreros que hacen tareas repetitivas, ni con las metodologías más complejas.
5. Para ser [buen] ingeniero informático hace falta ser buen programador, entre otras cosas porque un programa es una gigantesta fórmula matemática (en el sentido amplio, llamada a veces cálculos de predicados, lógica de órden n, cálculo lambda) y no una combinación de elementos físicos.
Esas son mis afirmaciones recurrentes, algunas de ellas citadas en este apunte ¿en qué no estás de acuerdo? ¿por qué tengo que ir siempre al inicio?
Estaría bien que respondieses a mi comentario anterior con puntos concretos en vez de hacer como los demás y desviar continuamente el tema.
DeMarco:
The book’s deep message seems to be, metrics are good, more would be better, and most would be best. Today we all understand that software metrics cost money and time and must be used with careful moderation
Galli:
Hoy en día todos comprendemos que las métricas de software cuestan dinero y tiempo, y que deben ser usadas con moderación
Comentario:
Yo entiendo que el autor dice que las métricas no son lo mejor ni lo más importante como daba a entender en su libro, que [] moderación. Pero entiendo que ¡sigue recomendando su uso!
DeMarco:
software development is inherently different from a natural science such as physics, and its metrics are accordingly much less precise in capturing the things they set out to describe. They must be taken with a grain of salt, rather than trusted without reservation.
Galli:
El desarrollo de software es inherentemente diferente de las ciencias naturales tales como las física, por lo que sus métricas son muchas menos precisas para capturar lo que deben describir.
Comentario:
Deben ser tomadas “con un grano de sal”. Yo entiendo que el autor dice que debemos considerar sus errores, Yo no interpreto que por su inexactitud sean inútiles.
DeMarco:
Implicit in the quote (and indeed in the book’s title) is that control is an important aspect, maybe the most important, of any software project. But it isn’t. Many projects have proceeded without much control but
managed to produce wonderful products such as GoogleEarth or Wikipedia.
Galli:
Muchos proyectos se han realizado sin demasiado control pero han generado productos maravillosos tales como Google Earth o la Wikipedia.
Comentario:
Yo entiendo que dice que el control no tiene por qué ser el aspecto más importante ni el único. Pero no entiendo que diga que no es importante.
DeMarco:
This leads us to the odd conclusion that strict control is something that matters a lot on relatively useless projects and much less on useful projects. It suggests that the more you focus on control, the more likely you’re
working on a project that’s striving to deliver something of relatively minor value.
Galli:Esto nos lleva a la desagradable conclusión que el control estricto es algo que importa mucho en proyectos relativamente inútiles y mucho menos en proyectos útiles. Sugiere que mientras más te enfoques en el control aumenta la probabilidad de que estás trabajando en un proyecto que se esfuerza por generar algo de valor relativamente menor.
Comentario:
Entiendo que la traducción de useless->inútil puede parecer adecuada, pero creo que sería mejor usar useless->valueless “de menor valor” que se correspondería mejor con lo que el autor trata de transmitir.
DeMarco:
so far, I’ve mostly discussed software engineering’s metric component. How about the rest? I’m gradually coming to the conclusion that software engineering is an idea whose time has come and gone. I still believe it makes excellent sense to engineer software. But that isn’t exactly what software engineering has come to
mean. The term encompasses a specific set of disciplines including defined process, inspections and walkthroughs, requirements engineering, traceability matrices, metrics, precise quality control, rigorous planning and tracking, and coding and documentation standards. All these strive for consistency
of practice and predictability. Consistency and predictability are still desirable, but they haven’t ever been the
most important things.
Galli:
Estoy llegando gradualmente a la conclusión que el momento de la ingeniería del software vino y se marchó.
Comentario:
(¿no traduces “I still believe it makes excellent sense to engineer software “). Entiendo que DeMarco en este párrafo dice que la ingeniería del software es algo más que métricas (“The term encompasses a especific set of disciplines….”). [] Consistencia y predictibilidad son todavía deseables, pero no siempre han sido lo más importante. Eso no significa que no haya proyectos, de menor valor añadido –de acuerdo-, en que si que sean lo más importante.
Que si. Que se han hecho grandes cosas con el software libre (habría que calcular su coste de oportunidad, como ha indicado alguien por aquí). Que reconoce que para proyectos innovadores el control no va muy bien. Vale. De ahí a sacar las conclusiones que sacas respecto a la «ingeniería» hay un ancho trecho.
Y menos aún mezclar Ingeniería Informática con Ingeniería del Software y después con regulación y colegios.
Saludos
@josé antonio
En todos los textos que has puesto está claro que mi traducción es correcta y literal. Por ejemplo «useless» es inútil, pero matiza lo que quieras, la idea es la misma, y la traducción es precisa.
Todo lo demás de mi texto son opiniones personales que en ningún momento intento hacer pasar por opiniones de DeMarco (de hecho le critico en el software que ha puesto como ejemplo, y argumento sobre ello) [*]
Lo único que haces es poner ambos textos, en inglés y mi traducción [*] para luego agregar tu comentario. Así que, ¿puedes indicar donde manipulé el texto de DeMarco como me has acusado antes?
Aquí tienes otras traducciones: http://www.navegapolis.net/content/view/909/99/
[*] En uno te has olvidado de poner mi traducción completa: La frase más citada del libro es «No puedes controlar lo que no puedes medir». Esta frase contiene una verdad real, pero cada vez me sentía más incómodo con el uso que hice de ella. Está implícita en la frase (y en título del libro) que el control es un aspecto importante, quizás el más importante, de cualquier proyecto de software. Pero no lo es.
> Y menos aún mezclar Ingeniería Informática con Ingeniería del Software y después con regulación y colegios.
Otra vez manipulas. Una: si existe la ingeniería del software libre y existe la ingeniería del software, entonces la ingeniería del software libre es también ingeniería. No entiendo a qué le llamas «mezclar», están mezcladas.
Dos, lo único que digo de los colegios es la frase:
Por dos razones:
1. En ese debate expuse argumentos similares a los de ahora, y muy en línea con lo que publicó DeMarco (módulos las diferencias visibles sobre software libre y metodologías «tradicionales») debido a los razones que exponían sobre la necesidad de colegios y «evitar el intrusismo».
2. Los promotores de colegios han sido lo que han recurrido al argumento (resumido): «la ingeniería de software es como cualquier otra ingeniería, es como construir edificios, y debe tener los mismos colegios y regulaciones».
La mezcla no la hice yo, objetivamente verificable en el debate.
[*] En uno te has olvidado de poner mi traducción completa: La frase más citada del libro es «No puedes controlar lo que no puedes medir». Esta frase contiene una verdad real, pero cada vez me sentía más incómodo con el uso que hice de ella. Está implícita en la frase (y en título del libro) que el control es un aspecto importante, quizás el más importante, de cualquier proyecto de software. Pero no lo es.
(No es el aspecto más importante en determinados tipos de proyectos, pero no dice que no sea importante)
Las traducciones son incompletas y todas en un mismo sentido.
>Otra vez manipulas. Una: si existe la ingeniería del software libre y existe la ingeniería del software, entonces la ingeniería del software libre es también ingeniería. No entiendo a qué le llamas “mezclar”, están mezcladas.
digo que mezclas Ingeniería Informática con Ingeniería del Software…son dos cosas distintas. Revisa tu comprensión lectora del castellano. 😉
Los hay que defienden la regulación en base al interés general y los colegios como interlocutores sociales como dice nuestra Constitución. ¿Por qué te quedas con la parte que te interesa (intrusismo y analogía)?
Respecto a la bien general: TODAS las fuerzas políticas están de acuerdo en la toma en consideración de las creaciones de los consejos de colegios.
Respecto a la analogía, las técnicas, herramientas y mediadas de la arquitectura e ingenierías mejor no hablemos. Porque es su responsabilidad tanto el diseño como el proceso, y no olvidemos que en el proceso de desarrollo se les van no pocas vidas. No hagamos analogías pués en ningún sentido.
Respecto a la física, no hablemos de proyectos innovadores, como los del CERN o la central nuclear finlandesa ¿sabes por cuanto se le van sus proyectos? Vaya vaya, ¿no eran estos ingenieros?¿no tenían herramientas?
¡Ah! Y yo soy Ingeniero. Ingeniero en Informática. ¿Sabes por qué? Por que tengo un papel firmado por el Rey. Así que puedes opinar lo que quieras.
Ingenieria proviene del termino inglés «engine» y no de ingenio…
¡Pues yo digo que la arquitectura es una pseudociencia porque se les muere gente construyendo pisos y porque usan arena de mar con sal y porque cuando compras un puñetero piso de 300.000 tienes que hacer una lista enooooorme de desperfectos que se tiran un montón de tiempo para arreglarmelos!
¡Y la economía! otra pseudociencia porque son incapaces de predecir el futuro más inmediato
¡Y la medicina! otra pseudociencia por cortarme la vena cava en una operación y por dar medicamenteos por «uso compasivo», es decir, sin utilidad médica contrastada científicamente
¡Y la enfermería! otra pseudociencia, por no poner el tubo de los alimentos distinto al de la sangre como se hace con la gasolina y el gasoil
@josé antonio
> digo que mezclas Ingeniería Informática con Ingeniería del Software…son dos cosas distintas. Revisa tu comprensión lectora del castellano.
¿Cuál es la diferencia?
El contenido fundamental de la ingeniería informática en España es fundamentalmente ingeniería de software del curriculum de la ACM para esta titulación (módulo los que pasaron por ingeniería técnica de sistemas que tienen más de electrónica y controladores). En el grado se sigue el mismo patrón, incluso todavía más centrado en «ingeniería del software».
> Las traducciones son incompletas y todas en un mismo sentido.
Haz las tuyas y explica, porque lo que has puesto no indica que yaha cambiado un ápice el sentido del original (de hecho hace comentarios sobre el texto que ni yo hice, lo dejé tal cual, cada uno es libre de leer el original y la traducción).
> Los hay que defienden la regulación en base al interés general y los colegios como interlocutores sociales como dice nuestra Constitución. ¿Por qué te quedas con la parte que te interesa (intrusismo y analogía)?
Ya existen las asociaciones [profesionales]. La constitución no obliga a la creación de colegios profesionales (sólo de la regulación), de hecho ese depende de leyes autonómicas. En españa ya teníamos buenas asociaciones, y tan antiguas como ATI.
Si critico lo que critico es porque ha sido el argumento fundamental, está en casi todos los estatutos y porque los colegios son descriminatorios per-se. ¿O no tengo derecho a criticar lo que no me guste? ¿O la constitución dice que no son criticables los colegios o las ideas de los que los promueven?
> Ah! Y yo soy Ingeniero. Ingeniero en Informática. ¿Sabes por qué? Por que tengo un papel firmado por el Rey. Así que puedes opinar lo que quieras.
Y yo, dos veces. ¿Por eso tengo el doble de razón? Soy profesor de ingeniería informática, ¿tengo el triple de razón? Overflow de falacias.
Pero no estamos hablando de papeles o título sino de temas «tecnicos-profesionales». Parece que no eres capaz de ver la diferencia: «Galli no tiene razón y manipula porque tengo un papel firmado por el rey, y punto».
Genial, que vaya bien.
>Estaría bien que respondieses a mi comentario anterior >con puntos concretos en vez de hacer como los demás y >desviar continuamente el tema.
He preferido desviar un poco el tema porque tampoco tengo tanto que decir al respecto pero ya que insistes voy por partes:
>Falso, muestro esos ejemplos como alternativa a los >ejemplos que dió DeMarco, ya que son mucho más >representativos de los ejemplos que dió, >especialmente el de la Wikipedia.
Precisamente son del mismo tipo. Me refería a que ni tú ni DeMarco teneis en mente otro tipo de proyectos técnicamente mucho más sencillos pero que sin un mínimo de ingeniería del software o como lo quieras llamar se pueden convertir en un infierno. Y se trata precisamente de un grueso importante de proyectos.
>Estás respondiendo a un tema muy técnico con >definiciones de la RAE, ¿desde cuándo la RAE define >procesos de la ingeniería?
Te he dado la definicón de la RAE como te podría haber dado cualquier otra. El tema es que veo que tiene mucho más sentido el término ingenieria del software que el de ciencia del software porque la mayoría de los proyectos de software, de ciencia poco o nada, es aplicación 100%. Al hablar de informática como ciencia o del término ciencias de la computación que se trata por otros lares, pienso más bien en «metainformática», es decir, proyectos acerca de nuevas técnicas de compiladores, inteligencia artificial, teoría computacional… etc
Y acerca de los puntos del otro comentario:
>1. La ingeniería informática NO es similar a las >otras ingenierías. Lo dije siempre, ahora lo >reconoce DeMarco, pro eso lo cito.
Cierto, es diferente pero porque las bases no son las mismas. Es una ingeniería distinta pero una ingeniería al fín y al cabo. Lo más remarcable es que debido a la base, en un proyecto de ingeniería del software hay muchos aspectos que son difícilmente medibles pero ojo! eso no significa que no merezca la pena realizar previsiones o aproximaciones. O la captura de requisitos o el análisis que también es parte de la ingeniería del software, es necesario pensar bien en un principio qué es lo que tú o el cliente quiere que haga el sistema.
O el espinoso tema de las métricas. Está claro que es un error tomarlas como dogma pero tampoco es cierto que sean completamente inútiles. Pueden ser útiles para identificar qué clases merecen la pena refactorizarse por lo complejas que se han vuelto por ejemplo.
O las metodologías de desarrollo, desde las del propio software a las del proyecto en sí. En esta parte la ingeniería del software se parece bastante a ingeniería de la organización.
>2. La elección del nombre ingeniería en tiempos tan >tempranos y con énfasis en dar una imagen de >“seriedad” a las empresas –fundamentalmente desde >las propias universidades y asociaciones >profesionales– generó el error del abuso de las >analogías a tal punto que la “ingeniería >tradicional” pretendió emularlas durante 40 años. Lo >dice DeMarco, por eso lo cito.
>3. La confusión de “ingeniería software” = “uso de >metodologías” como si fuese lo único que define a la >“ingeniería” (más en #4 y #5)
La ingeniería del software no trata únicamente de metodologías.
>4. El desarrollo de software tiene mucho de >artesanía y creatividad [matemática] que no se puede >medir tan fácilmente, ni reemplazar un programador >por otro como si se tratasen de obreros que hacen >tareas repetitivas, ni con las metodologías más >complejas.
Eso depende mucho del tipo de proyecto del que hablemos y a casos como este es a lo que me refiero cuando digo que generalizas.
Hay proyectos donde es mucho más complicado comprender el modelo de negocio que la lógica en sí misma.
>5. Para ser [buen] ingeniero informático hace falta >ser buen programador, entre otras cosas porque un >programa es una gigantesta fórmula matemática (en el >sentido amplio, llamada a veces cálculos de >predicados, lógica de órden n, cálculo lambda) y no >una combinación de elementos físicos.
En la ingeniería informática o concretamente ingeniería del software, a diferencia de otras ingenierías es cierto que es imposible ser buen ingeniero sin ser buen programador. Yo creo que esto es debido a que debido a que no es posible realizar medidas exactas acera del software, es necesario que el ingeniero tenga experiencia en el tema para sin tener esas mediciones, tomar decisiones y hacer una buena gestión del proyecto.
Aprovecho para decirte también que no estoy de acuerdo en que «Ingeniería Informática» = «Ingeniería del Software».
Supongo que sabes que hasta ahora hay tres carreras.
Ingeniería Técnica en Informática de Sistemas es bastante más que ingeniería del software. Se da bastante de arquitectura de computadores, electrónica y redes.
Ingeniería Informática, de ciclo largo, sus primeros cursos son como los de informática de sistemas, por tanto, es bastante más que ingeniería del software.
Ingeniería Técnica en Informática de Gestión. Esta sí que tiene la mayor parte de su grueso dedicado a la ingeniería del software pero también se da parte de arquitectura de ordenadores, algo de redes y también algo de economía y organización empresarial.
Desconozco si el nuevo grado de Ingeniería Informática sigue conservando los diferentes temas.
Te dejo el enlace a stackoverflow, el debate ahí ha sido bastante interesante:
http://stackoverflow.com/questions/1149778/is-software-engineering-dead-closed
Tus conocimientos sobre lo que es la Ingeniería del Software están al mismo nivel que los de aquel alumno que hace años no compredía el por qué de la IS, decía: total 75.000 pesetas por fichero y ya está. Genuino argumento de ignorante (eso si muy anterior a tu postura). Pués nada sigamos con «vivan las cademas» y otras proclamas demagógicas que en su momento sigue cientos de personas. Y descuida la historia no te hará justicia, las bobadas se olvidan.
@quicksort
Sobre el enlace, ya lo había visto, estoy de acuerdo con varios de los comentarios. Y fíjate que en ese debate no hay tantas gilipolleces ad-hominem como se han escrito aquí, basta mirar el cometario que sigue al tuyo (vaya nivelazo de argumentación de algunos «ingenieros»).
Por otro lado, el socio fundador de stack overflow es Joel Spolsky, el mismo que escribió de la pseudociencia en la gestión de proyectos de software y cuyo enlace está en el cuerpo: http://mnm.uib.es/gallir/posts/2007/08/29/1164/
Otra más: ni Joel ni su socio el de codinghorror (al que leo habitualmente) son grandes conocedores del software libre. De hecho no conozco que hayan liberado nada y montan todo sobre Windows (Stackoverflow está sobre Windows y .Net si mal no recuerdo).
Es importante saber el contexto y la comunidad que hay alrededor para evaluar opiniones.
———–
Sobre la ingeniería técnica de sistemas.
1. No es ingeniería «superior».
2. Desaparecen del grado.
3. Estábamos hablando de «ingeniería» y no de «ingeniería técnica» por eso hice la matización específica sobre la «ingeniería técnica de sistemas», donde también doy clases y tienen pocas asignaturas de ingeniería de software (aunque suelen ser bastante buenos en programación por las prácticas que tienen).
Lo siento, pero equiparar una ingeniería técnica con la «superior» como lo haces sí es una burrada de generalización. No significa que sea peor, pero no tienen nada que ver, y son un paso intermedio para la «ingeniería». Cada una es útil, pero por favor, no generalices tanto de ponerlas a todas por igual, sino ya no sabemos de qué hablamos cuando habláis de «títulos» y «carreras».
Sobre el grado: hay tres líneas «gordas» en los currículums propuestos por la ACM (que son los que usan la mayoría de países/universidades serias): ciencias de la computación, de sistemas y de software. Históricamente la ingeniería (la de 5 años) tiene mucho más de software que de ciencias o de sistemas, similares a las propuestas de ingeniería de software de la ACM. Las fundamentales del grado son más o menos igual, módulo la especialización que le de cada universidad (podría haber algunas que sean más «sistemas» o de «base de datos» que otras).
Así que «confundir» «ingeniería informática» con «ingeniería del software» no es una locura: la ingeniería del software lo hacen (en teoría y según competencias de BOE o libros blancos) los titulados de «ingeniería informática».
Pero no tengo problema en retractarme, disculpas por confundir «ingeniería en informática» con «ingeniería del software». Ahora, especialmente aquellos que defienden competencias y atribuciones, ¿quién debería hacer «ingeniería del software» en España?
Bueno, no era mi intención poner al mismo nivel una carrera de grado superior con una de grado medio. Simplemente pensé que cuando hablabas de ingeniería informática también englobabas a las técnicas. Por eso me parecía raro teniendo en mente la de sistemas que dijeras que supusieras que todas son equivalentes a ingenieria del software.
>¿quién debería hacer “ingeniería del software” en España?
Bueno, la respuesta es evidente. Esa es la situación actual, el empleador contrata a quien cree que mejor puede hacer su trabajo. A veces se demandan ingenieros, otras veces ingenieros técnicos y otras veces basta FP2. Yo como empresario miraría en primer lugar la experiencia que es lo que va a ser determinante para el éxito del proyecto.
Dicho esto, el tema de la regulación es un poco más espinoso. España tiene mucha tradición reguladora, la ingeniería informática no sería la única ingeniería con atribuciones que sólo sirven para crear exclusividad. Por cierto, yo no simpatizo con los colegios pero hay cosas que claman un poco al cielo. Biólogo o Físico son profesión regulada (aún sin atribuciones), mientras que Ingenierio Informático no, el gobierno dice que no quiere regular pero en seguida recurre a los colegios oficiales para consultar sobre TIC…. Pero bueno, este debate sí que aburre. Al menos hablando de ingeniería del software se puede aprender algo útil
Me he ido un poco por las ramas. A la pregunta que has hecho, pues a similar experiencia contrataría al ingeniero informático o lo más similar. No por corporativismo sino porque esa base debería hacerle más versatil. Un biólogo por ejemplo a menos que sea un proyecto de bioinformática, no pintaría mucho y si resulta que tiene experiencia me puede valer pero estoy seguro que esa falta de base se tiene que notar a menos que sea un perfecto autodidacta que eso es otro tema, pero los autodidactas aunténticos no proliferan, sí que proliferan quienes se creen autodidactas simplemente por leer tutoriales en la red.
Comparar la ingeniería técnica de sistemas con la superior es una burrada?
Teniendo en cuenta que en ciertas universidades no se puede acceder directamente a la superior, ya que solo se oferta el segundo ciclo, y que hay que hacer primero la técnica para luego acceder al segundo ciclo de la superior (4º y 5º), no creo que sea una burrada, ya que convalidan 1º, 2º y 3º.
Por otra parte hablar de si se da mucha o poca ingeniería del software en la técnica, es generalizar, puesto que del total de creditos de la carrera de la técnica las materias troncales y por tanto las únicas que se dan en todas las universidades no llega ni al 50 % de los creditos. Hay una gran cantidad de creditos en asignaturas obligatorias que fija la universidad y perfectamente pueden usarse para dar a sus alumnos ingeniera del software (Y me consta que en varias universidades es asi).
Por otra parte en la superior tan solo hay 2 asignaturas troncales de ingeniería del software.
En definitiva no creo que la ingenieria del software solo sea de ingenieros «superiores».
Y sobre el tema de las métricas y la ingeniería de software. Pues por mi propia experiencia puedo decir que en aquellos desarrollos en el que el código no ha tenido unas normas de calidad ni se han aplicado métricas para evaluar su calidad, en general ha terminado siendo algo chapuza (poco modularizado, con problemas de acoplamiento, complejidad, etc…). No pocos de estos proyectos se han vuelto inmantenibles y se ha tenido que hacer desarrollos desde cero suponiendo un coste en varios millones de euros, que se podían haber ahorrado de haberse realizado correctamente desde el principio.
Por otra parte contraponer software libre versus ingeniería del software es algo que no termino de comprender. Puesto que perfectamente se puede desarrollar software libre aplicando métricas de calidad al código y aplicando ingeniería del software.
En el desarrollo de software libre lo que prima es el desarrollo colaborativo, pero creo que es importante tener en cuenta lo siguiente: normalmente hay un «núcleo de programadores» fijos que son los que marcan el diseño de la aplicación. La metodología que hayan usado para hacer este diseño dependerá de cada grupo, pero por lo que he visto en aplicaciones importantes de software libre, hay un diseño previo y una guia de estilo (no tiene porque ser en uml, a veces es un documento explicativo de lo que se quiere conseguir, otras veces es un diagrama de clases y una explicación general de la arquitectura), que marca como se debe desarrollar para que el código que se quiera incoporar al proyecto sea aceptado.
A mí me parece muy valiente De Marco. Dejar ir algo a lo que dedicaste tu vida requiere una cantidad interesante de pelotas (cojones).
Conozco gente, yo inclusive, que tiene problemas para reconocer errores más leves, a los que ha dedicado menos.
Sin haber leido todos los post, pero sí la mayoría, quiero plantar algunas preguntas.
1) Recuerdan ustedes contra qué surgió la ingeniería del software? Dicho de otro modo, cómo eran los programas grandes de los 70/80? Feos y caros de mantener, no?
2) Como creen ustedes que se forma la gente competente?
Si no estudian lo que hay o ha habido recientemente no podrán mejorarlo.
3) Está muy bien presentar como ejemplos casos que han triunfado pero, son representativos? No hay ejemplos
que ilustran lo contrario?
Reitero la idea de que se lea el texto completo. Porque, mi capacidad lectora debe estar muy limitada, no veo a nadie que entone ningún “mea culpa”. Acepta errores, si. Acepta que hay proyectos muy útiles a la sociedad que se han llevado a cabo o se llevan a cabo sin seguir sus prerrogativas. Pero él mismo establece en qué casos esas prerrogativas siguen siendo igual de válidas. Luego ambas visiones pueden perfectamente coexistir.
Reitero además que se mezcla Ingeniería Informática con Ingeniería del Software y no son equivalentes. Una vez aceptada esta circunstancia, se tendrá que admitir que se puede regular algunos aspectos relativos a la profesión de Ingeniero en Informática sin tener que ser necesariamente sobre ingeniería del software. Por tanto, como ambas cosas no tienen por qué estar relacionadas se están introduciendo juntas innecesariamente.
Respecto a la Ingeniería en Informática. Es un título. Como tal no es muy opinable (¿o qué dices a tus alumnos?). Podrás discutir si la ingeniería del software tiene una madurez científica y tal, pero no tanto sobre el título –que no es lo mismo- y a eso me refería.
Por otra parte, el uso del término pseudo-ciencia conlleva un peyorativo con el que nunca podría estar de acuerdo. Puesto a no reconocer la ingeniería del software como ciencia, creo que sería más conveniente denominarla como proto-ciencia, sobre todo cuando admites que en futuro cabría la posibilidad de que fuera admitida como ciencia (algo mucho más complicado con las pseudociencias)
Sobre los colegios, te podrán no gustar –que me parece muy bien- y hay mucha gente que no les gusta y yo nos lo voy a defender y muy probablemente nunca me colegiaré. Dicho esto, el parlamento ha aprobado por unanimidad su toma en consideración. Existe pues un lado político que no podemos obviar en el debate sobre su conveniencia o no. Podremos dirigirnos a Lourdes Santa María (PSOE) u otros políticos con los que tengamos contacto y contarles nuestras cuitas. Como DeMarco (o Dijkstra), con bastante probabilidad, no entiende de Boloña, atribuciones, competencias, grados, colegios, y demás, no veo el nexo por ninguna parte. Tal vez exista y no sea capaz de verlo o entenderlo. En ese caso te agradezco de antemano tu paciencia y tus explicaciones.
Y, finalmente, sobre las analogías. Me parece bien. Nunca las he usado. Resistiré aunque tenga un par de hijos adolescentes. Pero no las usemos en ningún sentido. Ni para un lado ni para el otro. No quiero atribuciones porque las tengan los arquitectos, nunca he sido envidioso, pero que no me digan que no porque no tengo herramientas analíticas y cuantitativas para evaluar riesgos y tolerancias porque entonces te hablaré de sus muertos, del CERN, de las centrales nucleares, etc, etc, etc.
«Ah! Y yo soy Ingeniero. Ingeniero en Informática. ¿Sabes por qué? Por que tengo un papel firmado por el Rey. Así que puedes opinar lo que quieras.»
Dejo de leer aquí. Después del rey aparecerán los feudales, después los monjes de monasterio y más adelante las hogueras para el que dude de la palabra del Rey.
«Dejo de leer aquí. Después del rey aparecerán los feudales, después los monjes de monasterio y más adelante las hogueras para el que dude de la palabra del Rey.»
Si. Deja de leer ahí, porque dejaste de comprender un rato antes.
Ricardo, creo que sigues y seguimos cometiendo el mismo error, al que creo que apunta DeMarco.
Prestamos más atención a nuestro obligo desarrollador de software (sea o no ingeniería y sea lo que sea ingeniería) que a comprender, conseguir hacer aflorar y cubrir las necesidades de los usuarios.
Pero no siempre el objetivo es cubrir las necesidades de los usuarios y sí lo es cumplir los requisitos del cliente.
Imagina una administración pública. Tratas sobre un contrato de software+consultoría. Por ejemplo, vas a hacer una consultoría sobre determinados procedimientos administrativos y a implantar un sistema workflow que nos proporcione un conjunto de métricas sobre la eficiencia de los procedimientos y sus actores.
Habría 2 tipos de usuarios, los de las métricas (que no van a tocar una tecla) y los finales ¿Cómo te crees que te vas a encontrar a los finales? ¡De uñas!. Te encontrarás a alguno que hará lo posible e imposible para que tu trabajo fracase.
Cuando trates del contrato, tendrás que decir un precio. Estoy sin duda en un proyecto del tipo A, según DeMarco. Le tendré que dar un precio y tratar de no equivocarme. Tendré que echar mano de todas las herramientas que tenga a mi alcance (incluso una bola de cristal, ya que es una pseudociencia ;-). Si hablamos de 1 millón de euros, tal vez te quede 100.000 de margen (con algo de suerte y mucha profesionalidad). Estos 100.000 es mucho dinero y esto está dando de comer a no pocas familias.
Lo que no podré decirle al cliente es: “Mira, yo soy un artista y lo que hago es arte. Yo empiezo y ya veré qué, cuando y por cuanto te lo acabo”.
Escribí «usuario» en lugar de «cliente» con plena consciencia.
Porque muchas veces, quizás demasiadas, «el cliente» tiene otros «requisitos» e incluso objetivos, más o menos lícitos. El peor caso es el que expones, entidades públicas, donde los usuarios finales, directa o indirectamente, somos todos los ciudadanos.
Ejemplo real vivido hace un tiempo. En los centros de atención primaria implantaron un nuevo sistema. Tanto los médicos como enfermeras se quejaban de preguntas surrealistas que tenían que informar, nada relacionadas con la asistencia sanitaria pero bastante con estadísticas que a «alguien» le interesaba recabar. Cuando otras cuestiones médicas mucho más necesarias no estaban cubiertas en la nueva aplicación.
Pretender que la ingeniería del software permita predecir exactamente los plazos de un proyecto es como intentar predecir cuando terminará una obra; se llama predecir el futuro. Puedes estimar en base a otros proyectos, pero necesitas un numero de proyectos suficiente (y con tecnologías parecidas) para realizar estimaciones homogéneas, que más o menos, podrían llegar a ser útiles. No exactas, sino útiles
La ingeniería del software se refiere más a la realización de una serie de procedimientos flexibles y la aplicación de una serie de normas y patrones establecidos para lograr software mejor hecho. Hay gente que lo llama «sentido común», pero ya sabemos que eso sólo se adquiere con experiencia.
No obstante, la visión contrapuesta es considerar la programación como un arte. Y eso sí que hace daño a la informática; es como si cada arquitecto quisiese hacer su propio sistema de cúpula; vale que disfrutamos como enanos con la típica situación problema-solución y nos guste la algoritmia y nos encante ponernos delante del IDE y encontrar una solución programando a un problema. Pero no debemos perder de vista que eso es una parte de crear un software
Actualmente, las visiones clásicas como EL RUP se han descubierto demasiado rígidas; es tiempo de utilizar metodologías ágiles y sobre todo, utilizar el sentido común; pensar antes de programar y pensar que el desarrollo no suele ser trabajo de una sola persona, sino de varias. Y precisamente por esa variablidad que ofrece la programación a la hora de hacer las cosas, es necesario que la ingeniería del software, al mismo tiempo que asume sus limitaciones como materia que aplica a construcciones abstractas, sea valorada como lo que es: un sistema para hacer software mejor.
por cierto, si la ingeniería del software no es una ciencia, la metereología tampoco 😀
“Pero no tengo problema en retractarme, disculpas por confundir “ingeniería en informática” con “ingeniería del software”. Ahora, especialmente aquellos que defienden competencias y atribuciones, ¿quién debería hacer “ingeniería del software” en España?”
Por si te queda alguna duda al respecto, puedes consultar las fichas que se están estableciendo sobre las competencias. En ellas aparece la ingenería del software como una de las patas en la Ingeniería en Informática. Pero hay otras.
En mi opinión, respecto a la ingeniería del software lo limitaría a software crítico y de interés general y que queden delimitadas las responsabilidades del contratante y el “constructor” o prestador del servicio, pero introducir cualificación en ambas partes en determinados niveles. Ya está.
Respecto a otros temas: auditorías de sistemas de información, para aquellos sistemas de interés general. Y sobre temas técnicos presentes en la actual legislación sin establecer la cualificación del personal que debe llevarlas a cabo, a saber: LOPD, firma electrónica. El tema del profesorado en las enseñanzas medias. Otro tema es la cualificación del funcionariado, que lo limitaría en las futuras convocatorias a personal titulado. También habría que poner algo de orden en la contratación de software y servicios por parte de las administraciones públicas porque vaya tela el coladero de dinero que es eso.
Además, establecería que si alguna de estas medidas afectasen a actuales profesionales sin titulación, habría que establecer algún sistema de acreditación profesional para que no se viesen afectados (funcionarios, por ejemplo).
Siempre es muy necesaria una organización en el trabajo, pero esta organización ha de ser efectiva y eficiente. La burocratización es tan errónea como el desorden o el caos.
El nombre que le asignamos puede ser más o menos evocador, pero creo que es más fundamental establecer y transmitior claramente los conceptos y las prácticas.
Existen además demasiados prejuicios.Por ejemplo, algunas metodologías ágiles son más estrictas en los procesos de pruebas que otras supuestamente más exigentes.
Pingback: Debate sobre la Ingeniería de Software (Carlos Fontela y Marcio Degiovannini) « CyS Ingeniería de Software
Ya me parecía, después de trabajar durante más de veinte años desarrollando software bajo los principios de la Ingeniería de Software, entregados en su tiempo como verdad revelada por gurúes que ahora reconocen sus falencias ( y de paso nos liberan de un peso) que, efectivamente, la teoría no era del todo correcta y que en realidad, no funciona.
En todo ese tiempo nunca he visto un proyecto que cumpla con las prescripciones, recomendaciones y preceptos de la teoría y, en no pocas ocasiones ( en algunas por la fuerza de las circunstancias ) violaciones flagrantes de criterios básicos tales como :
– Iniciar un proyecto con especificaciones incompletas, porque no hay más tiempo y…ya se verá.
– Incumplimiento total del ciclo de cascada. No es raro que en proyectos que están entrando a Producción, se estén introduciendo cambios al modelo de datos.
– Adicionar personas a equipos de proyectos en marcha, algo explícitamente contraindicado.
– Cartas gantt que no sirven para nada, ya sea porque se elaboraron por formalidad, el usuario no participó, o porque se necesita demasiado tiempo para hacer una que de verdad sirva y bueno…no hay tanto tiempo. Como al tiempo ya no sirve, hay que hacer otra y bueno, al final el Jefe de proyecto se aburre de hacer cartas gantt.
– Planes de pruebas defectuosos o incompletos, tanto en las Pruebas unitarias como las del usuario y de las de QA, en que no se cumplen los criterios de cada una de ellas.
Tampoco es raro el caso de aplicaciones que pasan a Producción y funcionan, pero que el usuario no usa porque al final le resulta más práctico crear su propio software con planillas EXCEL o, si no es posible, con una base de datos ACCESS.
Hay varias razones de porqué la teoría no calza con la realidad, entre ellas :
– Mala comunicación y falta de compromiso del usuario, que no entrega especificaciones claras ni completas porque tiene una muy distinta visión del proyecto que los informáticos y, por supuesto, no sabe ni le interesa en lo más mínimo la Ingeniería de Software y además no tiene todo el tiempo del mundo para eso. En no pocos casos el usuario no desea el software y, por tanto, no colabora o lo hace al mínimo..al final, no es su problema.
– Cada proyecto es un caso particular en cuanto a ambiente, plataforma e interfases ( y usuarios ), planteando siempre una realidad nueva, de modo que no es posible tener métricas que sean de utilidad. De pronto, el próximo proyecto puede ser PHP + MySQL o .NET + SQLServer o Java + Oracle….etc. Lo más probable es que se conozca solo a medias el ambiente de software de desarrollo y haya que aprender sobre la marcha.
Por supuesto que en todo proyecto hay que hacer estimaciones de costos y plazos, pero eso se llama Administración de proyectos ( no “ingeniería” ) y se hacen hasta para fabricar pan.
Al final, lo que se puede rescatar de la Ingeniería de Software, es lo que se conoce como “buenas prácticas”, algunas obvias, otras no tanto :
– Asegurarse del valor agregado de la aplicación y vender la idea al usuario para conquistar un verdadero interés y compromiso de su parte.
– Diseño de un prototipo que muestre la interfaz gráfica al usuario. Es un medio eficaz de lograr la interacción ( y el entusiasmo ) con el usuario.
– Modelo de datos completo y validado en relación a la información que se quiere obtener de el. Es por lejos el corazón de toda aplicación informática y su elemento más estable. Los modelos de clases y objetos ya son particulares del software y no todo el mundo los conoce; los modelos de datos si son universales.
– Ciclos de prueba bién diseñados y ejecutados. En muchos casos ahí aparecen errores de diseño o falta o errores de especificaciones. Como eso es inevitable, es conveniente que al menos ocurra lo antes posible en el proyecto.
– Aplicaciones que “crecen”. Es mejor liberar un módulo básico a Producción, que el usuario use y valide y luego, a partir de ahí, con el usuario “ganado a la causa” ir agregándole nuevos módulos que liberar de golpe todo un gran sistema a Producción con el consiguiente riesgo de fracaso del proyecto.
Esto se veía venir desde hace ya bastante tiempo, pienso que mucha gente en la industria del software ya lo sabía, de modo que el artículo de Tom DeMarco resulta ser una confirmación que nos quita un peso de encima.
Sin embargo, como discutía con un amigo y colega, creo que aquí aplica aquella frase que reza «Ni tan calvo, ni con dos pelucas». Pienso que la Ingeniería del Software Tradicional tal como la conocemos no es apropiada para muchos proyectos, pero creo también que los métodos ágiles tampoco son la panacea, y se que el caos y el bazar no resuelven todos los problemas tampoco.
La visión del software libre (y no me malinterpreten, pero de veras soy un defensor del software y el conocimiento libres) tiene también sus desventajas, y algunas bastante graves.
Todo proyecto tiene sus características, en algunos proyectos el enfoque tradicional quizá sea el más adecuado, en otros quizá un enfoque ágil sea el apropiado, y en otros la visión del bazar posiblemente sea la correcta.
Yo particularmente, me he beneficiado bastante en mi carrera de desarrollador de software utilizando algunas ideas y técnicas provenientes «Ingeniería del Software Tradicional», así como igualmente me he beneficiado tomando ideas de los métodos ágiles y de la visión del software libre.
Por eso es que pienso que lo mejor es buscar un equilibrio, y utilizar lo que más se adapte al proyecto a desarrollar.
«My two cents»
@Demián Gutierrez
>La visión del software libre (y no me >malinterpreten, pero de veras soy un defensor >del software y el conocimiento libres) tiene >también sus desventajas, y algunas bastante >graves.
Aunque existen ciertas prácticas generalizadas en el desarrollo de software libre que todos conocemos, no creo que se pueda carácterizar el software libre con una visión concreta de desarrollo de software. El software libre se caractariza por lo derechos de los usuarios sobre el software derivados principalmente de la disponibilidad del código.
Ivar Jacobson
«In Need of a Theory for Software Engineering
Our greatest challenge — understanding how to build great software»
http://www.ddj.com/article/printableArticle.jhtml;jsessionid=YXSNR4HLV3OWIQSNDLRSKHSCJUNN2JVN?articleID=218900432&dept_url=/architect/
Os anticipo los dos primeros párrafos:
«To external observers, it would appear that the consensus about how software should be developed changes every second or third year, more frequently than the whims of fashion. Trends come and go with no rhyme or reason, and it seems that the label you adopt is more important than the results that you get or the things that you actually do. Are we working in engineering or the fashion industry?
Have you ever taken the time to investigate a new method or practice only to find that it is just the rebranding and regurgitation of ideas you’ve seen before? Have you ever become frustrated that every new idea about software development seems to come at the expense of and in aggressive competition with everything that’s gone before? Does it seem to you that following that latest software development fashion has become more important than producing great software?»
Pingback: El Arte del Desarrollo de Software | Qué Vida Esta