Heim  >  Artikel  >  Die wichtigste Fähigkeit beim Programmieren ist das Denken

Die wichtigste Fähigkeit beim Programmieren ist das Denken

小云云
小云云Original
2017-11-06 17:06:252381Durchsuche

Können Sie verschiedene Codes schreiben, um zu zeigen, dass Sie ein echter Meister sind? Falsch, ein echter Meister verfügt über das wichtigste Programmierdenken und die wichtigste Technologie. Auch wenn alle Technologien, die er jetzt kennt, veraltet sind, kann er neue Technologien immer noch schnell beherrschen und hochwertige Programme schreiben.

Heutige Frameworks und beliebte Sprachen kapseln eine große Anzahl praktischer Datenstrukturen und sogar einige klassische Algorithmen, die uns die Verwendung von .NET zum einfachen Ziehen und Ablegen einer Website trotz Backend-Vorgängen ermöglichen B. Datenbankbindung, Datenverarbeitung und Datenaktualisierung, können etwas eintönig und langweilig sein. Später kam ich mit Linq und thinkPHP (PHPs MVC) in Kontakt, die diese weniger technischen Codes erheblich reduzieren können. Ich finde immer noch, dass es nicht so interessant ist, wie ein kleines Programm oder Spiel selbst zu schreiben.
Ich erinnere mich, dass unser Datenstrukturlehrer einmal sagte: „Algorithmus ist eine Kunst.“ Dann reagierte fast die ganze Klasse mit Verachtung, und ich war damals eines ihrer glorreichen Mitglieder. Daher habe ich sehr wenig über Datenstrukturen gelernt und es sehr bereut.
Das Algorithmenbuch erwähnt Minesweeper, ein klassisches Spiel wie Minesweeper. Einer der Kernalgorithmen besteht darin, zu berechnen, wie viele Minen sich um jedes Gitter befinden.
Ich denke, dass Leute, die seit zwei Jahren programmieren, schnell an einen solchen Algorithmus denken werden: Verwenden Sie ein zweidimensionales Array, um die Informationen jedes Gitters zu speichern (natürlich wurden die Minen sofort zugewiesen) und durchlaufen Sie dann das Array und zählen, wenn eine Mine durchquert wird. Die Anzahl der Minen in den acht umgebenden Richtungen wird im aktuell durchquerten Array-Element gespeichert. Natürlich kann der statistische Prozess als Funktionsaufruf geschrieben werden. Dies ist der einfachste Algorithmus, den man sich vorstellen kann.
Später dachte ich, das wäre etwas verschwenderisch, weil viele Gitter ohne Minen in acht Richtungen nach Minen abgesucht werden mussten. Ich begann darüber nachzudenken, was ich zählen wollte, war die Anzahl der Minen um jedes Gitter herum. Was bestimmt dann die Anzahl der Minen? Natürlich sind es Minen, also habe ich über den zweiten Algorithmus nachgedacht, der das zweidimensionale Array durchläuft, aber nur, wenn eine Mine durchquert wird Acht Richtungen rund um die Mine sind +1, was die Anzahl der Statistiken stark reduziert. Dies sollte als umgekehrtes Denken betrachtet werden.
Wenn Tongli ein Schachprogramm erstellt, stößt er auf den „allgemeinen“ Algorithmus, um festzustellen, ob sich sein General oder Marschall in einer Situation befindet, in der er im nächsten Schritt gefangen genommen wird (die Schachterminologie wird als General bezeichnet). Der sehr einfache Algorithmus besteht natürlich darin, die aktuell vorhandenen und angreifenden Schachfiguren des Gegners zu durchqueren, um zu sehen, ob es im nächsten Schritt möglich ist, seinen General zu töten. Wir können es aber auch andersherum betrachten. Da wir beurteilen, ob sich der General im Zustand der Tötung befindet, beginnen wir direkt bei ihm und beurteilen, ob es einen Gegner, „Bauern“, „Auto“ oder „Kanone“ gibt " innerhalb seines geradlinigen Bereichs und beurteilen Sie dann die Umgebung um uns herum. Glauben Sie, dass es auf der anderen Seite des japanischen Gitters ein „Pferd" gibt? Stellen Sie sich das Problem umgekehrt vor.

Das Gefühl des Programmierens

Das Wichtigste beim Programmieren ist eine Art Gedanke. Die wahre Freude beim Programmieren besteht darin, einen Algorithmus zu entwerfen, der ein Programm lebendig macht Algorithmen sind ihre Seele. Natürlich ist die Erstellung eines brauchbaren Programms eine glückliche Sache. Wenn Sie sich unzufrieden fühlen oder das Programmieren langweilig ist, liegt das daran, dass Sie einige sogenannte Technologien, sogenannte Methoden und Muster, üben, anstatt für sie zu programmieren Der Programmierung halber.
Programmieren ist untrennbar mit Technologie verbunden, genauso wie Kampfsporttraining untrennbar mit Bewegungen verbunden ist.
Hochrangige Kampfkünstler sagen oft, dass das höchste Kung-Fu-Niveau dann erreicht wird, wenn man keine Bewegungen im Kopf hat. Und diese Art von Bewegungslosigkeit bedeutet nicht, dass Sie nichts tun können, sondern dass Sie die Stärken von Hunderten von Denkschulen gesammelt haben und nach der Integration von Tausenden von Bewegungen Ihre Gedanken, Bewegungen und Ihr Körper höchst einheitlich sind. und Sie können sie nach Belieben verwenden. Es ist nicht möglich, diesen Zustand zu erreichen, indem man alle Bewegungen lernt. Nur wenn man wirklich weiß, wie man über den inneren Zusammenhang zwischen den Bewegungen nachdenkt und sie langsam in die eigenen Gedanken integriert, kann man dies erreichen.


Einige alte Programmierer lehren uns oft, dass das Tabu beim Programmieren zu viel, aber nicht genug ist.
Mehr Wissen bedeutet nicht, dass Sie ein Meister sind, und weniger Wissen bedeutet nicht, dass Sie ein Neuling sind. Beim Programmieren liegt der Schwerpunkt auf dem Denken, und dieses Denken bestimmt, wie tief Sie in diese Technologie eintauchen.
Was ist Denken? Es ist die Idee, Probleme zu lösen, die Fähigkeit zur Planung, die Fähigkeit zur Analyse und die Fähigkeit, die Ideen zur Lösung von Problemen schnell zu organisieren. Es kann ein Algorithmus, ein Muster oder ein Framework sein.
Diese Ideen erfordern mehrjährige oder mehrjährige Erfahrung.

