Archivo

Entradas Etiquetadas ‘lenguajes’

Enseñando a programar

Viernes, 7 de Mayo de 2010 Gaspar Fernández 5 comentarios

Desde hace tiempo, me ofrezco como profesor particular de programación en C/C++ (entre otros), he conocido bastantes alumnos, y metodologías de varios profesores. Este artículo es una opinión personal de mi experiencia.

En principio tengo que decir que muchos de mis alumnos, sólo venían para sacarse una asignatura, no tenían demasiado interés, aunque fuera una de las asignaturas claves de sus estudios, y algo que les ayudaría el día de mañana; aunque es cierto que no todo el mundo puede aprender a programar desde cero y con soltura en 3 ó 4 meses, requiere un entrenamiento, dedicación, mucho tiempo y enfrentarse con problemas una y otra vez, y si le sumamos a esto poco interés estamos perdidos.

Es cierto que igual que en todas las ciencias e ingenierías tiene un aspecto recursivo y es que lo más sencillo se enlaza con aspectos muy complicados y es difícil introducir a alguien en este mundo sin que queden preguntas sin resolver y huecos que en el futuro se rellenarán, pero algunas insaciables mentes quieren ir más deprisa, y cuando las respuestas a sus preguntas empiezan a sonar a chino, abandonan.

Es por esto, que como profesor hay que ofrecer algún valor adicional al alumno, y aunque no es complicado ofrecer en un grupo reducido, existen muchos centros de enseñanza en los que ni siquiera se intenta; no podemos pretender enseñar C a una persona con Borland C, un IDE del año 1992 (sí, ya es mayor de edad y aunque hace años luz de su salida, se sigue usando). Los alumnos de hoy en día no valoran que hace 16 años flipábamos haciendo un entorno en modo texo, y estábamos acostumbrados a los 80 caracteres x 25 líneas.
Hoy en día ver sólo 80 letras por línea y tan pocas líneas, agobia un poco, eso de no poder cambiar el tipo de letra, el tamaño y elegir entre una gran variedad de colores parece que lo hace todo un tanto inútil, y da la impresion de que nunca se van a utilizar esas cosas.

Soy consciente de que es difícil enseñar a programar prescindiendo del modo texto, ya que la entrada/salida es muy fácil de implementar y de probar, y si estamos empezando es normal que compilemos mil millones de veces sin éxito, y luego tengamos errores de en tiempo de ejecución y ocurran sucesos extraños en nuestros pequeños programas. Por lo que en principio propondría un poco de renovación de software, es cierto que los centros donde se sigue enseñando con Borland C y programas de la época llevan haciéndolo así durante años, pero aunque C va a seguir siendo el mismo, se pueden probar otros IDEs que nos permitan por lo menos hacer el tema un poco más ameno para el alumno. (Dev-C++, Netbeans, Anjuta, o utilizar Kate y compilar a mano, también soy consciente de que éstos también se utilizan en muchos sitios).

Por otra parte, me gustaría hablar sobre la programación amena, es cierto que al principio, tenemos que limitarnos a enseñar las posibles herramientas de las que disponemos, con paciencia, ejemplos, y viendo lo que es capaz de hacer cada herramienta; pero propongo hacer programas libres a corto plazo, es decir, embarcarnos en pequeños proyectos (siempre viendo lo que está dentro de las posibilidades de lo enseñado), con lo que se pueda practicar y seguir aprendiendo. Por ejemplo:

  • Si el alumno está interesado en la economía, se puede hacer un sencillo gestor de economía personal, o un pequeño simulador FOREX (Mercado de divisas) con unos pocos datos generados.
  • Si le gusta la fotografía, podemos empezar (con algunas funciones prediseñadas) a leer y escribir archivos BMP o JPG. Aunque suene complicado símplemente se pueden entregar un .h y un .c y una pequeña documentación de cómo llamar a esas funciones.
  • Está bien el hecho de hacer juegos, pero meternos en un juego directamente es una tarea un tanto complicada, ¿por qué no empezar con las tres en raya? O un juego de sumas y restas, un ahorcado…
  • Está bien empezar también con algo tangible y que todos conocemos, por ejemplo una máquina expendedora, un programa que diga una frase, tipo Facebook, un programa de envío de email (aunque tengamos que entregar algunas funciones extra).

