88 votes

Choix du langage de programmation pour l'apprentissage des structures de données et des algorithmes

Qui langage de programmation recommanderiez-vous pour en apprendre sur les structures de données et algorithmes ?

Considérant les éléments suivants:

  • L'expérience personnelle
  • Fonctionnalités de la langue (pointeurs, OO, etc)
  • Pertinence pour l'apprentissage de la DS ET UN des concepts

Je demande car il y a des livres là-bas qui sont de programmation indépendant de la langue (écrite à partir d'une perspective Mathématique, et l'utilisation de pseudo). Si j'ai appris de l'un de ces, je voudrais choisir un langage de programmation pour le code et exécuter les algorithmes.

Ensuite, il y a d'autres livres qui introduisent une DS ET UN des concepts avec des exemples écrit dans une langue de programmation - et je voudrais le code de ces algorithmes ainsi - ainsi, dans une certaine mesure, la langue prend le livre.

De toute façon, je dois choisir une langue, et je préfère garder tout au long de. Mettant de côté les préférences linguistiques personnelles, lequel est le meilleur pour cette fin?

101voto

cletus Points 276888

La réponse à cette question dépend exactement ce que vous voulez apprendre.

Python et Ruby

De haut niveau des langages comme Python et Ruby sont souvent proposés car ils sont de haut niveau et la syntaxe est tout à fait lisible. Cependant, ces langues ont tous des abstractions pour le commun des structures de données. Il n'y a rien qui vous empêche de mise en œuvre de vos propres versions de l'apprentissage de l'exercice, mais vous pouvez trouver que vous êtes en train de construire de haut niveau des structures de données au-dessus des autres niveau élevé de structures de données, ce qui n'est pas forcément utile.

