Gairebé tothom ha fet servir un programa avui: una alarma que sona, un missatge que arriba, un rebut que es calcula sol. Molt poca gent, en canvi, ha vist de prop què és exactament un programa i per què una màquina que no entén res és capaç de fer alguna cosa útil. Aquesta lliçó respon a aquesta pregunta des del principi, sense donar per suposat cap coneixement previ. En acabar-la sabràs què és una instrucció, quina diferència hi ha entre el codi que escriu una persona i el que executa el processador, i per què existeixen els compiladors i els intèrprets.

És la lliçó més important del curs, tot i que sembli la més senzilla. Programar no consisteix a memoritzar paraules estranyes: consisteix a traduir una intenció humana a instruccions inequívoques. Si aquesta idea queda ben assentada, tota la resta —variables, bucles, funcions, objectes— són detalls de forma. Si no queda assentada, la resta del curs es converteix en copiar símbols sense entendre'ls.

A més, aquí coneixeràs el cas que ens acompanyarà de principi a fi: Estudi Alba i el seu gestor de tasques TascaFàcil. Tot el que aprenguem ho aplicarem a aquest projecte, mòdul a mòdul, fins a tenir un programa complet.

Contingut

  1. Programar és traduir una intenció a instruccions
  2. Instrucció, programa i codi font
  3. Maquinari i programari en una frase
  4. Del codi font a l'execució: codi màquina
  5. Compilador contra intèrpret
  6. Per a què serveix programar: automatització, resolució de problemes i escala
  7. El cas del curs: Estudi Alba i el seu problema
  8. Què hauria de fer TascaFàcil
  9. Primer contacte amb Python: la salutació del programa
  10. Errors comuns i consells
  11. Exercicis
  12. Conclusió

  1. Programar és traduir una intenció a instruccions

Imagina't que demanes a un company de feina: «prepara la sala per a la reunió». Ho entendrà. Sap què és una sala, què significa preparar i deduirà el que falta: cadires, projector, aigua. Ha omplert pel seu compte un munt de buits que tu no has explicat.

Un ordinador no omple buits. Un ordinador fa exactament el que se li diu, en l'ordre en què se li diu, sense interpretar la intenció. Si li demanes que prepari la sala, no farà res: no sap què és preparar. Cal dir-li-ho així:

  1. Compta quantes persones vénen.
  2. Col·loca aquest nombre de cadires al voltant de la taula.
  3. Si hi ha presentació, encén el projector.
  4. Posa una ampolla d'aigua per cada dues persones.

Això, i cap altra cosa, és programar: descompondre una intenció humana en passos tan precisos que una màquina que no entén res els pugui executar i produir el resultat esperat.

D'aquesta definició en surten les dues habilitats reals de l'ofici:

  • Pensar amb precisió: detectar els buits que un humà ompliria tot sol i tapar-los. Què passa si no ve ningú? I si en vénen trenta i només hi ha deu cadires?
  • Expressar aquest pensament en un llenguatge que la màquina accepti. Aquesta part és la més visible —és «escriure codi»— però és la menys difícil de les dues.

Molta gent creu que no pot programar perquè no se li dóna bé la part tècnica. Gairebé sempre passa el contrari: la sintaxi s'aprèn en setmanes, i el que costa anys d'afinar és la precisió en pensar.

L'ordinador no és llest, és ràpid i obedient

Convé desmuntar com abans millor la idea que l'ordinador «sap». No sap res. Les seves dues virtuts són:

  • Velocitat: executa milers de milions d'operacions elementals per segon.
  • Obediència literal: repeteix la mateixa instrucció un milió de vegades sense cansar-se, sense distreure's i sense corregir-te.

Aquesta obediència literal és una arma de doble tall. Si la teva instrucció és correcta, l'executarà perfectament un milió de vegades. Si és incorrecta, s'equivocarà perfectament un milió de vegades.

  1. Instrucció, programa i codi font

Fixem tres termes que farem servir durant tot el curs.

  • Una instrucció és una ordre elemental que la màquina pot executar: sumar dos nombres, desar un valor, mostrar un text per pantalla, comparar dues quantitats.
  • Un programa és un conjunt ordenat d'instruccions que, executades, resolen una tasca concreta.
  • El codi font és el text que escriu la persona programadora, en un llenguatge de programació, i que expressa aquest programa de manera llegible per a humans.
