IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Les étudiants de première année doivent-ils être initiés à la programmation en s'appuyant sur Python ou Java ?
Quels langages devrait-on utiliser pour cette initiation ?

Le , par Patrick Ruiz

54PARTAGES

15  0 
Dans les années 80, Pascal était le langage de programmation le plus utilisé pour l’initiation à la programmation. Compte tenu du faible taux d’utilisation du langage en milieu professionnel, Pascal a été progressivement abandonné par les universités en faveur des langages plus populaires en entreprise. C’est l’approche pour laquelle a opté le Khoury College of Computer Sciences dans le cadre d’une refonte de son cursus. Cette dernière marque l’entrée en scène du langage Python en section d’initiation à la programmation informatique. Le tableau ravive le débat sur la question de savoir quel est le langage idéal pour initier des tiers à la programmation informatique.

« Un bon programme d'études en informatique doit mettre l'accent sur des principes fondamentaux largement applicables, permettant aux étudiants de s'adapter facilement aux nouvelles technologies dans le domaine qu'ils abordent. Il doit enseigner aux étudiants comment penser aux logiciels et comment résoudre les problèmes. C'est exactement ce que le programme actuel de Northeastern s'efforce de faire. Le cours « Fundamentals of Computer Science », ou « Fundies », comme on l'appelle communément, enseigne la conception systématique de programmes par le biais de la recette de conception, qui fournit une formule cohérente pour s'attaquer à des problèmes peu familiers. La recette de conception décompose un problème en petites étapes réalisables, dont les premières demandent aux étudiants de réfléchir soigneusement au problème avant d'écrire le code pour le résoudre. Les cours de base tels que Fundies 1, Fundies 2, Conception orientée objet et Développement logiciel se concentrent sur la formation des étudiants à raisonner sur le code, plutôt qu'à l'écrire sans réfléchir », commente un enseignant assistant.

« Mais aujourd'hui, alors que le marché de l'emploi dans le secteur technologique est au plus bas depuis plus de vingt ans, le Khoury College of Computer Sciences envisage d'abandonner l'approche qui a toujours permis à ses diplômés de réussir. Le projet de refonte de l'école prévoit la suppression progressive de Fundies 1, Fundies 2 et Object-Oriented Design (conception orientée objet), et leur remplacement par des cours entièrement nouveaux. Les nouveaux cours enseigneront principalement Python, et l'école affirme que c'est un avantage supplémentaire car Python « est actuellement le langage le plus demandé par les employeurs des programmes coopératifs ». Mais nous ne devrions pas enseigner un langage simplement parce qu'il est actuellement populaire dans l'industrie - nous devons choisir un langage qui a une réelle valeur pédagogique. Racket a été choisi parce qu'il permet d’introduire des fonctionnalités au fur et à mesure que les étudiants apprennent les principes de conception pertinents. Bien que le nouveau programme commence par Pyret, qui est également conçu à des fins d'enseignement, il passera rapidement à Python dans le premier cours. Python n'a rien de semblable : les étudiants doivent apprendre d'emblée des fonctionnalités complexes, avant d'acquérir les compétences de conception qui leur permettront d'utiliser ces fonctionnalités de manière propre et efficace », indique-t-il pour ce qui est des changements à venir.



« Les étudiants qui entrent à l'université ont des parcours et des expériences de programmation de plus en plus hétérogènes. Certains sont totalement novices en informatique, tandis que d'autres apportent des crédits de transfert ou des crédits NUin provenant d'universités partenaires à l'étranger. Environ 40 % des étudiants de Khoury arrivent avec des crédits en informatique, et d'autres ont appris par eux-mêmes ou par des moyens non traditionnels. Plutôt que d'envoyer tout le monde à Fundies 1, nous visons une séquence d'introduction plus adaptable dans laquelle chaque étudiant suit les cours qui ont le plus de sens pour lui compte tenu de son point de départ.

