Vous êtes sur la page 1sur 12

PREFACIO

Est en contra de la esencia de la moderna educacin ensear a los nios a programar!, qu diversin existe en hacer planes, adquirir disciplina en organizar los pensamientos, atender a los detalles y aprender a ser autocrtico? -- Alan Perlis, Epigramas en Programacin

Muchas profesiones requieren alguna forma de programacin mediante computadora: contadores que programan hojas de clculo; fotgrafos que programan editores fotogrficos; msicos que programan sintetizadores, y programadores profesionales que instruyen computadoras, la programacin es una habilidad profesional necesaria. La programacin es ms que una actividad que responde a una vocacin profesional, la buena programacin es divertida, creativa, es una forma de expresar ideas abstractas en forma tangible; el diseo de programas requiere una serie de habilidades que son importantes para todas las profesiones: leer crticamente, pensar analticamente, sintetizar de forma creativa y atender cuidadosamente los detalles. De ah que se considere que el estudio del diseo de programas debe merecer el mismo nfasis, que en la educacin general se atribuyen a las matemticas y a la redaccin, o sea para decirlo de forma breve: Todos debemos aprender a programar! Pues si bien, por una parte, el diseo de programas desarrolla igual capacidad analtica que las matemticas, a diferencia de stas: la construccin de programas es un enfoque proactivo del aprendizaje. La interaccin con programas proporciona retroalimentacin inmediata y conduce a la exploracin, experimentacin y autoevaluacin. Es ms, el diseo de programas genera cosas tiles y divertidas, incrementando significativamente el sentido de logro, en comparacin con el aprendizaje matemtico, con base slo en el refuerzo, al realizar innumerables series de ejercicios.

Por otra parte, el diseo de programas desarrolla las mismas habilidades analticas que la lectura cuidadosa y la escritura en lengua natural; aun las ms humildes tareas de programacin son formuladas inicialmente como problemas verbales. Sin habilidades crticas de lectura, un estudiante no puede disear programas que cumplan determinadas especificaciones; a la vez, buenos mtodos de programacin propician que el estudiante formule, lgica y lingsticamente, sus pensamientos. Desarrollar buenos mtodos de programacin ayuda a organizar y expresar el pensamiento de forma apropiada en lenguaje natural.
La receta de diseo para funciones Anlisis del problema y definicin de datos Contrato, propsito y declaracin de efectos, encabezamiento Ejemplos Formato de funcin Definicin de funcin Pruebas Figura 1. Los pasos bsicos de una receta de diseo de programa

De ah que se haya emprendido el primer esfuerzo de presentar la programacin como el ncleo de la educacin general a nivel superior, siendo su centro de atencin el proceso de diseo que pasa de la declaracin de un problema a soluciones bien organizadas, a la vez que se minimiza el estudio de detalles de un lenguaje de programacin, el de los pormenores algortmicos, y el de dominios de aplicacin especficos. Centrarse en el proceso de diseo requiere de dos innovaciones radicales en los cursos introductorios. Un conjunto de orientaciones explcitas de diseo, pues si bien el currculo existente proporciona orientaciones como las de disear de arriba abajo, o que los programas sean estructurados, tales orientaciones son vagas y pobremente definidas. En cambio, la nocin de programacin que se promueve se apoya en orientaciones de diseo que guan paso a paso al estudiante desde el conjunto de oraciones que declaran un problema a la obtencin de una solucin computacional, mediante el desarrollo de productos intermedios bien definidos; en dicho proceso el estudiante aprende a leer, analizar y organizar problemas, adems de experimentar con ellos, as como a pensar de forma sistemtica. La segunda innovacin es un ambiente de programacin radicalmente nuevo, tradicionalmente los textos de programacin ignoran el papel del ambiente de programacin en el proceso de aprendizaje, suponiendo que los estudiantes accedan a un ambiente profesional; este libro proporciona un ambiente de programacin para principiantes, que crece al mismo ritmo conforme dominan el material, llegando a soportar un lenguaje capaz de realizar cualquier tarea de programacin, desde programacin a gran escala, hasta scripting. Esas orientaciones han sido formuladas como una serie de recetas de diseo de programas1 cada una de las cuales gua al programador novicio a travs del proceso completo de solucin de problemas; con recetas de diseo, el principiante casi nunca se queda deslumbrado ante un
1 Lectores cuya experiencia se apoya exclusivamente en lenguajes de programacin como C/C++, Basic, y Pascal deben leer procedimiento o mtodo, donde el prefacio menciona programa.

