La
ilusión
del
azar:
la
naturaleza
determinista de la programación
Resumen:
En
esta
tesis,
exploro
la
intrincada
relación
entre
la
aleatoriedad
y
el
determinismo
en
programación,
abordando
la
idea
errónea
generalizada
de
que
existe
una
verdadera
aleatoriedad
en
los
sistemas
computacionales.
Comienzo
por
explicar
las
definiciones
y
los
tipos
de
aleatoriedad
tal
como
se
entienden
en
informática,
contrastándolos
con
la
aleatoriedad
natural.
Mediante
el
análisis
de
algoritmos
y
generadores
de
números
pseudoaleatorios
(PRNG),
demuestro
cómo
la
programación
es
fundamentalmente
determinista,
con
resultados
predecibles
regidos
por
procesos
predefinidos.
Se
analizan
los
fundamentos
matemáticos
de
la
pseudoaleatoriedad,
incluyendo
valores
semilla
y
pruebas
estadísticas,
para
destacar
sus
implicaciones
en
diversas
aplicaciones,
especialmente
en
criptografía
y
desarrollo
de
videojuegos.
Además,
analizo
las
limitaciones
de
la
pseudoaleatoriedad,
incluyendo
patrones
emergentes
y
restricciones
computacionales
que
desafían
la
ilusión
de
aleatoriedad.
Mediante
estudios
de
caso
en
aprendizaje
automático
y
seguridad
de
redes,
justifico
los
efectos
prácticos
del
determinismo
en
estos
campos.
En
definitiva,
concluyo
que,
si
bien
la
aleatoriedad
es
un
constructo
útil
en
programación,
es
una
ilusión
moldeada
por
procesos
deterministas,
lo
que
insta
a
futuras
investigaciones
a
perfeccionar
nuestra
comprensión
de
la
aleatoriedad
en
la
informática.
Palabras
clave:
Aleatoriedad,
determinismo,
generadores
de
números
pseudoaleatorios,
criptografía, aprendizaje automático.
Introducción
La
percepción
de
la
aleatoriedad
en
la
programación
es
un
tema
fascinante
que
suele
intrigar
a
muchas
personas,
ya
sean
informáticos
experimentados
o
legos
en
la
materia.
En
esencia,
la
aleatoriedad
en
programación
se
refiere
a
la
generación
de
resultados
que
parecen
impredecibles
y
no
deterministas.
Esta
percepción
es
crucial
en
informática,
donde
la
aleatoriedad
no
solo
es
una
herramienta,
sino
también
un
concepto
que
impulsa
la
innovación
y
el
desarrollo
en
áreas
como
la
criptografía,
las
simulaciones
y
los
videojuegos.
Sin
embargo,
esta
aleatoriedad
percibida
suele
ser
más
una
ilusión
que
una
realidad,
un
concepto
profundamente
arraigado
en
los
procesos
deterministas.
En
el
ámbito
de
la
informática,
la
aleatoriedad
puede
considerarse
un
arma
de
doble
filo.
Por
un
lado,
es
esencial
para
crear
claves
criptográficas
seguras,
simular
fenómenos
naturales
y
desarrollar
videojuegos
atractivos.
Por
otro
lado,
la
esencia
misma
de
la
aleatoriedad
en
programación
es
paradójica,
ya
que
las
operaciones
subyacentes
a
estos
procesos
son
inherentemente
deterministas.
Este
ensayo
emprende
un
viaje
para
desentrañar
las
complejidades
de
esta
paradoja
al
abordar
la
pregunta
central:
"
¿
Por
qué
no
existe
realmente
la
aleatoriedad
en
la
programación?".
Explorar
esta
pregunta
es
pertinente
porque
desafía
las
suposiciones
fundamentales
sobre
la
aleatoriedad
en
la
tecnología
y
abre
la
puerta
a
una
comprensión
más
profunda
de
cómo
los
procesos
deterministas
configuran
nuestro
mundo digital.
La
exploración
de
la
aleatoriedad
en
la
programación
no
es
un
mero
ejercicio
académico,
sino
una
investigación
práctica
con
importantes
implicaciones
para
áreas
críticas
como
el
desarrollo
y
la
seguridad
de
software.
Al
desmitificar
la
noción
de
aleatoriedad,
podemos
apreciar
mejor
la
sofisticación
de
los
algoritmos
y
la
predictibilidad
que
ofrecen.
Esta
predictibilidad
es
crucial
para
garantizar
la
fiabilidad
y
la
seguridad
de
los
sistemas
de
software,
que
son
cada vez más esenciales en nuestra vida diaria.
Al
analizar
la
importancia
de
la
aleatoriedad,
es
imperativo
considerar
su
aplicación
en
la
ciberseguridad.
Como
sugieren
Nogueira,
Nogueira
y
Nogueira
(2016)
,
si
bien
la
aleatoriedad
parece
ser
una
ilusión
metafísica,
su
deconstrucción
en
el
contexto
de
la
ciberseguridad
es
insuficiente,
ya
que
un
enfoque
determinista
a
menudo
puede
generar
una
falsa
sensación
de
seguridad.
La
ilusión
de
aleatoriedad
en
la
programación
puede
generar
vulnerabilidades
si
no
se
comprende
y
gestiona
adecuadamente.
Comprender
la
naturaleza
determinista
de
la
programación
permite
el
desarrollo
de
sistemas
más robustos y seguros.
Además,
Galeano
(2022)
ilustra
cómo
los
lenguajes
de
programación,
que
se
basan
en
gran
medida
en
principios
deterministas,
han
evolucionado
para
simular
la
aleatoriedad.
La
naturaleza
determinista
de
estos
lenguajes
puede
ser
tanto
una
fortaleza
como
una
vulnerabilidad.
Reconocer
esta
dualidad
es
esencial
para
el
avance
de
las
prácticas
de
programación
y
garantizar
la
integridad
de
los
sistemas
de
software.
Este
ensayo
contribuye
al
debate
actual
al
proporcionar
una
visión
más
clara
de
cómo
se
simula
la
aleatoriedad
y
las
implicaciones
de
esta
simulación
en
diversos
ámbitos
tecnológicos.
El
impacto
de
comprender
la
aleatoriedad
・
o
su
ausencia
・
en
la
programación
se
extiende
al
desarrollo
de
software.
Como
señala
Casadó
Benítez
(2024)
,
la
aplicación
de
la
aleatoriedad
en
los
juegos
ofrece
numerosos
beneficios,
en
particular
al
mejorar
la
experiencia
y
la
interacción
del
usuario.
Sin
embargo,
la
naturaleza
determinista
de
la
programación
impone
limitaciones
a
la
implementación
de
la
aleatoriedad,
lo
que
a
menudo
requiere
soluciones
creativas
para
lograr
los
resultados
deseados
sin
comprometer
la
predictibilidad
y
la
fiabilidad del sistema.
En
conclusión,
la
tesis
de
este
ensayo
afirma
que,
si
bien
la
programación
parece
incorporar
elementos
aleatorios,
en
realidad
se
basa
en
procesos
deterministas
que
pueden
analizarse
y
predecirse.
Esta
comprensión
no
solo
es
intelectualmente
satisfactoria,
sino
también
práctica
y
significativa,
ya
que
ofrece
perspectivas
sobre
cómo
podemos
aprovechar
los
procesos
deterministas
para
simular
la
aleatoriedad
de
forma
eficaz.
Al
desentrañar
la
ilusión
de
la
aleatoriedad,
podemos
comprender
mejor
las
complejidades
de
la
tecnología
moderna
y
mejorar
la
seguridad
y
la
funcionalidad
de
nuestros
sistemas
digitales.
El
recorrido
a
través
de
este
ensayo
arrojará
luz
sobre
los
fundamentos
deterministas
de
la
programación,
ofreciendo
una
nueva
perspectiva
sobre
el
papel
de
la
aleatoriedad
en
nuestro
mundo
cada
vez
más
digital.
La
exploración
comienza
con
una
comprensión
más
profunda
de
cómo
se
conceptualiza
la
aleatoriedad
en
la
programación,
seguida
de
un
análisis
de
la
naturaleza
determinista
de
los
algoritmos
y
los
generadores
de
números
pseudoaleatorios.
Profundizará
en
las
matemáticas
que
subyacen
a
la
pseudoaleatoriedad,
analizará
sus
implicaciones
prácticas
y
concluirá
con
una
reflexión
sobre
el
futuro
de
la
aleatoriedad
en
la
informática.
A
través
de
este
recorrido,
buscamos
ofrecer
una
visión
general
completa
de
por
qué
la
aleatoriedad,
tal
como
la
percibimos
en
la
programación,
es
una
ilusión:
una
construcción
construida
sobre
principios
deterministas que rigen el universo digital.
Entendiendo
la
aleatoriedad
en
la
programación
Definición de Aleatoriedad
La
aleatoriedad
es
un
concepto
que
ha
intrigado
a
científicos,
matemáticos
y
filósofos
durante
siglos.
En
informática,
la
aleatoriedad
desempeña
un
papel
crucial
en
diversas
aplicaciones,
desde
la
criptografía
hasta
el
aprendizaje
automático.
Sin
embargo,
el
concepto
de
aleatoriedad
en
programación
a
menudo
difiere
de
lo
que
podría
considerarse
"aleatoriedad
real"
en
el
mundo
natural.
Esta
distinción
es
vital
para
comprender
cómo
los
programadores
simulan
la
aleatoriedad
en
entornos
digitales
y
cómo
estas
simulaciones
a
veces pueden dar lugar a conceptos erróneos.
En
informática,
la
aleatoriedad
se
refiere
a
la
imprevisibilidad
y
la
ausencia
de
patrones
en
datos
o
eventos.
Es
esencial
para
crear
claves
criptográficas
seguras,
generar
datos
de
prueba
imparciales
y
diseñar
algoritmos
que
resuelvan
problemas
complejos
de
manera
eficiente
(AR
Aguilar
et
al.,
dicea.chapingo.mx).
Sin
embargo,
a
diferencia
de
los
fenómenos
naturales
donde
existe
aleatoriedad
real,
como
la
desintegración
radiactiva
o
el
ruido
térmico,
la
aleatoriedad
generada
por
computadora
suele
ser
determinista.
La
aleatoriedad
real
es
inherentemente
impredecible
e
inreproducible.
Es
un
fenómeno
que
ocurre
de
forma
natural
sin
intervención
computacional.
Por
ejemplo,
el
lanzamiento
de
un
dado
o
de
una
moneda
puede
considerarse
aleatorio
porque
sus
resultados
no
pueden
predecirse
con
precisión.
En
cambio,
la
aleatoriedad
que
se
simula
en
los
sistemas
informáticos
suele
generarse
mediante
algoritmos
de
naturaleza
determinista
(I.
Prieto
Funes,
2016).
Estos
algoritmos
utilizan
valores
iniciales
para
producir
secuencias
que
parecen
aleatorias,
pero
que,
en
última
instancia,
son
reproducibles.
Para
simular
la
aleatoriedad
en
los
sistemas
informáticos,
los
programadores
se
basan
en
generadores
de
números
pseudoaleatorios
(PRNG).
Estos
son
algoritmos
que
utilizan
fórmulas
matemáticas
para
producir
secuencias
de
números
que
imitan
las
propiedades
de
los
números
aleatorios.
Los
PRNG
son
deterministas
porque
siguen
una
secuencia
definida
de
pasos
para
generar
números.
Sin
embargo,
al
seleccionar
cuidadosamente
los
algoritmos
y
los
valores
iniciales,
los
resultados
pueden
parecer
suficientemente
aleatorios
para
la
mayoría
de
los
fines prácticos (DR Broz, 2015).
Los
PRNG
funcionan
partiendo
de
un
valor
inicial,
conocido
como
semilla,
y
aplicando
una
serie
de
operaciones
para
producir
una
secuencia
de
números.
La
elección
de
la
semilla
afecta
significativamente
la
secuencia
generada.
Si
se
conoce
la
semilla,
se
puede
predecir
la
secuencia
completa,
por
lo
que
en
aplicaciones
sensibles
a
la
seguridad,
mantener
el
valor
de
la
semilla
en
secreto
es
crucial
(DF
Rojas
Forero,
repository.udistrital.edu.co).
Un
método
común
para
generar
números
pseudoaleatorios
es
el
generador
congruencial
lineal
(LCG),
que
utiliza
una
ecuación
lineal
para
producir
números.
Si
bien
los
LCG
son
simples
y
eficientes,
no
son
adecuados
para
todas
las
aplicaciones
debido
a
su
predictibilidad.
Algoritmos
más
sofisticados,
como
Mersenne
Twister,
ofrecen
una
mejor
aleatoriedad
estadística
y
se
utilizan
ampliamente
en
simulaciones
y
otras
aplicaciones
que
requieren
un alto grado de aleatoriedad (MEG Graus, 2018).
La
naturaleza
determinista
de
los
PRNG
conduce
a
la
percepción
errónea
de
que
la
aleatoriedad
en
programación
es
equivalente
a
la
aleatoriedad
real.
Este
malentendido
puede
tener
implicaciones
significativas,
especialmente
en
campos
donde
la
seguridad
y
la
equidad
son
primordiales
(EL
Segura
et
al.,
2015).
Por
ejemplo,
si
se
utiliza
un
PRNG
para
generar
claves
criptográficas,
un
atacante
que
conozca
el
algoritmo
y
la
semilla
podría
reproducir
la
secuencia
y
comprometer
la
seguridad
del
sistema.
Otro
ámbito
donde
la
percepción
errónea
de
la
aleatoriedad
puede
causar
problemas
es
el
diseño
de
algoritmos
basados
en
muestreo
aleatorio.
Si
la
aleatoriedad
no
se
simula
adecuadamente,
los
resultados
pueden
estar
sesgados,
lo
que
lleva
a
conclusiones
inexactas
y
soluciones ineficientes (VL Alemán Andino, 2024).
Además,
la
creencia
de
que
la
aleatoriedad
generada
por
computadora
es
realmente
aleatoria
puede
generar
un
exceso
de
confianza
en
la
robustez
de
los
sistemas
de
seguridad.
Es
fundamental
que
desarrolladores
y
usuarios
comprendan
las
limitaciones
de
los
PRNG
y
la
importancia
de
utilizar
algoritmos
y
semillas
adecuados
para
mitigar
posibles
vulnerabilidades (LC Nogueira et al., 2016).
En
conclusión,
la
aleatoriedad
en
informática
es
un
concepto
complejo
y
matizado
que
difiere
significativamente
de
la
aleatoriedad
real
en
el
mundo
natural.
Si
bien
los
PRNG
ofrecen
un
medio
práctico
para
simular
la
aleatoriedad
en
entornos
digitales,
son
inherentemente
deterministas
y
deben
utilizarse
conociendo
sus
limitaciones.
Al
reconocer
las
diferencias
entre
la
pseudoaleatoriedad
y
la
aleatoriedad
real,
los
desarrolladores
pueden
diseñar
sistemas
más
seguros, eficientes y fiables.
Comprender
la
naturaleza
determinista
de
la
aleatoriedad
simulada
es
crucial
para
el
avance
de
campos
como
la
criptografía,
el
aprendizaje
automático
y
el
diseño
de
algoritmos.
A
medida
que
la
tecnología
continúa
evolucionando,
será
necesario
continuar
la
investigación
y
el
desarrollo
para
mejorar
la
simulación
de
la
aleatoriedad
en
sistemas
informáticos
y
abordar
los
desafíos
asociados
a
sus
fundamentos
deterministas
(D.
Hortigüela
Arozamena,
2022;
L.J. Pedro, ri.uaemex.mx).
Tipos de Aleatoriedad en la Informática
La
aleatoriedad
es
un
concepto
fascinante
que
permea
muchas
áreas
de
la
informática,
desde
la
criptografía
hasta
las
simulaciones
e
incluso
la
inteligencia
artificial.
Sin
embargo,
la
aleatoriedad
que
encontramos
en
informática
puede
clasificarse
en
diferentes
tipos,
cada
uno
con
sus
propias
características
y
aplicaciones.
En
esta
sección,
profundizaremos
en
dos
tipos
principales
de
aleatoriedad:
la
aleatoriedad
verdadera
y
la
pseudoaleatoriedad.
También
exploraremos
la
distinción
entre
generadores
de
números
aleatorios
(RNG)
y
generadores
de
números
pseudoaleatorios
(PRNG),
y
analizaremos
casos
de
uso
comunes
para
cada
tipo en programación.
La
aleatoriedad
verdadera
se
refiere
a
la
imprevisibilidad
que
se
origina
en
procesos
naturales.
Estos
procesos,
como
la
desintegración
radiactiva
o
el
ruido
atmosférico,
presentan
un
comportamiento
que
no
se
puede
anticipar
con
precisión.
La
aleatoriedad
verdadera
se
suele
aprovechar
mediante
generadores
de
números
aleatorios
de
hardware
(HRNG),
que
se
basan
en
fenómenos
físicos
para
producir
números
aleatorios.
Según
Vitini
y
López
(s.f.),
la
naturaleza
impredecible
pero
determinista
de
ciertos
sistemas
físicos
puede
ser
fundamental
para
generar
aleatoriedad
verdadera.
La
aleatoriedad
real
es
crucial
en
aplicaciones
donde
la
imprevisibilidad
es
primordial.
Por
ejemplo,
en
criptografía,
se
utilizan
números
aleatorios
reales
para
generar
claves
criptográficas,
garantizando
así
su
imprevisibilidad
y,
por
lo
tanto,
su
resistencia
a
ataques
(Segura,
Segura
y
Moreno,
2015).
Además,
la
aleatoriedad
real
también
se
utiliza
en
sistemas
de
lotería,
máquinas
tragamonedas
y
simulaciones
científicas,
donde
la
integridad
de
la aleatoriedad es crucial.
Sin
embargo,
la
generación
de
números
aleatorios
reales
puede
ser
difícil
de
implementar
y
verificar.
Requiere
hardware
especializado
y
suele
ser
más
lenta
que
los
métodos
basados
en
software.
Además,
al
depender
de
procesos
físicos,
puede
no
ser
viable ni rentable en todos los escenarios.
A
diferencia
de
la
aleatoriedad
real,
la
pseudoaleatoriedad
se
genera
mediante
procesos
deterministas.
Un
generador
de
números
pseudoaleatorios
(PRNG)
utiliza
algoritmos
matemáticos
para
producir
secuencias
de
números
que
parecen
aleatorios,
pero
que
en
realidad
son
deterministas.
Estas
secuencias
se
generan
a
partir
de
un
valor
inicial
denominado
semilla.
Como
señala
Broz
(2015),
la
programación
matemática
es
una
herramienta
poderosa
para
crear
modelos
deterministas,
incluyendo los utilizados en los PRNG.
La
pseudoaleatoriedad
se
utiliza
ampliamente
en
informática
debido
a
su
eficiencia
y
reproducibilidad.
Los
PRNG
pueden
generar
grandes
cantidades
de
datos
aleatorios
rápidamente
y
se
emplean
comúnmente
en
simulaciones,
juegos
y
algoritmos
aleatorios.
Una
ventaja
notable
de
la
pseudoaleatoriedad
es
que
permite
regenerar
la
misma
secuencia
de
números
utilizando
la
misma
semilla,
lo
cual
resulta
invaluable
para
la
depuración
y
replicación de experimentos (Piña Rivera, 2022).
A
pesar
de
su
utilidad,
la
pseudoaleatoriedad
tiene
limitaciones.
Al
ser
generada
por
algoritmos
deterministas,
las
secuencias
pueden
predecirse
si
se
conoce
la
semilla
o
el
algoritmo,
lo
que
representa
un
riesgo
de
seguridad
en
aplicaciones
sensibles
como
la
criptografía
(Galeano,
s.f.).
Por
lo
tanto,
la
elección
entre
la
aleatoriedad
real
y
la
pseudoaleatoriedad
a
menudo
depende
de
los
requisitos
y
restricciones
específicos
de
la
aplicación.
Los
generadores
de
números
aleatorios
(RNG)
y
los
generadores
de
números
pseudoaleatorios
(PRNG)
son
fundamentales
en
la
implementación
de
la
aleatoriedad
en
sistemas
informáticos.
Si
bien
ambos
sirven
para
generar
números
que
parecen
aleatorios,
difieren
significativamente
en
su enfoque y aplicación.
Los
RNG,
en
particular
los
basados
en
hardware,
generan
números
basándose
en
procesos
físicos
impredecibles,
como
se
mencionó
anteriormente.
Generalmente
se
utilizan
cuando
se
requieren
altos
grados
de
aleatoriedad
y
seguridad.
Sin
embargo,
debido
a
su
dependencia
de
fenómenos
físicos,
los
RNG
pueden
ser
más
lentos
y
consumir
más
recursos
(Bazán Díaz, 2022).
Por
otro
lado,
los
PRNG
son
algorítmicos
y
pueden
producir
números
a
alta
velocidad,
lo
que
los
hace
adecuados
para
aplicaciones
donde
el
rendimiento
y
la
reproducibilidad
son
críticos.
Algunos
ejemplos
incluyen
simulaciones
de
Monte
Carlo
y
generación
de
contenido
procedural
en
videojuegos
(Hortigüela
Arozamena,
2022).
La
naturaleza
determinista
de
los
PRNG
significa
que,
dada
la
misma
semilla
inicial,
producirán
la
misma
secuencia
de
números,
lo
cual
es
ventajoso
para
los
procesos
de
prueba
y
desarrollo
iterativo.
La
elección
entre
usar
aleatoriedad
verdadera
o
pseudoaleatoriedad
suele
depender
de
los
requisitos
específicos
de
la
aplicación
en
programación.
La
aleatoriedad
verdadera
es
indispensable
en
aplicaciones
criptográficas,
donde
la
imprevisibilidad
de
las
claves
y
los
nonces
es
crucial
para
mantener
la
seguridad.
Como
destaca
Prieto
Funes
(2016),
la
aleatoriedad
en
los
sistemas
criptográficos
debe
resistir
un
escrutinio
exhaustivo
para
evitar
vulnerabilidades.
Sin
embargo,
la
pseudoaleatoriedad
es
más
frecuente
en
las
tareas
cotidianas
de
programación
debido
a
su
eficiencia
y
facilidad
de
implementación.
En
los
videojuegos,
por
ejemplo,
la
pseudoaleatoriedad
se
utiliza
para
crear
experiencias
dinámicas
e
impredecibles
para
los
jugadores.
La
generación
de
contenido
procedural,
que
se
basa
en
algoritmos
pseudoaleatorios,
puede
crear
mundos
de
juego
vastos
y
variados
sin
necesidad
de
almacenamiento
masivo
(Cantú-González
et
al.,
2016).
Además,
la
pseudoaleatoriedad
desempeña
un
papel
importante
en
las
simulaciones
y
el
modelado.
El
método
de
Monte
Carlo,
una
técnica
estadística
utilizada
para
resolver
problemas
matemáticos
mediante
muestreo
aleatorio,
se
basa
en
gran
medida
en
PRNG
para
simular
una
amplia
gama
de
escenarios
de
forma
eficiente (Alemán Andino, 2024).
En
conclusión,
comprender
los
tipos
de
aleatoriedad
en
informática
y
sus
respectivas
aplicaciones
es
crucial
para
desarrollar
soluciones
de
software
robustas
y
eficaces.
El
uso
de
aleatoriedad
real
o
pseudoaleatoriedad
depende
de
factores
como
el
rendimiento,
la
reproducibilidad
y
los
requisitos
de
seguridad.
A
medida
que
la
tecnología
avanza,
la
exploración
de
nuevos
métodos
para
mejorar
la
aleatoriedad
en
informática
seguirá
siendo
un
área
vital
de
investigación y desarrollo.