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 !

C ou Pascal pour débuter ?
Le C est à présent préféré au Pascal pour enseigner la programmation

Le , par vg-matrix

0PARTAGES

0  0 
tout le monde, j'aimerais avoir votre avis sur le langage à apprendre pour débuter la programmation.

Selon vous faut-il apprendre le C ou le Pascal?

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

Avatar de ac_wingless
Membre confirmé https://www.developpez.com
Le 09/07/2009 à 17:31
Citation Envoyé par vg-matrix Voir le message
J'ai entendu que le C étant réputé pour sa précision, sa portabilité et sa souplesse, il est beaucoup plus conseillé dans les débuts de programmation histoire de données de bonnes habitudes aux programmeurs.

Qu'en dites-vous?
Travaillant dans le domaine de l'embarqué depuis une durée supérieure à l'age d'une grande partie des contributeurs de ce forum, on pourrait croire que je sois tenté de conseiller le C aux débutants. Eh bien, NON, SURTOUT PAS. Aujourd'hui, la précision, la portabilité et la souplesse sont certes irremplaçables dans les domaines système / embarqué, mais ces domaines sont, plus encore que des jolies zinterfaces graphiques ou autres sites webz bitoubi, soumis à des contraintes de fiabilité, sécurité, couts de développements particulièrement sévères.
Et malheureusement, j'ai trop souvent observé qu'un programmeur qui apprend en commençant par le C sera beaucoup moins bien placé pour l'utiliser au mieux de sa puissance que quelqu'un ayant appris à programmer dans un langage plus moderne.

