Quels langages (ou classes (comme dans les paradigmes) de langages de programmation, plus un langage recommandé pour 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.
Réponses:
Je vais vous donner une liste:
Les étudiants devraient être exposés à tous ces paradigmes à tout le moins. Pas seulement un ou deux.
Je suppose que beaucoup de gens proposeront Python pour couvrir le style procédural, le style OOP et peut-être d'autres, mais je n'ai pas assez d'expérience personnelle avec Python pour pouvoir le recommander en toute confiance.
la source
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 doivent être exposés à un langage de tous les principaux paradigmes: procédural, orienté objet, fonctionnel et dynamique.
la source
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.
la source
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 avec le temps, ça va changer en fonction de la définition individuelle d'un excellent travail , et ça va varier selon la région géographique.
Pour le moment, je dirai que l' anglais est la langue n ° 1 que chaque major CS devrait connaître (cela, bien sûr, varie selon la région.)
la source
Je pense que cela change avec le temps, mais idéalement - 3 langues à partir 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:
Comme un autre métier - je pense que les programmes de CS doivent former des étudiants sur des langues importantes sur le marché. À tout moment, je pense que 2 ou 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 sur 3 de ces langues avec une formation approfondie disponible dans au moins une.
la source
Pour un étudiant CS, recherchez des langages de programmation étroitement liés aux concepts CS discutés. Je suggère:
La liste pourrait continuer de cette manière, 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.
la source
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.
la source
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 uniquement Java.
la source
Je pense que la langue n'est pas aussi importante que les gens le croient.
Oui, vous devez savoir comment 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!
la source
EST-CE QUE C'EST 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 curriculum vitae 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:
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.
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 tendront vers des monstres cancéreux sans forme.
la source
Je crois que vous avez partiellement répondu vous-même à votre question.
Il est vraiment 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 le plus de possibilités de travail (probablement la POO en ce moment). En conséquence, il est également préférable d'enseigner une langue largement utilisée pour ce paradigme, car cela est plus utile que d'apprendre quelque chose que vous n'utiliserez probablement jamais. Par conséquent, je détestais aussi devoir é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 pouvoir faire passer des concepts.
Concrètement:
POO: .NET ou Java
Au moins 1 paradigme de programmation supplémentaire, pour sensibiliser l'étudiant à d'autres approches.
Fonctionnel: Lisp?
la source
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 pouvoir 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.
la source
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.
la source
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) qui semble tellement propre.
La langue classique est Forth , mais mon préféré ces jours-ci est Factor . A découvrir également Joy et Cat . Ne manquez pas le wiki du langage concaténatif . C'est plus amusant qu'un sac plein de marteaux!
la source
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.
la source
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 tout autre langage auquel je peux penser pour que la programmation impérative / procédurale, orientée objet et fonctionnelle fonctionne bien les uns avec les autres, et pour permettre une programmation à un niveau très bas (pointeurs, gestion manuelle de la mémoire, en ligne) assemblage) et un très haut niveau (programmation générique et générative) dans le même langage.
C'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.rangeimplémente l'évaluation paresseuse, mais est encore un code D assez simple. Vous comprenez les coûts impliqués par les primitives de chaque paradigme, car les caractéristiques proches de D 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.
la source
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 ou quels sont lesgrep
commutateurs.Écrivez en langage simple, 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.
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.la source
C.
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.
la source
Certains des langages de programmation utilisés pour acquérir des compétences générales en résolution de problèmes et des 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.
la source
N'importe quoi avec des objets. Assurez-vous simplement qu'ils l'apprennent bien.
J'embaucherais un excellent programmeur java pour c # à tout moment, mais j'aurais beaucoup de doutes à embaucher quelqu'un qui n'a jamais écrit de vrai code
la source