Pourquoi les structures de données sont-elles si importantes dans les entretiens? [fermé]

106

Je dois avouer que je n'étais pas aussi fort dans les structures de données lorsque je suis sorti de l'université. Au cours de mes études sur les campus, au cours de mes études, j'ai constaté que la plupart des grandes entreprises technologiques telles qu'Amazon, Microsoft, etc. se concentraient principalement sur les structures de données. Il semble que les structures de données soient la seule chose qu’ils attendent d’un diplômé.

Pour être honnête, je me sentais mal à ce sujet. J'écris un bon code. Je respecte les schémas de conception standard du codage. J'utilise des structures de données, mais au niveau superficiel, comme dans les API exposées Java telles que ArrayList, LinkedList, etc.

Probablement à cause de mon arrière-plan Java, à l'époque, je ne comprenais l'efficacité du code et la logique que lorsqu'on parlait de programmation orientée objet, comme les objets, les instances, etc., mais je n'ai jamais approfondi le niveau des bits et des octets. Je ne voulais pas que les gens me méprisent pour mon déficit de connaissances dans les structures de données.

Alors vraiment pourquoi tout cet accent sur les structures de données?

Vamsi Emani
la source
36
Je ne comprends pas vraiment votre question. Vous dites "j'écris un bon code" - comment les structures de données peuvent-elles ne pas faire partie d'un bon code. Et, je doute qu'un intervieweur sincère soit excessivement obsédé par eux.
Treecoder
6
@greengit: Il y a une différence entre implémenter une carte de hachage et utiliser son API. Lors d’une interview, j’apprécierais qu’ils décrivent une application pour moi, puis me demandent de mettre en place les structures de données centrales et d’expliquer mes choix.
György Andrasek
7
Que préféreriez-vous être demandé?
Temptar
13
@Jurily - Pour comprendre quand utiliser une bibliothèque de conteneurs, il est utile de connaître le fonctionnement de la structure de données sous-jacente. Il est difficile d’accepter que vous connaissiez l’efficacité du code si vous ne connaissez pas la complexité temporelle et spatiale des bibliothèques que vous utilisez - le simple fait que cela fonctionne bien sur de petits ensembles de données de test ne signifie pas qu’il sera adapté aux grands ensembles de données. dans le monde réel. OMI, comprendre la complexité du temps et de l’espace fait partie de la compréhension de l’API au même titre que la connaissance des noms de classe et de méthode.
Steve314
2
Une bonne structure de données donne un code propre et simple. Une mauvaise structure de données donne un code complexe. Il est important de bien faire les choses.

Réponses:

121

la plupart des grandes entreprises technologiques comme Microsoft se concentrent principalement sur les structures de données. Il semble que les structures de données soient la seule chose qu’ils attendent d’un diplômé.

Non, il y a plus Par exemple, nous nous attendons également à ce que vous appreniez rapidement et que vous puissiez apprendre de nouveaux frameworks, API ou même de nouveaux langages de programmation en peu de temps. C'est un bar minimum. Une personne qui met beaucoup de temps à apprendre un nouveau framework, une nouvelle API ou un nouveau langage ne sera pas un développeur performant dans la plupart des équipes Microsoft.

Et bien sûr, nous mettons l'accent sur beaucoup d'autres aspects des entretiens que la simple connaissance brute des structures de données. Capacité à gérer des spécifications ambiguës, par exemple, ou à reconnaître des modèles de codage produisant un code non sécurisé, ou une douzaine d'autres choses. Mais la capacité à comprendre les structures de données est certainement un très grand.

Il est particulièrement vrai que les entretiens ont pour objectif de tester la connaissance des structures de données des diplômés récents en informatique. Les nouveaux diplômés, dont la plupart n'ont pas beaucoup d'expérience dans le monde réel, ne devraient pas être bons dans les mêmes domaines qu'une personne ayant quinze ans d'expérience dans l'industrie.

