web-dev-qa-db-fra.com

Quelle est l'importance d'étudier les algorithmes et la théorie est de devenir un excellent programmeur?

Dupliquer possible:
[.____] Devrais-je continuer à investir dans des structures de données et des algorithmes?

Je suis un étudiant CS. Je veux devenir un très bon programmeur, que dois-je faire pour devenir un excellent programmeur? Autre puis écrit beaucoup de code, j'ai entendu dire que des algorithmes et la théorie (logique!) Est une aide. Que recommandez-vous de devenir le meilleur? Qu'est-ce que je dois lire? Qu'est-ce que je dois étudier?

12
Snow_Mac

La programmation est aussi vaste et diversifiée qu'il y a des programmes. Vous pourriez avoir une carrière très fructueuse sans jamais avoir à vous soucier de la complexité algorithmique. Je développe des applications de type de base de données qui aident à sauver des vies tous les jours mais n'ont jamais eu à calculer la notation Bigo de tout ce que j'ai produit.

Cela dit, l'algorithmique est une partie importante du domaine et peut être un bon atout si vous l'apprenez. L'apprentissage Il ouvrira votre esprit à certains problèmes que vous pourriez rencontrer, sur la manière de la mesurer et cela vous enseignera des modèles courants que vous pouvez utiliser pour les résoudre.

Alors oui, l'étude de l'algorithmique sera vous faire un meilleur programmeur que je suis certain.

Je pense qu'une question plus importante que vous devriez vous poser à ce stade est le type de problèmes que vous souhaitez résoudre en carrière. Sachant que cela vous aidera à obtenir les bons outils pour vous donner un début de tête. L'algorithmique est un outil théorique important pour avoir, mais il est donc ergonomie cognitive , schémas architecturaux , théorie de l'information . Il existe également de nombreuses connaissances sur Terre, telles que l'apprentissage des différents schémas dans le processus de développement logiciel qui sont souvent fronçés comme ennuyeux et inintéressants tout en apprenant le commerce mais jouent un rôle crucial lors de la création de logiciels dans l'industrie. .

Ce n'est en aucun cas une liste complète mais toutes sont, de mon expérience, tout aussi précieuses pour vous faire un excellent programmeur. Tout dépend des problèmes que vous souhaitez résoudre avec la programmation et l'approche que vous souhaitez utiliser pour les résoudre.

--- Edit --- Comme Ehthz mentionné dans les commentaires après avoir appris les compétences qu'ils restent avec vous tout le chemin. Donc, même si je n'ai jamais fait une analyse complète en profondeur de Bigo d'un système, les connaissances restent disponibles, je suppose que cela vous donne un sens supplémentaire par lequel vous obtenez une sensation pour un système. Une fois, j'ai rencontré un système de journalisation simple dont la mise en œuvre a couru dans une commande factorielle. Je pense que le programmeur a appris sur la complexité algorithmique qu'il aurait remarqué et l'éloigné de celui-ci et que j'ai eu la vieille rhétorique ", il ne s'agit que de la journalisation, cela n'affecte pas le temps d'exécution". Bien sûr, il n'était pas celui qui devait dire au client qu'ils devaient attendre environ 6,4 milliards d'années avant que leur importation de données soit terminée.

Cela serait vrai pour presque tous un tel organe fondamental sur la connaissance. Même si vous n'utilisez pas activement, les connaissances acquises restent et influencent vos tâches quotidiennes. Apprendre une langue, une méthodologie ou un système spécifique est bon pour le court terme, mais est condamné par obsolescence avant même d'ouvrir le livre.

13
Newtopian

Pour devenir un véritable programmeur, vous devez absolument étudier des algorithmes à au moins une certaine mesure. Il y a beaucoup là-bas qui n'est pas crucial pour la programmation, mais sans au moins une quantité raisonnable de connaissances, vous êtes à peu près enfoncé.

Il y a un certain nombre de classiques sur le terrain, très évidemment:

  1. l'art de la programmation informatique, par Donald Knuth
  2. Introduction aux algorithmes, par Cormen, Leiserson, Rivest and Stein.

Personnellement, j'ai tendance à préférer Knuth, mais les deux sont totalement adéquats, et l'autre couvre davantage dans la voie des nouveaux algorithmes (bien que la nouvelle édition de Knuth soit sans aucun doute meilleure à cet égard - je n'ai pas mis à jour mes copies depuis Je les ai achetés quelque part il y a environ 30 ans.

7
Jerry Coffin

Absolument essentiel. Central. Rien ne compte plus.

Certaines personnes prétendent ne jamais utiliser la malbouffe apprise dans la classe d'algorithmes.

Pourtant, étrangement, ils semblent savoir quand éviter les boucles imbriquées et utiliser des pointeurs.

Ils peuvent donc prétendre qu'ils ne l'utilisent jamais. Mais cela influence clairement leur codage.

5
S.Lott

Étudier les structures de données. Connaître les bonnes structures de données est une aide précieuse pour savoir comment organiser un programme et les algorithmes applicables ont tendance à les suivre.

E.g. Apprenez à comprendre à partir de spécifications (d'une seule fonction ou d'un programme entier) Si vous pouvez conserver des données dans un tableau ou si vous avez besoin d'une table de hachage, d'un arbre, etc.

En outre, connaissez vos bibliothèques; Les langages de programmation modernes ont tendance à organiser leurs bibliothèques autour de structures de données telles que des tableaux/vectoriels, des ensembles, des cartes, etc. Vous n'aurez peut-être jamais à mettre en œuvre un arbre noir vous-même, mais savoir quand vous en avez besoin et quelle partie de la bibliothèque standard implantait une (ou une structure similaire en termes de performance).

4
Fred Foo

Cela dépend de ce que vous entendez par "grand programmeur". Je divise (arbitrairement) diviser la grandeur en trois bacs également:

  1. Créatif: Face à un nouveau problème difficile, vous déterminez rapidement une solution efficace.
  2. Responsable: vous produisez un code lucide, clair, maintenable et jamais, ne casse jamais la construction
  3. Encyclopédie: Compte tenu d'un problème obscur interface avec le monde extérieur des bibliothèques, des cadres, des OSES, etc., savez instantanément comment y remédier.

Idéalement, nous aimerions tous être tous types, mais ce n'est pas généralement possible. L'endroit où les algorithmes et la théorie aideront vraiment est le premier type. En tant que chercheur en informatique, j'utilise que tout le temps, de type 2 expertise moins souvent que je l'aimerais et que je le tiens rarement.

Quant à une référence: le manuel d'algorithmes CLR est un classique et une bonne lecture. Il y a probablement des utilisations de classe en ligne en ligne qui présentent bien - essayez MIT OpenCourswareware. La chose la plus importante, IMHO, est d'obtenir une forte intuition pour la complexité asymptotique. Si vous le faites en suivant la Chemin réglé dans un texte comme CLR, vous vous retrouverez également avec une alphabétisation de base des structures de données et des algorithmes qui vous serviront bien.

2
user18793

Comment un excellent programmeur est-il mesuré? Comment voulez-vous être mesuré?

Les réponses que vous donnez pour ces questions pourraient vous aider à vous influencer aujourd'hui, mais elles continueront de se retrouver tout au long de votre carrière.

Avoir des compétences techniques sera certainement fondamentale pour réussir. Cependant, afin de vous distinguer, il existe des options. Il y a souvent plus d'un chemin vers presque n'importe quelle destination. Devenir peut-être un excellent programmeur peut être obtenu par une capacité supérieure à disséquer et à digérer un domaine et une étude croisée d'un domaine particulier peut maintenant aider. Peut-être que cela peut être atteint de manière moins spécifique, grâce à une capacité indispensable d'identifier l'intention de l'utilisateur grâce à une compréhension de la psychologie et de la sociologie. Peut-être que cela en sachant davantage sur les affaires: être efficace au marketing afin que vous sachiez ce que les gens veulent avant qu'ils soient même conscients qu'il peut exister, puis de les convaincre qu'ils ne le veulent pas seulement, mais en dépendent. C'est peut-être autre chose.

Le conseil que je donnerais est que pendant que la programmation pourrait être un métier que vous aimez, n'essiez pas délibérément une étude plus profonde d'autres domaines où vous avez un talent ou un intérêt naturel.

2
JustinC

C'est une petite question difficile à répondre, d'autant plus que nous obtenons une abstraction/des bibliothèques plus puissantes, il y aura peu besoin d'apprendre ces choses.

Phase I:

Des milliers de dirigeants d'entreprise peuvent continuer à programmer sur un outil appelé Microsoft Excel même sans savoir qu'ils sont en train de programmer. Ils peuvent continuer à définir un flux de travail (heuristique), de données de tri, gérer des données, des données de requête. Automatiser leurs tâches et ce qui n'est même pas sans connaître un mot de programmation. Excel figure sur ce que les bons algorithmes sont pour eux quand ils trient et recherchent.

Maintenant, comment vendez-vous l'idée d'algorithmes pour eux?

phase II:

De retour dans la journée, vous souvenez-vous qu'il serait impossible de mettre en œuvre une application décente sans se souvenir réellement de l'API. Vous avez dû vous en souvenir ou continuer à les regarder dans le manuel. L'espace CTRL à Eclipse a largement éliminé la nécessité de toute telle chose aujourd'hui.

phase III:

Dans le proche avenir, les IDE et les outils auront une intelligence pour suggérer quelle solution (algorithmiquement) serait plus appropriée pour vous sur la base des intrants que vous donnez. Ou il pourrait y avoir des fonctions comme trier () et al. Ce qui entraînera intelligemment quel algorithme vous auriez besoin d'examiner la complexité de l'heure et de l'espace.

Théorie de l'eau de la complexité:

Les abstractions gagnent beaucoup de temps, vous n'avez pas besoin de vous soucier d'un niveau de complexité qui est déjà traité par la bibliothèque ou la langue. Chaque fois qu'une abstraction est inventée, leur ajout de la nécessité d'examiner la complexité en dessous.

0
kamaal