papel en blanco o ante la pantalla de la computadora, pues para avanzar siempre puede consultar una receta de diseo y orientarse con una serie de preguntas y respuestas. Se han creado recetas de diseo para identificar categoras de problemas. Cada una de las cuales se basa en las clases de datos empleados para representar la informacin relevante. A partir de la estructura de dicha descripcin, los estudiantes derivan programas mediante una lista de verificacin. La figura 1 muestra los seis pasos bsicos de una lista de verificacin de una receta de diseo. Cada uno de ellos genera como correspondientes productos intermedios: 1. La descripcin de la clase de datos del problema 2. La especificacin informal del comportamiento del programa 3. La ilustracin, con ejemplos, del comportamiento del programa 4. El desarrollo del formato u organizacin del programa 5. La transformacin del formato en una definicin completa, y 6. El descubrimiento de errores mediante pruebas. La diferencia mayor se relaciona con los pasos 1 y 4. Recetas como la mencionada, ayudan tanto a alumnos como profesores, a stos para evaluar la capacidad de anlisis de los alumnos, diagnosticar sus reas de oportunidad por desarrollar, y sugerir acciones remdiales especficas, empleando para ello los productos correspondientes a cada paso. Si el principiante se atora, el profesor puede inspeccionar los productos intermedios y determinar cul es el problema. Con base en dicho anlisis, el profesor puede orientar con relacin a un paso especfico de la receta, hacer las preguntas adecuadas, y recomendar ejercicios adicionales de prctica. Por qu todos debemos aprender a programar
Y mientras su imaginacin va dando cuerpo a objetos desconocidos, su pluma los convierte en formas y da a la nada impalpable un nombre y un espacio de existencia. -- Shakespeare, El sueo de una noche de verano V(i)

La aseveracin de que todos programan o deben programar podra parecer extraa, pues parecera que cada vez menos gente programa en la actualidad, ya que la mayora de los individuos emplean paquetes de aplicacin, que parecen no requerir ninguna programacin; aun los programadores emplean generadores de programas, paquetes que crean programas, por ejemplo, a partir de reglas de negocios, por qu alguien debera aprender a programar? La respuesta tiene dos partes, en primer lugar, si bien en realidad las formas tradicionales de programacin son tiles para unos cuantos individuos, programar segn lo entienden los autores es til para todos: tanto para la secretaria que emplea hojas de clculo como para el programador de avanzada, o sea, se tiene una nocin ms amplia de programacin que la 3

tradicional, lo cual se explica ms adelante. En segundo lugar, se busca difundir dicha idea de programacin mediante una tecnologa de intrusin mnima, mediante el desarrollo de habilidades de anlisis de problemas sin imponer una carga de notaciones y herramientas de programacin convencionales. A fin de comprender la programacin moderna, se puede considerar las hojas de clculo, uno de los paquetes de aplicacin ms populares, donde un usuario ingresa frmulas en una hoja y cada frmula describe cmo una celda A depende de otra B. As, cuando el usuario ingresa un nmero en B, la hoja calcula automticamente el contenido de la celda A. En hojas complejas, una celda puede depender de muchas otras y no slo de una. Otros paquetes de aplicacin requieren actividades similares, considrense los procesadores de palabras y las plantillas de documentos, stas especifican cmo crear un (o parte de un) documento a partir de palabras y oraciones por definir; cuando se proporcionan las palabras especficas, el procesador de palabras crea el documento mediante reemplazar nombres en las plantillas con palabras especficas. De forma parecida, alguien que realiza una bsqueda en la Web puede especificar qu palabras buscar, cmo se pueden vincular las palabras, y qu palabras evitar. En este caso, el resultado depende del cach de la mquina de bsqueda de pginas web y de la expresin de bsqueda del usuario. Por ltimo, emplear un generador de programas de muchas formas depende de las mismas habilidades requeridas en los paquetes de aplicacin; un generador de programas crea un programa en un lenguaje de programacin tradicional, tal como C++ o Java, a partir de descripciones de alto nivel, como pueden ser reglas de negocios o leyes cientficas. Dichas reglas relacionan cantidades, ventas, registros de inventarios y as especifican clculos; otras partes del programa, en particular cmo interactuar con el usuario y cmo almacenar datos en el disco de la computadora, son generadas con poca o ninguna intervencin de parte del usuario. Todas estas actividades instruyen a un software de una computadora que realice algo para nosotros, a veces dicho software emplea notacin cientfica, a veces alguna forma estilizada de lenguaje natural, otras una determinada notacin de programacin. Todas ellas son alguna forma de programacin, cuya esencia se resume en dos conceptos: 1. Relacionar una cantidad con otra, y 2. Evaluar una relacin mediante sustituir valores por nombres. Los dos conceptos caracterizan tanto programar al nivel ms bajo, en el lenguaje nativo de la computadora, o en un lenguaje de moda como Java. Un programa relaciona entradas a salidas; y cuando un programa es empleado con entradas especficas, la evaluacin sustituye nombres por valores concretos. Nadie puede predecir qu clases de paquetes de aplicacin existirn en cinco o diez aos, pero los paquetes de aplicacin seguirn requiriendo alguna forma de programacin, preparar a los estudiantes para tales actividades de programacin, demanda tanto que las escuelas refuercen el 4

