SlideShare una empresa de Scribd logo
1 de 13
Descargar para leer sin conexión
Los Paradigmas de la Programacion

Roberrt W. Floyd

Universidad de Stanford




Paradigma: Patron, Ejemplo, para exhibir al lado, mostrar lado a lado

Un Patron , Ejemplo o ejemplos.



1752, J. Gill : La Arquitectura, el paradigma, el ejemplo, la idea, de acuerdo a todas las
cosas que han sido hechas. (Del Diccionario de Ingles de Oxford).



Hoy, yo quiero hablar acerca de los paradigmas de la programacion, como ellas afectan
nuestro éxito como diseñadores de programas para computadores, como ellos podrian ser
aconsejados, y como podrian ellos ser adentrados en nuestros lenguajes de programacion.

Un ejemplo familiar de las paradigmas de proramacion es la tecnica de la programacion
estructurada, que parece ser el paradigma dominante en la mayoria de metodologias de las
la programacion, La programacion estructurada propuesta por Dijkstra, Wirth y Parnas
entre otros consiste en dos fases.

En la primera fase, en un diseño de los mejores o un refinamiento paso por paso, el
problema es descompuesto en un pequeño numero de problemas mas simples, En la
programacion la solucion de varias ecuaciones lineales, es decir por ejemplo el primer nivel
de descomposicion podria interpretarse como una etapa de triangulacion de las ecuaciones,
y un nivel posterior de substitucion de los sistemas ya triangulados. Dicha descomposicion
es continua hasta que los subproblemas que salen sean lo suficientemente simples para
lidiar con ellos directamente. En el ejemplo de que ecuaciones simultaneas, los procesos de
sustitucion podria ser posteriormente descompuesta con un proceso de iteracion implicita
de un proceso donde encuentra y guarda los valores de la variable ith de la ecuacion ith.
Aun los procesos posteriores de descomposicion podrian requerir un algoritmo mas
detallado.
La segunda fase de la paradigma de la programacion estructurada, hace enfasis en objetos
concretos y las funciones de la maquina para los objetos mas abstractos, y las funciones
utilizadas en los modulos producen un diseño de los mejores, en el ejemplo de la ecuacion
lineal los coeficientes de las ecuaciones, son las funciones racionales de una de las
variables, nosotros debemos diseñar primero, una representacion aritmetica multiple y
precisa, y luego proceder construir una representacion polinomica, con procedimientos
matematicos propios, esta aproximacion esta referida como el metodo de niveles de
abstraccion de la informacion oculta.

El paradigma de la programacion estructurada no significa que deba ser universalmente
aceptada, lo que si implica es que debe profundizar su contexto para facilitar los problemas
mas dificiles. Otros paradigmas de alto nivel de tipos mas especializados, como los tipos de
Ramificacion y Acotacion ademas del conocido como Divide y Venceras, tecnicas que aun
siguen siendo muy escenciales, Aun asi los paradignas de la programacion estructurada
sirven para extender aun mas los poderes del diseño permietiendo la construccion de
programas que son muy complicados para ser diseñados eficientemente y que tengan una
confiabilidad sin un soporte metodologico.

Yo estoy seguro que el estado actual tan refinado de la programacion de computadores
refleja inconsistencias en nuestro inventario de paradigmas, en nuestro conocimiento de
paradigmas existentes, en la forma en que los lenguajes de programacion apoyan,o en el
fracaso de apoyar los paradigmas de las comunidades de usuarios.

La Programacion de Computadores Refinada, ha sido recientemente referida por Robert
Balzer de esta forma :

³Es bien conocido que el software estaba en un estado muy bajo, Es poco factible, es
irresponsable, costoso e ineficiente hacer cambios de software, ademas desde que ha sido
una labor muy extensa, la situacion se deteriorara a su vez que la demanda se incrementara
y los costos aumentaran, ³, esto suena como el Famoso ³crisis de software´ como su
termino mas apto.

Thomas S. Kuhn en su ³Estructura de las Revoluciones Cientificas´, ha descrito las
revoluciones cientificas de los siglos anteriores asi como enfatiza los cambios en los
paradigmas dominantes, algunas de las obervaciones de Kuhn parecen apropiadas para
nuestro campo, de los Textos cientificos que se presentan los siguientes conocimientos a los
Estudiantes, Kuhn escribe:
³Estos textos tienen por ejemplo, que la implicacion del contenido de la siencia esta
ejemplificado por las observaciones, leyes y teorias descritas en estas lineas´

De esta misma forma, muchos textros de programacion de computadores implican que el
contenido de la programacion es el conocimiento de los alogoritmos y las definiciones del
lenguaje descrito en estas lineas.

Kuhn Tambien Escribe :

³El estudio de los paradigmas, incluyendo varios de los mas especializados que han sido
nombrados anteriormente, son los que principalmente preparan a los estudiantes para la
membresia en las comunidades de las ciencias particulares,con los que practicaran
posteriormente, porque se uniran a hombres que aprendieron las bases de este campo bajo
los mismos conceptos en concreto, su practica consecuente podria provocar desacuerdos
sobre los fundamenttos´.

En la ciencia computacional, uno encuentra muchisimas comunidades, cada una habla su
propio lenguaje y usa sus propios paradigmas, de hechos los lenguajes de programacion
tipicamente sugieren el uso de algunos paradigmas y no sugieren el uso de otros.

Ahí ciertas escuelas que se especializan en programacion de LISP, programacion en APL ,
programacion en ALGOL, entre otros, Algunos enfatizan el fujo de datos y otros el control
de flujo de datos, como la informacion estructurada de cualquier programa, la recursion y
la iteracion, copiar y compartir estructuras de datos, llamadas por nombre y llamando por
valores, todas tienen su adeherencia.

Otra vez de Kuhn:

³Los Miembros de la Vieja Escuela gradualmente desapareceran en parte dicha
desaparicion es por la conversion de miembros hacia un nuevo paradigma, pero siempre
habran personas que se siempre se adheriran hacia uno u otro de las viejas formas de ver las
cosas, y ellos simplemente se saldran de la profesion, y por eso mismo ignoran su trabajo´.

In Computacion no hay un mecanismo de lectura fuera de la profesion, yo Sospecho que
principalmente se convierte en Managers de desarrollo de software.

Balzer, en su consigna en contra de de la construccion de software profetizo que la
programacion automatizada nos rescatara, Yo deseo que el éxito de los programadores
Automaticos, pero por ahora solo se tiene que hacer una limpieza de nuestro establo,
nuestra mejor esperanza es mejorar nuestras propias habilidades, yo creo que nuestra mejor
oportunidad de mejorar la practica general de la programacion es la de cuidar nuestros
paradigmas.
En los primeros años de la decada del 60, el analisis de los lenguajes libres de contexto, fue
un problema de presionar la importancia del desarrollo de la compilacion de la lingüística
natural. Algoritmos publicados habian sido lentos e incorrectos, John Cocke manifesto que
con ese poco esfuerzo, ha encontrado un algoritmo mas sencillo y mas rapido, basado en un
paradigma que ahora es estandar es la forma computacional de la programacion dinamica,
El Paradigma de la programacion dinamica resuelve un problema dandole a los datos
asignados por la primera iteracion, resolviendo con esto todos los datos mas pequeños, el
Algoritmo de Cocke encontro con éxito todos los analisis gramaticales de todas las
subcadenas de datos, en esta aplicación conceptual, el problema se convirtio en algo trivial,
el algoritmo resultante fue el primero, que corrio uniformemente en tiempo polinomial.

