Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Los Paradigmas de La Programacion
Los Paradigmas de La Programacion
Roberrt W. Floyd
Universidad de Stanford
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.
“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.
“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”.
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.
Comienzo
W:=f(W,R)
R:=g(W,R)
Fin
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.
“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.
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
Resolver_Para_Variable(I)
Resolver_Para_Variable
___
___
Triangular
___
___
Declaracion de arreglos.
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.
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, Una variable V para ser leida, y una condicion MAL, que caracterizaria malos datos.
Imprima_en_Terminal(Linea)
Lea_en_terminal(V)
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.
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.
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.