Introducció als objetius del grau
En aquest grau es pretén que l'estudiant desenvolupi els coneixements i competències que li permetin analitzar, dissenyar i implementar sistemes informàtics que resolguin problemes de tractament de la informació de diferent índole. Existeixen problemes molt diversos, des dels típics problemes de gestió de la informació en el context empresarial clàssic, passant per problemes de control i gestió de processos i dispositius industrials, fins a problemes de gestió dels serveis i infraestructures bàsiques que permeten que els sistemes d'informació que s'implementen puguin funcionar emprant eficientment els recursos de computació, comunicació i emmagatzemament de la informació que ofereixen els ordinadors.
Se us ensenyaran tècniques per intentar realitzar l'anàlisi, disseny i implementació de sistemes informàtics, i que per a una gran majoria de problemes us permetran obtenir solucions satisfactòries, encara que no necessàriament les tècniques us portaran sempre a la millor solució possible. Avui en dia, la millor forma d'arribar a obtenir bones solucions continua passant per desenvolupar i posar en pràctica el màxim temps possible totes les tècniques que us ensenyin, de manera que com més practiqueu més anireu descobrint com prendre certes decisions en el procés de disseny que us portin a obtenir un millor sistema. La realitat és que el bon disseny té molt "d'art", i es tracta d'una activitat absolutament fascinadora que posa a prova, i desenvolupa, la nostra capacitat intel·lectual. Per tant, l'objectiu principal del grau és que l'alumne desenvolupi una sèrie de tècniques que li permetin dur a terme l'anàlisi, disseny i implementació de diversos sistemes informàtics. Tanmateix, una petita part dels continguts obligatoris del grau pretenen cobrir alguns dels fonaments de la informàtica, i en alguns dels continguts que es troben als blocs d'especialització trobareu més continguts fonamentals.
Podeu consultar la pàgina web
guies docents si voleu informació sobre el pla d'estudis. Encara que la informació que hi ha ara només és completa per al primer curs.
Límits i reptes de la informàtica
Per intentar comprendre la complexitat en el disseny de sistemes informàtics, és important comprendre que no tots els problemes que ens interessen es poden arribar a resoldre amb el mateix èxit per un sistema informàtic. Per comprendre mínimament això, és necessari conèixer alguna cosa dels fonaments de la informàtica, i per això en aquest grau els continguts sobre fonaments de la informàtica són rellevants si voleu arribar a raonar sobre les possibilitats dels sistemes informàtics, així com intentar reconèixer els seus límits, per no sobrepassar-los. Com millor conegueu aquests fonaments, més capacitat d'innovació tindreu en el desenvolupament de sistemes informàtics que solucionin problemes complexos, per als quals les solucions actuals siguin poc satisfactòries.


