miércoles, 29 de agosto de 2012

El Algoritmo


Llegamos al meollo del problema en la lógica de programación: el algoritmo. Según López, "el algoritmo es una secuencia ordenada y cronológica de pasoso que llevan a la solución de un problema o a la ejecución de una tarea (o actividad). Los pasos del algoritmo deben tener las siguientes caracterísitcas:
  • Ser simples, claros, precisos, exactos.
  • Tener un orden lógico.
  • Tener un principio y un fin."
Vamos a ver otras cuantas definiciones.
En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo(del griego y latín, dixit algorithmus y este a su vez del matemático persa Al-Juarismi) es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad. Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos son el objeto de estudio de la algoritmia.
En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador por parte de su patrón. Algunos ejemplos en matemática son el algoritmo de la división para calcular el cociente de dos números, el algoritmo de Euclides para obtener el máximo común divisor de dos enteros positivos, o el método de Gauss para resolver un sistema lineal de ecuaciones.
Conjunto de instrucciones que aplicado a un número finito de datos, después de un número finito de iteraciones entrega un resultado.
En resumen vemos que son instrucciones que llevadas que al ser llevadas a cabo dan un resultado. Se espera que el resultado sea el que nosotros esperamos.

El proceso de programación


Como toda solución a un problema, el crear un programa lleva forzosamente una serie de pasos o etapas que van desde la detección y definición de un problema hasta la implementación del programa en sí mismo.
-Definición del problema. Surge cuando hay necesidad de resolver un problema con la computadora. Hay que definir y además delimitar bien el problema para que la solución sea la más adecuada. Por ahí leí que a veces el cliente no sabe el mismo qué es lo que quiere y por eso esta etapa es de crucial importancia.
-Análisis del Problema. "A continuación es necesario entender con detalle el problema en cuestión para obtener una radiografía del mismo en términos los DATOS disponibles como materia prima, y definir el PROCESO necesario para convertir los datos en la INFORMACIÓN requerida". López
-Diseño del programa.Durante este paso se procede a diseñar la lógica para la solución al problema, haciendo dos cosas:
  • Elaborar el algoritmo. Se diseña el algoritmo de la solución al problema, es decir, se estructura la secuencia lógica y cronológica de los pasos que la computadora deberá seguir.
  • Prueba de escritorio. Se simula el funcionamiento del algoritmo con datos propios respecto al problema, y se comprueban a mano los resultados con el fin de validar la correcta operación del algoritmo.
-Codificación del problema. Se procede a codificar el programa en el lenguaje de programación que vayamos a utilizar. El programa codificado debe editarse, compilarse, probarse y depurarse, es decir, se ejecuta para verificar su buen funcionamiento y se hacen las correcciones o los ajustes pertinentes hasta que quede correcto.
Siempre es posible repetir un paso o retroceder pasos con tal de que la solución que diseñemos sea la más satisfactoria.
-Implantación del programa. Una vez que el programa está correcto, se instala y se pone a funcionar, entrando en operación normalmente dentro de la situación específica para la que se desarrolló.
-Mantenimiento del programa. Un programa que está en operación, por un lado podría presentar errores, los cuales deben corregirse; por otro lado podría requerir cambios o ajustes en sus datos, procesos o información; esto implica que eventualmente necesitará mantenimiento para adecuarlo a los cambios que le impongan la dinámica cambiante de las empresas o de los problemas.

Características de un buen programa

Dice López que un buen programa debe tener ciertas características básicas que le permitan operar correctamente:

Operatividad. Lo mínimo que debe hacer un programa es funcionar; es decir, producir los resultados esperados independientemente de cualquier otra característica.

Bueno, yo diría que esta es la condición de que sea un programa o no. Si no funciona pues sencillamente no es un programa porque no ejecuta la tarea requerida. Estaríamos sólo ante la presencia de código.

Ahora bien, el autor dice que hay otras características que al programa le permitirán operar correctamente pero yo pienso que si funciona es porque opera correctamente. Las siguientes características permiten hacer algo con el programa pero no hacen que el programa sea funcional o no.

Legibilidad. Un programa puede hacerse más legible dándole cierto formato al código, utilizando el sangrado (indentación) para reflejar las estructuras de control del programa, e insertando espacios o tabuladores.

Transportabilidad. Un programa transportable es el que puede ejecutarse en otro entorno sin hacerle modificaciones importantes.

Si el programa fue requerido para poder trabajar en varios entornos y sólo funciona en algunos o en uno entonces esta característica sí se debe tomar en cuenta para medir si el programa trabaja correctamente o no. Si sólo se requiere que trabaje en ciertos entornos y lo hace no veo la razón de que sea problema y podamos utilizar prestaciones de hardware o software especiales del entorno en nuestro favor. Estoy de acuerdo sólo parcialmente con lo que dice el autor.

Claridad. Esta característica se refiere a la facilidad con la que el texto del programa comunica las ideas subyacentes.

Modularidad. Dividir el programa en un número de módulos pequeños y fáciles de comprender puede ser la contribución más importante a la calidad del mismo. Cada módulo debe realizar sólo una tarea específica y no más. Los módulos tienen la virtud de minimizar la cantidad de código que el programador debe comprender a la vez, además de que permiten la reutilización de código.

El último punto se me hace de suma importancia y no todos los programadores lo hacen a veces a propósito a veces involuntariamente. No es raro encontrar textos donde mencionan que a veces es mejor contratar a un programador para  empezar un nuevo programa de cero que contratarlo para que haga modificaciones a un programa previamente existente pues el trabajar sobre código escrito por otro no es tarea fácil. Bueno, ya lo comprobaré. Como siempre les digo, compren el libro, están tocados estos temas con mucho más profundidad.

El lenguaje de programación

