Programación espartana ... ¿Para qué sirve? [cerrado]

8

Nos vemos obligados a utilizar la programación espartana en un proyecto, para consternación de todos. Entonces lo entiendo, hace que los métodos sean realmente cortos y primero maneja los casos simples. ¿Pero realmente vale la pena que el precio del código parezca algo fuera del concurso del Código C ofuscado?

¿Puedes ver que es útil para algo?

EpsilonVector
fuente
3
¿Qué diablos es "programación espartana"? ¿Puede proporcionarnos un enlace para gente ignorante?
DarenW
¿Estás "obligado a usar la programación espartana en un proyecto"? ¿Cómo funciona? Quiero decir, puedo (hasta cierto punto) imaginar que me obligan a usar (un editor / un VSC / ...) en un proyecto, pero ¿cómo puedo obligarme a usar un cierto enfoque?
Torre
16
¡Esto es Esparta!
Dean Harding
2
Si terminas con un código que debe ingresarse en un concurso ofuscado, a pesar de cualquier eufemismo, lo estás haciendo mal.
Tim Post
3
@EpsilonVector: Ah, ¿entonces este es un proyecto escolar, no algo del "mundo real"? Entonces simplemente lo aguantaría y haría el trabajo. Quizás el profesor está tratando de enseñarle que la adhesión ciega a las reglas dogmáticas suele ser perjudicial para su capacidad de trabajar de manera eficiente. O tal vez es sádico ... Conozco a muchos profesores que son ;-)
Dean Harding

Respuestas:

24

Muchos de los inquilinos de la programación espartana me parecen una buena práctica. Por ejemplo, mantener los métodos cortos, minimizar el alcance de las variables, minimizar el número de parámetros para un método, o métodos para una clase, etc. Estas son todas cosas buenas y exactamente por lo que debe esforzarse.

Pero luego hay cosas como minimizar el recuento de caracteres , minimizar el recuento de tokens , ternarización (¿en serio?), Etc., que realmente no tienen sentido.

Creo que mi problema principal se ejemplifica en esta cita :

Pero, la programación espartana es más que un simple estilo de codificación técnica, ya que tiene un único principio subyacente y unificador: el minimalismo y la simplicidad llevados a los extremos.

Cualquier cosa "llevada a los extremos" me suena.

Dean Harding
fuente
Alguien dijo "programación"? : p
CesarGon
la ternarización es interesante, en el primer caso citado en el documento vinculado, es una buena idea, en el segundo ... hmmm, ok, lo dejaría pasar, pero llevar la ternarización a extremos tontos (p. ej. ternar anidados) es, bueno tonto
ocodo
@Slomojo: El verdadero WTF en esa página son las secciones sobre "Ternarización automática" ...
Dean Harding
esa expresión regular es bastante impresionante, siempre y cuando revises cada ternarización, no veo un gran problema con ella. Mientras sigan siendo legibles, estarán bien. - Como dices, son los extremos (o quizás más correctamente, los extremistas) los que serían el problema.
ocodo
+1 para Cualquier cosa "llevada al extremo" me suena la alarma.
Sarawut Positwinyu
4

Ahora eso parecía inquietantemente familiar. Incluso la minimización de las fichas, aunque no se lleva a los extremos. Prefiero usar fname que nombre de archivo, por ejemplo, out para salida, x para la entrada de datos, n para recuentos, l para longitudes, etc. Lx sería una longitud de x, una longitud de y, ... obtienes la deriva.

Además, como a menudo manipulo grandes conjuntos de datos en aplicaciones científicas, uso mucho las facilidades de índice en R. Cuando escribo todos esos índices, el código me duele los ojos. Entonces el índice se convierte en id, o incluso solo i.

Aún más, las estructuras de bucle específicas en R (la familia de aplicación) a menudo exigen una declaración de función dentro de la llamada de aplicación. En esos casos, siempre uso x, y, z, ... Estas funciones suelen ser una o dos líneas, por lo que está claro de dónde viene y no abarrota la pantalla.

No es algo malo, siempre y cuando tenga algunas convenciones de nomenclatura coherentes a través del código completo, y proporcione comentarios para explicar los nombres de variables más oscuros. Al final, hace que el código sea más legible para mí que un largo tren de camellos cojeando sobre la pantalla.

Joris Meys
fuente
2
Estoy de acuerdo en que las variables más cortas a menudo son más fáciles de leer que los nombres de variables extremadamente largos. Como dije en mi respuesta, "Cualquier cosa" llevada al extremo "me suena" y eso va en ambos sentidos. Su objetivo final es maximizar la legibilidad, independientemente de los recuentos de caracteres particulares.
Dean Harding
1
Dices "... hace que el código sea más legible para mí ..."; Puse el énfasis en "para mí". Cuando su código es usado y mantenido por otras docenas de personas, entonces sus variables y lógica deben tener sentido tanto para ellos como para usted . En esos casos, sus convenciones y abreviaturas pueden no ser tan claras. :-)
CesarGon
@Cesargon: Se trata de documentar las convenciones.
Joris Meys
@ Dean, estoy completamente de acuerdo con eso. Sin embargo, noto una tendencia al otro extremo, notablemente en algunos lenguajes de programación específicos. Jave viene a la mente ...
Joris Meys
2

Aquí hay un artículo que analiza los beneficios de la programación espartana.

http://ssdl-wiki.cs.technion.ac.il/wiki/index.php/SendAnEmail_case_study

Demian Kasier
fuente
3
Es una broma, ¿verdad? Minimizando la longitud del nombre de la variable, minimizando el número de variables ... ¡Dios mío, me recuerda mis días de MSX!
CesarGon
No lo estoy aprobando :) pero el artículo lo explica mejor de lo que puedo.
Demian Kasier
Sé que sé.
CesarGon
1
¿No deberían estas cosas mostradas en el artículo pertenecer a cada acción de refactorización? No sabía que esto se llamaba "Programación espartana", pero generalmente trato de preocuparme por estas cosas mientras escribo código (aparte de la longitud del nombre variable, pero de todos modos no he encontrado ese problema en el artículo)
Felix Dombek
Sí, estoy familiarizado con ese enlace, excepto que solía no cargarse cuando intentamos acceder a él hace un tiempo ... OK, así que es menos loco de lo que los miembros de mi equipo hicieron sonar, pero todavía estoy del lado de CaesarGon en este caso ...
EpsilonVector
2

Esta es una acentuación Compacidad de las Cs.

  1. Exactitud
  2. Lo completo
  3. Compacidad

A nadie le importa tu código si no es correcto.

Si el código no es completa (se ocupa de todos los casos), entonces no son insectos.

Si no es compacto, está desperdiciando memoria o ciclos de reloj (aparte de las optimizaciones del compilador)

Tenga en cuenta que el orden aquí es primordial. El programa más compacto rara vez es correcto. P.EJ

void main() {
 return 1; 
}
EnabrenTane
fuente
Puede hacerlo aún más compacto si lo desea. void main(){return 1;}
Aaron Franke
0

Wow, en realidad programo así, no sabía que tenía un nombre. Diría que beneficia la legibilidad, pero más de una manera espacial ... lo que significa que no se perderá en una sopa de código, incluso si tiene pocas líneas que son un poco difíciles de leer.

Sin embargo, diría que cuando te acostumbras a ciertas construcciones, te resulta más fácil en menos tiempo que al principio.

dukeofgaming
fuente
1
Hay una nueva versión del proyecto spartznizer, aquí: github.com/SpartanRefactoring/Spartanizer/wiki/Tutorial
Yossi Gil