2010/2/8 Medardo Rodriguez (Merchise Group) <med....@gmail.com>: > On 2/8/10, Chema Cortes <pych...@gmail.com> wrote: >> Pero la experiencia nos dice que la programación, por excelencia, se >> basa en usar "patrones" en el contexto de una metodología, y ése >> debería ser el objetivo que tiene que alcanzar un alumno. >
Antes q todo : ¡ Háganle caso a Medardo ! ;o) Ahora ... Quería aclarar q la discusión de este tema puede ser algo q se puede ir de las manos porq los argumentos en buena parte dependen del contexto (e.g. no es lo mismo enseñarle programación a niños q a profesionales, aunque no sean del sector de las TICs ;o). Para el primer caso, otra ventaja que tiene Python es que se puede personalizar las palabras claves y adaptarlas al lenguaje de orígen para que luzca más o menos así. {{{ #!python si variable == 0 : haz_esto() sino : haz_lo_otro() }}} ... esto lo entendería cualquier crío; bueno, si los chinos pudieron hacerlo ... > Creo que la programación debe enseñarse usando la teoría de los > paradigmas y usando los lenguajes que más se adapten a cada problema. > Python es muy bueno porque: > > 1) Soporta toda la Programación Estructurada. > 2) Soporta gran parte de la Programación Orintada a Objetos. > 3) Tiene un buen soporte de la Programación Funcional. Desde este punto de vista las estructuras q posee Ruby están muy potentes. Hay otra cuestión a considerar y es si se quiere enseñar programación o teoría de los lenguajes de programación. Si lo que se pretende es lo primero, creo que lo mejor es comparar varios lenguajes y que los estudiantes saquen sus conclusiones. Esto les de una visión más general y los ubica en el hecho de que la programación es algo más abstracto y el lenguaje es la herramienta. Si lo q se necesita es lo último, entonces, aunque se pueda utilizar un enfoque similar, otra alternativa podría ser utilizar uno solo q incluyera el mayor número de conceptos para varios paradigmas. En este caso, además de lo que mencionó Medardo, Python tiene las siguientes ventajas : - Python *SÍ* tiene corutinas, aunq quizás no sean las más completas, pero *Sí* las tiene (a diferencia de C# , lo q me recuerda una conferencia del PhD Miguel Katrib ... de la q quizás les cuente algo luego, quizás en mi blog para no ser OT ;o) - Se puede utilizar Python para escribir código utilizando un estilo parecido al cálculo proposicional (de hecho, varias veces lo he utilizado para esbozar demostraciones ;o) con cuantificadores existenciales y universales - quizás más, pero no tengo tiempo ahora de acordarme :-/ pero los bloques de código de Ruby son muy cómodos y potentes (y no hay nada como eso en Python) y, además, en Python no hay continuaciones *EXPLÍCITAS* , como sí las hay en Ruby . Por tanto si estos temas fueran objetos de estudio entonces Ruby sería más apropiado q Python ;o) Si se considera enseñar a personas de otros perfiles - Se puede adaptar al vocabulario técnico escondiendo los detalles de implementación . Ejemplos ? Me vienen a la mente dos reales . - Un módulo q implementó Luis A. Zarrabeitia (creo q se llamaba `adolpy` ...) para «calcular» derivadas de funciones y composiciones de funciones. - Otro módulo (no recuerdo el nombre :-/ , estoy viejo y baboso :P ) q permite importar y manipular ontologías como si fueran clases y añadir reglas transparentemente cada vez q se crean instancias de estas clases, para luego hacer «consultas semánticas» contra una base de conocimientos q trata de pasar inadvertida, etc, etc, etc ... - y así sucesivamente ... > 4) Es simple implementar estructuras de la Programación Basadas en > Restriciones (o por Contratos, como la definió Bertrand Meyer). Jejeje ... eso me recuerda a lo q después se convirtió en CASPy [1]_ ¿quiénes habremos sido los culpables ;o) ? > 5) Un gran soporte de tecnologías (a diferencia de Ruby que es muy > buen lenguaje, probablemente mejor que Python pero esta parte es > definitoria a la hora de trabajar profesionalmente). > He chocado con esto recientemente. IMO el soporte para Windows de Python es muy superior al de Ruby y, con el reciente acercamiento entre MS y la PSF puede q mejore. Además de q hay disímiles interpretes de Py . Pero solo con CPython se pueden integrar muchísimas tecnologías y plataformas y lenguajes . Están los casos de .NET y la JVM, de `ctypes`, de Borland Delphi, de Fortran, ... Ahora en Ruby hay cosas (e.g. Watir, Cucumber, ...) q todavía no he encontrado equivalente en Python . Pero no me causa mucho dolor de cabeza, con Rython o unholy (u otros ...) ya tendría acceso al código de Ruby . > Mi experiencia como profesor me indica que enseñar la programación > centrada en lenguajes es contraproducente, ... este es el primer caso del q les hablaba ;o) > los alumnos no llegan ni a > dominar las estructuras de este lenguaje. Los programadores que > aprenden Python y vienen de lenguajes tradicionales de POO tienen > graves problemas para asimilar conceptos como el de metaclases o > mixins; incluso nunca llegan a usar conceptos de Programación > Funcional. > ... es verdad, a mí me tomó muuuucho tiempo entender las corutinas y las continuaciones, y todavía no entiendo bien varias cosas :-/ > En mis clases de programación siempre pongo un ejemplo de un supuesto > problema de la POO documentado en la Wiki: > http://en.wikipedia.org/wiki/Circle-ellipse_problem > > Nunca me he atrevido a corregirlo porque le temo a una debacle de > discusiones sin fin. En este artículo se atreven hasta a poner en > entredicho a uno de los postulados más geniales de la teoría de > programación moderna: > http://en.wikipedia.org/wiki/Liskov_substitution_principle +1 > Me limito a exponer el problema, lanzo el reto de que lo programen en > un lenguaje tan defendido acá en Cuba para mi disgusto como el C# y > cuando no recibo respuestas le doy mi solución en Python y digo que lo > hice en 15 minutos. > Jejejejeee ! Eso me recuerda q sí hay solución con Borland Delphi (de la cual les hablaré en algún momento más adelante, quizás en mi blog para no ser OT ;o) > Es importante una pedagogía consistente, científica. Usar los > lenguajes como instrumentos que son y no como centro de la enseñanza. > En ese sentido Python es tremendo instrumento. > :o) .. [1] Comprehensive Assertion Support for Python (aka oop.dbc) (http://flioops.svn.sourceforge.net/viewvc/flioops/py/trunk/dbc.py?revision=67&view=markup) -- Regards, Olemis. Blog ES: http://simelo-es.blogspot.com/ Blog EN: http://simelo-en.blogspot.com/ Featured article: Embedding pages? - Trac Users | Google Groups - http://feedproxy.google.com/~r/TracGViz-full/~3/-XtS7h-wjcI/e4cf16474aa3cb87 _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/