Escribir un libro de programación: cómo presentar estructuras de directorios

¿Cuál es la forma buena/preferida de presentar los árboles de directorios en los libros de programación?

Mis principales criterios son los siguientes:

  1. Debe ser legible e intuitivo.
  2. No debería ocupar demasiado espacio en la página.
  3. No debería requerir demasiado esfuerzo del autor para crear y actualizar

Los ejemplos de situaciones en las que se requiere presentar el árbol de directorios al lector incluyen describir:

  • ejemplos de proyectos de programación (por ejemplo, el proyecto "Hello World" que utiliza alguna tecnología),
  • convenciones de diseño de proyectos (como la convención Java EE, la convención Maven, etc.),
  • directorios y archivos importantes de alguna aplicación instalada (por ejemplo, diseño de directorios de Tomcat),

Por ahora, los siguientes formularios vienen a mi mente:

  1. Listado de la invocación de Unix/linux ls -Ren el árbol de archivos de interés, por ejemplo
    $ ls  -R /etc/sysconfig/networking
    /etc/sysconfig/networking:
    devices  profiles
    /etc/sysconfig/networking/devices:
    /etc/sysconfig/networking/profiles:
    default
    /etc/sysconfig/networking/profiles/default:
    
  2. Construcción manual de "imágenes" del árbol de directorios a partir de caracteres ASCII como "|" o "-"
    |-myproj
      |-WEB-INF
        |-classes
        |-libs
    
  3. Creación de una captura de pantalla de la vista de árbol del proyecto de algún IDE (por ejemplo, Eclipse)
  4. Describiendo la estructura del archivo textualmente, por ejemplo:

    El directorio del proyecto raíz debe contener el subdirectorio WEB-INF que, a su vez, debe contener los subdirectorios class y libs

  5. ¿Utiliza alguna herramienta de modelado avanzada como Microsoft Visio para generar un diagrama que muestre la estructura del directorio?
A continuación están mis impresiones para las opciones que ya escribí:

Opción 1 : es muy breve y legible y familiar para los programadores avanzados, pero me atrevo a decir que no todos los programadores (especialmente los más jóvenes) están realmente familiarizados con Unix o la programación de línea de comandos en general.

Opción 2 : debería ser legible para la mayoría de los lectores, pero en realidad no parece profesional

Opción 3 : probablemente se verá profesional pero:

  • No todos deben estar familiarizados con el IDE dado (aunque en realidad no debería importar)
  • IDE GUI rápidamente se vuelve obsoleto
  • No es muy fácil de actualizar

Opción 4 : está bien para los casos más simples. Pero para más complejo, puede volverse confuso y detallado. Dicen que "una imagen vale más que mil palabras"...

Opción 5 : es probable que dichos diagramas ocupen mucho espacio y, en la práctica, pueden ser menos legibles que la opción 1 o 2

Entonces mis preguntas para ti son:

  • ¿Conoces más soluciones que las que he mencionado anteriormente? ¿Quizás me estoy perdiendo alguno bueno?
  • ¿Sabes si alguna solución es ampliamente adoptada en los libros de programación profesional? ¿Con cuál te encuentras más a menudo?
  • ¿Qué solución encuentra usted personalmente mejor?
  • ¿Tienes experiencia escribiendo libros de programación? ¿Cómo solucionaste este problema?

PD. No estoy 100% seguro si estoy escribiendo en el foro correcto, pero parece el más adecuado para esta pregunta de todos los foros que encontré en el intercambio de pila.

Estás en el foro correcto, pero eso no significa que tengamos las personas adecuadas para responder a tu pregunta;)
No estoy seguro de a qué público está dirigido su libro. Hardcore c-programmer no necesita ninguna explicación en absoluto. Los programadores que trabajan en un nivel superior (por ejemplo, Java, Mono, etc.) probablemente apreciarán un mayor nivel de abstracción, por lo que elegiría la última opción.

Respuestas (5)

Hago algo similar a su implementación ASCII, pero en lugar de un bloque ASCII, uso listas compactas con viñetas (con sublistas). Los nombres de archivos/directorios todavía tienen el estilo que tendrían en el texto continuo. Además de transmitir la estructura, esto también me brinda un lugar útil para agregar explicaciones donde sea necesario, lo cual es particularmente importante cuando (desde el punto de vista del usuario) la información es nueva. Por ejemplo, mi enfoque le permitiría explicar para qué sirve WEB-INF. (En esa viñeta: " WEB-INF: explicación." La tipografía distingue el nombre de la explicación.)

Las capturas de pantalla suelen ser una mala idea en mi experiencia; deben editarse/actualizarse por separado para que se pudran (como dijo @Piotr), y si el documento no es WYSIWIG sino, por ejemplo, HTML, es posible que el autor del documento no vea la captura de pantalla "en línea" durante la edición. No ver las capturas de pantalla en su (digamos) editor de texto puede provocar discrepancias entre el texto y la captura de pantalla. Además, las capturas de pantalla no son tan accesibles visualmente como el texto; no funcionan con lectores de pantalla (a menos que también escribas todo como texto alternativo) y los lectores no pueden cambiar el estilo de la página según el tamaño de fuente, los colores o el contraste. Esto no significa que nunca use capturas de pantalla u otros gráficos; son una parte importante de muchos documentos. lo hacesignifica no usarlos cuando no son necesarios. En este caso, tiene una alternativa de texto que proporciona la misma información, por lo que debe preferir eso.

Iría con la opción 2. Sin embargo, no necesita construir manualmente la estructura. En su lugar, recomiendo usar una herramienta como Tree , que debería manejar la impresión bonita como se muestra a continuación:

$ tree -d /var
var
|-- backups
|-- cache
|   |-- app-install
|   |-- apt
|   |   `-- archives
|   |       `-- partial
|   |-- apt-xapian-index
|   |   |-- index.1
|   |   `-- index.2
|   |-- cups
|   |   `-- rss
|   |-- debconf
|   |-- dictionaries-common
|   |-- flashplugin-installer
|   |-- fontconfig
|   |-- hald
|   |-- jockey
|   |-- ldconfig [error opening dir]
|   |-- man

El script debería estar disponible como paquete en su distribución. Puedo confirmar que está en Ubuntu.

También sugiero que se comunique con su editor para conocer su opinión. Es muy probable que el editor tenga sus propias pautas de estilo para tales asuntos (teniendo en cuenta el diseño). Si continúa con una representación de texto, le recomiendo que agregue un adhesivo en algún lugar que le recuerde que debe verificar la sangría en el final: los espacios en blanco a menudo se desordenan cuando se presenta el libro.

PD... y su editor también preferirá una representación textual - ahorra tinta;)

Enfócate en tu objetivo principal:

Debe ser legible e intuitivo.

Los otros dos objetivos hacen tu vida más fácil, pero no necesariamente la vida de tus lectores. Tus lectores son lo primero.

Entonces, las capturas de pantalla de una estructura de directorio serían fáciles de comprender. Pero si tienes estrés y tienes que terminar el libro por alguna fecha límite, ¿qué sufrirá más? Sí, revisando las capturas de pantalla. ¿Siguen siendo correctos? ¿Se corresponden con el texto? ¿Es fácil perderse cosas importantes con prisa? Sí. Si fueran fáciles de cambiar, servirían mejor a sus lectores.

Verás, te engañé al principio, pero eso tenía un propósito: enfocar.

"Verse profesional" es un término extraño, muy usado en exceso, rara vez definido. Cuida el aspecto más tarde, o en el medio, pero no al principio, puedes cambiar las cosas.

Entonces, no te gusta

|-myproj
  |-WEB-INF
     |-classes
     |-libs

Entonces hazlo más simple. Qué pasa

-myproj
   -WEB-INF
      -classes
      -libs

Las estructuras de directorio son estructuras jerárquicas. Muestra la jerarquía y estarás bien. No haga demasiado hincapié en mostrar algunas líneas que apunten de padre a hijo, solo use sangría. Eso debería estar bien.

Creo que depende de cuántos subelementos hay. Si tiene dos carpetas en la carpeta raíz, cada una con 10-15 elementos, podría valer la pena mostrar las líneas para que pueda ver más fácilmente qué elementos están en el mismo nivel.

Pruebe tree -den la CLI. Hace más o menos lo que quiere, automáticamente y debería ser fácil de copiar y pegar en un documento.

shelelia@halo:~$ tree -d installs
installs
├── bash_library
├── dropbox
│   ├── DEBIAN
│   ├── DropboxServiceMenu-0.16.1
│   │   └── dropbox-scripts
│   └── kde
├── HP
...

Se ve mejor en un terminal que en esta publicación.

Wasabi ofrece dos enfoques (puedes encontrar ambos aquí )

ya sea con sangría

root/ # entry comments can be inline after a '#'
      # or on their own line, also after a '#'

  readme.md # a child of, 'root/', it's indented
            # under its parent. 

  usage.md  # indented syntax is nice for small projects
            # and short comments.

  src/          # directories MUST be identified with a '/'
    fileOne.txt # files don't need any notation
    fileTwo*    # '*' can identify executables
    fileThree@  # '@' can identify symlinks

o detallado

root/
  this is a comment on 'root'

root/readme.md
  comments are indented under their entry this
  comment is for 'readme.md', a child of 'root/'
  it's specified by the full path

root/usage.md
  the detailed syntax is good for large projects
  and comprehensive commenting

root/src/
  directories MUST be identified with a trailing '/'

root/src/file.txt # some file