¿Qué lenguajes (o clases (como en paradigmas) de lenguajes de programación, más un lenguaje recomendado de esa clase) deberían enseñar a cada estudiante de informática en la universidad según usted? Motiva tus respuestas; ¿Por qué ese lenguaje? ¿Qué uso tendrá uno de él? ¿Qué conceptos enseña (mejor que el lenguaje X)?
Nota / aclaración : esta pregunta es sobre informática con un fuerte enfoque en la ingeniería de software, no pura informática. El objetivo principal es la educación en ciencias de la computación y no la educación en ingeniería de software.
Respuestas:
Voy a dar una lista:
Los estudiantes deben estar expuestos a todos estos paradigmas como mínimo. No solo uno o dos.
Supongo que muchas personas sugerirán Python para cubrir el estilo de procedimiento, el estilo OOP y tal vez otros, pero no tengo suficiente experiencia personal con Python para poder recomendarlo con confianza.
fuente
Personalmente, me parece algo triste que los lenguajes funcionales no se enseñen tan predominantemente como solían ser. Creo que, al menos, los estudiantes de ciencia ficción deberían estar expuestos a un lenguaje de todos los paradigmas principales: de procedimiento, orientado a objetos, funcional y dinámico.
fuente
Creo que un estudiante de CS bien equilibrado debería aprender un idioma en cada uno de los 4 tipos de lenguaje de programación:
Funcional - Lisp / Haskell / PostScript. No tengo mucha experiencia con Haskell, pero he escuchado a otros programadores que se entusiasman con eso. Comprender los constructos de la programación funcional y por qué son útiles en muchas situaciones ayudará a un programador a mejorar la organización de algoritmos en otros lenguajes también.
Orientado a objetos : elija. C # / Java / Python / Ruby / yadda yadda yadda. Este tipo debe enseñarse simplemente porque eso es lo que quieren las empresas modernas.
Imperativo - C / Fortran / Pascal. Estos son menos comunes en estos días, pero aún deben aprenderse desde una perspectiva práctica / histórica. Los métodos que emplean todavía tienen practicidad porque en todos los idiomas, todo se reduce a una instrucción. Y los idiomas imperativos son muy buenos para enumerar y seguir instrucciones.
Lógico - ProLog. Nunca he encontrado un buen uso práctico para ninguno de estos lenguajes, pero he encontrado algunos de los conceptos detrás de los lenguajes lógicos cuando trato de descubrir cómo escribir algunos de mis métodos en lenguajes más orientados a objetos. No pude concentrarme mucho en los idiomas lógicos durante mis años universitarios, y creo que un enfoque más fuerte allí podría haberme hecho algo bueno entonces.
fuente
El idioma n. ° 1 que todo graduado de CS debe conocer es el que maximiza su potencial para conseguir un gran trabajo. Eso va a cambiar con el tiempo, va a cambiar según la definición del individuo de un gran trabajo , y va a variar según la región geográfica.
Por el momento, diré que el inglés es el idioma número 1 que todo experto en CS debe saber (esto, por supuesto, varía según la región).
fuente
Creo que cambia con el tiempo, pero idealmente: 3 idiomas desde 3 perspectivas muy diferentes. En mi época era procesal, OO y funcional: Pascal, C ++ y LISP. No estoy tan entusiasmado con esos tres en particular. Pero cuando entrevisto busco:
Como otro oficio, creo que los programas de CS necesitan capacitar a los estudiantes en idiomas prominentes en el mercado. En cualquier momento, creo que 2-3 idiomas tienen una gran importancia para la mayoría de los trabajos. Creo que una escuela le debe a los estudiantes la oportunidad de aprender 2 de 3 de esos idiomas con una capacitación profunda disponible en al menos uno.
fuente
Para un estudiante de CS, busque lenguajes de programación que estén estrechamente relacionados con los conceptos de CS que se discuten. Sugeriría:
La lista podría continuar de esta manera, pero la idea fundamental es bastante simple: enseñar a los estudiantes el lenguaje de programación que mejor se adapte a la forma en que desea enseñar los conceptos.
fuente
yacc
para tener una idea de lo que sucede detrás de escena, sea cual sea el lenguaje de programación que esté utilizando. ayuda a comprender conceptos básicos como el código muerto y varios tipos de optimizaciones que un compilador (bueno) podrá hacer por usted.
fuente
Lisp (con CLOS para OOP) y Haskell. Esta pregunta no está restringida a estudiantes. Nuevos y sofisticados lenguajes de programación han tomado prestadas (¿copiadas, robadas? ... no, no está mal) muchas características de estos dos. Puedes prepararte para el futuro. La programación funcional (estilo) es más importante hoy y se introduce en lenguajes de programación imperativos como C # (LINQ) o C ++ (lambda) y muchos más. Es una pena que algunos estudiantes aprendan solo Java.
fuente
Creo que el lenguaje no es tan importante como la gente cree.
Sí, necesita saber cómo programar, etc., pero muchos programadores excelentes son autodidactas y se basan en sus experiencias del mundo real que los ayudan a desarrollarse.
Los estudiantes podrían aprender algunas lecciones sobre cómo programar en el mundo real y no solo los métodos de libros, esto los haría más "redondeados" y, en mi opinión, mejores desarrolladores / graduados.
¡Aprendí más sobre programación y desarrollo de software después de dejar la universidad y comenzar a trabajar!
fuente
REALMENTE IMPORTA ?
Por lo general, la picazón detrás de esta pregunta es "¿Qué palabras de moda puedo poner en mi currículum que me darán los trabajos más lucrativos / interesantes / desafiantes / fáciles?". Aunque la pregunta tiene sus méritos, ya que la mayoría de los currículums son evaluados por personas de recursos humanos que no comprenden lo que están buscando. pero es muy superficial, ya que una vez que ha pasado las puertas necesita entregar los productos.
No es qué idiomas sabes que te hacen un buen o mal programador, es cómo puedes usarlo. Para esto hay básicamente dos categorías de programadores:
Los que se concentran en aprender un idioma en su núcleo. Lo más importante es el idioma y cómo usarlo. En los extremos, tienden a optimizar súper cada pequeña mota de código y a menudo usan características oscuras solo porque pueden.
Luego están los que quieren aprender sobre técnicas y paradigmas. El lenguaje que usan realmente no importa siempre que pueda expresar su imagen mental con elegancia. En los extremos, estos tenderán a usar UML u otros sistemas similares con la esperanza de que otros hagan el trabajo duro de codificarlo.
En mi opinión, necesitas ambos. El n. ° 1 proporcionará habilidades a corto plazo y, cuando lo elijas sabiamente, te facilitará las puertas de RR.
# 2 proporcionará orientación y organizará su línea de pensamiento hacia una solución funcional al problema en cuestión, pero sin 1 sigue siendo una idea, flotando para siempre en los limbos del cielo de vaporware (o el infierno, dependiendo de dónde lo mire).
# 1 le dará los medios para implementar ideas en sistemas de trabajo reales, pero sin 2 sus sistemas tenderán hacia monstruos cancerosos sin forma.
fuente
Creo que tú mismo respondiste parcialmente tu pregunta.
De verdadera importancia es dar a los estudiantes la oportunidad de entrar en contacto con varios paradigmas, los idiomas reales no deberían importar.
Por supuesto, es importante enseñar principalmente aquellos paradigmas que brindan la mayoría de las oportunidades de trabajo (probablemente OOP en este momento). En consecuencia, también es mejor enseñar un lenguaje ampliamente utilizado para este paradigma, ya que esto es más útil que aprender algo que probablemente nunca usará. Por lo tanto, también odiaba tener que escribir pseudocódigo en mis exámenes. El pseudocódigo está bien, siempre que no tenga una sintaxis 'fija'. Debería poder transmitir conceptos.
Así concretamente:
OOP: .NET o Java
Al menos 1 paradigma de programación adicional, para que el alumno conozca otros enfoques.
Funcional: Lisp?
fuente
Lenguaje ensamblador y microcódigo. Un estudiante de CS debe comprender todas las capas básicas de abstracción entre las máquinas de estado booleanas y las últimas funcionalidades de alto nivel / OOP / etc. paradigma del lenguaje de programación.
Básico o Logo o Squeak (et.al.), si alguna vez quieren poder entender cómo enseñar a los niños pequeños algo de alfabetización informática.
Fortran, Cobol y Lisp, si quieren entender la historia de los lenguajes de programación, y cuáles son los problemas reales que solucionan las prácticas modernas.
fuente
Elegir 3 o más idiomas de diferentes paradigmas no es tan difícil, se han dado muchas buenas respuestas. Pero si tuviera que elegir un solo idioma, elegiría Scala, porque es funcional y está orientado a objetos. Puede explicar y comparar diferentes enfoques dentro del mismo idioma.
fuente
¡No olvide los lenguajes orientados a la pila / concatenantes! Pueden ser verdaderos maestros de la mente. Enfatizan la complejidad del edificio utilizando primitivas pequeñas y fáciles de entender. Puede usarlos para escribir código libre de puntos (o tácito) que se siente tan limpio.
El lenguaje clásico es Forth , pero mi favorito en estos días es Factor . También vale la pena echar un vistazo a Joy y Cat . No te pierdas el wiki de lenguaje concatenativo . ¡Es más divertido que una bolsa llena de martillos!
fuente
Algo funcional, Haskell o Lisp sería mi primera opción, pero quizás Erlang. Los lenguajes funcionales realmente te enseñan cómo construir abstracciones de una manera muy poderosa.
fuente
A pesar de su falta de corriente principal, encuentro que D, específicamente la versión 2, proporciona algunas lecciones interesantes que no se pueden aprender fácilmente en otros lugares. Hace un intento más serio que cualquier otro lenguaje en el que pueda pensar para obtener una programación imperativa / procesal, orientada a objetos y funcional para jugar bien entre sí, y permitir la programación en un nivel muy bajo (punteros, administración manual de memoria, en línea lenguaje ensamblador) y un nivel muy alto (programación genérica y generativa) en el mismo lenguaje.
Esto es valioso porque, en lugar de ver paradigmas de forma aislada como si existieran en universos diferentes, puedes ver el bosque a través de los árboles. Puedes ver las fortalezas y debilidades de cada paradigma en un nivel de grano fino a medida que los combinas en tus programas. Puede ver cómo se pueden implementar los principales aspectos de los paradigmas en las bibliotecas en términos de código de nivel inferior. El módulo de biblioteca estándar std.algorithm implementa importantes primitivas de programación funcional, pero es un código D simple y directo sin magia. Del mismo modo, rango estándarimplementa una evaluación diferida, pero nuevamente es un código D bastante simple. Puede comprender los costos involucrados en las primitivas de cada paradigma, porque las características cercanas al metal de D hacen que lo que realmente sucede bajo el capó sea relativamente transparente. Incluso puede escribir algo de bajo nivel que se parezca a C, y luego crear una interfaz bonita de alto nivel, en el mismo lenguaje, sin que se interpongan capas de pegamento mágico.
fuente
Pseudocódigo.
Las personas en el campo deberían poder explicar sus ideas de manera coherente y estructurada sin una jerga específica de marco o sintaxis. No debería tener que saber la diferencia entre sus corchetes y llaves para entender su algoritmo. No debería necesitar saber qué
??
significa o cuálesgrep
son los interruptores.Escriba en lenguaje sencillo, pero estructúrelo y formatee como código. Cualquiera puede implementarlo en el idioma que desee.
editar: esta respuesta está motivada en parte por la incapacidad de algunos programadores para escribir pseudocódigo.
Los beneficios del pseudocódigo es que las partes interesadas que no son de programación pueden entenderlo. No estoy sugiriendo que desee BA y usuarios que prueben su código, sin embargo, puede ayudar cuando un no programador comprenda el algoritmo requerido. Psuedocode elimina la necesidad de explicar
for (int i = 0; i < j; i++)
y lo que es esencialmente jerga repetitiva.fuente
C.
Por supuesto, uno debe saber más de un idioma, y no solo un lenguaje de procedimiento antiguo. Pero si tuviera que ir a una isla desierta con un solo compilador, iría con mi viejo y viejo gcc. Puede comprender la programación de alto nivel si conoce la programación de bajo nivel. Creo que no es cierto al revés.
fuente
Algunos de los lenguajes de programación que se aplicaron para adquirir habilidades generales de resolución de problemas, y los conceptos de programación son Logo y Karel, deben enseñarse antes de C / C ++ / Java / Lisp / PERL / Assembly / cualquier paradigma de programación.
Los estudiantes reciben una introducción muy práctica a la programación.
fuente
Cualquier cosa con objetos. Solo asegúrate de que lo aprendan bien.
Contrataría a un gran programador de Java para C # en cualquier momento, pero tendría muchas dudas contratar a alguien que nunca escribió código real
fuente