Por esto, siempre empiezo preguntando a mis alumnos por algo que les guste, es verdad que para una clase particular es fácil, un grupo grande es mucho más difícil de llevar, sobre todo si cada uno hace un trabajo diferente, pero se puede guiar por lo que más o menos les interese a todos. Y una cosa importante, que hayamos hecho algo mil veces, no nos quita de currar, y de intentar hacerlo siempre lo mejor que podemos

Propongo unas pistas/consejos, para hacer la programación mucho más emocionante:

  • system() no sólo vale para hacer system(”PAUSE”); para que en Windows no se nos cierre la ventana; podemos ejecutar cualquier cosa, desde un programa que reproduce sonidos, hasta otro para mostrar una imagen, como un navegador web, lo que sea… podemos usarlo para más cosas.
  • Hay librerías fáciles de usar que nos pueden hacer la vida un poco más amena, por ejemplo xosd, con lo que podremos presentar mensajes en pantalla
  • Kdialog, dialog, Xdialog, Zenity… son programas que nos ayudarán a mostrar mensajes en pantalla de forma fácil, usémoslos.
  • Los alumnos se acostumbrarán antes a llamar código de terceros si les proporcionamos las librerías para ello, a lo mejor se ve demasiado complicado, pero obtener un texto de una página web, o que se vea que un mensaje se ha sacado de Google o Twitter, cuando acabas de empezar te anima un poco.
  • No podemos pedir ejercicios muy simples, y de repente un ejercicio extremadamente complicado, que nadie va a ser capaz de resolver, debemos ir progresivamente y pensar que aún no se tiene una mentalidad de desarrollador, tenemos que desarrollarla nosotros, no hacer que abandone.
  • Lo más importante, paciencia, nosotros tenemos años de experiencia y tratamos con personas que no tienen ninguna, y empiezan ahora, tenemos que hacer un seguimiento de lo que están haciendo, aunque es cierto que algún día hay que aprender a buscarse la vida, tenemos que hacerlo poco a poco y escoger el momento.

Casi todo este post, se ha basado en mi experiencia de programación en C/C++, y es verdad que en otros lenguajes (Visual Basic por ejemplo), se realizan otro tipo de ejercicios algo más interactivos y que generalmente gustan más; es cierto que nos deja muchas cosas hechas y no tenemos que recorrer tanto camino para llegar a algo complicado, aunque también es cierto que hay muchos más lenguajes cuya sintaxis se parece más a C que a Basic, por lo que considero uno de los grandes pilares de la programación.

Me gustaría dedicar un par de párrafos al pseudolenguaje o pseudocódigo, es cierto que a muchas personas les ha ayudado en la comprensión del código y el diseño de los algoritmos, así como cuando se quiere decir algo en un idioma diferente al idioma natal, primero lo pensamos en nuestro idioma (más o menos) y luego traducimos en dos o tres iteraciones (primero normal, luego cambiamos verbos de sitio, luego adjetivos…); aunque a la hora de programar, primero tenemos en mente nuestra idea de lo que queremos hacer, y luego diseñamos el algoritmo en pseudolenguaje, tras ello, traducimos línea por línea, en un proceso que puede llegar a durar varios minutos.

Es una expresión en lenguaje natural, que resulta de todo menos natural, y realmente lo veo un tanto pérdida de tiempo; para aprender a programar y a crear algoritmos uno de los procesos fundamentales es compilaro y probarlo hasta que salga, y con el pseudolenguaje no tenemos forma de hacerlo (sí, hay algún compilador, pero prácticamente no se utiliza). ¿Por qué no enseñamos a programar directamente? Así podemos probar lo que hacemos en tiempo real y sobre todo, saber que progresamos. Sí está bien utilizar diagramas de flujo y tratar de entender el algoritmo, hacer esquemas, etc; pero me refiero a intentar aprender una sintaxis nueva que en tres o cuatro meses que suele haber para aprender la materia se puede atragantar y evita que avancemos.

El lenguaje C en primera posición [de nuevo]

Jueves, 29 de Abril de 2010 Gaspar Fernández Sin comentarios

tiobeLeo en el Blog de Manuel Pereira que a su vez lee en Mi visión la nueva actualización del índice TIOBE.
En el que el lenguaje C vuelve a estar en primera posición con respecto a Java, que lo ha dejado en segundo lugar durante muchos años, y junto con C++ (aunque PHP sigue de cerca) forman el podio.

