it-swarm.com.de

Wie codieren Sie etwas, wenn Sie keine Ahnung haben, wie es tatsächlich funktioniert?

Ich habe kürzlich C gelernt und möchte ein Projekt starten, um mein Wissen zu festigen. Ich habe mich entschlossen, einen sehr einfachen Texteditor zu erstellen, so etwas wie vim. Das Problem, mit dem ich konfrontiert bin, ist, dass ich wirklich keine Ahnung habe, wie ein Texteditor überhaupt funktioniert, und ich weiß nicht, wonach ich googeln soll, um mehr darüber zu erfahren.

Das Googeln führte zu vims GitHub-Repo, das für mich nutzlos ist, weil die Codebasis riesig ist und der Code mich verwirrt. Ich habe auch Tutorials gefunden, um einen Texteditor in C zu erstellen, der wie vim funktioniert.

Obwohl ich darüber nachgedacht habe, den Tutorials zu folgen, fühlt es sich an, als würde ich schummeln. Wie haben die vim-Entwickler herausgefunden, wie man vim ohne spezielle Tutorials codiert? Oder haben sie mit einfacheren Texteditoren begonnen? Wie haben sie das nur aus Sprachkenntnissen und ihrer Dokumentation herausgefunden?

Was genau brauche ich, um diesen Texteditor zu schreiben, ohne direkt einem Tutorial zu folgen? Ein weiteres Beispiel, an das ich gerne denke, ist: Wie haben Dennis Ritchie und Ken Thompson Unix codiert? Ich habe eine Vorstellung davon, wie das Betriebssystem funktioniert, aber ich habe keine Ahnung, wie ich es in Code einfügen soll. Was fehlt mir? Wie übertrage ich diese Sprachkenntnisse in den tatsächlichen, praktischen Gebrauch?

14
Faithlesss

Wenn dies Ihr erstes Programmierprojekt ist, kann sogar ein einfacher Texteditor zu kompliziert sein. So etwas wie vim oder ein Betriebssystem kommt überhaupt nicht in Frage.

Annäherung an das Problem

Im Allgemeinen ist der Einstieg für die meisten Projekte jedoch ungefähr ähnlich:

  • Sie sammeln Ihre Anforderungen. Was genau wird die Software tun?
  • Sie beginnen mit sehr wenigen Anforderungen und fügen dann Stück für Stück Funktionen hinzu.
  • Sie zerlegen die Probleme, die sich aus Ihren aktuellen Anforderungen ergeben, in Unterprobleme.
  • Sie zerlegen Ihre Unterprobleme so lange, bis Sie etwas haben, das Sie implementieren können.

Beispiel

Nehmen wir das Beispiel des Texteditors.

  • Sie möchten einen Teil einer Textdatei auf dem Bildschirm anzeigen, Zeichen einfügen und entfernen und die aktuelle Version speichern.

  • Beginnen Sie damit, eine Datei zu lesen und ihren Inhalt anzuzeigen.

  • Sie identifizieren (unter anderem) die folgenden Unterprobleme:

    • Woher weiß ich, welcher Dateiname angezeigt werden soll?
    • Wie erhalte ich bei gegebenem Dateinamen den Dateiinhalt?
    • Wie zeige ich den Inhalt einer Datei an?

Sobald Sie einen Punkt erreicht haben, an dem Ihre Anforderung (Datei laden und anzeigen) erfüllt ist, können Sie überlegen, wie nur ein Teil angezeigt werden soll, der zum Bildschirm passt, in Ihrer Datei navigieren usw.

Der nächste Schritt

Mit der Zeit werden Sie feststellen, dass es immer schwieriger wird, geeignete Wege zu finden, um Ihre Probleme zu lösen, wenn Sie sich immer komplexeren Problemen stellen. Sie werden auch feststellen, dass das Ändern von Code im Laufe der Zeit mühsam werden kann.

An diesem Punkt ist es Zeit, einige grundlegende Architektur- und Designkonzepte zu lernen.

17
doubleYou

Das tust du nicht.

Wenn Sie nicht einmal eine vage Vorstellung davon haben, wie etwas zu tun ist, ist dies ein Zeichen dafür, dass es über Ihre derzeitigen Fähigkeiten hinausgeht. Denn wenn Sie keine Ahnung haben, wie Sie überhaupt anfangen sollen, werden Sie sicherlich keine Ahnung haben, was den schwierigsten Teil der App betrifft.

15
Telastyn

Sie müssen entscheiden, wie Sie möchten, dass Ihr Texteditor funktioniert.

Dies ist eine der erschwerendsten und lohnendsten Erfahrungen bei der Entwicklung eigener Projekte von Anfang bis Ende. Niemand sendet Ihnen Anforderungen, aus denen Sie bauen können. Sie müssen Ihre eigenen Anforderungen entwickeln.

Dies bedeutet, dass Sie eine Menge Designarbeit leisten müssen, bevor Sie Ihre erste Codezeile schreiben. Sie müssen entscheiden, wie die Benutzeroberfläche aussieht. Sie müssen entscheiden, welche Funktionen enthalten sein sollen. Beide oben genannten Fragen richten sich nach dem, wozu Sie sich in der Lage fühlen. Wenn Sie an die "ideale" Situation denken (wie die Schnittstelle funktionieren soll), sich aber nicht in der Lage fühlen, sie zu codieren, müssen Sie nach alternativen Ansätzen suchen: Wie könnte ich das erreichen? zu arbeiten? Das hilft Ihnen, sich auf die Codierungsansätze zu konzentrieren, über die Sie mehr erfahren möchten.

Wie andere bereits gesagt haben, ist der Versuch, vim zu kopieren, möglicherweise nicht der beste Ansatz, da es sich um eine große und komplizierte Codebasis handelt. Sie verweigern sich auch die Designarbeit, die meiner bescheidenen Meinung nach dazu beiträgt, Sie als Entwickler abzurunden.

Dies bedeutet nicht, dass Sie die gesamte Anwendung von Anfang bis Ende entwerfen müssen, bevor Sie Ihre erste Codezeile schreiben. Es ist in Ordnung, dass sich die Anforderungen im Laufe der Zeit ändern, wenn Sie mehr erfahren. Es ist in Ordnung, neue Funktionen hinzuzufügen, an die Sie erst denken, wenn Sie Ihre eigene Anwendung testen/verwenden und denken: "Wäre es nicht schön, wenn ...". Es ist in Ordnung, einfach zu beginnen.

2
Randall Stewart

Es ist dumm, einen voll ausgestatteten Texteditor von Grund auf ohne Programmiererfahrung zu schreiben: Sie werden entmutigt sein und ihn aufgeben, bevor Sie viel lernen.

Es kommen mehrere Alternativen in den Sinn:

  • Lesen Sie den Code eines Produkts, mit dem Sie vertraut sind. Wenn Sie vim beherrschen, schauen Sie sich das an und versuchen Sie, etwas Kleines und Isoliertes zu verstehen, wie es die Daten darstellt, oder suchen Sie nach einem einzelnen Zeichen (dem Befehl f).
  • Studieren Sie den Code eines sehr einfachen Programms und arbeiten Sie sich von dort aus nach oben: cat Befehl dann wc dann grep dann sed zum Beispiel.
  • Versuchen Sie, ein Programm zu schreiben, das nur eine einzige Funktion des Editors ausführt. Löschen Sie möglicherweise das zweite Zeichen in jeder Zeile einer Datei (ohne es zurückzuschreiben) oder zeigen Sie nur die Zeilen 50 bis 70 einer Datei an.
1
wallyk