Aussi, Ruby et Python sont typées dynamiquement langues. Cela peut être bon, mais il peut aussi être source de confusion pour les débutants et il peut être plus difficile (à l'origine) pour attraper des erreurs, car en général, ils ne se manifeste qu'à l'exécution.

C

C est à l'autre extrême. Il est bon si vous voulez vraiment apprendre des détails de bas niveau, comme la façon dont la mémoire est gérée, mais la gestion de la mémoire est tout à coup une considération importante, comme dans l'utilisation correcte de la fonction malloc()/free(). Qui peut être une source de distraction. Aussi, C n'est pas orienté objet. Ce n'est pas une mauvaise chose, mais simplement de noter.

C++

C++ a été mentionné. Comme je l'ai dit dans le commentaire, je pense que c'est un terrible choix. C++ est affreusement compliqué, même en simple d'utilisation et a un montant ridicule de "pièges". Aussi, le C++ n'a pas de classe de base commune. Ceci est important parce que les structures de données comme les tables de hachage de s'appuyer sur l'existence d'une classe de base commune. Vous pourriez mettre en œuvre une version pour un nominal de la classe de base, mais c'est un peu moins utile.

Java

Java a également été mentionnée. Beaucoup de gens aiment à détester Java et c'est vrai que la langue est extrêmement détaillé et manque de quelques de la de la plus moderne des fonctionnalités du langage (par exemple, des fermetures) mais rien de ce qui compte vraiment. Java est statiquement typé et a la collecte des ordures. Cela signifie que le compilateur Java va attraper de nombreuses erreurs qui typées dynamiquement langues ne va pas (jusqu'à l'exécution) et il n'y a pas de traiter avec la segmentation des défauts (qui n'est pas à dire que vous ne pouvez pas présenter une fuite de mémoire en Java; vous pouvez bien évidemment). Je pense que Java est un excellent choix.

C#

C# la langue est comme une version plus moderne de Java. Comme Java, il est géré (garbage collector) intermédiaire langage compilé qui s'exécute sur une machine virtuelle. Toute autre langue énumérés ici, à l'exception de C/C++ aussi s'exécuter sur une machine virtuelle, mais Python, Ruby, etc sont interprétés directement plutôt que compilés en bytecode.

C# a les mêmes avantages et inconvénients que Java, dans le fond.

Haskell ( ... )

Enfin, les langages fonctionnels: Haskell, OCaml, Régime/Lisp, Clojure, F#, etc. Ces réfléchir à tous les problèmes dans une manière très différente et sont vaut la peine d'apprendre à un certain point, mais encore une fois on en revient à ce que vous voulez apprendre: la programmation fonctionnelle ou de structures de données? Je collerais à l'apprentissage d'une chose à la fois, plutôt que de confondre la question. Si vous ne vous en apprendre un langage fonctionnel à un certain point (que je recommande), Haskell est un excellent choix.

Mon Avis

Choisissez Java ou C#. Les deux ont gratuit, excellente Ide (Eclipse, Netbeans et IntelliJ Community Edition pour Java, Visual Studio Express pour le C#) qui font de l'écriture et l'exécution de code d'un composant logiciel enfichable. Si vous n'utilisez aucun de données native structure plus complexe qu'un tableau et tous les objets que vous vous écrire, vous apprendrez essentiellement la même chose que vous feriez dans C/C++, mais sans avoir à gérer la mémoire.

Laissez-moi vous expliquer: extensible table de hachage doit être redimensionnée si suffisamment d'éléments sont ajoutés. La mise en application qui oblige à faire quelque chose comme le doublement de la taille de la sauvegarde de la structure de données (généralement un tableau) et la copie des éléments existants. La mise en œuvre est essentiellement la même dans tous les langages impératifs, mais en C/C++, vous aurez à traiter avec la segmentation fauls lorsque vous n'avez pas à allouer ou libérer quelque chose correctement.

Python ou Ruby (il n'a pas vraiment d'importance qui) serait mon prochain choix (et très proche pour les deux autres) tout simplement parce que le typage dynamique qui pourrait être difficile au premier abord.

57voto

codaddict Points 154968

Je recommanderais Java principalement parce que:

  • collecte des ordures
  • références
  • riches collections

EDIT: électeurs en bas s'il vous plaît expliquer.

34voto

Taylor Leese Points 18895

À mon avis, C serait le meilleur langage pour apprendre les structures de données et les algorithmes, car il vous obligerait à écrire le vôtre. Cela vous obligera à comprendre les pointeurs, l'allocation dynamique de mémoire et les implémentations à la base des structures de données populaires telles que les listes chaînées, les tables de hachage, etc. Nombre d'entre elles sont des choses que vous pouvez considérer comme allant de soi dans les langages de niveaux supérieurs (Java, C #, etc.). ).

20voto

mvid Points 4312

Python est grande. Facile à lire, complet. Si vous allez travailler avec des pseudo-code, Python va paraître assez familier.

Python est déjà les algorithmes de la langue de son choix à l'UC Irvine, où il est décrit comme suit:
"Python représente un algorithme langage orienté qui a été cruellement défaut dans l'éducation. Les avantages de Python inclure son manuel de syntaxe et de l'interactivité qui encourage l'expérimentation."

Python travaille également à un débutant de manière conviviale avec Gato, un graphique de l'outil de prise. L'apprentissage d'Algorithmes et Structures de Données est un haut qui peut aider en étant visuel, quelque chose qui Gato le rend facile à faire (sans apprentissage complexes graphique bibliothèques)

16voto

Ernelli Points 2133

Si l'objectif est seulement de se renseigner sur les structures de données et algorithmes, je dirais JavaScript. Vous pouvez exécuter votre code dans un navigateur. Vous avez une très flexible objet de manipulation et vous pouvez vous concentrer entièrement sur les structures de données et algorithmes et pas de gestion de la mémoire, des constructions d'un langage ou d'autres choses qui vont prendre l'attention loin de l'ordinateur réel science de l'apprentissage.

Le bonus est que vous pouvez facilement visualiser les différentes structures de données en utilisant le navigateur pour le rendu des graphiques et des arbres à l'aide du DOM et de la Toile.

CS des cours au fil des ans ont tendance à changer la langue dans laquelle le sujet est enseigné, tout simplement parce que de nouvelles et meilleures implémentations de langues que la facilité d'apprentissage est arrivé ce qui rend plus facile de se concentrer sur le problème réel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X