Tancàvem la lliçó anterior amb una constatació: la història no ens ha deixat un llenguatge de programació, sinó centenars, cadascun amb les obsessions de l'època i l'àmbit en què va néixer. Per a algú que comença, aquesta abundància és més un problema que un avantatge. Per on s'hi entra? Tant se val quin es triï primer? N'hi ha algun de «millor»?

Aquesta lliçó hi posa ordre. Aprendràs els quatre eixos amb què es classifica qualsevol llenguatge —nivell d'abstracció, forma d'execució, sistema de tipus i paradigma—, veuràs una comparativa pràctica dels llenguatges més utilitzats avui i en sortiràs amb criteris reals per triar-ne un davant d'un projecte concret. Acabarem justificant per què aquest curs fa servir Python, que no és una elecció òbvia ni l'única possible.

Un advertiment útil des del principi: no existeix el millor llenguatge, existeix el llenguatge adequat per a un context. Qui afirmi el contrari està venent alguna cosa, normalment la seva pròpia experiència disfressada de llei universal.

Contingut

  1. Nivells d'abstracció: màquina, assemblador i alt nivell
  2. Formes d'execució: compilat, interpretat i bytecode
  3. Sistemes de tipus: estàtic vs dinàmic, fort vs feble
  4. Paradigmes de programació
  5. Comparativa de llenguatges actuals
  6. Com triar un llenguatge: criteris pràctics
  7. Per què aquest curs fa servir Python
  8. Errors comuns i consells
  9. Exercicis
  10. Conclusió

  1. Nivells d'abstracció: màquina, assemblador i alt nivell

El primer eix mesura quanta màquina cal tenir al cap per escriure una línia de codi.

Nivell Què s'escriu Portable Exemple
Llenguatge màquina Binari que el processador executa directament No: lligat a un processador 10110000 01100001
Assemblador Noms curts per a instruccions del processador No: lligat a una família MOV AL, 61h
Alt nivell Idees properes al problema Sí, en general print("Hola")

Comparem la mateixa operació —sumar dos nombres i mostrar el resultat— als dos extrems. En assemblador (x86, simplificat):

mov eax, 12      ; carrega el valor 12 al registre EAX
add eax, 30      ; suma 30 a EAX; ara EAX val 42
mov [total], eax ; desa EAX a la posicio de memoria anomenada 'total'
; ...i encara falten ~15 linies per convertir el numero a text
;    i invocar el sistema operatiu per escriure'l a la pantalla

En Python:

total = 12 + 30
print(total)

Les diferències que importen:

  • Registres i memòria. En assemblador decideixes tu en quin registre va cada valor. En Python ni tan sols saps que existeixen els registres.
  • Volum de codi. El que en alt nivell són dues línies, en assemblador són vint.
  • Portabilitat. El codi Python funciona al Windows del Luis i al macOS de la Nuria sense tocar res. L'assemblador de dalt no funciona ni en un mòbil.

Hi ha un matís que convé tenir clar: el baix nivell no és «pitjor». L'assemblador i C es continuen fent servir on cal esprémer cada cicle o controlar el maquinari directament: nuclis de sistemes operatius, controladors de dispositiu, microcontroladors, videojocs exigents. Només és una eina cara: es paga en temps de desenvolupament i en probabilitat d'error.

Dins de l'«alt nivell» hi ha graus. C és d'alt nivell comparat amb l'assemblador, però molt proper a la màquina comparat amb Python. És més útil pensar en un gradient que en calaixos:

flowchart LR
    A["Llenguatge maquina"] --> B["Assemblador"] --> C["C"] --> D["Java / C#"] --> E["Python / JavaScript"] --> F["SQL"]
    A -.- G["Mes control<br/>sobre la maquina"]
    F -.- H["Mes a prop<br/>del problema"]

  1. Formes d'execució: compilat, interpretat i bytecode

A la primera lliçó vam veure la diferència entre compilar i interpretar. Ara completem el quadre amb el cas intermedi, que és el que fan servir Java, C# i —parcialment— el mateix Python.

Compilació anticipada. El compilador tradueix tot el codi font a codi màquina del sistema de destinació i produeix un executable. És el que fan C, C++, Rust i Go.

Interpretació. Un intèrpret llegeix el codi font i l'executa sobre la marxa. No hi ha executable: per llançar el programa cal l'intèrpret instal·lat.