Aunque, en muchos centros de enseñanza se considere que C o C++ son lenguajes anticuados, podemos ver que están a la orden del día y de hecho son usados, y mucho. Eso me hace plantearme la forma en la que se enseña C en muchos sitios, algún día comentaré mi opinión de este tema.

El índice TIOBE se genera cada mes y se forma haciendo consultas en los buscadores más populares, por tanto, veremos los lenguajes más populares en este momento, es un punto a considerar a la hora de iniciar un nuevo proyecto de programación; para más información ver la web oficial.

Plantillas en EMACS

Viernes, 9 de Abril de 2010 Gaspar Fernández Sin comentarios

pie-grandeEs la primera entrada de mi editor de texto favorito.

Cuando pasas gran parte del día editando archivos, es muy útil que al empezar un fichero nuevo haya algo escrito, algo que siempre toca escribir a mano, unos pocos comentarios donde dices más o menos de qué va lo que hay en el fichero y poco más.

Casi todos los editores modernos disponen de esa característica y emacs no iba a ser menos, sólo que hay que instalar una extensión (se puede hacer sin necesidad de extensiones, pero hace falta programar un poco y lo que queremos es una solución rápida que nos permita seguir trabajando en lo realmente importante), después de probar dos o tres, me quedo con emacs-template, es fácil de instalar y de configurar. Sólo hay que hacer lo siguiente:

  1. Descargar de la página oficial de emacs-template.
  2. Descomprimir en un directorio (yo lo hice en ~/.emacs_loadpath/
  3. Compilar template.el (recomendable), para ello dentro de emacs hacemos: M-x byte-compile-file y luego buscamos el archivo template.el; generaremos template.elc
  4. Copiamos template.elc a ~/.emacs_loadpath/
  5. Copiamos el contenido de templates a ~/.templates/ ; al descomprimir el archivo habrá un directorio templates con algunos archivos, tendremos que copiarlas al nuevo directorio.
  6. Editar .emacs para cargar la extensión:

Dentro de ~/.emacs debemos escribir lo siguiente:

(add-to-list ‘load-path “~/.emacs_loadpath/”)

Para buscar en el directorio donde hemos copiado template.elc

(template-initialize)

Para cargar la extensión. A partir de este punto, cuando creemos un archivo: C-x C-f archivo.c (por ejemplo) habrá algunas líneas pre-escritas.

Las plantillas las encontramos en ~/.templates/ y aunque vienen pocas, podemos crear todas las que queramos situándolas en ese directorio. Por otra parte, tenemos la posibilidad de introducir palabras clave dentro de la plantilla que se traducirán por el valor correspondiente como por ejemplo:

  • (>>>DATE<<<) : La fecha actual
  • (>>>AUTHOR<<<) : Tu nombre e email
  • (>>>FILE<<<) : El fichero que estamos editando
  • (>>>POINT<<<) : El punto donde el usuario empezará a editar, muy útil por ejemplo para archivos HTML donde escribimos todas las cabeceras, los pies, y tenemos que situarnos en medio para empezar; aunque lo podemos extender a todos los lenguajes.
  • Y muchos más. Ver documentación.

Os dejo aquí una pequeña plantilla para PHP.

Pero aún hay más, podemos definir puntos en los que movernos rápidamente para editar, tal vez campos en los que debamos introducir texto y en los que queramos entrar de forma fácil, para ello se definen puntos (>>>0<<<) al (>>>9<<<) y nos podremos ir ahí rápidamente con el comando M-x jump-to-register ( ). (C-x r j), aunque el atajo de teclado no ataja mucho y es algo complicado, yo lo he cambiado por C-a (a porque es una tecla que pilla muy cerca de Control) editando .emacs:

(global-set-key (kbd “C-a”) ‘jump-to-register)

Un detalle más, emacs no cogía bien mi nombre y dirección de correo para usar (>>>AUTHOR<<<), por lo que tuve que hacer una pequeña modificación más a .emacs:

(setq user-mail-address “Gaspar Fernández “)

De esta forma, además, puedo personalizar la dirección de correo, para que a la hora de publicar mis trabajos no me llegue demasiado spam.
Foto: hoyasmeg (Flickr)

Visita otras webs de la red