Un autre problème concerne Fundies 2, qui consacre un semestre entier à faire passer les étudiants de la programmation fonctionnelle en Racket à la programmation impérative en Java. Cette transition est nécessaire en raison de l'endroit où nous faisons commencer les gens dans Fundies 1, mais elle ne serait pas nécessaire si nous commencions dans un autre langage.

La « conception orientée objet » est un bon cours qui enseigne beaucoup de choses, et c'est effectivement la porte d'entrée vers les entreprises, le cours que vous devez suivre pour être prêt. Mais parce qu'il est si important, il comporte trop de responsabilités et de matériel, et c'est trop pour beaucoup d'étudiants. La charge de travail est l'une des plus élevées de tous les cours que nous proposons ; c'est ce que nous disent régulièrement les étudiants dans leurs évaluations. L'idée n'est pas de se débarrasser de la matière, mais de la répartir sur l'ensemble du cursus, afin qu'elle ne soit pas concentrée sur un seul semestre.

Les cours Fundies 1, Fundies 2 et conception orientée objet vont être progressivement supprimés et nous allons repartir sur de nouvelles bases. Cela ne signifie pas que le contenu et les aspects que nous apprécions dans ces cours disparaîtront, mais qu'ils seront présentés sous une forme différente », expliquent les têtes derrière la refonte de ces programmes.



Un langage de programmation pour débutants est aussi fonction du domaine cible

Quels langages pour un débutant en développement web ?

Certains professionnels de la filière recommandent HTML, CSS, JavaScript ou PHP pour ce qui est du développement frontend et Java, Python ou Ruby quant à ce qui est du développement backend. Ce sont des langages que l’on retrouve d’années en années dans les classements d’institutions comme IEEE.

Lesquels suggéreriez-vous pour un débutant en développement d’applications mobiles ?

Le choix du meilleur langage pour le développement d'applications dépend en grande partie du système d'exploitation avec lequel le programmeur compte travailler. Le fait est que différents systèmes d'exploitation prennent en charge différents langages de programmation mobiles. Par exemple, lorsque Swift et Objective C sont utilisés pour les applications iOS, Kotlin et Java sont utilisés pour le système d'exploitation Android. En revanche, React Native est idéal pour les deux.

Quid du cas de la programmation système ?

Ceux qui écrivent du code pour des systèmes d’entrée/sortie de base (BIOS), des chargeurs d’amorce, des systèmes d’exploitation, etc. sont dans la filière de la programmation système. Ici, on est dans les méandres du fonctionnement des systèmes informatiques ; on parle de code avec lequel l’utilisateur n’interagit, car distinct de celui de la couche dite applicative.

Dans cette filière c’est le C qui s’est imposé aux intervenants pour plusieurs raisons. Primo, il y a qu’en tant que langage évolué, le langage C permet aux d...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de popo
Expert confirmé https://www.developpez.com
Le 06/01/2025 à 12:38
L'avantage du Pascal (sur lequel j'ai également commencé pendant mes études) est qu'il permettait de maitriser les fondamentaux, puis les concepts POO, tout en mettant des garde-fous pour éviter de prendre de mauvaise habitudes.
Par mauvaises habitudes, je rejoins Calvaire sur Python et son typage pas très strict, ou encore sa vision de l'encapsulation en POO (sur laquelle j'ai eu des débats houleux avec certains membres du forum).

Donc dans un premier temps, pour acquérir les bases, j'aurais laissé le Pascal.
Mais effectivement, à moi aussi, le C parait être une excellente option.

Pour l'objet, également j'aurais laissé le Pascal, ou plutôt le Delphi qui est son héritier.
Le C#, qui est mon langage de prédilection, est excellent pour faire de l'objet.
Mais Microsoft a tellement travaillé dessus pour gagner en productivité qu'il masque aujourd'hui une partie de ce qu'un étudiant devrait connaître.
Le GC n'aide pas non plus à comprendre la durée de vie d'un objet.