L'équipe que je dirige actuellement comprend certes quelques vrais vétérans du C, qui ont effectivement appris en commençant par le C, et qui sont des professionnels exceptionnels. Cependant, leur performance vient d'abord du fait qu'ils ont été confrontés, en tant que professionnels déjà aguerris, à toutes les évolutions de notre métier au cours des années. L'impact de l'apprentissage initial s'est donc estompé (l'un d'entre eux a d'ailleurs commencé en FORTRAN avant le C).
En revanche, pour les plus jeunes, ceux qui ont commencé en C ne sont pas toujours à la hauteur. Je dois dire par exemple que les trois jeunes permanents de l'équipe formés en Java sont bien meilleurs en C++ que ceux qui ont commencé en C! Je n'ai pas d'exemple personnel de collègue ayant démarré en Pascal, mais je pense que l'effet serait le même: d'abord, il faut apprendre à programmer, voire à bien programmer, et ensuite, lorsqu'on devient un professionnel avec de vraies échéances et des conditions plus sévères qu'en période d'apprentissage, il faut être capable d'utiliser l'outil le plus approprié à la tâche, qui peut fort bien ne pas être un langage sympa comme Java ou Pascal.

Mon expérience personnelle est peut-être biaisée par le domaine où je travaille (tout de même supposé être le domaine de prédilection du C), mais je préfèrerais de très loin avoir des jeunes formés sur Java, C++ (à condition d'avoir sauté la case C), ou Pascal/Delphi.
2  0 
Avatar de gorgonite
Rédacteur/Modérateur https://www.developpez.com
Le 26/06/2009 à 20:07
j'aime la rigueur qu'apporte Pascal... ça me semble beaucoup mieux pour commencer la programmation procédurale

Pascal est un langage académique à typage statique explicite, qui fut longtemps le langage le plus enseigné...
Il a l'avantage d'être assez complet pour réaliser des vrais projets, et suffisamment rigoureux pour détecter énormement d'erreurs à la compilation... un point très appréciable

après, tu entendras pas mal de monde dire que son successeur en France, OCaml, est 100 fois mieux avec des arguments plus ou moins valables... il faut surtout te dire que Caml s'est imposé dans les prépas à cause du niveau assez faible des profs qui y enseignent l'informatique, de son paradigme principalement fonctionnel facile à enseigner aux enseignants matheux, et d'un fort lobbying de la recherche française pour diffuser ce langage
je ne renie pas les qualités évidentes d'OCaml et la beauté de l'inférence de type... toutefois, je continue de penser qu'enseigner avec Pascal n'est pas un mauvais choix, parce qu'il oblige les élèves à refléchir aux types qu'ils utilisent. sinon on se retrouve dans une situation telle qu'on voit souvent en master : beaucoup d'élèves sont très bons sur le papier, assez moyen avec Caml, et totalement ignorant de ce qui sort d'un cadre purement académique (car formaté au fonctionnel avec inférence de type)

en ce qui concerne le C, je pense que beaucoup commencent par ce langage car ils n'auront pas forcemment le choix d'en apprendre d'autres lors de leur cursus
1  0 
Avatar de Mac LAK
Inactif https://www.developpez.com
Le 17/07/2009 à 23:32
Citation Envoyé par alex_pi Voir le message
Un langage avec GC est le minimum vital, et ne pas avoir à se prendre la tête avec des pointeurs est indispensable.
Pas d'accord... Un GC, c'est la porte ouverte au je-m'en-foutisme sur la libération mémoire, et la notion de pointeur reste importante quoi que l'on dise : il est fondamental de comprendre ce que c'est, même si c'est pour éviter de l'utiliser derrière (en fonction de ses goûts personnels et de ce que l'on veut faire en programmation bien sûr).

Comprendre la machine, sans aller trop loin... Pour reprendre ton analogie, à l'auto-école, t'as en général une voiture à boîte manuelle et non pas automatique, tu n'as pas d'ordinateur de bord, de GPS, ni d'assistance au créneau. L'assistance que tu as, c'est en général sur la direction, et le moniteur à côté, point barre.
Et si ton moniteur est compétent, il t'apprendra en plus à changer une roue, une ampoule et à faire le plein et les niveaux.

Libre à toi après d'acheter une voiture "toute assistée" et de payer quelqu'un pour l'entretenir, ou d'acheter une épave de 1950 et de la retaper toi-même. Au moins, tu le feras en connaissance de cause, car tu auras touché un peu aux deux mondes...

Bref, un langage avec des pointeurs, mais non omniprésents. Avec une gestion mémoire manuelle, mais sans cas vicieux de libération / fuite. Strict et rigide pour éviter d'apprendre à patcher plus qu'à programmer.
Mais sûrement pas un langage à typage dynamique et/ou GC automatique, en tout cas. Ni du C ou de l'assembleur, d'ailleurs : débuter par l'ASM, ça allait dans les années 80, quand il n'y avait pas grand-chose d'autre. Actuellement, c'est un non-sens.
1  0 
Avatar de Mac LAK
Inactif https://www.developpez.com
Le 18/07/2009 à 13:37
Citation Envoyé par alex_pi Voir le message
Je ne comprends pas... D'un coté, tu es contre le GC parce que ça inciterait à trop se reposer sur la machine, mais de l'autre, tu veux du typage statique.
Le typage statique demande un minimum de réflexion de la part du développeur... Et plus il est strict, plus il doit réfléchir.

Citation Envoyé par alex_pi Voir le message
Ca n'insiterait pas à ne pas réfléchir et à juste faire confiance au typeur ?
Justement : c'est un échec à la compilation, et non pas à l'exécution, qui se produit avec un typage statique... Les erreurs de typage dynamique sont en général assez infectes à lever, et dans le pire des cas on a un débutant qui ne comprends même pas la différence entre un nombre (variable entière) et sa représentation textuelle (variable chaîne contenant la représentations ASCII du nombre en question)...

Citation Envoyé par alex_pi Voir le message
Je n'ai *jamais* compris l'intéret d'emmerder le débutant avec une gestion manuelle de la mémoire.
Moi, si... Pour avoir vu (et déplanté) un paquet de code C/C++ provenant de "spécialistes Java", d'ailleurs. Ils ne savent pas ce qu'est la gestion mémoire, et n'arrivent souvent pas à l'assimiler naturellement...
J'ai même vu des horreurs sans nom, dans le genre classe C++ complexe sans destructeur implémenté, alors que la classe allouait à tout va !! Et, ô surprise, c'était un fervent défenseur du Java...

Citation Envoyé par alex_pi Voir le message
La moralité, ça va être qu'il aura la moitié de ses programmes où il se prendra des crash (ceux où il aura fait des free au mauvais endroit) et l'autre moitié avec des mem-leak à tout va. Et au final il préferera la seconde catégorie parce qu'au moins ça ne plante pas.
La plupart des langages ont un GC "global" au programme, c'est à dire que l'allocation se fait dans une zone réservée par le runtime... Une fuite mémoire peut exister, certes, mais sans mettre en péril le système d'exploitation. Ce n'est pas "propre", certes, mais c'est un moindre mal.

De l'autre côté, il y a des habitudes, notamment les bonnes, à prendre dès le départ. Sinon, les développeurs ne les prennent JAMAIS, parce que c'est "trop contraignant". Parmi ces habitudes, on a :
  • Documenter son code,
  • Le tester un minimum sérieusement,
  • Savoir à l'avance ce que l'on va faire, et non pas "bidouiller" en avançant à tâtons,
  • Vérifier la libération de ce que l'on a alloué.


Citation Envoyé par alex_pi Voir le message
Quand on voit le faible nombre de programmeur C qui utilisent des outils comme Valgrind, et le nombre incroyable de mem leak dans les programmes de tous les jours, j'avoue que ça me fait douter sur le fait que "programmer sans GC fait qu'on fait plus attention à la gestion des ressources"..
C'est un fait. Combien, parmi ces "débutants", on commencé par un langage "académique", toutefois ? Moi aussi, je connais hélas trop cette situation... J'y vois des gens ayant débuté par du Java, du Basic (Visual ou non), des langages interprétés, etc. Et, bien sûr, ceux qui n'ont démarré qu'avec le C, et n'ont jamais connu d'autre langage !!

Ceux ayant débuté par des langages plus stricts sans être trop lourds (Pascal, Ada en tête de liste) ont en général bien moins de mauvaises habitudes... Ou, pour être plus précis, leurs erreurs d'allocation/libération restent dans des limites "acceptables", c'est à dire qu'elle ne crashent pas le programme dans les 10 minutes suite à une fuite mémoire plus proche de la chute d'eau que du robinet qui goutte.

Citation Envoyé par alex_pi Voir le message
Et en plus, ça interdira au débutant un paquet d'algorithme ou de paradigme parce qu'il n'arrivera pas à faire une gestion manuelle de la mémoire là dessus.
Lesquels ? L'algorithmique, ça s'apprend par le commencement, pas par la fin... Tu arrives à accepter, toi, qu'un stagiaire passe une heure à trouver une librairie pour faire un tri au lieu de l'implémenter lui-même ? Surtout quand ça porte à l'origine sur un tableau d'une vingtaine d'éléments, trié une seule fois ?

Citation Envoyé par alex_pi Voir le message
Est ce que devoir avoir compris les magic pointeur avant de coder est vraiement indispensable...
Utiliser les "smart pointers" est néfaste en soi pour un débutant, car cela le fait ignorer un mécanisme crucial qui n'existera pas toujours sur les plate-formes qu'il sera amené à utiliser. L'embarqué se porte bien, très bien même... Et là dessus, tu as rarement une usine à gaz type JRE pesant plus lourd que la capacité mémoire disponible pour faire n'importe quoi n'importe comment... Et de toutes façons, les performances exigées mettent hors concours tout ce qui n'est pas langage compilé natif.

Or, à force d'apprendre le développement "façon assisté", tu vois de moins en moins de développeurs réellement compétents dès qu'il s'agit de développement bas niveau, temps réel ou embarqué... Certes, ils savent faire de belles IHM en Java et ouvrir tout plein de communications TCP/IP en même temps, ou se connecter à une BDD. Mais ils sont infoutus de faire un système d'acquisition temps réel, un driver ou un module exigeant des performances sévères.

Citation Envoyé par alex_pi Voir le message
Je ne vois vraiment pas ce que pour un débutant, avoir à gérer sa mémoire à la paluche apporte sur le plan pédagogique
Je ne vois vraiment pas pourquoi on apprends aux gamins à se brosser les dents dès qu'ils savent tenir debout, alors qu'on se fiche complètement des dents de lait : il ne faut s'en occuper que quand leur dentition définitive pousse !

Ah, on me souffle que c'est pour leur en donner l'habitude, parce que ça ne devient pas un réflexe quand c'est appris "trop tard"... Tiens donc...
1  0 
Avatar de Mac LAK
Inactif https://www.developpez.com
Le 19/07/2009 à 22:32
Citation Envoyé par FR119492 Voir le message
Pour une formation de niveau académique, il faut commencer par la base, c'est-à-dire l'assembleur et présenter ensuite les langages de plus haut niveau comme une amélioration du confort du programmeur.
Mouais, enfin bon, faut pas déconner non plus : démarrer par l'ASM, c'est quand même un peu hardcore comme méthode... Connaître l'architecture d'un processeur, c'est important, mais de là à lui causer en patois local, il y a une marge !!! Surtout que les assembleurs sont quand même assez différents d'une gamme de processeur à l'autre... C'était assez facile de passer du Z80 au x86, mais celui qui passe du PowerPC à un processeur ARM va moins rigoler.

Un langage de trop haut niveau est néfaste pour débuter : cela ne donne pas les bonnes habitudes, et le mot "rentable" dépend beaucoup du domaine d'activité (dans le mien, un spécialiste Java est juste un boulet dans 99% des cas par exemple).
De même, démarrer par un langage de trop bas niveau est tout aussi néfaste, car cela revient souvent à apprendre à bidouiller plutôt qu'à développer.

Il faut un juste milieu.
1  0 
Avatar de Mac LAK
Inactif https://www.developpez.com
Le 20/07/2009 à 1:02
Comme je l'ai déjà dit plusieurs fois, le langage initial permet de prendre de bonnes habitudes dès le départ. Ni plus, ni moins.
Que la libération des ressources devienne un réflexe et non pas une corvée.
Que l'on pense ses algorithmes proches de la machine au lieu d'essayer de faire comprendre l'humain au CPU (ce qui en général finit en usine à gaz...).
Que l'on sache ce qu'EST une machine, et savoir comment elle fonctionne, plutôt que de systématiquement croire que c'est une entité maléfique devant être debuggée par un chaman.

Et une fois le "mauvais pli" pris (souvent, hélas, pendant les études), c'est trop tard : le "développeur" n'a jamais ces réflexes, ce qui coûte du temps de relecture, correction, ou pire, maintenance. Ou d'investir pour pallier des erreurs qui ne devraient JAMAIS être commises.

Citation Envoyé par alex_pi Voir le message
Je reste vraiment persuader qu'un langage de haut niveau est beaucoup plus pédagogique que le C, mais ceci est un troll sans fin
Que le C, oui, la cause est entendue. Qu'il soit "plus pédagogique" que Pascal ou Ada, ça reste à démontrer... Et pour l'instant, de ce que j'ai pu en voir à titre professionnel, démarrer par Java (ou plus haut niveau encore) est néfaste côté habitudes.

Ne pas apprendre à libérer sa mémoire dès le départ, c'est s'exposer à ne JAMAIS le faire... Et ça se vérifie sans arrêt, tout comme ne compter que sur le compilo ou la puissance de la machine pour optimiser un programme ou algo.
C'est comme ça qu'on a de "jeunes diplômés" qui pensent avoir l'idée du siècle en voulant mettre du Java dans une carte embarquée temps réel, en croyant que "rajouter un CPU" ou "2 Go de RAM" n'aura aucune influence ni sur le coût de la carte, ni sur le temps de développement... Et tout ça parce qu'ils trouvent le C (ou le C++) "trop dur" avec tout ces pointeurs tout vilains...
1  0 
Avatar de jabbounet
Membre expert https://www.developpez.com
Le 23/07/2009 à 11:59
en tout cas prendre un language ou il y'a de l'arithmétique signée et non signé, parce que j'en ai marre de l'expliquer aux développeurs java

si on te l'a expliqué un jour ce ne ser pas génant pour faire du java en suite.
si on ne te l'a jamais expliqué ce sera plus génant pour ne pas faire de java ensuite
1  0 
Avatar de Mac LAK
Inactif https://www.developpez.com
Le 23/07/2009 à 19:46
Citation Envoyé par alex_pi Voir le message
Voilà. Alors pour Pascal et Ada, je répète, je ne les connais globalement pas, donc je ne sais pas dans quelle catégorie les mettre.
Et voilà très exactement pourquoi tu ne sais pas ce qu'est le "milieu"... En Pascal (inclus Delphi) et en Ada, tu as des contraintes machine pouvant être lourdes, si tu pousses les langages dans leur retranchements. En dehors de ça, c'est plutôt des langages de haut niveau... Qui restent capables, au besoin, d'effectuer des accès au niveau bit et de taper dans du bas niveau.

Voilà en quoi ils sont supérieurs, d'un point de vue pédagogique et apprentissage de la programmation, à la plupart des autres langages. Ils permettent tous les deux une approche procédurale ou objet (là aussi, "au choix", et dans une très petite mesure ils permettent même une approche fonctionnelle en distinguant nettement les "fonctions" des "procédures". Certes, c'est pas du Lisp non plus côté approche fonctionnelle, c'est évident. Mais ça donne un petit avant-goût... Juste de quoi ne pas se sentir totalement paumé quand on approche un vrai langage fonctionnel.

J'aurais tendance à dire qu'ils sont même supérieurs à "tous" les autres langages d'apprentissage, pour ma part, mais c'est sûrement parce ce que je n'ai pas d'autres exemples de langage aussi polyvalents tout en étant aussi rigoureux. Et surtout, ils ne sont pas enfermés dans un paradigme particulier...

VB pourrait (presque) être un bon candidat, s'il permettait l'accès bas niveau autrement que via des fonctions externes (DLL), et s'il n'avait pas de type Variant ni de déclarations implicites... Pour ces raisons, il est pour moi plus proche d'un langage de script (et donc de haut niveau) que d'un langage médian.
1  0 
Avatar de Mac LAK
Inactif https://www.developpez.com
Le 24/07/2009 à 1:29
Citation Envoyé par Luc Hermitte Voir le message
Il y a encore une tierce approche.
Cf le papier de Stroustrup que j'ai signalé il y a 3-4 pages et que personne n'est allé lire.
J'ai jeté un œil : sa démarche semble bonne, rien à redire là-dessus : apprendre le C++ "idéal", sans passer par la case "C". Bon, d'un autre côté, c'est pas non plus le premier cave venu sur le sujet, il le maîtrise.

Mais ce ne sera réellement possible qu'en "C++++", parce que quand je vois certaines craderies parfaitement "légales" en C++, j'ai un peu peur côté pédagogie... C++ est moins permissif que le C, OK, mais ça reste quand même une belle usine à horreurs quand on s'y met : casts sauvages, oublis de libération par utilisation de smart pointers (et souvent à mauvais escient), templates de templates de templates (debug=suicide), héritage multiple et son cortège de problèmes, possibilité de masquage des warnings (inclus les très dangereux, un comble pour un langage "pédagogique" !!!), etc.

Bref, bonne démarche, à condition de rétablir le bûcher et la Question pour tout étudiant qui dévie de la Voie Tracée, ou d'enfin faire du C++ un vrai langage fortement typé et d'éliminer certaines possibilités "nid à crasse" du langage. A voir avec la prochaine norme C++, mais j'ai des doutes sur le fait que ce soit révolutionnaire quand même, et il faudra encore X années pour que la norme se démocratise de toutes façons.
1  0 
Avatar de Jedai
Expert éminent https://www.developpez.com
Le 24/07/2009 à 17:25
Citation Envoyé par Mac LAK Voir le message
Par exemple, tu n'as pas idée à quel point il est difficile parfois de faire comprendre à un script-fan en quoi la chaîne "123" est différente de l'entier 123... Alors que c'est d'une évidence crasse pour quelqu'un qui a débuté avec du Pascal ou de l'Ada.
Quelqu'un qui a débuté par PHP (langage horrible s'il en est) ne fera pas la différence, mais en Python ou en Perl, "123" et 123 ne sont pas la même chose (bien que Perl permette plus facilement de passer de l'un à l'autre, surtout si on n'active pas les pragmas stricts). Connais-tu vraiment bien les langages de script autres que PHP ? (Je sais que tu ne connais pas bien Perl...)

Par ailleurs, pour en revenir à l'un de mes dadas, il existe des alternatives aux langages de script tout aussi haut niveau, tout aussi concis, à typage statique et à performances bien supérieures : les langages fonctionnels type OCaml ou Haskell. A mon avis ils sont excellents pour débuter, formant de bonnes habitudes au niveau des types et offrant d'excellentes facilités pour l'expression d'algorithmes et de structures de données complexes. Cela évite également le choc de découvrir le paradigme fonctionnel pour un programmeur impératif endurci. Comme pas mal je suis plutôt partisan de découvrir le bas-niveau par un bon cours d'architecture de la machine (et éventuellement un cours de systèmes d'exploitation) plutôt que de souffrir avec des langages de bas-niveau (ou "médians" selon MacLak qui dans la plupart de ses discussions semble situer ce milieu bien plus bas que moi ou d'autres le ferait, tendance naturelle je suppose dans un programmeur qui fait surtout du bas-niveau) inadéquats pour apprendre la programmation.

Citation Envoyé par deadalnix
Pour moi, il est indispensable pour se dire programmeur de connaitre plusieurs langages.
Là je te rejoins complètement !

--
Jedaï
1  0