Paralelamente, despues de varios analisis de bajo perfil incorrectos, Yo ataque el problema,
diseñando un analisis correcto, inventando el paradigma de encontrar una organización de
procesadores hiperbolicos similar a una organización humana de contratacion de empleados,
y de descarte de subordinados, eso pudo resolver el problema, y luego simulando el
comportamiento de dicha simulacion, la simulacion de dichos procesos de recursion, me
llevo al uso de corutinas recursivas como una estructura de control, despues encontre que
otros programadores con dificultad de combinacion de problemas, por ejemplo Gelertner
con su Maquina probatoria del Teorema Geometrico, aparentemente invento una estructura
de control similar.

La Experiencia de John Cocke, y la mia han ilustrado que la probabilidad de continuar
avanzando en programacion requiere la invencion continua, la elaboracion , y la
comunicación de nuevos paradigmas.

Un Ejemplo de la elaboracion efectiva de un paradigma es el trabajo de Shortliffe y Davis
en el programa MYCIN, que con un diagnostico efectivo y recomendando medicacion para
infecciones bacterianas, MYCIN fue un sistema basado en reglas, basado en una larga lista
de reglas independientes, cada una con una condicion comprobada de aplicabilidad y con
una resultante accion simple cuando la condicion fue satisfecha.

El Programa TEIRESIAS de Davis modifica el desempeño del MYCIN, el programa
TEIRESIAS elabora un paradigma de trazar un soporte responsable de un resultado no
deseado, a traves de las reglas y condiciones que lo permitian, hasta que una regla que no
satisfaciera daria resultados no satisfactorios de cuando una hipotesis valida haya sido
alcanzada, por esto mismo ha sido tecnicamente posible para un experto en medicina quien
no es un programador experto para mejorar las capacidades de diagnostico del MYCIN,
mientras no habia nada en el MYCIN que pudiera ser codificado en la forma tradicional de
arboles usando transferencias condicionadas, es el uso del paradigma basado en reglas, con
su subsecuente elaboracion que hace que la mejora de la interactividad del programa sea
posible.
Con los avances del arte general de la programacion, esto requiere la invencion continua y
la elaboracion continua de paradigmas, el avance del arte del programador requiere la
expansion de su repertorio de paradigmas, en mi propia experiencia de diseños de
algoritmos especialmente complicados, he diseñado una tecnica que ayuda en gran manera
en expander mis propias capacidades, despues de resolver un problema complicado, lo
resolvi de nuevo desde ceros, retractandose unicamente del fondo de la solucion anterior,
he repetido esto hasta que la solucion ha sido mas clara y mas directa de lo que yo esperaba,
tambien estuve mirando una regla general para atacar problemas similares, eso hizo que yo
me aproximaba al problema dado de una forma mas eficiente que la primera vez, ademas
hay una regla de valores permanentes, buscando una regla general fui llegando al analisis
algoritmico basado en corutinas recursivas, al metodo general de escribir programas no
determinados, en el cual son transformados de una macroexpansion a una determinacion
convencional, este paradigma despues fue encontrado siendo usado en la aparentemente no
descubierta del problema resuelt por computadores en la inteligencia artificial
encontrandose este insertado en los lenguajes de programacion PLANNER,
MICROPLANNER y QA4.

La adquisicion de nuevos paradigmas por los programadores individuales pueden ser
sugeridos en lecturas por programas de otras personas, pero esta sujeto a la limitacion que
los asociados a los mismos, estan probablemente elegidos para su propia compatibilidad
con el conglomerado del paradigma local, Una evidencia para esto es la frecuencia en que
nuestras industrias lo promocionan, pero no para los programadores, pero los
programadores en FORTRAN, o los programadores de COBOL, las reglas del FORTRAN
pueden ser aprendidas en pocas horas, los paradigmas asociados toman mucho mas tiempo,
tanto como para aprender y desaprender.

El contacto con la programacion escrita bajo convenciones Alienigenas podria ayudar,
visitando el Centro Tecnologico de Massachusetts en este año sabatico, pude ver
numerosos ejemplos del poder de la programacion con programadores en LISP que se
obtuvieron mediante estructuras de datos simples, que tambien es utilizada como una
estructura sintactica uniforme para todas las funciones y operaciones que aparecen en
programas, con la capacidad de manipular programas como datos, aunque mi entusiasmo
previo ha sido con lenguajes ricos en sintaxis como la Familia ALGOL, ahora veo
claramente la fuerza de Minsky en la lectura Turing de 1970, en donde se argumenta que la
uniformidad del LISP en su estructura y poder de auto confiabilidad que le da al
programador capacidades que cuyo contedido pueden sacrificar la forma visual. Me
gustaria llegar a algunas sintesis de esas aproximaciones.
Eso me recuerda una verdad que note cuando entre al campo computacional en 1956, que
todo el mundo queria diseñar un nuevo lenguaje de programacion, en las palabras escritas
en el muro de la oficina de graduados de la Universidad de Stanford, ³Me gustaria mejor
escribir programas para ayudar en la escritura de programas que solo escribir programas´,
evaluando cada año las cosechas de nuevos lenguajes de programacion es de mucha ayuda
el clasificarlos todos en una extension que les permita un uso apropiado y efectivo de
paradigmas de la programacion, encontraremos que hay un vasto numero de ellos, Cordell
Green, encontro que la generacion mecanica de la busqueda simple y organizando
algoritmos como la simple organización y el Quicksort, requieren cientos de reglas, muchos
de ellos probablemente paradigmas familiares para muchos programadores, aun asi nuestos
lenguajes de programacion no nos dan ayudas, o nos dan algunos consejos usando aun
lenguajes familiares o de bajo nivel, algunos ejemplos estan a continuacion.

Supongamos que estamos simulando la dinamica de la poblacion bajo el sistema predador-
presa ± lobos y conejos, talvez. Aquí tenemos dos ecuaciones.

W´= f(W,R)

R´ = g(W,R)

Quienes dan los numeros de los lobos y conejos al final de cada periodo de tiempo, como
una funcion de los numeros al comienzo del peridodo.

Un Error comun de principiante es el escribir:

Para I : = -------- Haga

       Comienzo

       W:=f(W,R)

       R:=g(W,R)

       Fin
Donde g es erroneamente evaluado usando el valor modificado de W, para hacer al
programa funcionar se debe escribir:

Para I := --------Haga

       Comienzo

       Real Temp;

       Temp:=f(W,R)

       R:=g(W,R)

       W:=Temp

       Fin



El principiante esta bien en creer que no tenemos que hacer esto, uno de los paradigmas
mas comunes, como la simulacion del Predador ± Presa, es una asignacion simultanea de
nuevos valores hacia las componentes de vectores ya establecidos, Es bastante dificil para
cualquier lenguaje que tenga un operador para asignaciones simultaneas, Debemos en lugar
de eso mirar el desperdicio de tiempo mecanico, y una probabilidad muy alta de cometer
errores es de introducir uno o mas variables temporales y desviar los valores hacia de ellos.

Otra vez miremos este problema simple:

³Leer lineas de texto hasta que una linea completamente blanca sea encontrada, Eliminar
redundancias en blanco entre las palabras, imprima el texto, treinta caracteres en una linea
sin romper palabras entre lineas´.

Por que escribir e imprimr son expresiones naturales utilizando la iteracion, y por que las
iteraciones de escritura no se anidan con las iteraciones de impresión, el problema es
sorprendentemente dificil de programar, en muchos de los lenguajes de programacion, los
Principiantes toman 3 o 4 mas veces de tiempo con instructores expertos, terminando con
un desorden o con una estructura hecha en casa utilizando incrementos explicitos y
ejecuciones condicionales para simular algunas de las iteraciones deseadas.