estudio del lgebra, como fundamento matemtico de la programacin, adems de ensearles alguna forma de programacin, al emplear lenguajes y ambientes modernos de programacin logran esto ltimo de forma efectiva, haciendo incluso divertida el lgebra. Recetas de Diseo
Cocinar es tanto un juego infantil, como un gozo adulto; cocinar con cuidado es un acto de amor. Craig Claiborne (1920-2000), Food Editor, New York Times

Aprender a disear programas es parecido a aprender a jugar ftbol, cada jugador debe aprender a mantener la bola, escurrirse con ella, pasarla y dispararla; una vez que un jugador conoce tales habilidades bsicas, la siguiente meta es aprender a desempear una posicin, ejecutar ciertas estrategias, seleccionarlas y, eventualmente, crear variaciones de una estrategia debido a que ninguna de las existentes le sirve. Un programador se parece a un ingeniero, a un arquitecto, a un compositor o a un escritor; individuos creativos que parten de ideas en sus cabezas y hojas blancas de papel; conciben una idea, forman un bosquejo mental y lo refinan en papel hasta que lo escrito refleja una imagen mental tanto como es posible. Al mismo tiempo que llevan sus ideas al papel, emplan dibujos, escritos y habilidades instrumentales bsicas con objeto de expresar ciertos elementos de estilo de un edificio, descriptivos del carcter de una persona, o para formular porciones de una meloda. Requieren practicar su oficio debido a que necesitan depurar sus habilidades bsicas por lapsos prolongados hasta llegar a emplearlas de forma instintiva. Los programadores generan tambin bocetos, los trasladan en primeros diseos y los refinan de forma reiterada hasta que se corresponden con la idea inicial, de hecho, los mejores programadores los editan y los reescriben hasta que alcanzan estndares estticos; igual que los jugadores de ftbol, ingenieros, arquitectos, compositores, o escritores. Los programadores deben practicar las habilidades bsicas de su oficio por periodos prolongados antes de llegar a ser autnticamente creativos. Las recetas de diseo equivalen a tcnicas de manejo de una pelota de fut, a tcnicas de escritura, a tcnicas de composicin y a habilidades de dibujo; una sola receta de diseo representa un punto en el espacio de diseo de programas, se ha estudiado dicho espacio e identificado muchas de sus categoras importantes, el libro selecciona las recetas ms bsicas y prcticas, y las presenta en orden creciente de dificultad2. Del conjunto de recetas de diseo que se requiere manejar, cerca de la mitad se centra en la conexin entre los datos de entrada y el programa; ms en concreto, ste se deriva de la descripcin de los datos de entrada en un proceso denominado diseo de programas impulsado por datos, siendo la forma ms frecuente de diseo; otras formas de diseo son las derivadas de la recursin generativa, acumulacin y sensibilidad histrica; la primera, produce programas
2 Las recetas de diseo fueron inspiradas en la obra de Daniel P. Friedman con respecto a recursin estructural, con Robert Harper en el de teoras de tipos y en el mtodo de diseo de Michael A. Jackson.

