¿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:

  1. La libertad de ejecutar el programa para cualquier propósito
  2. La libertad de estudiar el código fuente del programa y modificarlo
  3. La libertad de distribuir copias exactas del programa
  4. 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:

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:

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:

¿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.