Cap. 1 - Cómo es programar en Python

Queremos aprender a pensar como desarrolladores de software ("Computer scientists")

1.1) El lenguaje de programación Python

Es un lenguaje de alto nivel (como C++, PHP, Pascal, Java, C#, etc.)

Ventaja de los lenguajes de alto nivel: son fáciles de entender y permiten desarrollar software portable de un sistema a otro.

Se llama Intérprete Python al motor (engine) que traduce y ejecuta nuestro código Python. Tiene dos modos: inmediato y script

Usamos como editor de archivos a PyScripter - aunque hay otros varios editores

1.2) ¿Qué es un programa?

Un programa es una secuencia de instrucciones que especifican qué queremos hacer. Cada lenguaje difiere, pero en casi todos aparece lo siguiente:

inputObtener información desde el teclado, un archivo o algún otro dispositivo.
outputMostrar información en pantalla, enviarla a un archivo o a otro dispositivo
mathOperaciones matemáticas básicas (suma, multiplicación, etc.)
ejecución condicionalChequear ciertas condiciones y en función del resultado ejecutar una u otra secuencia de acciones
repeticiónRepetir cierta acción varias veces (habitualmente con cierta variación entre cada repetición)

Y eso es casi todo! Casi todo programa, por más complicado que sea, se basa en una serie de instrucciones que podrían reducirse a esos 5 tipos.

1.3) ¿Qué es debugging?

La programación es un proceso complejo hecho por humanos, por lo cual suele conducir a errores. Los errores de programación se llaman bugs y el proceso por el cual se eliminan estos errores se llama debugging. Se sabe que el término bug para referirse a errores de ingeniería se utiliza desde hace tiempo (Edison lo utilizó en 1889 para referirse a un problema con su fonógrafo).

Suelen darse 3 clases de error en un programa:

1.4) Errores de sintaxis (Syntax errors)

Los errores de sintaxis pueden ocurrir igualmente en lenguaje hablado, pero solemos ser capaces de manejarnos con ellos (por ejemplo, si un texto tiene un par de errores ortográficos o gramaticales comprendemos su significado de todas formas). Python no va a ser tan paciente y va a detener la ejecución de inmediato, reportando el error. Estos errores suelen ser un dolor de cabeza para los programadores principiantes.

1.5) Errores de tiempo de ejecución (runtime)

Sólo aparecen cuando se ejecuta el programa (también se llaman exceptions porque indican que algo no esperado ha ocurrido).

No suelen darse en programas sencillos, por lo cual no son frecuentes cuando uno empieza a programar.

1.6) Errores semánticos

Ocurren cuando el programa corre exitosamente, pero no hace lo que uno esperaba. Hace algo distinto: lo que le indicamos que hiciera.

Es decir, el programa que escribimos no es el que queríamos escribir. Son problemas difíciles de detectar y difíciles de resolver: requieren reproducir el problema primero para ir hacia atrás y encontrar el punto en que la lógica es incorrecta.

1.7) Debugging experimental

A veces puede ser frustrante, pero hacer debugging es una de las tareas más desafiantes y detectivescas de la programación, y es parte fundamental del aprendizaje del programador.

Tiene también algo de ciencia experimental: se conjetura cuál puede ser la causa del error, se hacen cambios y se vuelve a probar.

Hay quien dice que programar y hacer debugging es lo mismo: programar es hacer debugging a un código hasta que termina haciendo lo que queremos que haga.

Ejemplo: Linux. Empezó como un programa de bajo nivel que debía pasar de mostrar "AAAA" a mostrar "BBBB", y hoy es un sistema operativo de millones de líneas.

1.8) Lenguajes formales y naturales

Naturales: son los que hablamos (inglés, español, francés). No fueron diseñados por personas, sino que evolucionaron por su cuenta.

Formales: diseñados por personas para aplicaciones específicas. Por ejemplo, los lenguajes formales de las matemáticas (expresan relaciones) y la química (expresan estructuras químicas).

Los lenguajes de programación fueron diseñados para expresar computaciones.

Los lenguajes formales tienen reglas (2+2 = 4 es correcto; 2+/=42 no lo es - del mismo modo, H2O es correcto, pero Z2324O no lo es)

La sintaxis de un lenguaje de computación consta de tokens y estructura

El proceso por el cual al leer (los tokens de) una frase determinamos cuál es su estructura se llama parsing

Una vez identificada la sintaxis correcta, ésta se interpreta con una semántica (la cual depende del contexto).

Algunas diferencias entre lenguajes naturales y formales:

Para leer un lenguaje formal:

  1. Recordar que son mucho más densos que los lenguajes naturales (dicen mucho en poco espacio)
  2. No ir "hacia adelante" como se hace como uno natural, sino identificar primero la estructura
  3. Los mínimos detalles y errores cuentan: un punto y coma o un espacio pueden alterar completamente el significado del programa

1.9) Primer programa

Por tradición, el primer programa es "Hola, mundo", que queda así en Python:

print("Hola, Mundo!")

Algunos juzgan la calidad de un lenguaje de programación por la simplicidad de su "Hola, Mundo!". En este sentido, Python es de los mejores.

1.10) Comentarios

Un comentario es texto que sólo se dirige al usuario humano (para aclararle de qué se trata el código que está leyendo).

Un comentario comienza en el primer punto de una línea en que aparezca el token #

También se pueden dejar líneas en blanco (todas las que se quiera)

Ejemplo:

#---------------------------------------------------
# Esta demo muestra cuán fácil es agregar comentarios en Python
# Adaptado de un programa de Joe Soap (diciembre 2010).
# Se puede copiar o modificar libremente
#---------------------------------------------------

print("Hola mundo!")     # Es muy fácil!

1.11) Glosario

1.12) Ejercicios

1) Escribir una sentencia en español con semántica comprensible pero sintaxis incorrecta. Y otra con sintaxis correcta pero errores semánticos

2) Hacer experimentos con la suma (+), multiplicación (*) y potenciación (**) en la línea de comandos

ejemplo: (2)**(1/2) (-2)**(3)

3) La expresión "1 2" genera un reporte de error de sintaxis. Buscar otros casos que generen mensajes similares.

4) Si se escribe print("hello") se obtiene "hello" sin comillas. Si simplemente se escribe "hello" se obtiene 'hello' con comillas. Experimentar con ese tema.

print("'hello'") print("'hello'") print("hello")

5) Si se escribe una palabra como "gato" (sin comillas), se obtendrá un reporte de error de sintaxis (porque la palabra no ha sido definida)

6) Si se escribe 6+4*9 en el prompt, se obtiene el resultado 42. Pero si se escribe en un script, no se obtiene output (ya que no se solicitó output, sólo se hace el cálculo internamente)

Si en cambio en el script se pone print(6+4*9) entonces sí se ve el 42