recursivos que al recurrir generan nuevas instancias de problemas; los programas diseados, bajo el estilo de la acumulacin, recolectan datos al procesar entradas; y los programas sensitivos histricamente, recuerdan informacin entre aplicaciones sucesivas. Otra forma de receta permite abstraer programas, o sea generalizar dos, o ms diseos similares en uno, del cual se derivan las instancias originales. En muchas ocasiones, un problema sugiere naturalmente una receta; en otras, el programador debe seleccionar entre diversas posibilidades; cada opcin puede producir programas organizados de formas muy diferentes; optar es natural para los programadores creativos; pero si no conocen el men de opciones con el que cuentan en el proceso de seleccin, ste ser slo ad hoc, siempre ser ms provechoso mapear las categoras de problemas con la coleccin de recetas de diseo, lo cual permite al programador saber qu y cmo seleccionar. Una vez explicado que significa programar y diseo de programas, se comprende por qu y cmo es que el diseo de programas propicia habilidades de pensamiento tiles para una gran variedad de profesiones, pues para disear un programa de forma adecuada, se debe: 1. Analizar el enunciado de un problema 2. Expresar su esencia, de forma abstracta y con ejemplos 3. Formular enunciados y comentarios en un lenguaje preciso 4. Evaluar y revisar estas actividades a la luz de verificaciones y pruebas, y 5. Atender a los detalles Actividades tiles todas a un empresario, un abogado, un periodista, un cientfico o a un ingeniero, entre otros. A pesar de que la programacin tradicional requiere tambin de esas habilidades, los principiantes no comprenden dicho vnculo. El problema es que los lenguajes y formas tradicionales de programacin obligan a los estudiantes a realizar una gran cantidad de trabajo minucioso y memorizar una gran cantidad de hechos especficos a un determinado lenguaje. O sea, atender tales tareas va en detrimento del desarrollo de habilidades fundamentales. Con objeto de evitar este problema, se requiere emplear un ambiente de programacin que imponga la menor sobrecarga y que facilite la labor de los principiantes. Porque dichas herramientas no existan, debieron ser desarrolladas. La opcin de Scheme y DrScheme
Calificamos bello, lo que es simple, lo que no tiene partes superfluas; lo que se corresponde a su propsito, lo que se vincula con todas las cosas, lo que es medio de muchos fines. Ralph Waldo Emerson, La Conducta de Vida

Se ha seleccionado Scheme como lenguaje de programacin. Y diseado e instrumentado DrScheme, un ambiente de programacin para dicho dicho lenguaje, teniendo presente los requerimientos de los estudiantes principiantes; dicho ambiente se puede obtener sin costo en el sitio Web oficial del libro3. An as, el libro no es acerca de programacin en Scheme, nicamente se emplean un nmero reducido de constructos Scheme en el libro, slo seis, (definicin de funcin y de aplicacin, expresiones condicionales, definicin de estructura, definiciones locales y asignaciones) adems de cerca de una docena de funciones bsicas. Este pequeo subconjunto del lenguaje es todo lo que se requiere para ensear los principos de la computacin y de la programacin, si se desea emplear Scheme como una herramienta de programacin completa ser necesario leer material adicional. La opcin de Scheme para principiantes es natural, el ncleo de Scheme permite a los programadores centrarse en slo aquellos dos elementos de la programacin sealados al inicio del prefacio: los programas como relaciones entre cantidades y evaluar programas para entradas especficas; con ese ncleo del lenguaje, los estudiantes desarrollan programas completos desde la primera sesin con el apoyo de un profesor. Por otra parte, Scheme puede ser organizado fcilmente como una torre de niveles de lenguajes, propiedad de gran importancia para principiantes que de otra forma cometeran errores notacionales que generaran mensajes de error oscuros relacionados con caractersticas avanzadas de un lenguaje, con el resultado de onerosas bsquedas y el sentimiento de frustacin por parte de los estudiantes. Para evitar este problema, el ambiente de programacin DrScheme, instrumenta cuidadosamente varios sublenguajes de Scheme. Con base en dicho ordenamiento, es factible que el ambiente marque mensajes de error apropiados al nivel de conocimiento del estudiante; ms aun, con tal estratificacin de lenguajes se previenen muchos errores elementales. Se han desarrollado dichas capas mediante observacin a principiantes, en laboratorios de computacin. En la medida en que los estudiantes aprenden ms acerca de la programacin y el lenguaje, el profesor expone a los estudiantes a niveles ms ricos del lenguaje, permitindoles a los estudiantes escribir programas ms interesantes y concisos. Adems, el ambiente de programacin DrScheme ofrece un verdadero evaluador interactivo, que consiste en dos ventanas: una de Definiciones , donde los estudiantes definen programas, y otra de Interacciones , que funciona como calculadora de bolsillo, donde los estudiantes pueden ingresar expresiones, y DrScheme determina sus valores. En otras palabras, el cmputo se inicia con la aritmtica de una calculadora de bolsillo, lo cual se conoce bastante bien, y se prosigue con el clculo de estructuras, listas y rboles los tipos de datos que realmente manipulan los programas de computadora, estimulando dicho modo interactivo de evaluacin a los estudiantes a experimentar de formas diversas, alentando as su curiosidad.
3 Scheme tiene una definicin oficial el Revised Report on Scheme, editado por Richard Kelsey, William Clinger, y Jonathan Rees y muchas implementaciones. Para una copia del reporte y una lista de implementaciones opcionales, visitar www. schemers.org en la Web. Sin embargo, es importante tener presente que el lenguaje en este libro extiende el del reporte y est adaptado a principiantes.

