Cercar en aquest blog

11/12/09

La capa de coneixement

En els sistemes d'avui en dia, quan parlem del seu desenvolupament, el seu disseny o la seva arquitectura, en algun moment o altre, sempre apareix el terme capa.


"desenvolupament de 3 capes, de 5 capes , de n-capes,...."

Sempre apareix la capa de visualització (pantalles per interactuar amb el sistema), la capa de negoci (processament de les dades rebudes pel sistema) i la de dades (persistir aquella informació que ha de durar en el temps), és un resum. També hauríem de parlar de la capa de seguretat que apareix involuntàriament ,o no, en tota la resta. Però, independentment del número de capes i a l'igual que la de seguretat, al meu entendre, crec que hi ha una capa més amagada i de la qual mai se’n parla, poder perquè no cal parlar-ne, poder perquè no hi ha temps per pensar-hi, poder perquè la inversió econòmica no ho ha previst o poder perquè no hi em parat a pensar més del que es mereix.


Quan parlem de coneixement, parlem de saber, de saber alguna cosa, de saber fer alguna cosa, de saber com ..., etc, en definitiva, "saber", sabiduria, intel·ligència?, uhmm, raonem-ho una mica més.


Crec que puc afirmar que al voltat dels sistemes d'informació hi ha molt coneixement, i dins, n'hi ha?..., també, però menys del que hi podria haver.


En qualsevol programari informàtic triat a l'atzar, podem trobar un mínim de coneixement, com pot ser, el manual d’instal·lació, la documentació tècnica, i el coneixement que ens dóna el sistema, uns logs i uns events (rarament), dels quals poques vegades se’n treu profit, quan realment són indicadors de que el sistema està viu.


Bé doncs, la idea que jo vull expressar és la de poder absorbir el coneixement al màxim de manera bidireccional, o sigui, utilitzar el coneixement del professional per alimentar al sistema, i utilitzar el coneixement del sistema per ajudar en tot moment al professional a fer la seva feina el millor possible i augmentar així la productivitat i la eficiència, així com millorar-ne els resultats.

