Вы находитесь на странице: 1из 7

Aprendiendo a pensar diferente

Prefacio
Cuando era pequeño mi papa trajo a casa una computadora, estaba visiblemente emocionado
y orgulloso de haber conseguido esa pieza tecnológica, la verdad tenía motivo de sobra,
cuando la compro no conocía a nadie que tuviera una además de nosotros, yo no sabía que
las computadoras existían hasta ese momento, aficionado al Nintendo como era esa
computadora Compaq Presario en blanco y negro no me parecía en absoluto llamativa y el
tener que usarla mediante comandos tampoco era muy atrayente, sin embargo, me llamaba
poderosamente la atención de que cuando yo le decía que hacer, la computadora hacía
exactamente aquello que le había indicado, aunque me fue difícil entenderme con ella en un
principio, eventualmente me volví cada vez más ágil en ello.

Para mi es una parte vital de mi vida el tener una computadora conmigo, cuando no tengo a
la mano una siento como si me faltará una parte de mí. Como era de esperarse con el tiempo
mi interés ha ido madurando y he buscado perfeccionar mi habilidad para lograr que haga
aquello que necesito, evolucionando de ordenes en la consola a lenguajes de programación,
para mí fue difícil en un principio el comprender y hacer mía la forma tan diferente de pensar
que es vital para poder comenzar a programar aceptablemente, es como si algo hubiera
cambiado dentro de mi mente haciéndome percibir el mundo de una manera diferente a la del
resto de las personas.

Desafortunadamente en mi busca personal por aprender a programar, nunca encontré un libro


en español que me ayudará de la forma en que yo lo necesitaba, sin embargo, en ese camino
de aprendizaje tengo tres agradecimientos que dar:

Primero quiero agradecer a los libros de programación de Deitel & Deitel, en mi opinión son
los mejores libros de aquellos que buscan aprender a programar, sus ejercicios van desde lo
básico hasta cosas bastante complicadas, pero sin llegar a los extremos, enseñando en
lenguajes tan actuales como C#, VB.NET y Java, así como en lenguajes tan arraigados en la
comunidad de programadores como C.

Segundo quiero agradecer al programa de Desarrollador Cinco Estrellas de Microsoft, en


ellos tuve la oportunidad de conocer a más programadores como yo y a explorar nuevas
tecnologías, además la forma en como estructuraron el programa aunque con algunas
carencias importantes facilita el uso de su entorno de programación y el desarrollo más ágil
de aplicaciones para sistemas operativos Windows.

Tercero y último a las escuelas públicas de mi país que permiten que a pesar de lo que se
diga permite que se formen profesionales de excelencia, a pesar de las carencias, falta de
presupuesto y demás problemáticas que hay en el sector de la educación en el país, las cuáles
se acentúan aún más cuando hablamos de la formación de gente que genere el desarrollo
tecnológico de nuestro país, allí en esa difícil labor destacan los institutos tecnológicos que
permiten que a lo largo del país se formen los futuros ingenieros.

Debo agregar que Python no es mi lenguaje favorito, mi inclinación principal en la


actualidad es C#, su entorno gráfico y la rapidez que permite se me hacen sumamente
atractivas, pero también para poder programar de forma eficiente en ese lenguaje es
importante tener conocimientos de programación y es mejor aprenderlo después de haber
tenido algún primer contacto con otro lenguaje, porque a mi consideración eso mejora la
experiencia que se tiene al entrar en contacto con la plataforma y disminuye la curva de
aprendizaje.

Python es un lenguaje que se me hace ideal para aprender a programar, es un lenguaje de alto
nivel, bastante potente, muy flexible, pero lo mejor de todo es que permite ver con claridad
los conceptos de la programación sin tener que preocuparse por otros detalles que al inicio
únicamente entorpecen el aprendizaje, un ejemplo claro de ello es la siguiente instrucción:

print(“Hola Mundo”)

Esa es la única línea de código que nos es necesaria para poder realizar exitosamente un
programa en Python, esencialmente sencillo que límita su existencia únicamente a imprimir
en la consola la oración entrecomillada, eso permite concentrarnos en las bases que
cimientan el lenguaje en lugar de en las bibliotecas que usaremos en si debemos o no recibir
parámetros o devolverlos, inclusive empleando el mínimo código posible en un lenguaje
como C debemos hacer algo como esto:

#include <stdio.h>

int main (int argc,char **argv)

printf("Hola mundo\n");

return 0;

Este tipo de inicio en el mundo de la programación generalmente ocasiona que nos


distrigamos pensando porque hasta arriba hay un símbolo de #, porque no regresamos un 0,
porque se encuentra una parte entre <> otra entre () y otra entre {}, lo que nos desvía de
nuestro interés original de aprender lo básico por otros detalles de la implementación que no
es conveniente abordar en ese punto de la curva de aprendizaje, por la simplicidad y claridad
con la que permite enseñar los principios de programación es el motivo por el cuál he
seleccionado Python para comenzar.

Hay que ser prácticos sé que es difícil contener las ganas de aprender lenguajes como C#,
Smalltalk, Java, Eiffel, pero si debemos repasar nuestros principios de programación cada
vez que aprendemos un nuevo lenguaje estaremos perdiendo valioso tiempo para estar
actualizados, sin embargo, si aprendemos adecuadamente los principios de la
programación, únicamente tendremos que pasar por ellos UNA VEZ. Solo debemos
pensar que con un estudio adecuado de los principios de la programación cada vez que
deseemos aprender un nuevo lenguaje será rápido y sencillo, no importa el lenguaje, ni quién
lo hizo, al final del día todos se rigen por los mismos principios básicos.

Este manual me permite explorar una faceta mía que seguía pendiente y es que creo
fervientemente que el conocimiento adquirido no sirve de nada a menos que sea transmitido,
si uno conserva todo lo que aprendió y jamás lo enseña a los demás realmente ese individuo
progreso, pero la humanidad ha ganado nada con ello dejándonos en el mismo punto en el
que nos encontrábamos originalmente. Me gusta dar cursos de introducción a la
programación a estudiantes bien sea de manera virtual o presencial, pero únicamente a
grupos de no menos de 5 y no más de 20 individuos, radico en la zona Cordoba – Orizaba, en
el estado de Veracruz en el país de México, si te encuentras cerca y tienes interés siéntete
libre de contactarme al correo lap.alejandro@gmail.com

Introducción
La intención de este manual es enseñar a pensar de manera diferente. Esta nueva forma de
pensar combina algunas de las mejores características de las matemáticas, la ingeniería y las
demás ciencias. En las ciencias computacionales se emplean lenguajes para denotar ideas,
como en el resto de las ciencias se ensamblan cosas, se analizan, diseñan e implementan
sistemas y se evalúan diversas alternativas, observando el comportamiento de sistemas
complejos, formulando hipótesis y probando predicciones.

Pero la habilidad más importante de todas las que son necesarias para el hombre de ciencia
es la habilidad para resolver problemas. Resolver problemas requiere en primera instancia
formularlos, pensar en soluciones creativas, y expresar una solución de la forma más simple,
clara y precisa posible. El proceso de aprender a programar es una excelente oportunidad
para practicar nuestra habilidad de resolver problemas, es por ello que este manual al inicio
nos dice de que se trata todo esto “Aprender a pensar diferente”.

Por una parte estaremos aprendiendo a programar, una habilidad útil por sí misma, pero por
otra emplearemos está nueva habilidad para comenzar a ver las cosas de una manera
diferente, conforme vayamos avanzando este punto se irá volviendo más claro.

1.1 El lenguaje de programación Python

El lenguaje de programación que emplearemos será Python, el cuál es un lenguaje de alto


nivel; otros lenguajes de alto nivel que posiblemente hayas escuchado son C, C++, Perl y
Java. Como es posible que infieras del nombre “lenguaje de alto nivel” también existen
lenguajes de bajo nivel, a los que comúnmente los conocemos como “lenguajes maquina” o
“lenguajes ensamblador”. De manera estricta una computadora únicamente puede ejecutar
lenguajes de bajo nivel, los lenguajes de alto nivel deben ser procesados antes de poder ser
ejecutados. A pesar del tiempo adicional que requiere dicho proceso, es tan solo una pequeña
desventaja que no es significativa cuando se compara con las enormes ventajas que nos
brindan.

Entre las ventajas de los lenguajes de alto nivel tenemos que es mucho más fácil escribir un
programa en un lenguaje de alto nivel, nos toma menos tiempo hacerlo, son más pequeños,
más fáciles de leer y es más fácil que hagan lo que necesitamos. Adicionalmente los
lenguajes de alto nivel son portables, lo que quiere decir que pueden ser ejecutados en
diferentes tipos de computadora con pocas o ninguna modificación, a diferencia de los
lenguajes de bajo nivel que únicamente pueden correr en el tipo de computadora para la cual
fueron diseñados. Por todas las ventajas que nos ofrecen casi todos los programas se
encuentran escritos en lenguajes de alto nivel, los lenguajes de bajo nivel se usan casi
exclusivamente para algunas aplicaciones especializadas.

Ahora bien existen dos formas de convertir un lenguaje de alto nivel en un lenguaje de bajo
nivel interpretarlo o compilarlo. Un intérprete va leyendo el programa que escribimos y
mientras lo lee convierte las instrucciones de alto nivel a instrucciones de bajo nivel, un
poco a la vez alternando entre leer el código de nuestro programa y el llevar a cabo las
operaciones indicadas en el mismo.