Finalmente, el empleo de un evaluador interactivo con un lenguaje rico en datos permite a los estudiantes centrarse en la solucin de problemas y en las actividades de diseo de programas; la ventaja clave es que una evaluacin interactiva vuelve casi superflua la discusin acerca de las operaciones de entrada y salida, con varias consecuencias; en primer lugar, no centrarse en operaciones de entrada y salida, que al requerir de memorizacin, su aprendizaje es tedioso y aburrido, es mejor aprender habilidades de solucin de problemas y emplear apoyos de entrada y salida. En segundo lugar, una buena entrada de texto requiere conocimiento de habilidades de programacin a profundidad, las cuales se adquieren en un curso de aprendizaje de solucin computacional de problemas; en tercer lugar, el software moderno emplea interfaces grficas de usuario (GUI), diseadas por programadores mediante editores y wizards, pero no a mano. Igualmente, los estudiantes se ubican mejor en el diseo de funciones vinculadas a reglas, botones, campos de texto, etc., que en la memorizacin de protocolos especficos que imponen libreras GUI de moda. En conclusin, centrarse en operaciones de entrada y salida es un desperdicio de valioso tiempo de aprendizaje en una introduccin a la programacin, si los estudiantes deciden dedicarse con mayor profundidad a la programacin, adquirir el necesario conocimiento (Scheme) acerca de procedimientos de entrada y salida es fcil. En resumen, se puede aprender el ncleo de Scheme en un par de horas, no obstante ser tan poderoso como cualquier otro lenguaje de programacin convencional. Como resultado, los estudiantes pueden centrarse inmediatamente en la esencia de la programacin, mejorando notablemente su capacidad general de solucin de problemas.

Partes del libro El libro consiste de ocho partes y y siete intermezzos. Las partes se centran en el diseo de programas; los intermezzos introducen otros temas relacionados con la programacin y la computacin. La figura 2 muestra la grfica de dependencia para las partes del libro. La grfica muestra que existen varias rutas para recorrer el libro y que es posible una cobertura parcial del material cubierto por el mismo.

Parte I Figura 2. Las dependencias entre partes e intermezzos Parte II Intermezzo 1 I a la III Las Partes de la cubren las bases del diseo de programas impulsado por datos. La Parte IV introduce la abstraccin de diseos. Las Partes V y VI se refieren a generacin generativa y acumulacin. Para estas seis partes, el libro emplea una forma completamente Intermezzo 2 Intermezzo 3 funcional, o algebraica, de programacin. Una misma expresin siempre se evala al mismo resultado, sin importar cuntas veces sea evaluada. Esta propiedad facilita el diseo de programas, y razonar acerca del mismo. Sin embargo, a fin de manejar interfaces entre programas y el resto del mundo, el lenguaje con de VII asignacin, Parte III se enriquece Parte IV Partedeclaraciones V Parte abandonando algo del razonamiento algebraico. Las dos ltimas partes muestran el significado de esto en el diseo de programas. Es decir, muestran cmo aplicar las recetas de las primeras seis partes y por qu se requiere ser ms cuidadoso una vez se ha incorporado asignaciones. Intermezzo 4 Intermezzo 5 Intermezzo 7

