Llenguatges de programació

Col·laboració de Ana Martín per al capítol Programar ordinadors

Un llenguatge de programació és un llenguatge que pot ser utilitzat per a controlar el comportament d’una màquina, particularment una computadora. Consisteix en un conjunt de regles sintàctiques i semàntiques que defineixen la seva estructura i el significat dels seus elements, respectivament. Un llenguatge de programació permet a un programador especificar de manera precisa: sobre quines dades ha d’operar una computadora, com han de ser aquests emmagatzemats i transmesos, i quines accions ha de prendre sota una variada gamma de circumstàncies.

Els primers ordinadors però, no es programaven de la mateixa forma que es fa avui dia. Era necessari un esforç molt major. Les memòries dels primers ordinadors només podien emmagatzemar dades, no programes. El concepte de programació en aquests primers ordinadors era molt diferent, ja que els programes es registraven mitjançant cables a la màquina. Els experts gravaven físicament els programes necessaris per a generar i processar les dades. Així doncs, programar aquests ordinadors era molt difícil. Per a realitzar un canvi, el programador de hardware havia de reestructurar el cablejat que conformava el programa. Això va ser així, fins que John von Neumann va inventar el concepte de programa compartit.

Va demostrar que es podia emmagatzemar un programa a la memòria de l’ordinador juntament amb les dades. Una vegada que els programes s’emmagatzemaven a la memòria i ja no depenien d’un dispositiu físic de cables, van ser molt més fàcils de canviar.

Així doncs, John Von Neumann va desenvolupar el model que duu el seu nom, per a descriure aquest concepte, de “programa emmagatzemat”. En aquest model, es té una abstracció de la memòria com un conjunt de cel·les, que emmagatzemen simplement nombres. Aquests nombres poden representar dues coses: les dades, sobre els quals va a treballar el programa; o bé, el programa en si.

Aquesta seqüència és fàcilment executada per la computadora, però és de difícil interpretació, sent encara més difícil la interpretació d’un programa (conjunt d’instruccions) escrit d’aquesta forma.

Com és que descrivim un programa com nombres? Es tenia el problema de representar les accions que anava a realitzar la computadora, i que la memòria, a l’estar composta per switches corresponents al concepte de bit, solament ens permetia emmagatzemar nombres binaris.

La solució que es va prendre va ser la següent: a cada acció que sigui capaç de realitzar la nostra computadora, associar-li un nombre, que serà el seu codi d’operació (opcode).

La descripció i ús dels opcodes és el que anomenem llenguatge de màquina . És a dir, la llista de codis que la màquina interpretarà com instruccions, descriu les capacitats de programació que tenim d’ella; és el llenguatge més primitiu, depèn directament del hardware, i requereix que el programador conegui el funcionament de la màquina al més baix nivell.

Aquests primers programadors, utilitzaven panells d’interruptors per a introduir els seus programes a la memòria compartida de l’ordinador. Encara que això era fantàstic per a l’època, programar aquests ordinadors suposava esforç molt gran, ja que havia d’utilitzar-se el llenguatge natiu de la màquina de zeros i uns. Aquesta dificultat feia que els errors fossin freqüents i la correcció dels mateixos costosa, quan no impossible, igual que la verificació i modificació dels programes. D’aquesta manera, sempre que un programador necessitava sumar dos nombres, moure valors en memòria o el que fos, havia de recórrer a una taula que descrivia els patrons corresponents de zeros i uns per a les instruccions que necessitaven. Girar els interruptors i programar la màquina podia portar hores, però era un salt gegantesc respecte a la programació per cables.

Però amb la pràctica en el maneig de la màquina es va caure en el compte que es podria utilitzar la pròpia màquina per a ajudar en la traducció d’aquests programes. És a dir, que si a una màquina elemental se li dotava d’un programa, també elemental, que traduís un nombre determinat de caràcters alfabètics en una seqüència d’uns i zeros, es podria escriure un programa constituït per una seqüència de grups de caràcters alfabètics, en la qual cadascun dels grups indicaria una acció a realitzar per l’ordinador i, una vegada escrit el programa, seria la pròpia màquina la qual passaria els grups de caràcters a bits. Els avantatges d’això són evidents, ja que per a l’home resulta mes fàcil manipular grups de caràcters i la traducció es faria de manera automàtica.

D’aquesta manera, el primer gran avanç que es va donar va ser l’abstracció donada pel llenguatge ensamblador, i amb ell, el naixement de les primeres eines automàtiques per a generar el codi màquina.

Es va adjuntar un teclat a l’ordinador i en lloc d’escriure tota la combinació d’uns i zeros necessària, el programador podia ara escriure noms associats amb cada instrucció en el llenguatge màquina. Aquests comandaments eren críptics, però resultaven molt més fàcils de recordar que les combinacions d’uns i zeros. Aquestes paraules es coneixen com “regles mnemotècniques”, que significa que les paraules són abreviatures fàcils de recordar per a cada instrucció.

Per descomptat, l’ordinador no podia comprendre aquestes regles, però un programa de traducció anomenat assembler (ensamblador) s’encarregava de la comunicació entre les abreviatures que escrivia el programador i els uns i els zeros necessaris per a la màquina.

Això va reduir els errors trivials, com podia ser el nombre que corresponia a una operació, que són summament enutjosos i difícils de detectar, però fàcils de cometre. No obstant això, encara aquí és fàcil per al programador perdre’s i cometre errors de lògica, doncs ha de baixar al nivell de la forma que treballa l’ordinador, i entendre bé tot el que succeeix dins d’ell.

Col·laboració de Ana Martín per al capítol Programar ordinadors