In diesen Tagen investiere ich viel in Datenstrukturen und Algorithmen und versuche, einige Programmier-Rätsel zu lösen.
Ich versuche mit Java und Clojure zu programmieren und zu lösen.
Verschwende ich meine Zeit? Sollte ich mehr in Technologien und Frameworks investieren, die ich bereits kenne, um tieferes Wissen zu erlangen (die Ins und Outs) und in der Lage zu sein, schneller mit ihnen zu programmieren?
Werde ich durch das Studium von Datenstrukturen und Algorithmen ein besserer Programmierer, oder sind diese Fächer nur während der Studienzeit wichtig?
learning
algorithms
data-structures
Chiron
quelle
quelle
Antworten:
Es ist durchaus möglich, den größten Teil Ihrer Karriere mit signifikanten und nützlichen Arbeiten zu verbringen, wenn Sie nur minimale Kenntnisse über Algorithmen und Datenstrukturen haben.
Die Mindestkenntnisse für Algorithmen und Datenstrukturen erfordern Folgendes, um erfolgreich zu sein:
Es gibt kein * Maximum * . Wenn Sie möchten, können Sie Ihr Studium auf das Doktoratsniveau und darüber hinaus bringen. Die Nützlichkeit hängt direkt mit der Art von Jobs zusammen, die Sie haben möchten, und mit der Art von Arbeit, die Sie am interessantesten und lohnendsten finden.
Als grobe (aber nicht absolute) Richtlinie gilt jedoch: Je niedriger, ressourcenintensiver und weniger automatisiert die Sprache, das Framework und die Anwendung sind, an denen Sie arbeiten, desto höher ist das erforderliche Qualifikationsniveau zu Algorithmen und Datenstrukturen. Wenn Sie beispielsweise den Ukkonen-Algorithmus in Assembler implementieren , bedeutet dies wahrscheinlich, dass Sie das Verständnis der beteiligten Algorithmen und Datenstrukturen auf Masterebene erlangen möchten.
Wenn Sie in Ihrer spezifischen Situation von einem Java-Entwicklungshintergrund zu einer Arbeit an den iOs übergehen, sollten Sie bei gleichbleibenden Bedingungen ein etwas höheres Verständnis für Algorithmen und Datenstrukturen haben. Sie möchten in der Lage sein, effizient auf einem Gerät mit weniger verfügbaren Ressourcen zu arbeiten. Erwarten Sie außerdem, Ihrem Arsenal einige neue Kategorien hinzuzufügen - vor allem möchten Sie mehr über die Speicherverwaltung erfahren.
quelle
Nein. Wenn Sie gerade erst anfangen, halten Sie sich nur zurück, wenn Sie versuchen, sich mit großen Themen wie der UI-Programmierung zu beschäftigen. Schließlich müssen Sie dorthin gehen und größere Frameworks erlernen ... wie Sie die Datenstrukturen und Algorithmen verwenden, die ANDERE Leute geschrieben haben. Wenn Sie gerade erst anfangen, ist es gut, sich an Probleme mit begrenztem Umfang zu halten.
Algorithmen und Datenstrukturen sind im Grunde die Grundlage für alles, auch wenn Sie wahrscheinlich nie mehr eine eigene schreiben werden, wenn Sie die Anfängerphase hinter sich haben. Wenn Sie sie kennen oder zumindest gekannt haben, werden Sie am Ende zu einem besseren Entwickler. Sie werden wissen, wann und warum Sie welche verwenden müssen, weil Sie wissen, WIE sie funktionieren. Außerdem müssen Sie Ihre Algorithmen und Datenstrukturen generisch gestalten, damit sie mit jedem Typ oder Typ mit Schnittstelle X funktionieren können.
Ich sehe zu viele Leute, die sich mit Dingen wie Qt beschäftigen, die am Ende Fragen stellen, die beispielsweise keine Kenntnisse in C ++ aufweisen. Sie versuchen, zu viele Schritte zu überspringen, und am Ende brauchen sie länger, um zu lernen. Ich würde sagen, Sie sind auf dem richtigen Weg.
quelle
Du verschwendest nicht deine Zeit.
Wenn Sie im Laufe Ihrer Arbeit ein Tool oder Framework verwenden müssen, das Sie zuvor noch nicht verwendet haben, lernen Sie es und setzen es ein.
Wenn Sie jedoch eine Datenstruktur oder einen Algorithmus verwenden müssen, die bzw. den Sie zuvor noch nicht verwendet haben, werden Sie wahrscheinlich nicht einmal wissen, dass es sie gibt, und Sie werden Ihr Problem mit einer fürchterlich suboptimalen Technik lösen, die einiges mehr kostet Aufwand und Skalen schrecklich.
Ich versuche zu sagen, dass Sie so etwas nicht nur lernen, sondern lernen müssen, indem Sie lernen , entweder in einer akademischen Situation oder durch persönliche Anstrengung, wie Sie es tun jetzt machen.
quelle
In der Praxis sollten Sie sich darüber im Klaren sein, welche Datenstrukturen zur Verfügung stehen, welche Komplexitätsmerkmale sie aufweisen, wo Sie gute Implementierungen erhalten und wo Sie Ihre Kopie der Einführung in Algorithmen aufbewahren , um die Details später nachzuschlagen.
quelle
Wenn dich das glücklich macht, solltest du definitiv dabei bleiben. Wenn Sie befürchten, dass Sie nicht genug Theorie anwenden, ziehen Sie ein theorielastiges Projekt in Betracht. Erstellen Sie eine kleine Programmiersprache wie Potion von Grund auf neu. Bei einer vollständigen Implementierung werden Hash-Tabellen, Diagramme, Bäume und eine Vielzahl von Algorithmen verwendet. Wenn es interessant erscheint, können Sie tiefer in die Optimierung, native Codegenerierung oder Benutzererweiterbarkeit eintauchen.
Sie werden ein besserer Programmierer, wenn Sie interessiert und fokussiert bleiben, nicht wenn Sie an Projekten arbeiten, die praktisch, aber ein wenig langweilig erscheinen.
Das Kaninchenloch runter, Dorothy!
quelle
Ich habe viel Zeit damit verbracht, mit OpenGL in C / C ++ herumzuhacken. Ich kenne die Sprachen und die API gut genug ... und aufgrund dieser Erfahrung bin ich ein vernünftiger Entwickler und Programmierer geworden. Das eigentliche algorithmische Wissen, das zur Lösung verschiedener auftretender Probleme erforderlich ist, konnte ich jedoch erst richtig erfassen.
Aus eigener Erfahrung heraus ist es eine Zeitverschwendung, sich auf das Erstellen von Anwendungen zu konzentrieren, wenn Sie die Theorie hinter den Problembereichen, die sich auf das beziehen, was Sie erstellen möchten, nicht kennen.
Für viele verschiedene Arten von Software ergeben sich diese Bereiche aus den Grundlagen, die Sie aus dem Studium von Algorithmen lernen, zusätzlich zu ihrer eigenen spezifischen nischenbasierten Theorie (z. B. lineare Algebra in Computergrafiken, Zahlen- / Informationstheorie in der Kryptographie usw.).
Sie müssen nicht unbedingt ein Computational Wiz-Kid hinter allem sein, aber das zu tun, was Sie zum Zeitpunkt dieses Beitrags getan haben, ist ein sehr, sehr notwendiger Weg, um mindestens einmal auf der Programmierreise unterzugehen - unabhängig davon, ob oder nicht sie sind Autodidakt.
quelle
Ich denke, wenn du sie nicht gut kennst, wirst du keinen Grund finden, sie zu benutzen. Ich scheine die ganze Zeit Verwendungen für sie zu finden. Aber ich muss zugeben, dass mit den Verbesserungen bei Generika in den letzten rund einem halben Dutzend Jahren die Notwendigkeit, eigene zu rollen, immer seltener auftritt. Die Vorteile, zu wissen, wie und wann sie zu verwenden sind, werden dadurch immer noch nicht beseitigt, und sie können den ansonsten komplizierten Code erheblich vereinfachen.
quelle