web-dev-qa-db-fra.com

Quels langages de programmation devraient être enseignés à chaque étudiant en informatique?

Quels langages (ou classes (comme dans les paradigmes) de langages de programmation, plus un langage recommandé de cette classe) chaque étudiant en informatique devrait-il être enseigné au collège selon vous? Motivez vos réponses; pourquoi cette langue? Quelle utilité en tirera-t-on? Quels concepts enseigne-t-il (mieux que la langue X)?

Note/clarification: Cette question concerne l'informatique avec un fort accent sur le génie logiciel, pas l'informatique pure. C'est toujours l'enseignement de l'informatique et non l'enseignement du génie logiciel qui est au centre.

13
Anto

Je vais donner une liste:

  • Assemblage (un dialecte relativement simple): Il est important de comprendre au moins un pe des fondamentaux
  • C: langage procédural, utilisé dans de nombreux endroits. N'encombre pas les nouveaux étudiants avec de nouveaux concepts comme OOD à la fois.
  • Java/C #/Eiffel/C++: quelque chose orienté objet est bon, n'importe lequel d'entre eux atteindra l'objectif d'enseigner aux élèves OOD et une fois qu'ils comprendront l'un de ces langages, ils devraient être capables d'apprendre les autres. bonnes langues, j'ai listé Eiffel car il a aussi du design-by-contract.
  • LISP et Prolog: enseigne aux élèves une toute nouvelle façon de penser, ce qui est important, même s'ils n'utilisent jamais l'un ou l'autre "dans le monde réel".
  • SQL et XML: présente de nouvelles façons de penser les données et comment les récupérer et les gérer.

Les élèves devraient être exposés à tous de ces paradigmes à tout le moins. Pas seulement un ou deux.

Je suppose que beaucoup de gens suggéreront Python pour couvrir le style procédural, OOP style et peut-être d'autres, mais je n'ai pas assez d'expérience personnelle avec Python pour pouvoir le recommander en toute confiance.

21

Personnellement, je trouve quelque peu triste que les langages fonctionnels ne soient pas enseignés aussi majoritairement qu'avant. Je pense qu'au moins les étudiants en science-fiction devraient être exposés à un langage de tous les paradigmes majeurs: procédural, orienté objet, fonctionnel et dynamique.

45
Michael Brown

Je pense qu'un étudiant CS bien équilibré devrait apprendre une langue dans chacun des 4 types de langage de programmation:

Fonctionnel - LISP/Haskell/PostScript. Je n'ai pas beaucoup d'expérience avec Haskell, mais j'ai entendu d'autres programmeurs qui en raffolent. Comprendre les constructions de la programmation fonctionnelle et pourquoi elles sont utiles dans de nombreuses situations aidera également un programmeur à mieux organiser les algorithmes dans d'autres langages.

orienté objet - Faites votre choix. C #/Java/Python/Ruby/yadda yadda yadda. Ce type doit être enseigné simplement parce que c'est ce que veulent les entreprises modernes.

Impératif - C/Fortran/Pascal. Celles-ci sont moins courantes de nos jours, mais elles devraient tout de même être apprises d'un point de vue pratique/historique. Les méthodes qu'ils emploient sont toujours pratiques, car dans toutes les langues, tout se résume à une instruction. Et les langues impératives sont très bonnes pour lister et suivre les instructions.

Logique - ProLog. Je n'ai jamais trouvé une bonne utilisation pratique pour aucun de ces langages, mais j'ai trouvé certains des concepts derrière les langages logiques utiles lorsque j'essaie de comprendre comment écrire certaines de mes méthodes dans des langages plus orientés objet. Je n'ai pas pu me concentrer longtemps sur les langages logiques pendant mes années collégiales, et je pense qu'une concentration plus forte là-bas aurait pu me faire du bien à l'époque.

33
Joel Etherton

La langue n ° 1 que tous les diplômés CS devraient connaître est celle qui maximise leur potentiel pour décrocher un excellent emploi. Cela va changer au fil du temps, cela va changer en fonction de la définition individuelle du bon travail , et cela va varier selon la région géographique.

Pour le moment, je dirai que anglais est la langue n ° 1 que chaque major CS devrait connaître (ceci, bien sûr , varie selon la région.)

6
oosterwal

Pour un étudiant CS, recherchez des langages de programmation qui sont étroitement liés aux concepts CS discutés. Je suggère:

  • Schéma, pour mieux comprendre le calcul lambda
  • Erlang, pour comprendre le modèle de l'acteur
  • Prolog, pour la logique des prédicats et les systèmes de preuve
  • Haskell, pour la théorie des types/catégories, et parce que l'évaluation paresseuse est si pleinement exprimée dans le langage
  • au moins un langage d'assemblage - si vous voulez le compter sous cette bannière, j'introduirais également un langage de code d'octet, comme le Java ou CLR byte-codes, et le LLVM IR
  • probablement un langage de définition de matériel, comme Verilog ou VHDL
  • Bison pour une classe de construction de compilateurs
  • quelque chose avec un système de type dynamique (Ruby me vient à l'esprit) ...

La liste pourrait continuer de cette façon, mais l'idée fondamentale est assez simple: enseigner aux élèves le langage de programmation qui sera le mieux adapté à la façon dont vous voulez enseigner les concepts.

4
Aidan Cully

Je pense que cela change avec le temps, mais idéalement - 3 langues de 3 perspectives très différentes. À mon époque, c'était procédural, OO et fonctionnel - Pascal, C++ et LISP. Je ne suis pas tellement vendu en particulier sur ces trois-là. Mais quand j'interviewe je cherche:

  • Un certain niveau d'expérience avec un langage où vous devez faire attention à la gestion de la mémoire (C/C++ et bien d'autres)
  • Un certain niveau d'expérience avec un langage orienté objet avec des attentes sur l'utilisation des API et les différentes abstractions disponibles (C++/Java)
  • Une langue "extensible" - quelque chose qui est bizarre, difficile et stimulant. Je ne vais pas embaucher parce que quelqu'un connaît LISP, Assembly ou un autre langage difficile, mais je veux voir que l'ingénieur a été confronté à une sorte de défi qui impliquait la résolution de problèmes graves et beaucoup de "qu'est-ce que c'est?" des moments.

Comme autre métier - je pense que les programmes de CS doivent former des étudiants sur des langues importantes sur le marché. À un moment donné, je pense que 2-3 langues ont une importance considérable pour la majorité des emplois. Je pense qu'une école doit aux étudiants de donner l'opportunité d'apprendre 2 langues sur 3 avec une formation approfondie disponible dans au moins une.

4
bethlakshmi

yacc

afin d'avoir une idée de ce qui se passe dans les coulisses, quel que soit le langage de programmation que vous utilisez. il aide à saisir les concepts de base comme le code mort et divers types d'optimisations qu'un (bon) compilateur pourra faire pour vous.

3
mariotomo

Je pense que la langue n'est pas aussi importante que les gens le croient.

Oui, vous devez savoir programmer, etc., mais de nombreux grands programmeurs sont autodidactes en s'appuyant sur leurs expériences du monde réel qui les aident lors du développement.

Les étudiants pourraient faire avec quelques leçons sur la façon de programmer dans le monde réel et pas seulement sur les méthodes du livre, cela les rendrait plus "arrondis" et à mon avis de meilleurs développeurs/diplômés.

J'ai appris plus sur la programmation et le développement de logiciels après avoir quitté l'université et commencé à travailler!

2
user18041

LISP (avec CLOS pour OOP) et Haskell. Cette question n'est pas réservée aux étudiants. De nouveaux langages de programmation sophistiqués ont emprunté (copié, volé? ... non, ce n'est pas mal) beaucoup de fonctionnalités de ces deux. Vous pouvez vous préparer pour l'avenir. La programmation fonctionnelle (style) est plus importante aujourd'hui et est introduite dans des langages de programmation impératifs comme C # (LINQ) ou C++ (lambda) et bien d'autres. Il est dommage que certains étudiants apprennent Java uniquement.

2
knivil

Est-ce vraiment important?

Habituellement, la démangeaison derrière cette question est "Quels mots à la mode puis-je mettre sur mon CV qui me décrocheront les emplois les plus lucratifs/intéressants/stimulants/faciles?". Bien que la question soit valable, la plupart des CV sont d'abord examinés par des RH qui ne comprennent pas ce qu'ils recherchent. mais c'est très peu profond, car une fois que vous avez franchi les portes, vous devez livrer les marchandises.

