Spartanische Programmierung… Wofür ist es gut? [geschlossen]

8

Wir sind gezwungen, spartanische Programmierung für ein Projekt zu verwenden, zu jedermanns Bestürzung. Ich verstehe, es macht die Methoden sehr kurz und behandelt zuerst die einfachen Fälle. Aber ist es wirklich den Preis wert, dass der Code wie etwas aus dem Obfuscated C Code-Wettbewerb aussieht?

Kannst du sehen, dass es für etwas nützlich ist?

EpsilonVector
quelle
3
Was zum Teufel ist "spartanische Programmierung"? Können Sie uns Unwissenden einen Link geben?
DarenW
Sie sind "gezwungen, spartanische Programmierung für ein Projekt zu verwenden"?! Wie funktioniert das? Ich meine, ich kann mir (bis zu einem gewissen Punkt) vorstellen, gezwungen zu sein, (einen Editor / einen VSC / ...) für ein Projekt zu verwenden, aber wie kann man gezwungen werden, einen bestimmten Ansatz zu verwenden?
Turm
16
Das ist Sparta!
Dean Harding
2
Wenn Sie am Ende Code haben, der trotz Euphemismus in einen verschleierten Wettbewerb eingegeben werden sollte, machen Sie es falsch.
Tim Post
3
@EpsilonVector: Ah, das ist also ein Schulprojekt, nicht etwas in der "realen Welt"? Dann würde ich es einfach aufsaugen und die Arbeit machen. Vielleicht versucht der Professor Ihnen beizubringen, dass die blinde Einhaltung dogmatischer Regeln in der Regel Ihre Fähigkeit beeinträchtigt, effizient zu arbeiten. Oder vielleicht ist er nur sadistisch ... Ich kenne viele Professoren, die es sind ;-)
Dean Harding

Antworten:

24

Viele der Mieter der spartanischen Programmierung scheinen mir nur eine gute Praxis zu sein. Beispiel: Halten Sie Methoden kurz, minimieren Sie den Umfang der Variablen, minimieren Sie die Anzahl der Parameter für eine Methode oder Methoden für eine Klasse usw. Dies sind alles gute Dinge und genau das, wonach Sie streben sollten.

Aber dann gibt es Dinge wie das Minimieren der Zeichenanzahl , das Minimieren der Tokenanzahl , die Ternarisierung (ernsthaft?) Usw. , die wirklich keinen Sinn ergeben.

Ich denke, mein Hauptproblem dabei wird durch dieses Zitat veranschaulicht :

Die spartanische Programmierung ist jedoch mehr als nur ein technischer Codierungsstil, da sie ein einziges zugrunde liegendes, einheitliches Prinzip hat - Minimalismus und Einfachheit bis zum Äußersten.

Alles, was "bis zum Äußersten" geht, läutet Alarmglocken für mich.

Dean Harding
quelle
Hat jemand "Programmieren" gesagt? : p
CesarGon
Ternarisierung ist interessant, im ersten Fall, der im verlinkten Artikel zitiert wird, ist es eine gute Idee, im zweiten ... hmmm ok, ich würde das loslassen, aber Ternarisierung auf dumme Extreme zu bringen (z. B. verschachtelte Ternäre) ist gut , dumm.
ocodo
@ Slomojo: Die wahre WTF auf dieser Seite sind die Abschnitte über "Automatische Ternarisierung" ...
Dean Harding
Diese Regex ist ziemlich großartig, solange Sie jede Ternarisierung überprüfen, sehe ich kein großes Problem damit. Solange sie noch lesbar sind, sind sie in Ordnung. - Wie Sie sagen, sind es die Extreme (oder besser gesagt Extremisten), die das Problem darstellen.
ocodo
+1 für alles, was "auf die Spitze getrieben" wird, läutet Alarmglocken für mich.
Sarawut Positwinyu
4

Das kam mir beunruhigend bekannt vor. Sogar die Minimierung der Token, obwohl nicht bis zum Äußersten. Ich verwende lieber fname als filename, zum Beispiel out für die Ausgabe, x für die Dateneingabe, n für die Anzahl, l für die Länge und so weiter. lx wäre die Länge von x, ly die Länge von y, ... Sie erhalten die Drift.

Da ich in wissenschaftlichen Anwendungen häufig große Datenmengen manipuliere, verwende ich die Indexfunktionen in R häufig. Wenn ich all diese Indizes schreibe, schmerzt der Code meine Augen. So wird Index zu ID oder auch nur zu i.

Darüber hinaus erfordern die spezifischen Schleifenstrukturen in R (der Apply-Familie) häufig eine Funktionsdeklaration innerhalb des Apply-Aufrufs. In diesen Fällen verwende ich immer x, y, z, ... Diese Funktionen bestehen oft aus ein oder zwei Zeilen, sodass klar ist, woher sie kommen, und der Bildschirm nicht überladen wird.

Es ist keine schlechte Sache, solange Sie einige Namenskonventionen haben, die im gesamten Code kohärent sind, und Sie Kommentare abgeben, um die dunkeleren Variablennamen zu erklären. Am Ende macht es Code für mich besser lesbar als ein langer Zug von Kamelen, die über den Bildschirm humpeln.

Joris Meys
quelle
2
Ich stimme zu, dass kürzere Variablen oft leichter zu lesen sind als extrem lange Variablennamen. Wie ich in meiner Antwort sagte: "Alles, was" auf die Spitze getrieben "wird, läutet Alarmglocken für mich", und das geht in beide Richtungen. Ihr oberstes Ziel ist es, die Lesbarkeit zu maximieren, unabhängig von der Anzahl der Zeichen.
Dean Harding
1
Sie sagen "..es macht Code für mich lesbarer ..."; Ich lege den Schwerpunkt auf "für mich". Wenn Ihr Code von anderen Dutzend Personen verwendet und verwaltet wird, müssen Ihre Variablen und Ihre Logik sowohl für sie als auch für Sie sinnvoll sein . In diesen Fällen sind Ihre Konventionen und Abkürzungen möglicherweise nicht so klar. :-)
CesarGon
@Cesargon: Es geht darum, die Konventionen zu dokumentieren.
Joris Meys
@ Dean Ich stimme dem vollkommen zu. Ich bemerke jedoch eine Tendenz zum anderen Extrem, insbesondere in einigen spezifischen Programmiersprachen. Jave kommt mir in den Sinn ...
Joris Meys
2

Hier ist ein Artikel, der die Vorteile der spartanischen Programmierung beschreibt

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

Demian Kasier
quelle
3
Es ist ein Witz, oder? Das Minimieren der Länge des Variablennamens, das Minimieren der Anzahl der Variablen ... meine Güte, erinnert mich an meine MSX-Tage!
CesarGon
Ich genehmige es nicht :), aber der Artikel erklärt es besser als ich kann.
Demian Kasier
Ich weiß, ich weiß.
CesarGon
1
Sollten diese im Artikel gezeigten Dinge nicht zu jeder Refactoring-Aktion gehören? Ich wusste nicht, dass dies "Spartan Programming" heißt, aber im Allgemeinen versuche ich, mich um diese Dinge zu kümmern, während ich Code schreibe (abgesehen von der variablen Namenslänge, aber ich habe dieses Problem im Artikel trotzdem nicht gefunden)
Felix Dombek
Ja, ich bin mit diesem Link vertraut, außer dass er früher nicht geladen wurde, als wir vor einiger Zeit versucht haben, darauf zuzugreifen ... OK, es ist weniger verrückt, als meine Teammitglieder es klingen ließen, aber ich bin immer noch auf der Seite von CaesarGon ...
EpsilonVector
2

Dies ist eine Akzentuierung Kompaktheit des Cs.

  1. Richtigkeit
  2. Vollständigkeit
  3. Kompaktheit

Niemand kümmert sich um Ihren Code, wenn er nicht korrekt ist.

Wenn Ihr Code nicht vollständig ist (behandelt jeden Fall), gibt es Fehler.

Wenn es nicht kompakt ist, verschwenden Sie Speicher oder Taktzyklen (abgesehen von Compiler-Optimierungen).

Beachten Sie, dass die Reihenfolge hier von größter Bedeutung ist. Das kompakteste Programm ist selten korrekt. Z.B

void main() {
 return 1; 
}
EnabrenTane
quelle
Sie können das noch kompakter machen, wenn Sie möchten. void main(){return 1;}
Aaron Franke
0

Wow, ich programmiere tatsächlich so, wusste nicht, dass es einen Namen hat. Ich würde sagen, es kommt der Lesbarkeit zugute, aber eher räumlich ... was bedeutet, dass Sie sich nicht in einer Code-Suppe verlieren, selbst wenn Sie nur wenige Zeilen haben, die schwer zu lesen sind.

Ich würde jedoch sagen, wenn Sie sich an bestimmte Konstrukte gewöhnen, finden Sie den Weg in kürzerer Zeit leichter als zu Beginn.

dukeofgaming
quelle
1
Es gibt eine neue Version des Spartznizer-Projekts hier: github.com/SpartanRefactoring/Spartanizer/wiki/Tutorial
Yossi Gil