Pour le Web, je n'imagine pas un apprentissage sans HTML/CSS/JS.
Cela peut paraître vieux jeu mais j'ai vu passer tellement d'alternants qui faisait des appli avec ASP/Net et MVC ou d'autres outils et qui n'avais aucune idée de ce qui se cachait sous le capot.

Pour le mobile, C# et MAUI.
10  1 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 06/01/2025 à 15:33
Pour apprendre les bases, je dirais que peut importe le langage, tant qu'on ne part pas sur des langages d'assemblage ou des langages ésotériques comme le brainfuck. Quelque soit le langage on sera confronté aux mêmes basiques : variables, conditions, itérations, tableaux, procédures, ... La clarté des cours et l'intérêt des exercices sont énormément plus importants que le langage lui même.

Contrairement à beaucoup qui recommandent le C, je pense que même si ça reste un choix possible si on privilegie le bas niveau, ce n'est probablement pas le meilleur car il va assez rapidement poser des problèmes bas niveau que je préfère ne pas avoir a aborder tant que l'on a pas maîtrisé les fondamentaux de l’algorithmie.
Pour la même raison, je ne recommencerais pas le Rust : il va poser des problématique de durée de vie des variables que je préférerais aborder plus tard. Si on tient quand même absolument à commencer par du bas niveau, je préférerais quand même Rust à C car le typage est énormément plus strict et les problèmes sont systématiquement levés et clairement indiqués par le compilateur.
9  0 
Avatar de Pierre Louis Chevalier
Expert éminent sénior https://www.developpez.com
Le 06/01/2025 à 13:13
Citation Envoyé par RenarddeFeu Voir le message
Question facile ! Python est un standard industriel là pour durer au contraire de Java qui est passé de mode.
Java n'est pas du tout passé de mode et il est même numéro 1 sur les offres d'emploi.
6  1 
Avatar de esperanto
Membre émérite https://www.developpez.com
Le 06/01/2025 à 14:51
Citation Envoyé par calvaire Voir le message
l'objectif d'une 1ere année et de maitriser les fondamentaux, donc je dirais plutôt le langage C, qui permet de mettre en pratique le théorique (gestion mémoire, instruction cpu...etc.),
On parle de programmation, pas d'architecture machine, donc considérer les instructions CPU comme des fondamentaux, faut le faire...

Citation Envoyé par calvaire Voir le message
et le C est un langage stricte (un entier ne peut pas devenir une chaine de caractère comme en python)
Ah bon?

Code : Sélectionner tout
1
2
3
int x = 12345;
printf("%s", &x);
Oui je sais c'est pas du code propre, mais ça compile et pas de core dump à l'exécution (sauf si on enlève le &, là ça compile - ce qui est quelque peu problématique - mais core dump), alors juste pour dire que le caractère "strict", euh comment dire...

Je reste pour ma part sur Pascal, qui a été conçu pour ça, et qui permet d'apprendre la gestion de la mémoire (pas de ramasse-miettes donc il faut bien penser à libérer ses resources après usage) sans pour autant autoriser l'arithmétique des pointeurs grâce à laquelle, justement, un entier peut être miraculeusement transformé en chaîne de caractères ... mais avec des résultats bien moins prévisibles qu'en Python!
Ou Ada, qui reprend les bons côtés de Pascal avec une gestion du typage mille fois plus stricte, mais qui pourra en contrepartie te donner un maximum de détails sur chaque erreur détectée.

Le seul point positif pour Python, c'est la syntaxe qui enseigne la notion d'indentation. Mais le typage dynamique et surtout la gestion des variables sans déclaration sauf si globales, c'est une source de grosses erreurs pour les débutants, donc je ne recommande pas.
Exemple (exagéré mais bien réel):

Code : Sélectionner tout
1
2
3
4
5
xr = 100
while xr > 0:
   print(xr)
   xs = xr - 1