Objektorientiertes Denken ist mittlerweile beliebt. Lassen Sie mich kurz auf das oberflächliche Verständnis dieser Idee seit .NET eingehen. Von der großen Anzahl von Funktionsbibliotheken in C bis hin zu der großen Anzahl von Klassenbibliotheken (oder Paketen in Java). ) Jetzt scheint es zu geben, dass man objektorientiert wird, sobald man lernt. Diese Aussage ist etwas weit hergeholt. Egal, ob Sie Java oder C++ lernen, das Wichtigste ist, C++ und Java zu verwenden, um über Probleme nachzudenken objektorientiert, um über Probleme nachzudenken und Objekte als Grundelemente für den Umgang mit Problemen zu verwenden.
Als ich das letzte Mal zu einem Vorstellungsgespräch ging, bat mich der Interviewer, über objektorientierte Vererbung, Polymorphismus und Kapselungsfunktionen zu sprechen.
Ich erzählte ihm von einem einfachen Panzerkampfprogramm, das ich geschrieben hatte und das diese drei Merkmale analysiert.
Vererbung: Dieses Konzept ist sehr einfach zu verstehen. Die Unterklasse erbt alle gemeinsamen Mitglieder der übergeordneten Klasse, z. B. die Basisklasse eines Panzers, die grundlegende Panzereigenschaften und -methoden wie Größe, Gesundheit, Bewegung usw. implementiert. Kollisionsbestimmung usw., die in Zukunft besprochen werden, um einen einzigartigen Tank zu entwerfen, z. B. einen Phantomtank (Red Alert), müssen Sie nur die übergeordnete Klasse erben und eine Phantommethode hinzufügen, um das Problem zu lösen. Die Vorteile der Vererbung liegen ebenfalls auf der Hand. Die meisten für Tanks üblichen Eigenschaften und Methoden werden in die Basisklasse geschrieben. Wenn Sie in Zukunft neue Tanktypen entwerfen möchten, müssen Sie diese nur erben, wodurch der größte Teil des Codes entfällt. Daher ist die Vererbung die einfachste und praktischste Methode.
Polymorphismus: Kann im engeren Sinne als Überladung der Methoden der übergeordneten Klasse verstanden werden, sodass dieselbe Methode über unterschiedliche Parameterlisten verfügt. Ich denke, Polymorphismus ist die Essenz der Objektorientierung. In dieser Klasse gibt es eine Methode, die einen Parameter erfordert Natürlich müssen Sie die Methode move() aufrufen, um diese Methode zu überladen, z. B.: someFun (tank mObj) {….}; }; Es sieht so aus, als hätte ich den Typ des mObj-Parameters geändert, aber sonst wurde nichts geändert. Aber es hat das Problem gelöst. Wenn die Implementierung dieser abnormalen Methode 10.000 Zeilen umfasst, umfasst eine Überladung 20.000 Zeilen. Sollte die Flugzeugklasse in Zukunft auch über eine Move-Methode verfügen, muss diese erneut neu geladen werden. Es ist viel einfacher, Vererbung + Schnittstelle zu verwenden. Sie müssen lediglich eine Schnittstelle namens ImoveObj schreiben und darin eine Bewegungsmethode definieren. Diese Schnittstelle wird von Panzer-, Bullet- und Flugzeugklassen geerbt. Schreiben Sie die Methode als someFun (ImoveObj mObj) {. ….}; später Egal wie viele Klassen hinzugefügt werden, die als mObj-Parameter dienen können, Sie müssen nur die ImoveObj-Schnittstelle erben. (Diejenigen, die das Factory-Muster verwendet haben, sind der Meinung, dass dies zu häufig vorkommt. Tatsächlich ist dies auch das Grundverständnis von Polymorphismus.)
Kapselung: Um eine Klasse zu verwenden, müssen Sie nur wissen, wie sie funktioniert Verwenden Sie die Methoden dieser Klasse. Es ist nicht erforderlich, die spezifische Implementierung dieser Methode zu kennen. Die Schnittstelle ist die Designspezifikation des Entwicklers, und der Entwickler implementiert die Dinge in der Schnittstelle. Schnittstellen sind auch Benutzeranweisungen, die den Benutzern einer Klasse mitteilen, welche Methoden diese Klasse implementiert. Solange sie sie verwenden können, müssen sie deren Implementierung nicht verstehen.
Obwohl dies einfache Grundlagen sind, wird es nicht so schwierig sein, Injektion, Inversion, Mapping usw. zu studieren, wenn Sie diese Dinge erst einmal vollständig verstanden haben.
Neben objektorientiert gibt es auch schnittstellenorientiert, aspektorientiert (Aspekt) usw. Egal welche Ideen zum Programmieren verwendet werden, der Kern ist der Algorithmus. Er ist so klein wie eine Funktion und untrennbar miteinander verbunden aus dem Algorithmus.
Das Wichtigste beim Programmieren ist das Denken, die Technologie bestimmt die Fähigkeiten und das Denken bestimmt die Tiefe der Fähigkeiten.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn