[cfinformatica-grup] Re: Python vs Java

  • From: Daniel Herrera <dherrera@xxxxxxxx>
  • To: "cfinformatica-grup@xxxxxxxxxxxxx" <cfinformatica-grup@xxxxxxxxxxxxx>
  • Date: Thu, 3 Apr 2014 08:47:38 +0200

Hola,

m'heu fet recordar aquesta pregunta de l'stackoverflow:

http://stackoverflow.com/questions/9461864/data-structure-class-in-college


salut,
daniel herrera
*"9 de cada 10 exercicis enquestats prefereixen ser publicats a Exercicis
FP <http://uf.ctrl-alt-d.net/> i escapar del Moodle ;)"*



El dia 3 abril de 2014 0.32, Enric Mieza <emieza@xxxxxxxx> ha escrit:

> 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: