sábado, noviembre 28, 2009

TEORÍAS DEL APRENDIZAJE - una breve conclusión

Como parte de la evaluación del diplomado Componente Docente para desempeño en Educación Superior que esoty cursando, se nos solicitó a los participantes investigar sobre las Teorías del Aprendizaje.

Luego de realizar el estudio del tema quise sintetizar las teorías del aprendizaje en tres slogans que reflejen lo fundamental de cada una:

  • CONDUCTISMO: “Dime lo que espero escuchar y te daré un premio … si no aciertas a la primera, no tendrás premio, pero … sigue intentando hasta que lo logres”.
  • COGNITIVISMO: “No te daré el pescado … te enseñaré a pescar, luego te dejaré intentarlo y ya veremos …”
  • CONSTRUCTIVISMO: “Tu aporte es importante … uno para todos y todos para uno, juntos lo haremos mejor”

En mi experiencia personal he tenido la oportunidad de enseñar de manera informal a grupos pequeños de personas en el área informática, mi intención ha sido siempre “enseñarlos a pescar”, enseñarlos a razonar y responder lo mejor posible ante las situaciones, para lo cual les doy las herramientas básicas y les explico y recomiendo los procedimientos que yo considero óptimos, y cómo en la mayoría de los casos no han tenido experiencias previas, no oponen mucha resistencia ni ponen en duda la certeza de lo que les enseño … esto encaja sin lugar a dudas en el COGNITIVISMO y los resultados observados han sido bastante satisfactorios; no obstante, creo que en otras áreas de conocimiento como las matemáticas o las artes manuales quizás el conductismo y el constructivismo respectivamente pudieran arrojar mejores resultados, tendría que experimentar en esas áreas a ver si tiene sentido esta afirmación.

Pitágoras expresaba sobre el fin de la enseñanza lo siguiente: "Educar no es dar carrera para vivir, sino templar el alma para las dificultades de la vida." (¿no les suena familiar?).

--
!Éxito¡
Julio J.

EL LIDERAZGO DOCENTE – reflexiones de un aprendiz. (por Julio J. Yépez)

Al abordar éste y otros temas relacionados con el rol del profesional docente a nivel de educación superior, quisiera expresar el producto de mis reflexiones sobre tres aspectos que creo deben ser considerados en forma individual inicialmente, para luego ser integrados y equilibrados antes de pasar a formar parte de la conducta del docente de hoy. En primer lugar el aspecto del docente como una autoridad; en segundo lugar, el docente como un tutor y facilitador del aprendizaje; y en tercer lugar, el docente como líder trascendental.
En el primer aspecto, coincido con el profesor Freddy Quiaro (UAH, UNEFA, EFOFAC), en que aún cuando se haya evolucionado en términos de sensibilización hacia al trato con el estudiante como ser humano digno merecedor del mismo trato y respeto que recibe el docente, no debe desaparecer la línea imaginaria de jerarquía que mantiene la distancia entre el docente y el estudiante. El estudiante no debe perder nunca la noción de que él es “el estudiante” y el docente es “el docente” en términos de estructura jerárquica. Esto, aún cuando el docente sea flexible y permisivo a su discreción en relación al trato y lenguaje que emplee para entablar comunicación con sus alumnos. El estudiante debe cumplir normas y tener parámetros fundamentales relacionados con su conducta hacia el docente, el recinto de estudio, sus compañeros y demás miembros del contexto educativo.
En cuanto al aspecto del docente como tutor o facilitador del aprendizaje, considero que es un deber ético y profesional del docente, mantenerse en constante actualización de conocimientos, técnicas, métodos, recursos didácticos, tendencias tecnológicas y educativas, etc., que sean acordes con el momento histórico y el contexto en que se desenvuelve el estudiante. De no ser así, se estarán formando “profesionales” incapaces de lidiar con la realidad laboral vigente, incapaces de comprender el “mundo real” al cual serán liberados a su suerte y evidentemente sus posibilidades de éxito dependerán del esfuerzo, sacrificio y voluntad adicionales que ellos mismos puedan procurarse para “completar” su pobremente lograda formación y así aspirar a ser competitivos en un mercado laboral que es salvaje y despiadado con los profesionales más débiles.
En relación al papel del docente como líder, definitivamente comulgo con el enfoque de liderazgo trascendental, en el cual el líder busca influenciar y motivar a sus seguidores para despertar en ellos su deseo de alcanzar metas mucho más allá de lo material, de lo social o laboral … metas que le permitan trascender en el tiempo, dejar huella, hacer una diferencia, tener un efecto positivo y dejar una herencia memorable en su transitar por este mundo.
A manera de conclusión dejaré una frase para los docentes que buscamos ser líderes trascendentales de nuestros alumnos:
“Despierta en tus discípulos el deseo de enseñar a otros lo que han aprendido de tí y el valor de tu enseñanza no tendrá límite” … jjyepez

"Cogito ergo sum." .-René Descartes (1596-1650) (filósofo francés)

Muchos hemos escuchado o leído esta frase alguna vez:

Cogito ergo sum.

Probablemente haya sido utilizada en contextos inapropiados o sin el correcto sentido, quizás otras veces sí, en el contexto adecuado, pero ... ¿qué quiso decir realmente René Descartes cuando acuñó esta sentencia?
Esta incógnita me llevó hasta el blog que a continuación enlazo: http://citas-latinas.blogspot.com/2009/01/cogito-ergo-sum.html

Espero que sea de su agrado y provecho.
--
Éxito.
Julio J.

martes, septiembre 08, 2009

Usar procedimientos almacenados (stored procedures o sp) en MySQL


INTRODUCCIÓN
Casi puedo asegurar que ninguno de los que hemos tenido la oportunidad de trabajar con procedimientos almacenados y/o funciones, ya sea con MS SQL-Server o con cualquier otro manejador que soporte este tipo de objetos de datos, dudaríamos en reconocer el poder que estos objetos encierran, y el poder que le proveen a las aplicaciones que los utilizan.
-A continuación un par de links a Microsoft donde se comentan un par de características sobre los SPs: enlace 1enlace 2.-
Desde hace unos cuantos años he estado trabajando en el desarrollo de aplicaciones web, fundamentalmente en entornos LAMP (linux, apache, mysql y php) y en ciertas ocasiones me sentí desesperado e incluso frustrado al no poder utilizar SPs en ellas.
La razón era porque no me había puesto a indagar como funcionaban y como controlarlos en MySQL.
En esta serie de artículos les explicaré lo que descubrí, y les daré ejemplos para que ustedes mismos puedan obtener el máximo provecho de sus datos mediante el uso de este versátil y poderoso objeto de datos, tan poco comentado en los foros y con tan poca decumentación práctica que los desarrolladores de nivel medio y básico quizás sólo prefieren pasarlos por alto y seguir su camino a través de sentencias SQL estáticas o a lo mucho, vistas.
En fín, espero que esta información sea de su provecho y gran utilidad ... si es así, no olviden dejar algún comentario :-) ... Un abrazo.


PRELIMINARES
El objetivo de este artículo es mas bien "inspirar" a los desarrolladores web de niveles medio y básico de aplicaciones basadas en LAMP oWAMP para que incursionen y profundicen un poco en los objetos de datos y la optimización de consultas hacia sus bases de datos, y bueno, si sirve también para dar algún aporte a algún desarrollador experimentado, pues ... excelente también, adelante!
En primer lugar, me gustaría dejar en la "atmósfera", algunas ideas o conceptos que más adelante profundizaremos:
     1) Los procedimientos almacenados son sólo uno de varios objetos de datos que, en función de nuestras necesidades y objetivos específicos, aportarán un valor importante y poder a nuestras aplicaciones; pero existen otros: vistas, funciones, triggers, índices, relaciones, etc., que deberán ser también considerados eventualmente, como parte importante que son, de la optimización y eficiencia en la gestión de los datos en nuestras aplicaciones.
     2) Los procedimientos almacenados pueden servir para varias tareas, entre otras: insertar, actualizar, eliminar, y consultar/extraer información de nuestra base de datos. Para los efectos prácticos de este artículo, nos enfocaremos sólo en los SPs de consulta parametrizada que devuelven un resultado en forma de "tabla" con datos condicionados de manera específica por los parámetros que le pasaremos a dicho procedimiento.
     3) Profundizaré sólo lo mínimo necesario para mostrar los efectos del uso de los SPs, sin embargo; ustedes pueden continuar investigando tan profundamente como deseen, ya que luego de esto aún queda mucha tela que cortar en el tema de "objetos de datos", etc.

PRIMERA PARTE

En muchos blogs, foros y sitios sobre MySQL, hay ejemplos de cómo crear procedimientos almacenados; el problema está en que la mayoría se trata de crearlos desde la cónsola de "mysql>", cambiando el "delimiter" y luego ejecutarlos con un "Call" desde php. En fin ... creánme, no sé cuantas horas pasé tratando de que me funcionara "así de fácil" como lo pintan ... Y NADA!
Lo primero que debía entender es:
     1) ¿qué es ese tal delimiter?
     2) ¿por qué debo cambiarlo antes y después de crear el SP?
     3) ¿puedo crear el SP desde phpmyadmin?
     4) ¿cómo puedo crear el SP desde phpmyadmin y no desde la consola?
Bueno, en esta primera parte intentaré responder de manera clara y simple a esas "primeras" preguntas.
     1) El delimiter, en términos sencillos, es el caracter que va a indicar a MySQL que hasta allí llega la instrucción o comando SQL que queremos ejecutar. Normalmente el delimiter es el ";".
Por ejemplo: si escribimos en la cónsola de mysql:

   mysql> set names utf8; select now() as ahora;

Le estaremos indicando a mysql que se queremos ejecutar esas dos instrucciones, una detrás de la otra, pero se lo estamos indicando en una sóla linea ... separando las instrucciones con el delimiter ";".
     2) El delimiter se debe cambiar antes de crear el SP ya que las instrucciones que utilizaremos en nuestro SP pudieran tener ";" como delimitador, pero como nuestra instrucción y objetivo principal es CREAR el SP, esta instrucción "CREATE PROCEDURE" debe tener también su delimitador particular, así pues al cambiar el delimiter antes de crear el SP, le estamos diciendo que para la instruccion CREATE PROCEDURE utilizaremos un delimitador diferente, y que dentro de nuestro procedimiento (ya sea un "select" o lo que sea) utilizaremos el delimitador normal ";" y así éste no afectará la creación del procedimiento indicando erróneamente a mysql que terminó la instrucción. -si no he sido muy claro en esta respuesta de todas formas lo veremos claramente cuando estemos creando el SP, más adelante.
     3) Si, claro que se puede crear un SP desde phpmyadmin.
     4) El secreto está en cambiar el valor del campo "delimiter" que está en la parte inferior-izquierda debajo del espacio de texto en el que creas el SQL. Podemos colocarle otro delimitador como "//" en lugar del ";" que tiene allí por defecto. Lo veremos más claramente cuando creemos el SP. Y desde luego debes tener habilitado los permisos en tu usuario de mysql para ejecutar instrucciones CREATE (pero si eres root, ni te preocupes por permisos).

SEGUNDA PARTE
Antes de proceder a crear el SP, hay algo importante que debemos saber (esto es algo que tuve que descubrir por mis propios medios ya que en ningún foro o blog estaba esta información). Cuando ejecutemos SPs desde php utilizaremos el comando "Call" en lugar de un "select" o lo que sea, y .... este comando "Call" no devuelve a php una tabla como lo hace un "select" normal, devuelve una estructura que php no puede manejar!

Más adelante comprenderán mejor qué es lo que exactamente trato de decir (entender esto fue lo que más tiempo me tomó a mí).
Bien, procederemos a probar "cómo se crea un procedimiento almacenado o stored proceduro o SP".
Indicaré los pasos uno a uno para asegurarnos de que todo funcione como se espera.
     1) Ingresamos a phpmyadmin con el usuario root (o algún usuario que tenga permisos para CREAR procedimientos, tablas, etc.)
NOTA: Es importante trabajar en una versión reciente de phpMyAdmin, ya que la funcionalidad que te permite "ver" los procedimientos almacenados en tu base de datos es relativamente nueva así que si tu versión de phpMyAdmin es muy vieja, quizás no te funcionen las cosas como esperamos (yo uso para este artículo la versión 3.2.1 de phpMyAdmin y la versión 5.0 de MySQL).
     2) Seleccionamos la base de datos sobre la cual haremos las consultas.
     3) Nos colocamos en la pestaña "SQL" del phpMyAdmin.
     4) En este punto yo normalmente "Construyo la consulta" utilizando valores fijos en las condiciones del "where", valores que luego cambiaré por los parámetros que recibirá el SP al ser invocado.
Para nuestro ejemplo práctico probamos el siguiente query:

   Select concat ('Hola ', 'mi nombre!') as campo1;

El resultado será una tabla de un solo "campo" cuyo valor es "Hola mi nombre".
NOTA: El procedimiento que crearemos en lugar de 'mi nombre', colocará  el parámetro que le pasaremos. Será realmente simple pero suficiente para lograr el objetivo de este artículo.
     5) Estando en la pestaña "SQL" de phpMyAdmin, procedemos a cambiar el "delimiter". En el lugar donde está ";" colocaremos "//" (dos slash pegados sin comillas).
     6) Una vez cambiado el delimiter, escribimos en el "área de texto" del "SQL" lo siguiente:
   DROP PROCEDURE IF EXISTS miPrimerProcedimientoAlmacenado//
   CREATE PROCEDURE   miPrimerProcedimientoAlmacenado (pNombre varchar(20))
   BEGIN
      Set names utf8;
      Select concat ('Hola ', pNombre) as campo1;
   END//
ATENCIÓN: Observa acá la utilización tanto de un delimitador como del otro y revisa lo que comenté un poco antes en este artículo sobre el uso y el cambio del "delimiter". Es importante que veas la diferencia antes de seguir adelante.
Bien.-
     7) Si todo ha salido bien hasta acá, hacemos clic en el botón "Go" o "Ejecutar". Y mysql nos muestra el mensaje: "Your SQL query has been executed successfully!"
lo cual significa, que hemos creado con éxito nuestro primer store procedure!
Hasta aquí hemos creado nuestro SP utilizando phpMyAdmin, hemos comprendido el uso del delimitador al crear un SP y hemos aprendido un par de instrucciones nuevas ... pero .......
¿¿Y AHORA CÓMO HAGO PARA LLAMAR AL SP DESDE PHP Y MANIPULAR EL RESULTADO QUE SE SUPONE DEBE RETORNARME EN FORMA DE TABLA??

Estén pendientes a la próxima entrega de este artículo ... allí les mostraré cómo ...
¡Éxito!

Julio J.

Buscar este blog