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