[cfinformatica-grup] Python vs Java

  • From: Enric Mieza <emieza@xxxxxxxx>
  • To: "cfinformatica-grup@xxxxxxxxxxxxx" <cfinformatica-grup@xxxxxxxxxxxxx>
  • Date: Tue, 1 Apr 2014 18:25:06 +0200

Hola a totes!

fa un segle que vam deixar penjada la discussió de Python vs Java en el
context de POO per DAMP i DAW. Oju, que aquest email és llarg ':-)

Vaig al gra: *jo aposto per Python* inicialment. Impartiria Java al final
de curs, un cop han madurat els conceptes bàsics.

Si algú no ho té per mà podeu endinsar-vos amb aquest
article<http://www.cacauet.org/wiki/index.php/Python:_introducci%C3%B3_r%C3%A0pida>
.

Avantatges de PYTHON:

   1. És (molt) més simple
   2. Ocupa menys codi
   3. El codi és molt més llegible: The Zen Of
Python<http://legacy.python.org/dev/peps/pep-0020/>
   4. Quasi tot el què proves intuïtivament funciona
   5. Té tantes llibreries com Java (o al menys no he trobat a faltar res
   mai, des de web, json, etc fins a GUI, Qt, GTK, etc.)
   6. Té frameworks escalables i super potents com Pyramid, Django, etc.
   7. Es pot fer servir com a llenguatge de sistema (scripts, accés a OS,
   etc.)
   8. Educativament és més adequat per començar, ja que és més amigable pel
   neòfit
   9. El fan servir a la UPC com a llenguatge de programació a 1r (Java a
   2n)
   10. Cada cop està més de moda i es demana més
   11. Permet treballar sense objectes (a 1r de CFGS)
   12. Fer llistes i altres estructures complexes és més senzill, el que
   permet avançar molt més en el 1r curs i estalviar-te els punters
   13. Pots utilitzar punters, però pots oblidar-te d'ells al principi de
   l'aprenentatge
   14. Existeix l'herència múltiple


Desavantatges de Python:

   1. Tipatge dinàmic: molt pràctic però no és útil per explicar conceptes
   com polimorfisme. Tampoc em sembla important al principi de curs, ja tenen
   prou feina amb l'herència i els conceptes bàsics (classe, instància,
   estructures de dades).
   2. Es podria considerar "menys formal" pel tipatge dinàmic. Alguns
   podriem considerar això com un desavantatge educatiu (i m'incloc). A la
   pràctica no m'ho ha semblat.


Altres (ni avantatges ni desavantatges):

   - Tots els atributs i mètodes son publics, política "Adults allowed
   here". Hi ha la convenció d'utilitzar un _underscore abans de les funcions
   que considerem privades.


Avantatges JAVA:

   1. Molt estès i demanat encara per les empreses
   2. Estandarització de llibreries
   3. Llenguatge oficial d'Android (ja ha aparegut kivy i d'altres per
   Python per Android, tot i que encara ha de madurar)


Porto 2 cursos impartint els mòduls de DAW M3, M5 i M8 i ho he aplicat a
fons.

Sobre el tipatge dinàmic deixeu-me dir que tot i que als que hem après amb
tipus estàtics (és a dir, amb declaració de variables que no canvient de
tipus) ens pot semblar que no és bo per aprendre, la realitat és que el
resultat és estupendu. Sí que podria ajudar a fixar coses al principi el
tenir tipus estàtics, però a la pràctica no ha calgut.

Sobre el tema del polimorfisme, el paradigma és un altre. En Python un
objecte, si és verd i fa "croac", per a mi és una granota, independement de
si és fill d'una granota o no. Per tant, no hi ha polimorfisme, si vull
cridar a un mètode, miro si el té, i si el té el crido i punt. Es comenta
(i hi estic d'acord) que és més pràctic i àgil que un "enfoc formal"
d'herència estricta.

Punters, news, mallocs i demés és tema del passat. Avui en dia hem d'emprar
llenguatges d'alt nivell com Python, i no perdre el temps amb punters i
esborrar de memòria les coses, que per això està el Garbage Collector. Els
punters son obsolets com ho és un GOTO d'Assembler.

L'experiència docent per mi és clara: fins que no fem GUI (2n trimestre) no
maduren realment els conceptes bàsics (que son classe, instància, atributs
i mètodes). Quan han aclarit tot això i s'han cansat de programar llistes,
arrays i matrius de coses i cosetes compostes, llavors podem entrar en
polimorfisme, mètodes estàtics/atributs de classe i altres. Explicar
polimorfisme al principi només afegeix complicació innecessària. Sóc
contrari a explicar coses que no poden entendre. Sí que es fer pot (i és
necessari) a final de curs.

Aquest any hem començat a fer servir Python a 1r de DAW/ASIX, però no he
estat jo, així que ja us comentaré més endavant què diuen els professors i
alumnes.

Al 3r trimestre estic impartint amb Java ja que considero que:
a) estan madurs per entendre un llenguatge tan "verbose"
b) volem i cal fer programació Android

En fi, perdoneu tanta extensió ':-)

Espero que us sigui d'interés!

Salut,

Enric

Other related posts: