[cfinformatica-grup] Re: Python vs Java

  • From: Moisès Gómez <iesmoises@xxxxxxxxx>
  • To: "cfinformatica-grup@xxxxxxxxxxxxx" <cfinformatica-grup@xxxxxxxxxxxxx>
  • Date: Tue, 1 Apr 2014 23:37:43 +0200

Muy bonito José, llences el repte però no et mulles ;P

Apa, ara seriosament, sobre la concreció d'objectius de programació que
proposa José, i acceptant que pot ser un tema encara més polèmic que
l'elecció del llenguatge, em pronunciaré en termes molt generals i
segurament després de fer "envia" me n'adonaré que en falten coses:

*A primer*: els alumnes han d'aprendre a resoldre problemes algorísmics amb
els elements fonamentals de la programació (dades, expressions,
assignació/ES, control de flux i modulació) més l'habilitat de l'anàlisi
descendent i alguns hàbits bàsics com ara la generació de codi llegible,
fer-se seva la responsabilitat de resoldre el problema, tenir confiança en
les seves capacitats de resolució, etc.

El llenguatge de programació bàsicament hauria de no destorbar i, si a
sobre té sortida al mercat, encara que no és l'objectiu principal, doncs
*miel-sobre-hojuelas*. Vaig fer un MOOC que treballaven amb
Racket<http://racket-lang.org/>,
un llenguatge funcional dissenyat per l'aprenentatge sistemàtic dels
conceptes de programació sense destorb. No té, fins on jo sé, cap sortida
al mercat. Aquí, sense dubtar-ho, escolliria *Python* amb codi no massa
*pythonic* (qui programeu amb Python ja m'enteneu). Reptaria a qui proposi
un altre llenguatge a resoldre un problema en tots dos llenguatges i veure
quin és més fàcil d'entendre per a un alumne de primer.

*A segon*: els alumnes han d'aprendre a desenvolupar amb eines actuals que
els permetin sortir al mercat, trobar feina i començar a produir des del
dia 1 (és FP i no universitat). Idealment haurien de saber-se manegar amb
més d'un llenguatge. Encara que la diversificació redueixi la profunditat,
els oferirà més perspectiva i els farà una mica més resistents als "canvis
de moda" tecnològics.

Per tot plegat, i amb la situació actual (mireu per exemple l'índex
tiobe<http://www.tiobe.com>),
considero que els DAW haurien de sortir *havent programat* aplicacions en
Java, Javascript, PHP i... Ruby. Per DAM probablement Java (o/i C#?) i
Objective-C.

Ja dieu


El dia 1 abril de 2014 21.18, J. Moreno <jmorep@xxxxxxxxx> ha escrit:

> Podria ser que juguin millor per l'àrbitre ;-)
>
> Bromes a part, no vull generar polèmica ni molestar ningú. Només mirava de
> traslladar el debat una mica a un altre terreny, si us sembla interessant.
>
> Acabo de veure el missatge del Carles i penso, com ell, que a ASIX resulta
> de molta utilitat Python, segurament més que Java.
>
> Salutacions.
>
>
> 2014-04-01 21:09 GMT+02:00 Moisès Gómez <iesmoises@xxxxxxxxx>:
>
> Tot i estant d'acord amb la proposta del teu missatge, voldria insistir en
>> que jo proposo Java FC a segon malgrat prefereixo molt més com juguen els
>> Python United :P
>>
>>
>> El dia 1 abril de 2014 20.18, J. Moreno <jmorep@xxxxxxxxx> ha escrit:
>>
>> Aquest fil té tota la pinta de convertir-se en una defensa del que agrada
>>> a cadascú. En temes de llenguatges de programació, molt em temo que passa
>>> com amb la política o el futbol. Si ets d'un equip o partit, la resta no
>>> importa gaire ;-/
>>>
>>> Personalment, trobaria més interessant discutir sobre la concreció dels
>>> conceptes i procediments que creiem que cal treballar i assolir amb
>>> l'alumnat i després valorar per a cada un d'ells si un o altre llenguatge
>>> s'adiu més perquè l'alumnat aprengui el concepte o el procediment.
>>>
>>> Els arguments de l'Enric són molt interessants, tot i que parteixen
>>> d'una elecció prèvia. Si es tracta d'escollir un llenguatge com a eina per
>>> treballar els conceptes i procediments de la programació de les tres
>>> primeres UF del mòdul M03 (que crec que és el que es planteja), hi ha
>>> alguns comentaris que em semblen molt interessants, sobretot els que fan
>>> referència a l'ús de variables, tipus, classe d'emmagatzemament en memòria,
>>> etc. El fet que estigui de moda o l'utilitzin a la UPC no em semblen tan
>>> rellevants.
>>>
>>> No sé si entra el tema en aquest fil, però trobo més interessant
>>> centrar-se en què volem aconseguir i no en les eines. Segurament
>>> descobrirem que tenim també idees bastant diferents sobre què és més
>>> important treballar ala programació de primer. :) i segur que seria
>>> enriquidor posar-les en comú.
>>>
>>> Salutacions.
>>>
>>> José Moreno
>>>
>>>
>>> 2014-04-01 20:03 GMT+02:00 Moisès Gómez <iesmoises@xxxxxxxxx>:
>>>
>>> Moltes gràcies Enric!
>>>>
>>>> Vaig introduir Python a DFSI (un crèdit de segon de l'antic ASI) i
>>>> l'experiència va ser brutal. Alguns alumnes van reconèixer que gràcies al
>>>> Python havien per fi entés de què anava la programació. Entre ells, uns
>>>> quants van aconseguir aprovar la programació de primer!
>>>>
>>>> El curs passat vaig voler repetir amb programació de primer d'ASIX amb
>>>> la idea de que un administrador de sistemes l'aprofitaria molt més que el
>>>> C. Amb tot, discutint amb el company que fa el crèdit equivalent a DAW, em
>>>> va "convèncer" de que calia C perquè després els seria més fàcil entendre
>>>> altres llenguatges de notació "heretada" com ara el Java. Així que vaig
>>>> intentar tots dos llenguatges i com que allò va ser massa per un
>>>> percentatge important d'alumnes... vaig sacrificar Python. Crec que va ser
>>>> un error i no el tornaré a cometre a menys que al centre m'obliguin
>>>> d'alguna manera.
>>>>
>>>> En resum, la meva opinió al respecte és:
>>>>
>>>> * Python és el llenguatge ideal per primer
>>>>
>>>> * Amb les idees realment clares des de primer (sospita fonamentada en
>>>> els pocs que passen així a segon), no té tanta importància quins
>>>> llenguatges facin servir a segon. Penso que Java és una bona opció al M03
>>>> per la seva demanda al mercat i perquè els conceptes POO estan molt
>>>> documentats a llibres que per mi són de referència (ex. "Refactoring" del
>>>> Fowler o "Clean Code" de l'Uncle Bob).
>>>>
>>>> Dit això, si haig d'expressar la meva preferència personal, jo faria
>>>> Python a primer i a segon, simplement perquè m'encanta :)
>>>>
>>>> salut
>>>>
>>>>
>>>> El dia 1 abril de 2014 18.25, Enric Mieza <emieza@xxxxxxxx> ha escrit:
>>>>
>>>> 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: