Para quien no lo supiese ya, ¡estamos en la era de la tecnología! La programación ya no es algo que solo se ve en películas, con pantallas negras con muchas letras y símbolos crípticos que una selecta minoría es capaz de entender (la mayoría de los cuales llevan capuchas negras y tienen intenciones dudosas). Se están enseñando las bases desde edades muy tempranas y, poco a poco, todo el mundo lo está aprendiendo e incorporando a su día a día, de una forma más o menos avanzada según el caso.

Dentro de este nuevo paradigma, para quien decide que quiere adentrarse más aún en este mundo y hacer una carrera de ello, tiene una primera pregunta clave que responder: ¿qué lenguaje de programación quiero aprender?

En este post vamos a hablar de las bondades de Python, uno de los lenguajes de programación más demandados en los últimos años.

Legibilidad y sencillez del lenguaje

Cuando empecé a estudiar programación, lo que más rechazo me producía de la mayoría de los lenguajes era esa sensación de ser lenguajes distintos (valga la redundancia). Está claro que todos parten del inglés y tienen su sintaxis, pero dentro de esto, considero que Python tiene un cierto acercamiento al lenguaje humano, que hace que se vea como algo más próximo a lo conocido y, por tanto, más sencillo de entender y aprender a trabajar.

Por ejemplo, aquí podemos ver el código de un bucle for, que se recorre todos los elementos de una lista y ejecuta una función sobre ellos si se cumple cierta condición:

department_employees = get_department_employees(department_id)
for employee in department_employees:
    if employee.incorporation_year <= 2020: 
        update_seniority(employee)

Esto no quiere decir que sea necesariamente más fácil de aprender. Como todos los lenguajes, Python tiene su curva de aprendizaje y requiere tiempo y esfuerzo dominarlo de una manera óptima.

Indentado

Siguiendo con la legibilidad, uno de los puntos de choque habituales en los distintos lenguajes de programación son la apertura y cierre de bloques de código y la indentación que se utiliza en ellos.

En Python, lo único que nos distingue los distintos bloques de código es la indentación. Un bloque de código empieza y termina en su mismo nivel de indentación. Esto nos da una ventaja sustancial respecto a las típicas llaves de apertura y cierre de bloques, y es que nunca vas a poder encontrar un código de Python mal indentado ya que, de ser así, no funcionará dicho código.

def update_seniority(employee):
    current_seniority = employee.seniority
    positive_satisfaction = 0
    negative_satisfaction = 0
    for colleague in employee.colleagues:
        satisfaction = colleague.get_satisfaction(employee)
        if satisfaction > 8:
            positive_satisfactions += 1
        elif satisfaction < 4:
            negative_satisfaction += 1
    if positive_satisfaction > negative_satisfaction:
        employee.seniority = next_seniority_level(current_seniority)
    elif positive_satisfaction < negative_satisfaction:
        employee.seniority = previous_seniority_level(current_seniority)

Desde un punto de vista de aprendizaje, esto nos va a instaurar desde un primer momento unos buenos hábitos en términos de indentación, que nos servirán en todo nuestro futuro como profesionales de la programación, ya sea en Python como si se decide dar el salto a otro lenguaje.

Tipado dinámico

Una de las características más llamativas de Python es su tipado dinámico. Esto quiere decir principalmente dos cosas: que no tenemos que definir el tipo de una variable antes de utilizarla, y que podemos (si es necesario) cambiar dicho tipo a mitad de ejecución. Esto aplica tanto al crear una variable como en la definición de los parámetros de una función.

Es muy importante hacer hincapié en la especificación “si es necesario”, ya que en muchos casos estos cambios de tipos no son necesarios ni recomendables.

def get_department_employees(department_id):
    department = Department.get(id=department_id)
    if department:
        return department
    else:
        return ''

Con este ejemplo, lo único que se va a conseguir es perder esa legibilidad del código, y aumentar la posibilidad de que haya algún error por tener un tipo inesperado en una variable.