El problema es naturalmente formulado por descomposicion entre tres corutinas de
comunicación , para ingreso de datos, transformacion, y una impresión de una cadena de
caracteres, pero exceptuando la simulacion de lenguajes, pocos lenguajes de programacion,
tienen una estructura de control de corutinas adecuada para permitir programar el problema
de una via natural.
Cuando un lenguaje hace un paradigma conveniente, Yo debo decir que el lenguaje ³apoya´
el paradigma, cuando un lenguaje hace un paradigma fehaciente pero no conveniente, debo
decir que que el lenguaje ³apoya muy debilmente´ el paradigma, como los dos anteriores
ejemplos lo comprueban, la mayoria de lenguajes solo apoyan muy debilmente
asignaciones simultaneas o no las apoyan, aunque los mecanismos requeridos son mas
simples y mas utiles que en ese entonces debo decir que los procedimientos recursivos
llamados por nombre, implementados en la Familia ALGOL 17 años atrás.

Aun en los paradigmas de la programacion estructurada esta muy debilmente apoyada por
varios de los lenguajes de programacion, para escribir una solucion para una ecuacion
simultanea que uno diseña , uno debe escribir lo siguiente.

Programa_Principal

       Inicio

       Triangulizar;

       Vuelve_Substitucion

       Fin

Vuelve_Substitucion

       Para I := Paso N -1 Hasta 1 Haga

                Resolver_Para_Variable(I)

Resolver_Para_Variable

___

___

Triangular

___

___

Procedimientos para matematicas de multiple precision

Procedimientos para matematicas de funcion racional

Declaracion de arreglos.
En la mayoria de lenguajes, uno podria no presentar el programa principal, declaracion de
procedimientos y datos en este orden, algunos analisis de mano humana y en medios de
lectura mecanicos son usualmente requeridos mas alla de eso cualquier variable ademas de
los procedimientos de multiple precision deben ser globales para cada parte del programa
en donde la matematica de precision multiple pueda ser hecha, por eso mismo tambien
permitiria alguna modificacion accidental contaria al principio de ocultar informacion,
finalmente el desenvolvimiento de un problema en una hiperbola de procedimientos
tipicamente resulta en un codigo bastante ineficaz, aun entre todos los procedimientos,
siendo llamados desde solo un lugar, podria ser eficiente implementadolo por
macroexpansion.

Una paradigma en un nivel alto de abstraccion, que el paradigma de la programacion
estructurada es la construccion de una hiperbola de lenguajes, donde los programas en el
nivel mas alto opera con los objetos mas abstractos, y son llevados a programas en el
siguiente lenguaje de mas bajo nivel. Ejemplos incluyen los numerosos casos de lenguajes
de manipulacion de formulas que han sido cosntruidos en el lenguaje de alto nivel LISP,
Fortran, y otros lenguajes. Muchos de nuestros lenguajes de bajo nivel fallan en dar apoyo
como en las superestructuras, For ejemplo sus errores de diagnostico del sistema son
usualmente repartidos en concreto, por eso mismo los mensajes del diagnostico son
inteligentemente usados unicamente en referencia hacia los programas hechos en bajo nivel.

Yo creo que el avance continuo de la programacion como una nave requiere desarrollo y la
diseminacion de lenguajes quienes apoyan los mayores paradigmas de las comunidades de
usuarios, el diseño de un lenguaje debe ser precedido por la enumeracion de esos
paradigmas incluyendo un estudio de las deficiencias en la programacion deben ser
precedidos por la enumeracion de esos paradigmas incluyendo un estudio de las
deficiencias en la programacion causado por el descarte de paradigmas sin soporte, no me
satisfacen las extensiones de nuestros lenguajes como las variantes de registros y
herramientas de poder de Pascal, a su vez como los paradigmas que he hablado de muchos
otros premanecen si apoyo o debilmente apoyado, si hubiera una ciencia de diseñor de
programacion, probablemente consistiria de muchos lenguajes que se asemejan hacia los
metodos de diseño que apoyan.

No quiero implicar que el apoyo a los páradigmas esta limitado a lo que puedan hacer
nuestros lenguajes de programacion, el Ambiente completo es que mientras que
programamos, diagnosticamos sistemas, sustemas de archivos, editamos, todo eso puede
ser analizado como soporte o fallar al soporte del espectro o los diseños de diseño de los
programas. Hay una esperanza de que esto pueda ser reconocido, por ejemplo trabajo
reciente en el IRIA en Francia y otras partes han implementados editores que siempre estan
pendientes de la estructura de los programas que editan, Cualquiera que haya intentado
hace una simple tarea como cambiar cualquier accion de X como un identificador en un
programa sin cambiar inadvertidamente todos los demas X, apreciara esto.
Ahora yo quiero hablar acerca de que nosotros enseñamos como programadores de
computadores. Parte de nuestra infortunada obsesion con estos contenidos, cuando Minsky
deploro su lectura Turing, aparentemente en nuestras tipicas elecciones de lo que tenemos
que enseñar. Si yo le pregunto a otro porfesor que es lo que enseña en el curso de la
introduccion de la programacion, cualquier cosa que responda dira que orgullosamente
³Pascal´ o diferentemente ³Fortran´, Yo se que es lo que es enseñar gramatica, un grupo de
reglas semanticas y algunos algoritmos ya terminados, dejando a los estudiantes que
descubran por ellos mismos algunos procesos del diseño. Aun en los textos que se basan en
los paradigmas de programacion estructurada, mientras dan el el camino hacia el mas alto
nivel, lo que podriamos llamar una ³historia´ de niveles de diseño de programas, e incluso
no dando ayudas a niveles intermedios, es lo que podriamos llamar un nivel ³paragrafo´.

Yo creo que es posible enseñar muy explicitamente un juego de metodos sistematicos para
todos los niveles de diseño de programas, y que los estudiantes ya experimentados tienen
ya un largo camino recorrido que los que fueron aconsejados convencionalmente por los
que estudiaron muy bien los programas ya terminados.

Algunos ejemplos de lo que tenemos que enseñar a continuacion.

Cuando yo introduzco a los estudiantes las capacidades de ingreso de datos a los lenguajes
de programacion, yo introduzco tambien un paradigma estandar para ingreso de datos
interactivo, en forma de una macroinstruccion llamada Linea_Leer_Comprobar_Expandir,
que lee hasta que todos los datos de ingreso satisfagan una prueba de validez, luego se
expande en la salida de datos. Esta madro es en un nivel mismo usando un paradigma de
iteracion y salida de datos. Al mismo tiempo desde que lee una vez mas hasta que diga
³Datos No Validos´, esto hace una instancia a nivel general sobre el paradigma
previamente mostrado para el salto que se ejecuta ³n y medio tiempo´.

Linea_Leer_Comprobar_Expandir: Se argumenta que es una cadena

Linea, Una variable V para ser leida, y una condicion MAL, que caracterizaria malos datos.

Imprima_en_Terminal(Linea)

Lea_en_terminal(V)

Mientras Mal(V) Haga

       Comienzo

       Imprima_en_terminal(³Datos No Validos´)

       Leer_desde_terminal

       Fin
Imprima_en_Archivo(V)



Ademas en un alto nivel hace instancia de las responsabilidades del prgramador a traves del
uso del programa incluyendo la idea de que cada componente de un programa deberia ser
protegido desde el ingreso de datos por cualquier componente que no ha sido diseñado.

Howard Shrobe y otros miembros del grupo de Aprendices del MIT tuvieron éxito
enseñandole a sus estudiantes principiantes, un paradigma de gran utilidad lo que ellos
llaman generar/filtro/acumular. Los estudiantes aprendendieron a reconocer varios
problemas superficiales que eran poco similares como los que consistian en enumerar los
elementos de un grupo, filtrando un subgrupo, y acumulando algunas funciones de los
elementos del subgrupo, el lenguaje MACLISP, usado por los estudiantes soporta el
Paradigma, los estudiantes solo hicieron el generador, el filtro y el acmumulador.