Terme Què és Qui el llegeix Exemple
Instrucció Una ordre elemental La màquina «Mostra el text Hola»
Programa Conjunt ordenat d'instruccions La màquina, en executar-lo Un gestor de tasques complet
Codi font Text del programa en un llenguatge Les persones Un fitxer tascafacil.py
Codi màquina Instruccions en binari El processador 10110000 01100001

El codi font es desa en fitxers de text normal i corrent. Un fitxer de Python és un fitxer de text amb extensió .py: es pot obrir amb qualsevol editor i llegir-lo. No té res de màgic a dins.

  1. Maquinari i programari en una frase

Per al que necessitem ara n'hi ha prou amb una distinció molt curta:

  • El maquinari (hardware) és la part física: processador, memòria, disc, pantalla, teclat.
  • El programari (software) és el conjunt d'instruccions que diuen al maquinari què ha de fer.

El maquinari sense programari és un objecte car que s'escalfa. El programari sense maquinari és un text. Programar consisteix a escriure programari; el maquinari el posa l'ordinador.

  1. Del codi font a l'execució: codi màquina

Aquí apareix la primera peça que sorprèn qui comença. El processador no entén Python. Tampoc no entén Java, ni C, ni cap llenguatge pensat per a humans. El processador només entén codi màquina: seqüències de nombres binaris (uns i zeros) que representen operacions molt elementals.

Un fragment de codi màquina, escrit tal qual, té aquest aspecte:

10110000 01100001
00000011 00000101
11001101 00000010

Ningú no escriu programari modern així, per raons evidents: és il·legible, específic de cada model de processador i pràcticament impossible de corregir. Per això es van inventar els llenguatges de programació d'alt nivell, que permeten escriure això:

print("Hola")

...i deixar que un altre programa s'encarregui de convertir-ho en les seqüències binàries corresponents. Aquest «altre programa» és un traductor, i n'hi ha dues famílies: els compiladors i els intèrprets.

  1. Compilador contra intèrpret

Tots dos resolen el mateix problema —passar del codi font a alguna cosa que el processador executi— però amb estratègies diferents.

  • Un compilador tradueix tot el codi font d'una sola vegada, abans d'executar-lo, i produeix un fitxer executable en codi màquina. Després aquest executable es llança quan es vulgui, sense tornar a traduir. És el model de C o de Rust.
  • Un intèrpret llegeix el codi font i el va executant sobre la marxa, instrucció a instrucció, sense generar un executable independent. És el model de Python.

Aquest és el recorregut de tots dos casos:

flowchart TD
    A["Codi font<br/>(escrit per una persona)"] --> B{"Com es tradueix?"}
    B -->|Compilacio| C["Compilador<br/>tradueix tot d'una vegada"]
    C --> D["Fitxer executable<br/>en codi maquina"]
    D --> E["El processador executa"]
    B -->|Interpretacio| F["Interpret<br/>llegeix i executa linia a linia"]
    F --> E
    E --> G["Resultat per pantalla"]

Les conseqüències pràctiques per a qui aprèn són aquestes:

Aspecte Compilat Interpretat
Quan es tradueix Abans d'executar, una sola vegada Durant l'execució, cada vegada
Què es distribueix Un executable El codi font + l'intèrpret
Velocitat d'execució Generalment més gran Generalment més petita
Rapidesa per provar un canvi Cal recompilar S'executa directament
Detecció de certs errors Abans d'executar En arribar a la línia fallida

Per aprendre, un llenguatge interpretat és còmode: escrius una línia, l'executes i veus el resultat en dos segons. Aquest cicle curt és or quan estàs començant, i és una de les raons per les quals aquest curs fa servir Python. La comparació completa entre llenguatges, amb les seves màquines virtuals i els seus casos intermedis, la veurem a la lliçó Llenguatges de programació.

  1. Per a què serveix programar: automatització, resolució de problemes i escala

Hi ha tres motius pels quals a una organització li compensa que algú programi.

Automatització. Qualsevol tasca repetitiva i amb regles clares pot passar de fer-se a mà a fer-se sola. Reanomenar 400 fitxers, enviar el mateix avís a 50 clients, comprovar cada matí si un servidor respon. L'ordinador no s'avorreix i no es salta el fitxer 217.

Resolució de problemes. Programar obliga a definir el problema amb precisió, i moltes vegades aquesta definició ja és mitja solució. En escriure el programa descobreixes regles que ningú no havia explicitat: què passa si dues tasques tenen la mateixa prioritat? Pot una tasca no tenir responsable? Aquestes preguntes milloren el procés encara que el programa no s'arribi a escriure.

Escala. Un procediment manual que funciona amb 10 elements se sol trencar amb 10.000. Un programa correcte tracta 10.000 elements amb el mateix esforç humà que 10: el cost és a escriure'l una vegada, no a executar-lo moltes.

Sense programa Amb programa
L'esforç creix amb el volum L'esforç es paga una vegada, en escriure'l
Errors humans aleatoris i difícils de rastrejar Errors sistemàtics, reproduïbles i corregibles
El coneixement viu al cap d'una persona El coneixement queda escrit al codi
Difícil de repetir igual dues vegades Idèntic a cada execució

Fixa't en la segona fila: que un programa s'equivoqui sempre igual és un avantatge, no un defecte. Un error reproduïble es pot localitzar i arreglar. Un error humà aleatori, no.

  1. El cas del curs: Estudi Alba i el seu problema

Estudi Alba és un petit estudi de disseny gràfic fictici. El formen tres persones:

  • Marta, coordinadora. Reparteix la feina i parla amb els clients.
  • Luis, dissenyador. S'ocupa sobretot d'identitat visual.
  • Nuria, dissenyadora. Porta maquetació i materials impresos.

La seva manera actual d'organitzar-se és aquesta: la Marta apunta cada encàrrec en una nota de paper i la deixa sobre la taula de qui correspongui. Va funcionar bé el primer any. Ara no:

  • Les notes es perden. Un encàrrec d'un client va desaparèixer sota un munt de proves de color i es va lliurar amb nou dies de retard.
  • Ningú no sap què té l'altre. La Marta pregunta en veu alta «tu com vas?» diverses vegades al dia i interromp la feina de tothom.
  • No hi ha prioritats explícites. Totes les notes semblen igual d'urgents perquè estan escrites en el mateix paper groc.
  • No queda historial. Quan un client pregunta què es va fer al març, ningú no pot respondre.

La Marta ha decidit que vol un programa que resolgui això. No vol una eina comercial cara i plena d'opcions que no faran servir: vol una cosa petita, pròpia i exactament adaptada a com treballen. Aquest programa es dirà TascaFàcil i és el que construirem al llarg del curs.

Fixa't en un detall important: el problema d'Estudi Alba no és un problema informàtic. És un problema d'organització. La programació només és l'eina amb què l'atacarem. Això és el normal al món real: el programari gairebé mai no és un fi, és un mitjà.

  1. Què hauria de fer TascaFàcil

Abans d'escriure res, convé posar per escrit què esperem del programa. Això s'anomena definir els requisits i és el pas que més gent es salta, amb resultats previsibles.

Després de parlar amb la Marta, el Luis i la Nuria, la llista queda així:

Núm. El programa ha de... Per què ho demanen
R1 Registrar una tasca amb títol, descripció, responsable, prioritat i estat Substituir la nota de paper
R2 Acceptar només tres prioritats: alta, mitjana, baixa Que «urgent» signifiqui el mateix per als tres
R3 Assignar cada tasca a la Marta, el Luis o la Nuria Saber de qui és cada cosa
R4 Llistar totes les tasques i filtrar-les per responsable o per estat Respondre a «tu com vas?» sense interrompre
R5 Marcar una tasca com a completada Distingir el fet del pendent
R6 Desar la informació encara que es tanqui el programa Que no es perdi res en apagar l'ordinador

Cada tasca de TascaFàcil tindrà, per tant, cinc dades:

  • Títol: una frase curta. Exemple: «Dissenyar logotip per al Forn Solé».
  • Descripció: el detall. Exemple: «Tres propostes en blanc i negre, format vectorial».
  • Responsable: Marta, Luis o Nuria.
  • Prioritat: alta, mitjana o baixa.
  • Estat: pendent o completada.

Encara no implementarem res de tot això. Desar dades entre execucions (R6), per exemple, és cosa de la lliçó Desar dades en fitxers, al final del mòdul 5. El que sí que convé és tenir la llista al davant: cada mòdul del curs anirà ratllant requisits.

  1. Primer contacte amb Python: la salutació del programa

Ja podem escriure la nostra primera línia de codi real. Serà modesta —mostrar un text per pantalla— però és un programa complet i funcional.

En Python, la instrucció per mostrar alguna cosa per pantalla és print:

print("TascaFacil - Gestor de tasques d'Estudi Alba")

Desmenucem aquesta línia, perquè cada símbol compta:

  • print és el nom de la instrucció. Significa «mostra per pantalla». S'escriu en minúscules: Print o PRINT donarien error, perquè Python distingeix majúscules de minúscules.
  • Els parèntesis ( i ) tanquen allò que volem mostrar. Sempre hi han de ser tots dos, un d'obertura i un de tancament.
  • Les cometes " marquen el principi i el final d'un text. Tot el que va entre cometes es mostra tal qual, sense que Python intenti interpretar-ho. També hi han de ser totes dues.

Si executem aquest fitxer, per pantalla apareix exactament:

TascaFacil - Gestor de tasques d'Estudi Alba

Ni cometes, ni parèntesis, ni la paraula print. Només el text. Les cometes diuen a Python on comença i acaba el text, però no en formen part.

Un programa pot tenir diverses instruccions, una per línia, i s'executen en ordre, de dalt a baix. Això és una pantalla de benvinguda completa per a TascaFàcil:

print("========================================")
print("  TascaFacil v0.1")
print("  Gestor de tasques d'Estudi Alba")
print("========================================")
print("Equip: Marta, Luis i Nuria")
print("Prioritats disponibles: alta, mitjana, baixa")
print("")
print("Encara no fa res. Tot per construir.")

I això és el que surt per pantalla:

========================================
  TascaFacil v0.1
  Gestor de tasques d'Estudi Alba
========================================
Equip: Marta, Luis i Nuria
Prioritats disponibles: alta, mitjana, baixa

Encara no fa res. Tot per construir.

Tres observacions sobre aquest exemple:

  1. L'ordre importa. Si mous la primera línia al final, la línia d'= apareixeria a baix. Python no reordena res pel seu compte.
  2. Els espais dins de les cometes es respecten. Per això " TascaFacil v0.1" apareix indentat: aquests dos espais són dins del text.
  3. print("") amb cometes buides mostra una línia en blanc. És la manera habitual de separar blocs visualment.

Això és, literalment, un programa. Fa poca cosa, però és un programa complet: té instruccions, un ordre i un resultat observable. Com escriure'l en un fitxer i executar-lo al teu propi ordinador ho veuràs a la lliçó Entorns de desenvolupament.

Errors Comuns i Consells

Creure que cal saber matemàtiques avançades. Per a la immensa majoria del programari professional n'hi ha prou amb sumar, restar, comparar i raonar amb lògica. El que sí que cal és tolerància a la frustració: passaràs molt de temps amb programes que no funcionen, i això és normal, no un senyal que no vals.

Oblidar tancar cometes o parèntesis. És l'error número u de la primera setmana. print("Hola) no funciona perquè el text no es tanca mai; print("Hola" tampoc, perquè falta el parèntesi. Consell: escriu sempre els dos símbols seguits —() i ""— i després col·loca el contingut al mig.

Escriure Print en lloc de print. Python distingeix majúscules de minúscules: print, Print i PRINT són tres noms diferents i només existeix el primer. El mateix passarà amb els noms que t'inventis més endavant.

Confondre «no entenc el codi» amb «no entenc el problema». Quan t'encallis, pregunta't primer si sabries resoldre-ho a mà, amb paper. Si la resposta és no, el problema no és Python. Torna a l'enunciat abans de tocar el teclat.

Voler escriure el programa sencer a la primera. Ningú no ho fa. El programari es construeix per capes: alguna cosa mínima que funcioni, i a sobre una altra cosa. TascaFàcil comença sent vuit print i acabarà sent un programa complet, però el camí són desenes de versions intermèdies.

Consell de mètode: escriu el resultat esperat abans d'executar. Abans de llançar un programa, apunta en un paper què creus que sortirà per pantalla. Si encertes, ho has entès. Si falles, acabes de descobrir un buit en el teu model mental, que és exactament el que buscaves.

Exercicis

Exercici 1: Instruccions inequívoques

Escriu, en català i en forma de llista numerada, les instruccions que seguiria una màquina per preparar una tassa de te. La màquina no sap res: no sap què és una tassa, però sí que pot agafar, abocar, esperar i comprovar. Sigues tan precís que no quedi cap buit per omplir. Després, assenyala com a mínim dos buits que un humà ompliria tot sol i que tu has hagut d'explicitar.

Exercici 2: Compilat o interpretat

Per a cada situació, indica si descriu un llenguatge compilat o un d'interpretat, i justifica la resposta en una frase:

  1. Canvies una línia del programa i el tornes a llançar immediatament, sense cap pas intermedi.
  2. Lliures al client un únic fitxer executable; el client no rep el teu codi.
  3. El programa s'atura amb un error just en arribar a la línia 80, després d'haver executat correctament les 79 anteriors.
  4. Abans de poder provar res, esperes 40 segons que acabi un procés de traducció.

Exercici 3: La pantalla de benvinguda de TascaFàcil

Escriu un programa Python fent servir només print que mostri exactament això per pantalla:

### TascaFacil ###
Estudi Alba
-----------------
Responsables: Marta / Luis / Nuria

Tasques pendents: per implementar

Fixa't en la línia en blanc abans de l'última línia: hi ha de ser.

Solucions

Solució 1.

Una versió prou precisa seria:

  1. Comprova si hi ha aigua al bullidor. Si no n'hi ha, omple el bullidor amb 250 ml d'aigua.
  2. Encén el bullidor.
  3. Espera fins que l'aigua arribi als 95 graus.
  4. Agafa una tassa buida i col·loca-la sobre l'encimera.
  5. Agafa una bosseta de te i deixa-la dins de la tassa.
  6. Aboca l'aigua del bullidor a la tassa fins a 1 cm per sota de la vora.
  7. Espera 3 minuts.
  8. Treu la bosseta de la tassa i llença-la a les escombraries.
  9. Apaga el bullidor.

Buits que un humà ompliria tot sol i que hem hagut d'explicitar:

  • La quantitat d'aigua i la temperatura. Un humà entén «aigua calenta»; una màquina necessita 250 ml i 95 graus.
  • El temps de repòs. «Deixa reposar» no és una instrucció: 3 minuts sí que ho és.
  • Que la tassa estigui buida i al seu lloc. Ningú no diria en veu alta «agafa una tassa buida», però la màquina en podria agafar una de plena.
  • Què fer amb la bosseta al final. Si no ho dius, es queda a dins.

Bonus: hi falta una comprovació. I si no queda cap bosseta de te? Un programa robust hauria de decidir què fer en aquest cas. Això s'anomena tractar els casos excepcionals i ho treballarem al mòdul 8.

Solució 2.

  1. Interpretat. No hi ha pas de traducció previ: l'intèrpret llegeix el codi i l'executa al moment.
  2. Compilat. S'ha generat un executable en codi màquina, independent del codi font, i és l'única cosa que es distribueix.
  3. Interpretat. L'error apareix en arribar a la línia 80, cosa que indica que les línies es van processant durant l'execució i no es van revisar totes abans.
  4. Compilat. Aquests 40 segons són el compilador traduint tot el programa abans que res s'executi.

Solució 3.

print("### TascaFacil ###")
print("Estudi Alba")
print("-----------------")
print("Responsables: Marta / Luis / Nuria")
print("")
print("Tasques pendents: per implementar")

Punts on se sol fallar:

  • Oblidar el print("") de la línia en blanc. Sense ell, les dues últimes línies surten enganxades.
  • Escriure print(### TascaFacil ###) sense cometes. Python intentaria interpretar aquests símbols com a codi i donaria error: tot text literal va entre cometes.
  • Fer servir sis línies de contingut però en un altre ordre. Recorda: s'executen de dalt a baix, exactament com estan escrites.

Conclusió

Programar és traduir una intenció humana a instruccions tan precises que una màquina obedient i ràpida, però que no entén res, les pugui executar. Aquest text precís és el codi font; el processador, en canvi, només entén codi màquina, i entre tots dos hi ha sempre un traductor: un compilador, que tradueix tot de cop abans d'executar, o un intèrpret, que va llegint i executant sobre la marxa, com fa Python.

Programem per tres raons: per automatitzar el que és repetitiu, per resoldre problemes obligant-nos a definir-los amb precisió i per escalar, pagant l'esforç una vegada i executant-lo moltes. Les tres es veuen en el cas que ens acompanyarà tot el curs: Estudi Alba perd notes de paper i necessita TascaFàcil, els sis requisits del qual ja tenim per escrit. I hem escrit el nostre primer programa real: uns quants print que dibuixen la pantalla de benvinguda.

Ara bé, res de tot això no va aparèixer de cop. Els llenguatges que avui ens permeten escriure print("Hola") en lloc de seqüències d'uns i zeros són el resultat de gairebé dos segles d'intents, fracassos i bones idees acumulades. A la lliçó següent, Història de la programació, recorrerem aquest camí: no com una llista de dates, sinó entenent quin problema concret va resoldre cada etapa i per què l'ofici és avui com és.

© Copyright 2026. Tots els drets reservats