Las ventajas de este tipado dinámico residen principalmente en su uso en el procesado de datos de una fuente externa, en los que es posible que no conozcamos de antemano cómo van a ser estos datos o que estos no sean uniformes.

Esta flexibilidad en el tipado nos permite poder dar solución a ciertos problemas que no serían posibles sin ello, pero debe convivir con la responsabilidad de no abusar de ello en otras situaciones para no perder el control de nuestra aplicación.

Tipos de programación

Otro de los puntos fuertes de Python es lo polifacético qué es, dándole al programador la opción de elegir en cada momento el tipo de programación que mejor se adapte al entorno y problema que tiene que resolver, manteniéndose en todo momento en el mismo ecosistema y lenguaje de Python.

Programación secuencial

Este será el punto de partida de nuestro desarrollo en Python. Solo necesitamos un fichero para escribir las líneas de código Python (con los condicionales o bucles que necesitemos) y ya tendremos nuestro programa. A partir de aquí, iremos añadiendo distintas funciones en el mismo fichero para aumentar la legibilidad y reusabilidad del código, y cuando sea necesario pasaremos a tener distintos módulos.

triangle_height = 5
triangle_base = 7

rectangle_height = 8
rectangle_base = 14

triangle_area = triangle_height * triangle_base / 2
rectangle_area = rectangle_height * rectangle_base

Programación orientada a objetos

Uno de los puntos fuertes de Python es la creación de clases para hacer programación orientada a objetos. Algunas de las características más relevantes de esta modalidad son las siguientes:

  • Herencia múltiple, permitiendo que una clase herede tanto atributos como métodos de varias clases padre, así como el polimorfismo para dar a las clases hijas comportamientos específicos según las necesidades.
  • Posibilidad de tener tanto atributos de clase como de instancia, unificando el acceso a ellas para simplificar su uso.
  • Metaclases, que se pueden definir como clases que nos permiten manejar y controlar a otras clases, y nos dan un mayor control sobre las clases manteniendo un código legible.
class Shape:
    sides = None

    def __init__(self, height, base):
        self.height = height
        self.base = base

    def area(self):
        pass

    def describe(self):
        if self.sides is not None:
            return f"A {type(self)} is a shape with {self.sides} sides"
        else:
            return "Unknown shape"

 class Triangle(Shape):
     sides = 3

     def area(self):
        return self.height * self.base / 2

class Square(Shape):
    sides = 4

    def area(self):
        return self.height * self.base

Programación funcional

A pesar de nos ser un lenguaje puramente funcional, Python tiene varios puntos claves que nos permiten programar de forma funcional manteniendo los principios de esto:

  • Manejo de funciones como una variable, permitiendo tanto asignar funciones a una variable como devolverlas como un parámetro de salida de otra función.
  • Funciones lambda, que nos permiten la creación de funciones anónimas.
  • Inmutabilidad de ciertos tipos de dato, como pueden ser enteros o strings, ayudándonos a mantener el mismo estado de las funciones
def triangle_area(base, height):
    return base * height / 2

def rectangle_area(base, height):
    return base * height

def area(shape, base, height):
    rectangle_area = None
    if shape == 'triangle':
        area_function = triangle_area
    elif shape == 'rectangle':
        area_function = rectangle_area
    return rectangle_area(base, height) if rectangle_area else None

Salidas profesionales

Otro de los puntos clave a la hora de elegir el lenguaje de programación en el que se quiere profundizar son las aspiraciones profesionales que se tienen. Cada lenguaje tiene ámbitos en los que destaca más y ámbitos en los que es menos propenso a ser utilizado, y según la trayectoria profesional que se pretenda seguir, habrá que elegir en consonancia.

Un punto a favor de Python en este aspecto es que no solo lleva mucho tiempo siendo el lenguaje de programación más utilizado según el índice TIOBE, sino que este ratio lleva varios años aumentando.

Desarrollo web

