Ich bereite mich auf einen Programmierwettbewerb vor, bei dem wir in C ++ programmieren müssen, und es geht darum, Arbeitscode in kurzer Zeit zu produzieren. Ein Beispiel wäre, ein Makro zu verwenden, um das Minimum von zwei Ints zu erhalten, oder Memsets zu verwenden, um Arrays zu initialisieren (aber mir wurde gesagt, dass Sie keines von beiden hier verwenden sollten ).
Dies führt zu der Frage, welche Art von Codierungstechniken für einen echten Job zur Verfügung stehen.
Antworten:
Der Weg, um Arbeitscode schnell zu produzieren , ist ... langsamer zu werden. Mach sehr kleine Schritte. Stellen Sie sicher, dass Sie wissen, wozu jeder Schritt dient. Stellen Sie sicher, dass Ihr Code nach jedem Schritt kompiliert und ausgeführt wird.
Verwenden Sie am besten Test-Driven Development. Schreiben Sie einen nicht bestandenen Test. Schreiben Sie gerade genug Code, um den Test zu bestehen. Refactor, um den Code sauber zu machen und sicherzustellen, dass er alle Tests noch besteht. Wiederholen.
Wenn Sie dies nicht tun, ist es sehr einfach, einen großen Stapel Code zu schreiben, der nicht funktioniert. Dann werden Sie sehr lange brauchen, um herauszufinden, warum es nicht funktioniert.
quelle
Überprüfen Sie die Standardbibliotheken intensiv, insbesondere die STL-Algorithmen. Dadurch sparen Sie viele Codezeilen und viel Zeit. Der Schlüssel zum Gewinn von Programmierwettbewerben liegt in der Programmierung auf einem möglichst hohen Niveau. In C ++ ohne externe Bibliotheken bedeutet dies STL-Aufrufe anstelle von for-Schleifen.
quelle
Ich nehme regelmäßig an ACM-Wettbewerben teil. Hoffentlich helfen Ihnen einige dieser Tipps:
Wie bereits erwähnt, sollten Sie sich mit der Sprache vertraut machen. In C ++, insbesondere der STL, gibt es sowohl allgemeine Funktionen, die Sie verwenden möchten (binary_search, min, max), als auch robuste Datenstrukturen, um Zeit zu sparen (Stack, um eine direkte Rekursion zu vermeiden) , Warteschlange für BFS, sogar priority_queue für Dijkstra (wenn Sie es so mögen).
Identifizieren Sie die Kategorie des Problems, wenn es sich um mathematische, dynamische Programmierung, Graphentheorie usw. handelt. Fragen Sie sich: Wie vertraut sind Sie mit dieser Art von Problem? Danach sollten Sie entscheiden, in welcher Reihenfolge Sie sie lösen möchten , was mit dem nächsten Punkt Hand in Hand geht ...
Sie möchten das Problem vollständig verstehen, bevor Sie tippen, das richtige Problem lösen . Bei meinen ersten Wettbewerben dachte ich, wenn ich nicht tippen würde, würde ich meine Zeit verschwenden. Ich fand später, dass dies ein Fehler war.
Denken Sie nicht , Kommentare Zeitverschwendung sind, zumindest in „clever“ Code, Sie wollen nicht gehen Debug - line-by-line zu sehen , was falsch gelaufen ist (die eine echte Zeitverschwendung), Wert Klarheit .
Viel Spaß .
quelle
:)
Nun, es hört sich für mich so an, als ob Sie nur C und überhaupt nicht C ++ kennen. Diese Fragen können leicht von jemandem beantwortet werden, der über grundlegende Sprachkenntnisse verfügt.
Verwenden Sie einfach eine Funktion?
std::min
ist bereits vorhanden.std::array<T, N>
initialisiert bereits den Inhalt.Der erste Schritt besteht darin, die von Ihnen verwendete Sprache zu kennen.
quelle
Kennen Sie nicht nur die Sprache, sondern auch Ihre Tools, insbesondere Ihren Editor. Ich programmiere seit über 15 Jahren professionell und habe gesehen, dass großartige Programmierer langsamer wurden, weil die einzigen Editor-Befehle, die sie verwenden, Cursortasten und Strg-x / c / v sind.
Unterstützt Ihr Editor einen einzigen Tastendruck zum Löschen einer Zeile? Eine Zeile erneut einrücken? Zwischen Funktionen / Methoden wechseln? Block auswählen / einfügen? Lesezeichen? Wort für Wort bewegen? Kann der Editor automatisch Klassen / Methoden / Funktionen generieren? Unterstützt es Vorlagen, die Sie im Voraus erstellen können? Schnelles Refactoring? Makroaufnahme?
Wenn Sie Ihren Editor kennen, können Sie die Entwicklungszeit erheblich verkürzen.
quelle
Denk nach bevor du handelst. Es ist besser, vor dem Schreiben einer Klassenimplementierung nachzudenken und zu planen, als nach drei fehlgeschlagenen. Denken Sie auch, während Sie handeln - kleine Schritte vereinfachen den Entwicklungsprozess erheblich.
Schreiben Sie nur den Code, den Sie gerade brauchen. Beginnen Sie also nicht damit, Code mit folgender Mentalität zu schreiben: " Ich benötige diese Funktionen später, damit ich ihre Prototypen auch schreiben kann, während ich dabei bin. " Dinge ändern sich, Pläne ändern sich. Sie werden mit Code enden, der möglicherweise nicht einmal verwendbar ist. Es ist Zeitverschwendung.
Weißt du was du tust? Es gibt nichts Schlimmeres, als sich daran zu erinnern, wie grundlegende Funktionen und Merkmale der Sprache und / oder Bibliothek funktionieren. Machen Sie sich mit den von Ihnen verwendeten Tools vertraut.
quelle
Es gab bereits viele Antworten, dennoch möchte ich meine Meinung hinzufügen.
Um Ihre Codierung zu beschleunigen, werden Sie ein Touch-Typist mit einer solchen Geschwindigkeit, dass Sie sich während der Eingabe sowohl auf die Logik als auch auf den Code konzentrieren können. Es gibt viele Programme, mit denen Sie das Tippen lernen können (z. B. Typing Master, Rapid Typing, KTouch, gTypist)
Ich habe viele erfahrene Programmierer gesehen, die immer noch Zwei-Finger-Typisten sind. Dies führt zu bösem Code ohne Dokumentation und wirklich kryptischem Code mit Makros und abgekürzten Typnamen.
quelle
Die Softwareentwicklung ist eine dieser klassischen 80-20 Aktivitäten - dh die ersten 80% der Arbeit nehmen 20% der Zeit ein und die letzten 20% der Arbeit nehmen 80% der Zeit ein.
Der Schlüssel zur Beschleunigung Ihrer Arbeit im Allgemeinen besteht daher darin, an der Verbesserung Ihrer Leistung zu arbeiten, die 20% des Aufwands ausmacht. Dies ist in der Regel die Debugging-Phase und die Arbeit, um alles zusammenzufügen und nutzbar zu machen.
Sie können dies verbessern, indem Sie im Frühstadium mehr Sorgfalt walten lassen. Planungs- und Entwurfsarbeiten zu Beginn eines Projekts mögen wie Zeitverschwendung erscheinen, wenn Sie versucht sind, in die Hardcore-Programmierung einzutauchen, aber sie können später viel Zeit sparen.
Die Leute werden über spezifische Methoden wie TDD oder BDD sprechen. Diese sind großartig, aber wenn Sie sie jetzt nicht machen, brauchen Sie ein wenig Zeit, um sich daran zu gewöhnen, also sind sie wahrscheinlich nicht etwas, mit dem Sie für einen Programmierwettbewerb anfangen möchten. Aber wenn Sie aufhören zu planen, was Sie tun, bevor Sie eintauchen, und dies tun, wird sich das auszahlen, egal was passiert. Und sie sind sowieso die ersten Schritte in Richtung TDD und BDD. Hier möchten Sie beginnen.
quelle
Verwenden Sie C ++ nicht, wenn es sich um einen tatsächlichen Programmierwettbewerb handelt. Verwenden Sie eine schnelle, interaktive RAD-Skriptsprache. Dies ist etwas, was VB6 absolut beherrscht. Bereiten Sie sich auf Bibliotheken vor, die Sie vorab geschrieben haben. String-Aufteilung, Array-Umkehrung, Suche, Sortierung, rudimentäre Grafik, Konsolensteuerung.
Wenn es für die Arbeit ist, machen Sie genau das Gegenteil. Erfahren Sie, was es gibt, verwenden Sie eine feste Sprache (C ++ ist in Ordnung), kommentieren Sie alles und so weiter. Die beiden Arten von Umgebungen könnten nicht weiter voneinander entfernt sein.
quelle