La simulacion de Predador-Presa, que mencione anteriormente es ademas una instancia de
un paradigma general, el paradigma de estado-maquina, el Paragrima estado-maquina
tipicamente envuelve el representar el estado de la computacion por los grupos de unos
valores ya guardados Si el estado es complejo, la funcion de la transicion, requiere un
diseño de un paradigma para dar asignaciones simultaneas, particulamente desde que
muchos de los lenguajes solo dan apoyo muy debil a la hora de dar asignaciones
simultaneas, Para ilustrarlo queremos computar:

Pi / 6 = arcsin(1/2)=1/2.1+1/2^3.2.3 + 1.3/2^52.4.5+1.3.5/2^7.2.4.6.7+ «.

Donde se subrayan las partes de cada sumando que son bastante utiles in computar la
siguiente parte a la derecha. Sin describir el diseño el paradigma entero para cada proceso,
una parte del diseño del estado de transicion es sistematicamaticamente una manera de
entrar asi:

Q=1.3/2^5.2.4         C=5

S=1/2+1/2^3.2.3+1.3/2^5.2.4.5

Hacia:

Q =1.3.5/2^7.2.4.6    C =7

S =1/2+«..+1.3.5/2^7.2.4.6.7
El programador experimentado ha internalizado sus pasos para todos los casos complejos se
hace de una manera inconsciente, para el principiante, mirando el paradigma explicito le da
la habilidad de atacar los problemas de la maquina de estado de una forma mas compleja
que lo pudiera habido saber sin ninguna ayuda, y lo mas importante le da la confianza de
identificar otros paradigmas muy utiles por si solo.

Muchos de los algoritmos clasicos encontrados en textos de programacion de computadores,
pueden ser vistos como instancias de paradigmas de origen, la Regla de Simpson es la
instancia de la extrapolacion hacia los limites, la eliminacion Gaussiana es la solucion del
problema de la descendencia recursiva, transformandola en una forma iterativa, La union de
la organización es una instancia del Paradigma del Divide y Venceras, para cada algoritmo
clasico uno puede preguntarse, ³como lo pude inventar´, y recuperar lo que puede ser un
paradigma clasico equanime.

Para agregar my mensaje para el programador serio es invertir una parte de su tiempo de
trabajo examinando y refinando sus propios metodos, Aun los programadores mas duros
siempre tienen dificultades para aprender algunos metodos futuros y algunos pasados, la
abstraccion metodologica es una forma muy sabia de investigacion a largo plazo.

Del profesor al programador, hay aun mas y lo digo: identifiquen los paradigmas que
ustedes usan, todo lo que puedan cuando los expliquen explicitamente, ellos pueden servirle
a sus estudiantes cuando Fortran reemplazo el latin y al Sanskrit como las arquitecturas de
las lenguas muertas.

Para el diseñador de los lenguajes del programador Yo les digo: A menos que puedan
apoyar los paradigmas que yo uso cuando yo programo, o al menos apoyar mi extension en
su lenguaje dentro de uno que pueda apoyar mis metodos de programacion, No necesito sus
nuevos y brillantes nuevos lenguajes, como un automovil viejo o una casa, el viejo lenguaje
tiene sus limitaciones, he aprendido a vivir con ello. Para persuadirme en el merito de su
lenguaje debe mostrame como construir programas con ello, No los quiero desanimar en el
diseño de nuevos lenguajes, Quiero animar a los diseñadores de lenguajes a ser estudiantes
serios en los detalles del proceso de diseño.

Gracias, miembros de la ACM por nombrarme a mi como la compañía de los hombres
destinguidos quienes son mis predecesores en las lecturas de Turing, Nadie alcanza dicha
posicion sin ayuda. Les debo muchas gratitudes a varios, especialmente a 4 hombres: a Ben
Mittman quien antes en mi carrera me ayudo y me animo a perseguir el lado cientifico y
escolar de mi interes en computacion, a Herb Simon, el hombre del Renacimiento en
nuestra posicion, cuyas conversaciones es una educacion, tambien para George Forsythe,
quien me dio a mi un paradigma para la enseñanza de la computacion, y para mi colega
Donald Knuth quien ha sido un ejemplo distinguido en tener muchos excelentes
estudiantes egresados donde yo he pensado y he aprendido mucho de lo que he enseñado.
A todos ustedes estoy agradecido y muy Honrado.

Recibido, Abril de 1979.

Más contenido relacionado

Destacado

Unidad de titulación.
Unidad de titulación.Unidad de titulación.
Unidad de titulación.Willian Quispe
 
The colors around us
The colors around usThe colors around us
The colors around uskuboajuro
 
Uce paradigma interpretativo, julio 2016
Uce paradigma interpretativo,  julio 2016Uce paradigma interpretativo,  julio 2016
Uce paradigma interpretativo, julio 2016OrtegaJaz93
 
Paradigmas de la investigación
Paradigmas de la investigaciónParadigmas de la investigación
Paradigmas de la investigaciónKaren Muñoz
 
Paradigma sociocrítico
Paradigma sociocríticoParadigma sociocrítico
Paradigma sociocríticojavier
 
Sampieri metodos mixtos
Sampieri metodos mixtosSampieri metodos mixtos
Sampieri metodos mixtosYAS Arias
 
El concepto de paradigma en thomas kuhn
El concepto de paradigma en thomas kuhnEl concepto de paradigma en thomas kuhn
El concepto de paradigma en thomas kuhnMartha Guarin
 

Destacado (9)

Unidad de titulación.
Unidad de titulación.Unidad de titulación.
Unidad de titulación.
 
The colors around us
The colors around usThe colors around us
The colors around us
 
Uce paradigma interpretativo, julio 2016
Uce paradigma interpretativo,  julio 2016Uce paradigma interpretativo,  julio 2016
Uce paradigma interpretativo, julio 2016
 
Paradigmas de la investigación
Paradigmas de la investigaciónParadigmas de la investigación
Paradigmas de la investigación
 
Paradigma sociocrítico
Paradigma sociocríticoParadigma sociocrítico
Paradigma sociocrítico
 
Enfoque mixto
Enfoque mixtoEnfoque mixto
Enfoque mixto
 
Sampieri metodos mixtos
Sampieri metodos mixtosSampieri metodos mixtos
Sampieri metodos mixtos
 
El concepto de paradigma en thomas kuhn
El concepto de paradigma en thomas kuhnEl concepto de paradigma en thomas kuhn
El concepto de paradigma en thomas kuhn
 
Los metodos mixtos
Los metodos mixtosLos metodos mixtos
Los metodos mixtos
 

Similar a 49949045 los-paradigmas-de-la-programacion

TIC en el Diseño, Desarrollo y Gerencia del Currículo
TIC en el Diseño, Desarrollo y Gerencia del CurrículoTIC en el Diseño, Desarrollo y Gerencia del Currículo
TIC en el Diseño, Desarrollo y Gerencia del CurrículoHector Conde
 
Metodologia
MetodologiaMetodologia
Metodologiagfh
 
LI_1164_140518_A_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdf
LI_1164_140518_A_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdfLI_1164_140518_A_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdf
LI_1164_140518_A_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdfCESAR ROGELIO TEJADA CASTAÑEDA
 
Programacion orientada objetos-1
Programacion orientada objetos-1Programacion orientada objetos-1
Programacion orientada objetos-1Scott Chavez
 
Icesi investigacion scratch fase I
Icesi investigacion scratch fase IIcesi investigacion scratch fase I
Icesi investigacion scratch fase ICodemás
 
