Ich meine, es gibt wirklich nützliche Bibliotheken, die Probleme lösen können, wenn Sie nicht weiterkommen und nicht wissen, wie Sie dieses oder jenes mit Ihren Kenntnissen der verwendeten Programmiersprache lösen können ... Zum Beispiel Boost für C ++ oder JQuery für JavaScript oder Spring für Java ... Sie lösen Probleme in Sekunden und es ist Ihnen egal, wie sie es gemacht haben (obwohl sie in derselben Sprache geschrieben sind, in der Sie programmieren) ... Ich frage mich also, ob ich allein bin, wenn ich Libs benutze, ohne es zu sein in der Lage, Lösungen für meine Probleme von Grund auf neu zu schreiben, oder ist es üblich?
16
Antworten:
Ist es in Ordnung, nicht zu verstehen, wie man die Probleme selbst löst und stattdessen Bibliotheken verwendet?
Im Allgemeinen ist es nicht.
Eine Bibliothek kann Ihnen die (harte!) Arbeit ersparen, ein Problem zu lösen, die Lösung zu debuggen und sie dann zu warten. Aber wenn Sie es verwenden möchten, sollten Sie besser verstehen, wie es funktioniert - warum die Lösung das Problem tatsächlich löst. Wenn Sie als Mechaniker arbeiten, müssen Sie nicht wissen, wie man Autos, Motoren und Roboter erfindet, die Automotoren bauen. Sie sollten jedoch besser verstehen, wie die Teile funktionieren, was sie alle tun und wie sie funktionieren zusammenpassen!
Dies ist der Grund, warum viele Leute sehr spezialisiert werden - oft nur lernen, wie man mit einer einzigen Sprache, einer einzigen Plattform, einem einzigen Framework und einer ganzen Reihe von Bibliotheken arbeitet.
Davon abgesehen haben Sie nur so viel Zeit zum Lernen. Manchmal muss man Abkürzungen nehmen - nehmen Sie sie, aber wissen Sie, dass es sich um Abkürzungen handelt. Vielleicht haben Sie nur genug über eine Bibliothek gelesen, um zu wissen, dass Sie es herausfinden könnten, wenn Sie die Zeit dazu hätten. Oder vielleicht finden Sie nur die beiden Funktionen heraus, die Sie tatsächlich aufrufen müssen, und nur genug, um die Anrufe richtig zu tätigen. Das ist eine Abkürzung, die einen Preis hat - normalerweise später, wenn jemand (vielleicht ein älterer und erfahrener Mensch) den Code reparieren muss.
quelle
Einmal fragte computerworld.com.au Bjarne Stroustrup: "Haben Sie einen Rat für aufstrebende Programmierer?"
Und er antwortete"Kennen Sie die Grundlagen der Informatik: Algorithmen, Maschinenarchitekturen, Datenstrukturen usw. Kopieren Sie Techniken nicht einfach blindlings von Anwendung zu Anwendung. Wissen Sie, was Sie tun, dass es funktioniert und warum es funktioniert. Denken Sie nicht Wenn Sie wissen, wie die Branche in fünf Jahren aussehen wird oder was Sie dann tun, sollten Sie ein Portfolio allgemeiner und nützlicher Kenntnisse zusammenstellen. Versuchen Sie, besseren Code mit mehr Prinzipien zu schreiben Geringfügigere "Hacking" -Aktivität (Programmieren ist auch ein Handwerk, aber nicht nur ein Handwerk.) Lernen Sie von den Klassikern auf dem Gebiet und den besser entwickelten Lehrbüchern, und geben Sie sich nicht mit dem leicht verdaulichen "How to" zufrieden. Anleitungen und Online-Dokumentation - es ist flach. "
Hoffe, es wird Ihre Zweifel über das klären, was für eine erforderlich istEchter Programmierer und was für jeden notwendig ist, um einer zu sein.
quelle
Ja - und wir alle machen es!
Nehmen wir zum Beispiel einen sehr einfachen Fehler, den ich in einem Mac-bezogenen Grafikcode behoben habe. Der Code um den Fehler herum umfasste mehrere Schritte:
Da ist eine Menge los! Hier sind ein paar Dinge:
Verstehen Sie alle Details, wie all diese Dinge tatsächlich implementiert werden? Ich weiß es nicht! Ich bezweifle, dass es sehr viele Menschen auf dem Planeten gibt, die das tun - vielleicht sogar keine. Also mache ich mir einfach keine Sorgen.
Aber es ist gut, neugierig zu sein und zumindest ein wenig über die Bibliotheken und Werkzeuge zu lernen, die Sie verwenden. Als ich anfing zu programmieren, wusste ich, dass Compiler und Betriebssysteme keine Magie sein konnten, aber sie schienen mir auf jeden Fall so zu sein. Durch meine Neugier auf diese Dinge habe ich eine Menge gelernt und hatte bisher eine großartige Karriere.
quelle
Ich finde, der Hauptgrund, warum wir Bibliotheken verwenden, ist, das Rad nicht ständig neu zu erfinden und die Probleme zu abstrahieren, die sie zu lösen beabsichtigen. Sie könnten versuchen, die Probleme selbst zu lösen, aber das würde länger dauern.
Ich bin jedoch der Meinung, dass wir auch wissen oder raten müssen, wie das Problem von der Bibliothek gelöst wird. Dies wird in der Regel in der Benutzerdokumentation der Bibliothek dokumentiert. Mit Open Source-Software können Sie den Code jederzeit selbst anzeigen.
Normalerweise lösen wir Probleme auch, indem wir die schwierigen Teile abstrahieren. Warum ist das nicht in Ordnung?
quelle
Die Bibliotheken bieten Lösungen für häufig auftretende Probleme. Sie müssen entscheiden, ob sie das bestimmte Problem lösen, das Sie lösen. Sie sind KEIN Ersatz dafür, dass Sie nicht wissen, wie Sie ein Problem lösen sollen. Angenommen, Ihre Anwendung erfordert eine Hash-Tabelle. Sie sollten über ausreichende Kenntnisse verfügen, um zu verstehen, welches Problem eine Hash-Tabelle löst. Sie sollten in der Lage sein, die Leistung der von Ihnen verwendeten Bibliothek zu bewerten, um zu entscheiden, ob sie in Ihrer Anwendung funktioniert oder nicht. Ich glaube, dass die Verwendung einer Bibliothek zur Abdeckung unzureichender technischer Kenntnisse nicht der richtige Anwendungsfall ist. Die Entscheidung für die Verwendung einer Bibliothek sollte sich darauf konzentrieren, ob die Verwendung einer Bibliothek die Entwicklung beschleunigt und eine getestete und zuverlässige Lösung bietet. Die Entscheidung, eine Bibliothek zu verwenden, sollte sich nicht auf die Unfähigkeit des Programmierers drehen, ein bestimmtes Problem zu lösen.
quelle
Bis zu dir, wirklich .
Je besser Sie die Tools verstehen, mit denen Sie arbeiten, desto besser können Sie sie nutzen.
Ich verwende zum Beispiel selten jQuery, aber wenn ich muss, weiß ich, was ich daraus machen kann und wie ich es mit anderen Frameworks wie Mootools koexistieren kann.
In Kürze werde ich mit UDK in Spielev einsteigen und ich bin mir sicher, je besser ich es verstehe, desto besser kann ich es meinem bösen Willen anpassen, aber ich könnte auch einfach den einfachen Tutorials folgen. Ich wähle die erste, nur ein wenig mehr Zeit und Gehirnzyklen und ich werde bessere und einfachere Ergebnisse erzielen .
quelle
Es ist wichtig, Ihr Reich und Ihren Teil des Prozesses zu kennen.
Angenommen, Sie verwenden eine Bildverarbeitungsbibliothek. Müssen Sie wirklich alles über Gaußsche Unschärfen, Transformationen und Farbräume wissen? Nein, aber Sie müssen wissen, warum Sie die Bibliothek überhaupt benutzen. Oder die Sortierfunktion eines Frameworks. Müssen Sie den tatsächlich verwendeten Sortieralgorithmus kennen? In den meisten Fällen nein. Sie müssen jedoch wissen, warum Sie die Daten sortiert benötigen.
Wenn Sie andererseits einen Compiler schreiben, wissen Sie vermutlich besser, wie ein Compiler funktioniert, da dies Ihr Teil des Prozesses ist.
Bestimmte Frameworks wie jQuery werden häufig abstrahiert. Haben Sie müssen wissen , wie genau sie arbeiten? Nein , aber mit einem starken, grundlegenden Verständnis von , was die Bibliothek wird Du tut sehr vorteilhaft sein , wie Sie Code schreiben , weil Sie besser verstehen , warum das Framework die Art und Weise hergestellt wird , ist es, und in der Lage , es zu seinem vollen Potential zu nutzen .
quelle
Aus meiner Erfahrung: Da Sie die Bibliotheksabhängigkeit nicht beseitigen können, sollten Sie und Ihr Team genug wissen, um das Problem zu lösen.
Als Programmierer haben wir wenig Zeit, deshalb müssen wir den wählen, der die höchste Priorität hat. Das Problem muss so schnell und sanft wie möglich gelöst werden. Nur aus diesem Grund ist es etwas überflüssig, "alles über Dinge zu lernen".
Was ich hier hinzufügen möchte, ist "Abhängigkeit". Als Gemeinschaft sind wir alle auf andere angewiesen. Wir stehen auf den Riesen, um unsere Anwendung zu erstellen: Java, .NET, API ... Und wir vertrauen den Riesen in Bezug auf ihre Arbeit; weil es für so viele Menschen funktioniert. Wenn Sie ein Problem mit dem Framework oder der API haben, besteht eine gute Chance, dass andere Probleme damit haben, und es gibt eine Lösung / Abhilfe.
Das einzige Problem hier: Vielleicht sind die Riesen irgendwo in einem eingeschränkten Kriterium zusammengebrochen. Zum Beispiel wird Flash in einigen Betriebssystemen nicht unterstützt, und es gibt viele Dinge, die wir ohne es nicht tun könnten. Diese Möglichkeit ist mehr als null, aber in diesem Fall haben wir kleine Dinge, die wir tun können. Nur in diesen Fällen erweist sich das Wissen darüber, was sich hinter den Hauben verbirgt, als nützlich, da es darauf hinweist, wo das Problem tatsächlich liegt und möglicherweise eine große Umgehungsmöglichkeit schafft. Aber ich bin mir nicht sicher, ob sich die Zeit, die wir investieren, wirklich lohnt.
Um diese Möglichkeit zu bewältigen, gibt es meiner Meinung nach eine Lösung: Weil die meisten Programmierer die "Oberflächenbearbeitung" einer Bibliothek leicht nachvollziehen können und wir nur manchmal wirklich jemanden brauchen, der sehr gut versteht: Teilen Sie das Team, um das zu tun. Der Versuch, ein Team zusammenzustellen, das jeweils über 1,2 nützliche Bibliotheken / Tools / "Fähigkeiten" informiert ist : Man hat gute Erfahrungen mit jQuery, man hat sich auf Datenbanken spezialisiert, ... Dies trägt wesentlich zur Risikominimierung bei.
quelle
Ein weiterer Gesichtspunkt ist die Sicherheit. Wenn Sie eine Bibliothek verwenden, von der Sie das genaue Innenleben nicht kennen, dann machen Sie Annahmen darüber, was genau passiert. Jede fehlgeschlagene Annahme kann einen Angriffsvektor für einen böswilligen Angreifer eröffnen.
Wenn Sie einen Quicksort anrufen, sollten Sie sich über das Worst-Case-Verhalten im Klaren sein. Andernfalls kann ein Angreifer möglicherweise Worst-Case-Daten einspeisen und einen DoS ausführen.
Wenn Sie eine Komprimierungsbibliothek aufrufen, sollten Sie beachten, dass es Daten geben muss, die auf mehr Bytes als das Original "komprimiert" werden, wenn einige Daten auf weniger Bytes komprimiert werden. Wenn Sie also davon ausgehen, dass der Ausgabepuffer nur die Größe der Eingabedaten benötigt, weil er [auf weniger Bytes] komprimiert, dann wartet ein Pufferüberlauf auf Sie.
Sie sollten genug Grundlagen über die Dinge wissen, die Sie tun werden, um Ihre Vermutungen als wahr erweisen zu können. Andernfalls sollte die Bibliothek dies ausdrücklich berücksichtigen, z. B. eine Ausnahme auslösen, wenn der bereitgestellte Ausgabepuffer nicht groß genug ist.
quelle
Es ist in Ordnung, nicht alles zu verstehen, was Sie verwenden, solange Sie sicher sind, dass es funktioniert. Sobald Sie von einem Fehler in der Bibliothek gebissen werden, haben Sie Zeit zu sehen, wie es funktioniert, warum es funktioniert und warum es nicht funktioniert. Natürlich sind Sie immer willkommen und ermutigt, unter die Haube zu schauen, auch wenn Sie nicht müssen.
Eine der Schwierigkeiten beim Programmieren besteht darin, die Versuchung zu überwinden, alle Probleme selbst zu lösen.
quelle
Es ist in Ordnung, aber es ist gefährlich. Als allgemeine Praxis sollte man wissen, was er entwickelt hat.
quelle
Irgendwie...
Es ist in Ordnung, solange Sie einen Überblick darüber haben, was die Bibliothek oder das Framework zu tun versucht. Was die inneren Teile angeht und was nicht, nein. Gehen Sie pragmatisch vor. Es funktioniert, es hat getan, was ich will, okay.
Es geht darum, sich nicht mit kleinen Details herumzuschlagen und einfach Ihre verdammte Idee schon umzusetzen.
Ich denke, der Punkt ist, dass Sie nicht alles wissen werden. Im Ernst, Sie haben so wenig Zeit, alles zu untersuchen, weil es Sie von Ihrem Hauptziel ablenkt, diese Idee von Ihnen zu kreieren. Vielleicht können Sie sich am Wochenende nach und nach Zeit nehmen, um ein Kapitel über das Thema zu lesen.
Aber versuchen Sie nicht, alles herauszufinden, es sei denn, Sie haben viel Freizeit ... Betrachten Sie es so. Der Grund für die Programmierung von Sprachen ist, dass wir keinen Assembler-Code ausführen. Der Grund für den Assembler-Code ist, dass wir keine Einsen und Nullen ausführen. Ich denke nicht, dass Sie alle Details des Mechanismus dahinter kennen müssen, sondern nur den allgemeinen Kern. Wie ein Müllsammler weiß ich, dass es mit meinen Zeigern und meinem Gedächtnis zu tun hat. Es ist mir egal, welchen magischen Algorithmus es verwendet. Vielleicht ist das Manko aber meh. Es sei denn, Sie sind auf dem Gebiet, auf dem Sie sich damit befassen müssen. Dann würden Sie diese Frage sowieso nicht stellen, weil sie Teil Ihres Jobs ist, haha.
quelle