Je dois avouer que je n'étais pas si fort dans les structures de données

C'est bien que vous sachiez cela à propos de vous-même. Si vous ne pouvez pas ou ne souhaitez pas changer cela à propos de vous-même, ma recommandation est que vous ne postulez pas pour un travail qui nécessite une installation avec des structures de données.

Il existe cette perspective générale selon laquelle un bon programmeur doit nécessairement posséder une bonne connaissance des structures de données.

C'est tautologique qu'un bon programmeur est un programmeur qui est doué pour créer les types de programmes à construire. Beaucoup de programmeurs travaillent sur des tâches qui ne nécessitent pas une connaissance approfondie des structures de données. Certains travaillent par exemple sur des tâches nécessitant une connaissance approfondie de la conception d'interface utilisateur. Ou la normalisation de la base de données. Ou peu importe. Ces personnes peuvent toujours être de "bons programmeurs" dans leurs domaines.

pourquoi tout cet accent sur les structures de données?

Je pose des questions sur les structures de données lors des entretiens car, dans mon équipe, les développeurs conçoivent, implémentent et manipulent des structures de données complexes, jour après jour. Hier, nous avons eu quatre heures de réunions au cours desquelles une demi-douzaine de développeurs ont expliqué les avantages et les inconvénients de l'ajout d'un seul champ booléen à un nœud d'arbre particulier. Aucune compétence de mon équipe n'est probablement plus importante que la capacité à comprendre les structures de données à un niveau profond. Il serait idiot de ne pas poser de questions d'entrevue à ce sujet, car c'est ce que nous faisons.

Ne pas avoir des connaissances dans les structures de données affecte vraiment sa carrière dans la programmation?

Cela vous empêchera certainement de trouver un emploi dans mon équipe. Mais comme je l'ai dit auparavant, la programmation est un domaine immense . Il existe de nombreux types de programmation informatique qui n'exigent pas une connaissance des structures de données.

La connaissance de ce sujet est-elle vraiment une base suffisante pour différencier un bon et un mauvais programmeur?

Non, mais il est presque toujours suffisant de détecter les développeurs qui ont peu de chances de réussir chez Microsoft. Puisque c’est ce que je cherche surtout à détecter, la connaissance des structures de données est l’un des facteurs que j’ai testé au cours des entretiens.

Eric Lippert
la source
10
Merci une tonne Eric! C'est la réponse la moins démotivante que j'ai pour ma question. :-)
Vamsi Emani
2
@ EricLippert, merci pour cette excellente réponse. En tant que développeur autodidacte qui n'a pas encore été mordu par son manque de connaissances formelles sur les structures de données, recommandez-vous un livre qui pourrait me montrer ce qui me manque?
Fermeture Cowboy
5
@Closure Cowboy: Pour les bases des structures de données et des algorithmes, le manuel standard est "Introduction aux algorithmes" de Cormen, Leieserson et Rivest. Si vous êtes intéressé par les structures de données de style fonctionnel, le livre de Chris Okasaki est très bon mais assez avancé.
Eric Lippert
2
@ClosureCowboy Découvrez le cours 'Algorithms I' de Coursera proposé par Princeton. Je suis aussi un programmeur autodidacte et cela contribue beaucoup à combler mes lacunes dans les connaissances théoriques de la CS.
Evan Plaice
133

Un point important concernant les structures de données est qu’elles sont universelles et intemporelles, du moins pour des raisons pratiques. Toute personne qui a été développeur au cours des 30 dernières années devrait connaître les structures de données de base telles que des listes à liaison simple / double, des arbres binaires ou des graphiques. Si vous demandez à deux développeurs à leur sujet, vous pouvez comparer leurs connaissances en fonction de leurs réponses. On peut difficilement en dire autant des frameworks ou même des langages: si vous interrogez deux développeurs sur Rails et que l'un en sait beaucoup plus que l'autre, qu'est-ce que cela vous dit vraiment? Comme vous le dites dans la question, un développeur intelligent peut apprendre un nouveau framework assez rapidement. Tester ses connaissances actuelles n'a donc aucun sens.