Ici le "xs" au lieu de "xr" est une faute de frappe, pas forcément visible au premier coup d’œil sur un petit écran, et que Python ne détectera pas, puisqu'il n'impose pas de déclarer les variables (à moins qu'il y ait un mode strict optionnel comme en Perl?). Mieux vaut démarrer avec un langage où c'est obligatoire, ça évite des erreurs.

Citation Envoyé par popo Voir le message
J'ai croisé beaucoup trop de personnes se disant développeur mais ne comprenant pas ce qui se cache derrière une ligne de code et se retrouvant avec des comportements non désirés ou des performances dégradées sans être capables de l'expliquer. Trouver du code fonctionnel sur internet est à la portée de n'importe qui (encore plus avec ChatGPT).
Le comprendre et avoir conscience de ce qui se passe en interne, c'est déjà plus compliqué.
Tout dépend de ce que tu entends par là.
Se rendre compte que son algorithme est exponentiel alors qu'il existe une version quadratique plus rapide, ça peut faire partie des fondamentaux (mais pas forcément en première année quand même).
Mais il ne s'agirait pas de demander aux débutants de savoir que telle instruction CPU est plus rapide que telle autre (même si quand j'ai commencé la fac j'avais quelques collègues geek qui s'intéressaient déjà à ce genre de choses, faut pas généraliser). Surtout qu'en dehors des domaines où tu dois travailler avec des ressources réduites (embarqué, mobile) il est devenu rare de travailler en assembleur.

Citation Envoyé par popo Voir le message
Enfin, je conseillerai de passer un petit moment sur l'assembleur pour aider à comprendre comment fonctionne la machine.
Lequel? Celui des mobiles sera différent de celui des PC.
En licence on nous a fait travailler sur un assembleur virtuel, histoire d'en rester aux fondamentaux. Mais pas en première année!
5  0 
Avatar de
https://www.developpez.com
Le 06/01/2025 à 9:34
Ce qu'il faut pour commencer, c'est un langage simple, transactionnel, qui permette de faire de l'appli ligne de commande.
Evidemment, comme une grande majorité de personne, je pense au langage C qui fut mon langage premier.

Du coup, je pense à un autre langage transactionnel qui pourrait être très intéressant tout en apportant plus d'élements que le C, le langage Rust.

ce qui serait un réel avantage je pense vu qu'il me semble être un langage d'avenir.

Ensuite, apprendre un langage orienté objet (.Net ou Java).
le choix d'apprendre les langages web (javascript/Java) vs data (python/scala/R) vs embarqué (C/Rust/...) devrait être ensuite dans une option dans les années plus avancées.
5  1 
Avatar de smarties
Expert confirmé https://www.developpez.com
Le 06/01/2025 à 10:57
Pour la première année, je vous rejoints avec C (ou Rust)

