¿Son éticos los jueces en línea en programación competitiva?
En el mundo de la programación competitiva, es muy común practicar resolviendo problemas de concursos anteriores en un juez en línea al que se le envía el código fuente de la solución para que éste entregue el veredicto. Pero a pesar de que esta sea la forma de entrenar a la que estamos acostumbrad@s, y considerando esencial para la libertad el que podamos controlar las herramientas que ocupamos, es sensato preguntarse si los jueces en línea como los conocemos implican la renuncia por parte de l@s usuari@s al control de sus actividades informáticas por constituir un servicio que aparentemente podría ser fácilmente reemplazado por un programa libre en nuestro computador. En este artículo responderé a la interrogante ponderando cómo se beneficia y cómo se perjudica el usuari@ por el uso de un juez en línea en lugar de un juez local.
Conceptos previos
Para poder ejercer el control efectivo sobre nuestras actividades informáticas, es necesario que los programas que usamos vengan con al menos cuatro libertades:
- La libertad de ejecutar el programa para cualquier propósito
- La libertad de estudiar el código fuente del programa y modificarlo
- La libertad de distribuir copias exactas del programa
- La libertad de distribuir versiones modificadas del programa
Los programas que cumplen con las cuatro libertades se conocen como software libre. En artículos anteriores expuse sobre el tema y expliqué cómo afectan a las libertades de l@s usuari@s. Cuando una de las libertades es insuficiente, es una injusticia porque se le priva al usuari@ de una libertad que merece. Los programas sin las cuatro libertades se conocen como software privativo.
Otra forma de hacer que la gente ceda el control de sus actividades informáticas consiste en los servicios que sustituyen al software, servicios que consisten en programas que se ejecutan en el computador del proveedor del servicio cuando perfectamente l@s usuari@s podrían tener una copia de un programa libre que hiciese la misma tarea. En este caso l@s usuari@s dependen del proveedor del servicio para realizar la actividad, y sólo pueden hacerla de la forma en que el proveedor quiera. El proveedor también puede abusar de su poder para espiar a l@s usuari@s.
Al grano
En primer lugar, hay que dejar claro que los jueces en línea son servicios, por lo que debemos determinar si reemplazan un potencial programa libre que corra en el computador del usuari@. Para que un juez local pudiera hacer su trabajo, debería contar con los casos de prueba y scripts de evaluación de cada problema. Esta información debe ser sacada de internet (es posible generar los casos de prueba localmente, pero en ese caso el generador tendría que ser descargado de internet de todas formas). El caso es distinto al de un traductor o un editor de imágenes, en el que el usuari@ debe proveer todos los datos de entrada. Además, en los concursos es necesario estar conectad@ a internet para que nuestras soluciones puedan ser auditadas y así poder evitar y detectar a la gente que hace trampa.
Además de lo anterior, la delegación de la actividad de juzgar a un servicio puede parecer que reporta ciertas ventajas prácticas, aunque después explicaremos cómo se pueden incorporar en un potencial juez local:
- Se puede acceder desde cualquier computador, pues basta con conectarse al servidor del juez en línea
- Puede tardar menos tiempo en juzgar, dependiendo del poder de procesamiento de nuestro computador
- Menos tiempo en descargar datos del problema, porque la mayoría están en el juez
- Participar en la elaboración de estadísticas y en ciertos concursos, como el Coder del mes de OmegaUp (aunque esto no es necesariamente bueno)
- Almacenar las soluciones y sus veredictos en un servidor remoto.
Por otra parte, el hecho de que los jueces en línea sean servicios genera cierta dependencia que se podría evitar con un juez local:
- Es necesario que los servidores estén funcionando para poder resolver el problema, pues no todos los jueces tienen todos los problemas.
- No siempre se puede saber como funciona, y en los casos en los que sí no se puede cambiar el funcionamiento del programa.
- El proveedor del servicio puede espiar los hábitos de entrenamiento y las soluciones de l@s usuari@s, y a veces esos datos son visibles para todo el mundo. Esto es así porque l@s usuari@s están obligad@s a compartir cierta información que quizá no quieren compartir para poder resolver ciertos problemas, pues es poco práctico crear una cuenta distinta para cada solución que se desee enviar.
Reemplazar los jueces en línea por un juez local traería más independencia a l@s usuari@s, que podrían modificar el juez para tener ventajas prácticas respecto de los jueces en línea, tales como:
- Nuevos lenguajes de programación
- Menor tiempo en juzgar, al evitar las colas de subidas de soluciones
- Tiempo límite diferenciado para lenguajes de programación más lentos, como Python
- Mayor variedad en la naturaleza de los problemas de programación competitiva, en vez de únicamente problemas algorítmicos.
¿La solución?
Lo ideal sería dejar los jueces en línea sólo para los concursos porque requieren que l@s participantes estén conectad@s a internet, y para las otras cosas tener un juez local extensible que se ejecutara en la máquina del o la participante, que incorporara las ventajas prácticas de los jueces en línea a la vez que garantizara la independencia de l@s usuari@s. En particular, tendría las siguientes características:
Repositorios
Podrían crearse repositorios con conjuntos de problemas para que sean descargados por el juez local. La gente podría crear y subir problemas fácilmente con herramientas que automaticen parcialmente el proceso.
Descarga de problemas
El juez tendría facilidades para visualizar y descargar conjuntos de problemas desde repositorios destinados a ello. Los problemas vendrían en un formato especial para que el juez los detectara y procesara fácilmente.
Descarga rápida de casos de prueba
Al abrir un problema se descargaría primero el enunciado y el resto se descargaría mientras el usuari@ esté leyéndolo. El juez tendría la opción de eliminar los datos a petición del usuari@.
Estadísticas
El juez contaría con un generador y visor de estadísticas sobre los problemas resueltos y el rendimiento del usuari@. También podría recomendar problemas a resolver en base a estas estadísticas.
Sincronización con NextCloud
El juez contaría con la opción de enviar los códigos fuente de las soluciones de manera cifrada a un servidor con NextCloud (que es como Google Drive o Dropbox), para ser consultados y publicados según las necesidades de l@s usuari@s. Después de juzgar el problema, l@s usuari@s podrían decidir si quieren enviarlo o no.
Complementos
Actualmente existen servicios web y programas que sirven de suplemento para los jueces en línea más populares como Codeforces, que aportan funcionalidades como recomendaciones personalizadas de problemas a resolver. Lo ideal es que el juez sea fácil de extender con funcionalidades parecidas a la de estos servicios y programas.
Conclusiones
La mayor parte de las funciones de los jueces en línea podrían realizarse de forma local, pero aún así pueden existir algunas que no, por lo que los jueces en línea no son enteramente SaaSS (sería completamente SaaSS si, por ejemplo, el usuario o usuaria tuviese que enviar los checkers y los casos de prueba para los problemas que quisiera resolver, pero solamente se debe enviar el código de la solución). No obstante, un juez local otorgaría a l@s usuari@s un mayor control sobre las evaluaciones y sobre sus datos personales, aunque también es posible que los jueces permitan juzgar soluciones de manera anónima, sin registrarse.
Por tanto, los jueces en línea deberían tener la opción de descargar los enunciados, casos de prueba y soluciones de los problemas en un buen formato para poder entrenar de forma local, y al mismo tiempo habría que desarrollar un juez local extensible fácil y cómodo de usar, de modo que l@s usuari@s que no quieran ceder sus datos sobre su entrenamiento a un servicio o bien deseen usar sus propias herramientas en lugar de un juez online no sufran desventajas al no poder resolver ciertos problemas. Así se mejoraría la comunidad de programación competitiva.