|
Publicité ' | ||||||||||||||||||||||||
|
|
#101 | ||
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
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:
-- Jedaï |
||
|
|
10
|
|
|
#102 | |||
|
Membre expert
![]() Ingénieur R&D Inscription : juin 2003 Messages : 4 502 ![]() |
Citation:
Est-ce vraiment des gens compétents en C qui manque ou alors des gens avec une double compétences ? Citation:
Citation:
Pour le C c'est à demi-tranchant. Pour une personne dont sa formation principale est l'informatique alors c'est bien-entendu faux puisque connaître ce langage parfaitement n'est pas suffisant pour occuper un emploi dans les milieux où il est utilisé. Pour une personne de formation du métiers où ce langage est largement utilisé alors cela peut effectivement être déterminant pour l'emploi (à tort ou raison)
__________________
" Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin. Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ] |
|||
|
|
00
|
|
|
#103 | ||||
|
Inactif
![]() Inscription : octobre 2004 Messages : 3 894 ![]() |
C'est pareil en Javascript notamment, tu passes d'une représentation chaîne à entière automatiquement. T'as des principes similaires en shell Unix, en batch DOS, en LUA aussi (au moins en partie).
C'est plutôt les langages de script qui ne le permettent pas que je trouve rares. Citation:
Un cours d'archi ou de systèmes ne te donnera jamais la base bas niveau correcte pour pouvoir réellement en faire un jour. Il y a une nette différence entre savoir "intellectuellement" ce qu'est un mot-machine et l'avoir pratiqué réellement, par exemple, et c'est pareil pour la gestion mémoire et tout ce que l'on peut "reprocher" au bas niveau. Encore une fois, ce que je conteste, c'est l'approche "intégriste" pour un débutant, c'est à dire à trop haut ou trop bas niveau. Faut être pas bien cuit pour ne pas comprendre que sans langages de haut niveau, pas de compilateurs bas niveau performants, et que sans librairies bas niveau optimisées, pas de langages de haut niveau avec un niveau de réactivité décent. Les deux sont importants, pour ne pas dire cruciaux, et se couper volontairement de la moitié de l'informatique par volonté de porter des œillères est idiot. Citation:
![]() Citation:
Citation:
Là, tu abordes effectivement un autre type de débutant, dont on a très brièvement parlé dans ce sujet : le reconverti. Dans ce cas particulier, à condition d'avoir une expérience métier plus que significative, il peut effectivement démarrer par un langage moins didactique... En espérant que l'expérience métier lui a appris les bonnes bases d'algo et/ou de systèmes, sinon, c'est mort. |
||||
|
|
10
|
|
|
#104 | |
|
Expert Confirmé
![]() frederic francesConsultant informatique Inscription : juin 2009 Messages : 1 848 ![]() |
Citation:
|
|
|
|
00
|
|
|
#105 | |
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Si tout ça est du chinois pour toi, tu peux toujours me demander de te montrer un code qui exécute une opération particulière de bas niveau (je ne garantis rien, ça dépendra de si j'ai le temps et de l'ambition de ta demande). -- Jedaï |
|
|
|
00
|
|
|
#106 |
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
concernant Haskell, je considère que les type class et les monades ne sont pas des notions de débutant... sauf si l'on considère qu'il est normal de commencer l'info juste après une aggreg de maths
|
|
|
00
|
|
|
#107 | |
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Il y a quelques cours d'initiation à la programmation qui utilisent Haskell, ils marchent plutôt pas mal. -- Jedaï |
|
|
|
10
|
|
|
#108 | ||||
![]() ![]() ![]() Nicolas ValléeIngénieur d'études Inscription : décembre 2005 Messages : 9 963 ![]() |
Citation:
je grossis (beaucoup) les traits bien entendu... Citation:
Citation:
Citation:
se limitent-ils à un sous-ensemble proche de caml ? as-tu des liens ? |
||||
|
|
00
|
|
|
#109 | |||
|
Inactif
![]() Inscription : octobre 2004 Messages : 3 894 ![]() |
Citation:
Pour ma part, je fais partie des rares qui préfèrent former des débutants que d'externaliser. Hélas, je n'ai pas toujours le dernier mot à ce sujet. Citation:
Citation:
Couplé aux possibilités multi-paradigmes (et "multi-hauteur") de ces langages, cela en fait définitivement pour moi les meilleurs langages pour débuter. Surtout qu'il n'y a pas besoin de "packages" supplémentaires (ou de librairies tierces) pour utiliser ces multiples paradigmes : tout est natif. |
|||
|
|
00
|
|
|
#110 | |||
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Citation:
Citation:
-- Jedaï |
|||
|
|
00
|
|
|
#111 | |||||
|
Inactif
![]() Inscription : octobre 2004 Messages : 3 894 ![]() |
Citation:
De plus, coder de façon "élégante, lisible, modulaire et correcte" est possible dans absolument tous les langages, notamment en Pascal et en Ada que je défends en tant que langages d'initiation. Citation:
Mais bon, redevenons sérieux : tu as des exemples de fonctions (en programmation impérative) qui ne renvoient pas les mêmes données avec les mêmes entrées ? N'oublie pas que l'environnement fait partie des entrées, si tu l'utilises dans ta fonction...Moi, au contraire, j'ai toujours eu plus facile d'expliquer le principe des fonctions en donnant l'analogie d'une fonction mathématique (f(a) est constant tant qu'on ne modifie pas "a" ni "f", dans le cadre commun accessible à la plupart des gens) que d'expliquer qu'une fonction est un programme et que son fonctionnement est altéré par d'autres fonctions qui n'ont à priori rien à voir dans l'affaire... La plupart des gens pensent plus facilement en séquentiel (=impératif, donc) qu'en fonctionnel. Citation:
Pour le reste, autant j'ai pu croiser des personnes ayant des difficultés avec les pointeurs (surtout quand ils sont mal expliqués, d'ailleurs...), autant je n'ai jamais rencontré de personnes ayant des difficultés avec l'affectation, ni avec le paradigme impératif. Là encore, tout est affaire d'explications !! Tu as l'analogie avec les recettes de cuisine (pour le paradigme) ou les étiquettes / boîtes (pour les affectations), le tout est de "démystifier" les concepts derrière pour les expliquer aux étudiants. Or, j'ai quand même rencontré bien plus de profs trop dans leur sphère pour descendre au niveau de leurs étudiants que de bons pédagogues : le nombre hallucinants de "cours officieux" que j'ai pu faire dans ma scolarité me l'a démontré à de nombreuses reprises... Citation:
Quant à ce que j'ai pu bouffer en fonctionnel... Lambda-calcul "théorique", Lisp, Scheme, et j'ai même bouffé du Prolog pour taper dans le dernier paradigme. Mais au moins, contrairement à beaucoup, j'ai fait mon choix en toute connaissance de cause, en sachant ce que je laissais de côté. Alors que ta manière d'approcher l'initiation au développement voudrait leur faire ignorer l'aspect bas niveau... Moi, je cherche à leur ouvrir l'esprit à tous les aspects / niveaux du développement, peux-tu en dire autant ? Non. J'ai trouvé tous ces langages intéressants, bien qu'assez limités souvent à un domaine plus ou moins restreint, mais j'en ai toujours retiré un point important : un solide bagage mathématique est souvent nécessaire pour comprendre ces langages. Et c'est exactement pour ça que je ne les conseille pas pour un débutant. Après, chacun voit midi à sa porte : pour ma part, en projet de maîtrise, on avait un sujet commun (compression de Huffman), à implémenter au choix en Scheme ou en Ada. Au final ? Certes, il y avait plus de lignes de code en Ada qu'en Scheme... Mais 90% des programmes Ada ont été terminés bien avant ceux en Scheme, et étaient plus efficaces à tout point de vue. Sans compter que la plupart de ceux qui avaient choisi Scheme se ont quand même pas mal galéré pour réussir à faire leur programme, alors que ceux qui avaient choisi Ada ont obtenu le résultat très vite, et ont soit été libres de "pousser" plus loin, soit d'être tranquilles et de pouvoir passer à autre chose... Citation:
L'ouverture impérative, OO, bas niveau et haut niveau du Pascal et de l'Ada sont NATIVES, il est trivial de passer de l'un à l'autre ou au contraire de s'isoler dans l'un de ces aspects. La seule et unique contrainte (impérative, d'ailleurs), c'est le programme principal, réduit à un "Init / run / done" en mode OO complet... Comme je l'ai déjà dit et répété des dizaines de fois : être extrémiste et/ou faire du prosélytisme pour l'ultra-bas (ou ultra-haut) niveau n'apporte RIEN DE BIEN. Apprenez aux étudiants un langage médian, montrez-leur des portes vers chaque "univers" de la programmation, et foutez-leur la paix dans leurs choix par la suite. Je ne défends pas le bas niveau par "intégrisme", mais parce que certains voudraient faire croire qu'il ne sert à rien, ce qui est une bêtise sans nom... Les deux aspects du développement ont leur avantages, inconvénients, et rôle. Dénigrer l'un des deux est stupide, et pousser les étudiants vers un seul de ces aspects est encore plus stupide. Laissez-les choisir ce qu'ils aiment faire, mais pour ça, il est crucial de leur offrir ce choix, d'où ma position d'utiliser des langages médians pour débuter la programmation. |
|||||
|
|
10
|
|
|
#112 |
|
Membre habitué
![]() Inscription : juillet 2009 Messages : 193 ![]() |
En tant que débutant moi meme.
je crois savoir ce qu'on veut. (nuance, vouloir/Avoir besoin). Le petit newbie a besoin de premièrement apprendre un truc rapide, genre qu'il voit qu'au bout d'une semaine, il peut commencer a faire des trucs. Après il pourrait revenir sur les même chapitres mais avec des cours plus approfondies, sinon çà ne l'intéressera pas. Mais bon, la je parle des autodidactes. donc pour moi, C# All the way grace au modos de la séction. que je remercie au passage. et puis toujours du C#, je ne vois pas l'intérêt de passer a un autre langage pour un débutant. |
|
|
00
|
|
|
#113 | ||
|
Invité(e)
![]() Messages : n/a ![]() |
Citation:
Citation:
CQFD |
||
01
|
|
|
#114 | ||
|
Inactif
![]() Inscription : octobre 2004 Messages : 3 894 ![]() |
Citation:
Tu crois sincèrement que le concept d'environnement en tant que paramètre d'une fonction est "nouveau" et introduit par les langages fonctionnels comme Haskell ? J'ai du mal à croire que tu puisses être sérieusement convaincu de ceci, alors que c'est une base commune de tous les langages bas niveau depuis qu'ils existent... Citation:
Tout comme il va être difficile de montrer qu'un appel de fonction (ou de procédure) n'est pas un branchement inconditionnel, une des quatre bases de la programmation impérative... Éventuellement suivi (dans le cas d'une fonction) d'une assignation, autre base de ladite programmation impérative. L'approche est bien plus impérative que fonctionnelle, car elle se base sur une séquentialité d'opération élémentaires parmi les quatre de base (affectation, saut conditionnel, saut inconditionnel, boucle de répétition). Les gens le comprennent en général comme "Faire l'opération X et la récupérer", au milieu d'un ensemble d'opérations totalement séquentielles... La fameuse "recette de cuisine", donc, et "juste" la base de l'algorithmique. Pour introduire le concept de fonction, pour ma part, j'utilisais l'analogie suivante : "Prendre une casserole"... Ce qui sous-entends, derrière, "Aller jusqu'au meuble à casseroles, ouvrir la porte, prendre la casserole, refermer la porte, revenir à la gazinière". Totalement impératif, donc... Et c'est pourtant une fonction / procédure ! |
||
|
|
00
|
|
|
#115 | ||||
|
Invité(e)
![]() Messages : n/a ![]() |
Citation:
Bon après, j'avoue, c'est tiré par les cheveux. Citation:
Citation:
Citation:
Typiquement, je préfère dire "la hauteur d'un arbre, c'est le max de la hauteur de ses fils, plus un" que "pour calculer la hauteur d'un arbre, assigne une variable h à 0, puis déréférence le pointeur sur la tête de l'arbre, puis...." J'ai du mal à voir le moindre argument en faveur de la seconde approche, surtout pour un débutant... |
||||
00
|
|
|
#116 | |||||
|
Inactif
![]() Inscription : octobre 2004 Messages : 3 894 ![]() |
Citation:
Au passage, il faut écrire "return (*t);" et non pas "t[0]", hein... Citation:
Citation:
Deux concepts totalement impératifs... Citation:
Citation:
Et même si on utilise un arbre : en langage impératif, si on n'est pas complètement inconscient des performances et que l'on a besoin de la hauteur, alors on maintient la hauteur dans les attributs de l'arbre. Il n'y a alors même pas besoin de faire une fonction de calcul de la hauteur, on renvoie simplement l'attribut correspondant. |
|||||
|
|
00
|
|
|
#117 | ||||||||
|
Invité(e)
![]() Messages : n/a ![]() |
Citation:
Citation:
Non parce que bon, la "mémoire aux alentours de "t", c'est une notion assez floue quand même. Parce que si on a un tableau de tableau, et qu'on prend la somme de tous les éléments, la "mémoire aux alentours", elle peut aller loin. Et si c'est une liste chaînée, en fait ça peut être absolument n'importe où en tout petit bouts. Donc sérieusement, arrête deux secondes la mauvaise foi et admet que dans un monde impératif, deux appels successifs sur le même argument peut parfaitement et plus que couramment retourner deux résultats différents ! Je te rappelle qu'on est dans une discussion"quel langage pour un débutant", et je ne pense pas que dire à un débutant "toute fonction, quelle qu'elle soit a Ok, j'ai oublié le return, et le type de mon argument aurait du être "int i[]". Mais je maintiens le "i[0]" pour une fonction "get_fst" Citation:
Citation:
Ensuite on ne "branche pas" vers une fonction, on l'appelle Pour une procédure, bien sûr que c'est impératif, puisqu'une fonction sans valeur de retour n'a aucun intéret s'il n'y a pas d'effet de bord. Citation:
Et juste pour info, en CAml, voila la définition de la hauteur d'un arbre Code :
Moi je connais plus d'algo qui parlent d'arbre que d'algo qui demandent à ce qu'on gère la mémoire à la main. Donc il me semble plus adapté pour un débutant d'avoir un langage qui permet d'exprimer facilement des algos sur les arbres qu'un langage qui permet de gérer sa mémoire à la main. Citation:
Bon après, on me souffle à l'oreillette qu'utiliser un entier de plus à chaque noeud peut avoir un impact sur "les performances" dont on ne doit pas être "complètement inconscient". Mais au chipote. |
||||||||
00
|
|
|
#118 |
|
Membre émérite
![]() Inscription : décembre 2008 Messages : 189 ![]() |
Votre débat n'a rien à voir avec le topic dont le titre est "Langage pour débuter".
Sachant qu'une application n'a jamais BESOIN d'être entièrement impérative ni BESOIN d'être entièrement fonctionnelle, sachant que certaines notions sont plus aisées à saisir dans une logique impérative et d'autre dans une logique fonctionnelle, il me semble qu'il faut, quel que soit le langage qu'on choisit pour des débutants, faire écrire à ces débutants du code impératif et du code fonctionnel, et ce en montrant bien que certains appels de fonctions ont des effets de bord (et ce que cela implique) et que d'autres n'en ont pas (et ce que cela implique). Pour des débutants il vaut mieux parler d'effets de bord, plutôt que de "paradigme impératif vs paradigme fonctionnel", qui tient plus de la querelle de théoriciens. Pour en revenir strictement au sujet du débat, je pense que LISP est un excellent langage aussi bien pour débuter l'apprentissage de la programmation que pour voir, plus tard, certains aspects avancés (macros puissantes, CLOS, boucle read-eval, persistance des données, fonctions de première classe, etc) |
|
|
00
|
|
|
#119 | |
|
Membre Expert
![]() Inscription : août 2006 Messages : 1 146 ![]() |
Citation:
|
|
|
|
00
|
|
|
#120 | ||||||||||||||||
|
Inactif
![]() Inscription : octobre 2004 Messages : 3 894 ![]() |
Citation:
Oui, l'exécution d'un code est reproductible à l'infini tant que l'environnement (y compris réduit à quelques octets de mémoire épars) reste identique. C'est juste le principe de base des tests et de la validation. Citation:
Citation:
Tu as mal compris le concept d'effet de bord de l'impératif, je pense, tu devrais réviser un peu. Citation:
Citation:
Citation:
A moins que tu ne veuilles dire "get_first" ? Houlà, mais tu codes crade !!! "GetFirst", ou mieux : "Get(Tab,Index)". Et après, ça donne des leçons sur l'impératif... Citation:
Citation:
Citation:
Sinon, j'avoue que je serais assez surpris de voir ta fameuse "constance" des résultats en Haskell sur une lecture de fichier ou une réception de socket, par exemple... Toujours les mêmes paramètres, et résultats différents à chaque fois, ça doit t'agacer... Citation:
Citation:
Le terme "branchement" est le terme "consacré"... Cela peut aussi bien recouvrir un saut (JMP) qu'un appel (CALL). Dans tous les cas, le PC (Program Counter) est modifié, c'est ça la définition d'un branchement. Tu as aussi des branchements dans les boucles, les sorties de boucles, les retours de procédures / fonctions, les tests... "Branchement" est le terme générique recouvrant tout ça. Citation:
Citation:
Citation:
Question de pédagogie, la fameuse "recette de cuisine"... Pendant que toi tu t'escrimeras à demander à l'apprenti de blanchir le chou, moi j'irais lui expliquer qu'il faut le tremper dans l'eau bouillante quelques minutes, et que le terme consacré est "blanchir". Et pendant que le tien sortira son pot de peinture blanche en désespoir de cause, le mien se tapera un bon repas. Citation:
Citation:
En gros : si tu as besoin de la hauteur une fois tous les 36 du mois (chargement / sauvegarde par exemple), inutile de coder ça dans l'arbre, et on se fiche un peu de l'algo utilisé de toutes façons. Si tu t'en sers sans arrêt, l'overhead de l'ajout de la hauteur dans la structure de l'arbre sera amplement compensé par la réduction de temps de calcul de la hauteur. Et, au fait, tu arrives à battre Delphi (vilain langage impératif dérivé du Pascal) côté nombre de lignes écrites pour résultat produit ? Le record à battre est un programme fonctionnel et interactif avec zéro ligne de code écrite par le développeur... |
||||||||||||||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com