Los Intermezzos introducen temas importantes en general para el cmputo y la programacin, pero no para no per se para el diseo de programas. Algunos introducen rigurosamente la sintaxis y la semntica para subconjuntos seleccionados ParteVI de Scheme, algunos introducen Parte VIII Intermezzo 6 constructos de programacin adicionales. El Intermezzo 5 es una discusin del costo abstracto de cmputo (tiempo, espacio, energa), adems de introducir vectores. El Intermezzo 6 contrasta dos formas de representar y procesar nmeros. Cubrir algunos intermezzos puede demorarse hasta el surgimiento de alguna necesidad especfica, en particular, los intermezzos referidos a la sintaxis y semntica de Scheme. Sin 9

embargo, dado el papel central del intermezzo 3 en la figura 2, ste deber cubrirse de modo oportuno. REFINAMIENTO ITERATIVO E ITERACIN DE TEMAS: El diseo sistemtico de programas es en particular de inters e importante para grandes proyectos. El paso de problemas de una sola funcin a proyectos de funciones mltiples requiere un concepto adicional de diseo: el refinamiento iterativo. La meta es disear el aspecto esencial de un programa y agregar funcionalidad a dicho ncleo hasta cumplir el conjunto completo de requerimientos. Los estudiantes desde un primer curso pueden, y deben, obtener una primera aproximacin del refinamiento iterativo. Por lo que a fin de que los estudiantes adquieran tal tcnica, se han incluido ejercicios ampliados. De forma tpica, una breve panormica establece el marco para una coleccin de ejercicios. Los ejercicios orientan al estudiante a travs de iteraciones de diseo. En la seccin 16, la idea se detalla de forma explcita. Es ms, el libro revisa ciertos ejercicios y ejemplos de ciertos temas varias veces. Por ejemplo, las secciones 6.6, 7.4, 10.3, 21.4 y 41.4, y algunos ejercicios intermedios entre estas dos ltimas secciones abarcan la idea de mover dibujos a lo largo de un lienzo. Los estudiantes as ven los mismos problemas varias veces, cada una con cada vez ms conocimiento acerca de cmo organizar programas. PAQUETES DE ENSEANZA: un segundo aspecto de trabajar en proyectos es que los programadores colaboren en equipos. En un contexto educativo, esto significa que el programa de un estudiante debe coincidir de forma precisa con el de otro. A fin de simular el que la funcin de uno coincida con la de otro, se proporcionan paquetes de enseanza en DrScheme. stos pueden describirse como medios de simular un colaborador de equipo que evita la frustacin de operar con errores en programas componentes de dicho colaborador. De forma ms tcnica, los proyectos casi siempre consisten en componentes vista y modelo (en el sentido de la arquitectura de software model-view). En una situacin tpica, los estudiantes disean el componente modelo. Los paquetes de enseanza proporcionan el componente vista, a menudo en la forma de interfaces (grficas) de usuario. De ah que eliminen esta parte tediosa de generacin de cdigo poco imaginativa. Adems de que dicha separacin de objetivos reproduce la de los proyectos de la vida real. Hacer coincidir componentes del modelo a los de vista requiere que los estudiantes centren su atencin en especificaciones precisas de funciones. Lo que demuestra la importancia capital de seguir una disciplina de diseo. Lo cual tambin es una habilidad crtica en los programadores y que no se le da la importancia que requiere en los cursos iniciales. En la parte IV se muestra cmo construir algunas GUI (Interfaces Grficas de Usuario) y cmo eventos de stas disparan funciones en el modelo de la aplicacin. La meta es explicar que la construccin de GUI no encierra ningn misterio, sin invertir demasiado tiempo en un tema que requiere bsicamente de un aprendizaje repetitivo y poco pensamiento computacional.

10

AGENDA: cada universidad y escuela tiene sus propias necesidades y debe encontrar programas de asignatura apropiados. En Rice University, se cubre de modo convencional el libro completo y material adicional en un semestre. Un profesor en una research university lograra probablemente un ritmo similar. Un profesor de preparatoria ira necesariamente a un ritmo menor. Muchas preparatorias, que han probado el libro, cubren las primeras tres partes en un semestre, algunas solo emplean la primera parte para ensear solucin de problemas algebraicos desde una perspectiva computacional; mientras otros trabajan con todo el contenido del libro en un ao. Para ms informacin visitar el Web site oficial del libro. EL LIBRO EN LA WEB: el libro en ingls se encuentra en lnea en http://www.htdp.org/

