jueves, noviembre 16, 2006

Transparencia o Invisibilidad?

PRINT frase

todavia recuerdo... esa fué mi primera experiencia de programación en el colegio. En QuikBasic. Me puse super feliz cuando funcionó! :)

En esa época, mi conocimiento sobre lenguajes compilados, interpretados, mixtos, imperativos, funcionales o incluso, orientados a objetos era simplemente nulo. En esa época suponia que cada linea de código de quickbasic correspondia a una instrucción del computador, y por tanto, la eficiencia de un programa se media en el número de líneas que se ejecutaban.

Despues de muchos programas con miles de gotos, llega uno a la universidad y el primer lenguaje que mencionan, o con el que lo ponen a programar es... karell.

Decepción... pasar uno de programar en un "lenguaje de verdad" a mover un pinche robot. Pero bueno, esto solo tenía como objetivo introducir la programación orientada a objetos, porque igual luego nos enseñarian Java.

Pasó el semestre, y a este le siguió lenguajes de programación. (que era mas bien algo asi como... conoscan c y un poquito de c++ con algunos ejemplos de lenguajes "raros"). Uno se daba cuenta que realmente java era como una empleada doméstica (recogía la basura, y se encargaba de que todo "estuviera bien")

Despues, con otras materias, uno puede remitir casi directamente cada sentencia de c a un conjunto ensamblador pero en forma paralela al conocimiento de este mal llamado "bajonivel" se siguen haciendo las practicas en java... Porque? porque es fácil.

Ultimamente, despues de varias discuciones sobre lenguajes y herramientas, y en parte gracias a cierto articulo de Joel on Software donde describía como el manejo de apuntadores es un buen indicador de la capacidad de abstracción, se cayó en un punto álgido.

Es acaso la aptitud en el manejo de herramientas de alto nivel (llámese J2EE, eclipse SQL server y demás) elementos suficientes para juzgar la capacidad de un programador-informatico(1)?

Pienso que no.

En primer lugar, que es la aptitud para manejar herramientas? es acaso este un indicativo de imposibilidad de manejar otras? o por el contrario, es este un indicativo de capacidad de manejarlas? Siendo totalmente objetivos no.

Creo que el indicador realmente importante no es que herramienta utilice sino el saber lo que ocurre tras bambalinas, es decir, lo que llamare transparencia versus invisibilidad.

Que es transparencia e invisibilidad? ambas podria definirlas como una forma de ocultar los cómos interiores, sin embargo a diferencia de la transparencia la invisibilidad ignora la siquiera existencia de los cómos

El ejemplo ya está dado y es el del joven dieguito con su interpretador de quickbasic. Para él, utilizar PRINT resultaba invisible. la siquiera imaginación de la existencia de un como le resultaba extraña. Simplemente voila aparece un mensaje en pantalla. El comportamiento transparente, en cambio, es el del programa en java que pese a estar utilizando una lista se sabe por algo de las estructuras de datos vistas de c, que debe estar haciendo uso memoria dinámica, y que pese a que no se conoce como se implementan especificamente las operaciones se pueden intuir ciertas propiedades.

Siendo asi, creo que cualquier programa que permita hacer invisible su operación puede resultar nocivo para alguien que se digne llamarse cientifico en computación o ingeniero. creo que se compararía a un fisico que resuelva bien las ecuaciones sin entender los conceptos... es decir... a la hora de hablar de lenguajes de programación consideraría que haskell como lenguaje invisible puede ser tan nocivo como java, ruby o c++.

El caso importante es que existen herramientas que permiten ser aprendidas mas fácil en forma invisible que otras (particularmente me cuesta entender como alguien podría trabajar en prolog sin conocer el sustrato lógico :P) asi tambien existen herramientas que resulta imposible aprender en forma invisible (o a veces hasta transparente) como lo son el caso de lenguajes de bajo nivel, sin embargo tienen la posibilidad de hacer visible lo invisible :P

(1) Odio la palabra informático... no se me ocurrió otra :P

(*) creo que lleve demasiado lejos la metafora
(*) Proximamente... algo sobre el primer seminario nacional de ciencias cognitivas
(*) ortografía asquerosa... despues la reviso... LO JURO :P

goto(1/0) and :beyond :P

3 comentarios:

Federico dijo...

Habia escrito un comentario super largo e interesante pero no se porque no quiso guardar asi que mejor pregunto esto, cuanto crees que tenga que ver OO y el encapsulamiento con la invisibilidad de un lenguaje?
No creo que modularizar las cosas y convertir todo en unidades atomicas sea necesariamente malo, nos da cosas excelentes como las diferentes bibliotecas de Java para hacer de todo, pero no sabemos absolutamente nada de lo que pasa atras y a la larga dejamos de entender muchisimos conceptos (como la sincronizacion en Java).

Creo que con otros paradigmas esto simplemente no es posible, vos lo demostraste con el ejemplo de Prolog.
De nuevo, no se si a la larga sea malo o bueno pero valdria la pena revisarlo.

Por cierto, te acordas si BASIC aceptaba los else? No se porque creo que algun interprete todo pirata que use forzaba a usar gotos :(

diegoeche dijo...

Que lastima que no haya guardado :S

Pues yo la verdad, no creo que la orientacion a objetos tenga mucho que ver con la invisibilidad (creo mas bien que OO es simplemente popular y que es mas facil ver los sintomas de la invisibilidad en los lenguajes populares)... y ahi lo muestro con Quick basic, hasta un lenguaje meramente imperativo puede llegar a ser totalmente "oscuro" para aquel que no esta entrenado...

Creo que mas bien es la encapsulación es el agente que generala oscuridad operativa y no me parece esta una propiedad exclusiva de la OO... a veces hay funciones cuasimagicas en haskell :P

malo?... no creo... tener gente que haga cualquier cosa sin necesidad de saber que esta haciendo es mas barato... un Winston quemando noticias viejas, o alguien invocando (cast)Clase.getbla().getble()

delectomorfo dijo...

Gracias por pasarte a blogger. Leer el space de msn implicaba, casi siempre, estar usando Internet Explorer. Lo odio. Y que viva Firefox.