web-dev-qa-db-fra.com

Devrais-je continuer à investir dans des structures et des algorithmes de données?

Ces jours-ci, j'investit fortement dans les structures et les algorithmes de données et j'essaie de résoudre des énigmes de programmation.
[.____] J'essaie de coder et de résoudre avec Java et clojure.

Suis-je gaspiller mon temps? Devrais-je investir davantage dans les technologies et les cadres que je connais déjà afin d'acquérir des connaissances plus approfondies (les ou les outs) et de pouvoir les coder plus rapidement?

En étudiant des structures de données et des algorithmes, je vais devenir un meilleur programmeur ou ces sujets ne sont que d'importants au cours des années de collège?

28
Chiron

Il est tout à fait possible de passer la plupart du temps/tout votre carrière à faire un travail important et utile, avec seulement une connaissance minimale des algorithmes et des structures de données.

Le minimum minimum Niveau de connaissances pour les algorithmes et les données de données de données, afin de réussir, vous obligera à:

  • soyez conscient de la plupart d'entre eux (y compris la lecture de nouvelles occasionnellement, car ils sortent)
  • sachez où trouver de bonnes implémentations de travail, testées
  • être capable de comparer des algorithmes et leur utilité
  • être capable de copier correctement l'une d'un exemple de source ouverte à votre environnement spécifique, avec un petit morceau de peau de peau

Il y a non * maximum * . Si vous voulez, vous pouvez prendre votre étude au niveau du doctorat et au-delà. L'utilité est directement liée au type d'emplois qui vous intéressent et à quel type de travail vous trouverez le plus intéressant et enrichissant.

Cela dit, comme une ligne directrice approximative (mais pas absolue), plus intense à basse ressource et moins intensive de ressources et moins automatisée la langue, le cadre et l'application que vous travaillez seront, plus le niveau de compétence requis sera élevé quand il s'agit aux algorithmes et aux structures de données. Par exemple, la mise en œuvre algorithme Ukkonen en montage sera probablement, mais pas nécessairement, vous voudrez que la compréhension de la maîtrise de l'algorithme et des structures de données impliquées.

Dans votre situation spécifique, passez d'un fichier Java Contexte de développement pour travailler sur l'IOS, toutes les autres choses étant égales, attendez-vous à une demande légèrement supérieure à votre compréhension générale des algorithmes et des structures de données. Vous " Je voudrais pouvoir courir efficacement sur un appareil avec moins de ressources disponibles. Aussi, attendez-vous à ajouter quelques nouvelles catégories à votre Arsenal - plus particulièrement, vous voudrez en savoir plus sur la gestion de la mémoire.

24
blueberryfields

Nah. Si vous êtes débutant puis essayer d'entrer dans l'image grand choses comme la programmation et l'interface utilisateur telle que vous retient. Finalement, vous avez besoin d'y aller, et d'apprendre des cadres plus grands ... comment utiliser les structures de données et algorithmes que les autres ont écrit. Lorsque vous êtes débutant mais il est bon de tenir à des questions de portée limitée.

Structures et algorithmes données sont essentiellement la base de tout, même si vous aurez probablement jamais écrire un de vos propres Une fois passé stade débutant. Les connaissant, ou tout au moins les avoir connus, vous fera un meilleur développeur à la fin. Vous saurez quand et pourquoi utiliser chacun parce que vous saurez comment ils fonctionnent. De plus, ce qui rend générique vos algorithmes et structures de données afin qu'ils puissent travailler avec tout type ou de type avec interface X vraiment IS quelque chose que vous allez utiliser pour le reste de votre carrière.

Je vois trop de gens sauter dans des choses comme Qt qui finissent par poser des questions qui montrent zéro connaissance de C++ (par exemple). Ils essaient de sauter trop d'étapes et à la fin il leur faut plus de temps pour apprendre. Je dirais que vous êtes sur la bonne voie.

14
Edward Strange

Vous ne gaspillez pas votre temps.

Si, au cours de votre travail, vous devez utiliser un outil ou un cadre que vous n'avez pas utilisé précédemment, vous l'apprendrez et utilisez-le.

Toutefois, si vous devez utiliser une structure de données ou une algorithme que vous n'avez pas utilisée auparavant, des chances que vous ne saurez même pas qu'il existe, et vous résoudrez votre problème en utilisant une technique horriblement optimale qui prend un tas de plus effort et échelle terriblement.

Ce que j'essaie de dire, c'est que c'est le genre de choses que vous n'apprenez pas simplement en faisant, vous devez l'apprendre par apprendre, soit dans une situation académique, soit par des investissements personnels d'effort, comme vous faites maintenant.

9
Carson63000

En pratique, soyez conscient de quelles sont les structures de données disponibles, quelles sont leurs caractéristiques de complexité, où obtenir de bonnes implémentations d'entre eux et où vous conservez votre copie de Introduction aux algorithmes Pour rechercher les détails plus tard. .

6
smithco

J'ai passé beaucoup de temps à pirater en C/C++ avec OpenGL. Je connais assez bien les langues et API ... et je suis devenu un développeur et un programmeur raisonnable à cause de cette expérience. Cela dit, les connaissances réelles algorithmiques nécessaires pour résoudre divers problèmes rencontrés, je n'ai tout simplement pas été capable de saisir.

S'exprimant d'une expérience personnelle, se concentrer sur les applications de construction va être une perte de temps si vous ne connaissez pas la théorie derrière les domaines problématiques qui concernent ce que vous essayez de construire.

Pour de nombreux types de logiciels différents, ces domaines découleront des principes fondamentaux que vous apprenez d'étudier les algorithmes, en plus de sa propre théorie spécifique basée sur une niche (par exemple, algèbre linéaire dans des graphiques informatiques, la théorie du nombre/de l'information dans la cryptographie, etc.).

Vous n'avez pas nécessairement besoin de devenir un enfant informatique derrière tout, mais de faire ce que vous faisiez à l'époque de ce message est un chemin très très nécessaire pour descendre au moins une fois dans son voyage de programmation - que ce soit ou si pas ils sont autodidactes.

1
about blank

Si c'est ce qui vous rend heureux, alors vous devriez certainement rester avec elle. Si vous êtes inquiet, vous n'utilisez pas assez de théorie, envisagez un projet de théorie. Construisez une petite langue de programmation, comme - potion , à partir de zéro. Une mise en œuvre complète utilisera des tables de hachage, des graphiques, des arbres et une vaste gamme d'algorithmes. Si cela semble intéressant, vous pouvez plonger plus profondément dans l'optimisation, la génération de code natif ou l'extensibilité des utilisateurs.

Vous allez devenir un meilleur programmeur lorsque vous restez intéressé et concentré, pas lorsque vous travaillez sur des projets qui semblent pratiques mais un peu ennuyeux.

Down le trou de lapin, Dorothy!

1
Scant Roger

Je suppose que si vous ne les connaissez pas bien, vous ne trouverez pas de raisons de les utiliser. Je semble trouver des utilisations pour eux tout le temps. Mais je dois admettre qu'avec les améliorations des génériques de la dernière demi-douzaine d'années environ la nécessité de rouler de moins en moins fréquemment. Cela ne supprime toujours pas les avantages de savoir comment et quand les utiliser et ils peuvent générer grandement simplifier le code compliqué.

0
Dunk