it-swarm-eu.dev

Warum sind Datenstrukturen in Interviews so wichtig?

Ich muss gestehen, dass ich nach meinem College-Abschluss nicht so stark in Datenstrukturen war. Während der Praktika auf dem Campus während meines Abschlusses habe ich gesehen, dass sich die meisten großen Technologieunternehmen wie Amazon, Microsoft usw. hauptsächlich auf Datenstrukturen konzentrierten. Es scheint, als ob Datenstrukturen das einzige sind, was sie von einem Absolventen erwarten.

Um ehrlich zu sein, fühlte ich mich schlecht dabei. Ich schreibe guten Code. Ich folge Standard-Entwurfsmustern der Codierung, verwende Datenstrukturen, aber auf oberflächlicher Ebene wie in Java exponierte APIs wie ArrayList, LinkedList usw.). Die Unternehmen konzentrierten sich jedoch normalerweise auf die komplizierten Aspekte von Datenstrukturen wie zeigerbasierte Speichermanipulation und Zeitkomplexität.

Wahrscheinlich aufgrund meines Java Hintergrunds) verstand ich damals Code-Effizienz und -Logik nur, wenn ich über objektorientierte Programmierung wie Objekte, Instanzen usw. sprach, aber ich ging nie auf die Ebene der Bits ein und Bytes. Ich wollte nicht, dass Leute wegen meines Wissensdefizits in Datenstrukturen auf mich herabblicken.

Warum also wirklich all diese Betonung auf Datenstrukturen?

106
Vamsi Emani

die meisten Biggie-Tech-Unternehmen wie Microsoft konzentrieren sich hauptsächlich auf Datenstrukturen. Es scheint, als ob Datenstrukturen das einzige sind, was sie von einem Absolventen erwarten.

Nein, da ist noch mehr. Zum Beispiel erwarten wir auch , dass Sie schnell lernen und innerhalb kurzer Zeit neue Frameworks, APIs oder sogar Programmiersprachen lernen können. Das ist ein absolutes Minimum. Jemand, der lange braucht, um ein neues Framework, eine neue API oder eine neue Sprache zu erlernen, wird in den meisten Microsoft-Teams kein erfolgreicher Entwickler sein.

Und natürlich gibt es viel mehr Aspekte, auf die wir uns in Interviews konzentrieren, als nur das Rohwissen über Datenstrukturen. Fähigkeit, mit mehrdeutigen Spezifikationen umzugehen, oder Fähigkeit, Codierungsmuster zu erkennen, die unsicheren Code erzeugen, oder ein Dutzend anderer Dinge. Die Fähigkeit, Datenstrukturen zu verstehen, ist jedoch sicherlich sehr groß.

Es ist insbesondere der Fall, dass Interviews darauf ausgerichtet sind, das Wissen über Datenstrukturen für neuere CS-Absolventen zu testen. Von jüngeren Absolventen, von denen die meisten nicht viel Erfahrung in der Praxis haben, wird nicht erwartet, dass sie in den gleichen Dingen gut sind, in denen jemand mit fünfzehnjähriger Branchenerfahrung gut wäre.

Ich muss gestehen, dass ich nicht so stark in Datenstrukturen war

Es ist gut, dass du das über dich selbst weißt. Wenn Sie dies an sich selbst nicht ändern können oder wollen, empfehle ich, dass Sie sich nicht für einen Job bewerben, für den eine Einrichtung mit Datenstrukturen erforderlich ist.

es gibt diese allgemeine Perspektive, dass ein guter Programmierer notwendigerweise ein Programmierer mit guten Kenntnissen über Datenstrukturen ist.

Es ist tautologisch, dass ein guter Programmierer ein Programmierer ist, der gut darin ist, die Arten von Programmen zu erstellen, die erstellt werden müssen. Viele Programmierer arbeiten an Aufgaben, die keine umfassenden Kenntnisse der Datenstrukturen erfordern. Einige von ihnen arbeiten an Aufgaben, die beispielsweise ein tiefes Wissen über das Design von Benutzeroberflächen erfordern. Oder Datenbanknormalisierung. Oder Wasauchimmer. Diese Leute können immer noch "gute Programmierer" in ihren Domänen sein.

warum all diese Betonung auf Datenstrukturen?