Ensuite, je dirais qu'il serait bien de faire du Go car ça progresse en entreprise. J'ai fait plusieurs entreprises et elle changeait de JAVA (car trop gourmand pour des microservices, beaucoup de RAM nécessaire pour faire tourner un IDE, ...) vers un autre langage (Python ou Go).
5  1 
Avatar de pboulanger
Membre éprouvé https://www.developpez.com
Le 09/01/2025 à 13:30
Avant d'apprendre un langage, il faut commencer par apprendre les bases de l'algorithmie/logique, comment fonctionne un ordinateur (mémoire, cpu, etc...) et les principaux paradigmes de programmation:
  1. impératif structuré (le paradigme de base de tous les processeurs courants)
  2. fonctionnel basé sur la théorie du lambda-calcul de Church (celui qui a permis d'inventer la POO ou les bases de l'IA). Bien que simple et puissant, la plupart des développeurs ont du mal avec ce paradigme.
  3. programmation orienté objet (utile pour les grosses applications)
  4. logique basé sur la théorie des prédicats du premier ordre (anecdotique dans son usage, mais qui a son intérêt pour les systèmes experts et l'IA). C'est certainement le paradigme le plus difficile à apprendre.

La mise en pratique des paradigmes pourra se faire en utilisant un langage de programmation lié:
  1. impératif structuré: Pascal/Delphi mais sans objets
  2. fonctionnel: Lisp ou Python qui permettent de mettre en pratique plus de choses que Java ou C#
  3. programmation orienté objet: je dirais Eiffel car il permet de tout faire (héritage multiple, etc) mais aussi il propose des solutions pour gérer les cas dangereux. Ensuite on pourra passer à un langage comme C# ou Java qui ne supportent qu'un sous-ensemble du paradigme.
  4. logique: Prolog
4  0 
Avatar de calvaire
Expert éminent https://www.developpez.com
Le 06/01/2025 à 8:29
l'objectif d'une 1ere année et de maitriser les fondamentaux, donc je dirais plutôt le langage C, qui permet de mettre en pratique le théorique (gestion mémoire, instruction cpu...etc.), et le C est un langage stricte (un entier ne peut pas devenir une chaine de caractère comme en python)
Je dirais C et ensuite c++/java pour l'objet. Je mettrais python en dernier, car python est pour moi un langage "d'expert", c'est un langage facile et très permissif, c'est justement son danger, un junior a vite fait de faire n'importe quoi, il est important de maitriser les bonnes pratique avant de partir sur du python. C ne pardonne pas la moindre erreur.

ensuite les années suivantes il faut former sur des langages utilisé par les entreprises, il est indispensable en sortie d'école d'avoir les bases dans au moins 3 de ces langages Java/Python/C/C++ et un langage web (php ou js)

edit: j'ai déjà travaillé avec des datascientistes, bon en datascience mais absolument pas dev et quand ils m'envoyait leurs code python c'était affreux, absolument pas industrialisable. Ils ne maitrisait aucune notion, les variables qui change de type, pas d'objets, des fonctions avec n'importe quoi en entrés et en sortie...etc.
C'est pour cela que je dis que python est un très mauvais langage pour débuter, toute les horreurs sont possibles.
Un dev c/c++/java ou autres ne fera pas ces erreurs de débutant. Il aura eu les réflexes de faire une bonne structure/architecture (des objets, des fonctions, il ne fera pas de variables globale inutilement...) clairement définie.
7  4 
Avatar de Justin64
Candidat au Club https://www.developpez.com
Le 06/01/2025 à 13:52
La réponse reste quand même vachement liée à ce que les étudiants veulent faire plus tard,
- C, C++, ASM et Rust sont bien pour développer des choses pour de l'embarqué, bricoler du Linux, faire des logiciels ultra rapide, des drivers,
- Bash pour tout ceux qui sont amener à travailler sur Linux ou plus largement les Unix-likes,
- Python pour des choses autour de l'IA
- C# pour des app exclusivement Linux ou des jeux sur moteur ou sans moteur
- Java, Kotlin, et un langage compilé machine type C, C++, Rust pour les app Android,
- Swift pour du dev Apple exclusivement,
- PHP et JS et même ASP sont bien pour aller faire du site web,
- Pascal, Fortran et tous ces "vieux langages pour des app et librairies scientifiques,
- Ada car c'est formateur.
...

Le VBA par contre ne me semble pas d'avenir pour quelqu'un en école de dev car : MS va l'abandonner au profit de Python et que de toute façon les ingénieurs dans les domaines scientifiques l'apprennent déjà à l'école (avec Python pour certaines écoles), donc un besoin en spécialistes plus restreint.
Pour le/les Basic, à par s'amuser sur son émulateur C64 a faire des rétro app à vendre sur itch.io je ne vois pas d'intérêt pratique pour lequel des gens serait près à payer, mais après je ne suis pas quelqu'un qui à fait un cursus traditionnel de prog.
4  1 
Avatar de popo
Expert confirmé https://www.developpez.com
Le 19/02/2025 à 17:45
Citation Envoyé par fatbob Voir le message
Quand on apprend à lire, on commence par les lettres et les syllabes. Pas par Balzac ou une thèse sur la mécanique quantique.
Je pense pareil pour l'informatique.
Python est très bien pour apprendre certaines bases (boucles, variables, conditions, fonctions, objets, éventuellement même quelques concepts de programmation fonctionnelle... C'est déjà pas mal).
Et bien justement, parmi les bases, on retrouve le typage.
Et rien que sur le typage, python est très permissif et permet d'écrire X = 0 puis X = "John Doe" quelque lignes plus loin.

Citation Envoyé par fatbob Voir le message
Il a en outre l'avantage de permettre d'obtenir des résultats amusants avec très peu de lignes de code. C'est donc très bien pour la motivation.
A un niveau débutant c'est également le cas avec la plupart des langages.

Citation Envoyé par fatbob Voir le message
Qu'il soit un peu trop permissif, qu'il manque certains concepts forts utiles c'est certain. Mais de mon point de vue, on entre dans une deuxième étape de l'apprentissage. Et cette deuxième étape peut tout à fait signifier un changement de langage.
Mon point de vue est qu'il faut apprendre la rigueur avant de passer sur un langage plus permissif.

Citation Envoyé par fatbob Voir le message
Savoir allouer et désallouer manuellement de la mémoire ne servira à rien pour la plupart des gens. Pour un développeur WEB, l'architecture logicielle semble plus importante que de savoir allouer la mémoire à coups de malloc et nettoyer tous ses objets. Cette connaissance peut attendre. Un débutant au permis de conduire a-t-il besoin de savoir changer un joint de culasse ?
Sauf que faire du développement Web, surtout de manière sécurisée, ce n'est plus du niveau débutant.
Et savoir même dans les grandes lignes comment fonctionne la mémoire, ça reste utile, encore plus dans le monde du Web avec des milliers d'utilisateurs simultanés.
Pour reprendre, ton image sur le permis de conduire, on n'est pas obligé de savoir changer un joint de culasse, mais on doit être capable de changer une roue, et de désigner certaines partie du moteur comme le réservoir d'huile ou celui du produit lave glace.

Citation Envoyé par fatbob Voir le message
Pour ce qui est des bonnes/mauvaises habitudes, il faut déjà que ce soit devenu des habitudes. Et donc ne plus être débutant.
C'est très naïf.

Citation Envoyé par fatbob Voir le message
Et puis, à part quelques détails, la plupart des bonnes/mauvaises habitudes sont surtout des problèmes de nommage des variables et des fonctions, d'organisation des objets, d'architecture de l'application. Le typage n'est qu'un aspect parmi d'autres, et pas forcément le plus important.
Les mauvaises pratiques ne se résument pas à ça.
J'ai moi même eu l'occasion d'enseigner, tu n'as pas idée à quel point tu es loin du compte.

Citation Envoyé par fatbob Voir le message
Dit autrement : il est tout à fait possible d'écrire remarquablement bien en python et de façon absolument dégueulasse en C ou en php (et le contraire aussi, naturellement)...
Certes, mais si d'amblais le langage choisi met quelques garde-fous, certaines mauvaise pratiques peuvent être évitées.
Un langage plus strict apprend, dans une certaine mesure, à être plus rigoureux.
Comme dit précédemment, j'ai moi même eu l'occasion d'enseigner, et je sais d'expérience qu'il est plus facile de prévenir d'une mauvaise pratique que de tenter de rétablir la situation une fois la mauvaise pratique acquise.

Citation Envoyé par fatbob Voir le message
Pour moi, un langage pour débutants doit avoir les caractéristiques suivantes :
- simple à appréhender
- permettre d'accompagner les étudiants suffisamment loin en intégrant les concepts principaux de l'organisation logicielle (au moins jusqu'aux objets).
- être motivant (je me rappelle mes premiers temps en C++ (c'était il y a longtemps)... Quel cauchemar. Tellement complexe)
Raisons pour lesquelles, j'ai suggéré le Pascal ou Delphi au lieu de python.
Python, par sa conception même, prend quelques libertés avec la notion d'encapsulation de la POO, et une fois que tu es habitué à ces libertés, il est compliqué d'aller sur un langage plus stricts.
3  0