Código Fuente à Interprete à Salida

Un compilador lee el programa y lo convierte a instrucciones de bajo nivel por completo


antes de comenzar a ejecutar las instrucciones de alto nivel contenidas en el, en este caso al
programa de alto nivel se le llama código fuente, y al programa compilado se le conoce
como código objeto o executable. Una vez que un programa se ha compilado se puede
executar de manera repetida sin necesidad de volverlo a compilar.

Código Fuente à Compilador à Código Objeto à Ejecutor à Salida

Python se considera un lenguaje interpretado debido a que los programas escritos en dicho
lenguaje son ejecutados por un intérprete y existen dos formas de usar el mismo: línea de
comandos y script. En la línea de comandos se escriben los programas y el interprete
despliega el resultado:

Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> print(“Hola Mundo”)
Hola Mundo

Las primeras 3 líneas de este ejemplo son los comandos que el interprete de Python
despliega al iniciar. La cuarta línea comienza con >>>, la cual indica al usuario que el
interprete se encuentra listo. Al teclear print(“Hola Mundo”) el interprete llevo a cabo
nuestra indicación y nos mostro Hola Mundo.

Algo muy útil es que hacer es que podemos escribir un programa en un archivo el cuál debe
tener la extensión .py para que Python lo pueda ejecutar y usamos al intérprete para ejecutar
su contenido, dicho tipo de archivos se conocen como scripts. Por ejemplo usamos el bloc
de notas y creamos un archivo llamado holamundo.py con el siguiente contenido:

print(“Hola Mundo”)
Asumiendo que dicho programa lo guardamos en la carpeta default de Python C:\Python31,
en inicio à ejecutar tecleamos à cmd, una vez que nos aparezca la consola de Windows
tecleamos:

cd C:\Python31
Y le damos enter para posicionarnos en la carpeta de Python y una vez allí ejecutamos
nuestro programa con la siguiente instrucción

Python holamundo.py

Y podremos ver a continuación como aparece en la consola el siguiente mensaje:

Hola Mundo

Con lo cual habremos logrado hacer nuestro primer programa en Python y estaremos
comenzando nuestro viaje en este mundo de la computación. No debemos olvidar que en
diferentes lenguajes la forma de ejecutar programas puede ser diferente, además de que la
mayoría de los programas son más interesantes que el que acabamos de hacer. La mayoría de
lo que haremos será en línea de comandos, esto debido a que es conveniente para desarrollar
y probar los primeros programas por la facilidad de crearlos y ejecutarlos inmediatamente,
además de que son más simples en el diseño permitiéndonos concentrarnos en los conceptos
más allá de los detalles de implementación del lenguaje.

1.2 ¿Qué es un Programa?

Un programa es una secuencia de instrucciones que especifica como computar algo. El


cómputo puede ser matemático, como el resolver un sistema de ecuaciones, también puede
ser simbólico como el buscar y reemplazar texto en un documento. Los detalles de
implementación se ven diferentes en distintos lenguajes, pero algunas operaciones básicas
son comunes a casi todos ellos:

Entrada: Obtiene información de un teclado, archivo u otro dispositivo.

Salida: Manda información a la pantalla, a la impresora u otro dispotivo.

Operaciones matemáticas: Permite realizar operaciones matemáticas básicas como suma o


resta.

Ejecución condicional: Permite revisar si existe una determinada condición y ejecutar


secuencia de instrucciones correspondiente.

Repetición: Realiza un conjunto de instrucciones de forma repetitiva.

Por difícil que sea de creer todo programa sin importar que tan complicado sea, se encuentra
hecho de instrucciones muy sencillas, a pesar de que podemos describir el proceso de
programar como el desensamblar un grande y complejo problema en sus partes más
pequeñas y menos complejas, hasta que son lo suficientemente simples para ser realizadas
con las instrucciones básicas.

1.3 ¿Qué es depurar?

Programar es un proceso complejo, y como toda actividad que es realizada por seres
humanos existe la posibilidad de cometer errores, por costumbre a los errores se les llama
bugs del inglés insectos y al proceso de localizarlos y corregirlos se les llama depuración.
Tres tipos de errores pueden aparecer en un programa: errores de sintaxis, errores de
ejecución y errores semánticos. Es útil distinguir entre ellos para poder encontrarlos más
rápido.

Errores de sintaxis

Python únicamente puede ejecutar un programa, si su sintaxis es correcta, de lo contrario el


proceso fallara y devolverá un mensaje de error, la sintaxis hace referencia a la estructura de
un programa y las reglas de dicha estructura. Por ejemplo en español las oraciones deben
comenzar con una letra mayúscula y terminar en punto. asi que esta oración esta mal. Esta
también