I com podem fer-ho:


  • Utilitzar al màxim el llenguatge natural i les parts de la semàntica que el formen. Utilitzar noms per identificar objectes i verbs per identificar accions sobre els objectes. adjectius per representar propietats, adverbis per representar estats, situacions, aspectes, etc. També cal identificar dominis d'aplicació. "Enregistrar persona" en un domini mèdic-assistècial suposa enregistrar un pacient, en canvi en un domini de compres online, suposa enregistrar un client.


  • Mantenir un glossari domini-nom-verb i associar-li una documentació o protocol que utilitzarem per informar on calgui del que s'està fent quan és produeixi l'acció.


  • La documentació o protocol associat/da a cada relació domini-nom-verb, realment ja la tenim, però no en podem fer res, no la fem servir, perquè no ens hem preocupat d’enregistrar-la. Aquest protocols estan en els professionals que degut a la seva experiència, saben com es fan algunes coses que altres no saben. Això suposa que si no podem absorbir d'alguna manera aquest coneixement, quan aquesta persona marxi pel motiu que sigui, s'emportarà amb ella aquest coneixement tant valuós.


  • I per tant, l' empresa és la primera interessada en no perdre aquest coneixement. I que pot fer, doncs molt fàcil, incentivar l'aportació de coneixement als sistemes d'informació de l'empresa.


  • El sistemes d'informació han d'oferir mecanismes per enregistrar aquesta informació de manera que sigui aprofitable pel programari i els usuaris que en facin ús. Per dir-ho de manera senzilla, el sistema ha de se capaç de dri-li a l'usuari que està enregistrant un pacient i no un client.


  • També podem utilitzar aquests protocols per informar al nous usuaris de com es fa alguna cosa (procés de negoci). El sistema hauria de ser capaç de posar-lo en el punt de partida i ajudar-lo fins al final de tot el procés. El sistema hauria de ser capaç de contestar a "Com es fa un alta hospitalària" o "Com es programa un preoperatori" o ....


  • Per altre banda el sistema es va informant, l'usuari "x", a l'hora "y" a "enregistrat un pacient". Però en aquest procés d'enregistrament, s'han fet moltes coses, s'han introduït dades per part de l'usuari (que podríem analitzar, imaginem-nos un informe d'alta per un diagnòstic en concret, crec que valdria la pena analitzar el contingut dotant al sistema de coneixement sobre aquest tipus de diagnòstic i reutilitzar-lo si cal, en futurs diagnòstics semblants), s'han procesat  i finalment s'han guardat.


  • Sempre que s'estigui executant un procés, utilitzaria el gerundi del verb que identifica la acció sobre el nom o objecte. Per exemple "guardant" i un cop acabat el participi, "guardat". En ambdós casos dispararia un event que informés al gestor d'events i aquest decidís si s'ha de fer alguna cosa.


  • Per altre banda dins el sistema, s'han de capturar tots els errors i tractar-los amb cura. Les excepcions haurien d'informar-se ràpidament, per tal de solventar-les. Quan es produeix un error l'usuari ha d'estar informat de manera entenedora i el tècnic de manera explícita. Això es coneixement també.

Quines aportacions podem trobar en les noves tecnologies que ens ajudin a gestionar coneixement dins les nostres aplicacions? Moltes.


En molts IDE's actuals podem trobar ajudes per crear documentació tècnica, facilitar el disseny de processos, facilitar la integració entre processos i serveis, facilitar la definició d'entitats, de models, ajudar a la programació, a picar codi, mostrant les possibilitats al programador a partir de la variable on es troba (intellisense, bona paraula quan parlem de coneixement), etc, etc, etc. Tot això s' ha pogut incloure dins els IDE's gràcies a fer un estudi de com fan les coses els professionals, com estaria bé que les facin, i analitzant això i moltes més dades, poder facilitar la feina al desenvolupador, per fer la seva feina el millor possible i augmentar així la productivitat i la eficiència, així com millorar-ne els resultats. Em sembla que això ja ho havia dit abans.

Dins el món Microsoft, puc dir que realment ja treballen en aquest sentit, aportant millores constants que em molts casos faciliten en gran mesura el desenvolupament, i el desenvolupament de la capa de coneixement. En el seu IDE actual en producció ja es poden definir processos mitjançant Workflows, definir Serveis amb workflows, definir models d'entitats a partir de models relacionals, definir serveis de dades, crear diagrames de seqüències, de classes, etc. Amb el VS2010 que vindrà les coses encara són més senzilles i entenedores.


Dins les tecnologies .NET que Microsoft aporta mitjançant el seu framework gratuït, podem trobar dins de cada capa millores que ajuden a la gestió del coneixement.

Si comencem en la capa de dades, està clà, "S' HAN ACABAT LES SENTÈNCIES SQL DINS D' UNA APLICACIÓ". Avui en dia em d'anar més enllà del model relacional, i de consultes SQL dins les aplicacions, em d’ apostar pel model d'entitats, models post relacionals. N' hi ha un munt, NHibernate és poder el més famós, però jo em quedo de moment amb el que porta el mateix framework, de moment no necessito res més. I que ens aporta? coneixement. Amb un model d'entitats, si parteix d'un model E/R ben definit i amb les relacions entre taules ben establertes, obtenim un model d'entitats (classes) que ens aporten coneixement en tot moment del model que representen, mitjançant les seves propietats escalars i de navegació. Aquestes últimes ens informen cap a on podem anar a partir d'una instància qualsevol. Si a més projectem el context que formen aquest conjunt d'identitats a través d'un Servei de dades (DataService), podem accedir a un model de dades, des de qualsevol punt de la xarxa (fora de la intranet, saltant firewalls, amb HTTP o HTTPS), i a més a més, un model que ens aporta coneixement de com aquestes dades estan relacionades, i el més important que encara no ho he dit, en temps d' execució i consultable amb LINQ. "El sistema es capaç de d'informar-nos de que emmagatzema, com ho fa i com està relacionada tota la informació". I moltes més avantatges (mirar documentació a MSDN).


Si continuem en la línea lògica, ens trobem en la part de processos de negoci. Aquesta part ha d'estar desenvolupada amb Workflows. Aquest per si sols ja aporten coneixement, si estan ben implementats, ens donen una representació gràfica de flux del procés, encapsulen porcions de codi en activitats, augmentant en gran mesura la reutilització de codi, la flexibilitat dels processos i el coneixement dels usuaris. Es poden representar amb estructures XML, el que suposa que son portables , transferibles, serializables, fàcils de transmetre entre sistemes, fàcils de modificar, bé aconsello el seu estudi.


Alguns del processos de negoci seran projectats a través de serveis. Els serveis en .NET són igual a WCF. La gràcia d'aquesta tecnologia no l'explicaré, perquè és obvia si et documentes prou. Però respecte al coneixement també comença a aportar coses molt interessants, com poden ser el descobriment de serveis, la recerca de serveis a partir de certs criteris, serveis que anuncien la seva disponibilitat, realment molt interessant, només cal pensar que un client ja no s'ha de connectar a un servei que respon a una URL, sinó a un servei que respón a un criteri de recerca, això és coneixement, els sistemes saben que busquen però no saben on està, però els serveis que poden respondre a dites necessitats saben respondre a aquestes sol·licituds, ....... no calen més explicacions, imaginació i prou.


Si arribem a les capes de presentació, trobem components Web 2.0 que ajuden a captar coneixement dels professionals, però es tasca dels dissenyadors d'interfícies i els desenvolupadors, el fet d'aportar o incorporar components intel·ligents que siguin capaços de captar que vol fer un usuari i ajudar-lo i informar-lo si cal, de que està fent i que suposarà fer allò i com ho ha de fer. El sistema prèviament ha estat informat per algún professional qualificat amb el coneixement necessari per realitzar la tasca suposada, i per tant em estat capaços de captar el coneixement, i reutilitzar-lo.


"Bé com podem veure es un tema apassionant en el qual sens dubte i tenen cabuda algoritmes utilitzats en Sistemes Experts i Intel·ligència artificial. No és una tonteria, el futur del sistemes d'informació passa per convertir-se en sistemes de coneixement, el professionals han de conèixer el negoci, els sistemes també, i crec que en un futur la presa de decisions ha de ser compartida entre el professional i el sistema."