Al cor de tot sistema informàtic, trobem com a element central el que anomenem algoritme. Els algoritmes es coneixen i s'han estudiat des de molt abans que existís el primer ordinador electrònic, que és probablement l'ENIAC, i és que des de fa molt temps els matemàtics s'han entossudit a intentar automatitzar la resolució de molts problemes de forma mecànica, i d'aquesta tenacitat podem dir que va néixer un estudi profund dels algoritmes i de les seves limitacions a l'hora de resoldre problemes. Podem definir, de manera informal, un algoritme com segueix:
"Descripció d'un procés per resoldre un cert problema, com una seqüència d'accions a executar, de manera que l'acció a executar a cada pas del procés és troba totalment determinada".
Tots hem tingut contacte amb algoritmes en les classes de matemàtiques. Per exemple, quan a l'escola ens ensenyaven a multiplicar números grans mitjançant multiplicacions petites i sumes, de fet el que estàvem fent era aprendre un algoritme de multiplicació, igual com quan ens ensenyaven a dividir. En les matemàtiques els algoritmes han estat una cosa natural, des de molt abans de quel a algú se li ocorregués crear màquines capaces d'executar aquests algoritmes automàticament.
Per tant, no és d'estranyar que bona part dels fonaments de la informàtica estiguin fortament relacionats amb diverses branques de les matemàtiques. Les matemàtiques que s'ensenyen en el grau no són només la clau per arribar a entendre certs aspectes fonamentals de la informàtica, sinó que formen els fonaments de moltes de les tècniques d'especificació, disseny i anàlisi de sistemes informàtics. Però la relació més íntima, i segurament més transcendental, entre la informàtica i les matemàtiques, és que precisament gràcies a l'estudi de models formals de computació, es va posar en marxa l'estudi de les limitacions dels ordinadors a l'hora de resoldre problemes .
L'exemple més representatiu és l'anomenat problema de la parada (halting problem). Tots hem experimentat alguna vegada l'exasperació en posar en marxa un programa, que normalment funciona bé, i de sobte en posar-lo en marxa sota unes condicions determinades veure com el programa no acaba mai de donar una resposta, fins que finalment, cansats d'esperar, tenim que "matar" el programa, o fins i tot reiniciar l'ordinador. La pregunta que sorgeix és: No és possible analitzar automàticament (amb un altre programa) que un programa no es penjarà quan el posem en marxa amb una determinada entrada ? Doncs resulta que no. En general, aquesta anàlisi automàtica no és possible amb un únic programa verificador, el que no treu que per a moltes classes de programes, en especial els que es desenvolupin emprant certes tècniques de derivació formal, no sigui possible assegurar que acabaran sempre donant una resposta.
(Traducció en procés)
Lo curioso es que ese resultado, obra de Alan Turing, fue demostrado en 1936 empleando un modelo formal de computación, la máquina de Turing y una técnica del matemático Georg Cantor llamada diagonalización. La diagonalización fue empleada por Georg Cantor para demostrar que hay muchísimos mas números reales que números naturales, mostrando que no hay forma de emparejarlos a todos de forma que cada número real esté emparejado con un único número natural, y viceversa. Dejando a parte el problema particular de la parada, de hecho la diagonalización que empleó Turing básicamente muestra que existen muchísimos más problemas que algoritmos, y que por tanto necesariamente hay problemas que no tienen algoritmos que los resuelvan. A los problemas que no pueden ser resueltos mediante un algoritmo, como el problema de la parada, se les llama indecidibles.
Desde entonces, se ha probado que muchísimos otros problemas de interés son indecidibles. Es precisamente cuando abordamos problemas más avanzados que caen dentro del campo del razonamiento y aprendizaje automático, y en general en los diversos temas que intenta resolver la inteligencia artificial (IA) desde hace unos 50 años, cuando rápidamente nos encontramos con muchos problemas que en general son indecidibles, y entonces nos vemos obligados a imponer ciertas restricciones a las condiciones del problema para que esto no ocurra. Para llegar a comprender como imponer esas condiciones de forma que el problema pueda ser resuelto por el ordenador, el conocimiento de los fundamentos de la informática antes mencionados son esenciales. Como ejemplo plenamente actual de problemas de razonamiento automático donde es necesario imponer restricciones al problema para que pueda ser resuelto mediante un algoritmo, tenemos diversos problemas de razonamiento automático sobre ontologías, que son la piedra fundamental de la llamada web semántica.
Es importante observar que los problemas que intenta resolver la IA no tienen sólo que ver con los clásicos problemas que trataba la IA en sus inicios, como programas para jugar al ajedrez, visión artificial, robótica, o demostración automática de teoremas matemáticos, entre otros, sino que hoy en día las técnicas de la IA se emplean en problemas de optimización de recursos en diversos contextos, tales como planificación de recursos humanos y materiales en procesos industriales complejos. Por ejemplo, el problema de la configuración de tripulaciones de vuelo para compañías aéreas, o para otros medios de transporte, es un problema en el que las pocas empresas que actualmente desarrollan programas para solucionarlo tienen un negocio muy lucrativo.
Uno de los problemas centrales de la informática en general, y de la IA en particular, es que incluso cuando nos restringimos a trabajar con problemas decidibles, ocurre que para muchos problemas no parece haber forma de obtener algoritmos que los resuelvan de manera eficiente, es decir, consumiendo tiempo y memoria de forma moderada respecto al tamaño del problema. Y lo que es peor, no tenemos técnicas automáticas de análisis que nos permitan diferenciar los problemas que se pueden resolver de manera eficiente de los que no, aunque afortunadamente muchos problemas de interés se sabe que pueden ser resueltos de manera eficiente, como muchos de los problemas de búsqueda y ordenación en bases de datos. Este problema fundamental de la distinción entre problemas resolubles eficientemente de los que no lo son, está de hecho relacionado con el llamado problema de NP versus P, considerado como uno de los problemas matemáticos fundamentales por resolver en la actualidad, y es otra prueba de la conexión profunda entre informática y matemáticas. Aunque es un problema no resuelto, de toda la investigación que se ha desarrollado para intentar comprender mejor esos problemas que parecen ser tan difíciles de resolver, se han obtenido resultados muy importantes que han ayudado a encontrar algoritmos de importancia práctica, como los llamados algoritmos de aproximación, que son algoritmos que para problemas de optimización difíciles permiten encontrar soluciones que se acercan bastante a la óptima, empleando poco tiempo.

Por último, para acabar esta introducción a la informática y sus limitaciones y retos, es importante mencionar que el hecho de que la disponibilidad de clusters de ordenadores, y de ordenadores conectados mediante redes de comunicación, no haga más que crecer, no implica que los problemas que no pueden resolverse de manera eficiente con un único ordenador, puedan resolverse mucho mejor cuando dividimos el problema en muchos subproblemas que repartimos entre los diversos ordenadores. El problema es que precisamente esa división de un problema en subproblemas que puedan resolverse de forma lo más independiente posible empleando varios ordenadores conectados en red, no está claro como obtenerla para los problemas que parecen no poder ser resueltos eficientemente con un único ordenador. Sin embargo, parece claro que técnicas actuales de computación paralela y distribuida, tales como las basadas en grid, cloud y peer-to-peer computing, aumentan las dimensiones de los problemas que podemos resolver en un tiempo limitado, aunque la forma de emplear los recursos de la computación paralela y distribuida para resolver un problema de la forma más eficiente posible es hoy por hoy también un problema abierto, relacionado otra vez con problemas fundamentales sobre informática y matemáticas.