inteligencia artificial
inteligencia artificial inteligencia artificial
inteligencia artificial Isaias Ventura
 
lenguaje y herramientas
lenguaje y herramientaslenguaje y herramientas
lenguaje y herramientasivan penagos
 
Investigacion unidad 5.docx
Investigacion unidad 5.docxInvestigacion unidad 5.docx
Investigacion unidad 5.docxneyian
 
2.4 DISEÑO BASADO EN PATRONES.pptx
2.4 DISEÑO BASADO EN PATRONES.pptx2.4 DISEÑO BASADO EN PATRONES.pptx
2.4 DISEÑO BASADO EN PATRONES.pptxGonzaloMartinezSilve
 
Unidad III documento
Unidad III documentoUnidad III documento
Unidad III documentoVictor Manu-l
 
LI_1167_050918_A_Introduccion_Programacion_Plan2016.docx
LI_1167_050918_A_Introduccion_Programacion_Plan2016.docxLI_1167_050918_A_Introduccion_Programacion_Plan2016.docx
LI_1167_050918_A_Introduccion_Programacion_Plan2016.docxCESAR ROGELIO TEJADA CASTAÑEDA
 

Similar a 49949045 los-paradigmas-de-la-programacion (20)

TIC en el Diseño, Desarrollo y Gerencia del Currículo
TIC en el Diseño, Desarrollo y Gerencia del CurrículoTIC en el Diseño, Desarrollo y Gerencia del Currículo
TIC en el Diseño, Desarrollo y Gerencia del Currículo
 
Metodologia
MetodologiaMetodologia
Metodologia
 
Contexto de la Programación
Contexto de la Programación Contexto de la Programación
Contexto de la Programación
 
LI_1164_140518_A_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdf
LI_1164_140518_A_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdfLI_1164_140518_A_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdf
LI_1164_140518_A_Analisis_Diseno_Implantacion_Algoritmos_Plan2016.pdf
 
Programacion orientada objetos-1
Programacion orientada objetos-1Programacion orientada objetos-1
Programacion orientada objetos-1
 
Comunicación y colaboración
Comunicación y colaboraciónComunicación y colaboración
Comunicación y colaboración
 
Icesi investigacion scratch fase I
Icesi investigacion scratch fase IIcesi investigacion scratch fase I
Icesi investigacion scratch fase I
 
inteligencia artificial
inteligencia artificial inteligencia artificial
inteligencia artificial
 
Desarrollo en espiral
Desarrollo en espiralDesarrollo en espiral
Desarrollo en espiral
 
Comunicacion y colaboracion
Comunicacion y colaboracionComunicacion y colaboracion
Comunicacion y colaboracion
 
Comunicacion y colaboracion
Comunicacion y colaboracionComunicacion y colaboracion
Comunicacion y colaboracion
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
3.1 tommas-word
3.1 tommas-word3.1 tommas-word
3.1 tommas-word
 
Programaciòn
ProgramaciònProgramaciòn
Programaciòn
 
Poa Borrador
Poa BorradorPoa Borrador
Poa Borrador
 
lenguaje y herramientas
lenguaje y herramientaslenguaje y herramientas
lenguaje y herramientas
 
Investigacion unidad 5.docx
Investigacion unidad 5.docxInvestigacion unidad 5.docx
Investigacion unidad 5.docx
 
2.4 DISEÑO BASADO EN PATRONES.pptx
2.4 DISEÑO BASADO EN PATRONES.pptx2.4 DISEÑO BASADO EN PATRONES.pptx
2.4 DISEÑO BASADO EN PATRONES.pptx
 
Unidad III documento
Unidad III documentoUnidad III documento
Unidad III documento
 
LI_1167_050918_A_Introduccion_Programacion_Plan2016.docx
LI_1167_050918_A_Introduccion_Programacion_Plan2016.docxLI_1167_050918_A_Introduccion_Programacion_Plan2016.docx
LI_1167_050918_A_Introduccion_Programacion_Plan2016.docx
 

49949045 los-paradigmas-de-la-programacion

  • 1. Los Paradigmas de la Programacion Roberrt W. Floyd Universidad de Stanford Paradigma: Patron, Ejemplo, para exhibir al lado, mostrar lado a lado Un Patron , Ejemplo o ejemplos. 1752, J. Gill : La Arquitectura, el paradigma, el ejemplo, la idea, de acuerdo a todas las cosas que han sido hechas. (Del Diccionario de Ingles de Oxford). Hoy, yo quiero hablar acerca de los paradigmas de la programacion, como ellas afectan nuestro éxito como diseñadores de programas para computadores, como ellos podrian ser aconsejados, y como podrian ellos ser adentrados en nuestros lenguajes de programacion. Un ejemplo familiar de las paradigmas de proramacion es la tecnica de la programacion estructurada, que parece ser el paradigma dominante en la mayoria de metodologias de las la programacion, La programacion estructurada propuesta por Dijkstra, Wirth y Parnas entre otros consiste en dos fases. En la primera fase, en un diseño de los mejores o un refinamiento paso por paso, el problema es descompuesto en un pequeño numero de problemas mas simples, En la programacion la solucion de varias ecuaciones lineales, es decir por ejemplo el primer nivel de descomposicion podria interpretarse como una etapa de triangulacion de las ecuaciones, y un nivel posterior de substitucion de los sistemas ya triangulados. Dicha descomposicion es continua hasta que los subproblemas que salen sean lo suficientemente simples para lidiar con ellos directamente. En el ejemplo de que ecuaciones simultaneas, los procesos de sustitucion podria ser posteriormente descompuesta con un proceso de iteracion implicita de un proceso donde encuentra y guarda los valores de la variable ith de la ecuacion ith. Aun los procesos posteriores de descomposicion podrian requerir un algoritmo mas detallado.
  • 2. La segunda fase de la paradigma de la programacion estructurada, hace enfasis en objetos concretos y las funciones de la maquina para los objetos mas abstractos, y las funciones utilizadas en los modulos producen un diseño de los mejores, en el ejemplo de la ecuacion lineal los coeficientes de las ecuaciones, son las funciones racionales de una de las variables, nosotros debemos diseñar primero, una representacion aritmetica multiple y precisa, y luego proceder construir una representacion polinomica, con procedimientos matematicos propios, esta aproximacion esta referida como el metodo de niveles de abstraccion de la informacion oculta. El paradigma de la programacion estructurada no significa que deba ser universalmente aceptada, lo que si implica es que debe profundizar su contexto para facilitar los problemas mas dificiles. Otros paradigmas de alto nivel de tipos mas especializados, como los tipos de Ramificacion y Acotacion ademas del conocido como Divide y Venceras, tecnicas que aun siguen siendo muy escenciales, Aun asi los paradignas de la programacion estructurada sirven para extender aun mas los poderes del diseño permietiendo la construccion de programas que son muy complicados para ser diseñados eficientemente y que tengan una confiabilidad sin un soporte metodologico. Yo estoy seguro que el estado actual tan refinado de la programacion de computadores refleja inconsistencias en nuestro inventario de paradigmas, en nuestro conocimiento de paradigmas existentes, en la forma en que los lenguajes de programacion apoyan,o en el fracaso de apoyar los paradigmas de las comunidades de usuarios. La Programacion de Computadores Refinada, ha sido recientemente referida por Robert Balzer de esta forma : ³Es bien conocido que el software estaba en un estado muy bajo, Es poco factible, es irresponsable, costoso e ineficiente hacer cambios de software, ademas desde que ha sido una labor muy extensa, la situacion se deteriorara a su vez que la demanda se incrementara y los costos aumentaran, ³, esto suena como el Famoso ³crisis de software´ como su termino mas apto. Thomas S. Kuhn en su ³Estructura de las Revoluciones Cientificas´, ha descrito las revoluciones cientificas de los siglos anteriores asi como enfatiza los cambios en los paradigmas dominantes, algunas de las obervaciones de Kuhn parecen apropiadas para nuestro campo, de los Textos cientificos que se presentan los siguientes conocimientos a los Estudiantes, Kuhn escribe:
  • 3. ³Estos textos tienen por ejemplo, que la implicacion del contenido de la siencia esta ejemplificado por las observaciones, leyes y teorias descritas en estas lineas´ De esta misma forma, muchos textros de programacion de computadores implican que el contenido de la programacion es el conocimiento de los alogoritmos y las definiciones del lenguaje descrito en estas lineas. Kuhn Tambien Escribe : ³El estudio de los paradigmas, incluyendo varios de los mas especializados que han sido nombrados anteriormente, son los que principalmente preparan a los estudiantes para la membresia en las comunidades de las ciencias particulares,con los que practicaran posteriormente, porque se uniran a hombres que aprendieron las bases de este campo bajo los mismos conceptos en concreto, su practica consecuente podria provocar desacuerdos sobre los fundamenttos´. En la ciencia computacional, uno encuentra muchisimas comunidades, cada una habla su propio lenguaje y usa sus propios paradigmas, de hechos los lenguajes de programacion tipicamente sugieren el uso de algunos paradigmas y no sugieren el uso de otros. Ahí ciertas escuelas que se especializan en programacion de LISP, programacion en APL , programacion en ALGOL, entre otros, Algunos enfatizan el fujo de datos y otros el control de flujo de datos, como la informacion estructurada de cualquier programa, la recursion y la iteracion, copiar y compartir estructuras de datos, llamadas por nombre y llamando por valores, todas tienen su adeherencia. Otra vez de Kuhn: ³Los Miembros de la Vieja Escuela gradualmente desapareceran en parte dicha desaparicion es por la conversion de miembros hacia un nuevo paradigma, pero siempre habran personas que se siempre se adheriran hacia uno u otro de las viejas formas de ver las cosas, y ellos simplemente se saldran de la profesion, y por eso mismo ignoran su trabajo´. In Computacion no hay un mecanismo de lectura fuera de la profesion, yo Sospecho que principalmente se convierte en Managers de desarrollo de software. Balzer, en su consigna en contra de de la construccion de software profetizo que la programacion automatizada nos rescatara, Yo deseo que el éxito de los programadores Automaticos, pero por ahora solo se tiene que hacer una limpieza de nuestro establo, nuestra mejor esperanza es mejorar nuestras propias habilidades, yo creo que nuestra mejor oportunidad de mejorar la practica general de la programacion es la de cuidar nuestros paradigmas.
  • 4. En los primeros años de la decada del 60, el analisis de los lenguajes libres de contexto, fue un problema de presionar la importancia del desarrollo de la compilacion de la lingüística natural. Algoritmos publicados habian sido lentos e incorrectos, John Cocke manifesto que con ese poco esfuerzo, ha encontrado un algoritmo mas sencillo y mas rapido, basado en un paradigma que ahora es estandar es la forma computacional de la programacion dinamica, El Paradigma de la programacion dinamica resuelve un problema dandole a los datos asignados por la primera iteracion, resolviendo con esto todos los datos mas pequeños, el Algoritmo de Cocke encontro con éxito todos los analisis gramaticales de todas las subcadenas de datos, en esta aplicación conceptual, el problema se convirtio en algo trivial, el algoritmo resultante fue el primero, que corrio uniformemente en tiempo polinomial. Paralelamente, despues de varios analisis de bajo perfil incorrectos, Yo ataque el problema, diseñando un analisis correcto, inventando el paradigma de encontrar una organización de procesadores hiperbolicos similar a una organización humana de contratacion de empleados, y de descarte de subordinados, eso pudo resolver el problema, y luego simulando el comportamiento de dicha simulacion, la simulacion de dichos procesos de recursion, me llevo al uso de corutinas recursivas como una estructura de control, despues encontre que otros programadores con dificultad de combinacion de problemas, por ejemplo Gelertner con su Maquina probatoria del Teorema Geometrico, aparentemente invento una estructura de control similar. La Experiencia de John Cocke, y la mia han ilustrado que la probabilidad de continuar avanzando en programacion requiere la invencion continua, la elaboracion , y la comunicación de nuevos paradigmas. Un Ejemplo de la elaboracion efectiva de un paradigma es el trabajo de Shortliffe y Davis en el programa MYCIN, que con un diagnostico efectivo y recomendando medicacion para infecciones bacterianas, MYCIN fue un sistema basado en reglas, basado en una larga lista de reglas independientes, cada una con una condicion comprobada de aplicabilidad y con una resultante accion simple cuando la condicion fue satisfecha. El Programa TEIRESIAS de Davis modifica el desempeño del MYCIN, el programa TEIRESIAS elabora un paradigma de trazar un soporte responsable de un resultado no deseado, a traves de las reglas y condiciones que lo permitian, hasta que una regla que no satisfaciera daria resultados no satisfactorios de cuando una hipotesis valida haya sido alcanzada, por esto mismo ha sido tecnicamente posible para un experto en medicina quien no es un programador experto para mejorar las capacidades de diagnostico del MYCIN, mientras no habia nada en el MYCIN que pudiera ser codificado en la forma tradicional de arboles usando transferencias condicionadas, es el uso del paradigma basado en reglas, con su subsecuente elaboracion que hace que la mejora de la interactividad del programa sea posible.
  • 5. Con los avances del arte general de la programacion, esto requiere la invencion continua y la elaboracion continua de paradigmas, el avance del arte del programador requiere la expansion de su repertorio de paradigmas, en mi propia experiencia de diseños de algoritmos especialmente complicados, he diseñado una tecnica que ayuda en gran manera en expander mis propias capacidades, despues de resolver un problema complicado, lo resolvi de nuevo desde ceros, retractandose unicamente del fondo de la solucion anterior, he repetido esto hasta que la solucion ha sido mas clara y mas directa de lo que yo esperaba, tambien estuve mirando una regla general para atacar problemas similares, eso hizo que yo me aproximaba al problema dado de una forma mas eficiente que la primera vez, ademas hay una regla de valores permanentes, buscando una regla general fui llegando al analisis algoritmico basado en corutinas recursivas, al metodo general de escribir programas no determinados, en el cual son transformados de una macroexpansion a una determinacion convencional, este paradigma despues fue encontrado siendo usado en la aparentemente no descubierta del problema resuelt por computadores en la inteligencia artificial encontrandose este insertado en los lenguajes de programacion PLANNER, MICROPLANNER y QA4. La adquisicion de nuevos paradigmas por los programadores individuales pueden ser sugeridos en lecturas por programas de otras personas, pero esta sujeto a la limitacion que los asociados a los mismos, estan probablemente elegidos para su propia compatibilidad con el conglomerado del paradigma local, Una evidencia para esto es la frecuencia en que nuestras industrias lo promocionan, pero no para los programadores, pero los programadores en FORTRAN, o los programadores de COBOL, las reglas del FORTRAN pueden ser aprendidas en pocas horas, los paradigmas asociados toman mucho mas tiempo, tanto como para aprender y desaprender. El contacto con la programacion escrita bajo convenciones Alienigenas podria ayudar, visitando el Centro Tecnologico de Massachusetts en este año sabatico, pude ver numerosos ejemplos del poder de la programacion con programadores en LISP que se obtuvieron mediante estructuras de datos simples, que tambien es utilizada como una estructura sintactica uniforme para todas las funciones y operaciones que aparecen en programas, con la capacidad de manipular programas como datos, aunque mi entusiasmo previo ha sido con lenguajes ricos en sintaxis como la Familia ALGOL, ahora veo claramente la fuerza de Minsky en la lectura Turing de 1970, en donde se argumenta que la uniformidad del LISP en su estructura y poder de auto confiabilidad que le da al programador capacidades que cuyo contedido pueden sacrificar la forma visual. Me gustaria llegar a algunas sintesis de esas aproximaciones.
  • 6. Eso me recuerda una verdad que note cuando entre al campo computacional en 1956, que todo el mundo queria diseñar un nuevo lenguaje de programacion, en las palabras escritas en el muro de la oficina de graduados de la Universidad de Stanford, ³Me gustaria mejor escribir programas para ayudar en la escritura de programas que solo escribir programas´, evaluando cada año las cosechas de nuevos lenguajes de programacion es de mucha ayuda el clasificarlos todos en una extension que les permita un uso apropiado y efectivo de paradigmas de la programacion, encontraremos que hay un vasto numero de ellos, Cordell Green, encontro que la generacion mecanica de la busqueda simple y organizando algoritmos como la simple organización y el Quicksort, requieren cientos de reglas, muchos de ellos probablemente paradigmas familiares para muchos programadores, aun asi nuestos lenguajes de programacion no nos dan ayudas, o nos dan algunos consejos usando aun lenguajes familiares o de bajo nivel, algunos ejemplos estan a continuacion. Supongamos que estamos simulando la dinamica de la poblacion bajo el sistema predador- presa ± lobos y conejos, talvez. Aquí tenemos dos ecuaciones. W´= f(W,R) R´ = g(W,R) Quienes dan los numeros de los lobos y conejos al final de cada periodo de tiempo, como una funcion de los numeros al comienzo del peridodo. Un Error comun de principiante es el escribir: Para I : = -------- Haga Comienzo W:=f(W,R) R:=g(W,R) Fin
  • 7. Donde g es erroneamente evaluado usando el valor modificado de W, para hacer al programa funcionar se debe escribir: Para I := --------Haga Comienzo Real Temp; Temp:=f(W,R) R:=g(W,R) W:=Temp Fin El principiante esta bien en creer que no tenemos que hacer esto, uno de los paradigmas mas comunes, como la simulacion del Predador ± Presa, es una asignacion simultanea de nuevos valores hacia las componentes de vectores ya establecidos, Es bastante dificil para cualquier lenguaje que tenga un operador para asignaciones simultaneas, Debemos en lugar de eso mirar el desperdicio de tiempo mecanico, y una probabilidad muy alta de cometer errores es de introducir uno o mas variables temporales y desviar los valores hacia de ellos. Otra vez miremos este problema simple: ³Leer lineas de texto hasta que una linea completamente blanca sea encontrada, Eliminar redundancias en blanco entre las palabras, imprima el texto, treinta caracteres en una linea sin romper palabras entre lineas´. Por que escribir e imprimr son expresiones naturales utilizando la iteracion, y por que las iteraciones de escritura no se anidan con las iteraciones de impresión, el problema es sorprendentemente dificil de programar, en muchos de los lenguajes de programacion, los Principiantes toman 3 o 4 mas veces de tiempo con instructores expertos, terminando con un desorden o con una estructura hecha en casa utilizando incrementos explicitos y ejecuciones condicionales para simular algunas de las iteraciones deseadas. El problema es naturalmente formulado por descomposicion entre tres corutinas de comunicación , para ingreso de datos, transformacion, y una impresión de una cadena de caracteres, pero exceptuando la simulacion de lenguajes, pocos lenguajes de programacion, tienen una estructura de control de corutinas adecuada para permitir programar el problema de una via natural.
  • 8. Cuando un lenguaje hace un paradigma conveniente, Yo debo decir que el lenguaje ³apoya´ el paradigma, cuando un lenguaje hace un paradigma fehaciente pero no conveniente, debo decir que que el lenguaje ³apoya muy debilmente´ el paradigma, como los dos anteriores ejemplos lo comprueban, la mayoria de lenguajes solo apoyan muy debilmente asignaciones simultaneas o no las apoyan, aunque los mecanismos requeridos son mas simples y mas utiles que en ese entonces debo decir que los procedimientos recursivos llamados por nombre, implementados en la Familia ALGOL 17 años atrás. Aun en los paradigmas de la programacion estructurada esta muy debilmente apoyada por varios de los lenguajes de programacion, para escribir una solucion para una ecuacion simultanea que uno diseña , uno debe escribir lo siguiente. Programa_Principal Inicio Triangulizar; Vuelve_Substitucion Fin Vuelve_Substitucion Para I := Paso N -1 Hasta 1 Haga Resolver_Para_Variable(I) Resolver_Para_Variable ___ ___ Triangular ___ ___ Procedimientos para matematicas de multiple precision Procedimientos para matematicas de funcion racional Declaracion de arreglos.
  • 9. En la mayoria de lenguajes, uno podria no presentar el programa principal, declaracion de procedimientos y datos en este orden, algunos analisis de mano humana y en medios de lectura mecanicos son usualmente requeridos mas alla de eso cualquier variable ademas de los procedimientos de multiple precision deben ser globales para cada parte del programa en donde la matematica de precision multiple pueda ser hecha, por eso mismo tambien permitiria alguna modificacion accidental contaria al principio de ocultar informacion, finalmente el desenvolvimiento de un problema en una hiperbola de procedimientos tipicamente resulta en un codigo bastante ineficaz, aun entre todos los procedimientos, siendo llamados desde solo un lugar, podria ser eficiente implementadolo por macroexpansion. Una paradigma en un nivel alto de abstraccion, que el paradigma de la programacion estructurada es la construccion de una hiperbola de lenguajes, donde los programas en el nivel mas alto opera con los objetos mas abstractos, y son llevados a programas en el siguiente lenguaje de mas bajo nivel. Ejemplos incluyen los numerosos casos de lenguajes de manipulacion de formulas que han sido cosntruidos en el lenguaje de alto nivel LISP, Fortran, y otros lenguajes. Muchos de nuestros lenguajes de bajo nivel fallan en dar apoyo como en las superestructuras, For ejemplo sus errores de diagnostico del sistema son usualmente repartidos en concreto, por eso mismo los mensajes del diagnostico son inteligentemente usados unicamente en referencia hacia los programas hechos en bajo nivel. Yo creo que el avance continuo de la programacion como una nave requiere desarrollo y la diseminacion de lenguajes quienes apoyan los mayores paradigmas de las comunidades de usuarios, el diseño de un lenguaje debe ser precedido por la enumeracion de esos paradigmas incluyendo un estudio de las deficiencias en la programacion deben ser precedidos por la enumeracion de esos paradigmas incluyendo un estudio de las deficiencias en la programacion causado por el descarte de paradigmas sin soporte, no me satisfacen las extensiones de nuestros lenguajes como las variantes de registros y herramientas de poder de Pascal, a su vez como los paradigmas que he hablado de muchos otros premanecen si apoyo o debilmente apoyado, si hubiera una ciencia de diseñor de programacion, probablemente consistiria de muchos lenguajes que se asemejan hacia los metodos de diseño que apoyan. No quiero implicar que el apoyo a los páradigmas esta limitado a lo que puedan hacer nuestros lenguajes de programacion, el Ambiente completo es que mientras que programamos, diagnosticamos sistemas, sustemas de archivos, editamos, todo eso puede ser analizado como soporte o fallar al soporte del espectro o los diseños de diseño de los programas. Hay una esperanza de que esto pueda ser reconocido, por ejemplo trabajo reciente en el IRIA en Francia y otras partes han implementados editores que siempre estan pendientes de la estructura de los programas que editan, Cualquiera que haya intentado hace una simple tarea como cambiar cualquier accion de X como un identificador en un programa sin cambiar inadvertidamente todos los demas X, apreciara esto.
  • 10. Ahora yo quiero hablar acerca de que nosotros enseñamos como programadores de computadores. Parte de nuestra infortunada obsesion con estos contenidos, cuando Minsky deploro su lectura Turing, aparentemente en nuestras tipicas elecciones de lo que tenemos que enseñar. Si yo le pregunto a otro porfesor que es lo que enseña en el curso de la introduccion de la programacion, cualquier cosa que responda dira que orgullosamente ³Pascal´ o diferentemente ³Fortran´, Yo se que es lo que es enseñar gramatica, un grupo de reglas semanticas y algunos algoritmos ya terminados, dejando a los estudiantes que descubran por ellos mismos algunos procesos del diseño. Aun en los textos que se basan en los paradigmas de programacion estructurada, mientras dan el el camino hacia el mas alto nivel, lo que podriamos llamar una ³historia´ de niveles de diseño de programas, e incluso no dando ayudas a niveles intermedios, es lo que podriamos llamar un nivel ³paragrafo´. Yo creo que es posible enseñar muy explicitamente un juego de metodos sistematicos para todos los niveles de diseño de programas, y que los estudiantes ya experimentados tienen ya un largo camino recorrido que los que fueron aconsejados convencionalmente por los que estudiaron muy bien los programas ya terminados. Algunos ejemplos de lo que tenemos que enseñar a continuacion. Cuando yo introduzco a los estudiantes las capacidades de ingreso de datos a los lenguajes de programacion, yo introduzco tambien un paradigma estandar para ingreso de datos interactivo, en forma de una macroinstruccion llamada Linea_Leer_Comprobar_Expandir, que lee hasta que todos los datos de ingreso satisfagan una prueba de validez, luego se expande en la salida de datos. Esta madro es en un nivel mismo usando un paradigma de iteracion y salida de datos. Al mismo tiempo desde que lee una vez mas hasta que diga ³Datos No Validos´, esto hace una instancia a nivel general sobre el paradigma previamente mostrado para el salto que se ejecuta ³n y medio tiempo´. Linea_Leer_Comprobar_Expandir: Se argumenta que es una cadena Linea, Una variable V para ser leida, y una condicion MAL, que caracterizaria malos datos. Imprima_en_Terminal(Linea) Lea_en_terminal(V) Mientras Mal(V) Haga Comienzo Imprima_en_terminal(³Datos No Validos´) Leer_desde_terminal Fin
  • 11. Imprima_en_Archivo(V) Ademas en un alto nivel hace instancia de las responsabilidades del prgramador a traves del uso del programa incluyendo la idea de que cada componente de un programa deberia ser protegido desde el ingreso de datos por cualquier componente que no ha sido diseñado. Howard Shrobe y otros miembros del grupo de Aprendices del MIT tuvieron éxito enseñandole a sus estudiantes principiantes, un paradigma de gran utilidad lo que ellos llaman generar/filtro/acumular. Los estudiantes aprendendieron a reconocer varios problemas superficiales que eran poco similares como los que consistian en enumerar los elementos de un grupo, filtrando un subgrupo, y acumulando algunas funciones de los elementos del subgrupo, el lenguaje MACLISP, usado por los estudiantes soporta el Paradigma, los estudiantes solo hicieron el generador, el filtro y el acmumulador. La simulacion de Predador-Presa, que mencione anteriormente es ademas una instancia de un paradigma general, el paradigma de estado-maquina, el Paragrima estado-maquina tipicamente envuelve el representar el estado de la computacion por los grupos de unos valores ya guardados Si el estado es complejo, la funcion de la transicion, requiere un diseño de un paradigma para dar asignaciones simultaneas, particulamente desde que muchos de los lenguajes solo dan apoyo muy debil a la hora de dar asignaciones simultaneas, Para ilustrarlo queremos computar: Pi / 6 = arcsin(1/2)=1/2.1+1/2^3.2.3 + 1.3/2^52.4.5+1.3.5/2^7.2.4.6.7+ «. Donde se subrayan las partes de cada sumando que son bastante utiles in computar la siguiente parte a la derecha. Sin describir el diseño el paradigma entero para cada proceso, una parte del diseño del estado de transicion es sistematicamaticamente una manera de entrar asi: Q=1.3/2^5.2.4 C=5 S=1/2+1/2^3.2.3+1.3/2^5.2.4.5 Hacia: Q =1.3.5/2^7.2.4.6 C =7 S =1/2+«..+1.3.5/2^7.2.4.6.7
  • 12. El programador experimentado ha internalizado sus pasos para todos los casos complejos se hace de una manera inconsciente, para el principiante, mirando el paradigma explicito le da la habilidad de atacar los problemas de la maquina de estado de una forma mas compleja que lo pudiera habido saber sin ninguna ayuda, y lo mas importante le da la confianza de identificar otros paradigmas muy utiles por si solo. Muchos de los algoritmos clasicos encontrados en textos de programacion de computadores, pueden ser vistos como instancias de paradigmas de origen, la Regla de Simpson es la instancia de la extrapolacion hacia los limites, la eliminacion Gaussiana es la solucion del problema de la descendencia recursiva, transformandola en una forma iterativa, La union de la organización es una instancia del Paradigma del Divide y Venceras, para cada algoritmo clasico uno puede preguntarse, ³como lo pude inventar´, y recuperar lo que puede ser un paradigma clasico equanime. Para agregar my mensaje para el programador serio es invertir una parte de su tiempo de trabajo examinando y refinando sus propios metodos, Aun los programadores mas duros siempre tienen dificultades para aprender algunos metodos futuros y algunos pasados, la abstraccion metodologica es una forma muy sabia de investigacion a largo plazo. Del profesor al programador, hay aun mas y lo digo: identifiquen los paradigmas que ustedes usan, todo lo que puedan cuando los expliquen explicitamente, ellos pueden servirle a sus estudiantes cuando Fortran reemplazo el latin y al Sanskrit como las arquitecturas de las lenguas muertas. Para el diseñador de los lenguajes del programador Yo les digo: A menos que puedan apoyar los paradigmas que yo uso cuando yo programo, o al menos apoyar mi extension en su lenguaje dentro de uno que pueda apoyar mis metodos de programacion, No necesito sus nuevos y brillantes nuevos lenguajes, como un automovil viejo o una casa, el viejo lenguaje tiene sus limitaciones, he aprendido a vivir con ello. Para persuadirme en el merito de su lenguaje debe mostrame como construir programas con ello, No los quiero desanimar en el diseño de nuevos lenguajes, Quiero animar a los diseñadores de lenguajes a ser estudiantes serios en los detalles del proceso de diseño. Gracias, miembros de la ACM por nombrarme a mi como la compañía de los hombres destinguidos quienes son mis predecesores en las lecturas de Turing, Nadie alcanza dicha posicion sin ayuda. Les debo muchas gratitudes a varios, especialmente a 4 hombres: a Ben Mittman quien antes en mi carrera me ayudo y me animo a perseguir el lado cientifico y escolar de mi interes en computacion, a Herb Simon, el hombre del Renacimiento en nuestra posicion, cuyas conversaciones es una educacion, tambien para George Forsythe, quien me dio a mi un paradigma para la enseñanza de la computacion, y para mi colega Donald Knuth quien ha sido un ejemplo distinguido en tener muchos excelentes estudiantes egresados donde yo he pensado y he aprendido mucho de lo que he enseñado.
  • 13. A todos ustedes estoy agradecido y muy Honrado. Recibido, Abril de 1979.