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/

Responder a