Ce ne sont pas les langues que vous connaissez qui font de vous un bon ou un mauvais programmeur, c'est la façon dont vous pouvez l'utiliser. Pour cela, il existe essentiellement deux catégories de programmeurs:

  1. Ceux qui se concentrent sur l'apprentissage d'une langue à son cœur. Le plus important est la langue et comment l'utiliser. Aux extrêmes, ils ont tendance à super-optimiser chaque petite parcelle de code et utilisent souvent des fonctionnalités obscures simplement parce qu'ils le peuvent.

  2. Ensuite, il y a ceux qui veulent en savoir plus sur les techniques et les paradigmes. Le langage qu'ils utilisent n'a pas vraiment d'importance tant qu'il peut exprimer leur image mentale avec élégance. À des extrêmes, ceux-ci auront tendance à utiliser UML ou d'autres systèmes de ce type en espérant que d'autres feront le gros travail de codage.

À mon avis, vous avez besoin des deux. Le n ° 1 fournira des compétences à court terme et lorsqu'il sera judicieusement choisi, il vous facilitera les portes des RH, mais le n ° 2 restera avec vous toute votre carrière et vous définira en tant que programmeur.

# 2 fournira des conseils et organisera votre train de pensée vers une solution de travail au problème actuel, mais sans 1, cela reste une idée, flottant à jamais dans les limbes du paradis du vaporware (ou de l'enfer selon l'endroit où vous le regardez).

# 1 vous donnera les moyens de mettre en œuvre des idées dans de vrais systèmes de travail mais sans 2, vos systèmes auront tendance à devenir des monstres cancéreux sans forme.

2
Newtopian

Langage d'assemblage et microcode. Un étudiant CS doit comprendre toutes les couches de base de l'abstraction entre les machines d'état booléennes et les dernières fonctions/OOP/etc fonctionnelles de haut niveau. paradigme du langage de programmation.

De base ou Logo ou Squeak (et. Al.), S'ils veulent être capables de comprendre comment enseigner aux jeunes enfants des notions d'informatique.

Fortran, Cobol et LISP, s'ils veulent comprendre l'histoire des langages de programmation, et quels sont les problèmes réels que les pratiques modernes résolvent.

1
hotpaw2

Choisir 3 langues ou plus dans différents paradigmes n'est pas si difficile, de nombreuses bonnes réponses ont été données. Mais si je devais choisir une seule langue, je choisirais Scala, car elle est à la fois fonctionnelle et orientée objet. Vous pouvez expliquer et comparer différentes approches dans la même langue.

1
Sean Patrick Floyd

N'oubliez pas les langages orientés pile/concaténatifs! Ils peuvent être de véritables esprits. Ils mettent l'accent sur la complexité de la construction à l'aide de petites primitives faciles à comprendre. Vous pouvez les utiliser pour écrire sans point (ou tacite) code qui se sent tellement propre.

La langue classique est Forth , mais mon rendez-vous de nos jours est Factor . Il convient également de vérifier Joy et Cat . Ne manquez pas le wiki du langage concaténatif . C'est plus amusant qu'un sac plein de marteaux!

1
Scant Roger

Je crois que vous avez partiellement répondu vous-même à votre question.

Il est très important de donner aux étudiants la possibilité d'entrer en contact avec plusieurs paradigmes, les langues réelles ne devraient pas avoir d'importance.

Bien sûr, il est important d'enseigner principalement les paradigmes qui offrent la plupart des opportunités de travail (probablement OOP en ce moment). Par conséquent, il est également préférable d'enseigner une langue largement utilisée pour ce paradigme, car c'est plus utile que d'apprendre quelque chose que vous n'utiliserez probablement jamais. Par conséquent, je détestais aussi avoir à écrire du pseudo-code sur mes examens. Le pseudocode est très bien, tant qu'il n'a pas de syntaxe "fixe". Vous devriez simplement être en mesure d'apporter des concepts à travers.

Concrètement:

POO: .NET ou Java

Au moins 1 paradigme de programmation supplémentaire, pour sensibiliser l'étudiant à d'autres approches.

Fonctionnel: Lisp?

1
Steven Jeuris

