INGSOFT

INGSOFT

Tras el pseudo-orwelliano término «INGSOFT» me propongo escribir algunos posts (breves) sobre ingeniería de software «práctica». ¡¿Y eso existe?!

Pues sí, aunque a muchos informáticos de carrera nos cueste mucho creerlo, lo cierto es que hay una cantidad importante de gente por ahí interesada en resolver los problemas reales que tiene la profesión. Sorprendente ¿verdad? Y no estoy hablando de las atribuciones y los colegios profesionales, estoy hablando del diseño e implementación de programas que tengan la inaudita cualidad de funcionar, y además funcionar bien.

Los «principios o filosofías de diseño de software» me parecen un buen sitio para empezar. Los principios de diseño hablan (razonadamente) sobre cosas que deberíamos hacer y cosas que no deberíamos. No se puede decir que sean de precisión matemática ni mucho menos (ojalá) pero lo cierto es que seguirlos nos puede ayudar a hacer un trabajo de calidad (qué palabra!). Hace unos días hablaba sobre uno de estos principios (YAGNI) en el post Procrastinación y el «mal de la computadora» que bien podría haber sido el primer post de esta serie.

La profesión de informático (ingeniero o no) es aún muy artesanal. Muchos piensan que una ingeniería (como es la informática) no debería ser artesanal, y tienen razón, no debería, pero lo que debería o no y la realidad raramente coinciden. El depender del buen hacer del profesional y, desgraciadamente, menos de los formalismos o principios científicos contrastables, trae problemas a la hora de ejercerla.

En casi todas las ingenieras está muy claro qué está bien y que está mal, cuál es el valor o la cantidad adecuada para conseguir el resultado que se busca (con su correspondiente margen de tolerancia), pero en informática la bibliografía está llena de normas, métodos y reglas que a la hora de la verdad, en el momento crucial, acaban diciendo que «depende del caso», «las consideraciones concretas», «bueno, es que claro…», «bajo cierto punto de vista…» y nadie se moja. Nada está del todo bien ni del todo mal. No hay normas estrictas para casi nada y pocos se atreven a decir categóricamente que algo es una barbaridad (y a menudo los que lo hacen meten la pata). Sin duda eso se debe a que es una disciplina científica muy muy joven y por tanto inmadura.

Por eso me atrevería a decir que el principal problema de la profesión de informático es la «imaginación» ya sea por defecto o por exceso. Me explico, ante un problema, el informático novato tiene la impresión de ser el primero del mundo al que se le presenta algo así. En lugar de buscar la «solución correcta» (que suele estar en los libros) lo que hace es crear una propia. Aquí hay dos posibilidades:

  • el novato imagina alguna solución maravillosa y creativa, o
  • el novato diseña/escribe lo primero que se le ocurre, aún a sabiendas de que es una chapuza.

Para el primero hay esperanza, el segundo NO ES un profesional (es lo que hace, un chapuza) al menos por el momento. Pero, en ambos casos, el resultado es parecido: un completo desastre, código espaquetti, inmantenible e inútil. «El novato» no tiene porqué ser un recién llegado, si no se toman medidas, si no se aprende y avanza, uno puede ser novato toda la vida.

¿Y cuál es la solución para evitarlo? Pues la misma que en cualquier otra profesión: la experiencia, pero no es preciso que sea nuestra experiencia, podemos aprovechar la de otros. Es decir, copia (que no plagia) de los maestros, de los que han demostrado que saben, que les va bien. Con «maestros» no me refiero a profesores (pocos han ejercido como verdaderos profesionales del software), me refiero a los grandes gurús, profesionales con experiencia en la industria del software y que han tenido éxito más allá de la pura suerte. De ese grupo yo excluiría a algunos como por ejemplo Bill Gates, que no tiene nada de maestro del software, aunque sí es un gran maestro de los negocios (y ha escrito libros dignos de ser leídos).

Podemos resumir todo eso en un principio (filosofía?) aún más básico que los que veremos en los próximos posts. Dice algo tan simple como:

«Elije copiar antes que innovar»

Sé que es duro y difícil resistirse, nos gusta mucho crear, inventar y todo eso (a los del primer grupo, a los otros se la trae al pairo), es otro síntoma del «mal de la computadora». Pero si somos ingenieros nuestra labor es resolver problemas de forma eficaz y eficiente, es decir, de forma satisfactoria y con el mínimo coste y tiempo posible.