Ich stelle Interviewfragen zu Datenstrukturen, weil in meinem Team entwerfen, implementieren und manipulieren die Entwickler jeden Tag den ganzen Tag komplexe Datenstrukturen. Gestern hatten wir vier Stunden Meetings, in denen ein halbes Dutzend Entwickler die Profis diskutierten und Nachteile des Hinzufügens eines einzelnen Booleschen Feldes zu einem bestimmten Baumknoten. Es gibt wahrscheinlich keine Fähigkeit in meinem Team, die wichtiger ist als die Fähigkeit, Datenstrukturen auf einer tiefen Ebene zu verstehen. Es wäre dumm, keine Interviewfragen zu stellen, da wir das tun.

Beeinflusst das Fehlen von Kenntnissen in Datenstrukturen wirklich die Karriere in der Programmierung?

Nun, es wird Sie sicherlich daran hindern, einen Job in meinem Team zu bekommen. Aber wie ich bereits sagte, ist die Programmierung ein riesiges Feld. Es gibt viele Arten der Computerprogrammierung, für die keine Kenntnisse der Datenstrukturen erforderlich sind.

ist das Wissen in diesem Fach wirklich eine ausreichende Grundlage, um einen guten und einen schlechten Programmierer zu unterscheiden?

Nein. Es reicht jedoch fast immer aus, Entwickler zu erkennen, bei denen es unwahrscheinlich ist, dass sie bei Microsoft erfolgreich sind. Da ich hauptsächlich daran interessiert bin, Daten zu erkennen, ist die Kenntnis von Datenstrukturen einer der Faktoren, auf die ich in Interviews teste.

121
Eric Lippert

Ein wichtiger Punkt bei Datenstrukturen ist, dass sie zumindest für praktische Zwecke universell und zeitlos sind. Jeder, der in den letzten 30 Jahren Entwickler war, sollte grundlegende Datenstrukturen wie einfach/doppelt verknüpfte Listen, Binärbäume oder Diagramme kennen. Wenn Sie zwei Entwickler danach fragen, können Sie das Wissen der Entwickler anhand ihrer Antworten vergleichen. Dies kann für Frameworks oder sogar Sprachen kaum gesagt werden: Wenn Sie zwei Entwickler nach Rails fragen und einer viel mehr weiß als der andere, was sagt Ihnen das wirklich? Wie Sie in der Frage sagen, kann ein intelligenter Entwickler schnell genug ein neues Framework erlernen, sodass das Testen seines aktuellen Wissens wenig Sinn macht.

Beeinflusst das Fehlen von Kenntnissen in Datenstrukturen wirklich die Karriere in der Programmierung?

Ja. Bestimmt. Es sei denn, Sie möchten Ihr ganzes Leben damit verbringen, CRUD-Anwendungen zu schreiben.

Oder ist das Wissen in diesem Fach wirklich eine ausreichende Grundlage, um einen guten und einen schlechten Programmierer zu unterscheiden?

Nein, das reicht nicht aus. Es gibt jedoch einige Dinge, die Sie in einem Vorstellungsgespräch fragen können, die ausreichen. Und ich würde sagen, dass das Wissen über Algorithmen einer der besseren Indikatoren ist, zumindest für Leute, die gerade die Schule verlassen haben und bei denen man nicht nach Arbeitserfahrungen fragen kann.

133
nikie

Ich lerne schnell und kann in relativ kurzer Zeit neue Frameworks, APIs oder sogar Programmiersprachen lernen.

Nicht zu hart zu klingen, aber jeder halbwegs anständige Entwickler wird in relativ kurzer Zeit in der Lage sein, eine neue Sprache oder ein neues Framework zu erlernen.

Datenstrukturen sind universell, sie sind ein grundlegender Baustein der Informatik - ein rot-schwarzer Baum ist im Grunde derselbe, unabhängig davon, ob er in Java, Python, PHP oder was auch immer) implementiert ist Wenn ein Arbeitgeber (zumindest ein Arbeitgeber, der nach herausragenden Entwicklern sucht) bestimmte Sprachen oder bestimmte Frameworks testet, prüft er, ob Sie die Grundlagen der Informatik kennen und nicht nur den Geschmack der -Monat verwenden sie derzeit.

(Zumindest sollten sie die Grundlagen testen zusätzlich z was auch immer sie gerade verwenden ... es macht keinen Sinn, einen Informatik-Assistenten einzustellen, wenn er in seinem Leben noch nie eine Codezeile geschrieben hat)

45
Dean Harding

Glauben Sie, dass F1 Rennfahrer nur fahren schnelle Autos? Nein, sie verstehen das Auto, das sie fahren, und sie arbeiten mit den Mechanikern/Ingenieuren zusammen, um es zu tunen. Natürlich fährt ein normaler Fahrer nur.

