Ir a pucv.cl

¿Para los abogados es difícil aprender a programar? Un ejemplo

Por Pablo Hurtado Bravo

02.06.21

En esta serie de columnas estamos abordando temas sobre Inteligencia Artificial (IA) y Derecho en términos simples y prácticos. En la columna anterior abordamos la pregunta ¿qué es un algoritmo?: conjunto de reglas o instrucciones (relativamente breves y sencillas) que repetidas muchas veces logran resolver un problema mayor. En esta columna abordaré la pregunta acerca de qué tan difícil sería para un abogado entender cómo está programado un algoritmo de IA. Adelanto la respuesta: no es difícil.

Existe consenso en que para un abogado o abogada interesado en temas de Derecho y Tecnología sería útil aprender programación. La verdadera duda que los detiene es si acaso no será demasiado difícil. Como Derecho e Informática han sido profesiones distantes, aprender a programar pareciera alejado de las destrezas de un abogado. En vez de adoptar una perspectiva académica, como adelanté en la columna anterior, despejaré esa duda a partir de mi experiencia como abogado y programador (Python).

Después de terminar mi doctorado en Derecho, decidí aprender a programar el año 2018. Tomé un curso on-line impartido por la IBM que duraba seis meses y costó $240 dólares. Al comienzo parecía extraño: tipos de variables (string, integer, float, boolean), agrupaciones de variables (lista, diccionario, set, tupla), tipos de ciclos (for, while, yield), la diferencia entre “función” y “clase”, entre otros tecnicismos. Pero a medida que me acostumbraba a esa nueva terminología y su rígida gramática (tercer mes), todo empezó a parecer sospechosamente familiar. ¿Por qué?

En esencia, un programa de computador es un documento (archivo) que contiene reglas escritas para ser cumplidas (ejecutadas). Así visto, los abogados trabajamos con “programas” cotidianamente. En concreto, ¿qué es una ley? También es un documento con reglas escritas para ser cumplidas. ¿Qué es un contrato? Otro tipo de documento con reglas escritas para ser cumplidas. ¿Qué es la Constitución? ¿Qué es un reglamento? Lo mismo. La diferencia es que en un programa de computador usted está programando una máquina. En la ley, un contrato, la Constitución o un reglamento, se está programando –en cambio– una “interacción entre personas”. El Derecho es un gran programa social.

Para explicar las similitudes entre el Derecho y un programa de computador, tomemos el contrato de arrendamiento de inmueble como ejemplo. Anticipo al lector que fue necesario omitir ciertas precisiones tanto del lado informático como del lado jurídico. Agregar tales precisiones sólo harían el ejemplo más complejo y la comparación menos didáctica. Comencemos.

En Python, un programa comienza “importando librerías”. Las librerías son otros programas más generales que contienen las clases (conceptos) y funciones (manipulación de clases) que aplican a nuestro caso actual. En el contrato de arrendamiento dichas “librerías” que tendríamos que importar son el Código Civil y la Ley 18.101 (“Fija normas especiales sobre arrendamientos urbanos”). En efecto, el Código Civil y la Ley 18.101 contienen las definiciones generales acerca de qué es un arrendamiento y cuáles son sus obligaciones, entre otras:

import Código_Civil, Ley_18101

Después un programa define sus variables básicas. En un contrato de arrendamiento, tales variables (o “elementos de la esencia” diría un abogado) son quién es el arrendatario, quién es el arrendador, cuánto es la renta y cuál es el inmueble arrendado:

arrendatario = “Juan Pérez”
arrendador = “María Gómez”
renta = 300.000
inmueble = “Los Conquistadores 321”

Todo contrato, como sabemos, crea obligaciones entre los contratantes. Visto como un programa, tales obligaciones son las “funciones”, esto es, el modo en que las variables anteriormente definidas –“arrendatario”, “arrendador”, ”renta” e “inmueble”– interactúan entre sí. El arrendamiento de inmueble, en particular, crea dos obligaciones principales: que el arrendatario pague la renta al arrendador y que el arrendador permita usar el inmueble al arrendatario. En nuestro pseudocódigo, estas dos obligaciones se definirían del siguiente modo:

