
El objetivo de este blog es enseñarte a pensar como un científico informático (computer scientist). Esta manera de pensar combina algunas de las mejores características de las matemáticas, ingeniería y ciencias naturales. Como los matemáticos, los científicos informáticos usan lenguajes formales para denotar ideas (específicamente computaciones). Como los ingenieros, diseñan cosas, ensamblando componentes en sistemas y evaluando intercambios entre alternativas. Como los científicos, observan el comportamiento de sistemas complejos, formulan hipótesis, y prueban predicciones.

La habilidad mas importante del científico informático es la de resolver problemas. Resolver problemas significa la habilidad de formular problemas, pensar creativa mente sobre soluciones, y expresar una solución limpia y precisa. Como resulta, el proceso de aprender a programar es una excelente oportunidad de practicar las habilidades para resolver problemas. Ese es el por que este capítulo es llamado, «El camino del programa».
A cierto nivel, aprenderás a programar, una habilidad muy útil por si misma. En otro nivel, aprenderás a usar la programación como medio para llegar a un fin. Conforme avancemos, este fin se volverá mas claro.
1.1 ¿Qué es un programa?
Un programa es una secuencia de instrucciones que específica como realizar una computación. La computación puede ser algo matemático, como resolver un sistema de ecuaciones o encontrar las raíces de un polinomio, pero también puede ser una computación simbólica, como buscar y reemplazar texto en un documento o algo gráfico, como procesar una imagen o reproducir un video.
Los detalles se miran diferentes en lenguajes diferentes, pero unas cuantas instrucciones básicas aparecen en casi todos los lenguajes:
entrada: Obtener datos del teclado, un archivo, la red, o algún otro dispositivo.
salida: Mostrar datos en la pantalla, guardarlos en un archivo, enviarlos a través de la red, etc.
matemáticas: Realiza operaciones básicas como la adición y la multiplicación.
ejecución condicional: Verifica ciertas condiciones y ejecuta el código apropiado.
repetición: Realiza una acción repetidamente, usualmente con alguna variación.
Créelo o no, eso es casi todo lo que hay que hacer. Todos los programas que has usado, no importa que tan complicado, está hecho de instrucciones que se parecen mucho a estas.
Así que puede pensar en la programación como el proceso de convertir una tarea larga y compleja en pequeñas y mas pequeñas subtareas, hasta que las subtareas hasta que las subtareas sean lo suficiente simples para ser realizadas con una de esas instrucciones básicas.
1.2 Ejécutando Python
Uno de los retos de empezar con Python es que tienes que instalar Python y software relacionado en tu computadora. Si estás familiarizado con tu sistema operativo, y especialmente si te sientes cómodo con la interfaz de línea de comandos, no tendrás problemas instalando Python. Pero para los principiantes, puede ser doloroso aprender sobre administración del sistema y programación al mismo tiempo.
Para poder empezar tenemos que descargar Python, esto es muy sencillo, accedemos a la página oficial http://www.python.org y damos click en la pestaña «Downloads» y luego en el botón que dice «Python 3.8.1». Este número puede variar ya que siguen saliendo nuevas versiones del lenguaje cada cierto tiempo.

Una vez que descarguen el setup de Python, pueden proceder a instalarlo como cualquier programa normal, solo procuren marcar la segunda casilla que dice «Add Python 3.8 to PATH» y damos click en «Install Now».

El intérprete de Python es un programa que lee y ejecuda código Python. Dependiendo de tu entorno, puedes iniciar el intérprete haciendo click en un ícono, o escribiendo python en una línea de comandos. Cuando inicie, deberías ver algo como esto:

Las primeras tres líneas contienen información sobre el intérprete y el sistema operativo que se está ejecutando, así que puede verse diferente para ti. Pero deberías veríficar que el número de versión el cual es 3.8.1 en este ejemplo, comienza con 3, lo cual índica que estás ejecutando Python 3.
La última línea es el prompt que indica que el intérprete está listo para que ingreses código. Si escribes una línea de código y presionas Enter, el intérprete mostrará el resultado:
Ahora estás listo para empezar. Desde aquí, asumiré que sabes como iniciar el intérprete de Python y ejecutar código.
1.3 El primer programa
Tradicionalmente, el primer programa que escribes en un nuevo lenguaje es llamado «hola mundo» por que todo lo que hace es mostrar las palabras «hola mundo». En Python, se parece a esto:

Este es un ejemplo de una sentencia print, aunque no imprime nada en papel. Esta muestra el resultado en la pantalla. En este caso, el resultado son las palabras: hola mundo.
Las comillas en el programa marcan el inicio y el final del texto a ser mostrado; no aparecen en el resultado.
Los paréntesis indican que print es una función. Llegaremos a las funciones en el capítulo tres.
Esta distinción tendrá mas sentido pronto, pero eso es suficiente para empezar.
1.4 Operadores Aritméticos
Después de «hola mundo», el siguiente paso es la aritmética. Python provee de operadores, los cuales son símbolos especiales que representan computaciones como la adición y la multiplicación.
Los operadores +, -, y * realizan adición, sustracción, y multiplicación respectivamente, como en los siguientes ejemplos:

El operador / realiza una división:

Puede que te sorprendas por que el resultado es 40.0 en lugar de 40. Explicaré esto en la siguiente sección.
Finalmente, el operador ** realiza exponenciación; esto es, eleva un número a una potencia:

En algunos otros lenguajes, ^ es usado para la exponenciación, pero en Python, este es un operador de bit a bit llamado XOR. Si no estás familiarizado con los operadores de bit a bit, el resultado puede sorprenderte:

No cubriremos los operadores de bit a bit en este libro, pero puedes leer sobre ellos en Wikipedia: https://es.wikipedia.org/wiki/Operador_a_nivel_de_bits
1.5 Valores y Tipos
Un valor es una de las cosas básicas con las que un programa trabaja, como un número o una letra. Algunos de los valores que hemos visto hasta ahora son 2, 42.0, y «hola mundo».
Estos valores vienen en diferentes tipos: 2 es un entero (integer), 40.0 es un número de punto flotante (floating-point number), y «hola mundo» es una cadena (string), llamada así por que las letras que contiene están encadenadas.
Si no estás seguro de que tipo de valor tienes, el intérprete puede decirte:

En estos resultados, la palabra «class» es usada en el sentido de una categoría; un tipo es una categoría de valores.
No es sorprenderte que los enteros pertenezcan al tipo int, las cadenas pertenezcan al tipo str y los números de punto flotante pertenezcan a float.
¿Qué pasa con valores como ‘2’ y ‘2.2’? Se ven como números, pero están entre comillas como las cadenas.

Son cadenas.
Cuando escribas un entero grande, puedes estar tentado a usar comas entre grupos de dígitos, como 1, 000, 000. Este no es un entero legal en Python, pero es legal:

Eso no es lo que esperábamos en absoluto! Python interpreta 1, 000, 000 como una secuencia de enteros separada por comas. Aprenderemos mas sobre este tipo de secuencias mas tarde.
1.6 Lenguajes Formales y Lenguajes Naturales
Los lenguajes naturales son los lenguajes que hablan las personas, como el Inglés, Español, y Francés.
No fueron diseñados por personas (aunque las personas traten de imponer cierto orden en ellos); evolucionaron naturalmente.
Los lenguajes formales son lenguajes que fueron diseñados por personas para aplicaciones específicas. Por ejemplo, la notación que los matemáticos usan es un lenguaje formal que es particularmente bueno para denotar relaciones entre números y símbolos. Los químicos usan un lenguaje formal para representar la estructura química de las moléculas. Y lo mas importante:
Los lenguajes de programación son lenguajes formales que han sido diseñados para expresar computaciones.
Los lenguajes formales tienden a tener estrictas reglas de sintaxis que gobiernan la estructura de las sentencias. Por ejemplo, en matemáticas la sentencia 3 + 3 = + tiene una sintaxis correcta, pero 3+ =3$6 no la tiene. En química H2O es una fórmula sintacticamente correcta, pero 2Zz no lo es.
Las reglas de sintaxis vienen en dos diferentes sabores, pertenecientes a los tokens y estructura. Los tokens son los elementos básicos del lenguaje, como las palabras, números y elementos químicos. Uno de los problemas con 3+ = 3$6 es que $ no es un token legal en matemáticas (hasta donde sabemos). Similarmente, 2Zz no es legal por que no existe un elemento con la abreviación Zz.
El segundo tipo de reglas de sintaxis pertenece a la manera en que los tokens son combinados. La ecuación 3 + /3 es ilegal por que aunque + y / son tokens legales, no puedes tener uno después del otro. Similar mente, en una fórmula química el sufijo viene después del nombre del elemento, no antes.
Esta es un@ sentencia bien estructurada en E$pañol con tokens inválidos en ella. Esta sentencia todos válidos tokens tiene, pero con una estructura no válida.
Cuando lees una oración en Español o una sentencia en un lenguaje formal, tienes que descifrar la estructura (aunque en un lenguaje natural haces esto de manera subsonsciente). Este proceso es llamado parsing (análisis sintáctico).
Aunque los lenguajes formales y lenguajes naturales tienen muchas características en común como los tokens, estructura, y sintaxis, hay algunas diferencias:
ambigüedad: Los lenguajes naturales están llenos de ambigüedades, con las cuales las personas tratan usando pistas contextuales y otra información. Los lenguajes formales son diseñados para ser casi o completamente inequívocos, lo cual significa que cualquier sentencia tiene un significado exacto, independientemente del contexto.
redundancia: Para compensar la ambigüedad y reducir los malos entendidos, los lenguajes naturales emplean mucha redundancia. Como resultado, son mas verbosos. Los lenguajes formales son mucho menos redundantes y mas concisos.
literalidad: Los lenguajes naturales están llenos de modismos y metáforas. Si yo digo, «te cayó el 20», posiblemente no hay ningún 20 ni nada cayendo (este modismo significa que alguien entendió algo luego de un periodo de confusión). Los lenguajes formales significan exactamente lo que dicen.
Por que todos crecimos hablando lenguajes naturales, algunas veces es difícil ajustarse a los lenguajes formales. Las diferencias entre los lenguajes formales y los lenguajes naturales es como la diferencia entre la prosa y la poesía, pero aún mas:
Poesía: Las palabras son usadas tanto por sus sonidos como por su significado, y todo el poema entero crea un efecto o respuesta emocional. La ambigüedad no solo es común sino que a menudo es deliberada.
Prosa: El significado de las palabras es mas importante, y la estructura aporta mas significado. La prosa se presta mas al análisis que la poesía pero sigue siendo ambigua con frecuencia.
Programas: El significado de un programa de computadoras es inequívoco y literal, y puede ser entendido completamente por el análisis de los tokens y su estructura.
Los lenguajes formales son mas densos que los lenguajes naturales, así que toma mas tiempo leerlos. También, la estructura es importante, así que no siempre es lo mejor leerlos de arriba hacía abajo, de izquierda a derecha. En lugar de eso, aprende a «parsear» el código en tu cabeza, identificando los tokens e interpretando la estructura. Finalmente, los detalles importan. Pequeños errores de ortografía y puntuación, los cuales puedes evadir en los lenguajes naturales, pueden hacer una gran diferencia en un lenguaje formal.
1.7 Depuración
Los programadores cometen errores. Por razones caprichosas, los errores en programación son llamados bugs y el proceso de encontrarlos y corregirlos es llamado depuración (debug).
La programación, y especialmente la depuración, algunas veces brindan emociones fuertes. Si estás atorado con un bug difícil, puedes sentirte enojado, desanimado, o avergonzado.
Existe evidencia de que las personas responden naturalmente a las computadoras como si estas fueran personas. Cuando trabajan bien, pensamos en ellas como compañeros de equico, y cuando son obstinadas o rudas, respondemos a ellas de la misma manera en que respondemos a las personas rudas y obstinadas. (Reeves and Nass, The Media Equation: How People Treat Computers, Television, and New Media Like Real People and Places).
Prepararse para esas reacciones puede ayudarte a tratar con ellas. Un enfoque es pensar en la computadora como un empleado con ciertas fortalezas, como velocidad y precisión, y debilidades particulares, como falta de empatía y la incapacidad de poder captar el panorama completo.
Tu trabajo es ser un buen administrador: Encontrar maneras de tomar ventaja de las fortalezas y mitigar las debilidades. Y encontrar maneras de usar tus emociones para engancharte con el problema, sin dejar que tus reacciones interfieran con tu habilidad de trabajar efectivamente.
Aprender a depurar puede ser frustrante, pero es una habilidad valiosa que es muy útil para muchas actividades mas allá de la programación. Al final de cada capítulo hay una sección, como esta, con mis sugerencias para depuración. Espero que te ayuden!
1.8 Glosario
resolver problemas: El proceso de formular un problema, encontrar una solución, y expresarla.
lenguaje de alto nivel: Un lenguaje de programación como Python que está diseñado para ser fácil de leer y escribir por los humanos.
lenguaje de bajo nivel: Un lenguaje de programación que está diseñado para ser fácil de ejecutar por una computadora; también llamado «lenguaje máquina» o «lenguaje ensamblador».
portabilidad: Una propiedad de un programa que puede ejecutarse en mas de un tipo de computadora.
intérprete: Un programa que lee otro programa y lo ejecuta.
prompt: Caracteres mostrados por el intérprete para indicar que está listo para recibir entrada del usuario.
programa: Un conjunto de instrucciones que especifican una computación.
sentencia print: Una instrucción que causa que el intérprete de Python muestre un valor en la pantalla.
operador: Un símbolo especial que representa una computación simple como la adición, multiplicación o la concatenación de cadenas.
valor: Una de las unidades básicas de datos, como un número o una cadena, que el programa manipula.
tipo: Una categoría de valores. Los tipos que hemos visto hasta ahora son enteros (tipo int), número de punto flotante (tipo float), y cadenas (tipo str).
entero: Un tipo que representa números enteros.
floats: Un tipo que representa números con sus partes fraccionarias.
string: Un tipo que representa una secuencia de caracteres.
lenguaje natural: Cualquiera de los lenguajes que hablan las personas y que evolucionaron naturalmente.
lenguaje formal: Cualquiera de los lenguajes que han sido diseñados por personas para propósitos específicos, como la representación de ideas matemáticas o programas de computadoras; todos los lenguajes de programación son lenguajes formales.
tokens: Uno ed los elementos básicos de la estructura sintáctica de un programa, analogo a una palabra en un lenguaje natural.
sintaxis: Las reglas que gobiernan la estructura de un programa.
parse: Examinar un programa y analizar la estructura sintáctica.
bug: Un error en un programa.
depuración: El proceso de encontrar y corregir bugs.
1.9 Ejercicios
Ejercicio 1.1 Es una buena idea leer este libro frente a una computadora, así puedes probar los ejemplo a medida que avanzas.
Cuando estés experimentando con una nueva característica, deberías intentar cometer errores. Por ejemplo, en el programa «hola mundo», ¿qué pasa si quitas una de las comillas?, ¿qué pasa si quitas ambas?, ¿qué pasa si escribes print incorrectamente?.
Este tipo de experimentos te ayudarán a recordar lo que lees; también te ayudará cuando estés programando, por que sabrás lo que el mensaje de error significa. Es mejor cometer ahora y a propósito que mas tarde y accidentalmente.
- En una sentencia print, ¿qué pasa si quitas uno de los paréntesis, o ambos?
- Si estás intentando imprimir una cadena, ¿qué pasa si quitas una de las comillas, o ambas?
- Puedes usar un signo menos para crear un número negativo como -2. ¿Qué pasa si colocas un signo + después de un número?, ¿Que pasa si lo intentas con 2++2?
- En notación matemática, los ceros a la izquierda están bien, como 09. ¿Qué pasa si intentas hacer esto en Python?, ¿Qué pasa si lo intentas con 011?
- ¿Que pasa si tienes dos valores sin operadores entre ellos?
Ejercicio 1.2 Inicia el intérprete de Python y úsalo como una calculadora.
- ¿Cuántos segundos hay en 42 minutos, 42 segundos?
- ¿Cuántas millas hay en 10 kilómetros? Pista: hay 1.61 kilometros en una milla.
- Si corres una carrera de 10 kilometros en 42 mínutos, 42 segundos, cual es tu ritmo promedio (tiempo por milla en minutos y segundos)?, ¿Cuál es tu velocidad promedio en millas por hora?.
2 respuestas a “El Camino del Programa”
This info is worth everyone’s attention. Whhen can I find out
more?
Me gustaMe gusta
If You speak English download they free ebook, just Google it «think python 2ed», this blog is a traduction of they book
Me gustaMe gusta