Bytecode i màquina virtual. Un pas intermedi: el codi es compila a un format compacte anomenat bytecode, que no és codi màquina de cap processador real sinó d'una màquina virtual. Aquesta màquina virtual, que sí que existeix per a cada sistema, executa el bytecode. Així s'aconsegueix això de Java: es compila una vegada i el resultat funciona en qualsevol sistema que tingui la màquina virtual.

flowchart TD
    A["Codi font"] --> B["Compilacio anticipada<br/>C, C++, Rust, Go"]
    A --> C["Compilacio a bytecode<br/>Java, C#"]
    A --> D["Interpretacio<br/>Python, JavaScript, PHP"]
    B --> B1["Executable natiu<br/>(.exe, binari)"] --> Z["Processador"]
    C --> C1["Bytecode<br/>(.class)"] --> C2["Maquina virtual<br/>(JVM)"] --> Z
    D --> D1["L'interpret llegeix i executa"] --> Z
Aspecte Compilat Bytecode + VM Interpretat
Què es distribueix Executable natiu Bytecode + requereix VM Codi font + requereix intèrpret
Portabilitat Baixa: un per sistema Alta Alta
Velocitat típica Molt alta Alta Mitjana
Cicle escriure-provar Lent (recompilar) Mitjà Ràpid
Errors de sintaxi Detectats abans d'executar Detectats abans d'executar En arribar a la línia

Un detall sobre Python que sol confondre: Python també compila a bytecode, de manera automàtica i transparent (són aquests fitxers .pyc que apareixen en una carpeta __pycache__). La diferència amb Java és que en Python passa en el moment d'executar, sense un pas explícit, i per això a efectes pràctics es comporta com un llenguatge interpretat. Les fronteres són més borroses del que suggereixen les etiquetes.

  1. Sistemes de tipus: estàtic vs dinàmic, fort vs feble

El tipus d'una dada és la mena de valor que és: un nombre enter, un text, un valor de veritat. Els llenguatges es diferencien en quan comproven els tipus i en quant es prenen seriosament aquesta comprovació. Són dos eixos independents que es confonen constantment.

Estàtic vs dinàmic: quan es comprova

En un llenguatge de tipatge estàtic, cada variable té un tipus declarat o deduït en el moment de compilar, i no canvia. Els errors de tipus es detecten abans d'executar.

// Java: tipatge estatic
int quantitatTasques = 5;
quantitatTasques = "moltes";  // ERROR en compilacio: no compila

En un llenguatge de tipatge dinàmic, el tipus va associat al valor, no a la variable, i es comprova durant l'execució.

# Python: tipatge dinamic
quantitat_tasques = 5
quantitat_tasques = "moltes"   # Perfectament valid: ara es un text

En Python la segona línia no dóna cap error: la variable simplement passa a referir-se a una altra cosa. La comoditat té preu: un error de tipus no es descobreix fins que la línia afectada s'executa, que pot ser en producció, un dimarts, amb un client al davant.

Fort vs feble: quant es respecta el tipus

Aquest eix mesura si el llenguatge converteix tipus pel seu compte quan l'operació no encaixa.

# Python: tipatge fort
print("Tasques: " + 5)
# TypeError: can only concatenate str (not "int") to str

Python s'hi nega: sumar un text i un nombre no significa res, així que dóna error i t'obliga a decidir. La forma correcta seria print("Tasques: " + str(5)).

// JavaScript: tipatge feble
console.log("Tasques: " + 5);  // "Tasques: 5"  -> converteix el numero a text
console.log("5" - 2);          // 3             -> ara converteix el text a numero
console.log("5" + 2);          // "52"          -> i aqui torna a convertir al reves

JavaScript sempre troba la manera que l'operació signifiqui alguna cosa. És còmode fins que produeix resultats absurds que ningú no detecta.

Els quatre quadrants

Tipatge fort Tipatge feble
Estàtic Java, C#, Rust, Go C
Dinàmic Python, Ruby JavaScript, PHP

I el resum d'avantatges i inconvenients, que és el que de debò es fa servir en triar:

Tipatge estàtic Tipatge dinàmic
Errors detectats Abans d'executar En executar
Verbositat Més gran: cal declarar tipus Més petita
Velocitat d'escriptura Menor Major
Ajuda de l'editor Excel·lent (sap els tipus) Limitada
Idoni per a Sistemes grans i equips nombrosos Prototips, scripts, aprenentatge