Sie können ein normaler/durchschnittlicher Programmierer sein, der nur schreibt Code. Du verstehst nicht, was dahinter steckt. Sie erledigen die Dinge. Das ist alles, bis zum nächsten Tag.

Viele Unternehmen suchen jedoch nach F1-Entwicklern. Menschen, die sich entwickeln und wissen, was hinter ihrem Code steckt. Menschen, die dem Unternehmen auch helfen, etwas Besseres aufzubauen.

Es ist ziemlich gut, Datenstrukturen zu kennen, nicht nur, weil Sie sie häufig in einer "vorgekochten" Form verwenden. Es ist auch gut, weil Sie etwas schaffen, das sich aus ihrer Idee ergibt.

30
graffic

In meiner Klasse über Datenstrukturen sagte der Professor als erstes: Diese Klasse es geht nicht darum, wirklich schnell suchen zu können. Wir haben dann ein halbes Jahr damit verbracht, die bestmöglichen Datenstrukturen und Algorithmen zu finden Suche sehr schnell.

Trotzdem blieb er richtig. Die Fähigkeit, Datenstrukturen zu analysieren, die richtige Datenstruktur auf ein bestimmtes Problem anzuwenden oder sogar neue Datenstrukturen zu entwickeln, erfordert viele Eigenschaften eines Ingenieurs:

  • Abstraktionen finden, um ein konkretes Problem zu modellieren
  • Probleme zersetzen können
  • Logisch/formal argumentieren können
  • Kreativität
  • usw.

Wenn Amazon und Microsoft Mitarbeiter einstellen, stellen sie tun dies nicht Fragen zu Datenstrukturen, weil sie hoffen, die nächste Quicksortierung zu erfinden. Sie wollen sicherstellen, dass sie jemanden mit den oben genannten Eigenschaften einstellen.

Natürlich ist es möglich, eine große Anzahl dieser Eigenschaften zu haben und trotzdem an Datenstrukturen zu saugen. Aber wenn das der Fall ist, werden Sie nicht lange brauchen, um ein Experte für Datenstrukturen zu werden.


Davon abgesehen gibt es immer noch das Problem, dass ArrayList einfach nicht ganz skaliert. Wenn Systeme groß werden, sind besser angepasste Lösungen erforderlich, um die Aufgabe auszuführen. Und ohne ein gutes Verständnis der Datenstrukturen können Sie keine Strukturen und Algorithmen finden und zusammenstellen, die in Ihrem konkreten Szenario insgesamt skalierbar sind.

17
blubb

Im Allgemeinen werden Algorithmen und Datenstrukturen als zwei der "härtesten" Themen in der Programmierung angesehen. Dies liegt daran, dass es in der Informatik eine Vielzahl von Arbeiten und Forschungsarbeiten gibt. Sie ziehen auch die typischen "Linkslappen" -Programmierer an, die Dinge wie Mathematik und Naturwissenschaften mögen (was eine ganze Menge Programmierer sind).

Das Wissen darüber kann sich jedoch auf Ihre Karriere in Bezug auf Vorstellungsgespräche auswirken, insbesondere wenn Sie an technisch ausgerichteten Arbeitsplätzen wie Google interviewen. Andere Unternehmen könnten sich jetzt jedoch überhaupt um diesen Aspekt kümmern.

Nach meiner Erfahrung können Algorithmus-/Datenstrukturanforderungen manchmal als "Programmiererelitismus" empfunden werden, bei dem Alpha-Geeks kämpfen, um zu zeigen, wer der klügste ist. Es ist immer gut zu wissen, was da draußen ist, aber es gibt sehr viele verschiedene Programmierjobs, bei denen Sie nie wissen müssen, wie man einen rot/schwarzen Baum verwendet oder eine Boyer-Moore-Suche codiert.

Ich würde empfehlen, mehr über die Themen zu erfahren, wenn Sie sie interessant finden und ein persönliches Projekt haben, in dem Sie daran basteln können, andernfalls können Sie wahrscheinlich vorerst ohne sie auskommen

PS. Kenntnisse in rudimentären Datenstrukturen (verknüpfte Listen, Wörterbücher, Hashtabellen usw.) sollten für jeden Programmierer-DS ein obligatorisches Wissen sein.

12
Homde

Warum also wirklich all diese Betonung auf Datenstrukturen?

Zwei Gründe.

Zum einen zeigt es, dass Sie das Problem abstrakt und nicht in einer bestimmten Programmiersprache betrachten können. Wissen Sie , warum eine Hash-Tabelle in einer bestimmten Situation eine bessere oder schlechtere Wahl sein kann als ein rot-schwarzer Baum, unabhängig von der zugrunde liegenden Implementierung?