Seguimos con los conceptos del libro mencionado. Esta vez veremos conceptos básicos acerca de lo que es un LENGUAJE DE PROGRAMACIÓN. Citamos a continuación el concepto:
“Un lenguaje de programación es el medio a través del cual le comunicamos a la computadora la secuencia de instrucciones que debe ejecutar para llevar a cabo actividades, tareas o solución de problemas. Todo lenguaje permite el manejo de los tres elementos que componen un programa, a saber, estructuras de datos, operaciones primitivas elementales y estructuras de control”. Leobardo López Román
Vemos que el lenguaje también, al igual que la computadora, es un medio de conseguir algo, en este caso lleva a cabo tareas o soluciona problemas.
Todo lenguaje de programación permite el manejo de los tres componentes arriba mencionados. Son la condición que nos dice si eso a lo que nos refererimos es un lenguaje de programación o no lo es. En los foros a veces veo ese tipo de discusiones, que si tal o cual cosa es un lenguaje o no, aunque he de decir que he olvidado a qué se referían en particular.
Bueno, vimos lo que un programa permite hacer pero ahora veremos los componentes que tiene, en el texto los encontramos como características, pero yo prefiero componentes:
ALFABETO O CONJUNTO DE CARACTERES. Es el conjunto de elementos estructurales del lenguaje:
a) Caracteres alfabéticos (letras minúsculas y mayúsculas).
b) Caracteres numéricos (0 al 9).
c) Caracteres especiales (&,%,#, /…).
VOCABULARIO O LÉXICO. Es el conjunto de palabras válidas o reservadas en el lenguaje (o sea palabras que no podemos usar los usuarios salvo en condiciones especiales). Por ejemplo, las palabras program, begin, end, if, then, else…
GRAMÁTICA. Es el conjunto de lineamientos que se deben seguir para construir frases, oraciones e instrucciones. Mediante la gramática o sintaxis logramos transmitirle a la computadora lo que deseamos. Por ejemplo, para leer datos debemos seguir cierto lineamiento, también para imprimir, etcétera.
Siempre quise aprender a programar y con el tiempo me di cuenta que no era tan fácil. De alguna manera siempre estuve vinculado a este mundo, comprando libros, intentando hacer cosas. Finalmente llegué a la lógica de programación y bueno, en eso estamos.
Compren el libro Programación Estructurada y Orientada a Objetos, del autor Leobardo López Román

Algunos conceptos sobre programación

Las clases en la UNAD (antes ESAD) han reiniciado y debido a eso he pensado en pisar el acelerador con respecto a la programación. En la Faculdad de Derecho ya sólo curso dos materias y ademàs son muy ligth, entonces es necesario darle más a la ingeniería.

Tengo un librito del que ya he hablado Programación estructurada y orientada a objetos. Un enfoque algoritmico, el autor es Leobardo Lòpez Morán. Sòlo le he medio empezado pero se ve bien en tèrminos generales. El autor es mexicano y me da gusto que haya mexicanos escribiendo estos temas. Voy a enlistar algunos conceptos que me parecen importantes del librito y espero terminarlo para antes del pròximo cuatrimestre en el cual ya estarè de lleno en los temas de programaciòn. Bueno, empecemos.
El primer capítulo se llama Introducción a la programación. Hay varios conceptos importantes pero antes pondrè algo que viene al final del prefacio:

"Aprender a programar no es fácil ni rápido; es un proceso que debe iniciar con el desarrollo de la lógica usando un pseudolenguaje de diseño de programas o algoritmos. Con el estudio de la metodología y fundamentos de programación que le presento en este libro, el estudiante aprenderá la lógica de programación estructurada y una introducción a la programación orientada a objetos sin estar "casado" con ningún lenguaje; y de aquí en adelante podrá aprender y comprender cualquier lenguaje estructurado u orientado a objetos como C, C++, Java, C#, UML, etcétera".   El autor

Bueno, pues me parece razonable lo que dice Leobardo López. Es natural el querer estar programando inmediatamente y más aún el querer que el poco código que hagamos sirva para cosas elaboradas y vistosas, pero nada más alejado de la realdiad, es como la música, uno debe aprender muchas cosas antes de poder ejecutar un instrumento con maestría.

Vamos a los conceptos:

Computadora: Es una herramienta que se utiliza para representar cualquier situación de la realidad en forma de datos, los cuales se procesan después para generar información.

Existe un mundo infinito de situaciones representables en la computadora, el autor menciona algunas mu pràcticas: control de inventarios, control de producción, control de compras, control de ventas, pago de sueldos (nómina).

DATOS*----------->PROCESO----------->INFORMACIÓN
* Se toman de las situaciones reales

Toda situación que pueda ser abstraída y representada enforma de datos, puede manejarse mediante la computadora. Por ejemplo, en una situación de pago de sueldos (nómina), un trabajador puede representarse mediante los datos: Nombre del empleado, número de horas trabajadas y cuota por hora. El sueldo se obtiene multiplicando el número de horas trabajadas por la cuota por hora. Y se da como salida el nombre y el sueldo. Tanto los datos como el procedimiento necesario para generar la información, se suministran a la computadora en forma de un programa constituido por instrucciones. La computadora interpreta y ejecuta las intrucciones del programa de acuerdo con ciertas reglas de sintaxis que conforman el lenguaje de programación, mediante el cual podemos comunicarle lo que debe hacer.

Me gusta que a la computadora la llame herramienta. El ejemplo que da el autor acerca del pago de sueldos a trabajadores es en sí un miniprograma. Está explicando el autor de qué se trata todo el asunto en unas cuantas líneas. Bien por esa.

Elementos básicos

Los elementos básicos que componen una computadora son la unidad central de proceso, la unidad de memoria, la unidad de entrada y la unidad de salida.

La unidad central de proceso es el "cerebro" que controla el funcionamiento de los componentes y ejecuta las operaciones aritméticas y lógicas.
La memoría se utiliza para almacenar los datos, y a éstos se les aplican las operaciones del procesador. Existen dos tipos de memoria, la principal y la auxiliar. La memoria principal le permite al procesador extraer y almacenar datos a una velocidad comparable con la propia(1). Cada operación propicia por lo menos un acceso a la memoria. Para que el procesador pueda avanzar de una operación a la siguiente sin retraso, el programa de instrucciones se almacena en esta memoria; en otras palabras, la memoria principal guarda tanto las instrucciones como los datos sobre los que actúa el procesador central(2). La memoria principal está limitada por su alto costo(3); debido a esto no es posible conservar en ella grandes cantidades de datos e instrucciones y, en consecuencia, sólo se utiliza para guardar lo que el procesador esté utilizando por el momento. Además tiene la característica de que no permite almacenar datos permanentemente, pues si se apaga la computadora se pierde lo que haya en memoria(4). Por tales razones, las computadoras están equipadas con memorias auxiliares para almacenamiento masivo y permanente de datos, tales como discos magnéticos, discos compactos... Estos dispositivos tienen más capacidad que la memoria principal pero son más lentos. Los datos pueden almacenarse en ellos de manera permanente, es decir, pueden guardarse para usos posteriores.
  • (1) Eso de las velocidades necesita mayor profundidad. 
  • (2) Me hubiera gustado una explicación más detallada y unificación de términos, 
  • (3) Supongo que se refiere a que consume muchos recursos.
  • (4) Supongo que es como cuando estás utlizando el procesador de textos en un nuevo documento y todo lo que estás escribiendo en tanto no guardes en la memoria está en al memoria principal y si por error apagas la computadora pues pierdes lo que hayas guardado. Claro que eso es lo que entiendo y puede ser un error. Me gustaría que el autor fuese más claro.
El autor puso en su libro un diagrama que describe la organización funcional de una computadora. Me gusta, es claro. Véanlo, compren el libro.

El programa

Un programa es un conjunto de instrucciones que guían a la computadora para realizar alguna actividad o resolver algún problema; en el programa se ejecutan diferentes acciones de acuerdo con los datos que se estén procesando.

Un programa se compone de estructuras de datos, operaciones primitivas elementales y estructuras de control.

Estructuras de datos. Son las formas de representación interna de la computadora. Los hechos reales, representados enforma de datos, pueden estar organizados de diferentes maneras llamadas estructuras de datos.

Operaciones primivitas elementales. Son las acciones básicas que la computadora "sabe hacer", y que se ejecutan sobre los datos para darles entrada, transformarlos y darles salida convertidos en información.

Estructuras de control. Son las formas lógica de funcionamiento de la computadora mediante las que se dirige el orden en que deben ejecutarse las instrucciones del programa. Las estructuras de control son: La secuenciación, que es la capacidad de ejecutar instrucciones secuenciales una tras otra. La selección es la capacidad de escoger o seleccionar  si algo se ejecuta o no, optar por una de dos o más alternativas, y la repetición, que es la capacidad de realizar en más de una ocasión (es decir, varias veces) una acción o conjunto de acciones.

Bueno, hasta aquí esta entrada.

Primeros Algoritmos

En la unidad 1 del libro de Leobardo López Román viene al final una lista de ejercicios propuestos para ir calentando en esto de los algoritmos. Bueno, voy a tratar de dar mis respuestas a los ejercicios.

A. Elaborar un algoritmo para hacer palomitas de maíz en una cacerola puesta al fuego, usando sal y maíz.

1. Abrir la bolsa de maíz.
2. Vaciar la bolsa en la cacerola que está al fuego.
3. Agregar sal a la cacerola.
4. Tapar la cacerola.
5. Esperar hasta que los granos de maíz hayan reventado.
6. Apagar el fuego.
7. Esperar a que se enfríe la cacerola.
8. Fin
Este algoritmo parece estar incompleto o no, pero sucede que tampoco nos da muchos datos y suponemos muchas cosas. Con la práctica supongo que haré unos más detallados pero al parecer no es objetivo del ejercicio que detalle tan a fondo.
B. Elaborar un algoritmo que permita cambiar un vidrio roto de una ventana.
Suponemos que ya tenemos el vidrio de repuesto, el pegamento y que no hay que subir a ningún lado.
1. Despegamos el vidrio roto.
2. Quitamos el vidrio roto.
3. Tomamos el vidrio de repuesto.
4. Colocamos el vidrio de repuesto.
5. Pegamos el vidrio de repuesto.
6. Fin
C. Elaborar un algoritmo para cambiar un neumático pinchado.
1. Orillarse.
2. Detener el auto.
3. Poner el freno de mano y encender las señales de peligro.
4. Apagar el auto.
3. Bajar del auto.
4. Cerrar la puerta.
5. Abrir la cajuela.
6. Sacar la llave de cruz.
7. Sacar un plástico o cartón
8. Sacar la llanta de refacción.
9. Sacar el gato hidráulico.
10. Poner el cartón o plástico cerca de la llanta ponchada para tener área limpia de trabajo.
11.  Tomar la llave de cruz.
12.  Con la llave de cruz dar dos vueltas a cada birlo en contra de las manecillas del reloj para aflojarlos.
13. Dejar la llave de cruz
14. Tomar el gato.
15. colocar el gato en detrás de la llanta delantera o enfrente de la llanta trasera
16. Gire la manija del gato en el sentido de las manecillas del reloj, hasta que la llanta ponchada esté 5 ó 6 centimetros por encima del suelo.
17. Tome de nuevo la llave de cruz.
18. Quite un birlo completamente
19. Póngalo en un lugar seguro.
20 Haga lo mismo con el resto de los birlos.
21. Deje la llave de cruz.
22. Sostenga la llanta ponchada con firmeza.
23. Jale derecho hacia afuera.
24. Ponga la llanta ponchada debajo de la carrocería o suspensión del automóvil, por si el gato se desliza todavía será soportado.
25.Tome la llanta de refacción y colóquela en el tambor.
26. Tome un birlo y colóquelo donde le corresponde.
27. Apriételo manualmente.
28. Haga lo mismo con el resto de los birlos.
29. Gire el gato de manera opuesta hasta que el auto baje al suelo.
30. Cuando el peso ya no esté en el gato, remuévalo de abajo del auto.
31. Ponga a un lado el gato.
32. Tome la llave de cruz.
33. Apriete completamente un birlo.
34. Repita la operación con el resto de los birlos.
35. Saque la llanta ponchada que está debajo del auto.
36. Guarde la llanta ponchada en la cajuela.
37. Guarde el gato en la cajuela.
37. Guarde la llave de cruz en la cajuela.
38. Guarde el plástico o cartón en la cajuela
39. Cierra la cajuela.
40. Fin
D. Elaborar un algoritmo para hacer una llamada telefónica. Supongo que ya estoy parado en frente de un teléfono público y las monedas las tengo en la mano derecha.
1. Descolgar auricular con mano izquierda
2. Llevar el auricular a la oreja izquierda.
3. Esperar a escuchar el tono de marcado.
4. Con la mano derecha introducir las monedas en la ranura del teléfono.
5. Con la mano derecha marcar el número
6. Esperar a que conteste es destinatario.
7. Dar el mensaje.
8. Colgar con mano izquierda el auricular en el lugar en donde se descolgó.
9. Fin.
E. Definir "su" robot, es decir, lo que sabe hacer tomando como referencia lo que usted hace, y elaborar un algoritmo que lo lleve desde que se despierta por la mañana hasta que llega a la escuela, trabajo o algún otro lugar.
Supongo que el robot sabe identificar rutas visualmente y además que en el cuarto de baño hay ropa para cambiarse.
El robot sabe.
a. Levantarse de la cama.
b. caminar.
c. detenerse.
d. ponerse sandalias.
e. quitarse sandalias.
f. Abrir puerta y entrar.
g. desvestirse.
h. vestirse y guardar ropa sucia.
i. abrir el refrigerador.
j. sacar alimentos del refrigerador.
h. preparar desayuno.
i. sentarse.
j. comer.
l. bajar escaleras.
m. cerrar puerta.
n. bañarse.
ñ. secarse.
o. cepillarse los dientes.
p. bajar escaleras.
q. cruzar la calle.
r. pagar importe de pasaje.
s. subir al transporte.
t. verificar si hay lugar para sentarse en transporte.
u. levantarse de asiento o silla.
v. bajar de transporte.
w. lavarse los dientes.
x. peinarse.
y. rasurarse.
z. aplicar complementos de aseo (desodorante, loción, etc.).
z1. Tomar cartera y celular.
z2. Esperar el transporte.
Algoritmo.
Para ahorrar tiempo lo haré con claves:
1. a; 2. d; 3. b hasta la puerta; 4; c; 4.1. 4.2. m; 5. b hasta la puerta del baño; 6. c frente a la puerta del baño; 6.1. f; 7. b hacia el interior del baño; 8. c; 9. e; 10. g; 11. d; 12. b hasta el área de la regadera; 13. n; 14. ñ; 15.h; 16. x, y; 17. b hasta la puerta del baño; 18. c; 19. f; 20. b hasta el refrigerador que está en el comedor; 21. c; 22. i; 23. j; 24. h; 25. i en una silla frente a la mesa del comedor; 26. j; 27. u al terminar de comer; 28. b hasta el lugar del aseo personal; 29. c. 30.  o; 31. z. 32. b hasta la sala; 33. c; 34. z1; 35. b hasta la puerta principal. 36. c; 37. f; 38. m; 39. l hasta llegar a la salida del inmueble; 40. b hasta la parada del bus; 41. c; 42. z2; 43. s; 44. r; 45. t; 46. En caso de encontrar lugar b hasta el asiento vacío; 47. en caso de 46 c sino b hasta la puerta de descenso, c  y esperar al lugar destino; 47. En caso de 46 i en asiento vació hasta llegar al destino; 48. En caso de 47 al llegar al lugar destino u, b hasta la puerta de descenso y v; 49. En caso e no 47 v en el lugar de destino; 50. b hasta puerta del trabajo; 51. c; 52. f; 53. Fin
Bueno, este es el algoritmo, la verdad es que así sin estructuras de camino alternativo, secuencia, etcétera es muy complicado. Por supuesto es erróneo en varios puntos pero como ejercicio me fue interesante. Pienso que es muy importante hacer la lista de requerimientos muy bien porque si no van a hacer como yo, ir metiendo puntos extra aunque supongo que a la hora de codificar es común pero más si no se planea ya que puede ser que se eche a perder el esfuerzo. Bueno, sigo aún en la unidad dos. Suerte.

Algoritmos 1


Sigo leyendo el libro Programación estructurada y orientada a objetos. Un enfoque algorítmico, de Leobardo López Román, me sigue pareciendo bueno o muy bueno, salvo algunos detalles de redacción y algunas ambigüedades.
A continuación les mostraré una técnica de estudio que puede servir para estudiar efectivamente libros, no sólo de programación sino en general. Continuamente se nos pide como estudiantes que leamos tal o cual libro y que además típico que sobre esa lectura tendremos que hacer examen. Bien, yo he leído muchos muchos muchos libros, de muchísimos temas. Es fácil leer cuando tienes tiempo o son temas más bien divertidos o no muy demandantes mentalmente, pero, hay otro tipo de libros, de muchos conceptos por aprender, o complicados por enunciar leyes o datos históricos y que a menos que el tema que estemos leyendo se nos haga lo más divertido del mundo pues nos acabará por cansar, no nos aprenderemos nada o muy poco y el examen que hagamos no será muy fácil de resolver por nosotros. ¿Qué hacer? Mmm supongamos que estamos en el supuesto del examen, lo primero que hago es hojear el índice (sí ya sé que parece técnica barata de libro de lectura rápida) y pues no lo leo tan al detalle pero sí me da una pequeña idea de lo que me voy a encontrar. Generalmente leo el prólogo y la introducción pues me gusta lo que piensa el autor o alguien cercano al libro acerca de este. No olvidemos que una obra literaria tiene detrás de sí el trabajo de personas, del autor, del editor, del revisor, etcétera; es una obra humana y en sí misma es interesante. Pero volvamos al examen, el siguiente pasó sería leer la primera parte de cada capítulo, en ella generalmente se exponen los puntos básicos que tocará cada capítulo. Generalmente los profesores son flojos y tampoco van a preguntar cosas muy complicadas y además si tienen un poco sentido común también preguntarán los conceptos más importantes y eso viene en la primera parte de cada capítulo. Este paso es importante porque en el caso de que vayamos a hablar en público del libro ya nos podremos defender bien, hablaremos de lo más importante del libro, además este paso tiene encerrado otro propósito muy importante, nos da un panorama acerca de hacia donde va el libro, qué pretende demostrar o mostrar. Insisto en este paso  porque es parecido a cuando vamos emprender un viaje largo; sin saber hacia donde se va hasta el viaje más corto puede resultar tedioso sobre todo cuando nos implica esfuerzo, y leer un libro es como  una caminata que puede ser divertida si sabemos qué cosas interesantes podemos ir observando en el camino, pero si no lo sabemos será sin duda más difícil. Todos nosotros (o casi todos) hemos extraviado la ruta a la hora de querer llegar a un destino y aunque sólo hayamos caminado un poco para encontrar el lugar que buscábamos, el hecho de sentirse extraviado hace que todo parezca el triple de largo, lo mismo pasa con los libros, es mejor tener un mapa de todo él antes de querer leerlo a fondo, eso nos lo dará leer la primera parte de los capítulos. Por último yo leería los primeros párrafos de cada sección, confíen en mí, los profes buscan sus preguntas ahí y lo que es más, lo más importante debe entrar antes a su mente y está en donde les digo, si ustedes hacen hasta aquí lo que les recomiendo irán el triple de rápido sobre el libro y no les parecerá tan tedioso pues ya saben el destino al qué llegar y puede ser que el libro ya no parezca tan aburrido. Ya si quieren leer todo el resto del libro pues ya será cosa se niños.
Bueno, eso hice con el libro del que  hablo al principio, en todas las primeras partes da los conceptos más importantes y ya tengo un mapa mental de qué es lo que voy a aprender y el lugar al que voy a llegar. No es fácil, para nada, pero me permite poder avanzar con mayor rapidez. Algo que también repite una y otra vez en cada primera parte de los capítulos es que si el estudiante no hace algoritmos no aprende, lo cual tiene su lógica. Así las cosas avancé hasta el capítulo 9 que más bien trata de conceptos básico y algoritmos básicos con pseudocódigo y ya terminé el primer capítulo totalmente (bueno, faltan los ejercicios que obviamente voy a realizar) y podré seguir adelante.
A realizar los algoritmos se ha dicho. Pronto más noticias.