Ne pas avoir de connaissances dans les structures de données affecte-t-il réellement sa carrière dans la programmation?

Oui. Absolument. Sauf si vous voulez passer toute votre vie à écrire des applications CRUD.

Ou bien la connaissance de ce sujet est-elle vraiment une base suffisante pour différencier un bon et un mauvais programmeur?

Non, ce n'est pas suffisant. Mais il y a peu de choses que vous pouvez demander lors d'un entretien d'embauche qui soient suffisantes. Et je dirais que la connaissance des algorithmes est l'un des meilleurs indicateurs, du moins pour les personnes sortant de l'école, où il est impossible de poser des questions sur les expériences de travail.

nikie
la source
Un peu tordu, je ne dirais pas que les infrastructures de données sont intemporelles. Beaucoup de structures sont modélisées pour résoudre les problèmes avec le matériel actuel. Par exemple, nous utilisons un arbre B + pour optimiser la recherche sur les pages de fichiers, mais le matériel sous-jacent est en train de changer. Peut-être que les disques SSD pourraient nécessiter des algorithmes différents, ou peut-être que se déplacer davantage vers un accès RAM que sur un disque dur. Donc, bien que l'algorithme en lui-même puisse être "intemporel", son lieu et son but ne sont pas
Homde
3
@ Konrad: C'est ce que je voulais dire par "à des fins pratiques". Je ne peux pas penser à une structure de données ou à un algorithme devenu "obsolète", et je doute que vous en rencontriez un dans un entretien d'embauche. Et puisque la plupart des algorithmes / structures de données ont été développés bien avant notre matériel actuel et sont toujours utiles, je suppose même qu’il existe une sorte de coévolution en cours, où les nouveaux développements matériels sont guidés par les structures de données que nous connaissons.
Nikie
Si / quand la concurrence devient de facto obligatoire, je peux penser à un grand nombre de structures de données qui deviennent obsolètes :)
Homde
9
@ Konrad: Et si / quand les ordinateurs quantiques deviennent standard, je peux penser à quelques autres. Mais je suppose que l'OP ne veut pas attendre avec ses entretiens d'embauche avant cette date ;-)
nikie
3
... ou quand nos nouveaux seigneurs de l'
intelligence
45

Je suis un apprenant rapide et je peux apprendre de nouveaux frameworks, API ou même des langages de programmation en très peu de temps.

Cela ne doit pas paraître trop sévère, mais tout développeur à la décente sera capable de choisir un nouveau langage ou un nouveau framework dans un laps de temps relativement court.

Les structures de données sont universelles, elles constituent un élément fondamental de la science informatique: un arbre rouge-noir est fondamentalement identique, qu'il soit implémenté en Java, Python, PHP ou autre. Ainsi, plutôt que de tester des langages ou des cadres spécifiques, un employeur (du moins un employeur à la recherche de développeurs hors pair) vérifiera si vous connaissez les principes fondamentaux de la science informatique, plutôt que la moindre saveur du mois à laquelle ils s'adressent. re utilise actuellement.