def Pagar_Arriendo(renta, arrendatario, arrendador):
def Permitir_Usar(inmueble, arrendador, arrendatario):

Ahora, las obligaciones de un arrendamiento se repiten todos los meses (es de “tracto sucesivo” diría un abogado). Esta repetición se programa a través de un ciclo o loop, que especifica cuántas veces deben ser repetidas las funciones anteriores. En nuestro pesudocódigo, esto se declararía como sigue:

meses = [“enero”, “febrero”, “marzo”,
‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎”abril”, “mayo” ,”junio”,
‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎”julio”, ”agosto”, “septiembre”,
‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎“octubre”, “noviembre”, “diciembre”]

for mes in meses:

Por último, todo programa necesita “manejar excepciones”, esto es, definir qué hacer si ocurre un error en la ejecución de las funciones anteriormente definidas. En nuestro ejemplo, manejar excepciones equivaldría a qué sanciones contemplaría el contrato si alguna de las obligaciones se incumple: el arrendatario no paga la renta o el arrendador falla en permitir el uso del inmueble. Supongamos que la sanción es simplemente que el contrato termina (“desahucio” diría un abogado). Esa línea de código sería el comando “break” que significa terminar el loop:

try:
‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎…
except:
‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎break

En suma, el pseudocódigo de un programa de “contrato de arrendamiento” sería el siguiente:

1 import Código_Civil, Ley_18101
2
3 arrendatario = “María Gómez”
4 arrendador = “Juan Pérez”
5 renta = 300.000
6 inmueble = “Los Conquistadores 321”
7
8 def Pagar_Arriendo(renta, arrendatario, arrendador):
9 def Permitir_Usar(inmueble, arrendador, arrendatario):
10
11 meses = [“enero”, “febrero”, “marzo”,
12 ”abril”, “mayo”, ”junio”,
13 ”julio”, ”agosto”, “septiembre”,
14 “octubre”, “noviembre”, “diciembre”]
15 for mes in meses:
16 ‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎try:
17 ‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎Pagar_Arriendo(renta, arrendatario, arrendador)
18 ‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎Permitir_Usar(inmueble, arrendador, arrendatario)
19 ‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎except:
20 ‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎‎ ‏‏‎break

Después de leer esas 20 líneas, puede ser que usted no entienda los detalles de su gramática. Pero de seguro entiende, en términos generales, qué es lo que esas 20 líneas de código hacen: son las cláusulas de un contrato de arrendamiento en que se definen las partes y el objeto del contrato, sus obligaciones mes a mes y el término del contrato si alguna de esas obligaciones se incumple. Un algoritmo real no estará programado en tan sólo 20 líneas (como nuestro ejemplo) sino que pueden superar las 500 o 1.000 líneas. Si bien la cantidad de código puede parecer abrumadora, línea-por-línea un programa de computador no es mucho más complejo que lo que acabamos de ver.

En conclusión, para los abogados no debería resultar difícil aprender a programar porque ellos ya están acostumbrados a la “lógica” tras un programa: redactar un documento con una serie de definiciones y reglas para ser cumplidas ordenadamente. Lo que los abogados no saben aún es un específico “lenguaje” de programación: Python, Java, C++, etc. Esa es la parte fácil de aprender y no debería tomar más de seis meses. Y, para ser franco, hoy en día me parece más breve, claro y preciso el lenguaje de programación que el (barroco) lenguaje jurídico.

Lo realmente desafiante –o apasionante, prefiero decir– no es la programación sino la belleza de las matemáticas, geometría y estadística que subyace a los algoritmos de IA. Pero ese será tema para una columna aparte.

Columna publicada en El Mercurio Legal el 13 de mayo. Publicación original AQUÍ. 

*La columna no representa necesariamente el pensamiento institucional de la Facultad y Escuela de Derecho PUCV.

Facultad y Escuela de Derecho PUCV