Ese sitio Web proporciona tambin material adicional, especficamente ejercicios ampliados del estilo mencionado anteriormente. Esa versin y sta vienen con diferentes tipos de recomendaciones, cada una indicada con una imagen diferente. Este marcador se refiere a consejos DrScheme; disponibles en ambas versiones del libro. El ambiente de programacin ha sido diseado teniendo presente al estudiante. Los consejos sugieren cmo emplear DrScheme en diversas etapas del proceso de aprendizaje. Este marcador se refiere a consejos al profesor, los cuales sugieren estrategias de cmo presentar una seccin, o de cmo enfocar un ejercicio, o de cmo complementar algn material. TIPOGRAFA Y DEFINICIONES: Por legibilidad, los programas Scheme se representan empleando un nmero pequeo de tipos tipogrficos. Palabras en Itlica se refieren a nombres de programas y variables. tems en Times New Roman son constantes y operaciones predefinidas. Palabras en negrita representan palabras reservadas Scheme. Las definiciones vienen en tres variedades. Existen trminos concernientes a los principios de programacin y computacin. El libro lista la primera ocurrencia de dichos trminos con LETRAS MAYSCULAS MS PEQUEAS. Otras definiciones de naturaleza transitoria que introducen trminos que son importantes para una seccin, un ejemplo, un ejercicio, o alguna otra parte pequea del libro, se emplea palabras inclinadas a fin de enfatizar dichas definiciones. Finalmente, el libro define tambin clases de datos. La mayora de las definiciones de datos se ubican en cajas, y la primera ocurrencia de un nombre definido se presenta tambin con palabras inclinadas. Agradecimientos Cuatro personas merecen reconocimientos especiales: Robert Corky Cartwright, quien codesarroll un curso predecesor al curso introductorio de la Rice University con el primer autor; Daniel P. Friedman, por pedir al primer autor rescribir The Little LISPer (tambin de la MIT Press) en 1984, e iniciar as este proyecto; John Clements, quien diseo, instrument y mantiene el Paso de DrScheme; y Paul Steckler, quien con fe inquebrantable ha apoyado al equipo con contribuciones a nuestro conjunto de herramientas de programacin. 11

El desarrollo del libro se benefici de muchos otros amigos y colegas quienes emplearon en sus cursos y proporcionaron comentarios detallados a los primeros borradores. Les agradecemos su cooperacin y paciencia: Ian Barland, John Clements, Bruce Duba, Mike Ernst, Kathi Fisler, Daniel P. Friedman, John Greiner, John Stone, Geraldine Morin y Valdemar Tamez. Una docena de generaciones de estudiantes de la asignatura Comp 210 en la Rice University emplearon versiones preliminares del texto y contribuyeron de diversas formas. Adems de numerosos participantes de nuestros talleres TeachScheme! emplearon tambin dichas versiones preliminares en sus salones de clase. Muchos enviaron comentarios y sugerencias. Como representativos de ellos mencionamos algunos contribuyentes activos: Ms. Barbara Adler, Dr. Stephen Block, Mr. Jack Clay, Dr Richard Clemens, Mr. Kyle Gillette, Ms. Karen Buras, Mr. Marvin Hernandez, Mr. Michael Hunt, Ms. Karen North, Mr. Jamie Raymond y Mr. Robert Reid. Christopher Felleisen trabaj pacientemente a lo largo de las primeras partes del libro con su padre y proporcion una perspectiva perspicaz desde la visin de un joven estudiante. Hrvoje Blazevic (partiendo, entonces, como Master of the LPG/C Harriete), Joe Zachary (University of Utah) y Daniel P. Friedman (Indiana University) descubrieron muchos errores tipogrficos en la primera edicin, los cuales ahora se han corregido. Gracias a todos. Finalmente, Matthias expresa su gratitud a Helga por los muchos aos de paciencia y mantener un hogar con un marido y padre distrado. Robby agradece a Hsing-Huei Huang por su apoyo y aliento, sin ella, nada se habra hecho. Matthew agradece a Wen Yuan por su apoyo constante y su msica perdurable. Shriram est en deuda con Kathi Fisler por su apoyo, paciencia y bromas, y su participacin en este proyecto.

12

Vous aimerez peut-être aussi