(au moins, ils devraient tester les principes de base en plus de tout ce qu'ils utilisent actuellement ... inutile de faire appel à un assistant en informatique s'il n'a jamais écrit une ligne de code de sa vie)

Dean Harding
la source
1
L'informatique est l'un des mots clés ici. Les structures de données sont généralement analysées en profondeur dans un master et constituent apparemment un sujet important.
James P.
1
Les structures de données sont universelles jusqu'à ce que vous deveniez accro à la programmation purement fonctionnelle: P.
Tikhon Jelvis
30

Croyez-vous que les pilotes de F1 conduisent juste des voitures rapides? Non, ils comprennent la voiture qu'ils conduisent et ils travaillent avec les mécaniciens / ingénieurs pour la régler. Bien sûr, un conducteur normal ne fait que conduire.

Vous pouvez être un programmeur normal / moyen qui écrit simplement du code. Tu ne comprends pas ce qu'il y a derrière. Vous faites avancer les choses. C'est tout, à demain.

Mais de nombreuses entreprises recherchent des développeurs F1. Les gens qui vont développer en sachant ce qui se cache derrière leur code. Des personnes qui aideront également l’entreprise à construire quelque chose de mieux.

Il est très utile de connaître les structures de données non seulement parce que vous les utiliserez souvent sous une forme "précuite". C'est aussi bien parce que vous allez créer quelque chose qui dérive de leur idée.

graffic
la source
Alors attendez, êtes-vous en train de dire qu'il y a une corrélation entre mon statut de programmeur et mon étrange habitude de connaître intimement une voiture avant de la conduire?
Robbie
@Robbie: +1 LOL Vous aimez démonter des objets?
graffic
2
Ouaip. Mon père m'a appris à tout démonter. Il a négligé de m'apprendre à remettre les choses en place, il a compris cela toute ma vie.
Robbie
17

Dans mon cours sur les structures de données, la toute première chose que le professeur a dite était: Ce cours n’est pas destiné à permettre une recherche très rapide. Nous avons ensuite passé six mois à trouver les meilleures structures de données et algorithmes possibles pour effectuer une recherche très rapide.

Pourtant, il est resté juste. Etre capable d'analyser des structures de données, d'appliquer la bonne structure de données à un problème donné ou même de créer de nouvelles structures de données nécessite de nombreuses qualités d'ingénieur:

  • Trouver des abstractions pour modéliser un problème concret
  • Être capable de décomposer les problèmes
  • Être capable de raisonner logiquement / formellement
  • La créativité
  • etc.

Lorsque Amazon et Microsoft embauchent des personnes, elles ne posent pas de questions sur les structures de données car elles espèrent inventer le prochain tri rapide . Ils veulent s'assurer qu'ils embauchent quelqu'un avec les qualités mentionnées ci-dessus.

Bien sûr, il est possible d’avoir un grand ensemble de ces qualités et de ne pas aimer les structures de données. Mais si tel est le cas, il ne vous faudra pas longtemps pour devenir un expert en structures de données.


Cela étant dit, il y a toujours le problème qui ArrayListn'a pas tout à fait l'ampleur. Lorsque les systèmes deviennent volumineux, des solutions mieux adaptées sont nécessaires pour effectuer le travail. Et sans une bonne compréhension des structures de données, vous ne pourrez pas trouver et composer des structures et des algorithmes qui évoluent dans votre scénario concret.

blubb
la source
3
Et en ce qui concerne ArrayList, sans une bonne compréhension des structures de données, vous ne réaliserez peut-être même pas que cela ArrayListn’est pas tout à fait à l’échelle et vous devez trouver et composer des structures et des algorithmes à cette échelle.
Phoog
12

En général, les algorithmes et les structures de données sont considérés comme deux des sujets les plus «essentiels» de la programmation. En effet, il existe un énorme travail et de nombreuses recherches en informatique. Ils attirent également les programmeurs typiques du "lobe gauche" qui aiment des choses comme les mathématiques et les sciences (ce qui est un tas de programmeurs)

Cela dit, la connaissance de ces éléments peut affecter votre carrière en termes d’interview, en particulier si vous interviewez dans des lieux de travail axés sur l’ingénierie tels que Google. D’autres entreprises pourraient toutefois se soucier de cet aspect.

D'après mon expérience, les demandes en structure d'algorithme / de données peuvent parfois apparaître comme un "élitisme de programmeur" où les geeks alpha se bousculent pour montrer qui est le plus intelligent. Il est toujours bon de savoir ce qui se passe, mais il existe un grand nombre de tâches de programmation où vous n'aurez jamais besoin de savoir comment utiliser un arbre rouge / noir ou coder une recherche boyer-moore.

Je vous conseillerais d'en apprendre davantage sur les sujets si vous les trouvez intéressants et si vous avez un projet personnel où vous pouvez les bricoler, sinon vous pourrez probablement vous en passer sans eux pour l'instant.

PS Une connaissance approfondie des structures de données rudimentaires (listes chaînées, dictionnaires, hashtables, etc.) devrait être une connaissance obligatoire pour tout programmeur DS.

konrad
la source
7

Alors vraiment pourquoi tout cet accent sur les structures de données?

Deux raisons.

D'une part, cela montre que vous pouvez penser au problème en termes abstraits, plutôt qu'en termes de langage de programmation spécifique. Savez-vous pourquoi une table de hachage peut être un choix meilleur ou pire qu'un arbre rouge-noir dans une situation donnée, quelle que soit l'implémentation sous-jacente?

D'autre part, il y a un nombre effrayant de personnes interrogées pour des emplois qui mentent simplement sur leur expérience et qui ont très peu de capacités de programmation, voire aucune. Les questions sur les structures de données sont un moyen rapide d'éliminer ces personnes.

John Bode
la source
Je vais présenter ici un avis susceptible de susciter la controverse. La question de savoir pourquoi une structure de données ou une autre a tendance à être liée à l'efficacité et à la performance. Que disons-nous aux développeurs de ne pas faire? Pas d'optimisation prématurée! À moins que vous ne sachiez, en définissant votre profil, que le choix de la structure de données pose des problèmes de performances, celui qui vous convient le mieux est celui que vous connaissez le mieux. Toute autre décision est une optimisation prématurée, et donc diabolique!
Tom W
2
Choisir la bonne structure de données en fonction de l'applicabilité et des caractéristiques de performance attendues indépendamment de la mise en œuvre sous-jacente n'est pas un exemple d'optimisation prématurée.
John Bode
La cueillette du tas de fibonacci sur le tas binaire peut être. Utiliser tas vs liste (quand tas est approprié) ne l’est pas.
user470365
5

Ils sont fondamentaux, mais aussi, sur quoi voudriez-vous interroger les diplômés? Ils peuvent ou non avoir de l'expérience en dehors de leurs cours. Leur parcours peut avoir couvert davantage les technologies Microsoft que Java, ou inversement. Les structures de données sont un terrain d'entente.

Ian
la source
+1 pour quoi d'autre voudriez-vous interroger les diplômés, car il n'y a rien d'autre que tous les diplômés en science de la communication devraient savoir que vous connaissez également.
Ian
4

Souvent, le meilleur code évite de réinventer les structures de données de bas niveau. Ceci est particulièrement vrai dans les langages de haut niveau. J'ai remarqué une tendance aux questions de structure de données de bas niveau, même dans les emplois CRUD. YMMV, mais il semble que l’accent mis sur l’expertise scientifique en piratage informatique ait éclipsé les autres compétences qui en font un excellent développeur:

  • gestion de projet / temps: être capable de suivre le monde réel régi par les affaires, pas une nouvelle liste chaînée qui fonctionne 1% plus rapidement.
  • un minimum de compétences sociales: un développeur qui est arrogant et ne peut pas s'entendre n'est qu'un ancre.
  • la capacité d'apprendre de nouvelles choses rapidement et en continu: les structures de données changent peu au fil des ans ... mais tout le reste. Les structures de données sont d'excellents fondamentaux et chaque développeur devrait les connaître assez bien, mais un comptable n'est pas testé sur ses compétences en matière de division quand il se présente pour une interview. Les grands développeurs sont le type de personnes qui peuvent découvrir de nouvelles choses et les aimer.

Les structures de données sont excellentes. Les structures de données sont importantes. Chaque programmeur devrait les comprendre. Cependant, nous sommes devenus obsédés par pousser ces fondamentaux hors de leur place. Ce n'est pas TOUT sur les structures de données, et dans 99% des cas, il n'est pas nécessaire de poser des questions autres que les bases des structures de données. Si vous interviewez un comptable, demandez-lui bien ce qu'est 81 divisé par 9, mais si vous continuez à demander "Quelle est la racine du cube de 98425454242412 * 4512324? ... sans calculatrice!" alors, vous effrayerez un bon pourcentage des personnes raisonnables, intelligentes, talentueuses et agréables que vous auriez pu avoir. Demandez-leur s'ils peuvent créer un modèle de données relationnel de base, s'ils peuvent utiliser les structures de tableau améliorées fournies par le cadre approprié, et leur demander s'ils peuvent expliquer quand une recherche binaire est plus rapide qu'une recherche à plat, mais il n'y a pas de raison d'aller trop loin au-delà de cela. S'ils peuvent faire ces choses, alors commencez à chercher le plus gentil, le plus professionnel et le plus créatif du groupe.

J'adore l'écriture de Joel, mais je pense que son "Java Schools" est totalement faux. Il y a beaucoup de choses qui peuvent prouver que quelqu'un est intelligent, au-delà de la maîtrise de C ++. Pensez-y, vous pouvez parler à quelqu'un pendant 10 minutes sans lui poser de questions sur l'arithmatique des pointeurs, et avoir une assez bonne idée de savoir si c'est le type qui peut faire avancer les choses et résoudre les problèmes. Nous n'avons pas besoin d'être comme ça:

Interviewer: "Parlez-moi de vos réalisations."

Coder: "Dans mon dernier poste, j'étais le développeur unique d'un système ERP personnalisé pour une entreprise financière valant un milliard de dollars. Nous avons livré des mois à l'avance, et le système est en production depuis 3 ans."

Interviewer: "Laissez-moi clarifier. Parlez-moi de vos réalisations en matière de programmation "

Codeur: "Umm ..."

Intervieweur: "Par exemple, avez-vous déjà créé votre propre liste de liens?"

Coder: "... [sortant]"

Morgan Herlocker
la source
Intéressant - bonne liste. Que diriez-vous d'un regard légèrement différent? 1. gestion de projet / temps: être capable de préparer les choses de manière à ce que les structures de données ne perdent qu'une petite partie du temps d'interview. 2. un minimum de compétences sociales: un développeur capable de comprendre que les intervieweurs veulent simplement vérifier rapidement les structures de données de base avant de passer à des domaines plus intéressants. 3. la capacité d'apprendre de nouvelles choses rapidement et en continu, sans être dérangé par le manque de connaissances sur les bases de la structure de données.
moucher
@gnat - C'est bien aussi. Je suppose que ce que je veux dire, c'est que la compréhension la plus approfondie des principes fondamentaux ne parle pas de la capacité globale au-delà d'un certain point, mais il y a une tendance à supposer exactement le contraire. Les structures de données sont quelque chose que la plupart des gens apprennent par quelqu'un d'autre (généralement un enseignant). Je veux savoir ce qu’ils peuvent apprendre par eux-mêmes, car c’est ainsi que fonctionne le monde réel. Les bons programmeurs peuvent concevoir des systèmes raisonnables basés sur les meilleures pratiques. Les grands programmeurs peuvent apprendre les systèmes fous écrits par des programmeurs horribles utilisant les pires pratiques et les faire fonctionner.
Morgan Herlocker
1
J'imagine que le type qui a travaillé sur le système ERP ne convient pas à l'équipe.
Christopher Mahan
4

Être un bon programmeur ne signifie pas être capable d'apprendre des langages et des frameworks. Il s'agit de pouvoir élaborer des solutions à des problèmes complexes. Pour que ces solutions soient efficaces et fiables, il faudra presque toujours compter sur de bons algorithmes et une utilisation appropriée des structures de données. Connaître les structures de données existantes ne suffit pas. Vous devez comprendre que les structures de données suffisent à utiliser celle qui convient pour le problème. Les listes et les cartes offrent des fonctionnalités intéressantes, mais elles entraînent des coûts, et utiliser le mauvais peut nuire considérablement aux performances de votre logiciel.

Un bon intervieweur le sait et essaie de déterminer si vous pouvez être utile à son équipe ou à son entreprise. Les langues que vous utiliserez dans deux ans peuvent être très différentes, mais le besoin d'algorithmes et de structures de données efficaces ne changera pas.

cdkMoose
la source
2

Les structures de données, la complexité temporelle, la manipulation de la mémoire et les pointeurs sont tous des principes fondamentaux que toute personne qui s'appelle informaticien devrait connaître de façon innée. N'importe quel code-singe peut apprendre une langue et apprendre à l'utiliser, mais les professionnels de la CS et les étudiants doivent se distinguer, c'est savoir non seulement comment utiliser une liste chaînée ou une carte de hachage, mais POURQUOI.

Le WHY est ce qui nous distingue vraiment du script de base kiddie, du code singe et du grognement du monde informatique. POURQUOI utiliser une table de hachage au lieu d'une liste chaînée, POURQUOI ma table de hachage devrait-elle présenter une densité de cluster d'environ 0,6 à 0,8; POURQUOI devrais-je utiliser ici une liste liée de manière circulaire plutôt qu'une liste doublement liée? POURQUOI mon code devrait-il fonctionner à l'efficacité «x» dans le pire des cas et «y» dans le cas moyen?

Ces structures de données de base et cette connaissance non seulement de la façon dont elles sont utilisées (le comment devrait être dans tous les programmes), mais également de la raison pourquoi elles sont utilisées, ce qui tend à être plus que ce qu'elles recherchent dans ces cas-là.

Beaucoup d'endroits vous feront écrire le code dans un langage avec lequel vous êtes firmi, mais c'est plus une généralité, vu que C n'est vraiment plus la langua franca du monde de la programmation, et que le pseudo code structurant peut être un méli-mélo et tout. sur la place et, dans la plupart des cas avec pseudo code / code p & p pas vraiment enseigné, bas impossible à traiter.

Jeff Langemeier
la source
0

Les structures de données sont la base fondamentale de tous les programmes. Vous n'avez pas nécessairement besoin de bien les comprendre, mais vous devez absolument savoir comment ils fonctionnent.

Pourquoi? Parce que tout votre code interagit et manipule des données. Si le fichier ne peut pas être stocké dans une structure, il ne peut pas être utilisé. Les données sont comme les matériaux de construction d'une maison. Jusqu'à ce que vous le mettiez dans une structure, vous avez juste une pile inutile de planches.

Une fois que vous avez décidé sur la façon de penser et définir votre ensemble de données, alors vous pouvez commencer à l' utiliser pour faire des choses, la partie de l' algorithme classique du duo. Chaque programme que vous écrivez utilise une structure de données, bien que dans de nombreux cas, cette structure soit si simpliste qu'elle n'existe presque pas. Quelques variables pour les données d'état et nous avons terminé!

Une fois que vous dépassez les programmes triviaux, presque tout nécessite une structure de données. Que préférez-vous, un architecte professionnel qui conçoit votre gratte-ciel avec les meilleures pratiques et les mathématiques, ou un oncle joe bob qui commence immédiatement à construire?

Spencer Rathbun
la source
-2

S'appuyer sur ce que dit @Pelshoff , c'est montrer que vous savez ce que vous faites. Si vous utilisez une LinkedList pour tout, cela peut indiquer que vous ne savez pas ce que vous faites ou que vous ne vous souciez pas de vous arrêter et de réfléchir au problème. En plus de cela, au moins le cours sur les structures de données que j'ai suivi aborde la théorie de base de la complexité de ces structures de données, ce qui est très important pour les grands ensembles de données. Ce serait pourquoi des entreprises comme Amazon ou Microsoft feraient une telle chose.

Avant de prendre un cours sur la structure de données, je dois dire que j’étais persuadé qu’ils n’étaient pas importants, mais au moins, je pouvais reconnaître une liste chaînée (ou ArrayList) qui n’était pas pratique ou qui comportait des inconvénients.

Jetti
la source
"Si vous utilisez une LinkedList pour tout, cela peut indiquer que vous ne savez pas ce que vous faites" ou si vous êtes un programmeur Lisp :-)
Peter Alexander
@ Peter - ce qui prouverait mon argument, vous ne savez pas ce que vous faites! ;)
Jetti
cela semble être basé sur un lien mort à la réponse supprimée - assez déroutant pour les lecteurs. Souhaitez-vous éditer pour prendre soin de cela?
Gnat
-2

