En el post anterior mencione que "ocultar los archivos" era para mi un error de diseño.
Voy a aclarar eso un poco más.
Ocultar la complejidad del sistema esta bien, por ejemplo:
Ejecuto múltiples programas y no me interesa como funciona internamente el sistema operativo (SO) para permitirme hacer eso.
La misma idea aplica a los archivos:
Al usuario promedio no le interesa si el SO tiene que guardar cierta información en el disco para su funcionamiento interno. De hecho, esta bien que el sistema no me permita borrar fácilmente esa información (y evitarme así "hacer cagadas").
¿Entonces cual es el problema?
El problema es que no hay una relación entre el modelo conceptual expuesto al usuario y el modelo del sistema.
Voy a explicar esta frase con un ejemplo, supongamos una carpeta con un archivo:
Ahora marcamos"archivo.txt" como oculto y de sistema:
Pero en el Explorer no hay ningún indicador de que la carpeta contiene un archivo oculto:
A ver... y con la linea de comandos?
Tampoco. Y en las propiedades de la carpeta?
Ahora si. Y si lo abro con el Notepad? (no voy a poner la pantalla de eso, pero si hacen la prueba van a ver que pueden abrir y modificar el archivo normalmente).
El modelo del sistema es el siguiente:
No hay ninguna restricción especial sobre los archivos marcados como ocultos y de sistema.
Son los programas quienes tienen que interpretar estos atributos según sea necesario.
Por ejemplo quienes le dan un tratamiento especial a estos archivos son las herramientas de consola del sistema operativo y el Explorer, principalmente para evitar que usuarios inexpertos borren estos archivos accidentalmente.
Sin embargo la gran mayoría de los programas simplemente ignora estos atributos y no hay ninguna restricción de permiso sobre los mismos.
Pero el modelo expuesto al usuario es:
En el explorer y en la consola ejecutando "dir" veo todos los archivos que hay en mi maquina. Si la carpeta o el pendrive no tienen archivos entonces están vacíos.
Mas allá de la no visibilidad de los archivos, esperaría también que un archivo de sistema no pueda ser modificado directamente por cualquier herramienta.
Solución 1: Visibilidad
La solución más sencilla es aportar visibilidad al usuario. No es necesario mostrar los archivos para eso, simplemente indicar que hay archivos ocultos:
Y si queremos llevar la visibilidad un paso mas, es decir que no existan archivos ocultos, todavía tenemos el problema de evitar que el usuario "meta la pata"...
Solución 2: Visibilidad + Undo
Un buen diseño tiene que permitir que el usuario se equivoque (este articulo de la gente de Humanized explica eso con algunos ejemplos).
Si el usuario borra/modifica un archivo de sistema debería poder volver atrás fácilmente.
Lamentablemente en un SO esa vuelta atrás no es sencilla: y si borro un archivo que hace que el sistema no arranque más?
Ok, no hay forma de hacer un undo sencillo para todos los casos, lo que nos lleva a otra solución...
Solución 3: Visibilidad + Restricciones
Otra forma de resolver el problema es simplemente haciendo que el usuario no tenga permiso para modificar archivos de sistema.
Si el usuario quiere borrar/modificar un archivo de sistema tiene que cambiar a un usuario con más permisos y por lo tanto tiene un indicativo muy fuerte por parte del sistema de: "mas vale que sepas lo que estas haciendo".
En el caso particular de Windows esto no siempre es posible: en el sistema de archivos FAT32 el único "permiso" es el de marcar un archivo como solo lectura.
Lo que nos lleva a otro tipo de restricción...
Solución 4: Visibilidad + Standards (o mejor dicho Restricciones "culturales")
Para darle al usuario la información de: "no deberías tocar esto al menos que sepas lo que estas haciendo", también se puede usar una "restricción" cultural. Es decir estandarizar donde estan los archivos de sistema.
Por ejemplo a nadie se le ocurre borrar la carpeta C:\WINDOWS o C:\Archivos de Programas.
Pero Windows no sigue siempre estos "standards", por ejemplo hay archivos de sistema en el directorio raíz y que salvo por los atributos de oculto y de sistema no se diferencian del resto.
El atributo de sistema es una restricción "cultural", sin embargo tiene algunos problemas de visibilidad:
- Si un archivo es marcado como de sistema, se muestra de la misma forma en el Explorer.
- No hay forma de diferenciar un archivo oculto de sistema de uno que solo tiene el atributo de oculto.
Solución 5: La combinación de las anteriores
Salvo por la solución de facilitar el Undo, Unix hace una combinación de las soluciones anteriores:
- Los archivos de sistema solo pueden ser modificados por un usuario con permiso de root
- "Culturalmente" los archivos que son de usuarios están en el directorio "/home". El resto de las carpetas tiene un significado especial.
En Unix también hay configuraciones que se guardan en archivos "ocultos". Pero acá el "modelo conceptual del sistema" es presentado de una forma más directa al usuario: se sigue la convención que los archivos que empiezan con punto no se muestran por default en las listas de archivos. Sin embargo ninguna herramienta trata a estos archivos de forma especial (como sucede con los archivos de sistema y las herramientas de la linea de comandos en Windows).
Conclusiones
- El modelo expuesto al usuario debe ser coherente con el modelo del sistema
- No es necesario exponer toda la complejidad al usuario mientras el usuario pueda construirse fácilmente una idea de lo que esta pasando.
Algunas herramientas que uno tiene para lograr eso: visibilidad, restricciones y "standards".