Heute sprechen wir nicht über Ambitionen und Ideale, noch über konkrete Technologien. Wir sprechen über einige typische Fehler in den Sichtweisen von Programmierern. Die folgenden Themen sind solche, die mir begegnet sind, oder Probleme, auf die meine Freunde gestoßen sind. Das sind alles meine persönlichen Auffassungen, und ich hoffe, sie sind für alle hilfreich.

typical-errors-of-Programmer-view

Über Entwurfsmuster und Entwurfsprinzipien

Manche Leute denken, dass man, sobald man mit Entwurfsmustern und Entwurfsprinzipien vertraut ist, Design gelernt hat. Tatsächlich sind Entwurfsmuster und Entwurfsprinzipien nur Zusammenfassungen und Verdichtungen, die Vorgänger aufgrund von Designpraxis erstellt haben. Design geht letztlich darum, Probleme zu lösen - Lösungen für konkrete Probleme durch ein gewisses Maß an Abstraktion in die Sprache des Programmierers zu transformieren.

Ich habe einige Leute gesehen, die kenntnisreich und belesen sind und dir sogar Theorien mit hochtrabenden Worten erklären können, aber wenn es dann darum geht, tatsächlich Probleme zu lösen, fallen ihnen keine cleveren, eleganten Lösungen ein. Das sind typische Elfenbeinturm-Menschen.

Andererseits gibt es auch einige Leute, die auf diejenigen herabschauen, die Entwurfsmuster lernen. Sie haben das Gefühl, die Geheimnisse des Softwaredesigns bereits gemeistert zu haben, und für sie sind das bedeutungslose Worte. Das kannst du getrost belächeln.

Manchmal werden wir stattdessen durch eine oberflächliche Beherrschung von Entwurfsmustern oder Designprinzipien gefesselt und eingeschränkt. Zum Beispiel bin ich auf so etwas gestoßen: Der entworfene Code eines fleißigen Programmierers verwendete überall Komposition (zum Beispiel wurde ein User-Objekt in Administrator platziert). Ich fragte neugierig, manche Klassen- und Objektbeziehungen passten doch eindeutig zu den Merkmalen der Vererbung, warum wollten sie sie nicht verwenden? Er sagte, Designprinzipien sagen uns, dass wir Komposition gegenüber Vererbung bevorzugen sollen. Ich denke, wenn diese hervorragenden Muster, Prinzipien und Methoden nicht gründlich beherrscht und nicht angemessen entsprechend den tatsächlichen Szenarien angewendet werden können, wäre es dann nicht besser, sie überhaupt nicht zu verstehen?

Über das Erlernen mehrerer Programmiersprachen

Manche Leute finden, dass das Erlernen einer Sprache ausreicht und dass das Erlernen so vieler Sprachen unnötig ist. Tatsächlich bedeutet die Beherrschung einer zusätzlichen geeigneten Computersprache nicht nur, ein weiteres Werkzeug zum Lebensunterhalt zu gewinnen. Wenn eine neue Sprache deine Sicht auf Programmierung und Design stark verändern kann, dann ist sie vielleicht lernenswert.

Zum Beispiel kann die Sprache C rigoroses Denken schulen; dynamische Sprachen zum Beispiel können Programmierern helfen, objektorientierten Code besser zu schreiben; funktionale Sprachen zum Beispiel spielen in der industriellen Produktion und in Berechnungsbereichen eine unersetzliche Rolle.

Natürlich, wie das Sprichwort sagt: „Meisterschaft entsteht durch fokussierte Fachkenntnis.“ Eine tiefgehende Beherrschung einer bestimmten Computersprache (einschließlich der von der Sprache benötigten Laufzeitumgebung sowie der Prinzipien ihrer Kompilierung oder Interpretation) ist sehr notwendig.

Außerdem sehen wir oft Debatten darüber, welche Computersprache besser oder schlechter ist. Letztendlich sind Computersprachen Werkzeuge, und Werkzeuge werden mit der Zeit weiterentwickelt und verändert. Eine bloße Debatte darüber, welche besser oder schlechter ist, hat wenig Bedeutung.

Über Englisch

Warum müssen Chinesen Englisch lernen? Warum müssen Programmierer Englisch lernen? Wenn ich all diese Methodennamen und Variablennamen in Pinyin benenne, funktioniert es genauso gut. Wer hat diese verdammte Regel aufgestellt?

Leider sind viele Lernmaterialien, Fachartikel und technische Ressourcen (insbesondere einige kürzlich veröffentlichte Technologien) auf Englisch. Andererseits sind internationale Standards und die übliche Art und Weise, wie Programmierer kommunizieren, alle auf Englisch. Ich denke, es wäre sicherlich schwer vorstellbar, wie der Quellcode jener berühmten Frameworks und Bibliotheken aussehen würde, wenn Variablennamen in Pinyin geschrieben wären.

Wenn dein Englisch also nicht gut ist (zumindest Lesen und Schreiben), mach keine Ausreden für dich. Englisch ist ein Werkzeug, um andere Werkzeuge zu meistern, es sei denn, du bist fest davon überzeugt, dass Chinesisch bald die weltweit universellste Sprache in der Computerbranche sein wird.

Über Algorithmen

Wie wichtig Algorithmen sind – diese Angelegenheit war schon immer höchst umstritten.

Software dient letztendlich dazu, Probleme zu lösen. Wenn man Algorithmen erwähnt, kommt man nicht umhin, Mathematik zu erwähnen (das ist auch der Grund, warum viele Meister im Softwarebereich beachtliche mathematische Hintergründe haben). Für die Lösung von Problemen lässt es sich einfach in zwei Schritte zusammenfassen:

  • (1) Das tatsächliche Problem in ein vereinfachtes mathematisches Modell abstrahieren
  • (2) Algorithmen verwenden, um dieses mathematische Problem zu lösen

Der Begriff Algorithmus sollte hier weit gefasst sein (der Algorithmus hier bezieht sich nicht nur auf die engen, spezifischen Algorithmen, die man an der Universität lernt). Ein Algorithmus ist eine Methode zur Lösung der oben genannten mathematischen Probleme. Wenn Sie sich in Ihrer Arbeit seiner Existenz nicht bewusst sind, bedeutet das nur, dass das von Ihnen abstrahierte mathematische Modell relativ einfach ist, die Methode zur Lösung dieses Modells ebenfalls einfach ist, oder es fertige Ansätze gibt, die man nachahmen kann, oder ein fertiges Framework Ihnen die Arbeit abgenommen hat, sodass Sie ihm keine Aufmerksamkeit schenken oder sich nicht um es kümmern.

Wenn das, was Sie tun, voller innovativer Bedeutung ist und etwas, das andere noch nie zuvor getan haben, dann können Algorithmen zu dem Faktor werden, der über Ihren Erfolg oder Misserfolg entscheidet.

Im aktuellen Umfeld in China sind Menschen mit Weitblick und reicher Erfahrung leicht zu finden, aber es ist für Unternehmen tatsächlich sehr schwierig, Personen einzustellen, die die oben genannten beiden Fähigkeiten zur Problemlösung besitzen.

Über Erfahrung

Es gibt viele Menschen, die reine Erfahrungstheoretiker sind. Sie glauben, dass in Softwareunternehmen Position, Gehalt und sogar Entscheidungsfähigkeit alle von Erfahrung abhängen. Ein Ingenieur mit 5 Jahren Erfahrung kann sicherlich einen besseren Job finden als ein Ingenieur mit 3 Jahren Erfahrung:

"Ich bin ein langjähriger Mitarbeiter, ich arbeite seit 5 Jahren. Warum bekommt er, der erst 3 Jahre arbeitet, ein so viel höheres Gehalt als ich?!"

Tatsächlich hängen viele Faktoren, einschließlich Domänenakkumulation (das ist geschäftsbezogen, wie der Internetbereich oder der traditionelle Softwarebereich, was keine direkte Beziehung zur sogenannten reinen Technologie hat), Vision, Fähigkeit, Druck standzuhalten, und so weiter, oft weitgehend von der Akkumulation von „Erfahrung“ ab. Dies ist jedoch nicht absolut. Es gibt ein Sprichwort: „Eine Karriere ist zur Hälfte durch Tun und zur Hälfte durch Zusammenfassen aufgebaut.“ Tatsächlich gibt es einige herausragende Programmierer, die gut im Zusammenfassen, gut im Beobachten und Akkumulieren und gut im kontinuierlichen Denken sind. Solche Programmierer sind diejenigen, die über mehr hervorragende Erfahrung verfügen.

Andererseits sind Programmierer dazu da, Probleme zu lösen. Erfahrung kann das Lösen von Problemen nicht ersetzen. Wenn manche Menschen bessere Problemlösungsfähigkeiten haben, warum können sie dann nicht ein großzügigeres Gehalt bekommen?

Quelle: http://www.raychase.net/359