Que vous écriviez un bon code ou non est une déclaration subjective. Il est important de savoir que le code fonctionnel ne produit pas toujours un bon code.

Cela dit, les structures de données sont importantes car elles ressemblent aux travailleurs en coulisses que vous dirigez, en tant que programmeurs. Il est vrai que vous pouvez appeler des méthodes sur une structure sans vraiment comprendre ce qu’il fait et vous pouvez utiliser une structure sans vraiment savoir comment les données sont stockées, mais connaître ces détails vous préparera mieux à comprendre quand il est approprié d’utiliser une structure. un autre.

Le fait de savoir, par exemple, que vous pouvez parcourir dans les deux sens une liste à double lien et uniquement transférer à travers une liste à lien unique peut vous aider à déterminer quelle structure est importante lors du stockage de données. Vous pouvez prendre une décision encore plus pédagogique en sachant qu’une liste à lien unique peut potentiellement entraîner une surcharge de mémoire en termes de consommation de mémoire (car elle ne contient pas de pointeur sur les éléments précédents). Par conséquent, si vous n’avez besoin que de faire une itération vers l’avant dans une liste, vous pouvez économiser de la mémoire en utilisant une structure appropriée.

Ce ne sont que de petits exemples et, finalement, si vous sentez que votre carrière se passe bien sans une connaissance intime des structures de données, alors vous n’avez peut-être pas besoin d’apprendre davantage. Comprendre ce qui se passe sous le capot, cependant, peut vraiment aider à transformer un code fonctionnel en bon code.

Jason
la source
-3

Les structures de données sont des blocs de construction de nombreuses choses que vous voulez faire. Si vous connaissez les utilisations de chaque structure de données, ses faiblesses et ses points forts, vous pourrez facilement résoudre les problèmes.

Par exemple, nous avions l'obligation de gérer des milliers d'objets. De temps en temps, nous devons mettre à jour l'horodatage d'un objet en fonction de son ID. De temps en temps, nous devions supprimer les objets non mis à jour pendant plus de X minutes.

Si vous connaissez vos structures de données, vous pouvez facilement définir le problème. Il est également très facile de trouver une solution. Lorsqu'un programmeur ne connaissant pas assez de structures de données essayait de trouver une solution, sa solution était maladroite. Il était comme vous - intelligent, programmeur de code, capable d'apprendre rapidement les frameworks. Mais sans connaissance des structures de données, il devait inventer la roue lui-même. Plus que cela - il avait du mal à comprendre des solutions plus simples car celles-ci étaient basées sur des structures de données qu'il ne comprenait pas, telles que les arbres rouges-noirs (votre ancien TreeMap en Java).

Je dirais donc que l’important est de savoir comment et quand utiliser chaque structure de données sans avoir à y penser. Mais je ne pense pas qu’il soit possible d’y parvenir sans comprendre réellement leur fonctionnement.

daramasala
la source