introducción a la computación y programación con python, 3ra.pdf

Download Introducción a la computación y programación con Python, 3ra.pdf

If you can't read please download the document

Upload: manuel-santiago

Post on 09-Oct-2015

902 views

Category:

Documents


42 download

TRANSCRIPT

  • I n t r o d u c c i n a l a

    COMPUTACIN Y PROGRAMACIN C O N P y t h o n

    T e r c e r a E d i c i n

    M ark J . G u zd ia l y B a rb a ra E ricso nCollege o f Computing/GVU

    Georgia Institute o f Technology

    T r a d u c c i n

    Alfonso Vidal Romero ElizondoIngeniero en Sistemas Electrnicos

    ITESM, Campus Monterrey

    R e v i s i n t c n i c a

    Roberto Martnez RomnDepartamento de Tecnologas de Informacin y Computacin

    ITESM, Campus Estado de Mxico

    PEA R SO N

  • ^ / p a t o s de catalogacin bibliogrfica

    GUZDIAL, MARK J. y ERICSON. BARBARA

    Introduccin a la computacin y program acin con PythonTercera edicin

    PEARSON EDUCACIN, Mxico, 2013

    ISBN: 978-607-32-2049-1

    rea: Computacin

    Formato: 18.5 x 23.5 cm Pginas: 448

    Authorized translation from the English language edition, entitled NTRODUCTION TO COMPUTING AND PROGRAMMING 1N PYTHON 3rd Edition, by MARK GUZDIAL and BARBARA ERICSON, published by Pearson Education, Inc., publishing as Prentice Hall, Copyright 2013. All rights reserved.

    ISBN 9780132923514

    Traduccin autorizada de la edicin en idioma ingls, titulada NTRODUCTION TO COMPUTING AND PROGRAMMING IN PYTHON Medicin, por MARK GUZDIAL y BARBARA ERICSON, publicada por Pearson Education. Inc.. publicada como Prentice Hall, Copyright 2013. Todos los derechas reservadas.

    Esta edicin en espaol es la nica autorizada.

    Edicin en espaolDireccin general:Direccin Educacin Superior:Editor Sponsor:

    Editor de Desarrollo:Supervisor de Produccin:Gerencia Editorial

    Educacin Superior Latinoamrica

    TERCERA EDICIN, 2013

    D.R. 2013 por Pearson Educacin de Mxico, S.A. de C.V.Atlacomulco No. 500,5o piso Col. Industrial AtotoC.P. 53519, Naucalpan de Jurez, Estado de Mxico

    Cmara Nacional de la Industria Editorial Mexicana. Reg. nm. 1031.

    Reservados todos los derechos. Ni la totalidad ni parte de esta publicacin pueden reproducirse, registrarse o transmitirse, por un sistema de recuperacin de informacin, en ninguna forma ni por ningn medio, sea electrnico, mecnico, fotoqumico. magntico o electroptioo, por fotocopia, grabacin o cualquier otro, sin permiso previo por escrito del editor.

    El prstamo, alquiler o cualquier otra forma de cesin de uso de este ejemplar requerir tambin la autorizacin del editor o de sus representantes.

    ISBN VERSIN IMPRESA: 978-607-32-2049-1 ISBN VERSIN E-BOOK: 978-607-32-2050-7 ISBN E-CHAPTER: 978-607-32-205l^J

    Impreso en Mxico. Printed in Mxico.1 2 3 4 5 6 7 8 9 0 - 1 6 15 14 13

    Philip de la Vega Mario Contreras Luis M. Cruz Castillo e-mail: [email protected] Bemardino Gutirrez Hernndez Juan Jos Garca Guzmn

    : Marisa de Anta

    PEA R SO Nwww.pearsonenespaol.com

  • Dedicado a nuestros hijos: Matthew, Katherine y Jennifer

  • ContenidoNovedades en la tercera edicin xiii

    Prefacio xv

    Acerca de los autores xxi

    1 INTRODUCCIN 1__________________

    1 Introduccin a las ciencias computacionales y la computacin multimedia 31.1 D e qu tratan las ciencias computacionales? 31.2 Lenguajes de programacin 61.3 Lo que las computadoras entienden 81.4 Computacin multimedia: por qu digitalizar los medios? 111.5 Ciencias computacionales para todos 12

    1.5.1 Es acerca de la comunicacin 121.5.2 Es acerca del proceso 13

    2 Introduccin a la programacin 162.1 La programacin se refiere a la asignacin de nombres 16

    2.1.1 Los archivos y sus nombres 182.2 La programacin en Python 192.3 La programacin en JES 202.4 La computacin multimedia y JE S 21

    2.4.1 Mostrar una imagen 252.4.2 Reproducir un sonido 272.4.3 Nombrar valores 28

    2.5 Creacin de un programa 312.5.1 Recetas de variables: funciones reales similares a las matemticas que

    reciben entradas 34

    3 Modificacin de imgenes mediante el uso de ciclos 403.1 Cmo se codifican las imgenes 41

  • vi Contenido

    3.2 Manipulacin de imgenes 463.2.1 Exploracin de imgenes 51

    3.3 Modificacin de los valores de los colores 533.3.1 Uso de ciclos en las imgenes 533.3.2 Aumentar/reducir el color rojo (verde, azul) 553.3.3 Prueba del programa: en verdad funcion? 603.3.4 Cambiar un color a la vez 61

    3.4 Creacin de un atardecer 623.4.1 Comprensin de las funciones 62

    3.5 Iluminacin y oscurecimiento 673.6 Creacin de un negativo 683.7 Conversin a escala de grises 69

    4 Modificacin de pxeles en un rango 754.1 Copia de pxeles 75

    4.1.1 Iterar a travs de los pxeles mediante range 764.2 Reflejo de una imagen 784.3 Copia y transformacin de im genes 86

    4.3.1 Copiado 864.3.2 Creacin de un collage 944.3.3 Copiado general 964.3.4 Rotacin 984.3.5 Cambio de escala 100

    5 Tcnicas de imgenes con seleccin y combinacin 1075.1 Sustitucin de colores: ojo rojo, tonos sepia

    y posterizacin 1085.1.1 Reduccin del ojo rojo 1115.1.2 Imgenes con tono sepia y posterizacin: uso de condicionales para elegir

    el color 1135.2 Combinacin de pxeles: difuminado 1185.3 Comparacin de pxeles: deteccin de bordes 1205.4 Mezcla de im genes 1225.5 Sustraccin de fondo 1255.6 Chrom akey 1275.7 Dibujar sobre imgenes 131

    5.7.1 Dibujar mediante comandos de dibujo 1325.7.2 Representaciones vectoriales y de mapas de bits 134

    5.8 Seleccionar sin volver a probar 1355.9 Programas para especificar el proceso de dibujo 136

    5.9.1 Por qu escribimos programas? 139

  • Contenido vi

    2 SONIDO 143

    6 Modificacin de sonidos mediante ciclos 1456.1 Cmo se codifica el sonido 145

    6.1.1 La fsica del sonido 1456.1.2 Exploracin de la apariencia de los sonidos 1496.1.3 Codificacin del sonido 1516.1.4 Nmeros binarios y complemento a dos 1536.1.5 Almacenamiento de sonidos digitalizados 154

    6.2 Manipulacin de sonidos 1566.2.1 Abrir sonidos y manipular muestras 1566.2.2 Uso de MediaTools de JES 1596.2.3 Ciclos 161

    6.3 Cam biar el volumen de los sonidos 1616.3.1 Aumentar el volumen 1616.3.2 De verdad funcion eso que hicimos? 1626.3.3 Reducir el volumen 1666.3.4 Interpretacin de las funciones en los sonidos 167

    6.4 Normalizacin de sonidos 1676.4.1 Generacin del recorte 169

    7 Modificacin de muestras en un rango 1747.1 Manipulacin de secciones diferentes del sonido en forma

    distinta 1747.2 Empalme de sonidos 1777.3 Recorte y copia en general 1837.4 Inversin de sonidos 1867.5 Reflejo 1877.6 Sobre las fundones y el alcance 188

    8 Creacin de sonidos mediante la combinacin de piezas 1938.1 Composicin de sonidos por medio de la adicin 1938.2 Mezcla de sonidos 1958.3 Creacin de un eco 196

    8.3.1 C readn de mltiples ecos 1978.3.2 C readn de acordes 198

    8.4 Cmo funcionan los teclados de muestreo 1988.4.1 El muestreo como un algoritmo 202

    8.5 Sntesis aditiva 2038.5.1 C readn de ondas senoidales 203

  • v Contenido

    8.5.2 Sumar ondas senoidales 2058.5.3 Comprobacin de nuestro resultado 2068.5.4 Ondas cuadradas 2078.5.5 Ondas triangulares 210

    8.6 Sntesis de msica moderna 2118.6.1 MP3 2128.6.2 MIDI 212

    9 Creacin de programas ms grandes 2169.1 Diseo de programas de arriba hacia abajo (Top-Down) 217

    9.1.1 Un ejemplo de diseo arriba-abajo 2189.1.2 Diseo de la funcin de nivel superior 2199.1.3 Escritura de las subfunciones 221

    9.2 Diseo de programas de abajo hacia arriba (Bottom-Up) 2259.2.1 Ejemplo de un proceso abajo-arriba 225

    9.3 Prueba de su programa 2269.3.1 Prueba de las condiciones lmite 228

    9.4 T ips sobre depuracin 2289.4.1 Averiguar cul es la instruccin que nos debe preocupar 2299.4.2 Ver las variables 2309.4.3 Depuracin del juego de aventuras 232

    9.5 Algoritmos y diseo 2359.6 Ejecucin de programas fuera de Je s 236

    3 TEXTO, ARCHIVOS, REDES, BASESDE DATOS Y UNIMEDIA 242______________

    10 Creacin y modificacin de texto 24410.1 Texto como unimedia 24410.2 Cadenas: creacin y manipulacin de cadenas 24510.3 Manipulacin de partes de cadenas 248

    10.3.1 Mtodos de cadenas: introduccin a los objetos y la notacin punto 24810.3.2 Listas: texto poderoso y estructurado 25110.3.3 Las cadenas no tienen fuente 253

    10.4 Archivos: lugares en donde puede colocar sus cadenas y otras cosas 25310.4.1 Apertura y manipulacin de archivos 25510.4.2 Generacin de cartas modelo 25710.4.3 Escritura de programas 257

    10.5 La biblioteca estndar de Python 26110.5.1 Ms sobre importaciones y sus propios mdulos 26210.5.2 Otro mdulo divertido: random 26310.5.3 Una muestra de las bibliotecas estndar de Python 265

  • Contenido ix

    11 Tcnicas avanzadas de texto : Web e informacin 27011.1 Redes: cmo obtener nuestro texto de la Web 27011.2 Uso de texto para cambiar de un medio a otro 27711.3 Cmo mover informacin entre medios 28011.4 Uso de listas como texto estructurado para representaciones de medios 28211.5 Cmo ocultar informacin en una imagen 284

    12 Creacin de texto para la Web 28912.1 HTM L: la notacin de la Web 28912.2 Escritura de programas para generar HTML 29412.3 Bases de datos: un lugar para almacenar nuestro texto 299

    12.3.1 Bases de datos relacinales 30112.3.2 Ejemplo de una base de datos relacional mediante el uso de tablas hash 30212.3.3 Trabajar con SQL 30412.3.4 Uso de una base de datos para crear pginas Web 307

    4 PELCULAS 311_________________________13 Creacin y modificacin de pelculas 313

    13.1 Generacin de animaciones 31413.2 Trabajar con una fuente de video 322

    13.2.1 Ejemplos de manipulacin de video 32313.3 Creacin de un efecto de video desde abajo hacia arriba 326

    5 TEMAS EN CIENCIASDE LA COMPUTACIN 333______________

    14 Velocidad 33514.1 Enfoque en ciencias de la computacin 33514.2 Por qu los programas son veloces? 335

    14.2.1 Lo que las computadoras entienden en realidad 33614.2.2 Compiladores e intrpretes 33714.2.3 Qu es lo que lim ita la velocidad de una computadora? 34114.2.4 En realidad existe una diferencia? 34314.2.5 Realizar bsquedas ms rpidas 34514.2.6 Algoritmos que nunca terminan o que no pueden escribirse 34714.2.7 Por qu Photoshop es ms veloz que JES? 349

    14.3 Por qu las computadoras son veloces? 34914.3.1 Velocidades de reloj y clculos reales 350

  • x Contenido

    14.3.2 Almacenamiento: qu hace a una computadora lenta? 35114.3.3 Pantalla 352

    15 Programacin funcional 35515.1 Uso de funciones para facilitar la programacin 35515.2 Programacin funcional mediante asociacin (map) y reduccin (reduce) 35815.3 Programacin funcional para multimedia 362

    15.3.1 Manipulacin de medios sin cambiar de estado 36315.4 Recursividad: una dea poderosa 364

    15.4.1 Recorridos recursivos de directorios 36915.4.2 Funciones multimedia recursivas 371

    16 Programacin orientada a objetos 37616.1 Historia de los objetos 37616.2 Trabajo con tortugas 378

    16.2.1 Clases y objetos 37816.2.2 Envo de mensajes a los objetos 37916.2.3 Los objetos controlan su estado 381

    16.3 Ensear nuevos trucos a las tortugas 38316.3.1 Redefinicin de un mtodo existente de la clase tortuga 38516.3.2 Uso de tortugas para realizar ms acciones 386

    16.4 Una presentacin orientada a objetos 39016.4.1 Cmo hacer la clase Diapositiva ms orientada a objetos 393

    16.5 Medios orientados a objetos 39416.6 La caja Joe 39916.7 Por qu objetos? 401

    APNDICE 407A Referencia rpida de Python 407

    A.1 Variables 407A .2 Creacin de funciones 408A .3 C iclos y condicionales 408A .4 Operadores y funciones de representacin 409A .5 Funciones numricas 410A .6 Operaciones de secuencia 410A .7 Cadenas de escape 410A .8 Mtodos de cadena tiles 410A .9 Archivos 411A . 10 Listas 411A .1 1 Diccionarios, tablas Hash o arreglos asociativos 411

  • A .1 2 Mdulos externos 411A .13 C lases 412A .1 4 Mtodos funcionales 412

    Contenido x

    Bibliografa 413

    ndice 417

  • Novedades en la tercera edicinEn esta tercera edicin, nos enfocamos en realizar correcciones, actualizaciones y mejorasque los profesores y varios revisores identificaron al usar el libro. Sobresalen las siguientes.

    1. Una actualizacin en general de las referencias; por ejemplo, Netscape Navigator y los discos duros de 40 Gb son conceptos que ya no se usan.

    2. Introdujimos ms trminos de ciencias de la computacin (brevemente) en los primeros captulos, como algoritmo, identificador, alcance local y alcance global.

    3. Una presentacin ms detallada de las instrucciones de condicin en los primeros captulos, incluyendo e l s e y e l i f .

    4. Una seccin sobre funciones y parmetros, con la explicacin de cundo usar retomo y cundo no es necesario.

    5. Una explicacin ms profiinda sobre la forma como funcionan las variables, en especial respecto a los objetos.

    6. Ms informacin sobre el reflejo de imgenes, con un ejemplo ms generalizado.7. Actualizamos los ejemplos Web con referencias para acceder a sitios interesantes y moder

    nos.8. Ms informacin sobre las diferencias entre los formatos de imgenes.9. Eliminamos algunos de los ejemplos ms elementales de la tortuga en el captulo 16 y

    agregamos un par de ejemplos ms sofisticados sobre tortugas.10. Actualizamos la seccin sobre hardware y redes para referimos al hardware ms reciente,

    incluyendo los procesadores multincleo y los telfonos mviles.11. Una definicin ms clara de lo que puede hacerse en Jython y CPython, en comparacin

    con JES.12. Agregamos otro ejemplo relacionado con la esteganografa.13. Agregamos figuras y explicaciones adicionales en las reas que los revisores considera

    ron confusas para los estudiantes.

    M a r k G u z d i a l y B a r b a r a E r i c s o n Georgia Institute o f Technology

  • Novedades en la tercera edicin

    AGRADECIM IENTOSOfrecemos nuestros ms sinceros agradecimientos a los siguientes revisores:

    Joseph Oldham, Centre College Lukasz Ziarek, Purdue University Joseph ORourke, Smith College Atul Prakash, University of Michigan Noah D. Barnette, Virginia Tech Adelaida A. Medlock, Drexel University Susan E. Fox, Macalester College Daniel G. Brown, University o f Waterloo Brian A. Malloy, Clemson University Renee Renner, California State University, Chico

  • PrefacioLa investigacin en la educacin computacional deja ver en claro que no slo se aprende a programar , sino que tambin se aprende a programar algo [5, 22], y la motivacin para hacer ese algo puede marcar la diferencia entre aprender y no aprender a programar [8]. El desafo para cualquier profesor es elegir algo que sea un motivador con el suficiente poder.

    Las personas quieren comunicarse. Somos seres sociales y el deseo de comunicarnos es una de nuestras principales motivaciones. La computadora se utiliza cada vez ms como herramienta de comunicacin; incluso ms que como herramienta de clculo. Casi todo el texto, las imgenes, los sonidos, la msica y las pelculas que se publican actualmente se preparan usando tecnologa de computadora.

    Este libro trata sobre cmo ensear a las personas a programar para comunicarse a travs de medios digitales. El libro se enfoca en cmo manipular imgenes, sonido, texto y pelculas tal como lo haran los profesionales, pero con programas escritos por estudiantes. Sabemos que la mayora de las personas utilizar aplicaciones de nivel profesional para realizar este tipo de manipulaciones. Pero, saber cmo escribir sus propios programas significa que puede hacer ms de lo que su aplicacin actual le permite; de esta manera su poder de expresin no estar limitado por su software de aplicacin.

    Tambin puede darse el caso de que al saber cmo funcionan los algoritmos en las aplicaciones de medios pueda utilizarlas mejor; o pasar de una aplicacin a la siguiente con mayor facilidad. Si su enfoque en una aplicacin est en saber lo que hace cada men, todas las aplicaciones son distintas. Pero si su enfoque est en mover o colorear los pxeles en la forma que desea, tal vez sea ms sencillo ir ms all de los elementos de men y enfocarse en lo que desea.

    Este libro no trata slo de la programacin en los medios. Los programas de manipulacin de medios pueden ser difciles de escribir o tal vez se comporten en formas inesperadas. Surgen preguntas como: Por qu el mismo filtro de imgenes es ms rpido en Photoshop? , y Eso fue difcil de depurar. Acaso hay formas de escribir programas que sean ms fciles de depurar? . Responder a cuestionamientos como los anteriores es lo que hacen los cientficos computacionales. Al final del libro hay varios captulos que tratan sobre computacin y no slo sobre programacin. Estos captulos van ms all de la manipulacin de medios para tratar temas ms generales.

    La computadora es el dispositivo ms sorprendentemente creativo que los humanos hayan concebido jams. Est compuesta en su totalidad por genialidad. La nocin No slo lo pienses, hazlo es realmente posible con una computadora. Si puedes imaginarlo, puedes hacerlo real en una computadora. Jugar con la programacin puede y debera ser una gran diversin.

    OBJETIVOS, METODOLOGA Y ORGANIZACINEl contenido curricular de este libro cumple con los requisitos de la metodologa imperati- ve-first (imperativo primero) descrita en el documento de normas Computing Curriculum 2001 de la ACM/IEEE [4]. El libro empieza con un enfoque en las construcciones de programacin fundamentales: asignaciones, operaciones secuenciales, iteracin, condicionales

    XV

  • y funciones de definicin. Se hace un nfasis posterior en las abstracciones (por ejemplo: complejidad algortmica, eficiencia de los programas, organizacin computacional, descomposicin jerrquica, recursividad y programacin orientada a objetos), despus de que los estudiantes tengan un contexto para comprenderlas.

    Este orden inusual se basa en los hallazgos de la investigacin en las ciencias del aprendizaje. La memoria es asociativa Recordamos nuevas cosas dependiendo de con qu las asociemos. Las personas pueden aprender conceptos y habilidades con base en la premisa de que sern de utilidad algn da, pero esos conceptos y habilidades estarn relacionados slo con las premisas. El resultado se describe como conocimiento frgil [9]: el tipo de conocimiento que nos ayuda a aprobar el examen pero que olvidamos muy pronto, ya que no se relaciona con nada ms que lo que vimos en esa clase.

    Los conceptos y las habilidades se recuerdan mejor si es posible relacionarlos con muchas ideas diferentes, o con ideas que aparecen en nuestra vida diaria. Si queremos que los estudiantes obtengan un conocimiento transferible (conocimiento que puede aplicarse en situaciones nuevas), tenemos que ayudarlos a relacionar el nuevo conocimiento con problemas ms generales, de modo que las memorias se ordenen en formas que se asocien con esos tipos de problemas [26]. En este libro enseamos con experiencias concretas que los estudiantes pueden explorar y con las que pueden relacionarse (por ejemplo, condicionales para eliminar los ojos rojos en las imgenes), para posteriormente colocar abstracciones sobre stas (por ejemplo, obtener el mismo objetivo usando recursividad o filtros y mapas funcionales).

    Sabemos que el hecho de partir de las abstracciones en realidad no funciona para los estudiantes de computacin. Ann Fleury ha demostrado en cursos introductorios de computacin que los estudiantes simplemente no aceptan lo que les decimos sobre el encapsulamiento y la reutilizacin (por ejemplo [13]). Ellos prefieren cdigo ms simple que puedan rastrear con facilidad, y en realidad piensan que dicho cdigo es mejor. Se requiere tiempo y experiencia para que se den cuenta de que los sistemas bien diseados tienen cierto valor. Sin la experiencia es muy difcil para ellos aprender las abstracciones.

    La metodologa de computacin en los medios que se utiliza en este libro parte de las razones por las que muchas personas utilizan las computadoras: manipulacin de imgenes, exploracin de msica digital, ver y crear pginas Web, y realizar videos. Despus explicamos la programacin y la computacin en trminos de estas actividades. Queremos que los estudiantes visiten Amazon, por ejemplo, y piensen, Aqu est un sitio Web de catlogo, y s que este tipo de sitios se implementan con una base de datos y un conjunto de programas que dan formato a las entradas de la base de datos como pginas Web. Queremos que los estudiantes usen Adobe Photoshop y GIMP, y piensen cmo es que sus filtros de imgenes estn manipulando realmente los componentes rojo, verde y azul de los pxeles. Al partir de un contexto relevante es ms probable que se realice la transferencia de conocimiento y de habilidades. Esto tambin hace a los ejemplos ms interesantes y motivadores, lo que ayuda a mantener a los estudiantes en la clase.

    La metodologa de la computacin de medios invierte cerca de dos terceras partes del tiempo en dar a los estudiantes experiencias con una variedad de medios en contextos que los motiven. No obstante, pasado ese tiempo empiezan a hacer cuestionamientos sobre computacin: Por qu Photoshop es ms rpido que mi programa? ; El cdigo de una pelcula es lento. Qu tan lentos se hacen los programas? , son preguntas comunes. Por eso introdujimos las abstracciones y las perspectivas valiosas de la ciencia computacional que responden a sus preguntas. Lo que se trata en la ltima parte de este libro.

    Un organismo distinto de investigacin en la educacin computacional explora por qu son tan elevadas las tasas de abandono o fracaso en los cursos introductorios de computacin. Una respuesta comn es que esos cursos parecen irrelevantes y se enfocan inne

    xv Prefacio

  • Prefacio xvii

    cesariamente en detalles tediosos , como la eficiencia [31, 1]. Los estudiantes perciben el contexto de comunicaciones como relevante (como nos lo indican en las encuestas y entrevistas [15, 27]). El contexto relevante forma parte de la explicacin del xito que hemos tenido con la retencin en el curso de Georgia Tech, para el que se escribi este libro.

    La entrada tarda de la abstraccin no es el nico orden inusual en esta metodologa. Empezamos a usar arreglos y matrices en el captulo 3, en nuestros primeros programas importantes. Por lo general, los cursos introductorios de computacin presentan los arreglos en captulos posteriores, ya que obviamente son ms complicados que las variables con valores simples. Un contexto relevante y concreto es muy poderoso [22]. Encontramos que los estudiantes no tienen dificultades para manipular matrices de pxeles en una imagen.

    La tasa de estudiantes que abandona los cursos introductorios de computacin o que reciben una calificacin de D o F (comnmente conocida como tasa WDF) se reporta en el rango de 30 a 50%, o incluso mayor. Una reciente encuesta internacional de tasas de fracasos en los cursos introductorios de computacin report que la tasa de fracaso promedio en 54 instituciones estadounidenses fue de 33%, y en 17 instituciones internacionales fue de 17% [6], En Georgia Tech, de 2000 a 2002 tuvimos una tasa WDF promedio de 28% en el curso introductorio requerido para todas las especialidades. Utilizamos la primera edicin de este texto en nuestro curso Introduccin a la computacin en los medios. Nuestra primera oferta piloto de ese curso tuvo 121 estudiantes, sin especialidades de computacin o ingeniera, y dos terceras partes de los estudiantes eran mujeres. Nuestra tasa WDF fue de 11.5%.

    Durante los siguientes dos aos (de primavera de 2003 a otoo de 2005), la tasa WDF promedio en Georgia Tech (entre varios instructores y, literalmente, miles de estudiantes) fue de 15% [21]. En realidad, la tasa WDF anterior de 28% y la tasa WDF actual de 15% son incomparables, ya que todas las especialidades tomaron el primer curso y slo las especialidades de artes liberales, arquitectura y administracin tomaron el nuevo curso. Las especialidades individuales tienen cambios mucho ms sustanciales. Por ejemplo, las especialidades en administracin tuvieron una tasa de 51.5%, de 1999 a 2003, con el primer curso, y una tasa de fracaso de 11.2% en los primeros dos aos del nuevo curso [21]. Desde que se public la primera edicin de este libro, varias escuelas han adoptado y adaptado esta metodologa, adems de evaluar su resultado. Todas ellas han reportado mejoras impresionantes en las tasas de xito [37,36].

    Cmo utilizar este libroEste libro representa lo que enseamos en Georgia Tech casi en el mismo orden. Es probable que algunos maestros omitan ciertas secciones (por ejemplo, las referentes a la sntesis aditiva, a MIDI y a MP3), pero probamos todo el contenido aqu mostrado con nuestros estudiantes.

    Sin embargo, este material se ha utilizado de muchas otras formas.

    Podra ensearse una breve introduccin a la computacin slo con los captulos 2 (introduccin a la programacin) y 3 (introduccin al procesamiento de imgenes), tal vez con algo de material de los captulos 4 y 5. En algunos casos hemos dado talleres de un solo da sobre computacin en los medios, usando slo este material.

    En esencia, los captulos 6 a 8 replican los conceptos de ciencias computacionales de tos captulos 3 a 5, pero en el contexto de sonidos en lugar de imgenes. La replicacin nos parece til: algunos estudiantes parecen relacionarse mejor con los conceptos de iteracin y las condicionales al trabajar con un medio en vez del otro. Adems, esto nos brinda la oportunidad de sealar que el mismo algoritm o puede tener efectos similares en distintos medios (por ejemplo, ampliar o reducir una imagen y aumentar o disminuir

  • xvi Prefacio

    el tono de un sonido son el mismo algoritmo). Pero sin duda podramos omitirlo para ahorrar tiempo.

    El captulo 12 (sobre pelculas) no introduce nuevos conceptos de programacin o de computacin. Aunque es motivacional, podramos omitir el procesamiento de pelculas para ahorrar tiempo.

    Recomendamos que se estudien al menos algunos de los captulos de la ltima unidad para llevar a los estudiantes a pensar sobre computacin y programacin de una manera ms abstracta, pero sin duda no es necesario cubrir todos los captulos.

    Python y JythonEl lenguaje de programacin que utilizamos en este libro es Python. Este lenguaje se ha descrito como seudocdigo ejecutable. Hemos descubierto que tanto los que se especializan en ciencias computacionales como los que no se especializan pueden aprender Python. Puesto que este lenguaje se utiliza en realidad para tareas de comunicaciones (por ejemplo, desarrollo de sitios Web), es un lenguaje relevante para un curso introductorio de computacin. Por ejemplo, los anuncios de empleos que se publican en el sitio Web de Python ( h t t p : / / vwvw. p y th o n . o rg ) indican que compaas como Google e Industrial Light & Magic contratan programadores de Python.

    El dialecto especfico de Python que se utiliza en este libro es Jython ( h ttp :/ /w w w . jy th o n .o rg ). Jython es Python. Las diferencias entre Python (que por lo general se imple- menta en C) y Jython (que se implementa en Java) son similares a las diferencias entre dos implementaciones de lenguajes cualesquiera (por ejemplo, las implementaciones de Microsoft y de GNU con respecto a C++): el lenguaje bsico es exactamente el mismo, con algunas diferencias en las bibliotecas y detalles que la mayora de los estudiantes nunca observar.

    NOTACIONES TIPOGRFICASAlgunos ejemplos de cdigo de Python se ven as: x = x + 1. Algunos ejemplos ms extensos se ven as:

    def holaProgram adorO: p r in t "Hola, programador"

    Al mostrar algo que el usuario escribe con la respuesta de Python, tendr una flente y estilo similares, slo que la escritura del usuario aparecer despus de un indicador de Python (>):

    > print 3 + 47

    Los componentes de la interfaz de usuario de JES (Entorno de Jython para estudiantes, por sus siglas en ingls) se especificarn usando una fuente de letras maysculas pequeas, como el elemento de men G u a r d a r y el botn C a r g a r .

    Hay varios tipos especiales de barras laterales que encontrar en el libro.

    Idea de ciencias com putacionales: una dea de ejemplo Los conceptos de ciencias computacionales aparecen as.

  • Prefacio x ix

    Error comn: un error comn de ejemploLas cosas comunes que pueden hacer que su programa falle aparecen as.

    Tip de depuracin: un tp de depuracin de ejemploSi hay una buena forma de evitar que un error se introduzca en sus programas, se resaltar aqu.

    Los recursos para el profesor estn disponibles, en ingls, en el sitio Web de este libro: w w w .p earso nenesp a o l. com /guzdi a l .

    Nuestros ms sinceros reconocimientos para las siguientes personas:

    Jason Ergle, Claire Bailey, David Raines y Joshua Sklare, que elaboraron la versin inicial de JES con sorprendente calidad en un tiempo increblemente corto. A travs de los aos, Adam Wilson, Larry OI son, Yu Cheung (Toby) Ho, Eric Mickley, Keith McDermott, Ellie Harmon, Timmy Douglas, Alex Rudnick, Brian O Neill y William Fredrick (Buck) Scharfnorth III han convertido a JES en la til y an comprensible herramienta que es en la actualidad.

    Adam Wilson cre las herramientas MediaTools que son tan tiles para explorar sonidos e imgenes, adems de procesar video.

    Andrea Forte, Mark Richman, Matt Wallace, Alisa Bandlow, Derek Chambless, Larry Olson y David Rennie ayudaron a crear los materiales del curso. Derek. Mark y Matt crearon muchos de los programas de ejemplo.

    Hubo varias personas que realmente se esforzaron en Georgia Tech por que saliera este libro. Bob McMath, viceproboste en Georgia Tech, y Jim Foley, decano auxiliar de educacin en el College of Computing, invirtieron mucho tiempo durante las primeras etapas. Kurt Eisclt trabaj duro para convertir este esfuerzo en algo real, convenciendo

    Tip de funcionamiento: un tip de funcionamiento de ejemploLas mejores prcticas o tcnicas que son de verdadera utilidad se resaltan de esta forma.

    RECURSOS PARA EL PROFESOR

    Diapositivas de presentaciones en PowerPoint.

    RECONOCIMIENTOS

  • a otros de que lo tomaran en serio. Janet Kolodner y Aaron Bobick estaban emocionados y fomentaron la idea de la computacin en los medios para los estudiantes que incursionaban en las ciencias computacionales. Jeff Pierce revis y nos apoy en el diseo de las funciones de medios utilizadas en el libro. Aaron Lanterman me proporcion muchos consejos sobre cmo transmitir el contenido del material digital en forma precisa. Joan Morton, Chrissy Hendricks, David White y todo el personal del GVU Center se aseguraron de que tuviramos lo necesario y que se cuidaran los detalles para poder terminar este gran esfuerzo. Amy Bruckman y Eugene Guzdial compraron tiempo para que Mark pudiera completar la versin final.Agradecemos a Colin Potts y a Monica Sweat, quienes impartieron esta clase en Georgia Tech y nos brindaron muchas perspectivas sobre el curso.Charles Fowler fue la primera persona fuera de Georgia Tech dispuesta a arriesgarse y probar el curso en su propia institucin (Gainesville College), por lo cual le estamos muy agradecidos.El curso piloto que se ofreci en la primavera de 2003 en Georgia Tech fue muy importante para hacer mejoras. Andrea Forte, Rachel Fithian y Lauren Rich realizaron la evaluacin correspondiente, lo cual fue en extremo valioso para ayudamos a comprender lo que funcionaba bien y lo que no. Los primeros asistentes de enseanza (Jim Gruen, Angela Liang, Larry Olson, Matt Wallace, Adam Wilson y Jos Zagal) hicieron mucho para crear esta metodologa. Blair Maclntyre, Colin Potts y Monica Sweat ayudaron a que los materiales fueran fciles de adoptar. Jochen Rick hizo de CoWeb/Swiki un excelente lugar para que los estudiantes de CS1315 pasaran el tiempo.Muchos estudiantes sealaron errores y realizaron sugerencias para mejorar el libro. Agradecemos a Catherine Billiris, Jennifer Blake, Karin Bowman, Maryam Doroudi, Suzannah Gil, Baillie Homire, Jonathan Laing, Mireille Murad, Michael Shaw, Sum- mar Shoaib, y en especial a Jonathan Longhitano, quien posee un verdadero instinto para la correccin de textos.Agradecemos a nuestros estudiantes de cursos anteriores de Computacin en los medios: Constantino Kombosch, Joseph Clark y Shannon Joiner por damos permiso de usar sus instantneas de la clase en los ejemplos.El trabajo de investigacin que condujo a este texto se apoy en concesiones de la National Science Foundation: de la Divisin de educacin universitaria, programa CCLI, y del programa Innovaciones educativas del CISE. Agradecemos todo su apoyo.Tambin agradecemos a los estudiantes de computacin Anthony Thomas, Celines Rivera y Carolina Gmez por permitirnos usar sus imgenes.Por ltimo, no por ello menos importante, agradecemos a nuestros hijos Matthew, Katherine y Jennifer Guzdial, que nos permitieron fotografiarlos y grabarlos para el proyecto de medios de mam y pap, y quienes nos brindaron todo su apoyo y entusiasmo por la clase.

    M a r k G u z d i a l y B a r b a r a E r i c s o n Georgia Institute o f Technology

  • Acerca de los autoresM ark G uzdial es profesor en la School o f Interactive Computing del College o f Computing en el Georgia Institute o f Technology. Es uno de los fundadores de la serie de talleres International Computing Education Research de la ACM. La investigacin del Dr. Guzdial se enfoca en las ciencias del aprendizaje y la tecnologa; especficamente en la investigacin sobre educacin computacional. Sus primeros libros fueron sobre el lenguaje de programacin Squeak y su uso en la educacin. Fue el desarrollador original de Swiki (Squeak Wiki), el primer wiki desarrollado de manera explcita para usarse en escuelas. Mark ha publicado varios libros sobre el uso de los medios como un contexto para aprender computacin, lo cual ha influido en los planes de estudios universitarios de computacin alrededor del mundo. Es miembro del Consejo de Educacin de la ACM y del Consejo SIGCSE (Grupo de inters especial para la educacin en ciencias computacionales) de la ACM. Pertenece a los consejos editoriales de las publicaciones Journal o fth e Learning Sciences y Communications o fthe ACM.

    B arbara E ricson es cientfica investigadora y directora de Divulgacin informtica en el College of Computing de Georgia Tech. Desde 2004 ha estado trabajando para mejorar la educacin sobre computacin a nivel introductorio.

    Ha participado como representante de educacin de los maestros en el consejo de la Computer Science Teachers Association, como copresidente de la Alianza K-12 para el National Center for Women in Information Technology, y como lectora para los exmenes avanzados de colocacin de Ciencias computacionales. Disfruta la diversidad de problemas con los que ha trabajado a travs de sus aos en la computacin, entre los que se encuentran grficos por computadora, inteligencia artificial, medicina y programacin orientada a objetos. Mark y Barbara recibieron el premio Karl V. Karlstrom de la ACM para educadores sobresalientes de 2010 por su trabajo de la computacin en los medios, incluyendo este libro.

  • INTRODUCCION

    Captulo 1

    Captulo 2 Captulo 3

    Captulo 4 Captulo 5

    Introduccin a las ciencias computacionales y la computacin multimediaIntroduccin a la programacinModificacin de imgenes mediante el uso de ciclosModificacin de pxeles en un rangoTcnicas de imgenes con seleccin y combinacin

  • C A P T U L O

    1

    Introduccin a las ciencias computacionales y la computacin multimedia

    1.1 D E Q U TRATAN LAS C IEN C IA S CO M PU TACIO N ALES?

    1.2 LEN G U A JES D E PRO GRAM ACI N

    1.3 LO Q U E LAS CO M PUTADO RAS EN TIEN D EN

    1.4 CO M PUTACIN M ULTIM EDIA: PO R Q U DIG ITALIZAR LOS M EDIO S?

    1.5 C IEN C IA S CO M PU TACIO N ALES PARA TO D O S

    O b je tiv o s d e ap ren d iza je d e l captulo

    De qu tratan las ciencias computacionales y qu es lo que les preocupa a los cientficos computacionales.

    Por qu digitalizamos los medios. Por qu es valioso estudiar computacin. Cul es el concepto de una codificacin. Cules son los componentes bsicos de una computadora.

    1.1 DE QU TRATAN LAS CIENCIAS COMPUTACIONALES?Las ciencias computacionales comprenden el estudio del proceso: la forma en que nosotros o las computadoras hacemos las cosas, cmo especificamos lo que hacemos y cmo especificamos qu es lo que estamos procesando. sta es una definicin bastante escasa. Veamos ahora una definicin metafrica.

    Idea de ciencias computacionales: las ciencias computacionales comprenden el estudio de las recetasEn este caso, las "recetas" son de un tipo especial: las que pueden ejecutarse mediante un dispositivo computacional, pero este punto slo es de importancia para los cientficos computacionales. El punto importante en general es que una receta de ciencias computacionales define con exactitud lo que debe hacerse.

    Si lo vemos de una manera ms formal, los cientficos computacionales estudian algoritmos, los cuales son procedimientos paso a paso para realizar una tarea. Cada paso en un algoritmo es algo que una computadora ya sabe cmo hacer (por ejemplo, sumar dos nmeros enteros pequeos) o algo que se puede ensear a una computadora (por ejemplo, sumar nmeros ms grandes, incluso con un punto decimal). A una receta que se puede ejecutar en una computadora se le conoce como programa. Un programa es una codificacin de un algoritmo en una representacin que una computadora pueda leer.

    3

  • 4 Captulo 1 Introduccin a las ciencias computacionales y la computacin multimedia

    Para usar nuestra metfora un poco ms: piense en un algoritmo como la forma paso a paso en la que su abuela hizo su receta secreta. Ella siempre la hizo de la misma forma y tuvo un resultado excelente y muy confiable. Anotar esa receta para poder leerla y hacerla despus es como convertir su algoritmo en un programa para usted.

    Si usted es un bilogo que desea describir la manera en que funciona la migracin o cmo se replica el ADN, entonces es muy til poder escribir una receta que especifique con exacti- tud\o que ocurre, en trminos que puedan definirse y comprenderse por completo. Lo mismo aplica si usted es un qumico que desea explicar cmo se llega al equilibrio en una reaccin. El gerente de una fbrica puede definir un esquema de mquina y banda, e incluso probar su funcionamiento (antes de mover fsicamente las cosas pesadas a sus posiciones) mediante el uso de p rogram as de computadora. El hecho de poder definir tareas y/o simular eventos con exactitud es una razn importante del porqu las computadoras han cambiado de manera radical, cmo es que la ciencia se lleva a cabo y se comprende.

    De hecho, si usted no puede escribir una receta para cierto proceso, tal vez en realidad no quiere comprender el proceso, o tal vez el proceso no puede funcionar realmente de la forma en que usted lo tiene pensado. Algunas veces, la accin de tratar de escribir la receta es una prueba por s sola. Ahora, algunas veces no es posible escribir la receta debido a que el proceso es uno de los pocos que no pueden ejecutarse en una computadora. Hablaremos sobre esos procesos en el captulo 14.

    Tal vez suene gracioso decir que los programas son recetas, pero la analoga es contundente. Gran parte de lo que estudian los cientficos computacionales puede definirse en trminos de recetas.

    Algunos cientficos computacionales estudian la forma en que se escriben las recetas. Acaso hay mejores o peores formas de realizar algo? Si alguna vez ha tenido que separar claras de huevo de las yemas, se habr dado cuenta de que saber cmo hacerlo de la forma correcta marca una enorme diferencia. Los tericos de ciencias computacionales piensan en las recetas ms rpidas y cortas, y las que ocupan la menor cantidad de espacio (puede considerarlas como el espacio en un mostrador la analoga funciona), o incluso que usan la menor cantidad de energa (lo que es importante cuando operan en dispositivos de baja energa, como los telfonos celulares). A la manera en que fiinciona una receta, algo completamente distinto a la forma en que est escrita (por ejemplo, en un programa), se le conoce como el estudio de los algoritmos. Los ingenieros de software piensan sobre cmo es que los grupos grandes pueden reunir recetas que todava funcionan (las recetas para algunos programas, como el que lleva la cuenta de los registros de Visa/MasterCard, tienen literalmente millones de pasos!). El trmino software significa una coleccin de programas de computadora (recetas) que logran una tarea.

    Otros cientficos computacionales estudian las unidades que se utilizan en las recetas. Acaso importa si una receta usa medidas mtricas o inglesas? La receta puede funcionar en cualquier caso, pero si no sabemos lo que es una libra o una taza, nos ser difcil entenderla. Tambin hay unidades que tienen sentido para ciertas tareas y para otras no, pero si podemos ajustar las unidades a las tareas ser ms fcil explicarlas y podremos realizar las cosas con mayor rapidez, adems de evitar errores. Alguna vez se ha preguntado por qu los barcos en el mar miden su velocidad en nudos? Por qu no usar algo como metros por segundo? Algunas veces, en ciertas situaciones especiales por ejemplo, en un barco en alta mar los trminos ms comunes no son apropiados o no funcionan tan bien como deberan. O podemos inventar nuevos tipos de unidades, como una unidad que represente a todo un programa o una computadora, o una red como la de sus amigos y los amigos de sus amigos en Facebook. Al estudio

  • Seccin 1.1 De qu tratan las ciencias computacionales? 5

    de las unidades de ciencias computacionales se le conoce como estructuras de datos. Los cientficos computacionales que estudian formas de llevar el registro de muchos datos en muchos tipos distintos de unidades estudian las bases de datos.

    Se pueden escribir recetas para cualquier cosa? Acaso hay recetas que no puedan escribirse? Los cientficos computacionales saben que hay recetas que no pueden escribirse. Por ejemplo, no podemos escribir una receta que pueda indicar con absoluta certeza si alguna otra receta funcionar o no. Qu hay sobre la inteligencia? Podemos escribir una receta de tal forma que una computadora que la siga pudiera realmente estar pensando (y como podramos saber si sali bien)? Los cientficos computacionales en teora, sistemas inteligentes, inteligencia artificial y sistemas se preocupan por este tipo de cosas.

    Incluso hay cientficos computacionales que se enfocan en saber si a las personas les gusta b que producen las recetas, algo parecido a las crticas de restaurantes en un peridico. Algunos de stos son especialistas en interfaces hum ano-com putadora que se preocupan por saber si las personas pueden comprender y hacer uso de las recetas (recetas que producen una interfaz que las personas utilizan, como ventanas, botones, barras de desplazamiento y otros elementos de lo que consideramos un programa en ejecucin).

    As como algunos chefs se especializan en ciertos tipos de recetas, como las crepas o la carne asada, los cientficos computacionales tambin se especializan en ciertos tipos de recetas. Los cientficos computacionales que trabajan en los grficos estn enfocados principalmente en las recetas que producen imgenes, animaciones e incluso pelculas. Los cientficos computacionales que trabajan en la msica por computadora se concentran en las recetas que producen sonidos (que a menudo son meldicos, pero no siempre).

    Hay adems otros cientficos computacionales que estudian las propiedades emergentes de las recetas. Piense en World Wide Web. Esta red es en realidad una coleccin de millones de recetas (programas) que se comunican entre s. Por qu una seccin de la Web se volvera ms lenta en cierto punto? Es un fenmeno que emerge de estos millones de programas, sin duda algo que no se tena planeado. Esto es algo que los cientficos computacionales de redes estudian. Lo verdaderamente sorprendente es que estas propiedades emergentes (el hecho de que empiezan a ocurrir cosas cuando se tienen muchas, muchas recetas interactuando al mismo tiempo) tambin pueden usarse para explicar cosas no relacionadas con la computacin. Por ejemplo, la forma en que las hormigas buscan alimento o el hecho de que las termitas fabriquen montculos tambin puede describirse como algo que simplemente ocurre cuando se tienen muchos programas pequeos haciendo algo simple e interactuando. En la actualidad existen cientficos computacionales que estudian la forma en que la Web permite nuevos tipos de interacciones, en especial en grupos extensos (como Facebook o Twitter). Los cientficos computacionales que estudian la computacin social estn interesados en cmo funcionan estos tipos de interacciones y en las caractersticas del software que son ms exitosas para promover interacciones sociales de utilidad.

    La metfora de la receta tambin funciona en otro nivel. Todos sabemos que es posible cambiar algunas cosas en una receta sin que el resultado cambie de manera considerable. Siempre podemos aumentar todas las unidades por medio de un multiplicador (por decir, el doble) para crear ms. Siempre es posible agregar ms ajo u organo a la salsa de espagueti. Pero hay algunas cosas que no podemos cambiar en una receta. Si la receta requiere polvo para hornear, no podemos sustituirlo por bicarbonato de sodio. Si se supone que debemos hervir las empanadillas y luego sofreiras, es probable que invertir el orden de estas acciones no d un buen resultado (figura 1.1).

  • 6 Captulo 1 Introduccin a las ciencias computacionales y la computacin multimedia

    POLLO CACCIATORE

    3 pechugas de pollo enteras con hueso 1 lata (28 oz) de tomates picados1 cebolla mediana, picada 1 lata (15 oz) de salsa de tomate1 cucharada de ajo picado 1 lata (6.5 oz) de championes2 cucharaditas y despus Va de taza de aceite de oliva 1 lata (6 oz) de pasta de tomate1 Vi cucharaditas de harina Vi tarro (26 oz) de salsa de espaguetiVa de cucharadita de sal para sazonar Lawrys 3 cucharaditas de sazonador italiano1 pimiento picado (opcional) de cualquier color 1 cucharada de polvo de ajo (opcional)

    Corte el pollo en cuadros de aproximadamente 1 pulgada. Sofra la cebolla y el ajo hasta que la cebolla est transparente. Mezcle la harina y la sal de Lawrys. Lo ideal es una proporcin entre 1:4 y 1:5 de sal para sazonar y de harina, y una cantidad suficiente de esta mezcla para cubrir el pollo. Coloque el pollo cortado y la harina sazonada en una bolsa, y agite para cubrir. Agregue el pollo cubierto a la cebolla y el ajo. Mueva con frecuencia la mezcla hasta que el pollo est dorado.

    Tendr que agregar aceite para evitar que se pegue o se queme: algunas veces yo agrego Va de taza de aceite de oliva. Agregue los tomates, la salsa, los championes y la pasta (junto con los pimientos opcionales). Mezcle bien. Agregue el sazonador italiano. Como tambin me gusta el ajo, por lo general tambin agrego polvo de ajo. Mezcle bien. Debido a toda la harina, la salsa puede hacerse muy espesa. Por lo general la adelgazo con la salsa de espagueti, hasta Vi tarro. Hierva a fuego lento de 20 a 30 minutos.

    FIGURA 1.1Una receta de cocina: en todo momento podemos duplicar los ingredientes, pero si agregamos una taza adicional de harina no se adelgazar, y jno intente dorar el pollo despus de agregar la salsa de tomate!

    Lo mismo aplica para las recetas de software. Por lo general hay cosas que podemos cambiar con facilidad: los nombres de las cosas (aunque es conveniente cambiar los nombres de manera consistente), algunas de las constantes (nmeros que aparecen como simples nmeros y no como variables) y tal vez hasta algunos de los rangos de datos (secciones de stos) que se van a manipular. Sin embargo, el orden de los comandos que se envan a la computadora siempre tiene que quedar exactamente como se indica. A medida que avancemos, aprender qu es lo que podemos cambiar con seguridad y qu es lo que no debemos modificar.

    1.2 LENGUAJES DE PROGRAMACINLos cientficos computacionales escriben las recetas en un lenguaje de program acin (figura 1.2). Se utilizan distintos lenguajes de programacin para diferentes propsitos. Algunos de ellos son muy populares, como Java y C++. Otros son menos conocidos, como Squeak y T. Algunos otros estn diseados para facilitar en gran medida el aprendizaje de las ideas de ciencias computacionales, como Scheme o Python, pero el hecho de que sean fciles de aprender no siempre los hace muy populares ni tampoco la mejor opcin para los expertos que construyen recetas ms grandes o complicadas. Al ensear ciencias computacionales es difcil balancear el hecho de elegir un lenguaje fcil de aprender y que sea popular, adems de ser lo suficientemente til para los expertos como para que los estudiantes se vean motivados a aprenderlo.

    Por qu los cientficos computacionales simplemente no usan los lenguajes humanos naturales, como ingls y espaol? El problema es que los lenguajes naturales evolucionaron de la forma en que lo hicieron para mejorar las comunicaciones entre seres muy inteligentes: los humanos. Como explicaremos con ms detalle en la siguiente seccin, las computadoras

  • Seccin 1.2 Lenguajes de programacin 7

    Python/Jython

    def h e l lo ( ) :p r in t Hola mundo

    Java

    c la s s HolaMundo (s t a t ic p ub lic void main( S tr in g a rg s [] ) {

    System .o u t.p rin t1n ( Hola mundo ) ;}

    }

    C++

    #inc1ude m ain() {

    cout Hola mundo en d l; return 0 ;

    }

    Scheme

    (d e fine holamundo (lambda ( )

    (d isp la y Hola mundo )(n ev/lin e )))

    FIGURA 1.2Comparacin de lenguajes de programacin: una tarea de programacin simple y comn es imprimir las palabras "Hola mundo" en la pantalla.

    son excepcionalmente tontas. Necesitan un nivel de especificidad que el lenguaje natural no puede ofrecer. Adems, lo que decimos a otra persona en una comunicacin natural no es exactamente lo que decimos en una receta computacional. Cundo fue la ltima vez que dijo a alguien cmo funcionaba un videojuego como Halo, Quake o Cali o fD uty con tantos detalles minuciosos como para que pudiera replicar el juego (por decir, en papel)? Un idioma humano como el ingls o el espaol no es bueno para ese tipo de tarea.

    Existen una gran variedad de lenguajes de programacin debido a que hay una gran variedad de recetas para escribir. Los programas escritos en el lenguaje de programacin C tienden a ser muy rpidos y eficientes, pero tambin tienden a ser difciles de leer y de escribir; adems requieren unidades que tratan ms sobre las computadoras que sobre las migraciones de aves, o ADN, o cualquier otra cosa sobre la que quiera usted escribir su receta. El lenguaje de programacin Lisp (y los lenguajes relacionados como Scheme, T y Common Lisp) es muy flexible y adecuado para explorar la forma de escribir recetas que no se hayan escrito antes, pero Lisp tiene una apariencia muy extraa en comparacin con lenguajes como C, por lo que muchas personas lo evitan y, como consecuencia natural, hay pocas personas que lo conocen. Si desea contratar a cien programadores para que trabajen en su proyecto, ser ms sencillo encontrar cien programadores que conozcan un lenguaje popular que uno menos popular, aunque esto no significa que el lenguaje popular sea el mejor para su tarea.

    El lenguaje de programacin que usaremos en este libro es Python (visite h t t p : //www. p yth o n . o rg para obtener ms informacin). Python es un lenguaje bastante popular que se utiliza con mucha frecuencia para la programacin Web y multimedia. El motor de bsqueda

  • 8 Captulo 1 Introduccin a las ciencias computacionales y la computacin multimedia

    Web Google usa Python. La compaa de medios Industrial Light & Magic tambin usa Python. Hay una lista de compaas que usan Python disponible en h t t p : / /w i k i . p y th o n . o rg /m o in /O rg a n iza t io n s lIs in g P y th o n . Este lenguaje es muy sencillo de aprender, fcil de leer y muy flexible, pero no muy eficiente. Es probable que el mismo algoritmo codificado en C y en Python sea ms rpido en C. Python es un buen lenguaje para escribir programas que funcionan dentro de una aplicacin, como el lenguaje de manipulacin de imgenes GIMP (h ttp :/ /w w w .g im p .o rg ) o la herramienta de creacin de contenido 3D llamada Blender (h t tp :/ / w w w .b le n d e r .o rg ).

    La versin de Python que usamos en este libro se llama Jy thon (h ttp :/ /w w w . j y t h o n . o rg ). Por lo general, Python se implementa en el lenguaje de programacin C. Jython es Python implementado en Java: esto significa que en realidad Jython es un programa escrito en Java Jython nos permite hacer multimedia que funciona en mltiples plataformas computacionales. Jython es un lenguaje de programacin real que se utiliza en muchos proyectos. Es una forma de Python. Puede descargar una versin de Jython para su computadora desde el sitio Web de Jython, que funcionar para todo tipo de propsitos.

    Usaremos Jython en este libro por medio de un entorno de programacin especial conocido como JE S {Jython Environment for Students: Entorno de Jython para estudiantes), el cual se desarroll para facilitar la programacin en Jython. JES cuenta con algunas caractersticas para trabajar con multimedia, como visores de sonidos e imgenes. JES tambin tiene integradas ciertas funciones especiales para manipular medios digitales, las cuales estn disponibles para el programador sin necesidad de hacer nada especial. Todo lo que puede hacer en JES tambin puede hacerse en Jython normal, aunque tendra que incluir de manera explcita las bibliotecas especiales. La mayora de los programas escritos en Jython funcionan tambin en Python.

    Ahora revisemos dos de los trminos ms importantes que utilizaremos en este libro:

    Un program a es una descripcin, en un lenguaje de programacin, de un proceso que obtiene cierto resultado til para alguien. Un programa puede ser pequeo (como el que implementa una calculadora) o enorme (como el que usa su banco para rastrear todas sus cuentas).

    Un algoritmo (en contraste) es la descripcin de un proceso paso a paso que no est enlazado con ningn lenguaje de programacin. El mismo algoritmo puede implementar- se en muchos lenguajes distintos y de muchas formas diferentes en muchos programas distintos, aunque todos seran el mismo proceso si hablamos sobre el mismo algoritmo.

    El trmino receta, segn la forma en que se utiliza en este libro, describe programas o porciones de programas que hacen algo. Utilizaremos el trmino receta para enfatizar las piezas de un programa que realizan una tarea til relacionada con multim edia.

    1.3 LO QUE LAS COMPUTADORAS ENTIENDENLas recetas computacionales se escriben para ejecutarse en computadoras. Cmo sabe la computadora qu hacer? Qu podemos decirle a la computadora que haga en la receta? La respuesta es, muy, muy poco . Las computadoras son exageradamente estpidas. En realidad slo conocen los nmeros.

    En realidad, incluso decir que las computadoras conocen los nmeros no es del todo correcto. Las computadoras usan codificaciones de nmeros. Son dispositivos electrnicos que reaccionan a los voltajes en los cables. Cada cable se denomina b i t Si un cable tiene voltaje, decimos que codifica un 1. Si no tiene voltaje, decimos que codifica un 0. Agrupamos estos cables (bits)

  • Seccin 1.3 Lo que las computadoras entienden 9

    en conjuntos. Un conjunto de 8 bits se conoce como byte. As, partiendo de un conjunto de ocho cables (un byte), tenemos un patrn de ocho ceros y unos, por ejemplo: 01001010. Si usamos el sistema numrico binario podemos interpretar este byte como un nm ero (figura 1.3). Aqu es de donde sacamos la afirmacin de que una computadora conoce los nmeros.1

    Una computadora tiene una m em oria llena de bytes. Todo con lo que una computadora trabaja en un instante dado se almacena en su memoria. Esto significa que todo con lo que trabaja una computadora se codifica en sus bytes: imgenes JPEG, hojas de clculo de Excel, documentos de Word, molestos anuncios emergentes en Web, y el correo electrnico basura ms reciente.

    Una computadora puede hacer muchas cosas con los nmeros. Puede sumarlos, restarlos, multiplicarlos, dividirlos, ordenarlos, recolectarlos, duplicarlos, filtrarlos (por ejemplo, Haz una copia de estos nmeros, pero slo los pares), compararlos y hacer cosas con base en la comparacin. Por ejemplo, podemos decir lo siguiente a una computadora en una receta: Compara estos dos nmeros. Si el primero es menor que el segundo, salta hasta el paso 5 en esta receta. De lo contrario, contina con el siguiente paso .

    Hasta ahora parece que la computadora es un tipo de calculadora elegante, y sin duda sa es la razn por la que se invent. Uno de los primeros usos de una computadora fue para calcular las trayectorias de los proyectiles durante la Segunda Guerra Mundial (Si el viento proviene del SE a 15 mph y queremos golpear un blanco a 0.5 millas de distancia, a un ngulo de 30 grados al este del norte, entonces incline su lanzador a . . .). Las computadoras modernas pueden realizar miles de millones de clculos por segundo. Pero lo que hace a la computadora til para recetas generales es el concepto de las codificaciones.

    Idea de ciencias com putacionales: las computadoras pueden extender capas de codificacionesLas computadoras pueden extender capas de codificaciones a casi cualquier nivel de complejidad. Los nmeros pueden interpretarse como caracteres, que a su vez pueden interpretarse en conjuntos como pginas Web, lo cual puede interpretarse que aparece como mltiples fuentes y estilos. Pero en el nivel ms inferior, la computadora s lo "conoce" de voltajes, los cuales interpretamos como nmeros. Las codificaciones nos permiten olvidarnos sobre los detalles de nivel inferior. Las codificaciones son un ejemplo de abstraccin, con lo cual obtenemos nuevos conceptos para usar que nos permiten ignorar otros detalles.

    cables

    /

    27 = 128* 0 = 0 +26 = 64* 1 = 64 +25 = 32* 0 = 0 +2* = 16* 0 = 0 +

    8* 1 = 8 +

    4* 0 = 0 + 2* 1 = 2 + 1*0 = 0

    2a = 22 = 21 = 2 =

    se interpreta como 74

    FIGURA 1.3Ocho cables con un patrn de voltajes forman un byte, el cual se interpreta como un patrn de ocho ceros y unos, lo que a su vez se interpreta como un nmero decimal.

    'Hablaremos ms sobre este nivel de la computadora en el captulo 14.

  • 10 Captulo 1 Introduccin a las ciencias computacionales y la computacin multimedia

    Si uno de estos bytes se interpreta como el nmero 65, podra tan slo ser el nmero 65. O podra ser la letra A si usamos una codificacin estndar de nmeros a letras, conocida como Cdigo estndar estadounidense para el intercambio de informacin (ASCII, por sus siglas en ingls). Si el 65 aparece en una coleccin de otros nmeros que interpretamos como texto, y se encuentra en un archivo que termina en htmT, podra ser parte de algo parecido a

  • Seccin 1.4 Computacin multimedia: por qu digitalizar los medios? 11

    pulan imgenes, sonidos, texto e incluso otras recetas. Esto es posible debido a que todo en la computadora se representa en forma digital, incluso las recetas. No podramos realizar computacin en los medios si stos no se representaran en forma digital. Al terminar de leer el libro habr escrito recetas para implementar efectos especiales de video digital, que crean pginas Web de la misma forma que lo hacen Amazon y eBay, y que filtran imgenes como Photoshop.

    COMPUTACIN MULTIMEDIA: POR QU DIGITALIZAR LOS MEDIOS?Consideremos una codificacin que sera apropiada para las imgenes. Imagine que las imgenes estn compuestas de pequeos puntos. Eso no es difcil de imaginar: analice de cerca su monitor o una pantalla de TV, y ver que sus imgenes ya estn compuestas de pequeos puntos. Cada uno de estos puntos es de un color distinto. La fsica nos dice que los colores pueden describirse como la suma de rojo, verde y azul. Al sumar el rojo y el verde se obtiene amarillo. Mezcle los tres y obtendr blanco. Desactvelos todos y tendr un punto negro.

    Qu pasara si codificramos cada punto en una imagen como una coleccin de tres bytes, uno para cada cantidad de rojo, verde y azul en ese punto en la pantalla? Y si recolectamos varios de estos conjuntos de tres bytes para determinar todos los puntos de una imagen dada? sta es una forma bastante razonable de representar las imgenes, y en esencia es como lo haremos en el captulo 3.

    Para manipular estos puntos (a cada uno se le conoce como pixel o elemento de imagen) se puede requerir mucho procesamiento. Existen miles, o incluso millones de estos puntos en una imagen con la que podramos trabajar en la computadora o en la Web. Pero la computadora no se aburre, adems de que es muy rpida.

    La codificacin que usaremos para el sonido involucra 44100 conjuntos de dos bytes (lo que se conoce como muestra) para cada segundo de tiempo. Una cancin de tres minutos requiere 158760000 bytes (y el doble para sonido estreo). Para realizar cualquier procesamiento con estos datos se necesitan muchas operaciones. Pero a mil millones de operaciones por segundo, podemos hacer muchas operaciones con cada uno de esos bytes en slo unos cuantos momentos.

    Para crear codificaciones de este tipo para los medios se requiere un cambio en los medios. Observe el mundo real: no est compuesto por miles de pequeos puntos que pueda ver. Escuche un sonido: acaso puede or miles de pequeos bits de sonido por segundo? El hecho de que no pueda escuchar pequeos bits de sonido por segundo es lo que hace posible crear estas codificaciones. Nuestros ojos y odos estn limitados: slo podemos percibir hasta cierto punto, y slo cosas hasta cierto tamao. Si descompone una imagen en puntos que sean lo bastante pequeos, sus ojos no podrn detectar el hecho de que no sea un flujo continuo de color. Si descompone un sonido en piezas lo bastante pequeas, sus odos no podrn detectar que el sonido no es un flujo continuo de energa auditiva.

    El proceso de codificar medios en pequeas piezas se denomina digitalizacin, lo que algunas veces se conoce como volverse digitaC\ Digital significa (de acuerdo con los Diccionarios Longman) Proporcionar informacin en forma de nmeros; en relacin con los dedos de las manos y los pies .2 El proceso de convertir las cosas a digitales trata sobre convertir cosas de lo continuo e incontable en algo que podamos contar, como si fuera con nuestros dedos.

    Los medios digitales, cuando se hacen bien, se sienten igual para nuestro aparato sensorial humano limitado, como si fueran el original. Las grabaciones fonogrficas (alguna

    2Definicin de digital de LONGMAN DICTIONARY OF CONTEMPORARY ENGLISH. Copyright 2009. Pearson Education. Reimpreso con permiso.

  • 12 Captulo 1 Introduccin a las ciencias computacionales y la computacin multimedia

    vez ha visto una?) capturan el sonido en forma continua, como una seal anloga. Las fotografas (en pelcula) capturan la luz como un flujo continuo. Algunas personas dicen que pueden escuchar la diferencia entre las grabaciones fonogrficas y las grabaciones en CD; pero para nuestros odos y la mayora de las mediciones, un CD (que es sonido digitalizado) suena justo igual, o tal vez ms claro. Las cmaras digitales con resoluciones bastante altas producen imgenes con calidad fotogrfica.

    Por qu querramos digitalizar los medios? Porque entonces seran ms fciles de manipular, de replicar con exactitud, de comprimir, de buscar, de indexar y clasificar (por ejemplo, para agrupar imgenes o sonidos similares), de comparar y de transmitir. Es decir, es difcil manipular imgenes que estn en fotografas, pero es muy sencillo cuando las mismas imgenes estn digitalizadas. Este libro trata sobre cmo usar el mundo cada vez ms digital de los medios y manipularlos, aprendiendo computacin en el proceso.

    Gracias a la Ley de Moore la computacin multimedia es algo factible como un tema introductorio. La computacin multimedia se basa en que la computadora realiza muchas y muchas operaciones en muchos, pero muchos bytes. Las computadoras modernas pueden hacer esto con facilidad. Incluso con lenguajes lentos (pero fciles de comprender), aun con recetas ineficientes (pero fciles de leer y escribir), podemos aprender sobre la computacin mediante la manipulacin de medios.

    A la hora de manipular medios, necesitamos respetar los derechos digitales del autor. Est permitido modificar imgenes y sonidos para fines educativos bajo la ley de uso justo (que limita o crea excepciones en cuanto al copyright del propietario). Sin embargo, compartir o publicar imgenes o sonidos manipulados podra representar una infraccin del copyright del propietario.

    1.5 CIENCIAS COMPUTACIONALES PARA TODOSPor qu debe aprender ciencias computacionales escribiendo programas que manipulan medios? Por qu alguien que no desea ser un cientfico computacional debe aprender acerca de las ciencias computacionales? Por qu debera usted estar interesado en aprender sobre la computacin mediante la manipulacin de medios?

    En la actualidad, la mayora de los profesionales manipulan medios: papeles, videos, grabaciones de cinta, fotografas y dibujos. Esta manipulacin se realiza cada vez con ms frecuencia con una computadora. Los medios se encuentran por lo general en un formato digitalizado.

    Usamos software para manipular estos medios. Utilizamos Adobe Photoshop para manipular nuestras imgenes y Audacity para manipular nuestros sonidos, y tal vez Microsoft PowerPoint para ensamblar nuestros medios en presentaciones. Usamos Microsoft Word para manipular nuestro texto y Google Chrome o Microsoft Internet Explorer para navegar por los medios en Internet.

    Entonces, por qu alguien que no desea ser un cientfico computacional debera estudiar ciencias computacionales? Por qu debe aprender a programar? Acaso no basta con aprender a usar todo este grandioso software? Las siguientes secciones proporcionan las respuestas a estas preguntas.

    1.5.1 Es acerca de la comunicacinLos medios digitales se manipulan con software. Si slo puede manipular medios con software que alguien ms cre para usted, est limitando su habilidad de comunicarse. Qu pasara si desea decir algo que no puede decirse en software de Adobe, Microsoft, Apple y

  • Problemas 13

    el resto? O qu tal si desea decir algo de una manera que esos programas no soportan? Si sabe cmo programar, incluso aunque tarde ms tiempo en hacerlo por su cuenta, tendr la libertad de manipular los medios a su manera.

    Qu hay sobre aprender a usar estas herramientas a primera instancia? En todos nuestros aos trabajando con computadoras, hemos visto muchos tipos de software ir y venir como el paquete de dibujo, pintura, procesamiento de palabras, edicin de video, etctera. No podemos aprender tan slo una herramienta individual y esperar poder usarla durante toda nuestra carrera. Si sabemos cmo funcionan las herramientas, tenemos un entendimiento base que puede transferirse de una herramienta a otra. Puede pensar sobre su trabajo con los medios en trminos de los algoritmos y no de las herramientas.

    Por ltimo, si va a preparar medios para Web, ya sea para marketing, impresin, difusin o para cualquier otro uso, vale la pena que tenga una idea de lo que es posible y puede hacerse con los medios. Es an ms importante como consumidor de medios que sepa cmo pueden manipularse los medios, que el hecho de saber qu es verdad y qu puede ser slo un truco. Si conoce los fundamentos de la computacin multimedia, entiende lo que va ms all de lo que provee cualquier herramienta individual.

    1.5.2 Es acerca del procesoEn 1961, Alan Perlis dio una conferencia en el MIT, en donde afirm que las ciencias computacionales, y en especfico la programacin, deberan ser parte de una educacin liberal [17]. Perlis es una figura importante en el campo de las ciencias computacionales. El mayor premio disponible en ciencias computacionales es el premio Turing de la ACM. Perlis fue el primero en recibir ese premio. Es una figura importante en la ingeniera de software e inici varios de los primeros departamentos de ciencias computacionales en Estados Unidos.

    El argumento de Perlis puede hacerse en comparacin con el clculo. Por lo general, el clculo se considera parte de una educacin liberal: no todos toman clculo, pero si desea estar bien educado, por lo general debe tomar un semestre de clculo. El clculo es el estudio de los cambios, lo cual es importante en muchos campos. Como dijimos antes en este captulo, las ciencias computacionales constituyen el estudio del proceso. ste es importante para casi cualquier campo, desde negocios pasando por ciencias, hasta medicina pasando por leyes. Para todos es importante conocer el proceso de manera formal. El uso de una computadora para automatizar procesos ha cambiado a todas las profesiones.

    Hace poco, Jeannette Wing afirm que todos deberan aprender el pensamiento compu- tacional [34]. Ella considera que los tipos de habilidades que se ensean en la computacin son herramientas imprescindibles para todos los estudiantes. Esto es lo que predijo Alan Perlis: que la automatizacin de la computacin cambiara la forma en que aprendemos sobre nuestro mundo.

    La realidad es que muchas personas programan en la actualidad. Los cientficos y los ingenieros escriben programas para crear modelos y probarlos en simulaciones, o para analizar datos. Los diseadores de grficos escriben programas para realizar tareas del programa en Photoshop o GIMP para ahorrar tiempo, o para mover sus diseos a Web. Los contadores programan cuando crean hojas de clculo complejas. Muchos profesionales necesitan almacenar y manipular procesos y, por ende, aprenden a programar, justo como Alan Perlis predijo.

    PROBLEMAS1.1 Todas las profesiones usan las computadoras en la actualidad. Use un navegador Web

    y un motor de bsqueda como Google para buscar sitios que relacionen su campo de

  • 14 Captulo 1 Introduccin a las ciencias computacionales y la computacin multimedia

    estudio con las ciencias computacionales, las computadoras o la computacin. Por ejemplo, busque biologa ciencias computacionales o computacin gerencial .

    1.2 Busque una tabla ASCII en Web: una tabla con una lista de todos los caracteres y su correspondiente representacin numrica. Anote la secuencia de nmeros cuyos valores ASCB forman su nombre.

    1.3 Busque una tabla Unicode en Web. Cul es la diferencia entre ASCII y Unicode? Por qu necesitaramos Unicode si ya tenemos ASCII?

    1.4 Considere la representacin para las imgenes descrita en la seccin 1.4, en donde cada punto (pixel) en la imagen se representa mediante tres bytes para los componentes rojo, verde y azul del color en ese punto. Cuntos bytes se requieren para representar una imagen de 640 por 480, que viene siendo un tamao de imagen comn en Web? Cuntos bytes se requieren para representar una imagen de 1024 por 768, un tamao comn de pantalla? (Qu es lo que entiende ahora por el trmino cmara de tres megapxeles?).

    1.5 Un bit puede representar 0 o 1. Con dos bits tenemos cuatro combinaciones posibles: 00,01, 10 y 11. Cuntas combinaciones diferentes podemos lograr con cuatro bits u ocho bits (un byte)? Cada combinacin puede usarse para representar un nmero binario. Cuntos nmeros puede representar con 2 bytes (16 bits)? Cuntos nmeros puede representar con cuatro bytes?

    1.6 Cmo puede representar un nmero de punto flotante en trminos de bytes? Busque el trmino punto flotante en Web y vea lo que encuentra.

    1.7 Busque a Alan Kay y el Dynabook en Web. Encuentre un sitio que le parezca creble para su informacin e incluya el URL en su respuesta, junto con sus motivos para creer que la fuente es creble. Qu tiene que hacer l con la computacin multimedia?

    1.8 Busque cmo contribuy Grace Hopper a los lenguajes de programacin?1.9 Busque qu departamento de ciencias computacionales dirigi Andrea Lawrence?1.10 Busque qu tiene que ver Alan Turing con nuestra nocin de lo que una computadora

    puede hacer y cmo funcionan las codificaciones?1.11 Busque qu computadoras de Harvard contribuyeron a la astronoma?1.12 Busque cmo contribuy Adele Goldberg a los lenguajes de programacin?1.13 Busque qu cosas sorprendentes hizo Kurt Gdel con las codificaciones?1.14 Busque qu cosas sorprendentes hizo Ada Lovelace antes de construir la primera

    computadora mecnica?1.15 Busque qu hizo Claude Shannon por su tesis de maestra?1.16 Busque qu ha hecho Richard Tapia para fomentar la diversidad en la computacin?1.17 Busque qu herramienta de computadora (que usted probablemente usa en forma

    regular) ayud a crear Marissa Mayer?1.18 Busque qu premio de computacin recibi Francs Alien?1.19 Busque en qu nueva tecnologa est trabajando Mary Lou Jepsen?1.20 Busque qu cre Ashley Qualls que vale un milln de dlares?1.21 Busque qu fue lo que invent Tim Bemers-Lee?

  • Para profundizar 15

    PARA PROFUNDIZARPuede aprender ms sobre la ley de copyright en Estados Unidos, incluyendo temas como el uso justo, en h t tp :/ /w w w .c o p y r ig h t .g o v / .El libro Chaos de James Gleick describe ms sobre las propiedades emergentes: cmo pueden los cambios pequeos conducir a efectos dramticos, y los impactos no previstos de los diseos debido a las interacciones difciles de pronosticar.El libro Turtles, Termites and Traffic Jams: Explorations in Massively Parallel Microworlds [33] de Mitchel Resnick describe la forma en que pueden describirse las hormigas, termitas e incluso los embotellamientos de trfico y los moldes de cieno de una manera muy precisa, con cientos o miles de procesos muy pequeos (programas) en ejecucin, interactuando todos a la vez.Exploring The Digital Domain [3] es un maravilloso libro introductorio sobre la computacin, con excelente informacin sobre los medios digitales.

  • C A P T U L O

    2Introduccin a la programacin

    2.1 LA PRO GRAM ACI N SE R EF IER E A LA ASIG N AC I N DE N OM BRES

    2.2 LA PRO GRAM ACI N EN PYTHON

    2.3 LA PRO GRAM ACI N EN JE S

    2.4 LA CO M PUTACIN M ULTIM EDIA Y JE S

    2.5 CREAC I N DE UN PRO GRAM A

    O b je tiv o s de ap ren d iza je d e l captu lo

    Los objetivos de aprendizaje de medios para este captulo son:

    Crear y mostrar imgenes. Crear y reproducir sonidos.

    Los objetivos de ciencias computacionales para este captulo son:

    Usar JE S para introducir y ejecutar programas. Crear y usar variables para almacenar valores y objetos, como imgenes y sonidos. Crear fundones. Reconocer distintos tipos (codificaciones) de datos, como enteros, nmeros de punto

    flotante y objetos de medios. Secuenciar las operaciones en una funcin.

    2.1 LA PROGRAMACIN SE REFIERE A LA ASIGNACIN DE NOMBRES

    Idea de ciencias computacionales: gran parte de la programacin trata sobre la asignacin de nombresUna computadora puede asociar nombres o sm bolos con casi cualquier cosa: con un byte especfico; con una coleccin de bytes que conforman una variable numrica o un grupo de letras; con un elemento de medios como un archivo, sonido o imagen; o incluso con conceptos ms abstractos, como una receta con nombre (un programa) o una codificacin con nombre (un tipo). Al igual que un filsofo o un matemtico, un cientfico computacional considera que una eleccin de nombres es de alta calidad: el esquema de nombramiento (los nombres y qu es lo que nombran) debera ser elegante, parsimonioso y utilizable. El nombramiento es una forma de abstraccin. El nombre se usa para hacer referencia a lo que estamos nombrando.

    16

  • Seccin 2.1 La programacin se refiere a la asignacin de nombres 17

    Es obvio que a la computadora en s no le importan tos nombres. stos son para los humanos. Si la computadora fuera slo una calculadora, entonces el proceso de recordar palabras y su asociacin con valores sera tan slo un desperdicio de la memoria. Pero para los humanos esto es muy poderoso, ya que nos permite trabajar con la computadora de una manera natural, incluso de una forma que extiende la manera en que pensamos sobre las recetas (procesos) en general.

    En realidad, un lenguaje de program acin es un conjunto de nombres para el que una computadora tiene codificaciones, de tal forma que los nombres indican a la computadora que realice acciones esperadas e interprete nuestros datos de ciertas formas esperadas. Algunos de los nombres de los lenguajes de programacin nos permiten definir nuevos nombres, que a su vez nos permiten crear nuestros propios niveles de codificacin. Asignar una variable a un valor es una forma de definir un nombre para la computadora. Definir una funcin es dar un nombre a una receta.

    Un program a est formado por un conjunto de nombres y sus valores, en donde algunos de estos nombres tienen valores de instrucciones para la computadora (cdigo). Nuestras instrucciones estarn en el lenguaje de programacin Python. Combinar estas dos definiciones significa que el lenguaje de programacin Python nos proporciona un conjunto de nombres tiles que tienen un significado para la computadora, y que nuestros programas son entonces una seleccin de nombres tiles de Python, adems de los nombres que definamos nosotros, que en conjunto nos permiten indicar a la computadora lo que queremos hacer.

    Idea de ciencias computacionales: los programas son para las personas, no para las computadorasRecuerde que los nombres slo son significativos para las personas, no para las computadoras. stas slo reciben instrucciones. Un buen programa es significativo (comprensible y til) para los humanos. Las computadoras estn hechas para servir a las personas.

    Hay nombres buenos y malos. Esto no tiene nada que ver con las malas palabras o los TLA (acrnimos de tres letras). Un buen conjunto de codificaciones y nombres nos permite describir las recetas de tal forma que sea algo natural, sin tener que decir demasiado. Podemos considerar a la diversidad de lenguajes de programacin como una coleccin de conjuntos de nombramientos y codificaciones. Algunos son mejores para ciertas tareas que otros. Algunos lenguajes requieren que escribamos ms para describir la misma receta que otros, pero algunas veces eso que est de ms nos conduce a una receta mucho ms (humanamente) legible que ayuda a otros a comprender lo que estamos diciendo.

    Los filsofos y matemticos buscan sensaciones muy similares de calidad. Tratan de describir al mundo en unas cuantas palabras, buscando una seleccin elegante de stas que cubran muchas situaciones, pero a la vez puedan ser comprendidas por sus compaeros filsofos y matemticos. Esto es exactamente lo que hacen los cientficos computacionales.

    Con frecuencia, tambin se asigna un nombre a la forma en que pueden interpretarse las unidades y valores (datos) de una receta. Recuerda que en la seccin 1.3 vimos que todo est en bytes, pero que los bytes pueden interpretarse como nmeros? En algunos lenguajes de programacin, podemos decir de manera explcita que cierto valor es un byte, y ms tarde decirle al lenguaje que lo trate como nmero, un entero (o algunas veces int). De manera similar, podemos decir a la computadora que esta serie especfica de bytes es una coleccin de nmeros (un arreglo de enteros), una coleccin de caracteres (una cadena) o incluso una

  • 18 Captulo 2 Introduccin a la programacin

    codificacin ms compleja de un solo nmero de punto flotante (un float: cualquier nmero que contenga un punto decimal).

    En Python indicaremos de manera explcita a la computadora cmo interpretar nuestros valores, pero muy rara vez le indicaremos que ciertos nombres slo se asocian con ciertas codificaciones. Los lenguajes como Java y C++ estn fuertemente tipificados: esto quiere decir que, en estos lenguajes, los nombres estn fuertemente asociados con ciertos tipos o codificaciones. Requieren que usted diga que este nombre slo se asociar con enteros y que ese otro ser solamente un nmero de punto flotante. De todas formas Python cuenta con tipos (codificaciones a las que podemos hacer referencia por nombre), pero no son tan explcitos. Python tambin tiene palabras reservadas. Estas son palabras que no podemos usar para nombrar cosas, ya que tienen un significado predeterminado en el lenguaje.

    Idea de ciencias com putacionales: los nombres son smbolos e identificad oresUtilizamos la palabra "nom bres", pero los lenguajes de programacin usan trminos ms especficos. Algunos lenguajes de programacin llaman sm bolo al nombre de un valor, funcin u objeto. Python (y Java) lo llaman dentificador. Podemos pensar en esto como la nocin humana de un "nom bre", pero los mensajes de error usarn los trminos ms especficos. Tal vez el mensaje de error ms comn en Java sea Identifier e xp e c te d (Se esperaba identificador), lo cual por lo general significa que falta un nombre o est mal escrito.

    2.1.1 Los archivos y sus nombresUn lenguaje de programacin no es el nico lugar en donde las computadoras asocian nombres y valores. El sistem a operativo de su computadora se encarga de los archivos en su disco y asocia nombres con ellos. Los sistemas operativos que usted usa o tal vez conozca son: Windows XP, Vista, Windows 7, MacOS y Linux. Un archivo es una coleccin de valores (bytes) en su disco du ro (la parte de su computadora que almacena cosas despus de apagar la computadora). Si conoce el nombre de un archivo y se lo indica al sistema operativo, recibir los valores asociados con el nombre.

    Tal vez piense: He estado usando la computadora durante aos y nunca le he proporcionado un nombre de archivo al sistema operativo . Tal vez no se dio cuenta que lo estaba haciendo, pero al elegir un archivo de un cuadro de dilogo para seleccionar archivos en Photoshop, o al hacer doble clic en un archivo en una ventana de directorios (o en el Explorador o Buscador), est pidiendo a algn software en alguna parte que proporcione al sistema operativo el nombre que usted est eligiendo o en el que est haciendo doble clic, para recibir los valores de vuelta. Pero cuando escribe sus propias recetas, est obteniendo de manera explcita los nombres de archivos y preguntando por sus valores.

    En la actualidad nuestros discos duros son enormes. Es probable que tenga ms de un archivo con el mismo nombre de archivo en ellos, en alguna parte. Quizs tenga un par de archivos llamados reporte.doc (tal vez uno para Historia y otro para Qumica, y posiblemente otro ms para su pasanta) o ami g o s . j pg en su disco en este momento. Mientras stos se encuentren en diferentes directorios, el mismo nombre puede hacer referencia a distintos archivos sin problemas. La computadora tiene un sistema de archivos que administra los directorios y los archivos. El nombre completo de un archivo se conoce como ruta y describe los directorios que debemos seguir para obtener un archivo especfico. Usaremos esta idea en breve.

    Los archivos son muy importantes para la computacin multimedia. Los discos pueden almacenar acres y acres de informacin en ellos. Recuerda nuestra discusin sobre la Ley

  • Seccin 2 .2 La programacin en Python 19

    de Moore? La capacidad de un disco por dlar est aumentando con ms rapidez que la velocidad de la computadora por dlar! Hoy en da los discos de computadora pueden almacenar pelculas enteras, horas (o das?) de sonidos, y el equivalente de cientos de rollos de pelcula de imgenes.

    Estos medios no son pequeos. Incluso en un formato comprimido, las imgenes del tamao de la pantalla pueden ser de ms de un milln de bytes, y las canciones pueden ser de 3 millones de bytes o ms. Necesita mantenerlos en alguna parte en donde puedan persistir despus de que la computadora se apague y en donde haya mucho espacio.

    Por el contrario, la m em oria de su computadora no es permanente (desaparece al apagar la mquina) y es relativamente pequea. La memoria de computadora est aumentando su tamao todo el tiempo, pero an es slo una fraccin de la cantidad de espacio en su disco. Cuando trabaja con medios, los carga desde el disco hacia la memoria, pero no sera conveniente que se quedaran en la memoria al terminar de trabajar con ellos. Son demasiado grandes.

    Compare la memoria de la computadora con una habitacin. En la habitacin puede alcanzar las cosas con facilidad: estn a la mano, se pueden alcanzar y usar. Pero no sera conveniente que pusiera todo lo que posee (o todo lo que espera poseer) en esa habitacin. Todas sus pertenencias, es decir, sus esqus, su auto y su velero. Eso sera tonto. En vez de ello, debe almacenarlas cosas grandes en lugares designados para ello. Usted sabe cmo obtenerlas cuando las necesita (y tal vez regresarlas a su habitacin si lo cree necesario o si puede).

    Cuando llevamos cosas a la memoria, se asigna un nombre al valor de modo que podamos recuperarlo y usarlo ms tarde. En ese sentido, la programacin es algo como el lgebra. Para escribir ecuaciones y funciones que sean generalizabas (es decir, que funcionen para cualquier nmero o valor), se escriben con variables como PV = nRT o e = Me2, o f (x) = sen(x). Esas letras P, V, R, T, e, M, c y x son nombres para los valores. Al evaluar /(30 ) sabemos que la x es el nombre para el nmero 30 al calcular / . Nombraremos los medios (como valores) de la misma forma cuando los usemos en la programacin.

    LA PROGRAMACIN EN PYTHONEl lenguaje de programacin que usaremos en este libro se llama Python. Es un lenguaje inventado por Guido van Rossum. l nombr este lenguaje en honor al famoso grupo humorstico ingls Monty Python. Este lenguaje se ha utilizado durante aos por personas sin una capacitacin formal en ciencias computacionales; est orientado a ser fcil de usar. La forma especfica de Python que usaremos aqu es Jy thon, ya que se puede utilizar en multimedia en mltiples plataformas.

    En realidad programaremos mediante una herramienta conocida como JES (Jython En- vironm ent for Students, o entorno Jy thon p ara estudiantes). JES es un simple editor (herramienta para introducir el texto de un programa) y una herramienta de interaccin, de modo que pueda probar cosas en JES y crear nuevas recetas dentro de l. Los nombres de los medios (funciones, variables, codificaciones) de los que hablaremos en este libro se desarrollaron para trabajar dentro de JES (es decir, no forman parte de una distribucin normal de Jython, aunque el lenguaje bsico que utilizaremos es Python normal).

    Podr leer las instrucciones sobre cmo instalar JES en http://mediacomputation.org. El proceso que se explica ah lo guiar para instalar Java, Jython y JES, y le dar un icono agradable para que haga clic en l e inicie JES. Este entorno est disponible para Windows, Macintosh y Linux.

  • 20 Captulo 2 Introduccin a la programacin

    Tp do depuracin: consiga Java, si tiene que hacerloPara la mayora de las personas, arrastrar la carpeta de JE S en su disco duro es todo lo que necesitan para empezar. No obstante, si tiene Java instalado y es una versin ms antigua que no pueda ejecutar JE S , tal vez tenga problemas para hacer que JE S inicie. Si tiene problemas, consiga una nueva versin de Java del sitio de Sun en http://www.java.sun.com.

    2.3 LA PROGRAMACIN EN JESLa forma de iniciar JES depender de su plataforma. En Windows y Macintosh hay un icono de JES en el que slo tiene que hacer doble clic. En Linux, tal vez tenga que cambiar a su directorio Jython y escribir un comando como ,/JE S .sh . Consulte las instrucciones en el sitio Web para ver lo que puede funcionar en su computadora.

    iError comn: JE S puede ser lento para arrancarJE S puede tardar un poco en cargarse. No se preocupe: tal vez vea la pantalla inicial durante mucho tiempo, pero si puede ver esa pantalla, se cargar. A menudo iniciar con ms rapidez despus del primer uso.

    Error comn: cmo hacer que JES se ejecute ms rpidoComo veremos ms adelante, cuando ejecuta JE S en realidad est ejecutando Java . Como Java necesita memoria, es probable que JE S se ejecute con lentitud, por lo tanto, deber asignarle ms memoria. Para hacer esto, salga de las dems aplicaciones que est ejecutando. Su programa de correo electrnico, su mensajero instantneo y su reproductor de msica digital ocupan memoria; algunas veces mucha! Salga de esas aplicaciones y JE S se ejecutar con ms rapidez.

    Una vez que inicie JES, ver en su pantalla algo como la figura 2.1. En JES hay dos reas

    principales (la barra entre ellas se mueve, para que pueda cambiar el tamao de las dos).

    La parte superior es el rea del program a. Aqu es donde usted escribe sus recetas: los programas que va a crear y sus nombres. Esta rea es tan slo un editor de texto; piense en ella como Microsoft Word para sus programas. En realidad la computadora no trata de interpretar los nombres que usted escribe en el rea del programa sino hasta que presiona el botn L o a d P r o g r a m ( C a r g a r P r o g r a m a ) , y no puede presionar L o a d P r o g r a m hasta que haya guardado su programa (usando el elemento de men S a v e [ G u a r d a r ] que est debajo del men F i l e [ A r c h i v o ] ) .

    No se preocupe si presiona L o a d P r o g r a m antes de acordarse de guardar el programa. JES no cargar el programa sino hasta que est guardado, por lo que tendr la oportunidad de guardarlo.

    La parte inferior es el rea de comandos. Aqu e