Para una persona, unos cuantos errores de sintaxis no son un problema significativo, Python
no es tan flexible, en casa de que existe un solo error en tu programa, Python imprimirá un
mensaje de error y detendrá su ejecución y no será posible correr el programa, al principio es
difícil ubicar los errores y aún más el corregirlos, pero conforme se va adquiriendo
experiencia se cometen menos errores, se encuentra más rápido y se resuelven más
fácilmente.

Errores de ejecución

El segundo tipo de errores es un error de ejecución, ese tipo de errores se llaman así debido a
que no aparecen hasta que se ejecuta el programa. Este tipo de errores son conocidos también
como excepciones debido a que normalmente indican que algo excepcionalmente malo ha
ocurrido. Los errores de ejecución son raros, así que posiblemente pase algo de tiempo hasta
que comiences a encontrarlos.

Errores semánticos

El tercer tipo de errores son los errores semánticos. Si tu programa contiene un error
semántico podrás ejecutarlo exitosamente, en el sentido de que la computadora no generará
ningún mensaje de error, pero no hará lo que quieres que haga, sino que hará algo diferente,
pero recuerda que sin importar que haga el programa, siempre estará haciendo aquello que
tu le dijiste que hiciera.

El problema radica en que el programa que escribiste, no es el programa que querías escribir.
Las instrucciones no se encuentran bien semánticamente. Identificar errores semánticos
puede ser truculento debido a que requiere que se trabaje a la inversa observando la salida
que genera el programa e intentando comprender que es lo que está haciendo.

Depuración experimental

A pesar de lo frustrante que puede ser el depurar un programar, es una de las tareas más
exigentes, pero a su vez también una de las más enriquecedoras desde el punto de vista
intelectual del día a día de un programador. De cierta forma el depurar un programar es
similar a llevar a cabo un trabajo detectivesco, en el cuál valoramos las pistas que tenemos e
inferimos el proceso y los eventos que nos han llevado a los resultados que despliega el
programa.

El depurar también requiere determinación y constancia, esto debido a que una vez que
tenemos una idea de que es lo que está fallando, nos vemos en la necesidad de modificar el
programa e intentar nuevamente, si la hipotésis es correcta entonces nos encontraremos en
posibilidad de predecir el resultado de la modificación, y en caso de estar equivocados, nos
veremos en la necesidad de analizar nuevamente todo la información nuevamente e idear una
nueva hipotésis.

Existe una famosa frase que se aplica bien a este aspect particular, Sir Arthur Conan Doyle
en su libro “El Signo de los Cuatro”, tuvo a bien decir: “Una vez que eliminamos lo
imposible, lo que queda, por improbable que parezca, debe ser lo correcto”. Para algunas
personas el programar y el depurar son considerados lo mismo, esta forma de pensar parte
del hecho de pensar que el programar es el proceso de depurar gradualmente un programa
hasta que haga aquello que nosotros deseamos. Es importante considerar que para resolver
un problema complejo debemos irlo desmembrando hasta que queden pedazos pequeños y
fáciles de manejar, debemos concentrarnos en un solo aspecto, en un solo problema a la vez
y no podemos darnos el lujo de avanzar hasta que en medida de lo posible estamos seguros
de que al menos esa parte no tiene errores.

Lenguajes formales y lenguajes naturals

Los lenguajes naturals son aquellos lenguajes que la gente habla comunmente, así como
existen el inglés, el español y el francés, se les conoce como lenguajes naturales debido a que
evolucionaron de forma natural de acuerdo a como fueron cambiando los usos y costumbres
de las personas.

Lenguajes formales son los que han sido diseñados para aplicaciones especificas, por
ejemplo la notación matematica es un lenguaje formar que es partularmente bueno para
denotar relaciones entre números y simbolos, otro ejemplo los químicos emplean un lenguaje
formal para representar la estructura química de las molecular, en el caso particular de los
lenguajes de programación, los mismos han sido diseñados para expresar computos.

Una de las principales caracteristicas de los lenguajes formales es que tienen reglas estrictas
sobre su sintaxis, por ejemplo 3 + 3 = 6 es sintácticamente correcto desde el lenguaje
matematico, pero 3 =+ x$ no lo es. Las reglas sintácticas vienen en dos tipos principales las
relacionadas con tokens (componentes léxicos) y la estructura. Los tokens son elementos
básicos del lenguaje, ejemplos de ellos son las palabras, los números, los simbolos
matematicos, uno de los problemas del ejemplo 3 =+ x$ es que $ no es un token valido y que
la estructura no es la adecuada, debido a que no se puede poner un signo de mas
inmediatamente después de un signo de igual.