[cfinformatica-grup] Re: Python vs Java

  • From: Enric Mieza <emieza@xxxxxxxx>
  • To: "cfinformatica-grup@xxxxxxxxxxxxx" <cfinformatica-grup@xxxxxxxxxxxxx>
  • Date: Thu, 3 Apr 2014 00:32:13 +0200

Jo no crec que es tracti de gustos, que fem informàtica i no literatura ;P
Hem de clarificar criteris i després que cadascú decideixi en conseqüència.

Jo resumiria els criteris en 3 grans grups:

1- Criteris pedagògics: quin llenguatge és millor per explicar què.
2- Criteris de mercat: què ens demanen les empreses.
3- Experiència del profe: sol ser millor explicar el què conèixes millor.

El punt 3 ve a ser el punt dels "gustos" personals. És important ja que no
crec que sigui positiu forçar-nos a explicar coses que no acabem de
dominar, i de vegades no arribem a tot (sobretot quan fem substitucions, ja
sabeu). Però en el nostre sector més que els altres o et renoves o et
tornes un dinosauri, i els nanos se n'adonen. I què carai, que per això ens
paguen.

Vamos, que de tant en tant (millor dit: tot sovint) ens toca aprendre coses
noves, i d'aquí el debat: *cap a on reciclar-nos*?

Personalment sempre havia programat en C/C++ i PHP (punt 3), i el Python
m'ha vingut fa poquet (2 anys). Em resultaria molt més "natural" el Java.
Però crec que el Python té molts més avantatges (punt 1). I tot i així haig
d'impartir Java si vull explicar programació en Android (punt 2). O sigui,
que... jo què sé! :D

Com que crec en la biodiversitat també crec que deu ser bo que fem coses
diferents en cada centre (em sembla impràctic explicar tants llenguatges
als alumnes).
I també està bé que filosofem i ho compartim com estem fent :)

Enric



2014-04-02 19:12 GMT+02:00 J. Moreno <jmorep@xxxxxxxxx>:

