Wird das Veröffentlichen von ausführbarem Code anstelle von Pseudocode gemieden?
Nicht das ich weiß, aber dies hängt wahrscheinlich von der spezifischen Subkultur des jeweiligen Feldes ab.
In der Informatik ist es vorzuziehen, Algorithmen unter Verwendung von Pseudocode anstelle von echtem Code zu beschreiben?
Es war (siehe Owens Antwort) und manchmal kann immer noch sein (siehe Überlegungen unten).
Wenn ja, warum?
[...]
Also, was sind die Argumente für Pseudo Code?
Wie viele der anderen Antworten bereits besagen: Abgesehen von naivem ausführbarem Code soll Pseudocode leicht und verstanden werden, ohne den Leser mit Unwichtigkeit zu belästigen (für den vorgestellten Aspekt) Details. Und erreicht diese Ziele normalerweise.
Wie Sie selbst sagen, hat ausführbarer Code auch seine Vorteile. Lassen Sie mich das Problem umgehen, indem Sie behaupten, dass
mit etwas Aufwand Sie beide
nutzen können (und ohne tatsächlich beide bereitzustellen, Pseudocode und separate ausführbarer Code, wie syn1kk vorschlägt.)
Idealer Code in Papieren (und, wenn möglich, anderswo) ist Pseudo -Pseudo-Code: Code, der alle positiven Eigenschaften von Pseudocode aufweist, aber zufällig ausgeführt werden kann (und tatsächlich das tut, was es schien).
Ich bin der festen Überzeugung, dass alle ausreichend gut geschrieben ausgeführt werden können Code ist nicht von Pseudocode zu unterscheiden. : Wenn jemand feststellen kann, dass bestimmter (tatsächlich ausführbarer) Code kein Pseudocode ist, weil er nicht so lesbar und leicht verständlich ist wie Pseudocode, ist dieser ausführbare Code nicht gut strukturiert genug, und sollte überarbeitet werden.
Wie erhalte ich Pseudo-Pseudo-Code?
Wie erhält man ausführbaren Code, der so einfach zu lesen ist wie Pseudo-Code?
Es sind verschiedene Aspekte zu berücksichtigen, und die Erfüllung aller Aspekte ist möglicherweise nicht immer einfach oder machbar oder manchmal sogar nicht möglich. (Dies kann ein triftiger Grund sein, tatsächlichen nicht ausführbaren Pseudocode anstelle von ausführbarem Pseudo-Pseudocode zu verwenden.)
Wählen Sie die richtige Sprache
Welche Sprache am besten geeignet ist, hängt von mehreren ab Dinge:
- Die Problemdomäne
- Ihr Lösungsansatz
- Ihr Publikum
- Die Möglichkeiten, die die Sprache für (Re) bietet Strukturieren Ihres Codes
Beachten Sie, dass für einige Kombinationen davon möglicherweise keine Programmiersprache (noch oder manchmal sogar jemals) vorhanden ist, die dies zulässt Sie schreiben ausreichend gut geschriebenen Code. Aus offensichtlichen praktischen Gründen müssen Sie auch Ihre Beherrschung der jeweiligen Sprache berücksichtigen (wie gut Sie sie anwenden können).
Machen Sie Ihren Code extrem sauber: Refactor, Refactor, Refactor
Wenn Implementierungsdetails vorhanden sind, die die Kernidee des von Ihnen beschriebenen Algorithmus verschleiern, extrahieren Sie diese (z. B. nach Konstanten, Variablen, Methoden oder Funktionen), damit Sie ihr "Wie" (ihre Implementierung) durch ersetzen können ihr "Was" (der Name des neu extrahierten Code-Dings). Wählen Sie gegebenenfalls, ob die extrahierte Implementierung oder Zuordnung in den In-Paper-Code-Auszügen nicht angezeigt werden soll. Seien Sie äußerst vorsichtig bei der Benennung der extrahierten Dinge, damit ihr Zweck (nicht unbedingt ihre Implementierung) aus ihrem Namen und ihrer Anrufsignatur äußerst klar und offensichtlich wird.
Wenn andererseits ein Algorithmus zu verstreut ist Um verschiedene Teile des Codes leicht verständlich zu machen, müssen Sie möglicherweise stattdessen selektiv Inline-Code einfügen.
Streben Sie dabei eine einzelne Abstraktionsebene pro Codeeinheit (z. B. Funktion) oder zumindest die richtigen Abstraktionsebenen an, um den Algorithmus am besten zu zeigen und zu erklären. Wenden Sie das etwas verwandte Prinzip der Einzelverantwortung jedoch nur mit Vorsicht an: Eine Überanwendung (oder eine zu enge Interpretation der "Einzelverantwortung") kann Ihren Algorithmus zerstreuen und dadurch verschleiern. Beachten Sie, dass sich in dieser Hinsicht die richtige Balance für Code zur Darstellung in einem Papier höchstwahrscheinlich von der richtigen Balance für Code in einem (zu) zu wartenden Softwareprodukt unterscheidet.
Bei ausreichender Optimierung Compiler oder Interpreter, keines dieser Refactorings sollte die Leistung zu stark beeinträchtigen. Wenn der Schwerpunkt jedoch auf der Präsentation eines Algorithmus liegt, anstatt ihn in einem Produktionssystem zu implementieren, sollte dies ohnehin nicht allzu wichtig sein.
Machen Sie Ihren Code für die Interpretation offensichtlich
Die korrekte Interpretation Ihres Pseudo-Pseudo-Codes sollte nicht davon abhängen, dass Sie die von Ihnen gewählte Programmiersprache oder deren Version, Variante oder Dialekt kennen. Seien Sie daher vorsichtig, welche Sprachfunktionen Sie verwenden.
Jede Sprachfunktion, die vielen Programmiersprachen gemeinsam ist (dem Publikum bekannt) und die in der ausgewählten Sprache eine ähnliche Syntax wie viele andere Programmiersprachen hat, könnte dies auch tun Sie können auch ein Merkmal eines Pseudocode-Dialekts sein und können daher im Pseudo-Pseudocode verwendet werden, es sei denn, die ausgewählte Programmiersprache hat eine ungewöhnliche und nicht offensichtliche Semantik. Selbst ein nicht so verbreitetes oder sprachspezifisches Merkmal oder ein Merkmal mit einer nicht so verbreiteten Syntax kann problemlos verwendet werden, wenn seine Semantik aus seiner Syntax und seinen Schlüsselwörtern und ihrer Beziehung zur natürlichen Sprache hinreichend offensichtlich ist.
Nicht offensichtliche Sprachmerkmale werden am besten weggelassen, können jedoch in Kombination mit Erklärungen in Codekommentaren oder in der Prosa des Papiers verwendet werden. (Genau wie es für nicht offensichtliche Merkmale eines ausgewählten Pseudocode-Dialekts gelten würde.)
Gleiches gilt für sprachspezifische Redewendungen: Vermeiden oder erklären Sie sie, wenn Sie erwarten müssen, dass sie für Ihr Publikum nicht offensichtlich sind.
Alternative: Pseudocode ausführbar machen
In den beiden obigen Abschnitten wird davon ausgegangen, dass Sie mit der Ausführung von ausführbarem Code beginnen. Natürlich können Sie auch von Pseudocode ausgehen und ihn so ändern, dass er tatsächlich in einer geeigneten Programmiersprache ausgeführt werden kann (und hoffentlich das tut, was er zu tun scheint). Beachten Sie jedoch, dass Sie auf diese Weise möglicherweise einen nicht idiomatischen Code für die Zielsprache erhalten, der möglicherweise nicht Ihren Wünschen entspricht. Natürlich kann Refactoring das normalerweise beheben.
Erklären Sie Ihren Code
Genau wie Sie bestimmte Aspekte Ihres Codes (in Prosa, Codekommentaren oder Beschriftungen) erklären müssten, wenn dies der Fall wäre In Pseudocode dargestellt, müssen Sie dies tun, wenn es in Pseudo-Pseudocode geschrieben ist.
Die Vorteile von Pseudo-Pseudocode
- So lesbar und verständlich wie Pseudocode
- Wenn die verwendete Sprache (inkl. Version, Variante oder Dialekt, falls zutreffend) angegeben ist:
- ist sie ausführbar und verwendbar
- kann sowohl manuell als auch automatisiert getestet werden Tests
- es ist profilierbar
Einige dieser Vorteile kommen Ihnen als Autor zugute, da Sie beispielsweise sicherstellen können, dass (r) Der vorgestellte Algorithmus ist tatsächlich korrekt. Andere kommen Ihrem Publikum zugute, das möglicherweise Ihren Algorithmus bewerten möchte.
Ob diese Vorteile die erhebliche Arbeit wert sind, die erforderlich ist, um Pseudo-Pseudo-Code im Vergleich zu nur Pseudo-Code zu erzielen, oder andererseits nicht ausreichend gut geschrieben, ausführbar Code, liegt an Ihnen zu entscheiden.
Oh, und vergessen wir nicht den moralischen Vorteil: Ob "es amateurhaft aussieht" oder nicht, Sie können sicher sein, dass dies aufgrund all der Fähigkeiten nicht der Fall ist und harte Arbeit, die es erfordert.