Wednesday, April 23, 2014

De libros de texto y similares

Estoy preparándome para un examen y necesito repasar algunos temas. Voy a la biblioteca de la Facultad de Ciencias y me hago de dos libros, uno de diseño lógico y otro de Estructuras de Datos. Comienzo con el segundo. Necesito entender bien cómo medir la complejidad de algoritmos. El libro en cuestión contiene el tema que necesito pero oh, parece que asume muchas cosas del lector. Pasan las páginas y cada vez se pone más oscuro. ¿Cómo puede ser? ¿No que es un libro que abarca estos temas a un nivel normal (que no avanzado)?

Otro caso: Hace un par de años decidí que quería aprender a programar en Windows Phone 7, el cual parecía tendría futuro de acuerdo a la publicidad que Microsoft hacía en ese momento. Me metí a Amazon y busqué un libro para inicarme en el tema. Hallé "Beginning Windows Phone App Development", de Henry Lee y Eugene Chuvyrov, de APress. Sonaba bueno. Empiezo con el capítulo 1, que se llama "Introducing Windows Phone 7 and the Windows Phone Platform". Muy bien, un repaso a la plataforma. Paso al capítulo 2: "Building Windows Phone 7 Applications". Los autores explican una primera app. Algo así como el "hello world!" que se hizo famoso después de que Dennis Richie iniciara así su libro sobre C. Parece fácil todo hasta el momento. Llego al capítulo 3: "Using Cloud Services As Data Stores". ¿Qué? ¿Después de un primer programa trivial se meten a explicarme  en una centena de páginas el uso de los servicios de la nube Azure? Bueno, ¿quién les enseñó a estos programadores cómo enseñar a programar? Ya se vuelve entonces el libro una pesadilla, ininteligible. Cien páginas después: Fin de la historia. Ahora (y quizás siempre), duerme dicho libro en un estante.

El punto es que parece que los libros de texto que supuestamente son introductorios a un tema, deben ir paso a paso y asumir lo menos posible del lector. Por ejemplo, su hallo un título como "Advanced computer graphics", me queda claro que el o los autores tienen  como nicho a lectores que ya entienden del tema y que buscan entrarle a tópicos más avanzados. Si tomo un libro así, no espero que me traten como principiante. pero si tomo un libro que dice "Beginning Turbo Pascal", no espero que me hablen de apuntadores en el capítulo 3. Eso es ridículo.

En mi opinión, libro que peca de un nulo entendimiento de cómo enseñar, (siendo libro de texto), se va al cajón de los olvidados. Lleva tanto tiempo desentrañar lo que otros explican con cuidado, que no vale la pena ese esfuerzo monumental para decodificar los temas que un autor piensa que son triviales, ignorando las necesidades de quien empieza.

4 comments:

El Cid said...

Es cierto lo que planteas. Muchas veces, pienso que cuando los manuales/libros son malos explicando los conceptos - deduciendo el autor que el lector
ya sabe conceptos "básicos"- se debe a que el autor no tiene mucha
experiencia en el tema de la enseñanza y pedagogía, aunque sí comprenda los temas. Me parece que ese es un error muy común en los profes y autores: asumir, dar por hecho que el lector/aprendiz ya sabe.

En realidad, redactar un libro técnico es un gran reto -sobre todo si es introductorio-. Tienes que explicar hasta con metáforas y mostrar las cosas a detalles, lo cual es bastante tedioso y
obviamente no todos los autores tienen esa paciencia, la verdad.

En cuanto a los libros de tu post, me parece que las estructuras de datos son complicadas porque se combinan 3 cosas: Matemáticas discretas, programación y las dos anteriores. Pienso que si no entiendes ninguna de las dos primeras -sobre todo las mates discretas- estás frito. Aunque claro, para solucionar esto en los textos existen los mentados "Anexos".

Ahora, tu Manuel sabes programar y tu mente ya puede "procesar" mejor conceptos más abstractos y complejos. Pero, ¿y un alumno
de primeros semestres de la universidad tendrá ya ese desarrollo mental? Quizá y sí. Pero si el libro es escrito principalmente para este último sí tiene que tener en cuenta todo este tipo de cosas.

En cuanto al desarrollo de app's, no tengo ni puta idea XD. Pero por ahi va la idea, muchos temas entremezclados de diferentes
ramas de IT, Computación,etc aduciendo que el lector ya es un maestro.

Te mando un saludo y feliz cumpleaños :)

Quentin said...

Completamente de acuerdo Manuel! Me pasó exactamente lo mismo con el equivalente de iOS de la misma editorial. Una pena!

jucaripo said...

Muy de acuerdo me encantan los libros de tecnología encuentro muchos libros que dicen principiantes y al estudiarlos tocan temas asumiendo conocimientos.
Por ejemplo en Mac muchos empiezan con Libros de Cocoa o IOS y toda la parte de Objective-C la dan por dominada cuando es principiantes.
Eso sin contar que en Objective-C piden saber De C.
Por esta razón hay pocos programadores. En Mac

Ernesto said...

jucaripo, Para aprender a programar en la Mac o iOS, hay que diferenciar dos cosas.

Aprender Objective C, que es un superset de C, y por lo tanto debes saber C para saber Objective C, en especial, comprender bien todo lo referente a apuntadores.

Sin dominar los apuntadores no se puede programar bien ni en C, nio en Objetive C.

Lo segundo que tienes que aprender, son las APIs de apple, para acceder a los servicios del OSX e iOS. Esto es en realidad lo difícil.

Tercero que olvidaba, es el estilo de programar orientado a eventos e interrupciones. Esto es lo más difícil si has programado aplicaciones secuenciales. Eventos pueden pasar mientras tu aplicación esta haciendo otra cosa, y tienes que estar preparado para lidiar con esto en cada parte de tu programa.

Por ejemplo. Un juego. Si entra una llamada mientras juegas, tu aplicación tiene que atender la solicite de iOS de salir para atender la llamada.

Si tu aplicación no responde adecuadamente en X ms, el sistema termina tu juego a la mala. Esto puede significar que se pierdan datos o el estado del juego.

Los libros sobre objective C que he visto se me hacen muy malos. Pienso que si no se sabe C bien, primero necesitas un libro de C, uno sobre apuntadores en C, y para Objective C, la propia documentación disponible cuando bajas Xcode, que además es gratis.