Malgré son manque d'intégration, je trouve que D, en particulier la version 2, fournit des leçons intéressantes qui ne peuvent pas être facilement apprises ailleurs. Il fait une tentative plus sérieuse que n'importe quel autre langage auquel je peux penser pour obtenir une programmation impérative/procédurale, orientée objet et fonctionnelle pour jouer Nice les uns avec les autres, et permettre une programmation à un niveau très bas (pointeurs, gestion manuelle de la mémoire, en ligne Langage d'assemblage) et un très haut niveau (programmation générique et générative) dans le même langage.

Ceci est précieux car, plutôt que de voir des paradigmes isolés comme s'ils existaient dans des univers différents, vous pouvez voir la forêt à travers les arbres. Vous pouvez voir les forces et les faiblesses de chaque paradigme à un niveau fin en les mélangeant dans vos programmes. Vous pouvez voir comment les principaux aspects des paradigmes peuvent être mis en œuvre dans les bibliothèques en termes de code de niveau inférieur. Le module de bibliothèque standard std.algorithm implémente d'importantes primitives de programmation fonctionnelle, tout en étant un code D simple et sans magie. De même, std.range implémente l'évaluation paresseuse, mais est encore une fois un code D assez simple. Vous comprenez les coûts impliqués par les primitives de chaque paradigme, car les fonctionnalités proches de D rendent ce qui se passe vraiment sous le capot relativement transparent. Vous pouvez même écrire quelque chose de bas niveau qui ressemble à C, puis créer une jolie interface de haut niveau dans le même langage, sans aucune couche de colle magique.

0
dsimcha

Pseudocode.

Les personnes sur le terrain devraient être en mesure d'expliquer leurs idées de manière cohérente et structurée sans jargon spécifique au cadre ou à la syntaxe. Je ne devrais pas avoir à connaître la différence entre vos crochets et accolades pour comprendre votre algorithme. Je ne devrais pas avoir besoin de savoir ce que signifie ?? Ni quels sont les commutateurs grep.

Écrivez en langage clair, mais structurez-le et formatez-le comme du code. N'importe qui peut ensuite l'implémenter dans la langue de son choix.

edit: Cette réponse est en partie motivée par l'incapacité de certains programmeurs à écrire du pseudocode.

"Il suffit d'écrire l'algorithme en pseudocode"

"Qu'est-ce que c'est?"

Les avantages du pseudocode sont que les parties prenantes hors programmation peuvent le comprendre. Je ne dis pas que vous voulez que les BA et les utilisateurs vérifient votre code, mais cela peut aider lorsqu'un non-programmeur a une compréhension de l'algorithme requis. Le pseudo-code supprime le besoin d'expliquer for (int i = 0; i < j; i++) et ce qui est essentiellement du jargon standard.

0
Kirk Broadhurst

Certains des langages de programmation utilisés pour acquérir des compétences générales en résolution de problèmes et les concepts de programmation sont Logo et Karel, ils doivent être enseignés avant C/C++/Java/LISP/Perl/Assembly/quel que soit le paradigme de programmation.

Les étudiants reçoivent une introduction très pratique à la programmation.

0
umlcat

C.

  • Tout d'abord, il est toujours utilisé (largement utilisé!), Et pas seulement pour les noyaux. Je gère actuellement une application métier codée en C. Donc, même avec du C pur et simple, vous pouvez toujours obtenir un emploi. Dans les grandes entreprises, dans l'industrie, presque partout (mais dans le développement Web).
  • Si vous allez travailler dans un environnement Unix/Linux, ne pas connaître au moins un peu de C, c'est un peu comme faire du shopping et ne pas pouvoir lire les prix sur les balises.
  • Pointeurs! Tout le monde devrait comprendre les pointeurs (cf. Joel Spolsky ). De plus, une fois que vous avez saisi le concept malloc, vous savez exactement quel genre de choses se produit lorsque vous tapez négligemment un "nouveau" dans un langage OOP.
  • La plupart des syntaxes "langages populaires" dérivent de C.
  • Oui, ce n'est pas toujours clair. Oui, c'est difficile à apprendre. Oui, les cordes sont un peu un cauchemar pour les débutants. Mais la programmation n'est pas toujours claire et difficile à apprendre, et vous comprendrez vraiment ce qui est génial avec OOP quand, après avoir étudié le C, vous essayez le C++ et découvrez std :: string.

Bien sûr, il faut connaître plus d'une langue, et pas seulement une ancienne langue procédurale. Mais si je devais aller sur une île déserte avec un seul compilateur, j'irais avec mon bon vieux gcc. Vous pouvez comprendre la programmation de haut niveau si vous connaissez la programmation de bas niveau. Je pense que ce n'est pas vrai dans l'autre sens.

0
Raveline

Quelque chose de fonctionnel, Haskell ou LISP serait mon premier choix, mais peut-être Erlang. Les langages fonctionnels vous apprennent vraiment à construire des abstractions d'une manière très puissante.

0
Zachary K