72 votos

Elección del lenguaje para el aprendizaje de algoritmos y estructuras de datos de programación

Que lenguaje de programación recomendaría usted para aprender acerca de las estructuras de datos y algoritmos ?

Teniendo en cuenta lo siguiente:

  • Experiencia Personal
  • Características del lenguaje (punteros, OO, etc)
  • Idoneidad para el aprendizaje de la DS & conceptos

Lo pregunto porque hay algunos libros que son lenguaje de programación-agnóstico (escrito desde una perspectiva Matemática, y el uso de pseudocódigo). Si quiero aprender de uno de estos, me gustaría elegir un lenguaje de programación de código y ejecución de los algoritmos.

Luego, hay otros libros que introducen DS Y conceptos con ejemplos escritos en un determinado idioma de programación y me gustaría código de estos algoritmos así - por lo tanto, hasta cierto punto, el lenguaje recoge el libro también.

De cualquier manera, tengo que escoger un idioma, y prefiero seguir a lo largo. Independientemente de las preferencias de idioma, que es el mejor para este propósito?

81voto

cletus Puntos 276888

La respuesta a esta pregunta depende de exactamente lo que usted desea aprender.

Python y Ruby

Lenguajes de alto nivel como Python y Ruby son sugerido a menudo porque son de alto nivel y la sintaxis es bastante legible. Sin embargo, estos lenguajes tienen todas las abstracciones para el común de las estructuras de datos. No hay nada que te detenga la aplicación de sus propias versiones como un ejercicio de aprendizaje, pero usted puede encontrar que usted está edificio de alto nivel de las estructuras de datos en la parte superior de otro de alto nivel de las estructuras de datos, que no es necesariamente útil.

También, Ruby y Python son dinámicamente tipado de idiomas. Esto puede ser bueno, pero también puede ser confuso para el principiante y puede ser más difícil (inicialmente) para la captura de errores, ya que normalmente no aparece hasta el tiempo de ejecución.

C

C está en el otro extremo. Es bueno si usted quiere realmente aprender detalles de bajo nivel, como la memoria es administrado, pero la gestión de la memoria que de repente es una consideración importante, como en el correcto uso de malloc () y free(). Que puede ser una distracción. También, C no es orientado a objetos. Que no es una mala cosa, pero simplemente vale la pena destacar.

C++

C++ ha sido mencionado. Como dije en el comentario, creo que esta es una terrible elección. C++ es muy complicado, incluso en uso simple y tiene una cantidad ridícula de "trampas". También, C++ no tiene ninguna clase de base común. Esto es importante porque las estructuras de datos como las tablas de hash confiar en que existe una clase base común. Se podría implementar una versión para un nominal de la clase base, pero es un poco menos útil.

Java

Java también ha sido mencionado. A muchas personas les gusta el odio Java y es cierto que el lenguaje es muy detallado y carente de algunas de las más modernas características del lenguaje (por ejemplo, cierres), pero ninguno de los que de verdad importa. Java es de tipo estático y cuenta con recolección de basura. Esto significa que el compilador de Java se captura muchos de los errores que se escribe dinámicamente idiomas no (hasta el tiempo de ejecución) y no hay que lidiar con fallas de segmentación (que no quiere decir que usted no puede perder memoria en Java; obviamente no se puede). Creo que Java es una buena opción.

C#

C# el lenguaje es como una versión más moderna de Java. Al igual que Java es un administrado (recolector de basura) intermedio lenguaje compilado que se ejecuta en una máquina virtual. Todos los otros idiomas que figuran aquí, aparte en forma de C/C++ también se ejecutan en una máquina virtual, pero Python, Ruby, etc, son interpretados directamente en lugar de compilan a bytecode.

C# tiene el mismo pros y contras como Java, básicamente.

Haskell (etc)

Por último se tienen los lenguajes funcionales: Haskell, OCaml, Esquema/Lisp, Clojure, F#, etc. Estos piensan acerca de todos los problemas de una manera muy diferente y que vale la pena aprender en algún momento, pero de nuevo se trata de lo que usted quiere aprender: programación funcional o estructuras de datos? Me gustaría palo para el aprendizaje de una cosa a la vez, en lugar de confundir la cuestión. Si usted no aprender un lenguaje funcional en algún punto (que recomiendo), Haskell es un lugar seguro y muy buena opción.

Mi Consejo

Recogida de Java o C#. Ambos tienen libre, excelente Ide (Eclipse, Netbeans y IntelliJ Edición de la Comunidad de Java, Visual Studio Express para C#) que hacen de la escritura y la ejecución de código en un instante. Si usted no utiliza ninguna nativo de la estructura de datos más compleja que la de una matriz, y cualquier objeto que usted mismo escribe usted aprenderá básicamente la misma cosa, como en C/C++ pero sin tener necesidad de gestionar la memoria.

Me explico: un extensible de la tabla hash necesita ser redimensionada si suficientes elementos se agregan. En cualquier aplicación que significará hacer algo como duplicar el tamaño de la copia de estructura de datos (normalmente una matriz), y la copia de los elementos existentes. La aplicación es básicamente el mismo en todos los lenguajes imperativos, pero en C/C++ tiene que lidiar con la segmentación de fauls cuando no asignar o desasignar algo correctamente.

Python o Ruby (no importa cual) sería mi siguiente elección (y muy cerca de los otros dos) sólo porque el tipado dinámico podría ser problemático en la primera.

40voto

codaddict Puntos 154968

Recomiendo Java principalmente porque:

  • recolección de basura
  • referencias
  • ricas colecciones

EDIT: A los votantes por favor explique.

28voto

Taylor Leese Puntos 18895

En mi opinión, C sería el mejor lenguaje para aprender los algoritmos y estructuras de datos porque obligará a escribir tu propio. Obligará a entender punteros, asignación de memoria dinámica y las implementaciones de detrás de las estructuras de datos populares como listas enlazadas, tablas hash, etc.. Muchos de los cuales son las cosas que usted puede tomar para concedida en lenguajes de nivel superiores (Java, C#, etc.).

14voto

mvid Puntos 4312

Python es excelente. Fácil de leer, totalmente equipado. Si usted va a trabajar con pseudocódigo, Python será bastante familiar.

Python es ya el de los algoritmos de idioma de su elección en la universidad de california en Irvine, donde se describe así:
"Python representa un algoritmo lenguaje orientado a que ha sido muy necesaria en la educación. Las ventajas de Python incluye su libro de texto-como la sintaxis y la interactividad que fomenta la experimentación."

Python también trabaja en un principiante manera amigable con el Gato, un gráfico de decisiones de la herramienta. El aprendizaje de Algoritmos y Estructuras de Datos es una parte de arriba que puede ayudar al ser hecho visual, algo que el Gato hace que sea fácil de hacer (sin el aprendizaje de cualquier complejo de bibliotecas de gráficos)

7voto

Daniel Rose Puntos 8024

Yo sugeriría Ada. Tiene características para construcciones de datos no se encuentran en otros idiomas, tales como controles de gama type Day is range 1 .. 31; también tiene tiempo de compilación muy estricto y tiempo chequeando (a menos que usted decide apagar), haciéndolo más fácil de encontrar errores en su ejecución.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X