Sólo cuando conozcas las técnicas y métodos mayoritariamente aceptados y tengas claro que son insuficientes para resolver tu problema puedes aventurarte a idear algo revolucionario, no antes (te anticipo que si eres honesto contigo mismo, pasará algo más de una década hasta que te suceda). Para entonces ya tendrás la suficiente experiencia y ciertas garantías de que lo que propones no es una burrada. Todo eso se consigue principalmente leyendo bibliografía y también, aunque en menor medida, leyendo/tocando trabajo de otros (buen código y buenos diseños a poder ser).


MENOS ES MÁS
LA CREATIVIDAD ES LA ESCLAVITUD
LA EXPERIENCIA ES LA FUERZA

Bienvenidos al INGSOFT


Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
int-0's picture

Bueno...

...me parece muy bien eso que dices... pero... si dices que la Ingeniería Informática es una disciplina relativamente nueva... bueno, realmente nueva... ¿no es un poco triste asumir de antemano que no hay posibilidad de innovación y que te limites a usar lo que hay?. Es evidente que hay muchos problemas comunes que ya tienen una solución óptima reketeestudiada... pero quizás haya otros problemas menos frecuentes en los que se pueda buscar soluciones alternativas.
No se, me gusta pensar que quizás alguna vez podré hacer algo y que alguien diga: ¡coño no se me había ocurrido! asumir que no puedes hacer nada que no haya hecho alguien ya es bastante desalentador... ¿no?

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

david.villa's picture

Pero yo no digo que no se pueda

Pero yo no digo que no se pueda o no se deba hacer nada nuevo, ni mucho menos.

Digo que antes de hacer algo nuevo deberíamos conocer cómo lo hacen otros porque es muy probable que ya haya maneras mejores (métodos, herramientas e implementaciones) que la que se nos ocurra a nosotros (sobre todo si somos novatos). La innovación debería basarse en el conocimiento: conozco lo que hay, no es suficiente, pruebo algo nuevo, evalúo el resultado. Si es una ciencia (y yo creo que lo es) apliquemos el método científico.

Si se hace de otro modo, sin mirar lo que existe, la mejora (que no sabremos si realmente lo es) será fruto del azar, no repetible, no sistemática y por tanto no científica.

Es muy distinto «copia antes que innovar» de «copia siempre, nunca innoves». Yo defiendo lo primero, ni de lejos lo segundo.

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

fsancho's picture

Plas plas plas

Me inclino y reverencio estas líneas de sentido común. Espero impaciente el resto de la serie.

Una cuestión. Estando de acuerdo en que la informática es aún una ciencia en pañales ¿Por qué ese empeño en llamarnos ingenieros? ¿No nos estamos perjudicando nosotros mismos?

david.villa's picture

Tú llámate lo que quieras

Tú llámate lo que quieras, yo ya te lo llamo Sticking out tongue

Yo creo que la informática puede (y debe) ser ingenieril. Admitir que no lo es implica dejar más terreno a la artesanía y menos a la ciencia, y ese (creo) no es buen camino.

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

magmax's picture

Ingeniería vs Arte

No me gustaría entrar en un flame, pero me parece un tema interesante para comentar.

Mi opinión es que la Ingeniería Informática debería ser lo que es, una Ingeniería. El problema surge cuando los Ingenieros Informáticos saben menos de Ingeniería que los "informáticos".

Me explico: Un Arquitecto tiene que decidir si usar un material u otro en una construcción. Sabe que ambos son buenos y que ambos van a aguantar. Sabe que uno es más caro que el otro. Pero, aún así, puede decantarse por uno u otro en función de muchos factores: estética, reacción con otros materiales cercanos, etc. Pues de la misma manera debería actuar un Ingeniero Informático, decidiendo si utilizar un patrón u otro y decidiendo la mejor manera de aplicar sus conocimientos.

Quizá sea un poco pesimista, pero es que me temo que el único patrón que conocen muchos "Ingenieros Informáticos" es el de "copy-paste", creando toneladas de código redundante, ineficiente y propenso a errores. El problema es que cuando digo que eso está mal -ojo, que no digo que se pueda hacer mejor, sino que está mal porque ESTÁ MAL-, me miran raro, murmuran y me llaman "friki". No, señores: tan sólo aplico los conocimientos que se me suponen.

Yo creo que, actualmente, la programación tiene un 90% de arte y un 10% de ingeniería. Creo que hay que tender a un 50-50.

PD: Hay de todo en todas partes...

Miguel Ángel García
http://magmax.org

brue's picture

en mi defensa ...

... he decir que mis programas tienen poco arte ... y normalmente está encerrado entre /* */

Me ha encantado el post David, espero el resto de la serie impaciente.

brue