Datenstrukturen und Algorithmen, die ich in der Praxis tatsächlich verwende
(blog.pragmaticengineer.com)Oft heißt es, dass Algorithmusfragen aus Vorstellungsgesprächen in der Praxis nicht verwendet werden,
doch der Autor hat zusammengestellt, was er bei der Arbeit bei Skype/Uber usw. tatsächlich häufig genutzt hat, zusammen mit Beispielen und Empfehlungen für grundlegende Lektüre.
Graphen und Graphensuche: Skype & Uber
Gewichtete Graphen und kürzeste Wege: SkyScanner
Sortierung: Skype
Hash-Tabellen und Hashing: überall
Stacks und Queues: gelegentlich
Kryptografie (Crypto), Wahrscheinlichkeitstheorie und Vermutungen, Hexagonal Grid und hierarchische Indizes: Uber
- Über Algorithmen und Datenstrukturen in Vorstellungsgesprächen
Es ist nicht wichtig, populäre Algorithmen oder ausgefallene Datenstrukturen zu kennen.
Man sollte wissen, was ein Algorithmus ist, und einfache Algorithmen wie Greedy-Algorithmen selbst herleiten können.
Grundlegende Datenstrukturen wie Hash-Tabellen, Queues & Stacks sollte man kennen, aber spezielle Algorithmen wie Dijkstra oder A* muss man nicht auswendig lernen.
Der Großteil meiner Arbeit mit Algorithmen, die über Sortierung hinausgehen, bestand darin, Dinge nachzuschlagen und mich darum zu bemühen, sie zu verstehen.
Das gilt genauso für ausgefallene Datenstrukturen wie Red-Black- oder AVL-Bäume.
Tatsächlich musste ich solche Datenstrukturen nie verwenden, und selbst wenn es nötig wäre, würde ich sie erneut recherchieren und mich einarbeiten.
Im Silicon Valley wird es immer üblicher, Fragen zu dynamischer Programmierung oder ausgefallenen Datenstrukturen zu stellen.
Solche Fragen helfen vielleicht dabei, hervorragende Engineers einzustellen, verhindern aber auch, dass man Menschen einstellt, die ihre Arbeit sehr gut machen, obwohl dafür in der Praxis kein fortgeschrittenes Wissen über Algorithmen nötig ist.
Wirklich nötig sind ein Bewusstsein für die gebräuchlichsten Datenstrukturen und die Fähigkeit, den einfachsten Algorithmus als Werkzeug zur Lösung eines Problems einzusetzen.
Datenstrukturen und Algorithmen sind nur ein Toolset.
Es sind Werkzeuge, die man in der Softwareentwicklung souverän einsetzen können sollte.
Wenn man diese Werkzeuge gut kennt, wird man sich daran gewöhnen, Code zu lesen, der sie verwendet.
Außerdem gewinnt man mehr Selbstvertrauen bei der Implementierung von Lösungen für schwierige Probleme.
Um die Grundlagen zu lernen, empfehle ich Folgendes. (Links in den Kommentaren)
-
GeekforGeeks: Data Structures Overview (Online-Artikelsammlung)
-
HackerRank: DataStructure Collection (Lernen durch Aufgabenlösen)
-
Grokking Algorithms: Algorithmen visuell verstehen (deutsche Übersetzung verfügbar)
-
The Algorithm Design Manual und Algorithms: Fourth Edition sind zu trocken und für den täglichen Praxiseinsatz nicht besonders geeignet.
3 Kommentare
https://geeksforgeeks.org/overview-of-data-structures-set-1-linear-dat…
https://www.hackerrank.com/domains/data-structures
Englisch: https://www.amazon.com/gp/product/1617292230/?tag=amzneu-20
Koreanische Ausgabe (Hanbit Media): https://www.hanbit.co.kr/store/books/look.php?p_code=B5896248244
The Algorithm Design Manual https://www.amazon.com/gp/product/1848000693?tag=amzneu-20
Algorithms : 4th Edition https://www.amazon.com/gp/product/032157351X/?tag=amzneu-20
Die Anekdote am Anfang des Artikels, dass der Homebrew-Entwickler Max Howell im Google-Interview durchfiel, weil er das Invertieren eines Binärbaums nicht ans Whiteboard schreiben konnte, ist ziemlich bekannt.
Die Ironie dabei: Tatsächlich nutzen 90 % der Google-Entwickler Homebrew, aber ausgerechnet der Entwickler selbst fiel durch ..
Diese 90 % sind eine Zahl, die sich ein Homebrew-Entwickler ausgedacht hat, und soweit ich mich erinnere, hat in dem Tweet ein Google-Entwickler geantwortet, dass es auf keinen Fall 90 % seien..
Bei Google ist es ohnehin so, dass Desktops Ubuntu sind und Laptops Shell-Maschinen, also gibt es dafür ohnehin nicht wirklich einen Anwendungsfall.