¿Qué es lo que hace bueno a un script?

Lo del título.

Lo veo sobre todo en la filosofía de UNIX sintetizada en la famosa frase “hacer una cosa y hacerla bien“, ¿pero qué significa “hacerlo bien” en este contexto?

Me queda claro que un principio es la simplicidad, que entiendo como economía de procesos. También, evidentemente, que el programa haga su trabajo sin errores. ¿Pero hay algo más?

2 Me gusta

a veces es dificil definir esto, por ejemplo puede que se refiera a que haga un buen uso de la memoria, en lenguajes como c, si no liveras la memoria, se queda ahi ocupando espacio. Muchos piensan en esto como un sacrilegio, en otros casos es que un solo algoritmo busca el elemento, ordena, elimina e inserta, en esos caso se prefiere que se use una funcion para cada cado (es lo que mencionas de hacer solo una cosa) realmente es dificil definir que algo sea bueno o no. Pero muchas veces que logre cumplir el objetivo ya se considera bueno, puede que le falte optimizacion pero se puede seguir trabajando en eso, realmente es dificil que de una sola vez implementes algo que use la minina memoria posible, que sea O1 y que ademas sea muy elegante. Yo solo pensar que si la implementacion funciona y se puede entender facil ya es algo bueno

1 me gusta

mientras funcione, sea comodo de usar, y siga la regla de “hacer una cosa y hacerla bien” ya es suficiente en mi opinion para que sea bueno.

Entonces:

  • Efectividad.
  • Economía de recursos (por lo de la memoria).
  • Simplicidad: economía de procesos.
  • Modularidad (?): que ocupe solo una función, pero sea integrable con otros programas.
  • Comodidad de uso.
  • Elegancia, como una extensión de la simplicidad.

Edit:

  • Seguridad: que no tenga vulnerabilidades evidentes o críticas.
  • Mantenibilidad: facilidad con la que un código puede ser comprendido, modificado, corregido o extendido.
4 Me gusta

Para mi la definición de hacerlo bien es simplemente:

Rapido, facil y SEGURO

Cosas como ser eficiente, modular etc creo que son consecuencia de hacer 1 sola cosa (y bien obviamente).

5 Me gusta

Claro, pero la pregunta iba a desarrollar esas ideas porque son demasiado sintéticas. ¿Qué significa que sea seguro? ¿qué hace rápido un programa? Y más en general ¿cómo valoran los programadores que un código es mejor que otro?

Con seguro me refiero a que no tenga vulnerabilidades pendejas, rapido me refiero a que no este inflado con código innecesario que lo haga pesado y lento, y valorar un código mejor que otro es relativamente subjetivo, a nivel general diria que un codigo es mejor si cumple todo lo dicho.

2 Me gusta

Me parece una buenísima pregunta. Que no puede tener sino la respuesta de siempre: «depende».

Depende de muchas cosas, de muchos usos y de muchos contextos. En términos generales, lo que yo consideraría un buen script, debe cumplir las siguientes características:

  • Hacer una cosa y hacerla bien, una de las premisas fundamentales y básicas de la filosofía de Unix. Mejor tener varios scripts modularizados y conectados entre sí mediante pipes, que uno solo que haga todo. Esto significa simplicidad y modularidad.
  • Robustez y seguridad por diseño. El script debe tener control de errores posibles, prevención de éstos y capacidad de marcha atrás.
  • Portabilidad e independencia. Evitar el uso de dependencias, como systemd o programas concretos.
  • El código debe ser limpio, brevemente comentado y estructurado.
  • Eficiencia. Usar herramientas correctas para cada necesidad: awk, sed, cut…
4 Me gusta

Mejor detallado, imposible.

2 Me gusta

Los lenguajes de script son muy diferentes entre sí, cumpen utilidades diversas, y por ende, responden a arquitecturas de diseño variables dependiendo de su finalidad.

Si te refieres a scripts de la shell de UNIX, Bourne Again Shell, puedo referirte las píldoras de conocimiento que he ido adquiriendo a través del uso ocasional:

  • Instala un servidor de lenguaje que te advierta de las incorrecciones de estilo, relacionadas especialmente con la interoperabilidad del script en otras shells minimalistas como Dash.
  • Emplea utilidades estándar, que requieran el mínimo posible de dependencias; y de ser necesarias, informar de ellas al usuario.

Y en cuanto a la optimización del código, esto aplica a todos los lenguajes de script

  • Procura que las estructuras de control de flujo sean óptimas, investiga las connotaciones de la notación Big O.
  • Delega las tareas que requieran gran potencia de cálculo a la entrada/salida de programas estándar, y no realices estas tareas desde la shell directamente.
2 Me gusta

@ssh y @HURSZ, estuve entretenido un montón de horas. Lo de la notación Big O, aunque tuve que pedir ayuda a una IA para entenerlo, fue clave para unir todo lo relacionado con la eficiencia del código, el uso de tiempo/recursos, el overhead, la ventaja de los programas estándar sobre bash para tareas con iteraciones grandes.

DATAZOS

2 Me gusta

Lo cierto es que el contenido de este post de @HURSZ es contenido Premium del foro, para enmarcar y estudiar cada punto.

3 Me gusta