¿Secuencia ideal de aprendizaje del lenguaje de programación? [cerrado]

17

¿Qué piensas? ¿Cuál es la secuencia ideal de aprendizaje del lenguaje de programación que abarcará la mayoría de los lenguajes y paradigmas muy utilizados hoy en día, así como también ayudará a comprender conceptos básicos, ideas y prácticas comunes de programación? Incluso puede sugerir una secuencia de aprendizaje para paradigmas en lugar de idiomas.

NB: Este es el puerto de la pregunta que hice en stackoverflow y se cerró por ser subjetiva y argumentativa.

Gulshan
fuente
Gran pregunta ¿Cuáles habrían sido las respuestas si esta pregunta estuviera orientada al rendimiento? Tengo curiosidad: programmers.stackexchange.com/questions/16323/… : D
JoeBilly
44
Estoy completamente sorprendido y encantado de que Lisp aparezca comúnmente en las preguntas de alto rango.
Inaimathi el
1
Esta pregunta también se hizo aquí (aunque creo que esta fue primero): programmers.stackexchange.com/questions/41720/…
oosterwal
Tengo que guardar este enlace aquí- streamhead.com/what-programming-language-to-learn-next
Gulshan

Respuestas:

26

Python, Lisp, C, Haskell

Suponiendo que la pregunta se tratara de una secuencia de aprendizaje ideal para los recién llegados a la programación (dado que los viejos en la programación habrán tenido su propia secuencia de aprendizaje (probablemente accidental)), sugeriría leer el ensayo de Norvig sobre cómo aprender a programar en 10 años , entonces:

  1. Python : Comience con un lenguaje dinámico, de alto nivel, OO y funcional. Porque es muy importante para los principiantes sentirse productivos lo antes posible, y no ser desactivado por la sintaxis alienígena, la falta de bibliotecas, la falta de multiplataforma, la falta de recursos de aprendizaje y la falta de comunidad. Python es altamente legible, tiene toneladas de buenas bibliotecas (especialmente bibliotecas científicas, un científico / ingeniero moderno debe saber programar), se ejecuta fácilmente desde la mayoría de los sistemas operativos, tiene toneladas de tutoriales y libros gratuitos completos, y es generalmente fácil de usar - todo mientras sigue siendo lo suficientemente poderoso como para crecer contigo a medida que te conviertes en un programador avanzado que trabaja en grandes problemas. También es importante reforzar las convenciones importantes + útiles para un principiante: la legibilidad del código cuenta MUCHO, y usted debe escribir código para que usted y otros lo entiendan fácilmente.

  2. Lisp: En particular, al menos lea la Estructura e Interpretación de los Programas de Computadora o mire los videos de SICP , y tenga los ojos muy abiertos al ver los fundamentos y el poder expresivo de la programación; uno puede hacer mucho con tan poco. Aprenda cómo Lisp puede expresar no solo el paradigma funcional, sino también OO, lógico / declarativo y más, como la creación de nuevos lenguajes específicos de dominio. Lea el PAIP de Norvig para ser testigo de lo que un maestro puede hacer con el idioma. Luego echa un vistazo a Clojure , un dialecto moderno de Lisp que podría ser una de las siguientes grandes cosas.

  3. C: Solo porque es la lengua franca de la informática. :) Posiblemente opcional en estos días si uno es principalmente un programador en un dominio particular que no es de software. Me parece feo, pero vale la pena saberlo para apreciar el hardware subyacente. Ve con K&R , por supuesto.

  4. Haskell : Puro poder funcional. Donde actual Com.Sci. La teoría y el poder expresivo práctico se encuentran. Ver el mundo real Haskell .

Después del recorrido anterior, uno sería muy experto en abordar problemas y expresar soluciones en código, y sentirse totalmente cómodo con los paradigmas aquí :

texto alternativo

limist
fuente
Sustituiría (naturalmente) Smalltalk por Python como # 1, pero digo que saber que Python (a) es mucho más popular que Smalltalk y que (b) lograr que Smalltalk hable a otros idiomas es tan difícil como lo es en Java , lo que es lo suficientemente difícil como para frustrar a un novato. La "escritura" de Python parece una gran ventaja.
Frank Shearar
Estoy de acuerdo con tu declaración de productividad. Creo que aprender C como el primer idioma absoluto es una carga de tonterías. Pero definitivamente debería estar en la pila en alguna parte.
Mark Canlas
+1 No estoy seguro de si Haskell debería estar en la cima, pero para ser justos, aún no lo sé y es el siguiente en mi lista, por lo que aún puede terminar siendo el último idioma que aprendo.
Inaimathi el
2
Haga clic en el diagrama a tamaño completo @ i54.tinypic.com/168ity1.jpg
Mike Clark el
Haría +1 en esto si C no estuviera en la lista
Balog Pal
28

Así es como lo haría:

  1. Python (o Ruby o Lua): un lenguaje interpretado, sin tipos, puedes hacer cosas en pocas líneas. Gran biblioteca (Python es lo mejor para esto, supongo). Puede profundizar en los algoritmos porque no hay distracciones. No es necesario compilar, solo corre. Además de eso, con Python implícitamente enseñas buen estilo, ya que la sangría en Python es obligatoria. También puedes enseñar Orientación de Objetos (en Lua es más un problema). El propósito aquí es divertirse mucho y mostrarle al estudiante lo que se puede hacer.

  2. C ++ (o tal vez Java): un lenguaje mecanografiado y rápido. Si necesita Orientación a objetos, ya conoce algunos conceptos. La idea principal es "traducir" lo que hizo en Python y hacerlo con las nuevas restricciones (principalmente tipos). Ahora, si tiene los conceptos correctos, agregar tipos no es un problema. El siguiente paso es pensar en un nivel más bajo (Java no ayuda aquí) y enseñar bien los punteros . Con esto quiero decir explicar un poco sobre el espacio de direcciones, la CPU, el sistema operativo, para que pueda comenzar a ver debajo de su programa. Un lenguaje compilado introduce la distinción entre interpretación y compilación, muy útil para explicar qué es el lenguaje de máquina, etc.

  3. Montaje : Finalmente, no es magia, solo hablas con la máquina. Existe un debate sobre la sintaxis de Intel y GAS, no es importante. Si tiene MIPS, creo que es mejor para enseñar, pero supongo que x86 es más conveniente ya que está más extendido (x86_64 mejor ya que tiene más registros y detalles). Solo tiene que eliminar parte de la complejidad y dejar que los estudiantes investiguen más si lo desean.

(Estos primeros 3 son la "profundidad". Hasta ahora, hemos estado bajando hasta que tocas el fondo, que está "cerca del metal", como dicen. Creo que esto es muy importante, muchas preguntas en programación son resuelto cuando tienes una idea clara de lo que está sucediendo. Cuando lo sabes, puedes adquirir más conocimiento con confianza).

  1. Esquema (o Common Lisp o Clojure): como dijo @dukeofgaming, los lenguajes Lisp le permiten enseñar bien la recursión (para este esquema es mejor, ya que no tiene bucles explícitos). Pero iría y enseñaría otras dos cosas: cierres y macros. Las macros son lo que separa los lenguajes Lisp de los demás. Personalmente, no me gustan las macros de Scheme, pero esto no es demasiado importante. Creo que las macros de Clojure son agradables, por ejemplo (pero la recursividad en Clojure no es tan limpia, ya que la JVM no tiene recursión de cola). Los cierres son un concepto muy importante, una vez que los asimila, "ve" Javascript al instante. Después de estudiar C ++, Python y Lisp, Javascript se convierte en "trivial".

  2. Haskell : Para un lenguaje funcional, no creo que puedas vencer a Haskell. Lisp y Scheme se consideran funcionales, pero para enfatizar la programación funcional, debe obligar a los estudiantes a pensar sin estado. Haskell también tiene otras cosas muy bonitas, como curry y coincidencia de patrones para "desestructuración". No conozco mucho a Haskell, pero la concisión del código que puedes escribir es simplemente hermosa. Conocer bien a Haskell facilita mucho el camino para entender a Erlang.

  3. Adelante : un lenguaje de pila. Rompe totalmente tu lógica nuevamente (si Lisp y Haskell no fueron suficientes). Yo iría tan lejos como para enseñar Jones's Forth ya que conocen la asamblea y luego puedes entender totalmente lo que está sucediendo. (Conocer Forth abre PostScript, por ejemplo).

(Así que estos 3 últimos son la amplitud que estabas diciendo. Para mí, estos idiomas son lo suficientemente extraños como para cambiar tu forma de pensar. Al menos lo hicieron para mí. Y creo que con estos, entiendes suficientes paradigmas para aprender un nuevo idioma muy rápidamente.)

Opcionalmente, puede estudiar estos:

  1. SmallTalk : un lenguaje puramente orientado a objetos. Para ver qué sucede cuando tomas en serio la Orientación a objetos, el lenguaje no necesita "if", "for". Todo es un mensaje: gran realización de nuevo. (Esto facilitaría Objective-C ahora).

  2. Ir : Un lenguaje (hermoso) con énfasis en la concurrencia. Me parece que Go es muy agradable y cómodo para programar.

  3. Prólogo : otro paradigma de programación. No he escrito ningún Prólogo pero entiendo que es otro lenguaje alucinante.

Pau Fernández
fuente
66
Python y Ruby (no sé sobre Lua) son lenguajes fuertemente tipados. Creo que quiere decir que se escriben dinámicamente en lugar de estáticamente.
Daniel Roseman
13
Trate C y C ++ como dos lenguajes separados.
David Thornley
1
Bjarne dice : "No existe un lenguaje llamado" C / C ++ ". La frase generalmente es utilizada por personas que no tienen idea de la programación (por ejemplo, personal de recursos humanos y gerentes deficientes). Alternativamente, es utilizada por personas que simplemente no conoce C ++ (y a menudo tampoco C) ".
fredoverflow
1
Me gustaría que alguien discuta si el ensamblaje debe preceder a C ++. En ese punto, sería bastante fácil de acercarse montaje, debido a los conceptos simples y un pequeño conjunto de herramientas proporcionado, sin embargo, el trabajo con prima memoria y primas referencias de memoria debe ser muy útiles cuando se acerque a C ++, donde el uso de referencias nominales para abordar tanto arbitraria Las ubicaciones y los valores de la memoria confunden el sh * out de la mayoría de las personas.
Filip Dupanović
1
Les di a mis dos estudiantes de CS un curso de una semana en un ensamblador inventado. Básicamente inventé una computadora con un conjunto de instrucciones mínimas y un intérprete. Luego podrían escribir (y ver ejecutar) algunas rutinas muy simples, completas con el tiempo. Luego agregué cosas como el almacenamiento en caché de datos y la captación previa para que pudieran ver cómo las características arquitectónicas interactúan con el rendimiento. Sospecho que un ensamblador artificial y una computadora podrían permitir más flexibilidad y eficiencia de aprendizaje, si el propósito es didáctico, en lugar de la adquisición de algo que podrían usar.
Omega Centauri
12
  • El que necesitas ahora
  • El que necesitas a continuación
  • El que necesitas después de eso

En serio, es posible que haya aprendido BASIC, COBOL, Fortran, Forth, Pascal y Prolog en mi tiempo, pero nunca he necesitado particularmente usarlos y realmente no puedo ver ninguna forma en que hayan influido en mi uso de otros idiomas, excepto quizás la aplicación incorrecta de paradigmas entre sí. Me llevó años desaprender BASIC lo suficiente como para realmente escribir Pascal estructurado, un par de años para dejar de escribir el código Pascal en C y otros dos años para asimilar la POO cuando comencé a usar Objective-C y Java. Por otro lado, como he estado trabajando (casi) exclusivamente en lenguajes OO, he podido concentrarme en mejorar mi uso de los lenguajes OO, sin tratar de hacer que se vean como Scheme o PostScript.

usuario4051
fuente
44
Usted sabe, yo creo que hay algún valor de aprender un nuevo idioma, incluso si no es necesario que ... sin embargo estoy de acuerdo con el sentimiento general de que a menudo es mejor para aprender una lengua porque piensa que lo encontraría útil en vez porque es lo que crees que "deberías" aprender.
Tim Goodman, el
8

Es difícil afirmar que cualquier secuencia es ideal, pero presentaré un plan que pueda justificar:

  1. C

    Aprender C exige paciencia y diligencia, y le presentará las formas básicas en que las computadoras manejan los datos y le mostrará casi el conjunto más amplio de responsabilidades que un programador puede aceptar para manejar una máquina de este tipo.

  2. Perl

    Como antídoto para el rigor requerido por C, prueba el Perl increíblemente indulgente. Lo que tardó una semana en escribir en C se puede escribir en una hora en Perl. Introduce un tipo diferente de placer que se encuentra en la programación y muestra cómo excluir ciertas preocupaciones y detalles libera al programador para centrarse en diferentes cosas.

  3. C ++ , o tal vez Java

    A continuación, vea cómo el enfoque de C en los aspectos primitivos y de bajo nivel de la programación sirve como base para elevar el nivel de abstracción, señalando los intercambios que uno hace en eficiencia al avanzar en abstracción. Explore cómo formar abstracciones que aún puedan retener las eficiencias importantes para su programa.

  4. Lisp común

    Esta es la recompensa por el slog anterior. Encontrarás ecos de lo que aprendiste en todos los idiomas anteriores y verás lo tontas que parecen muchas de las concesiones anteriores al programar en Lisp. El preprocesador de C y las plantillas de C ++ preparan uno para apreciar el sistema macro de Lisp. Recuperará la facilidad de expresión de Perl, las oportunidades de optimización de bajo nivel de C, las capacidades de creación de abstracción de C ++ o Java, y las superará todas. Ninguno de los tres anteriores, tal vez excepto el depurador de Perl, lo habrá preparado para la experiencia de programación interactiva con un REPL capaz ("lectura, evaluación, ciclo de impresión"). Trabajando con una imagenbasado en el entorno, que cambia la relación entre su código fuente y la idea de un "programa ejecutable", cambiará toda su idea de lo que significa construir un programa.

Más allá de esos cuatro, explorar otros estilos de programación, como la programación funcional en Haskell o la programación lógica en Prolog, permite una comprensión más completa de la gama de programación (conocimiento amplio, por así decirlo), pero en ese momento su tiempo está mejor servido mejorando su oficio - conocimiento profundo - con cualquier idioma que conozca.

Después de haber probado suficientes idiomas distintos, su punto de vista se elevará para centrarse en las ideas que trascienden a cualquiera de ellos. Es algo así como la diferencia entre aprender a conducir el automóvil de su padre y saber cómo conducir cualquier automóvil: es posible que no disfrute tener que conducir la mini-van de alquiler durante unos días, sabiendo perfectamente los placeres de conducir un automóvil deportivo favorito, pero descubrirás cómo operarlo y seguramente sacarás más de la pobre bestia que un aficionado.

seh
fuente
44
¿+1 para C y Common Lisp, pero Perl como segundo idioma? :) Python serviría magníficamente como un lenguaje dinámico y al mismo tiempo fomentaría buenos hábitos de programación, como que el código sea muy legible para usted y para otros, en las semanas, meses o años posteriores a la redacción inicial del programa.
limist
1
Con respecto a la recomendación de Perl: solo soy yo mostrando mi edad. Claro, hoy, Python o Ruby serían sustitutos cercanos, pero ambos son más dogmáticos que Perl y más sesgados hacia la orientación a objetos de estilo de clase como una bolsa de métodos que un nuevo programador que sale de C No lo necesito todavía. Recuerdo que cuando aprendí Perl, fui terriblemente productivo de inmediato, y no fue mucho después que comencé a usar sus instalaciones orientadas a objetos. Con demasiada frecuencia, todo ese enfoque OO es solo una distracción y una ceremonia innecesaria.
seh
No estoy de acuerdo con su vista de "los oficios que uno hace en eficiencia cuando sube en abstracción". Uno de los pilares de C ++ es que un programa que utiliza las instalaciones de C ++ nunca es más lento que un programa C equivalente . Por ejemplo, usar funciones virtuales en C ++ nunca es más lento que simular funciones virtuales en C.
fredoverflow
Es cierto, Fred, y eso es lo que quise decir: aprovechar las funciones sin pensar cómo funcionan puede generar costos, costos que quizás haya evitado antes al evitar la capacidad de las funciones también, porque habría sido prohibitivamente complicado o simplemente insuficientemente idiomático. para implementar manualmente. Por ejemplo, quejarse de que RTTI es "demasiado lento" plantea inmediatamente la pregunta de qué otra manera va a resolver el problema.
seh
6

1. Smalltalk

Diseñado originalmente al menos en parte como una forma para que los niños usen computadoras para aprender. La sintaxis es lo suficientemente simple como para describirla en un párrafo. Al igual que LOGO, ejemplifica el principio de "barrera de entrada baja, techo alto".

Smalltalk es un lenguaje OO puro en el sentido de que "todo es un objeto".

También enseña muchas técnicas funcionales, particularmente en su API de recopilación: encadenamiento de mensajes, funciones de orden superior, asignación, reducción, etc.

La comunidad Squeak es vibrante y acogedora. También verá muchas discusiones sobre técnicas avanzadas: al igual que la comunidad lisp, hay muchos Smalltalkers con mucha experiencia en la lista de correo dispuestos a compartir sus conocimientos. (No hace daño que la comunidad Squeak tenga una gran subpoblación de educadores profesionales). También hay otra lista para principiantes.

2. PROLOG

Un lenguaje de programación lógica que le dará una visión muy diferente de la computación a casi cualquier otro lenguaje. Prolog también es altamente declarativo (pero no completamente: el !operador or cut puede tener un efecto semántico significativo en un predicado).

3. Lisp común

Sustituya el esquema aquí si lo desea. Common Lisp es compatible con múltiples paradigmas, especialmente OO y funcional. También tiene una larga historia (Lisp es el segundo idioma más antiguo aún utilizado: solo el más antiguo de FORTRAN).

4. Haskell

(Advertencia: Acabo de empezar a aprenderlo). Probablemente el lenguaje funcional más puro del planeta. Tiene un sistema de tipo estático muy avanzado. Existen prácticos libros de introducción .

5. C o Delphi

Necesita saber cómo funcionan las computadoras. Necesita saber cómo funcionan realmente la memoria y la CPU. Ambos son tradicionalmente "cercanos al metal" y tienen comunidades que alientan a pensar en cómo se compila su lenguaje para la asamblea.

¿Por qué esta orden?

Smalltalk es muy fácil de aprender, por lo que puede comenzar a concentrarse rápidamente en resolver problemas en lugar de luchar contra un compilador ("barrera de entrada baja"). Una vez que comience a programar, tampoco hay un límite artificial sobre lo que puede hacer: "techo alto".

Una vez que tenga una idea justa de cómo funciona OO (y, con la condición de que haya MUCHAS interpretaciones diferentes de lo que significa "OO", es justo decir que OO domina el mercado), pasar a Prolog asegura que no comience pensando que OO es la única forma. Prolog es muy diferente a la mayoría de los idiomas y estirará sus músculos mentales para que no empiece a pensar que lo sabe todo.

Common Lisp, a su vez, es el lenguaje de un adulto. Tiene un estándar maduro, ha sido líder en diseño de idiomas durante décadas (junto con Smalltalk): ¿todas esas nuevas y elegantes características que acaba de adquirir su idioma favorito? Las posibilidades son las ideas incubadas en Lisp o Smalltalk. Common Lisp también es un poco vergonzoso, y encontrarás verrugas donde quiera que vayas.

Haskell es el cuarto en la lista porque (me dicen: recién comencé a aprenderlo) su pureza significa que algunas cosas muy comunes (como E / S) son más difíciles de hacer que en lenguajes menos puramente funcionales. La gente de Haskell también usa algunas terminologías bastante exóticas (palabras como "catamorfismo", por ejemplo), y probablemente estaría mejor con algo de experiencia en programación en su haber antes de abordarlo. (Pero debo repetir, ¡acabo de empezar a aprenderlo! ¡Toma esta opinión con una pizca de sal!)

¿Y por qué C / Delphi duran? Porque a menos que trabaje en sistemas embebidos, realmente no debería tener que aprender programación pensando que la gestión manual de la memoria es todo lo que hay. La recolección de basura funcionó lo suficientemente bien como para una máquina de nivel 1980. ¡Tu teléfono es tan poderoso!

Finalmente, no he puesto a Erlang en la lista anterior, aunque realmente debería hacerlo.

revs Frank Shearar
fuente
2
¿Es esta una secuencia de aprendizaje ?
Wizard79
Es claramente una secuencia (de longitud 1).
Frank Shearar
Menos graciosamente: proporcionaré un paso en la secuencia, y usted proporciona el otro, y la comunidad votará sobre el orden de dicha secuencia, ¿de acuerdo?
Frank Shearar
3
@ Frank no quise decir eso. Esperaba secuencias completas. Y creo que el pedido no puede hacerse votando.
Gulshan
Amigos: si van a votar en contra, expliquen por qué .
Frank Shearar
5
  1. Pitón. Una excelente introducción a la programación. Esto también se vinculará con cualquier exposición previa a la programación.

  2. Esquema. También una excelente introducción a la programación. Si se trata de principiantes de programación, es posible que desee enseñar esto primero y Python segundo. Una alternativa sería Python primero y luego Common Lisp en lugar de Scheme: más trabajo, pero más recompensa.

  3. C. Un lenguaje de bajo nivel que se mantiene cerca del silicio. Bueno para aprender lo que puede hacer una computadora. Podría sustituir alguna forma de lenguaje ensamblador, pero C está bastante cerca de lo básico y es mucho más fácil trabajar con él.

  4. Prólogo. Alternativamente, sustituya cualquier lenguaje de propósito general de estilo declarativo, si puede encontrar uno que le guste más.

  5. Haskell Para el sistema de tipos y la funcionalidad pura, si nada más.

  6. Aquí hay varios candidatos, ya que es imposible cubrir todos los conceptos con seis idiomas. Vale la pena aprender Common Lisp, aunque solo sea para el sistema macro y el sistema de objetos (que es diferente de la mayoría de los otros que he visto). Forth, Tcl y APL son idiomas extraños que han tenido cierto éxito, y uno de esos sería bueno para evitar que el estudiante sienta que lo ha aprendido todo. Erlang sería bueno para la concurrencia.

David Thornley
fuente
"Si se trata de principiantes de programación, es posible que desee enseñar esto primero y Python segundo". Muy de acuerdo. Es un enfoque que ahora toma mi antigua universidad y parece funcionar muy bien.
pyvi
Esta es una lista bastante buena, probablemente revierta el orden en Haskell y Prolog. Si el estudiante tuviera una experiencia particularmente mala, entonces eliminaría seis, subiría la lista y comenzaría con algo más simple.
Orbling
4

Se han proporcionado muchas buenas respuestas, pero no vi a nadie ofreciendo SQL. Es un animal completamente diferente a la mayoría de los demás enumerados y muy importante para cualquier programador que tenga que lidiar con bases de datos.

También es posible que desee considerar algunos 'lenguajes' de scripting a nivel del sistema operativo, como Batch, grep, awk, etc. 'Make' también puede caer en esta categoría.

Otro idioma que puede considerar (si aún no está completamente muerto) es COBOL. Es lo suficientemente diferente de otros lenguajes de procedimiento que merece alguna mención. Las variaciones de C, Fortran, Basic, etc. se han vuelto tan similares que una vez que está familiarizado con una, mudarse a otra no es un gran problema, pero COBOL carece de muchas de las construcciones dadas por sentado en las demás. (Han pasado al menos 20 años desde que hice algo con COBOL, por lo que es posible que mis observaciones ya no sean válidas con respecto a este idioma).

Es posible que desee mencionar APL solo desde un punto de vista histórico, o dejar que descanse en paz. Tu elección.

oosterwal
fuente
1
La razón por la que no sugerí SQL es que no es un lenguaje de propósito general. Prefiero golpear a los estudiantes con algo declarativo y más general, como Prolog. Los lenguajes de scripting a nivel del sistema operativo no ofrecen nada que un lenguaje más general como Python o Perl no ofrezca. La última vez que toqué COBOL, no ofrecía conceptos que no puedas mejorar en otros idiomas. Me gusta la sugerencia de APL, no tanto por su valor histórico como porque es un lenguaje muy diferente.
David Thornley
@David Thornley: Estoy de acuerdo en que SQL no es un lenguaje de propósito general. SQL tiene algunos conceptos interesantes de teoría lógica y de conjuntos como operaciones básicas que no aparecen en muchos otros lenguajes, por ejemplo. unión, unión, agrupación por, etc. que vale la pena señalar para cualquier persona que pueda estar tratando con bases de datos.
oosterwal
Todas las cosas que me gustaría ver enseñadas a un alumno, aunque algunas tienen una sensación histórica. Aprender los lenguajes de script es algo esencial, pero podría hacerse junto con los demás, al igual que para SQL, es un lenguaje de servicio para los primarios. Si el estudiante era muy bueno en matemáticas, comenzar con APL podría ser bueno (o tal vez R, ya que es mucho más fácil de leer, pero se puede usar de manera similar).
Orbling
2

Sugeriría primero leer a Eric Raymonds "Cómo convertirse en un hacker" ya que tiene algunos puntos muy interesantes sobre cómo comenzar, incluido Lisp, que tiene la noción de "código es datos y datos es código".

Para la programación, también sugeriría Haskell, Prolog, SQL y lenguaje ensamblador (solo algunos).

Independientemente de lo que desee aprender, tómese el tiempo para aprenderlo correctamente y escribir cantidades de código no triviales. Es muy parecido a andar en bicicleta: no se puede aprender de un libro.

usuario1249
fuente
2

Primero> ¿Qué quieres hacer cuando comienzas a programar? Aprender a ser un programador de juegos es diferente de aprender a ser un programador de bases de datos para una empresa ... es diferente a un programador basado en la web ...

Segundo> Una vez que comienzas a aprender, ¿quieres comenzar alto y avanzar hacia abajo? O comienza bajo y sube de nivel. El aprendizaje de C # (nivel alto) es muy diferente al aprendizaje de ensamblaje (nivel bajo).

Una gran elección dependerá de lo que quieras hacer. La programación de un controlador probablemente incluirá C o Ensamblaje ... La programación de un sitio web será PHP, C #, asp, etc. No tocará el ensamblaje para la programación web ... etc.

En cuanto a lo básico ... una vez que decidas QUÉ quieres hacer, es más fácil elegir un idioma. Yo, por ejemplo, me he convertido en analista de datos en un hospital. Entonces, mi "elección" de lenguajes es SQL / TSQL / DB2 para acceso a datos, C # WPF para clientes Windows, Silverlight para clientes web, algunos RPG / CL para lógica de back-end de IBM ...

Personalmente me quedo con un buen libro + construyo tu propio programa para practicar el idioma. Me gusta APress y me encantó leer C # 2008 Ilustrado cuando aprendí C #. Tienen otros libros que abarcan conceptos básicos para los no aprendidos, así como para los expertos.

WernerCD
fuente
2

Un principiante solo necesita un idioma para comenzar, después de aprender el segundo idioma, ya están progresando más allá de muchos desarrolladores competidores. Aprendería en el siguiente orden:

  • Smalltalk: este es el mejor OO, y una simple exposición le abrirá los ojos a la forma en que se deben hacer las cosas. Lo mejor es aprender los conceptos de OO.
  • Java o C #: proporciona un enfoque más arquitectónico y planificado para OO, al tiempo que introduce tipos estáticamente controlados.
  • Ruby o Python: no puedes apreciarlo hasta que sientas Java o C #
  • Erlang: concurrencia hecha de una manera que lo hace parecer fácil. Es mucho mejor de lo que tus lenguajes OO o C pueden hacer.
  • Lisp, Haskell u otro lenguaje funcional: es un enfoque diferente para resolver problemas.
  • C: ya sea creando extensiones nativas para Java o implementando algoritmos de nivel inferior, esto es lo más cercano al ensamblaje que alguien necesita hasta que escriben compiladores

Puedes preguntar "¿dónde está C ++?" y que hay de X? Honestamente, aprender varios idiomas hace un par de cosas: enriquece tu experiencia y proporciona un impulso para aprender más idiomas. La lista de lenguajes que conozco bien (Java, C #, Ruby, C ++, Javascript) están orientados a objetos, pero eso es principalmente porque eso es lo que tengo que hacer en el trabajo todos los días. La lista de idiomas a los que he estado expuesto (Smalltalk, Python, Erlang, JESS, C, Assembly [Motorola 6502/6510], Go) me ha enseñado valiosas lecciones. Al menos puedo entender lo que está sucediendo con esos idiomas. Hay muchas cosas que no he explorado, pero que muy bien pueden en el futuro. También hay algunos lenguajes de marcado: HTML, XSL: FO, XSLT, CSS, XML, SGML a los que las personas necesitan exposición si van a trabajar con la web de alguna manera.

Después de aprender al menos dos idiomas diferentes, realmente no creo que deba restringir lo que alguien que desea aprender decide retomar a continuación. El aprendizaje debe ser una experiencia orgánica, y demasiada estructura en el proceso crea un grupo de personas que piensan exactamente de la misma manera. Un monocultivo por así decirlo.

Berin Loritsch
fuente
2

La mayoría de estas respuestas parecen más o menos las mismas, así que voy a ofrecer una opinión diferente. Durante mucho tiempo he creído que el mejor primer idioma es Tcl.

¿Por qué? Por un lado, es muy fácil de aprender. El lenguaje no tiene mucha sintaxis, por lo que el alumno puede centrarse más en los conceptos de programación y menos en las peculiaridades sintácticas de un lenguaje en particular. Al momento de escribir este artículo, Tcl tiene exactamente 12 reglas que gobiernan todo el idioma (en lugar de once en las últimas dos décadas).

Por otro lado, Tcl viene con un fantástico lenguaje GUI incorporado, por lo que puede obtener una satisfacción relativamente instantánea y puede aprender los conceptos básicos de la programación basada en eventos.

Tercero, es extensible. ¿Quieres enseñar sobre un ciclo de repetición? Puede escribir un comando que haga un ciclo de repetición para que no solo pueda aprender a usar la repetición ... hasta que pueda aprender cómo es diferente de un ciclo while porque en realidad lo escribió usted mismo.

Además, debido a que es extensible, hay una fácil transición hacia C. Puede aprender los conceptos básicos de C y aprender a a) extender Tcl con nuevos comandos escritos en otro idioma, o b) aprender cómo agregar un lenguaje de secuencias de comandos a un programa escrito en C.

Una vez que haya aprendido Tcl y C, la mayoría de los otros idiomas se encuentran en algún punto entre esos dos extremos y deberían ser relativamente fáciles de aprender. Mi lista completa, con las cuatro que enseñaría después de Tcl y C son:

  1. Tcl
  2. C
  3. Python: para conceptos OO, además de su comportamiento de definir bloques por sangría para contrastar con otros lenguajes.
  4. Ruby: para una versión diferente de OO, más rieles para aprender sobre frameworks
  5. Java: se usa en todas partes, necesita saberlo y aprender sobre la JVM
  6. maravilloso - regresa a los lenguajes dinámicos
Bryan Oakley
fuente
1

Lenguaje ensamblador, C, SQL, C #

Lo sé, aburrido y viejo. Y toda la pregunta ignora la parte realmente difícil de la programación, que es la resolución de problemas, el modelado de dominios y la construcción de algoritmos. Pero he aquí por qué:

  1. no puedes fingir a través del lenguaje ensamblador; o lo entiendes o no. el compilador no lo salvará, no hay marco ni sobrecarga de la biblioteca, y no puede esconderse de la arquitectura de la máquina; es pura programación (en el nivel principiante de agregar dos números)

  2. después de haber escrito algunos programas en lenguaje ensamblador de más de unos cientos de líneas, los punteros y la administración de memoria ya no son misteriosos, y debería haber comenzado a notar patrones en el código (if, switch, array, loops, etc. ) C saca esos patrones a la luz del sol y los deja brillar. La biblioteca estándar es útil sin ser inmensa, pero no te molestes con macros / templates / etc. En este punto.

  3. ahora salte a las bases de datos con SQL. No se exceda con los procedimientos almacenados, solo obtenga los conceptos básicos de las tablas y consultas.

  4. después de haber escrito algunos programas en C de más de unos cientos de líneas, los punteros, las estructuras y la administración de la memoria son una segunda naturaleza, y las construcciones de procedimientos son viejos amigos. Comenzará a notar patrones de orden superior: estas funciones siempre van con esta estructura de datos, esta parte del código es igual que esa parte del código, excepto los métodos X, Y y Z, y así sucesivamente. Agregue a esto su comprensión de los datos relacionales y ahora está listo para un lenguaje orientado a objetos. Con un marco masivo y documentación generalmente obtusa. ¡Bienvenido al mundo real! Explore las GUI, escriba aplicaciones de escritorio, escriba sitios web, escriba servicios web, escriba lo que quiera. Ve a buscar un trabajo si te apetece.

¿Eres ahora un Jedi de programación? ¿Un código ninja? No , ahora eres simplemente competente. Pero tiene una base sólida para explorar las nuevas y divertidas cosas brillantes.

Steven A. Lowe
fuente
1

Necesitas fundamentos:

  1. Codigo de maquina
  2. Lenguaje ensamblador
  3. C
  4. Ceceo

Después de eso, probablemente no importe.

Scott Whitlock
fuente
0

OK, este es el último día para recompensas. Y estoy agregando mi respuesta. Mi secuencia sugerida

C, C ++, JAVA / C #, Python / Ruby, cualquier otro lenguaje (Assembly / Lisp / Prolog, etc.)

  • No creo que el primer idioma tenga que ser el más fácil. Más bien creo que debería dar la idea general de cómo funciona la computadora manteniendo cierta abstracción.
  • La transición de C a C ++ será más fácil. Habrá OOP, el paradigma más utilizado en estos días.
  • La transición de C ++ a C # / Java será más fácil. Prefiero C # porque incorpora muchos paradigmas como la programación funcional.
  • Cuando alguien venga a lenguajes dinámicos como Python o Ruby, habrá un " WoW ". Será más fácil sentir la belleza de la escritura dinámica. Pero aprender lenguajes dinámicos primero y estáticos luego causará, " ¡Oh! ¿Por qué tengo que agregar todo esto? "
  • Ahora, los paradigmas y lenguajes más utilizados están casi listos. Entonces, explora lo que quieras. De la Asamblea a Lisp, Prolog o Haskell. Y descubra nuevos contextos y características de varios lenguajes de programación.
Gulshan
fuente
Aquí C es solo para comenzar.
Gulshan
La preferencia de C # sobre Java depende de muchos factores. Diría que ambos son casi iguales.
prasonscala
0

Esquema, C, C ++

Seré parcial y usaré el modelo que mi universidad usa actualmente para su plan de estudios de informática. Estuve en contra durante mi primer año, pero en mis últimos años estoy agradecido por ello. El modelo se basa en no requerir ninguna experiencia de programación, sino que requiere la capacidad de aprender.

  1. Esquema
    Somos usted primero está aprendiendo programación, cuanto menos magia, mejor. El lenguaje de enseñanza de Scheme presenta una definición clara y razonable de un lenguaje, un conjunto muy pequeño de axiomas (la "magia") que puede construir y ampliar. Cualquiera que pueda entender las funciones en matemáticas puede rastrear y razonar los programas de Scheme. Comenzar con Scheme proporciona una forma limpia pero poderosa de pensar en la computación sin preocuparse por los detalles específicos del idioma.

  2. C
    Pasar de Scheme a C es drástico, pero le permite aprender sobre el mapeo muy importante de lenguajes de alto nivel a lenguajes de bajo nivel. Aprender el modelo de memoria (punteros, montón, pila, etc.) y cómo se compilan y ejecutan los programas, cómo funcionan los punteros, el montón y el montón son habilidades esenciales. A través de esta comprensión de bajo nivel, puede comenzar a analizar programas en un nivel superior (Big O). Puede comenzar a rodar sus propios tipos de datos abstractos, jugando con diferentes implementaciones (por ejemplo, una tabla hash simple frente a un árbol binario para un conjunto).

  3. C ++
    Al aprender C y Scheme comenzamos a ver diferentes paradigmas de lenguajes de programación y cómo pueden aplicarse a diferentes problemas. Ahora puede abordar los aspectos más aterradores de la programación: elección y compensaciones. La elección del lenguaje de programación puede afectar el rendimiento, la legibilidad, el mantenimiento, la solidez, etc. C ++ intenta hacer la menor cantidad posible de elecciones para el programador. Al aprender C ++, aprenderá cómo hacer estas compensaciones y elecciones usted mismo para resolver sus problemas.

Es posible que no use ninguno de estos idiomas en la industria ni que los vuelva a tocar, pero el proceso de aprenderlos lo ayuda a comprender otros idiomas que usará. Otro aspecto es que aprende las herramientas en torno a un idioma específico. Ejecutar gcc a través de la línea de comando, aprender Vim, recorrer un programa usando GDB, crear archivos Make, ingresar código usando SVN, escribir scripts de shell para automatizar las pruebas, etc.

Eso sí, el plan de estudios básico también tiene otros cursos (arquitectura de computadoras, estructuras de datos y algoritmos, compiladores, sistemas operativos, etc.). Por lo tanto, simplemente aprender estos idiomas no es suficiente para dominar la programación.

Kirk Fernandes
fuente
0

Pasar de un idioma básico a uno de alto nivel es el camino a seguir. De esa manera todavía tienes una idea de lo que está sucediendo en la parte de atrás.

  • C - Punteros y gestión de memoria
  • C ++: conceptos básicos de OO y todavía muy popular
  • Java / C #: lenguajes más populares
  • Un poco de montaje básico
  • Lenguaje funcional - Ej. Haskell
  • Lenguaje de script - Ej. Python
Carra
fuente
0
  1. Pitón. Para hacer las cosas, haga una programación ordinaria. De procedimiento, OO y (hasta cierto punto) funcional.

  2. Expresiones regulares. Están en la biblioteca de Python, pero es un DSL separado.

  3. Shell (BASH o lo que sea). El "&", "|", ";" Los operadores para combinar procesos son críticos y desagradables en Python.

  4. SQL Esta es, por ahora, la lengua franca para el acceso a datos.

  5. XHTML. Esta es, por ahora, la lengua franca para la presentación de datos.

  6. CSS

Tal vez C si fuera necesario.

S.Lott
fuente
Parece que has dejado fuera la etapa de " iluminación profunda ". ¿Es ese el número 7?
Mark C
@ Mark C: solo trato de cubrir "la mayoría de los lenguajes y paradigmas muy utilizados hoy en día". En mi experiencia, estos "otros" o DSL son quizás más utilizados que los lenguajes de programación. No estoy seguro de que esto conduzca a una iluminación profunda, solo a la exposición a muchos idiomas que realmente se usan.
S.Lott
Tienes razón, veo que dijo eso, luego noté que también dijo "o paradigmas". Fue solo de buen humor.
Mark C
@ Mark C: Pero SQL y CSS son los "otros paradigmas" que son los más interesantes. De hecho, Regular Expressions es un paradigma que causa muchas preguntas sobre Stack Overflow.
S.Lott
0

Comience cerca del metal:

  1. Ensamblador
  2. C
  3. C ++
  4. C#
  5. Ceceo
  6. Python o Ruby

Ahora el problema con un enfoque tan amplio es que nadie puede llegar a ser ni remotamente capaz en estos idiomas sin años de estudio.

  1. Ensamblador: 3 meses
  2. C: 6 meses
  3. C ++: 2 años
  4. C #: 6 meses
  5. Lisp: 3 meses
  6. Python / Ruby: 3 meses

A menos que su intención sea enseñarles "Hola mundo", lo que debería tomar alrededor de un mes para los 6.

SnoopDougieDoug
fuente
-1

¿Por qué no ir directamente y aprender VB o C #? En mi opinión, ambos son idiomas completos que van desde principiantes hasta avanzados, en mi humilde opinión.

TéBeberGeek
fuente
44
Porque esa no es ninguna amplitud, y por lo tanto no es una respuesta a la pregunta. Además, si cree que uno (o ambos) cubre todo lo que debería aprender, usted mismo necesita aprender más idiomas.
David Thornley