Para el desarrollo web, prácticamente todos los lenguajes de programación tienen soluciones estándar para el abordaje de este problema.

En el caso de Python, tiene varios frameworks muy extendidos que nos facilitan el desarrollo tanto de aplicaciones web completas como APIs para que estas sean explotadas por distintos frontales.

  1. Django

Django lleva siendo muchos años el framework de referencia para el desarrollo web en Python. Es verdad que en los últimos años, con el auge de los microservicios, está viendo reducido su uso en favor de otros frameworks más modulares, pero sigue siendo una opción muy buena cuando se desea desarrollar tanto aplicaciones web como APIs en Django por muchos motivos:

  • Django es muy escalable, permitiendo el desarrollo de tanto aplicaciones pequeñas como muy grandes.
  • Protección frente a muchos ataques de seguridad integrados directamente en el framework, como puede ser CSRF, XSS o SQLInjection, entre otros.
  • Tiene su propio ORM para la interacción con bases de datos SQL, que nos ofrece una interfaz muy cómoda para hacer queries tanto sencillas como complejas sin necesidad de escribir sentencias SQL, y totalmente integrado en todo el sistema de vistas y templates propios de Django.
  • Panel de administración nativo para cualquier modelo de datos que se defina, permitiendo una customización muy extensa de tanto los campos que se visualizan en el listado como de los formularios utilizados para la creación de objetos.
  • Vistas genéricas muy bien encapsuladas, que permiten personalizar los detalles concretos de la vista que se desea añadir sin la necesidad de tener que implementar todas las funcionalidades básicas de dicha vista.
  1. FastAPI

Si Django ha sido durante mucho tiempo la referencia de Python en el tema web, FastAPI se está convirtiendo rápidamente en su heredero parcial en el mundo de las APIs. Es un framework muy “joven”, pero rápidamente está ganando popularidad gracias a su simplicidad y todas las facilidades que ofrece.

Es verdad que no ofrece una solución tan completa como puede ofrecer Django, pero para el desarrollo de APIs y microservicios ofrece una gran cantidad de ventajas que ha hecho que gane bastante popularidad en este ámbito.

  • Documentación interactiva con todas los endpoints desarrollados, ofreciendo opciones para añadir información sobre los objetos de entrada y salida, ejemplos, distintos códigos de respuesta, entre otros.
  • Nació directamente en el mundo de la asincronía, por lo que su integración con las herramientas asíncronas que nos ofrece Python es total y la velocidad que nos ofrece es difícil de conseguir con otros frameworks.
  • Integración con las librerías de Starlette y Pydantic para solucionar toda la validación de datos y enrutado de peticiones, así como una actualización constante para la adaptación al framework a las nuevas versiones de estas librerías.
  • Inyección de dependencias nativo muy potente.

Data

Python lleva siendo uno de los lenguajes de referencia en el mundo data desde sus inicios, haciendo que sea una buena opción para los interesados en orientar su carrera por ese ámbito.

  • Su facilidad de aprendizaje lo hace accesible a perfiles más “puros” del mundo de los datos pero menos orientados a la programación.
  • Una amplia gama de librerías disponibles diseñadas para dar solución a problemas habituales en el mundo del análisis de datos (pandas, numpy, scikit-learn, por poner unos ejemplos).
  • La versatilidad del lenguaje de la cual hemos hablado previamente es también un motivo de peso para su uso como análisis de datos.
  • Los notebook de Jupyter han sido una revolución en este ámbito, ofreciendo en una interfaz web una potente herramienta que nos permite combinar el código con una visualización de resultados.

Conclusión

Como hemos visto, Python es un lenguaje de programación muy completo y versátil, el cual nos permite con el mismo conocimiento base tener la capacidad de abordar problemas de diversa índole.

Si estás pensando en aprender un lenguaje de programación, ya sea el primero o ampliar tu repertorio, échale un vistazo a su documentación y manos a la obra.

Cuéntanos qué te parece.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.