> Hola,
>
> Aquest debat s'està posant molt interessant.
>
> Ja que jo he proposat parlar de com orientar la programació de primer,
> suposo que m'hauré de mullar una mica.
>
> Tenint en compte els conceptes i procediments que necessitem com a
> preparació per a la POO, aquí van algunes idees sobre continguts i
> metodologia que estem discutint al nostre centre.
>
> Començar el més aviat possible amb la programació modular i treballar la
> descomposició funcional dels problemes. Això implica treballar el pas de
> paràmetres a funcions i dominar els conceptes d'àmbit, visibilitat i temps
> de vida de les variables. El llenguatge utilitzat hauria de permetre
> distingir amb claredat l'emmagatzematge automàtic (governat pel controlador
> en funció de la ubicació de la declaració de les dades) i el dinàmic
> (controlat pel programador que decideix crear i destruir objectes). Aquest
> fil conductor hauria de guiar la major part del curs.
>
> Un dels problemes conceptuals que troben els meus alumnes amb la POO és la
> distinció entre l'àmbit i el temps de vida de les variables referència (les
> que apunten als objectes i que tenen emmagatzematge automàtic) i els
> corresponents als propis objectes als quals apunten (que tenen
> emmagatzematge dinàmic). Crec que cal treballar més els temes de punters a
> estructures de dades (arrays, structs, registres i altres, segons el
> llenguatge) per entendre la POO i les variables dinàmiques.
>
> En canvi, no trobo necessari treballar l'emmagatzematge estàtic ni les
> variables globals.
>
> Pel que fa a les estructures de control, crec que s'han de treballar
> dintre de contextos significatius (fer recorreguts de col·leccions de
> dades, o cerques, ..., presa de decisions) i barrejades amb la definició i
> ús de funcions. No veig que sigui convenient fer una separació clara entre
> la programació estructurada i la modular.
>
> També soc de l'opinió que l'objectiu final és que el disseny que l'alumnat
> faci de les aplicacions sigui el més independent possible del llenguatge i
> estigui orientat a la prova, de manera que puguin programar en el seu futur
> professional en qualsevol llenguatge amb els mateixos patrons de disseny
> bàsics. Coincideixo completament amb l'opinió del Moisés sobre la
> legibilitat del codi.
>
> Per últim, crec que és un gran valor pedagògic disposar de jocs de prova
> dels programes abans de codificar-los, així com demanar a l'alumnat que
> faci prototips d'aplicació que permetin provar les funcionalitats demanades
> amb orientació al client.
>
> No entro a discutir els temes de POO.
>
> Salutacions cordials i disculpeu pel 'rotllo'.
>
> José
>
>
>
> 2014-04-02 12:15 GMT+02:00 Julio Amorós <
> jamoros@xxxxxxxxxxxxxxxxxxxxxxxxxxx>:
>
> Hola,
>> debat i aportacions molt interessants.
>> La veritat és que no puc decantar-me amb objectivitat per un dels dos, ja
>> que he utilitzat Java molts anys i en canvi Python molt poc.
>> Això sí, crec que efectivament, partim dels nostres gustos i del
>> llenguatge que més hem fet servir.
>> Una altra de les idees que gairebé tothom té, ja que s'ha après així, és
>> que el llenguatge fàcil és l'imperatiu o estructurat i el difícil és
>> l'orientat a objectes.
>> Entenc que Python està a la frontera dels dos models i es fa difícil
>> col·locar-lo 100% a una de les dues bandes. Però estic suposant que
>> introdueixo la programació amb Python sense fer servir el paradigma POO.
>>
>> Fa ja bastants anys vaig fer servir l'entorn i el llibre de 
>> blueJ<http://www.bluej.org/about.html>per introduir la programació orientada 
>> a objectes com a primer llenguatge i
>> els resultats no van ser ni millors ni pitjors. Això sí, tota aquesta
>> comunitat defensava que és igual de fàcil aprendre a programar amb POO que
>> començar amb altres paradigmes. Fins i tot deien que si no estaves
>> "contaminat" per altres models de programació encara era més fàcil, ja que
>> argumentaven que la realitat que ens envolta està representada per objectes.
>> En qualsevol cas, com be deia Carles, al nostre centre a ASIX fem servir
>> Python i els resultats sembla que són molt bons.
>>
>> Respecte a la gestió de memòria que es feia referència al primer email,
>> potser no he entès be el text, però el llenguatge que necessita que
>> gestionem la memòria, alliberant-la quan calgui, és C/C++ i no Java, que té
>> el seu propi garbage collector que crida automàgicament per evitar
>> precisament el problema. De la mateixa manera que les referències que
>> utilitza Java per apuntar a un objecte simplifica el concepte de punter de
>> C (menys potència per més simplicitat).
>>
>> Diuen alguns que Java va néixer (internet a banda) amb l'objectiu de
>> simplificar el llenguatge C++. I diuen altres que la van "cagar" quan van
>> començar a afegir coses poc digeribles com els tipus genèrics allà per la
>> versió 1.5
>> (Segur que va ser algun matemàtic algebrista de la punyeta ;D)
>>
>> Potser Python és a Java el que en el seu moment va suposar Java a C++.
>>
>> Vagi bé.
>>
>> Julio
>>
>> P.D: Per cert, mai he trobat a enlloc com es diu "el paradigma oposat a
>> la programació orientada a obejectes". Sempre em surt una barreja ...
>>
>>
>>
>> El dia 1 abril de 2014 23.37, Moisès Gómez <iesmoises@xxxxxxxxx> ha
>> escrit:
>>
>> 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
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>>
>> --
>> Un professor català  té la mensualitat número 13 de 17 autonomies. "La
>> culpa és de Madrid" Artur Mas dixit.
>> Un president català té la mensualitat número 1 de 17 autonomies. Un 50 %
>> més que la segona. "La culpa és de l'IPC" dita popular, convergent,
>> socialista ...
>>
>
>

Other related posts: