Como educador de CS de nivel universitario, la cuestión de qué lenguaje de programación enseñar en el primer curso de programación a menudo se debate. Hay miles de idiomas para elegir, y mucha fiebre religiosa (o fevour) que apoya un campamento de idiomas sobre otro. Todo este sesgo subjetivo que rodea a cada lenguaje de programación hace que sea muy difícil para un educador elegir uno.
Mi pregunta es:
¿Qué criterios objetivos puede usar un educador para seleccionar un lenguaje de programación para usarlo como base para un curso de programación universitaria de primer año? ¿Cuál es la base de estos criterios?
Nota : No quiero ver una lista de lenguajes de programación y por qué son los mejores para usar. La pregunta no es sobre el mejor idioma, sino sobre los criterios para seleccionar un idioma . Sin embargo, las respuestas pueden ser utilizar lenguajes de programación para ilustrar puntos particulares.
Esta pregunta se inspiró en otra pregunta que se consideró fuera de tema: https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language .
fuente
SML
simplemente porque es poco probable que algún estudiante conozca ese idioma de antemano. Esto equilibró a cada estudiante más o menos al mismo nivel para comenzar el curso.Respuestas:
Echaré mis dos centavos, aunque creo que este tema es un pozo sin fondo. No me malinterpreten, creo que es una pregunta fascinante, pero probablemente no la resolveremos aquí para satisfacción de todos.
En pocas palabras, diría que el idioma debe hacer lo que quieres que haga , de la manera más simple e inequívoca posible, y no más .
Mi propia experiencia proviene de dar clases particulares a varias generaciones de estudiantes de primer y segundo año con el lenguaje de programación Oberon . Las personas que conocen este idioma reconocerán su influencia en mis opiniones. Tenga en cuenta que este lenguaje se utilizó para enseñar "Algoritmos y estructuras de datos". En ese momento (en aquel entonces), la programación funcional y el diseño orientado a objetos se enseñaban en cursos separados a partir del segundo año.
Importante : sin embargo, antes de entrar en los detalles de cualquier idioma, me gustaría enfatizar que lo más importante es ser absolutamente claro, para usted y sus alumnos, sobre cuáles son los objetivos de su curso. ¿Estás enseñando programación per se ? ¿O algoritmos y estructuras de datos? ¿O ingeniería de software? Antes de elegir un idioma, vale la pena pensar un momento sobre a dónde vas con él. Las diferencias en este nivel (objetivos) es lo que probablemente, en mi opinión, lleva a la mayoría de los desacuerdos sobre este tema.
Los puntos que considero importantes pueden superponerse con varias cosas que ya se han dicho, pero creo que la mayoría terminan siendo subconjuntos de uno de los siguientes cuatro:
Sencillez : los estudiantes generalmente están allí para aprender programación, algoritmos y estructuras de datos, y no las características y complejidades de ningún lenguaje de programación específico. Wirth usó la cita de Einstein "Hazlo lo más simple posible, pero no más simple" como principio rector en el diseño de Oberon, y hay varios otros idiomas que lo hacen igual de bien. El lenguaje de programación que elija debería poder implementar todos los conceptos requeridos en su conferencia, pero debería hacerlo con el conjunto más pequeño posible de características / detalles. El lenguaje de programación suele ser solo la herramienta, no el objetivo.
No ambigüedad : un hermano cercano de la simplicidad, debe haber una construcción para cada concepto, con la menor superposición posible. Piénselo como si hubiera una sola forma "correcta" de implementar cada concepto. ¿Tres tipos diferentes de bucles que semánticamente todos hacen lo mismo? ¿O quince formas diferentes de incrementar una variable? No está bien. Esto también hace que corregir la tarea o, en general, simplemente comprenda el código de sus estudiantes mucho más fácil. Sus asistentes de enseñanza lo apreciarán.
Portabilidad : los estudiantes irán a clase con máquinas Linux, Windows y OSX, y el entorno de programación debe ser lo más similar (idéntico) posible en los tres. Los resultados de cualquier programa también deben ser idénticos. Este es otro punto que los asistentes de enseñanza, responsables de marcar la tarea y abordar las preguntas / problemas, apreciarán mucho.
Preferencia de la industria : En serio, deberíamos comenzar a preocuparnos por esto solo si la "Industria" misma decide qué lenguaje de programación le gusta más. Desde la invención de las computadoras, este ha sido un objetivo en constante movimiento. Por el momento, si sus alumnos realmente aprenden a programar, no dependerá del idioma. Sin embargo, hay algunas áreas donde la industria logra acordar un estándar, por ejemplo,
VHDL para diseño de circuitoso SQL para consultas de bases de datos, por lo que este sigue siendo un punto válido.Una vez más, ¡cómo un idioma se ajusta a esta lista depende en gran medida de lo que estás tratando de enseñar!
fuente
WHILE expr DO stmts END
etc.Desarrollar el pensamiento algorítmico para resolver problemas como el objetivo principal: Una cosa mala acerca del uso de un paradigma orientado a objetos en el primer curso es que lograr que los nuevos estudiantes se involucren en cosas como la herencia, el polimorfismo, etc., los distrae del objetivo principal mencionado anteriormente. De hecho, la introducción de cualquier consideración secundaria además de este objetivo central, como la ingeniería de software, la portabilidad, la utilidad de la industria, etc., son contraproducentes, por la razón indicada.
No es un lenguaje orientado a objetos: hoy en día, la mayoría de las universidades comienzan a enseñar programación correctamente con un lenguaje orientado a objetos. Creo que esto es un error. Hay cosas en el mundo que pueden entenderse realmente solo en contraste con su opuesto. Sin estar expuestos a un paradigma procesal de programación (datos y funciones como dos aspectos separados del programa), muchos pueden pasar por alto la idea básica de orientación a objetos (datos y comportamiento vistos como intrínsecamente unidos). Y debido a que la programación orientada a objetos es tan importante, perder su idea básica no es poca cosa. Además, dado que lo más probable es que en los cursos más avanzados los estudiantes de CS programen principalmente en OO, también necesitan estar expuestos al lado procesal de las cosas.
Entonces, al final, optaría por un lenguaje de procedimiento, evitando funciones avanzadas, centrándome en el desarrollo del pensamiento algorítmico. Pero, al evitar funciones avanzadas, no me refiero a evitar problemas desafiantes. Quiero decir, que incluso los problemas desafiantes, se debe exigir a los estudiantes que lo resuelvan utilizando los primeros principios, herramientas simples.
fuente
public static void main()
en Java, que tiene que estar dentro del contexto de alguna clase. Esto hace que Java sea menos que ideal como primer idioma, aunque, por supuesto, el obstáculo no es demasiado grande.public static void main()
por mucho tiempo. BlueJ es un buen ejemplo de un IDE que permite a los estudiantes escribir programas sinmain
ninguno en ningún lugar.Como estamos hablando del primer curso de programación en un programa de Ciencias de la Computación, diría que el aspecto más importante sería qué conceptos fundamentales de CS enseñará a sus estudiantes. Como no existe un lenguaje que pueda enseñar todos los conceptos a la vez, debe considerar qué conceptos se necesitarán más adelante.
No estoy de acuerdo con la noción de @ Kaveh de que la relevancia de la industria es importante; Puede ser una ventaja, pero es de menor importancia aquí. Con una base sólida en los principios de CS, aprender un lenguaje "industrial" en cursos posteriores será relativamente fácil.
Como nota al margen, independientemente del idioma elegido para ser el primero, es importante someter a sus alumnos a otro idioma radicalmente diferente lo antes posible.
fuente
Mi principal preocupación es la universalidad , en el sentido de que aprender este lenguaje de programación debería hacer que el estudiante sea capaz de manejar la mayoría de los lenguajes de programación.
Por mucho que me arrepienta, este criterio excluye los lenguajes funcionales puros. También se aplica al curso que no debe usar características exóticas del idioma.
... pero esto es solo sentido común.
fuente
Al elegir un primer lenguaje de programación, hay muchos problemas que deben considerarse. Muchos de estos han sido considerados en las respuestas anteriores. Incluyo 3 más ya que fueron parte de mi respuesta a la pregunta cerrada ( https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language ) que originalmente inspiró esta pregunta . Copié mi respuesta aquí (y la modifiqué) según la política actual de eliminar preguntas cerradas.
Aquí hay 3 puntos a considerar, usando algunos lenguajes de programación como ejemplos.
Programación en grande vs programación en pequeño
Cuando se aprende a programar por primera vez, es necesario aprender a programar en pequeño , antes de pasar a aprender mecanismos para ayudar a programar en grande .
Al programar en pequeño, me refiero a escribir programas con menos de 100 líneas. Estos programas incluirán algoritmos que manipulan estructuras de datos simples, tienen un flujo de control simple y resolverán problemas simples. En general, no se considerarán como aplicaciones .
Al programar en grande, me refiero a escribir grandes programas creados a partir de muchos componentes / clases, construidos sobre una API, con una GUI, una base de datos, posiblemente en una configuración cliente-servidor.
Las cosas en las que un programador necesita pensar cuando programa en pequeño son muy diferentes de cuando programa en grande. La programación en general requiere que el programador piense en la modularidad, las buenas interfaces, el buen diseño, la reutilización y muchos otros problemas. Los lenguajes de programación modernos proporcionan muchas construcciones para ayudar a programar en general. Estas construcciones incluyen clases, módulos, interfaces, ocultación de información, etc. Cuando se programa en pequeño, estos problemas son mucho menos importantes.
Un lenguaje de programación como C ++ tiene muchas características para ayudar a programar en general, pero es más difícil sentarse y comenzar a escribir un programa muy simple. Java es similar
Por otro lado, un lenguaje como Python, Ruby, Scheme o Haskell hace que sea mucho más fácil escribir directamente un programa.
Alto nivel vs bajo nivel
Lenguajes como C ++ y C son más bien de bajo nivel. Permiten al programador manipular referencias en la memoria directamente. Aunque esto le permite a uno escribir código muy eficiente, los detalles de bajo nivel pueden ser difíciles para que un primer programador aprenda el idioma. Algunos dirían que estos detalles de bajo nivel se interponen en la forma de escribir la lógica para resolver el problema.
Un lenguaje de nivel superior como Python hace que sea más fácil expresar conceptos más directamente en términos del dominio del problema.
Mecanografiado estadísticamente vs mecanografiado dinámicamente
C ++, Haskell, Java y muchos más lenguajes están tipificados estáticamente. Esto significa que el compilador busca automáticamente lugares donde se producen errores potenciales en función de los tipos de valores esperados en cada ubicación del código. Hay una pequeña guerra religiosa sobre si la escritura estática es algo bueno o no, pero me mantendré alejado de eso. Un problema con la escritura estática para los nuevos programadores es que los mensajes de error informados por el compilador a menudo son difíciles de entender. Este es especialmente el caso con las plantillas C ++ y los programas Haskell en general.
Python, Ruby y Scheme se escriben dinámicamente. Esto significa que se detectan errores mientras se ejecuta el programa. Se puede argumentar que esto es demasiado tarde para detectar los errores (pero también se pueden usar pruebas para evitar tales errores). Nuevamente, evitando el argumento religioso, la ventaja del tipo de errores que uno encuentra al escribir programas simples en un lenguaje de programación de tipo dinámico son del tipo que este objeto no sabe cómo hacer esta operación . En el contexto de un pequeño programa, estos errores son fáciles de entender y rastrear.
Los lenguajes como C tienen una escritura débil, lo que significa que aunque el compilador ayuda con algunos errores, el tiempo de ejecución no logra atrapar otros que ocurren, como accesos de memoria no válidos. Como resultado, el mensaje de error devuelto al programador es similar a "Programa bloqueado". Un lenguaje de tipo dinámico atraparía estos errores y los convertiría en un mensaje de error más comprensible.
Otros
Para otros idiomas, pueden entrar en juego diferentes consideraciones, como el soporte proporcionado por el entorno de programación, las API disponibles, la calidad de los libros y los tutoriales en línea, etc.
fuente
Como comentario introductorio, considere la posibilidad de presentar más de un idioma (en un curso). En mi primer término, mostramos SML y Java. El contraste tenía un mensaje muy propio e importante: elija la herramienta adecuada para el trabajo.
Pero ahora por criterios, en orden arbitrario.
La dificultad para aprender es un problema subjetivo, pero importante: no quiere que su estudiante pierda tiempo aprendiendo el idioma, sino haciendo cosas con él. Podría decirse que los lenguajes dinámicos como Ruby pueden ganar en este frente: puede alimentarlos con cualquier cosa, y hay excelentes tutoriales "ficticios" en la web. Si no recuerdo mal, también hay estudios que muestran que los estudiantes que no han programado antes obtienen mejores resultados con lenguajes funcionales que con otros.
Riqueza : el idioma (s) debe ser lo suficientemente rico para todos los conceptos que desea enseñar. Por ejemplo, si desea analizar funciones de orden superior, necesita un lenguaje donde las funciones sean valores, como lenguajes funcionales o Scala.
Escalabilidad : es probable que sus estudiantes no aprendan más idiomas por sí solos que los que les muestra. Por lo tanto, desea que los idiomas elegidos se escalen en el curso de sus estudios: necesitan escribir los ejercicios de su mascota ahora, pero también pueden atacar un proyecto de tamaño mediano más adelante. Java y lenguajes con ecosfera similar son buenas opciones aquí.
Soporte de herramientas : esto está relacionado con la escalabilidad. Si espera / desea que sus estudiantes sean productivos con el idioma, entonces deben existir buenos IDE, administradores de compilación y bibliotecas. Las conchas interactivas (Ruby, Scala) también son buenas, especialmente para empezar. Las herramientas también tienen que funcionar en todas las plataformas principales.
Documentación : Probablemente no quiera enseñar el idioma, pero haga que los estudiantes se enseñen a sí mismos con su guía (abstracta). Por lo tanto, una buena documentación es importante. Discutible, cuanto más popular y establecido sea un idioma, mejor será la documentación. Por ejemplo, la documentación de Scala es bastante pobre (pero está mejorando). Herramientas como Hoogle son una ventaja.
Disponibilidad : En realidad, hay personas que enseñan utilizando Matlab o Visual C ++. Tenga en cuenta que no todos pueden tener una licencia o una máquina que pueda ejecutar los programas necesarios. Probablemente debería preferir los idiomas gratuitos que se ejecutan en una variedad de plataformas.
Limpieza : Probablemente quieras moldear la forma en que piensan tus alumnos. Cuanto más desordenado sea el lenguaje, más desordenado pensarán; Nunca propondría PHP en un curso. Los lenguajes dinámicos en general tienen desventajas aquí: permiten, a veces incluso promueven, malos hábitos.
Los criterios que son más importantes para usted que otros también dependen de lo que quiera enseñar. ¿Es esto literalmente un curso de programación? ¿Es un curso de algoritmos y estructuras de datos? ¿Es un curso que introduce conceptos de lenguajes de programación en diferentes paradigmas? ¿Es un curso sobre desarrollo de software en grande?
fuente
For example, if you want to discuss higher-order functions, you need a language where functions are values, such as functional languages or Scala.
... o C o Pascal, que han tenido punteros de función prácticamente para siempre. Prácticamente el único lenguaje (convencional) que este criterio realmente excluye es Java.Pregunta fascinante; Me gusta su énfasis en criterios objetivos. Queremos que los estudiantes de primer año aprendan:
conceptos de programación : el primer lenguaje de programación debe admitir: llamadas de función, iteración, recursión
ideas fundamentales : el primer lenguaje de programación debe admitir matrices (para los primeros pasos en una introducción suave sobre cómo funciona realmente la memoria y cómo funcionan los punteros)
habilidades prácticas de programación : cómo usar el depurador, cómo usar el generador de perfiles, cómo resolver problemas grandes (un lenguaje de alto nivel), cómo armar sistemas grandes, cómo desglosar problemas (descomposición de problemas), cómo evitar escribir código complicado, cómo comunicar a los humanos la intención detrás de una serie (a menudo críptica) de declaraciones ejecutables.
el hecho de que existen bibliotecas preescritas para cosas como sort () y cómo usarlas, es decir, el hecho de que no es necesario escribir todo desde cero.
Otros criterios para un primer idioma :
interpretado (la retroalimentación rápida ayuda al proceso de aprendizaje).
Un entorno interactivo que acelera el aprendizaje, las pruebas y la depuración.
el código fuente de alta calidad está disponible para que los estudiantes lo lean en ese idioma
"fácil de leer", "sintaxis que se acerca al lenguaje natural" (para que sea más fácil leer y calificar el código fuente)
portátil (se ejecuta en Mac OS, Windows, Unix). Al menos una implementación de software libre del lenguaje.
rápido para enseñar, "pocos problemas", por ejemplo, "[I] t puede ser más rápido enseñar primero a los principiantes Python y luego Java, en lugar de Java como primer OOPL". - "Comparación de lenguajes de programación orientados a objetos" y TelescopeRule
Matthias Felleisen desarrolló un lenguaje de programación con mensajes de error adaptados a un público principiante. Él enfatiza que la elección particular del idioma no es tan importante como enseñar una buena metodología de diseño. De hecho, ve el primer curso de CS como una clase de Artes Liberales, que enseña pensamiento crítico, resolución de problemas y atención al detalle.
criterios para un segundo lenguaje de programación
Cosas que queremos que los estudiantes aprendan, pero tal vez esto pueda esperar al segundo lenguaje de programación:
un lenguaje "relevante" que no es "demasiado esotérico"; algo "popular en la industria"
Teoría de la complejidad: cómo reconocer tareas que son imposibles con la tecnología actual.
cosas de nivel superior: cómo elegir la herramienta adecuada para el trabajo , cómo usar un compilador, estructuras, programación orientada a objetos, programación funcional, programación lógica, diseño del compilador, funciones de composición y manipulación (en el sentido de Lisp / ML), programación concurrente y distribuida,
cosas de bajo nivel: aritmética de punteros, arquitectura informática. administración de memoria, marcos de pila, programación de ensamblaje, arquitectura de la máquina, controladores de dispositivos y diseño del sistema operativo (para que la máquina "no parezca una caja negra aterradora que no puedan penetrar")
EDITAR: Me parece decepcionante que publicar un resumen de algo que escribí, en colaboración con muchos otros, "no sea una publicación legal".
Así que agrego una cita más formal a mi enlace informal anterior, intentando cumplir con el uso justo y otros problemas de derechos de autor de wiki.
Esta respuesta es un resumen del primer idioma de primer año (Anon 2011) en el Portland Pattern Repository.
(Anon 2011) Muchos autores anónimos y varios otros. "Primer idioma de Freshmans". Depósito de patrones de Portland. 27 de septiembre de 2011. http://c2.com/cgi/wiki?FreshmansFirstLanguage .
fuente
Creo que la simplicidad y la facilidad de aprendizaje es uno de los criterios principales. En un curso introductorio sobre programación, nos gustaría evitar obstáculos innecesarios de programación y enfocarnos tanto como sea posible en los principios de programación y resolución de problemas algorítmicos. El primer año, los estudiantes a menudo carecen de la capacidad de pensar algorítmicamente sobre los problemas, por lo que el curso también trata sobre la enseñanza del pensamiento algorítmico.
Otro criterio es la utilidad del lenguaje en la industria. No quisiéramos enseñar un idioma que no sirve para nada en la industria. Una clara mayoría de los estudiantes van a trabajar en la industria, por lo que uno debe tener en cuenta lo que se está usando (y se usará cuando los estudiantes se gradúen) en la industria.
El tercer criterio sería los cursos que los estudiantes tomarán en los años posteriores. Los cursos, particularmente los cursos requeridos, no están diseñados en sí mismos sino en coordinación con otros cursos.
Lo último en lo que puedo pensar en este momento es lo mismo que la respuesta de jmad, el idioma debería facilitar el aprendizaje de otros idiomas importantes. Debería ser lo suficientemente rico y aprender los idiomas importantes posteriores sería fácil (aquí, importante significa importante desde la perspectiva de los estudiantes).
Creo que muchas universidades han cambiado su curso principal de introducción a la programación de Java / C ++ / C a Python, aunque de vez en cuando pueden proporcionar una introducción a la programación en otros lenguajes (a menudo para especializaciones no informáticas, por ejemplo, C para especializaciones en ingeniería eléctrica) aunque pueden mostrar flexibilidad si el instructor quiere experimentar con la enseñanza de otro idioma de vez en cuando.
fuente
Entonces, prescindiré de mi reacción instintiva de inmediato, que es que todos deberían aprender a programar a través de SICP porque Lisp es lo correcto.
Ya se han ofrecido muchos buenos criterios para seleccionar un idioma ... la simplicidad y la portabilidad se encuentran entre las más importantes. Sin embargo, también creo que es vital para los estudiantes nuevos en la programación no tener una idea equivocada (o no tener idea) sobre lo que sucede detrás de escena con los lenguajes modernos.
Aunque algunas de estas otras publicaciones han ofrecido excelentes criterios, me gustaría utilizar un lenguaje particular para ilustrar cómo se ve 'cumplir los criterios'.
Algunas de estas preocupaciones se han abordado (mucho mejor de lo que podría intentar) en la publicación del blog de Joel Spolsky, The Perils of JavaSchools . Elegir lenguajes como Java o Python cierra sobre dos de los conceptos más difíciles (y más vitales) en CS; a saber, punteros y recursividad.
Por supuesto, enseñar un curso de introducción en C va a ser increíblemente denso, mientras que probablemente falten muchos conceptos importantes relacionados con la recursividad. Del mismo modo, un curso impartido en Lisp tendrá que abordar los punteros debajo de las portadas,
car
ecdr
implicar conceptos importantes relacionados con las listas vinculadas, al tiempo que permite que el lenguaje maneje los detalles.Básicamente, lo que quiero decir es que los estudiantes necesitan comprender los fundamentos de las estructuras de datos y algoritmos, así como la implementación práctica.
Tampoco estoy de acuerdo con la sugerencia de no utilizar un lenguaje orientado a objetos. Creo que la utilidad de los lenguajes orientados a objetos para modelar el mundo real es un activo positivo para los nuevos programadores, siempre que se aclare la falta de coincidencia de impedancia, y que los lenguajes orientados a objetos sean un paradigma entre muchos.
Yo propondría que Ruby (sugerido como una posibilidad por otra publicación también) ejemplifique muchas cualidades para buscar en un lenguaje para usar en una introducción al curso de programación.
Justificaré esta afirmación momentáneamente, pero primero quiero comentar sobre una tendencia que me perturba en los cursos introductorios de CS. Trabajo en una universidad que, como muchas escuelas, recientemente cambió a usar Python para sus cursos de introducción. Creo firmemente que Python es el nuevo BASIC, y la tendencia del lenguaje es elegir la nueva amistad sobre el poder y la expresividad, como dije recientemente en otra parte . Esto es un mal servicio, y debemos pensar en los programadores en que se convertirán, no en los novatos que son en este momento.
De todos modos, justificando a Ruby como un lenguaje introductorio ...
malloc()
enseñándoles a extender el lenguaje en C.De todos modos, no hay sustituto para aprender muchos idiomas, desde muchos paradigmas, ya sea que los uses profesionalmente o no. Básicamente, creo que todos deberían entender , si no usar , C y Lisp. Ruby es el mejor compromiso que se me ocurre para un semestre introductorio.
De todos modos ... esos son mis US $ .02. No estoy tratando de convencerte de que uses Ruby, fíjate ... solo lo uso como un ejemplo de cualidades para buscar en un idioma para enseñar un curso de introducción.
fuente
Mi primer lenguaje de programación fue un lenguaje ensamblador de juguetes. El segundo fue Fortran. En el medio, me enseñaron una notación de "algoritmos", que era aproximadamente Algol 60. Resulté bastante bien. De hecho, creo que lo que me enseñaron fue bastante perfecto.
Cuando examiné por primera vez la programación funcional, en los trabajos de investigación, aunque no en un lenguaje implementado, dije "wow, esto es completamente diferente. ¡Es bastante matemático!" La mayoría de las personas a las que se les enseña programación funcional todavía tienen el mismo tipo de experiencia "guau". Pienso que es estupendo.
Creo que la programación imperativa y la programación funcional son dos formas completamente diferentes de ver el mundo. Les perjudicaríamos a nuestros estudiantes si les robáramos esa experiencia diversa.
El mejor primer lenguaje de programación debe ser algo lo más simple posible y lo más claro posible, para que los estudiantes puedan concentrarse en cómo pensar con claridad. Desafortunadamente, la simplicidad y la claridad del ensamblaje, Fortran y Algol 60 no tienen comparación con la mayoría de los lenguajes de programación modernos. Haskell es una buena excepción. Pero, Haskell sería mi segundo lenguaje de programación ideal, no el primero. Eiffel o Oberon tal vez podrían cumplir con los requisitos.
fuente
En la Escuela de Ciencias y Matemáticas de Carolina del Norte , hemos presentado a los estudiantes a Python desde 2004. Lo usamos para enseñar programación de procedimientos, porque creemos que la capacidad de escribir procedimientos cortos y correctos es vital para progresar más tarde con herramientas más pesadas, incluyendo OO programación.
Nos gusta por estas razones.
Python no es un lenguaje de formato libre. Obliga a los estudiantes a escribir su código en bloques usando sangría. (Como nota técnica, usamos el editor de texto vim y
set tabstop=4 set et
colocamos [ ] en .vimrc para eliminar problemas molestos y que la sangría del código sea notable pero no cause una desviación horizontal fea y excesiva). Nuestros estudiantes se acostumbran a ver la estructura jerárquica de los programas delimitados por espacios en blanco. Como resultado, sus hábitos de formateo tienden a ser muy buenos ya que programan en otros idiomas.La simplicidad sintáctica de Python lo hace amigable para principiantes. Se pueden escribir programas simples con un mínimo de palabras clave arcanas y encantamientos mágicos. Queremos que los estudiantes que normalmente no pensarían en la programación lo prueben. Tenga en cuenta la simplicidad encantadora de Python
hello.py
; Es claro como el cristal lo que está sucediendo.Python se escribe dinámicamente y se escribe con pato. Esto facilita la introducción de variables. Les digo a mis alumnos que las variables son solo etiquetas. Apuntan a los objetos. Envías un mensaje a un objeto usando el nombre de la variable, de la misma forma que alguien te envía un mensaje llamándote por teléfono.
Python es una herramienta que los estudiantes ambiciosos no superarán. Tiene bibliotecas sofisticadas que hacen hosts de cosas útiles. Es una poderosa herramienta creativa accesible para principiantes.
Python es gratuito y se ejecuta en todas las plataformas principales. Nuestra escuela es un entorno de sistema operativo heterogéneo con todo tipo de máquinas. No tenemos que preocuparnos por dolores de cabeza como problemas de compatibilidad. Se ejecutará en casi cualquier computadora.
Python tiene una excelente documentación. Alentamos a nuestros estudiantes a explorar, jugar y colorear fuera de las líneas. Aprenden sobre el uso temprano de la documentación de Python y, a menudo, terminan explorando cosas interesantes fuera de clase.
Estamos muy contentos con Python.
fuente
Yo diría que el idioma (bajo algunas limitaciones) no importa tanto como lo que haces con el idioma. Puede aprender lo mismo sobre desarrollo de software, algoritmos, programación orientada a objetos, hardware informático, etc. en la mayoría de los idiomas. La clave es desarrollar algo interesante que utilice todos estos conceptos.
(respuesta migrada de https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language/ )
fuente
TL; DR: No hay forma deresponder objetivamente esto porque no hay una base objetiva para los criterios detrás de esto. Es tan arbitrario como tratar de debatir si el azul es, objetivamente , un color "mejor" que el rojo, o si el helado de vainilla es objetivamente "más sabroso" que el chocolate.
Creo que hay algunas publicaciones maravillosas ya presentes, pero agregaré mis propios 2 centavos.
Esta pregunta es similar a preguntar si hay una manera de elegir objetivamente el primer sabor de helado que alguien más debería probar al visitar un lugar de helados por primera vez. No, no hay una forma objetiva de elegir algo que sea inherentemente subjetivo .
¿Por qué? Porque incluso cuando miramos los criterios razonables mencionados en la respuesta de Pedro , todos tendrán una visión subjetiva de cómo cada factor "se sostiene" frente a las opiniones de otra persona.
Por ejemplo, ¿es Ruby objetivamente "más simple" que Python? ¿Más simple en qué sentido? ¿Con respecto a qué? ¿Qué significa "más simple" para ti ? ¿Significa "menos líneas de código"? ¿Significa "más fácil de leer y entender"? ¿Qué hay de los demás? ¿Por qué debería alguien estar de acuerdo con alguna selección en particular aquí? No creo que podamos responder esa pregunta objetivamente .
Esto lleva a la siguiente pregunta.
Por más razonables que sean algunos criterios, creo que esto se basa más en la preferencia subjetiva que en cualquier otra cosa. Por ejemplo, no hay razón por la que deba aceptar los criterios de simplicidad , inequívoca , portabilidad y preferencia de la industria de Pedro, independientemente de lo razonable que algunos puedan pensar que es. De hecho, la preferencia de la industria es subjetiva por definición y simplemente conduciría a un círculo vicioso. (Todos se entrenan en él, por lo que todos lo usan en la industria, por eso todos se entrenan en él, ...)
Por ejemplo, porque no
El punto es que, si bien podría llegar a un conjunto diferente de criterios de evaluación y aún ser considerado razonable, no podemos afirmar que sea objetivamente superior / inferior al de otra persona.
En conclusión, no hay una base objetiva para los criterios. Es tan arbitrario como tratar de debatir si el azul es, objetivamente , un color "mejor" que el rojo, o si el helado de vainilla es objetivamente más sabroso que el chocolate.
Eso no quiere decir que no pueda tener buenas razones para justificar sus preferencias, pero al final del día, son solo sus preferencias.
fuente