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