Un apunt per al futur: Python permet des de fa anys anotar tipus de manera opcional (quantitat: int = 5). No els comprova en executar, però ajuden l'editor i les eines d'anàlisi. És un exemple de com els llenguatges es copien les bones idees entre si; no ho farem servir en aquest curs, però convé saber que existeix.

  1. Paradigmes de programació

Un paradigma és una manera d'organitzar el pensament sobre el programa: què es considera la peça bàsica i com es combinen les peces. Vegem els quatre principals amb un fragment mínim de cadascun. Tots resolen la mateixa tasca: obtenir les tasques de prioritat alta d'Estudi Alba.

Imperatiu i estructurat

Es descriu pas a pas com arribar al resultat, amb seqüències, condicions i bucles. És el paradigma amb què es comença sempre i el que domina els mòduls 2 a 5 d'aquest curs.

# Imperatiu: descrivim el procediment
tasques = ["Logo Sole (alta)", "Cartell fira (baixa)", "Web Nuria (alta)"]
urgents = []
for tasca in tasques:          # recorre una a una
    if "(alta)" in tasca:      # si compleix la condicio...
        urgents.append(tasca)  # ...l'afegeix a la llista de resultat

Orientat a objectes

La peça bàsica és l'objecte: un paquet que conté dades i les operacions que hi actuen. Es modela el món com a entitats que col·laboren.

# Orientat a objectes: la tasca sap coses sobre si mateixa
class Tasca:
    def __init__(self, titol, responsable, prioritat):
        self.titol = titol
        self.responsable = responsable
        self.prioritat = prioritat

    def es_urgent(self):
        return self.prioritat == "alta"

t = Tasca("Logo Sole", "Luis", "alta")
print(t.es_urgent())   # True

L'estudiarem a fons al mòdul 7. De moment n'hi ha prou amb quedar-se amb la idea: les dades i el seu comportament viatgen junts.

Funcional

La peça bàsica és la funció, entesa en sentit matemàtic: rep dades i retorna un resultat, sense modificar res extern. S'evita canviar l'estat i es afavoreix compondre funcions.

# Funcional: descrivim la transformacio, no el procediment
tasques = ["Logo Sole (alta)", "Cartell fira (baixa)", "Web Nuria (alta)"]
urgents = list(filter(lambda t: "(alta)" in t, tasques))

No hi ha bucle ni llista que es va omplint: es declara què es vol («les que compleixen aquesta condició») i la maquinària del llenguatge s'encarrega del com. Ho veurem a Funcions com a valors.

Declaratiu: el cas de SQL

Es descriu què es vol obtenir, sense dir en absolut com obtenir-ho. El cas més conegut és SQL, el llenguatge de les bases de dades.

SELECT titol, responsable
FROM tasques
WHERE prioritat = 'alta' AND estat = 'pendent'
ORDER BY responsable;

Enlloc no es diu com recórrer les dades ni en quin ordre: això ho decideix el gestor de la base de dades. És l'abstracció portada a l'extrem, i funciona molt bé en dominis acotats.

Paradigma Peça bàsica Pregunta que respon Exemple de llenguatge
Imperatiu/estructurat La instrucció Quins passos cal fer? C, Python
Orientat a objectes L'objecte Quines entitats hi ha i què fan? Java, C++, Python
Funcional La funció Quina transformació aplico? Haskell, Scala, Python
Declaratiu La descripció del resultat Què vull obtenir? SQL, HTML

Fixa't que Python apareix en tres files. La majoria de llenguatges moderns són multiparadigma: no t'obliguen a triar, i en un mateix programa conviuen un bucle imperatiu, una classe i una funció lambda. Aquesta és una altra raó per la qual Python funciona bé com a primer llenguatge: permet recórrer els tres estils sense canviar d'eina.

  1. Comparativa de llenguatges actuals

Llenguatge Tipatge Execució Usos típics Corba d'aprenentatge
Python Dinàmic, fort Interpretat (bytecode intern) Ciència de dades, IA, automatització, web backend, scripting Suau
JavaScript Dinàmic, feble Interpretat (JIT al navegador) Web frontend, backend amb Node.js, apps mòbils híbrides Mitjana (el llenguatge és fàcil; l'ecosistema, no)
Java Estàtic, fort Bytecode + màquina virtual Programari empresarial, Android, sistemes de gran mida Mitjana-alta (molta cerimònia inicial)
C Estàtic, feble Compilat a natiu Sistemes operatius, controladors, sistemes encastats Alta (memòria manual, punters)
C# Estàtic, fort Bytecode + CLR Aplicacions Windows, videojocs amb Unity, backend empresarial Mitjana
SQL — (declaratiu) Interpretat pel gestor Consulta i manipulació de bases de dades Suau per al bàsic, alta per a l'avançat
Go Estàtic, fort Compilat a natiu Serveis al núvol, eines de xarxa, contenidors Mitjana-suau (llenguatge deliberadament petit)
Rust Estàtic, fort Compilat a natiu Sistemes crítics, rendiment amb seguretat de memòria Molt alta
PHP Dinàmic, feble Interpretat Webs de servidor, WordPress, comerç electrònic Suau

Algunes lectures que convé fer sobre aquesta taula:

  • La corba d'aprenentatge no mesura la potència. Rust és dificilíssim perquè t'obliga a demostrar al compilador que la teva gestió de memòria és correcta. Això no el fa millor per escriure un gestor de tasques de tres persones.
  • Els llenguatges se solapen. Python, Java, C# i Go poden escriure tots el backend d'una aplicació web. L'elecció depèn més del context que de les capacitats.
  • SQL no competeix amb els altres. És un llenguatge especialitzat que es fa servir des dels altres: un programa Python que consulta una base de dades conté SQL a dins. Sabràs Python i sabràs SQL, no l'un o l'altre.

  1. Com triar un llenguatge: criteris pràctics

Quan algú pregunta «quin llenguatge faig servir?» sense dir per a què, la pregunta no té resposta. Aquests són els quatre criteris que sí que la donen.

1. El domini del problema. És, amb diferència, el criteri més determinant. Hi ha àmbits on la decisió està pràcticament presa per endavant:

Si el problema és... El natural és... Perquè...
Interactivitat en una pàgina web JavaScript És l'únic que executen els navegadors
Anàlisi de dades o machine learning Python Allà hi ha pandas, NumPy, scikit-learn, PyTorch
App nativa d'iPhone Swift És l'ecosistema oficial d'Apple
App nativa d'Android Kotlin És l'ecosistema oficial de Google
Nucli d'un sistema operatiu C o Rust Requereixen control directe de memòria i maquinari
Consultar una base de dades SQL És el llenguatge del gestor

2. L'ecosistema. Un llenguatge sense biblioteques és un llenguatge sense utilitat pràctica. Abans de triar, pregunta't si hi ha biblioteques madures per al que necessites, documentació abundant, respostes als problemes típics i gent que el mantingui. Un llenguatge elegant amb ecosistema pobre t'obligarà a reescriure coses que en un altre lloc són una línia.

3. L'equip. El millor llenguatge per a un projecte sol ser el que ja sap la gent que l'ha de mantenir. Introduir un llenguatge nou costa mesos de productivitat i crea una dependència perillosa: si l'única persona que el domina se'n va, el projecte queda orfe. Aquest criteri, poc glamurós, decideix moltíssims projectes reals.

4. El rendiment i les restriccions tècniques. Importa menys del que la gent es pensa, però quan importa és innegociable. Si has de processar milions d'operacions per segon, o executar en un microcontrolador amb 16 KB de memòria, o garantir un temps de resposta màxim, la llista de candidats es redueix sola.

flowchart TD
    A["Tinc un problema"] --> B{"El domini imposa<br/>un llenguatge?"}
    B -->|Si| C["Fes-lo servir:<br/>navegador, iOS, BBDD..."]
    B -->|No| D{"Hi ha restriccions dures<br/>de rendiment o maquinari?"}
    D -->|Si| E["Llenguatge compilat:<br/>C, C++, Rust, Go"]
    D -->|No| F{"L'equip ja domina<br/>algun llenguatge adequat?"}
    F -->|Si| G["Fes servir aquest"]
    F -->|No| H["Tria per ecosistema<br/>i facilitat d'aprenentatge"]

Un consell que estalvia discussions: el segon llenguatge costa molt menys que el primer. Els conceptes d'aquest curs —variables, condicionals, bucles, funcions, estructures de dades, objectes— són els mateixos en gairebé tots. Canvia la sintaxi, que és el barat. Aprendre'n bé un val més que picotejar en cinc.

  1. Per què aquest curs fa servir Python

Amb tot l'anterior sobre la taula, l'elecció de Python per aprendre a programar deixa de ser una moda i passa a ser una decisió defensable:

  • Sintaxi mínima. print("Hola") és un programa complet: no cal declarar una classe, ni un mètode principal, ni importar res. Comparat amb les sis línies que exigeix Java per al mateix, l'alumne gasta la seva atenció en el concepte i no en la cerimònia.
  • Cicle escriure-provar molt curt. En ser interpretat, entre escriure una línia i veure'n el resultat hi ha dos segons. Aprendre és provar moltes vegades, i cada segon d'espera desincentiva provar.
  • Llegibilitat per disseny. La indentació obligatòria força un codi ordenat des del primer dia. Un programa Python ben escrit es llegeix gairebé com a pseudocodi, cosa que ajuda molt quan encara estàs traduint entre idea i codi.
  • Multiparadigma. Permet recórrer l'imperatiu (mòduls 2-3), el funcional (mòdul 4) i l'orientació a objectes (mòdul 7) sense canviar de llenguatge ni d'eines.
  • Utilitat real immediata. No és un llenguatge «de joguina» per a classe. És una de les eines més demandades del mercat en automatització, dades i IA. El que aprenguis aquí serveix a fora.
  • Ecosistema i comunitat enormes. Gairebé qualsevol dubte que tinguis ja l'ha tingut algú i està respost per escrit.

També és honest dir què no és el millor de Python: no és el llenguatge més ràpid en execució, el seu tipatge dinàmic deixa passar a producció errors que un llenguatge estàtic detectaria abans, i gestionar dependències entre projectes exigeix disciplina (per això existeixen els entorns virtuals que veurem a la propera lliçó). Per a TascaFàcil —un programa petit, per a tres persones, que ha d'estar en marxa aviat— cap d'aquestes pegues no és rellevant. Aquest raonament, i no la llista de virtuts, és la manera correcta de triar un llenguatge.

Errors Comuns i Consells

Buscar «el millor llenguatge». No existeix. Existeix el millor llenguatge per a aquest problema, aquest equip i aquest termini. Les discussions sobre superioritat absoluta consumeixen molt de temps i no produeixen res.

Confondre tipatge dinàmic amb «sense tipus». Python té tipus, i molt estrictes: per això "Tasques: " + 5 falla. El que és dinàmic és quan es comproven, no que no existeixin.

Creure que interpretat significa lent i punt. Per al 95 % dels programes, la velocitat del llenguatge és irrellevant davant del temps de xarxa, de disc o del mateix usuari. Optimitzar el llenguatge abans de saber on és el coll d'ampolla és temps perdut; ho veurem a Eficiència i notació Big-O.

Saltar de llenguatge cada poques setmanes. És l'error més car de qui comença: s'acumulen cinc introduccions i cap programa acabat. Acaba aquest curs amb Python; el segon llenguatge et costarà una fracció de l'esforç.

Pensar que aprendre Python és aprendre a programar. El que estàs aprenent són conceptes —descompondre problemes, controlar el flux, estructurar dades— que sobreviuen al llenguatge. Python és el vehicle, no la destinació.

Consell: quan llegeixis codi d'un llenguatge que no coneixes, no intentis entendre cada símbol. Busca primer les tres estructures de la programació estructurada —seqüència, condició, repetició— i les funcions. Amb això reconeixeràs la lògica de gairebé qualsevol codi, encara que la sintaxi et resulti aliena.

Exercicis

Exercici 1: Classificar llenguatges

Per a cada llenguatge, indica: (a) si el seu tipatge és estàtic o dinàmic, (b) si és fort o feble, (c) la seva forma d'execució habitual, i (d) un ús típic.

  1. Python
  2. Java
  3. JavaScript
  4. C

Exercici 2: Triar llenguatge amb criteri

Per a cada escenari, proposa un llenguatge i justifica l'elecció amb almenys dos dels quatre criteris de l'apartat 6 (domini, ecosistema, equip, rendiment):

  1. Estudi Alba vol que el web que ensenya als clients tingui un formulari que validi les dades sense recarregar la pàgina.
  2. Una empresa necessita el microprogramari d'un sensor amb 32 KB de memòria que ha de respondre en menys d'un mil·lisegon.
  3. La Marta vol un informe mensual que llegeixi un fitxer de vendes i calculi mitjanes i gràfics. A l'estudi ningú no programa, però la Nuria va fer un curs de Python.
  4. Un banc ha de mantenir un sistema de 400.000 línies escrit en Java fa quinze anys, amb un equip de dotze persones que el coneixen.

Exercici 3: Identificar el paradigma

Indica a quin paradigma correspon cada fragment i explica en què t'has fixat:

# A
total = 0
for t in tasques:
    if t["estat"] == "pendent":
        total = total + 1
-- B
SELECT COUNT(*) FROM tasques WHERE estat = 'pendent';
# C
pendents = len(list(filter(lambda t: t["estat"] == "pendent", tasques)))
# D
class GestorTasques:
    def comptar_pendents(self):
        return len([t for t in self.tasques if t.estat == "pendent"])

Solucions

Solució 1.

Llenguatge Tipatge (quan) Tipatge (quant) Execució Ús típic
Python Dinàmic Fort Interpretat (amb bytecode intern) Dades, IA, automatització
Java Estàtic Fort Bytecode + màquina virtual Programari empresarial, Android
JavaScript Dinàmic Feble Interpretat al navegador Web frontend
C Estàtic Feble Compilat a natiu Sistemes operatius, encastats

El cas de C sorprèn molta gent: és estàtic però feble, perquè permet conversions implícites entre tipus numèrics i punters que poden produir resultats sense sentit sense que el compilador es queixi.

Solució 2.

  1. JavaScript. Domini: és l'únic llenguatge que executen els navegadors, així que validar sense recarregar la pàgina ho imposa. Ecosistema: hi ha biblioteques madures de validació de formularis a punt per fer servir.
  2. C, o Rust si l'equip el domina. Rendiment i restriccions: amb 32 KB no hi cap un intèrpret de Python ni una màquina virtual, i el temps de resposta garantit exigeix control del maquinari. Domini: els sistemes encastats són territori històric de C, amb compiladors per a pràcticament qualsevol microcontrolador.
  3. Python. Equip: la Nuria ja té una base, i en un estudi de tres persones això pesa molt més que qualsevol avantatge tècnic. Ecosistema: pandas i matplotlib resolen lectura de dades, càlculs i gràfics gairebé sense codi propi.
  4. Java. Equip: dotze persones coneixen el sistema; reescriure'l en un altre llenguatge destruiria quinze anys de coneixement acumulat i de casos límit ja resolts. Ecosistema: l'entorn al voltant d'aquestes 400.000 línies (biblioteques, servidors, eines) ja està muntat i provat. La resposta «ho reescrivim en alguna cosa moderna» és gairebé sempre l'equivocada.

Solució 3.

  • A: imperatiu/estructurat. Es descriu el procediment pas a pas: una variable acumuladora, un bucle que recorre elements i una condició. Es diu com comptar.
  • B: declaratiu. Es descriu el resultat desitjat sense indicar cap recorregut ni ordre. El gestor de la base de dades decideix com obtenir-lo.
  • C: funcional. S'aplica una transformació (filter) amb una funció anònima (lambda) i es compon el resultat, sense variables que es van modificant ni bucle explícit.
  • D: orientat a objectes. El codi viu dins d'una classe i opera sobre les dades del mateix objecte (self.tasques); les dades i el comportament estan empaquetats junts. Fixa't que a dins fa servir una construcció d'estil funcional: els paradigmes es barregen amb tota naturalitat.

Conclusió

Els llenguatges de programació es classifiquen per quatre eixos que ara saps llegir: el seu nivell d'abstracció (de la màquina al problema), la seva forma d'execució (compilat, bytecode sobre màquina virtual o interpretat), el seu sistema de tipus (estàtic o dinàmic, fort o feble) i el seu paradigma (imperatiu, orientat a objectes, funcional o declaratiu). Cap eix no estableix superioritat: estableix compromisos. I triar és qüestió de quatre criteris —domini, ecosistema, equip i rendiment— aplicats a un context concret, no de preferències personals.

Amb aquests criteris hem justificat Python per a aquest curs i per a TascaFàcil: sintaxi mínima, cicle de prova curt, llegibilitat forçada per disseny, multiparadigma i amb una utilitat professional real més enllà de l'aula. Els seus inconvenients existeixen, però cap no afecta un programa petit per a un estudi de tres persones.

Ja sabem què és programar, d'on ve l'ofici i amb què ho farem. Falta el més terrenal: muntar el lloc de treball. A la lliçó següent, Entorns de desenvolupament, instal·larem Python en Windows, macOS o Linux, comprovarem que funciona, aprendrem la diferència entre l'intèrpret interactiu i executar un fitxer, triarem editor, organitzarem les carpetes del projecte i crearem per fi tascafacil.py, el fitxer que ens acompanyarà la resta del curs.

© Copyright 2026. Tots els drets reservats