Zum anderen gibt es eine beängstigende Anzahl von Leuten da draußen, die für Jobs interviewen, die einfach lügen über ihre Erfahrung und sehr wenig haben wenn irgendwelche Programmierfähigkeiten; Datenstrukturfragen sind eine schnelle Möglichkeit, diese Personen auszusondern.

7
John Bode

Sie sind von grundlegender Bedeutung, aber worüber würden Sie Absolventen befragen? Sie können Erfahrung außerhalb ihrer Kursarbeit haben oder nicht. Ihr Kurs hat möglicherweise mehr Microsoft-Technologien als Java behandelt oder umgekehrt. Datenstrukturen sind Gemeinsamkeiten.

5
Ian

Oft vermeidet der beste Code die Neuerfindung von Datenstrukturen auf niedriger Ebene. Dies gilt insbesondere für Hochsprachen. Ich habe selbst bei CRUD-Jobs einen Trend zu Fragen der Datenstruktur auf niedriger Ebene festgestellt. YMMV, aber es scheint, dass die Betonung des Fachwissens von Hacker-Wissenschaftlern die anderen Fähigkeiten überschattet hat, die einen großartigen Entwickler ausmachen:

  • projekt-/Zeitmanagement: In der Lage sein, mit der realen Welt Schritt zu halten, die vom Geschäft bestimmt wird, und nicht mit einer neuen verknüpften Liste, die 1% schneller arbeitet.
  • ein Minimum an sozialen Fähigkeiten: Ein Entwickler, der arrogant ist und nicht miteinander auskommt, ist nichts anderes als ein Anker.
  • die Fähigkeit, schnell und kontinuierlich neue Dinge zu lernen: Datenstrukturen ändern sich im Laufe der Jahre kaum ... aber alles andere tut es. Datenstrukturen sind hervorragende Grundlagen, und jeder Entwickler sollte sie ziemlich gut kennen, aber ein Buchhalter lässt sich bei einem Vorstellungsgespräch nicht auf seine Fähigkeiten in Bezug auf lange Abteilungen testen. Großartige Entwickler sind die Art von Leuten, die neue Dinge herausfinden und sie mögen können.

Datenstrukturen sind großartig. Datenstrukturen sind wichtig. Jeder Programmierer sollte ein Verständnis dafür haben. Wir sind jedoch besessen davon, diese Grundlagen von ihrem Platz zu verdrängen. Es geht nicht nur um Datenstrukturen, und in 99% der Fälle müssen keine Fragen gestellt werden, die über die Grundlagen von Datenstrukturen hinausgehen. Wenn Sie einen Buchhalter interviewen, fragen Sie ihn sicher, was 81 geteilt durch 9 ist, aber wenn Sie immer wieder fragen: "Was ist die Kubikwurzel von 98425454242412 * 4512324? ... ohne Taschenrechner!" dann werden Sie einen guten Prozentsatz der vernünftigen, klugen, talentierten und angenehmen Leute erschrecken, die Sie hätten haben können. Fragen Sie, ob sie ein grundlegendes relationales Datenmodell erstellen können, ob sie die erweiterten Array-Strukturen des jeweiligen Frameworks verwenden können und ob sie erklären können, wann eine binäre Suche schneller als eine flache Suche ist, aber es macht auch nicht viel Sinn weit darüber hinaus. Wenn sie diese Dinge können, suchen Sie nach dem nettesten, professionellsten und kreativsten der Gruppe.

Ich liebe Joels Schreiben, aber ich denke, sein "Java Schools" -Ding ist absolut falsch. Es gibt viele Dinge, die beweisen können, dass jemand klug ist, ohne C++ zu beherrschen. Denken Sie darüber nach, Sie können 10 Minuten lang mit jemandem sprechen, ohne ihn nach der Zeigerarithmetik zu fragen, und eine ziemlich gute Vorstellung davon bekommen, ob er der Typ ist, der Dinge erledigen und Dinge herausfinden kann oder nicht. Wir müssen nicht so sein:

Interviewer: "Erzählen Sie mir von Ihren Leistungen."

Coder: "In meiner letzten Position war ich der einzige Entwickler für ein benutzerdefiniertes ERP System für ein Milliarden-Dollar-Finanzunternehmen. Wir haben Monate früher als geplant geliefert, und das System wurde in der Vergangenheit produziert 3 Jahre."

Interviewer: "Lassen Sie mich das klarstellen. Erzählen Sie mir von Ihren Programmier- Errungenschaften."

Coder: "Ähm ..."

Interviewer: "Haben Sie zum Beispiel jemals eine eigene verknüpfte Liste erstellt?"

Coder: "... [geht raus]"

4

Als guter Programmierer geht es nicht darum, Sprachen und Frameworks lernen zu können. Es geht darum, Lösungen für komplexe Probleme zu finden. Damit diese Lösungen effizient und zuverlässig sind, sind fast immer gute Algorithmen und die angemessene Verwendung von Datenstrukturen erforderlich. Es reicht nicht aus, die vorhandenen Datenstrukturen zu kennen. Sie müssen verstehen, dass die Datenstrukturen ausreichen, um die richtige für das Problem zu verwenden. Listen und Karten bieten einige wertvolle Funktionen, die jedoch mit Kosten verbunden sind. Die Verwendung der falschen Funktionen kann die Leistung Ihrer Software erheblich beeinträchtigen.

Ein guter Interviewer weiß das und versucht festzustellen, ob Sie für sein Team oder seine Firma wertvoll sein können. Die Sprache (n), die Sie in 2 Jahren verwenden, sind möglicherweise sehr unterschiedlich, aber die Notwendigkeit effektiver Algorithmen und Datenstrukturen wird sich nicht ändern.

4
cdkMoose

Datenstrukturen, Zeitkomplexität, Speichermanipulation und Zeiger sind alles Grundlagen, die jemand, der sich selbst als Informatiker bezeichnet, von Natur aus kennen sollte. Jeder Code-Affe kann eine Sprache lernen und lernen, wie man sie benutzt, aber wo CS-Profis und Studenten sich von anderen abheben sollten, ist nicht nur zu wissen, wie man eine verknüpfte Liste oder eine Hash-Karte benutzt, sondern WARUM.

Das WARUM unterscheidet uns alle wirklich von dem einfachen Skript-Kind, dem Code-Affen und dem Grunzen der Computerwelt. WARUM eine Hash-Tabelle anstelle einer verknüpften Liste verwenden, WARUM sollte meine Hash-Tabelle eine Clusterdichte von ungefähr 0,6 bis 0,8 haben, WARUM sollte ich hier eine zirkulär verknüpfte Liste anstelle einer doppelt verknüpften Liste verwenden. WARUM sollte mein Code im schlimmsten Fall mit der Effizienz 'x' und im Durchschnitt mit 'y' ausgeführt werden?.

Diese grundlegenden Datenstrukturen und das Wissen nicht nur darüber, wie sie verwendet werden (wie sie in jedem Programmierer ohnehin wiedergegeben werden sollten), sondern auch darüber, warum sie verwendet werden, sind in diesen Fällen eher das, wonach sie suchen.

An vielen Stellen werden Sie den Code in einer Sprache schreiben, mit der Sie vertraut sind, aber das ist eher eine Allgemeinheit, da C wirklich nicht mehr die Sprache der Programmierwelt ist und die Strukturierung von Pseudocode ein Mischmasch sein kann über den Ort und in den meisten Fällen mit Pseudo-Code/P & P-Code, der nicht wirklich gelehrt wird, nach unten unmöglich zu behandeln.

2
Jeff Langemeier

Datenstrukturen sind das Fundament aller Programme. Sie müssen nicht unbedingt ein tiefes Verständnis für sie haben, aber Sie müssen unbedingt wissen, wie sie funktionieren.

Warum? Weil Ihr gesamter Code mit Daten interagiert und diese manipuliert. Wenn der Datensatz nicht in einer Struktur gespeichert werden kann, kann er nicht verwendet werden. Daten sind wie die Baumaterialien eines Hauses. Bis Sie es zu einer Struktur zusammenfügen, haben Sie nur einen nutzlosen Stapel Bretter.

Sobald Sie sich entschieden haben, wie Sie über Ihren Datensatz nachdenken und ihn definieren möchten, dann können Sie ihn verwenden, um Dinge zu tun, den klassischen Algorithmus-Teil des Duos. Jedes einzelne Programm, das Sie schreiben verwendet eine Datenstruktur, obwohl diese Struktur in vielen Fällen so einfach ist, dass sie fast nicht existiert. Ein paar Variablen für Zustandsdaten und wir sind fertig!

Sobald Sie über triviale Programme hinausgehen, erfordert fast alles eine Datenstruktur. Welchen würden Sie bevorzugen, einen professionellen Architekten, der Ihren Wolkenkratzer mit Best Practices und Mathematik entwirft, oder Onkel Joe Bob, der sofort mit dem Bau beginnt?

0
Spencer Rathbun