Ich habe mich gefragt, ob jemand von Ihnen die interne Funktionsweise von Windows (Kernel, Interrupts usw.) kennt und ob Sie festgestellt haben, dass Sie dadurch ein besserer Entwickler geworden sind?
Finden Sie, dass je mehr Wissen, desto besser ein gutes Motto als Entwickler ist?
Ich merke, dass ich viele Dinge studiere, mit mehr Verständnis denke, ich werde ein besserer Entwickler sein. Natürlich kommt auch Übung und Erfahrung ins Spiel.
Das ist kein Hirngespinst - absolut (vorausgesetzt, Sie sind ein Entwickler, der hauptsächlich auf der Windows-Plattform arbeitet). Ein funktionierendes Wissen darüber, wie der Automotor arbeitet, wird eine Menge gängiger Programmieraufgaben (Debugging, Performance-Arbeit usw.) viel einfacher machen.
Windows Internals ist die Standardreferenz.
Ich glaube, es ist wertvoll zu verstehen, wie die Dinge darunter funktionieren. CLR / .NET bis C ++, nativ zu ASM, ASM zu CPU Architektur, Aufbau von Registern und Ops von logischen Gates, logische Gates von MOSFETs, Transistoren aus der Quantenphysik und letztere aus entsprechenden mathematischen Apparaturen (Gruppentheorie etc.).
Tief zu verstehen lässt dich nicht nur anders denken, sondern fühlst dich auch anders - als ob du die Kontrolle über die Dinge hast und auf den Schultern von Riesen stehst.
Ich denke nicht, dass man spezielle oder geheime Kenntnisse von Interna benötigt, wie diejenigen, die auf Mitglieder des Windows-Teams oder solche mit Quellzugriff ausgedehnt werden können, aber ich behaupte absolut, dass das Verständnis von Interna Ihnen hilft, ein besserer Entwickler zu werden.
Nehmen Sie Threading zum Beispiel, wenn Sie eine Anwendung erstellen möchten, die Threading nur in moderater Weise verwendet - das Verständnis, wie Windows funktioniert, wie das Threading funktioniert und wie Speicherprozesse funktionieren, sind allesamt Schlüssel, um gute Arbeit leisten zu können mit diesem Code.
Ich stimme einem Punkt mit Ihrem Edikt zu, aber ich stimme nicht zu, dass Erfahrung / Praxis / Wissen sich gegenseitig ausschließen. Dieses Netz von Erfahrungen ist das Wissen, das Sie aus dieser Erfahrung gewonnen haben. Es gibt auch eine Weisheits-Komponente, die man erleben und praktizieren kann, aber das sind normalerweise nicht greifbare situative Elemente, die man in der Zukunft anwendet, um Fehler zu vermeiden. Bottom-Line-Wissen ist ein Niederschlag der Erfahrung.
Denken Sie so darüber nach, wie viele Menschen Sie mit mehr als 30 Jahren IT-Erfahrung kennen, denken Sie an sie und nehmen Sie die beiden ersten Plätze ein. Gehen Sie jetzt in diese Speicherbank und denken Sie an die Leute, die Sie in der Industrie kennen, die super klug sind, die so viel über so viele Dinge wissen und die ersten beiden auswählen. Sie haben jetzt Ihre letzten 4 - wenn Sie einen auswählen mussten, um ein Projekt mit wem zu beginnen? Ausnahmslos wählen wir den Superschwarzen aus.
Mehr Wissen ist immer besser und Wissen auf vielen Ebenen ist viel wertvoller als nur zu wissen, auf welcher Ebene der Abstraktion Sie arbeiten.
Eine gute Faustregel ist, dass Sie die Ebene unter der Ebene, in der Sie arbeiten, gut kennen sollten. Wenn Sie zum Beispiel viel .NET-Code schreiben, sollten Sie wissen, wie die CLR funktioniert. Wenn Sie viele Web-Apps schreiben, sollten Sie HTTP verstehen. Wenn Sie Code schreiben, der HTTP direkt verwendet, sollten Sie TCP / IP verstehen. Wenn Sie einen TCP / IP-Stack implementieren, müssen Sie verstehen, wie Ethernet funktioniert.
Die Kenntnis der Windows-Interna ist sehr hilfreich, wenn Sie nativen Win32-Code schreiben oder wenn die Leistungsprobleme des Betriebssystems für Ihre Arbeit entscheidend sind. Auf höheren Abstraktionsebenen mag es weniger hilfreich sein, aber es tut nie weh.
Ja, Windows-Interna zu verstehen hat mir geholfen, ein besserer Programmierer zu werden. Es lehrte auch viele schlechte Praktiken, schlechte Ideen und schlechte Design-Konzepte.
Ich empfehle dringend, OS X- oder Linux-Interna als Alternative zu studieren. Es wird weniger Zeit brauchen, mehr Sinn machen und viel produktiver sein.
Code lesen Lesen Sie viel Code. Lesen Sie viel guten Code. jQuery, Django, AIR-Framework-Quelle, Linux-Kernel, Compiler.
Versuchen Sie, Programmiersprachen zu lernen, die Ihnen neue Ansätze wie Lisp, Ruby, Python oder Javascript vorstellen. OOP ist gut, aber .net und Java scheinen den Ansatz der Gehirnwäsche zu übernehmen und es auf irgendeine religiöse Ebene zu heben, anstatt nur ein gutes Werkzeug in deinem Werkzeugkasten zu sein.
Wenn Sie den Code, den Sie gerade lesen, nicht verstehen, bedeutet das wahrscheinlich, dass Sie auf dem richtigen Weg sind und neue Techniken lernen.
Ich würde vorschlagen, einen Mac zu bekommen, nur weil Sie sich wünschen, Ihre UIs einfacher und einfacher zu machen. Es ist wirklich wichtig, eine gute Umgebung zu haben, wenn Sie ein großartiger Programmierer werden wollen. Umgib dich mit Ingenieuren, die besser sind als du selbst (wenn du kannst), arbeite mit Frameworks und Sprachen, die den "Engineer" -Ansatz gegenüber dem "Experimentator" -Ansatz verwenden, und ... verwende ein Betriebssystem, das Code enthält, der besser ist als deines.
Ich würde auch das Buch " Coders at Work " empfehlen.
Es kommt darauf an. Viele Programmierer, die die Interna eines Systems verstehen, beginnen, optimierten Code zu schreiben, um dieses Wissen zu nutzen. Dies hat drei sehr ernste Nebenwirkungen:
1.) Für andere ohne dieses Wissen ist es schwieriger, den Code zu erweitern oder zu unterstützen.
2.) Systeminterna können sich ohne vorherige Ankündigung ändern, während Schnittstellen normalerweise versioniert und Änderungen öffentlich diskutiert werden.
3.) Schnittstellen sind im Allgemeinen über Plattformrevisionen und Hardware konsistent, Interna haben diese Konsistenz nicht.
Kurz gesagt, es gibt eine Menge kaputten, nicht unterstützbaren Code, der verbreitet ist, weil er auf einem internen Prozess beruht, den der Anbieter ohne vorherige Ankündigung geändert hat.
Tags und Links windows