Journal Commencer à programmer ?

Posté par  (site web personnel) .
Étiquettes : aucune
0
7
juil.
2005
Cher journal, je suis un étudiant en première (bientôt deuxième si tout ce passe bien) année d'école de commerce et j'aimerais bien me mettre _vraiment_ à la programmation.

Je n'ai encore jamais été très loin dans aucun langage (excepté HTML/CSS et encore, je sais même pas si on peut appeler ça de la programmation) et j'ai tâté un peu celui de la TI(89) quand j'en avais encore l'utilité (en TS).

J'ai déjà essayé (pas très ardemment c'est vrai) de me mettre au C et j'ai pas trop accroché à sa syntaxe. Mais dernièrement j'ai découvert l'O'Caml sur un site d'olympiades d'informatique [1] et je dois dire que ce que j'en ai vu m'a plu (syntaxe, pas de gestion manuelle de la mémoire, etc).
Toutefois j'ai également un Mac et je dois dire que ça me déplairait pas de savoir également programmer des applications pour.

C'est compliqué, hein? :!
Tout ça pour dire que je ne sais pas vraiment ce qui est le plus utile/malin d'apprendre pour commencer... est-ce que je dois impérativement passer par le C ? est-ce que le C devient intéressant une fois qu'on a dépassé le bête stade de l'apprentissage de sa syntaxe ? est-ce que l'O'Caml n'est pas au final un langage ultra-élitiste fait que pour les matheux ? est-ce que l'Obj-C c'est intéressant pour linux ?

Je suis ouvert à toutes les propositions, merci ;-p



PS. j'espère ne pas avoir lancé de vieux troll des cavernes

[1] http://www.france-ioi.org/(...)
  • # Que veux-tu faire ?

    Posté par  (site web personnel) . Évalué à 9.

    la question à se poser est que veux-tu faire ue fois que tu auras appris un langage ?

    Pour débuter, je crois que Python est pas mal ( pas de phase de compilation, interfaçage avec la plupart des toolkits graphiques, syntaxe simple, possibilité de faire de la programmation objet mais pas obligatoirement, documentation abondante, portable ).

    Si tu veux développer des applications plus pointues qui accèdent à des fonctionalités bas niveau, le C est presque incontournable.
    • [^] # Re: Que veux-tu faire ?

      Posté par  (site web personnel) . Évalué à 5.

      En réalité je n'ai pas de but précis actuellement (mais ça viendra sûrement), je voudrais plutôt apprendre pour le simple fait d'apprendre.

      A la base je suis un étudiant frustré qui aurait voulu faire des études en informatique (mais la morosité du marché de l'emploi blablabla) et pour ça je pense pas qu'il faille vraiment un but.
      • [^] # Re: Que veux-tu faire ?

        Posté par  . Évalué à 3.

        A la base je suis un étudiant frustré qui aurait voulu faire des études en informatique (mais la morosité du marché de l'emploi blablabla) et pour ça je pense pas qu'il faille vraiment un but.


        Moui enfin, c'est dommage, je suis pas sûr que la conjoncture soit si morose que ça dans ce genre de secteurs qui ont plutôt leur avenir devant eux question développement.

        Je pense que pour apprendre la programmation, il faut commencer par le C qui donne au moins les bases syntaxiques des langages les plus utilisés (C, C++, Java, C#) et apprend la programmation impérative. Après, on s'attaque à la programmation objet avec le C++ ou le Java/C#. Enfin en tous cas, c'est comme ça que j'ai appris à la fac.
        • [^] # Re: Que veux-tu faire ?

          Posté par  (site web personnel) . Évalué à 4.

          Je pense que pour apprendre la programmation, il faut commencer par le C qui donne au moins les bases syntaxiques des langages les plus utilisés (C, C++, Java, C#) et apprend la programmation impérative. Après, on s'attaque à la programmation objet avec le C++ ou le Java/C#.


          Certes le C est la base de tous ces langages. Mais equi débute donc, pour lui, je pense que le mieux c'est de commencer par un langage qui soit simple et qui ne lui impose pas la gestion de la mémoire, les pointeurs et qui propose un bon débogueur.

          Amha le caml est une bonne idée pour débuter, mais peu de projets sont en caml, cela peut donc représenter un handicap s'il souhaite participer à des projets.

          M'enfin ce n'est que mon avis...
          • [^] # Re: Que veux-tu faire ?

            Posté par  . Évalué à 2.

            Moi j'ai bien commencé la programmation en apprenant le C. De toutes façons quand on apprend, on ne s'attaque pas aux pointeurs et allocations dynamiques directement...
            • [^] # Re: Que veux-tu faire ?

              Posté par  . Évalué à 10.

              > De toutes façons quand on apprend, on ne s'attaque pas aux pointeurs et allocations dynamiques directement.

              Et alors quel est l'intêret de commencer à apprendre avec un langage aussi 'primitif' que C si on n'utilise même pas ses 'features' les plus intéressantes. Franchement à ce niveau autant commencer par un langage dit "de haut niveau" (Java, SmallTalk, O Caml ...) où justement on ne se préoccupe que de l'algorithmique et par la suite on peut faire de C pour bien se rendre compte de comment marche une machine et un OS.

              Enfin, c'est comme ça que j'ai appris l'informatique (Java pour les bases de la programmation (forcement orienté objet du coup) et Perl pour les TP système et réseau)) et ça ne m'a jamais empéché de faire du C ensuite (même si j'ai l'impression de perdre du temps sur des choses que ne m'interesse pas (gestion rudimentaire de la mémoire, des processus, des accès réseau et système de fichier ...)). Bref, je ne suis pas un développeur du noyau Linux :).

              Pour répondre à la question posée dans le journal, je proposerais Ruby comme langage objet à tester. De toute façon au bout d'un certain nombre de langage étudié, on se rend compte que nos préférences sont plus une histoire de goût que basé sur un plus technique (par exemple avec Ruby je peux faire la même chose qu'avec Python mais je préfére tout de même la manière de faire en Ruby (c'est surement du à mon expérience des différents langages que j'ai pu croiser depuis mes dépuis en informatique)).
              • [^] # Re: Que veux-tu faire ?

                Posté par  . Évalué à 1.

                Et alors quel est l'intêret de commencer à apprendre avec un langage aussi 'primitif' que C si on n'utilise même pas ses 'features' les plus intéressantes

                Ben justement, le langage est simple. Pour apprendre à programmer, y'a rien de tel : tu codes ton truc, et dès que tu as besoin d'une fonctionnalité avancée, tu te la programmes. C'est comme ça qu'on apprend. C'est très très formateur d'apprendre à réécrire la libc par exemple (c'est d'ailleurs plus ou moins l'approche utilisée dans le Kernighan & Ritchie, mais le bouquin en lui-même n'est pas pour les débutants).

                Cela dit, tu peux déjà programmer pas mal de choses en C rien qu'avec la notion de tableaux.

                Et tu utilises une syntaxe "propre" pour masquer les pointeurs dans les cas où tu en as besoin, du genre

                typedef char CHAINE20[21];

                Plus le langage est simple, plus il est facile d'apprendre a s'en servir. Cela dit, faire de la programmation « sérieuse » proprement en C, c'est une autre paire de manches.

                De plus, commencer par utiliser un langage totalement orienté objet (comme Java ou Ruby), même si on peut toujours détourner le langage pour en garder le côté procédural, est une mauvaise idée à mon avis. Les algos sont rarement orientés objet au départ; ils sont adaptés au paradigme objet, mais proviennent pour la plupart des travaux de recherche effectués dans les années 60/70...
                • [^] # Re: Que veux-tu faire ?

                  Posté par  . Évalué à 3.

                  > Ben justement, le langage est simple.

                  Je ne trouve vraiment pas le langage C 'simple' car il contient trop d'élément de syntaxe différent (boucle, affectation, pointeur, référence, tableau, fonction, macro ...).

                  Bref, quand je parlais d'algo, je pensais plutôt à des trucs basiques comme un quick sort ou la création de listes chainées. Prend le code Java (ou Ruby ou O'Caml) et compare avec un code en C, tu verras qu'en C tu te prendra la tête avec des notions de syntaxes et d'allocations de mémoires pas évidentes (pour la liste chainée) alors qu'avec un langage de haut niveau tu pourras rapidement te focaliser sur le "sens" profond (sémantique) de ton algo plutôt que sur son enrobage (syntaxe).

                  Après, je ne comprend pas ta réflexion sur le langage objet tu ne vas pas commencer à faire un framework à la Struts pendant ton premier TP. Donc le paradigme objet ne te servira à pas grand chose au début, la seule chose c'est que Java par exemple permet de se détacher un minimun de la machine (pas de gestion de mémoire). Je pense qu'on peut être d'accord pour dire que C++ est un mauvais langage pour apprendre à programmer (à la limite ça peut être pas mal pour écoeurer les gens :) : il a une syntaxe super lourde, il est trop permissif niveau utilisation de fonctions C, et n'est pas évident à utiliser pour faire de l'objet et on se retrouve avec références/pointeurs dans tous les sens.
                  • [^] # Re: Que veux-tu faire ?

                    Posté par  . Évalué à 1.

                    Je ne trouve vraiment pas le langage C 'simple' car il contient trop d'élément de syntaxe différent (boucle, affectation, pointeur, référence, tableau, fonction, macro ...).


                    Euh, boucles, affectations, tableaux, fonctions, tout ça tu le retrouves (heureusement) dans tous les langages. Quant aux références, c'est du Java et pas du C. Tiens d'ailleurs, un truc tout bête :

                    en C, tout est passé par valeur. TOUT. En Java, les types primitifs sont passés par valeur (donc par copie), mais tous les types "complexes" (les objets) sont passés par référence. Et note bien que j'ai parlé de la simplicité du langage/de sa syntaxe, pas de la facilité à programmer avec le langage C. Je trouve que ce dernier est plutôt rapide à mettre en oeuvre justement parce qu'il n'y a pas trop de concepts à connaître (mis à part la notion de pointeur, mais honnêtement, comme je l'ai dit, il n'y a pas besoin de manipuler les pointeurs pour commencer à programmer).

                    quand je parlais d'algo, je pensais plutôt à des trucs basiques comme un quick sort ou la création de listes chainées

                    Quand tu commences à programmer, un quicksort ou un algo de listes chaînées n'est pas simple, quel que soit le langage.

                    Prend le code Java (ou Ruby ou O'Caml) et compare avec un code en C

                    Je ne connais pas Ruby. En ce qui concerne Java, si tu n'as aucune notion de comment est allouée la mémoire, de comment fonctionne le garbage collector, etc., je ne vois pas comment tu peux comprendre la signification d'un NullPointerException. Java te fait croire qu'il n'y a pas de pointeurs, alors qu'il n'y a que ça, partout. Si tu ne comprends pas le principe d'une référence, je ne vois pas trop comment tu peux faire des choses un tant soit peu complexes en Java, ce qui revient à comprendre les pointeurs en C. Dans les deux cas, il faut parler d'adresse mémoire.

                    Donc le paradigme objet ne te servira à pas grand chose au début, la seule chose c'est que Java par exemple permet de se détacher un minimun de la machine

                    La méthode objet ne sert à rien au début. Si on te fait prendre l'habitude dès le départ (enfin, très vite, dirons-nous) de programmer sous forme de modules (fonctions/procédures), les concepts objets seront relativement simples à comprendre (il faut quand même une période d'adaptation, bien sûr). Et justement, prends Java : lorsque tu fais de la prog non objet, tu te retrouves avec le corps minimal suivant :

                    public class MaClasse {
                    public static void main(String[] args) {
                    // programme
                    }
                    }


                    Tu dois donc dire à l'étudiant en prog "oui bon, ben, oublie tout le squelette pour le moment, je t'expliquerai plus tard". En C, tu peux aisément expliquer les choses :

                    #include <stdio.h>
                    #include <stdlib.h>

                    int main(void)
                    {
                    /* ... *
                    return EXIT_SUCCESS;
                    }


                    (et encore, les #include étant comparables aux import, je ne devrais pas les mettre dans le "source").

                    Pour ce qui est des macros, tu ne les utilises pas au début, et bizarrement ça ne manque pas.
              • [^] # Re: Que veux-tu faire ?

                Posté par  . Évalué à 2.

                C'est comme ça que j'ai appris moi et c'est ce qui me parait logique, mais bon effectivement pourquoi pas commencer par un langage plus haut niveau et plus abstrait de la machine, donc plus facile à appréhender...

                Enfin, personnellement, je suis bien d'accord avec toi, je préfère très nettement avoir affaire à un langage gérant tout seul la mémoire comme un grand.
            • [^] # Re: Que veux-tu faire ?

              Posté par  . Évalué à 5.

              Si tu fais du C, ne serais-ce qu'en manipulant une chaine de caractere tu manipules des pointeurs. Donc si tu ne comprends pas les pointeurs, tu ne comprends pas ce que tu fais et tu fais du bidouillage.
      • [^] # Re: Que veux-tu faire ?

        Posté par  (site web personnel, Mastodon) . Évalué à 10.

        A la base je suis un étudiant frustré qui aurait voulu faire des études en informatique (mais la morosité du marché de l'emploi blablabla)

        Quelle horreur que de faire passer de telles choses avant son propre bien-être...

        La gelée de coings est une chose à ne pas avaler de travers.

        • [^] # Re: Que veux-tu faire ?

          Posté par  (site web personnel) . Évalué à 4.

          J'en suis quand même pas à ce point là ;p

          Mes études commerciales me plaisent beaucoup mais à la base, comme la plupart des lycéens de S qui s'orientent vers le commerce, ça n'est clairement pas ce que je souhaitais faire.

          Et il y a toujours une spécialisation (salvatrice ?) en 4ème année :D
    • [^] # Re: Que veux-tu faire ?

      Posté par  . Évalué à 8.

      Yep, je plussois l'usage de Python comme langage d'apprentissage, parcequ'il est vraiment très lisible, et puis accessoirement parcequ'un langage interprété dynamiquement c'est quand même vachement confortable quand on bricole. Ce bouquin est assez bien niveau pédagogique je trouve :
      http://www.ulg.ac.be/cifen/inforef/swi/download/python_notes.pdf(...)

      Quant à OCaml, bah c'est vraiment un autre genre. Je pense que son l'apprentissage demande plus de rigueur, mais c'est clair que c'est un très beau langage. Et non, je ne le réserverais pas aux matheux : c'est vrai que pour des raisons probablement historiques ou culturelles, la plupart des gens qui l'utilisent ont plutôt un background de thésard en info, mais d'un point de vu applicatif, c'est un langage en fait assez générique, et non pas un de ces langage vraiment purement universitaires qui permettent de faire des gros algos mais rien autour. Donc si il te plait, bah pourquoi pas...
      • [^] # Re: Que veux-tu faire ?

        Posté par  . Évalué à 4.

        Entièrement d'accord avec le bouquin dont tu donne le lien.

        En fait c'est un bouquin d'apprentissage à la programmation avant d'être un bouquin sur python. C'est très largement tiré de "how to think like a computer scientist" qui me semble une bonne introduction à la programmation (il utilise même la tortue de tk !!!)

        Sinon, python c'est simple à apprendre et très puissant. Comme dit plus haut, il commence par la programmation impérative et pass aux objets par la suite. C'est ce qui est bien avec Python : t'es pas obligé de faire de l'objet contrairement à Java où t'es obligé de faire au moins une classe pour faire un programme.
    • [^] # Re: Que veux-tu faire ?

      Posté par  . Évalué à 3.

      Entierement d'accord avec le fait que python est un tres bon langage pour apprendre et pour progresser.

      La syntaxe du C est tres utile a connaitre, car beaucoup de langages s'en inspirent (java, objC, C#, mais aussi php, et dans une moindre mesure perl et csh)

      La maniere de coder dans les 2 langage est assez differentes. En python, on utilise beaucoup la bibliotheque tres touffue (pour ca les docs en lignes sont indispensables) et en C, on aurra tendance a souvent reinventer la roue (ce qui peut etre utile dans un contexte d'apprentissage de la programmation).
      • [^] # Re: Que veux-tu faire ?

        Posté par  (site web personnel) . Évalué à 7.

        Je pense que si on veut faire de la programmation "sérieusement", il est assez indispensable de connaître le C. Pratiquement tout est basé à un niveau ou l'autre sur du C et donc si on connaît un minimum de C, on comprend plus facilement ce que fait réellement un bout de code Python ou autre.

        http://www.joelonsoftware.com/articles/fog0000000319.html(...)

        pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

        • [^] # Re: Que veux-tu faire ?

          Posté par  . Évalué à 1.

          dans mon école d'ingé, on fait quasiment que du Java, et ça pose un seul problème, quand on fait du C ensuite on fait plein de fuites mémoires... sinon, ça n'empèche en rien de faire des développements sérieux.
  • # Mon cas ...

    Posté par  (site web personnel) . Évalué à 6.

    Dans l'école d'où je viens, on commence par apprendre convenablement le C (et l'assembleur x86 mais ça tu peux laisser tomber ;-)) histoire d'assimiler les principes de bases.

    Ensuite, on continue le C en abordant d'autres concepts (les IPC par exemple), en parallèle on apprends les principe de la POO et on commence le C++.

    Enfin (tout en continuant le C et le C++), on aborde des languages de plus haut niveau comme le Java ...

    Maintenant, ça dépend du temps que tu veux y consacrer et si tu as envie de savoir coder des p'tits trucs comme ça ou de faire les choses proprement ...
    • [^] # Re: Mon cas ...

      Posté par  (site web personnel) . Évalué à 3.

      Par principes de base, tu entends quoi ? Les fonctions de base ou beaucoup plus que ça ?
      • [^] # Re: Mon cas ...

        Posté par  . Évalué à 5.

        Je pense qu'il parle des principes de base de la programmation.
        • [^] # Re: Mon cas ...

          Posté par  (site web personnel) . Évalué à 3.

          A mon avis, dans ce cas OCaml me semble tout à fait indiqué : pour comprendre l'algorithmique, le découpage modulaire de projet, la compilation, toussa toussa, et bien ce langage est génial.
          Qui plus est, avec son typage fort et la boucle d'interpretation de haut niveau, tu disposes d'un bon moyen d'éviter les erreurs au début (beaucoup d'erreurs de typages/de syntaxe quand on débutte...) tout en n'ayant pas à compiler à chaque fois ton programme. Et lorsque tu maitriseras les bases de la programmation/de l'algorithmique, tu pourras venir naturellement à l'utilisation des paradigmes impératif et objets, toujours en utilisant OCaML...

          Par contre, si tu veux apprendre la programmation système, évidemment C/Assembleur semblent incontournables.

          Pour ce qui est d'objective-C, on peut dire que c'est une surcouche objet élégante à C. Son problème étant qu'en déhors de GNUStep, OpenGroupware.org et Apple, peut de personne l'utilise. Mais il est plaisant de programmé avec lui, et je crois que sous MacOS il existe de très bons outils (ProjectBuilder, InterfaceBuilder). Par contre, comme pour C/C++, tu devras gérer ta mémoire à la main, mais c'est formateur ;)
      • [^] # Re: Mon cas ...

        Posté par  (site web personnel) . Évalué à 2.

        Surtout comment faire proprement de la programmation structurée, ensuite d'autres principes plus généraux (manipulation de fichiers, gestions des erreurs, de l'algorithmie, ...)
    • [^] # Re: Mon cas ...

      Posté par  . Évalué à -1.

      l'assembleur x86 mais ça tu peux laisser tomber

      Pas d'accord.

      Le C n'est qu'un assembleur évolué. Même s'il n'apprend pas l'assembleur de facon poussée, ce n'est pas une raison pour lui déconseiller. Ca ne pourra que lui être utile.

      Y a un langage qui me plait bien (que j'ai découvert depuis peu), c'est le Forth.

      Après, comme dit plus haut, tout dépend de ce que tu veux faire.
      • [^] # Re: Mon cas ...

        Posté par  . Évalué à 5.

        Sauf que l'assembleur, c'est vraiment réinviter la roue à chaque nouveau programme. D'une manière générale, je trouve que c'est se prendre bien trop la tête pour dépasser le stade du programme trivial. Quitte à avoir quelque chose de proche de la machine, autant prendre le C qui n'est pas spécifique à une architecture donnée et où il existe tout de même le minimum de fonctions nécessaires.

        Non franchement, je pense que l'assembleur, c'est utile dans un cadre où l'on souhaite aborder un peu tous les types de langages de programmation mais après, je vois pas trop l'utilité surtout pour programmer en amateur.
        • [^] # Re: Mon cas ...

          Posté par  . Évalué à 3.

          Sauf que l'assembleur, c'est vraiment réinviter la roue à chaque nouveau programme

          Pas forcément ....

          c'est se prendre bien trop la tête pour dépasser le stade du programme trivial. Quitte à avoir quelque chose de proche de la machine, autant prendre le C qui n'est pas spécifique à une architecture donnée et où il existe tout de même le minimum de fonctions nécessaires.

          Les meilleurs développeurs C que je connais ont aussi un minimum de connaissance de l'assembleur.

          Je n'ai pas dit non plus d'écrire des programmes complets en assembleur, mais de l'apprendre pour au moin savoir ce qui se cache sous le C. Après effectivement, tout dpend des cas, et selon le compilateur qu'on utilise et les besoins en perf, il peut être plus efficace de coder des bouts de code en assembleur. Mais c'est une autre histoire.

          Autre détail: dire que le C n'est pas spécifique à une architecture donnée ne signifie pas qu'un programme développé sur une architecture A n'aura pas besoin d'être adapté sur l'archi B.
          • [^] # Re: Mon cas ...

            Posté par  . Évalué à 2.

            Les développeurs C que tu connais ont-ils vraiment appris l'assembleur ?

            Moi, j'ai appris le C en premier, et l'assembleur est venu après, à force de débugguer des applications dont je n'ai pas le source, regarder les sources de linux...
            • [^] # Re: Mon cas ...

              Posté par  . Évalué à 10.

              C'est le problème de la plupart des jeunes étudiants en informatique d'aujourd'hui :

              1) Il y a tellement de langages qu'on ne peut plus se permettre de commencer par la base et évoluer vers le haut comme l'on fait les langages. Ce serait pourtant très salutaire car l'évolution des langages a toujours suivi des besoins qui se sont présentés aux programmeurs et des événements historiques. Voir les choses dans l'ordre permet d'expliquer bon nombre d'états de faits en informatique que l'on inculque aux universitaires comme des dogmes et sans explication préalable.

              2) Contrairement à ce que les gens qui ont commencé trop haut et qui n'ont jamais eu la curiosité d'aller ouvrir le capot de leur bécane peuvent penser, l'assembleur n'est pas un langage comme les autres. Non seulement parce que tout programme quelque soit son dialecte finit toujours à l'exécution par être traduit, aux travers d'un nombre variable de couches, en langage machine, mais également parce que cela permet de réellement savoir comment fonctionne un microprocesseur. Cela me semble être une évidence pour un professionnel de l'informatique, et à plus forte raison pour un programmeur, mais j'ai l'impression que la plupart des nouveaux venus dans le domaine inventent des raisons toutes plus ou moins farfelues pour justifier le passage sous silence de ce domaine « délicat ».

              Personnellement, j'avais commencé avec le BASIC 128 de mon MO6 en 1987 et je suis très vite passé à l'assembleur, avec lequel j'ai pu réaliser monts et merveilles. Bien plus tard (en 1999 ! lorsque Linux m'a offert la possibilité de programmer sans pirater) cela m'a permis d'apprendre le langage C en 15 jours parce que toutes ses subtilités avaient un sens, spécialement les pointeurs [...].

              On ne peut pas apprendre la programmation comme on apprend les mathématiques. En maths, les concepts enseignés sont immuables, ils existent pour la plupart depuis l'antiquité, et décrivent les lois de la nature qui sont « comme ils sont », et qui n'ont pas attendu l'apparition de l'intelligence pour régir le monde. La programmation, c'est une invention technique humaine qui a trente ans (pour son exploitation sérieuse). Cela veut dire que les premières personnes a avoir mis cela au point sont pour la plupart encore en vie.

              En considérant en plus la vitesse à laquelle le tout évolue, cela veut dire que la programmation est un domaine qu'il faut comprendre, déduire, et qui fait appel à l'intuition. Le par-coeur académique échoue complètement ce domaine, à mon goût.
              • [^] # Re: Mon cas ...

                Posté par  (Mastodon) . Évalué à 4.

                On ne peut pas apprendre la programmation comme on apprend les mathématiques.

                Il suffit d'apprendre le lambda-calcul (des maths), et puis d'apprendre le Lisp :)
                • [^] # Re: Mon cas ...

                  Posté par  (site web personnel) . Évalué à 3.

                  J'aurais plutot dis:
                  (Il (suffit d'apprendre (le lambda-calcul (des maths))), (et puis d'apprendre) (le Lisp))


                  ->[]
              • [^] # Re: Mon cas ...

                Posté par  . Évalué à 7.

                Je trouve ton analyse pertinente et juste mais ce que tu dis est vrai pour faire de très grand programmeur mais pour le programmeur lambda c'est de moins en moins vrai.

                Comme tu l'as dit il y a de plus en plus de langages et je ne crois pas que ca s'arrêtera. Je suis d'accord avec toi, étudier l'évolution des langages a travers les années est important pour bien comprendre pourquoi ce qui se fait aujourd'hui est ce qu'il est. Mais ca devient une tâche trop grande et le risque c'est que ca finisse par devenir un catalogue de langages appris par coeur, ce qui est stérile. Alors il faut faire un choix, approndir le passé pour comprendre d'où on vient soit insister sur les avancés récentes pour continuer a avancer.

                En caricaturant, est il plus important à l'heure actuelle pour un programmeur de savoir manipuler la mémoire à merveille mais d'ignorer les avancés en génie logiciel comme la programmation orienté objet ou le polymorphisme ou alors d'ignorer le fonctionnement de la mémoire mais être capable de produire une application conséquente avec du code certifié en peu de temps ? Et de nos jours, est t'il plus important d'avoir des gens qui savent optimiser au maximum le code assembleur d'une suite bureautique ou internet ou alors qui savent produire ces suites ?

                Au cas ou certains me dirais qu'on peut faire les deux, c'est partiellement vrai. Certes on peut survoler les deux mais pour que cela serve a quelque chose il faut faire plus que survoler et ca demande du temps, beaucoup de temps.

                Je crois que la programmation atteind le point ou un seul homme ne peut en faire le tour.

                L'exemple des mathématiques que tu prends est très bon et sur ce point tu as tort. Les mathématiques sont loin d'être immuable, certes ce qui est vrai un jour l'est aussi le lendemain mais c'est pareil en programmation, "i = i + 1" sera toujours une incrémentation de la variable "i" de 1, les opérations élémentaires ne changent pas. Ce qui évolue se sont les langages tout comme le font les théories mathématiques. Certes les vérités sont immuables mais les théories qui sont des inventions humaines évoluent.

                Et si on regarde l'évolution des mathématiques, notre génération est bien moins forte dans le calcul technique que la génération de nos parent (mes profs de maths me l'ont toujours répété très souvent, cela les exaspérait) qui elle même était bien moins forte dans le même domaine que la sienne. En revanche notre génération est meilleure dans les concepts. On voit des gens qui ne savent plus diviser de tête mais qui savent résoudre des problèmes conceptuels compexes, tout comme on voit en programmation des gens qui bien qu'ignorant l'usage manuel de la mémoire savent faire des applications de plus en plus complexes. Et d'ailleurs en maths aussi le par coeur académique ne fonctionne pas, j'en ai vu quelques uns se planter à cause de ca.
                • [^] # Re: Mon cas ...

                  Posté par  . Évalué à 8.

                  En caricaturant, est il plus important à l'heure actuelle pour un programmeur de savoir manipuler la mémoire à merveille mais d'ignorer les avancés en génie logiciel comme la programmation orienté objet ou le polymorphisme ou alors d'ignorer le fonctionnement de la mémoire mais être capable de produire une application conséquente avec du code certifié en peu de temps ? Et de nos jours, est t'il plus important d'avoir des gens qui savent optimiser au maximum le code assembleur d'une suite bureautique ou internet ou alors qui savent produire ces suites ?

                  Toi t'es riche et t'as un P IV :) (ou un AMD 64 ptet) avec 1 Go de RAM nan ?

                  Ca m'ennuit toujours les discours consistant à dire : certes, on pourrait faire mieux, mais vous comprenez on est pressé et avec le Java (C#, whatever, ...) on peut faire 2x plus de fonctions en 2x moins de temps avec 2x moins de programmeurs 2x moins doués et des machines 10x plus puissantes.

                  Et vous savez quoi ? Au final ca bug vraiment pas moins qu'avant...

                  Honnetement je préfère essayer de faire des choses élégantes, en plus au final ca pollue moins car j'achete moins de PC et le mien consomme moins de courant qu'un neuf ;)
                  • [^] # Re: Mon cas ...

                    Posté par  . Évalué à 5.

                    Ben c'est tout l'intérêt des langages comme Java ou C#/.NET. On est tout de suite largement plus productif puisqu'on n'a plus à s'occuper de la gestion de la mémoire, on a une bibliothèque de classes et de fonctions tellement énorme qu'on peut sans trop de problèmes faire pas mal de choses avec et forcément on va largement plus vite qu'en devant réinviter la roue ou chercher la bonne librairie sur internet.

                    Après, il faut voir si on pense que ce que l'on perd en performances et en occupation mémoire compense ou non ce qu'on gagne en temps de conception. C'est pas du "certes on pourrait faire mieux", c'est du "on pourrait passer 5 ans à programmer ça en C ou en C++, on préfère vous le livrer en un an en Java". Et on arrête de dire des conneries, les différences de performances sont pas si énormes que ça, sinon ces langages ne seraient pas aussi utilisés et répandus je crois. Et un Pentium ou un Athlon avec un giga de mémoire, c'est parfaitement abordable.
                    Mais puisqu'on a la puissance nécessaire et que ça tourne suffisamment bien, c'est une connerie que de ne pas en profiter.

                    Je pense que ce genre d'évolution est l'une des raisons d'être des ordinateurs : prendre en charge les taches répétitives et ennuyeuses. Et il y a des applications où on ne veut pas avoir à se prendre la tête avec ces détails.
                    Ca fait partie intégrante de la conception d'un programme que de choisir le langage le plus adapté. Si c'est pour faire une application web comme un CMS, c'est vraiment une perte de temps que de passer par du C. Si c'est pour faire un moteur 3D de jeu, c'est vraiment idiot de prendre du Java.
                    • [^] # Re: Mon cas ...

                      Posté par  . Évalué à 2.

                      Et on arrête de dire des conneries, les différences de performances sont pas si énormes que ça, A partir de la j'ai compris à qui j'a affaire ...
                  • [^] # Re: Mon cas ...

                    Posté par  . Évalué à 6.

                    Tu me fais dire ce que je n'ai pas dit. J'ai dit qu'avec les langages de haut niveau qui font de l'absraction on pouvait aller plus vite pour coder, j'ai pas dit que les machines devait être 10x plus puissantes. Pour java sa lenteur réside dans le fait que les prog tournes sur une VM mais je vais pas trop parler de Java, je ne m'y connais pas assez et je risque de dire des conneries. Je vais encore une fois parler de O'Caml (décidément aujourd'hui j'arrête pas, désolé), sous forme de bytecode les programmes sont effectivement lents, mais sous forme native les programmes sont en moyenne 5 fois plus rapides et rivalisent avec le C, il suffit de voir http://shootout.alioth.debian.org/great/benchmark.php?test=all&(...) pour s'en convaincre. Pourtant en O'Caml même avec la couche impérative tu n'a pas de pointeurs du tout, le langage gère l'allocation mémoire tout seul comme un grand. Forcément si tu n'a plus à gèrer la mémoire ca fait des choses en moins a coder pour une même tâche donc c'est effectivement plus rapide. De plus comme c'est le compilateur qui gère la mémoire, si celui ci est correcte tu peut garantir que la mémoire sera bien géré dans ton programme, ce qui effectivement réduit la liste des bugs possibles.

                    Puis aller plus vite pour coder une tâche ne sinifie pas mettre deux fois moins de temps au total car tu peux peux profiter du temps que tu as gagné pour mieux penser ton programme et ses algorithmes. Dans un programme une améloiration d'un algorithme est souvent bien plus efficace qu'une maipulation astucieuse de la mémoire ou du processeur. De plus si on prend le compilateur d'O'Caml, il optmise pas mal et rien ne dit qu'a la main tu fasses mieux que lui.

                    J'ai envie de faire une anlalogie. Trouves tu normal que linxs, Firefox, Konqueror et j'en passe des tonnes, pour lire un fichier sur un serveur, implémentent des fonctions de connection au serveur ? Moi pas ! Je préfère nettement la solution du Hurd qui consiste a monter un ftp, http sur le vfs comme ca l'application n'a plus qu'a faire ouvrir le fichier comme s'il était local. Comme ca il n'y a qu'un seul code, et celui qui veut faire une application pour lire un fichier distant n'a plus a ce soucier de la connection, tout comme dans les langages de haut niveau où le programmeur n'a plus a ce soucier de la gestion de la mémoire. Les applications sotnt plus simple a écrire, les bug de connections sont éradiqués et il n'est plus utile pour lire un fichier distant de savoir ce connecter a au serveur. Ceci pour répondre a ton "2x plus de fonctions en 2x moins de temps avec 2x moins de programmeurs 2x moins doués". Mais là ou tu te trompe c'est que la machine n'a pas a être 10 fois plus puiisante, c'est le système qui est 10 fois mieux concu ! Pour les langages de haut niveau c'est pareil, ils simplifient la vie, réduisent les doublons et demandent moins de connaissances pour arriver aux mêmes buts mais ils ne sont pas 10 fois plus gourmands,.
            • [^] # Re: Mon cas ...

              Posté par  . Évalué à 3.

              Les développeurs C que tu connais ont-ils vraiment appris l'assembleur ?

              Oui, j'en suis certain (d'ailleurs certains l'ont appris en même temps que moi).

              Moi, j'ai appris le C en premier, et l'assembleur est venu après, à force de débugguer des applications dont je n'ai pas le source, regarder les sources de linux...

              Moi c'est le contraire (assembleur sur microprocesseur 8 bits 6809, assembleur 68k, microcontroleurs 68hc11 et x386, mais a l'époque essentiellement sous MSDOS). Et contrairement à ce que l'on croit, l'assembleur n'est pas si fastidieux que ca, c'est une question d'habitude. Quand on est rodé, on devient très efficace.

              Mais attention, je n'ai jamais dit qu'il fallait absolument commencer par l'assembleur. On peut très bien apprendre le C (qui n'est ni plus ni moins qu'un assembleur évolué), et en même temps apprendre l'assembleur. Même si par la suite on ne continue pas à coder en asm, c'est quand même très formateur.
      • [^] # Re: Mon cas ...

        Posté par  (site web personnel) . Évalué à 3.

        Alors j'ai lu bcp de bon commentaire sur le Forth (dans virus mag / les puce / le virus a l'epoque)

        Sinon il faudrait 3 langages je pense
        - un en programation Impérative (exemple C)
        - un en programation Objet (exemple java, ada)
        - un en programation Fonctionnel (exemple lisp)

        Enfin plus d'info par la http://fr.wikipedia.org/wiki/Programmation.(...)
  • # GNUstep

    Posté par  . Évalué à 1.

    Si tu veux programmer des applications à la fois pour mac et pour linux (et d'autres), tu as la possibilité d'utiliser Cocoa sous mac, et GNUstep sous linux. Ces 2 API (Interfaces de programmation) sont très proches et elles peuvent te permettre d'écrire ton programme une seule fois et de le faire tourner ensuite sans modifications sous linux et sous mac.
    Par contre le language recommendé est l'Objective C, une extension (orienté objet) du C. Java et ruby sont aussi possibles.

    http://www.gnustep.org/experience/DevelopmentDemonstration.html(...)
    http://www.xdev.org/gnustep/demo.html(...)
  • # Objective Caml est bien

    Posté par  . Évalué à 10.

    Pour débuter, prend un langage de haut niveau. Plus le langage est de haut niveau et plus il fait des choses pour toi ce qui se simplifie la vie.

    Je pense que premièrement prendre un langage qui gère tout seul l'allocation mémoire est une bonne chose, c'est une raison massive de bug. Ne pas avoir a faire un malloc, sans oublier de mettre le free et une seule fois et au bon endroit avec le bon transtipage est compliqué au début. O'Caml, Java, Ada et beaucoup d'autres le font, mais pas le C ni le C++. D'ailleur le C ne mérite pas d'être appelé par certains "langage de haut niveau", ce n'est pas son but.

    Ensuite tu as le style de programmation que tu préfère. Là c'est une histoire de goût. Il y a des langages impératifs, ce sont les plus répendus. Ce sont ceux des affectation de variables, des bloucles for et while. Ils ont l'avantage d'être assez natuels quand on débute. On peut y coder les chose facilement et en peu de temps mais elle est plus diffcile a déboguer, on peut se perdre dans "a quel moment telle variable à t'elle valeur ?". Faut pas s'embrouiller.

    Les langages fonctionnels demandent de mieux penset ton programme avant de le coder. Ils sont basé sur des fonctions que tu emboite pour calculer le resultat et pas contrairement aux langages impératifs, aux valeurs que tu met dans des vairables. En contre partie ils sont plus aisés a débogger, et ont une structure basé sur les fonctionnalités ce qui les rend plus lisibles.

    Il y a aussi la programmation par objets. Elle est très utile pour la réutilisabilité du code. Mais comme dans ce monde tout est objet, il faut tout définir en terme d'objets ce qui parfois engendre des complications inutiles comme par exemple pour additionner deux entier, tu appèle la méthode de l'un où tu passe le second en argument ce qui a pour condéquences des fois de retrourner un nouvel objet ou de modifier la valeur du premier.

    Le typage est également très important, plus un langage t'embête avec le typage plus il détectera des erreurs et moins tu en fera, c'est très ennyeux quand on compile mais avec un langage qui a des types très exigents comme O'Caml, quand ton programme compile tu es sur d'avoir éliminé beaucoup d'érreur d'étourderie.

    Concernant le typage il y a aussi autre chose de pratique, c'est le polymorphisme. Si tu fais une fonction pour calculer la taille d'une liste, tu aimerais que ta fonction serve pour des listes quelconques et pas a avoir une fonction qui calcule la même chose pour chaque type de liste. Le polymorphisme ca sert à ca, ca permet de définir une même fonction pour différents types d'arguments (avec différents types de retour).

    Autre point virtal, les bibliotèques. Il est préférable de prendre un langage où il existe déjà beaucoup de bibliothèques et pas à avoir a réinventer la roue a chaque fois.

    Concernant O'Caml il est fonctionnel mais sait faire aussi de l'impératif et est aussi orienté objet (d'où son nom), il gère automatiquement l'allocation de mémoire. Le typage est statique c'est a dire que le compilateur essaie de trouver les erreurs de typage à la compilation et pas à l'execution, il est polymorphe, possède de nombreuses bibliotèques dont des binings de la SDL,Gtk, OpenGL, etc ... Son compilateur natif lui permet d'avoir un code rapide qui rivalise avec du C. En bytecode, c'est 5 fois plus lent mais c'est portable. Il est en QPL pour le compilateur et LGPL pour les bibliothèques.

    De plus caml à un outil très sympa : un top-level. Le top-level est un peu comme un shell dans lequel tu entre du code Caml et qui le compile à la volé. C'est très pratique pour tester ses fonctions sans avoir à faire un programme de teste spécifique. Et c'est encore mieux pour apprendre car tu peux expérimenter a ta guise et dans effort. Il y aussi un livre très bien fait en ligne qui se nome "Developpement d'application avec Objective Caml" ( Dehttp://www.pps.jussieu.fr/Livres/ora/DA-OCAML/index.html(...) ) . Il est très bien fait mais depuis le langage a évolué donc un petit tour de temps en temps du coté du manuel en ligne ne sera pas mal.

    Un autre langage très en vogue est java, complètement orienté objet il gère aussi la mémoire. Il possède une immence quantité de bibliotèques. Malheureusement la serion de Sun, c'est pas libre et les projets libres ne sont pas 100% compatibles avec les dernieres versions de Sun.

    Je n'ai pas parlé de la programmation logique, c'est vrai, mais pour débuter je n'y crois pas. Si ca t'intéresse ily a Prolog qui est bien fait et peut rendre parfois quelques services.

    Pour les autres langages, je ne les connais pas trop donc je ne peux pas trop d'aider mais j'ai entendu beaucoup de bien de Ada et Python.

    Bonne chance pour choisir le langage qui te convient.
    • [^] # XS : programmez en XML

      Posté par  . Évalué à 3.

      Pas pour débuter en programmation mais qui vaut le coup d'oeil : http://www.markcarter.me.uk/computing/xs.html . C'est un langage de programmation en XML. Voici un exemple tiré de la page précédente :

      <for var="n" from="100" to="0" step="-1">
      <print> n, " bottles of beer on the wall"</print>
      <print> n, " bottles of beer"</print>
      <print> "Take one down, and pass it around..."</print>
      <print> n-1, "bottles of beer on the wall\n"</print>
      </for>

      Ca doit être bien sympa couplé avec XSLT.
      • [^] # Re: XS : programmez en XML

        Posté par  . Évalué à 4.

        Mais ce genre de syntaxe est très lourde à utiliser pour programmer directement, et beaucoup moins lisible que des langages avec une syntaxe à la C.
        Par contre c'est facile de vérifier la syntaxe, il suffit de la DTD, les vérificateurs XML sont légions.
      • [^] # Re: XS : programmez en XML

        Posté par  (site web personnel) . Évalué à 3.

        Comme le predisait Shawn Betts (l'auteur de ratpoison et Stumpwm):

        In the end,
        everyone will be writing lisp in one form or another. The current
        trends shown by Big Software is to use XML for all data formats. It
        won't be long before we have XML interpreters, XML data being
        interpreted as functions:


        plus
        4
        5


        But why wait? We have it all already.

        En resume: l'evolution des langages de programmation les font se rapprocher de Lisp, et ce nouveau langage en est un pas de plus.

        http://l-lang.org/ - Conception du langage L

      • [^] # Re: XS : programmez en XML

        Posté par  (site web personnel) . Évalué à 1.

        Mouais, à ce compte là, autant l'écrire en lisp comme indiqué dans le poste juste au dessus : comme ça les balises sont fermées automatiquement :)


        (loop for n from 100 downto 1 do
              (format t "~A bottles of beer on the wall " n)
              (format t "~A bottles of beer " n)
              (format t "Take one down, and pass it around... ")
              (format t "~A bottles of beer on the wall~%" (- n 1)))


        Ou pour faire vraiment dans le même style quand XML:

        (defun my-print (&rest args)
          (format t "~{~A~}" args))

        (loop for n from 100 downto 1 do
              (my-print n " bottles of beer on the wall ")
              (my-print n " bottles of beer ")
              (my-print "Take one down, and pass it around... ")
              (my-print (- n 1) " bottles of beer on the wall" #\Newline))
  • # pour conclure...

    Posté par  (site web personnel) . Évalué à 2.

    Apprend celui qui te botte le plus.

    Je me mettrais personnelement bien à O'caml et a Qt en C++. Malheureusement, je n'ai reussi qu'à apprendre Perl et je code en C ANSI pour ma boite (pas glop :/).

    Bref, si tu n'as pas d'impératif de boulot et que tu cherches une certaine productivité future Ocaml est un bon choix grace à tout les testes fait par le compilo.

    "La première sécurité est la liberté"

    • [^] # Re: pour conclure...

      Posté par  (site web personnel) . Évalué à 3.

      C'est ce que je pense que je vais faire (merci GTof au passage pour ton commentaire trèèès instructif ;)).

      Pour ce qui est des impératifs de boulot, mon école est très "light" sur l'informatique. Cette année ça a été Excel, Powerpoint et un site web (je parle bien de site web, pas de progra web, la plupart de mes camarades étudiants ne connaissent même pas l'existence du HTML). L'an prochain ce devrait être Access, et dans deux ans VB.

      Je pense pas que ce soit insurmontable et de toutes façons je n'ai pas du tout envie d'apprendre le VB tant que je n'y serai pas obligé :-p
  • # Avis

    Posté par  (Mastodon) . Évalué à 5.

    Le C, c'est vieux, moche et pas pratique, mais c'est très proche de la machine. Je pense que quand on débute, c'est une bonne chose d'être proche de la machine, et de comprendre assez précisément ce qui se passe, plutôt que de se baser sur une abstraction pas toujours proche de la réalité. D'un autre côté, je peux me tromper, si ça se trouve on peut très bien rester toute sa vie avec un langage de haut niveau.

    L'OCaml, c'est intellectuellement très joli, en pratique très efficace, mais esthétiquement c'est (à mon avis) une horreur. Quand on est habitué à des langages à la syntaxe plus amicale, c'est assez dur de se forcer à apprendre celle de l'OCaml, bien que ça vaille surement le coup. Quitte à l'apprendre un jour, je pense qu'il vaut mieux le faire le plus tôt possible. Par contre, c'est un langage qui repose sur des concepts assez avancés qui risquent d'être durs à aborder si tu ne fais pas d'études d'info.

    Le plus facile pour l'apprentissage, c'est un langage à la syntaxe assez souple, et qui permet d'obtenir rapidement des trucs qui marchent. Pour ça, je conseille Ruby parce que c'est ce que je connais, mais d'autres conseillent Python et je pense que les deux se valent. Le Ruby c'est joli, agréable à utiliser, propre (si on fait un peu attention), de haut niveau, et rapide à programmer... par contre si tu as un jour à faire des calculs intensifs, il faudra utiliser autre chose :)

    Finalement, je me rend compte que je te conseille de commencer à la fois par le C, l'OCaml et Ruby. Comme ça ne va pas être pratique, je vais conclure en te conseillant --si tu cherches un seul langage-- de commencer par Eiffel. C'est plus simple que le C, plus élégant (à mon avis) que l'OCaml, presque aussi souple et bien plus rapide que Ruby.
    • [^] # Re: Avis

      Posté par  . Évalué à 3.

      Désolé mais je dois réagir.

      c'est un langage qui repose sur des concepts assez avancés qui risquent d'être durs à aborder si tu ne fais pas d'études d'info.


      Chacun pense ce qu'il veut d'O'Caml mais dire qu'il est dur a aborder sans étude d'info est complètement faux. On peut parfaittement utiliser un langage sans comprendre toutes les subtilités de la théorie derrière. L'important c'est juste de savoir utiliser le langage, et sur ce point O'Caml est aussi accessible qu'un autre. Et d'ailleurs tu conseilles le C mais mâitrises tu complètement la sémantique du C ? Ca aussi c'est un thèmes de recherche actuel en info ce qui n'empêche pas des milliers de programmeur a travers le monde de maitriser le C.

      Dire que ca syntaxe n'est pas amicale n'a pas de sens, ca dépend des goûts de chacun. Personnellement je suis incapable de suivre un code C conséquent sans m'embrouiller. Et même quand c'est moi qui le code je m'emmêle toujours dans les calculs alors qu'avec la couche fonctionnelle d'O'Caml j'ai aucun problème et je connais des gens pour qui c'est exactement l'inverse. C'est pour ca qu'il est important de voir quelques langages pour se faire une idée et prendre celui qui nous convient le plus.
      • [^] # Re: Avis

        Posté par  (Mastodon) . Évalué à 2.

        dire qu'il est dur a aborder sans étude d'info est complètement faux.

        Je le trouve dur à aborder en ayant fait des études d'info (rien d'insurmontable ceci dit), et je n'ai fait qu'extrapoler en supposant que ce devrait être encore plus dur pour quelqu'un qui n'en avait pas fait.

        En particulier, la notation de l'inférence de types n'est pas évidente pour qui n'a pas fait de lambda calcul. L'imbrication des let et autres let rec, la différence entre les fonctions renvoyant quelque chose et les instructions de renvoyant rien mais agissant par effets de bord... c'est pas spécialement évident non plus.

        Et d'ailleurs tu conseilles le C mais mâitrises tu complètement la sémantique du C ?

        Je n'ai jamais prétendu que le C était simple, bien au contraire. La seule raison pour laquelle je pense que le C est utile, c'est parce que si on sait coder en C, on a une bonne intuition de la manière dont fonctionne un vrai ordinateur, et je pense qu'avoir cette intuition est utile.

        Dire que ca syntaxe n'est pas amicale n'a pas de sens, ca dépend des goûts de chacun.

        Aurais-tu, par hasard, omis de remarqué que je précisais entre parenthèses "à mon avis" ? Effectivement, ça dépend des goûts de chacun, mais la syntaxe d'OCaml est bourrée d'exceptions, et ça n'en facilite pas l'apprentissage. En particulier, le fait qu'il y ait un opérateur par type pour une même opération, c'est super chiant. Certes, ça permet l'inférence de types, mais ça reste super chiant de devoir se rappeler de la liste des opérateurs de chaque type.

        Au niveau de la syntaxe, un langage comme le Scheme est beaucoup plus rapide à apprendre, parce qu'il existe très peu de règles et qu'elles n'ont pas d'exceptions. En 10 minutes n'importe qui peut comprendre et retenir la syntaxe de Scheme.
        • [^] # Re: Avis

          Posté par  (site web personnel) . Évalué à 1.

          En particulier, la notation de l'inférence de types n'est pas évidente pour qui n'a pas fait de lambda calcul.

          pas vraiment, ça n'a rien à voir. Tel qu'il est présenté traditionnellement, le lambda-calcul est non-typé.
          Et l'inférence de types, c'est conceptuellement assez simple. (« j'aditionne 2 à x ? donc x est un entier ; j'applique List.length à x ? donc x est une liste, etc.)

          la différence entre les fonctions renvoyant quelque chose et les instructions de renvoyant rien

          au contraire, c'est beaucoupl plus simple qu'en C et consorts car en caml il n'y a que des expressions, pas de distingo expressions / instructions.

          on a une bonne intuition de la manière dont fonctionne un vrai ordinateur, et je pense qu'avoir cette intuition est utile.

          bof, le C est déjà bien loin de la machine (et de toutes façons je ne pense pas que cette "intuition" soit trés utile).

          En particulier, le fait qu'il y ait un opérateur par type pour une même opération, c'est super chiant. Certes, ça permet l'inférence de types, mais ça reste super chiant de devoir se rappeler de la liste des opérateurs de chaque type.

          ouais enfin il n'y a que deux familles d'opérateurs, ceux pour entiers et ceux pour flottants qui ont un point en plus. C'est pas la mort à mémoriser. Remarque que certains langages à inférence de type se débrouillent avec un seul jeu d'opérateur.
          • [^] # Re: Avis

            Posté par  (Mastodon) . Évalué à 1.

            Tel qu'il est présenté traditionnellement, le lambda-calcul est non-typé.

            Tu as vu que je parlais de la notation de l'inférence de type, et pas la notion ? Cette notation est la même notation que celle utilisée pour le lambda-calcul typé, ce qui est une bonne chose si on en a déjà fait, mais qui n'est pas évident sinon.

            Tu sais, le fameux: (e -> e -> e) qui désigne une fonction qu'en C on écrirait "e f(e, e)".

            en caml il n'y a que des expressions

            Oui, et contrairement à d'autres langages fonctionnels plus "purs", il y a des expressions qui ne retournent pas de valeur mais on des effet de bord. C'est pratique mais ça complique les choses.

            ouais enfin il n'y a que deux familles d'opérateurs, ceux pour entiers et ceux pour flottants qui ont un point en plus. C'est pas la mort à mémoriser.

            C'est faux, il y a des opérateurs différents pour tous les types. Par exemple l'opérateur de "construction de liste" (je ne sais pas comment ça s'appelle exactement) est différent selon le type de "liste" que l'on manipule. Pour une liste c'est [ et ], pour un vecteur c'est [| et |]. C'est comme ça pour tous les opérateurs, puisqu'un opérateur est une fonction dont le type ne peut pas varier.
            • [^] # Re: Avis

              Posté par  (site web personnel) . Évalué à 1.

              Tu sais, le fameux: (e -> e -> e) qui désigne une fonction qu'en C on écrirait "e f(e, e)".


              Pour quelqu'un qui n'a jamais fait de programmation, les deux sont aussi (non) intuitifs, amha. J'aurais même tendance à préférer la version caml, qui traduit bien l'idée (avec des flèches) : je prends a, puis b, puis c, ... et je sors le résultat. De plus, une fois l'idée comprise, ça permet de visualiser la notion d'application partielle d'une fonction très facilement.

              Enfin bon, j'ai commencé le Caml au lycée pour le plaisir alors je ne suis pas forcément une référence en matière d'intuition du programmeur débutant ;-)
              • [^] # Re: Avis

                Posté par  (Mastodon) . Évalué à 2.

                Pour quelqu'un qui n'a jamais fait de programmation, les deux sont aussi (non) intuitifs

                Je ne donnais la version en C que pour que les non initiés comprennent ce que veux dire (e -> e -> e), mais ceci dit, à la réflexion, je pense quand même que c'est plus intuitif: on a une fonction qui a clairement deux arguments et une valeur de retour. Ça serait encore plus intuitif noté comme en maths, f: (e, e) -> e.

                La notation du lambda-calcul, elle, contient un "piège", qui est que l'on n'a pas besoin de donner tous les arguments, et que dans ce cas on obtient une fonction. En réalité, il aurait fallu que je note (e -> (e -> e)). Attention, je ne critique pas ça, je trouve les langages fonctionnels très pratiques et élégants, mais pour quelqu'un qui vient des maths traditionnelles, je ne trouve pas ça spécialement intuitif :)
            • [^] # Re: Avis

              Posté par  . Évalué à 2.

              Oui, et contrairement à d'autres langages fonctionnels plus "purs", il y a des expressions qui ne retournent pas de valeur mais on des effet de bord.

              C'est faux, quand une fonction agit par effet de bord, la valeur retournée par cette fonction est du type unit. Ce type ne contient qu'une valeur.
            • [^] # Re: Avis

              Posté par  . Évalué à -1.

              Oui, et contrairement à d'autres langages fonctionnels plus "purs", il y a des expressions qui ne retournent pas de valeur mais on des effet de bord.

              C'est faux, quand une fonction agit par effet de bord, la valeur retournée par cette fonction est du type unit. Ce type ne contient qu'une valeur.
    • [^] # Re: Avis

      Posté par  . Évalué à 4.

      Je suis d'accord avec le fait qu'il faille commencer avec un langage de bas niveau.

      Moi j'ai appris dans l'ordre:

      - assembleur
      - C
      - C++
      - PHP/Pascal...
      - Java/C#/Python/...
      - Erlang/Ruby/...

      Ce n'est pas forcément le bon ordre, mais je suis allé toujours vers plus de haut niveau. Les personnes que je connais qui ont fait l'inverse ont beaucoup plus de mal que moi lorsqu'il s'agit de débugger ou d'optimiser, car ils comprennent moi bien ce qui se passe sous le capot.

      Je te conseillerai de faire un peu d''assembleur, un peu de C puis Ruby pour commencer.
      • [^] # Re: Avis

        Posté par  (site web personnel) . Évalué à 1.

        > Je te conseillerai de faire un peu d''assembleur, un peu de C puis Ruby pour commencer.
        Je ne peux qu'applaudir devant tant de gout ;-)
  • # Si tu aimes le web

    Posté par  . Évalué à 6.

    Non, on ne peut pas considérer HTML et CSS comme des langages de programmation, même si les CSS permettent des choses assez avancées.

    En revanche, si tu aimes bien le web, que tu veux apprendre un langage facile, permissif (parfois trop !), rapide à comprendre, avec une syntaxe proche du C, sans gestion manuelle de la mémoire... Tout le monde aura déjà compris que je parle de PHP.
    Il paraît que PHP5 peut être bien orienté objet, mais pour ce que je connais de PHP4, je ne le recommanderais pas pour apprendre la prog OO. En revanche pour débuter dans un langage impératif, c'est excellent !

    La doc est très bien, pleine d'exemples de code ( http://www.php.net/manual/fr/(...) ), la communauté est fournie, et c'est immédiatement fun à développer.

    Après, comme disait l'autre, ça dépend de ce que tu veux faire. Même s'il aimerait peut etre sortir de son rôle unique de langage web, php est rarement utilisé hors de ce contexte. Question d'habitudes certainement.

    PS : n'allez pas croire que je sois un fan inconditionnel de PHP, j'essaie juste de répondre à son attente :)
    • [^] # Re: Si tu aimes le web

      Posté par  (site web personnel) . Évalué à 5.

      Moi je deconseillerai l'utilisation de PHP.


      Un langage facile, permissif (parfois trop !), rapide à comprendre, avec une syntaxe proche du C, sans gestion manuelle de la mémoire.


      Et pourtant je suis globalement d'accord avec ca. Sur la facilite, effectivement c'est facile quand on programme en imperatif bete, mais
      je trouve la syntaxe tres peu claire des qu'on veut faire quelquechose d'un peu plus haut niveau, par exemple: (de memoire)

      $chose = (mysql_get_array($truc))[0]; marche pas,
      alors que:
      $array = mysql_get_array($truc);
      $chose = $array[0] marche.

      Il y a beaucoup d'autres exemples de syntaxe un peu lourde, les noms des fonctions sont pas coherents... On peut aimer le modele bazaar, mais il faut quand meme un minimum controler.

      C'est peut etre bien pour apprendre, mais je pense qu'il faut savoir passer a autre chose, par exemple Ruby offre beaucoup plus de place pour pouvoir conceptualiser et ecrire des algorithmes rapidement, et offre la possibilite de mixer les paradigmes imperatifs et fonctionnels.

      Un langage simple a apprendre et extremement puissant est tout simplement Lisp. Tout le monde est braque sur les parentheses, alors qu'au bout de 3 heures on ne les voit plus. Au contraire, la syntaxe est la plus simple, aucune ambiguite n'est possible, c'est simple a aprehender au debut et c'est le langage le plus flexible (grace aux macros, on peut transformer lisp en le langage le plus adapte au type de probleme que l'on veut resoudre, c.f. http://www.paulgraham.com/progbot.html(...)

      http://l-lang.org/ - Conception du langage L

  • # Prog pour MacOS X

    Posté par  (site web personnel) . Évalué à 4.

    Puisque tu as un Mac, je suppose que tu as dessus MacOS X installé.
    Si c'est la cas, alors bienvenu dans un des environnements de programmation le plus avancé : Cocoa (implémentation d'OpenStep).
    Pour ce faire:
    - tu peux te mettre à l'ObjC qui est une couche objet au-dessus du C empruntant la syntaxe de Smalltalk. Toutefois, pour débuter, il peut paraitre rebutant,
    - sinon, tu as aussi Java pour lequel un binding Cocoa existe. Il est plus facile à appréhender,
    - et pour finir tu as l'extraordinaire F-script. C'est un langage de script élaboré par Apple et basé sur Smalltalk et qui te permet de faire rapidement des choses assez poussées. La syntaxe de smalltalk se distingue des autres mais, pour y avoir goûter, je la préfére aux autres car je trouve qu'elle aide à acquérir un esprit ... comment dire ... plus objet ? plus naturelle ? L'avantage de ce langage est qu'avec tu vas pouvoir optimiser ton utilisation de MacOS X ;)

    Enfin voilà mon avis.
  • # my 2 cents

    Posté par  . Évalué à 4.

    beaucoup de personnes ici ont cite python, je connais pas du tout ce langage (j'en entends beaucoup de bien un peu partout, mais j'ai pas encore prit le temps de m'y interesser), mais je suis pas sur qu'un langage non type/non compile soit une bonne idee pour commencer la programmation..
    c'est quand meme un concept important a maitriser.

    sinon, personne n'en a parle ici, mais je trouve le turbo pascal plutot pas mal pour aborder la programmation imperative.
    un peu comme le C, mais un peu plus agreable a apprendre.
    Pas trop longtemps quand meme, le temps de comprendre l'imperatif quoi, pis apres un peu de C, histoire de comprendre comment fonctionne un programme.
    Pas la peine de passer trop de temps non plus sur le C, c'est quand meme assez aride comme langage.
    En fait, je suis pas un grand fan des langages imperatifs, ptetre une question de gout apres tout.

    apres, objet ou fonctionnel, je sais pas trop lequel aborder en premier..
    perso, j'ai fait du fonctionnel avant de faire de l'objet, ca c'est plutot bien passe.
    OCaml est vraiment un langage fabuleux avec une courbe d'apprentissage tres plate au debut puis qui creve le plafond passe un certain stade.
    le typage fort fait souffrir au debut, puis quand on a prit quelques (bonnes) habitudes, on se demande comment on a fait sans avant..
    Apres, la programmation fonctionnelle est loin d'etre adaptee a tous les besoins, mais ya moyen de faire de l'imperatif/objet avec.
    En fait, caml est tres peu utilise dans le monde pro (manque de libs, d'ide, debogueur etc.), mais pour une utilisation "fun", je trouve que c'est un excellent langage.

    Pour l'objet, je dirais de commencer avec Java, pour tous les tutoriels, docs, outils etc. dispo et aussi pour la facilite d'abordage du langage. Pourquoi pas du 1.5 qui propose des evolutions interessantes (raaaaah les List typees, je reve que de ca.. vivement que ca se generalise tout ca).
    Quand les concepts objets sont bien maitrises, s'interesser aux fonctionnalites supplementaires proposees par C++ (heritage multiple, templates tout ce genre de choses).

    Une fois arrive a ce point, t'auras deja passe pas mal de temps, hurle de rage devant ton ecran un nombre incalculable de fois, danse de joie tout seul comme un con devant ton ecran a peu pres le meme nombre de fois.
    Et surtout, ben tu pourras te choisir un langage de predilection dans la jungle des langages et l'etudier en profondeur pour en faire ce que bon te semble. :)
    • [^] # Re: my 2 cents

      Posté par  . Évalué à 2.

      Quand les concepts objets sont bien maitrises, s'interesser aux fonctionnalites supplementaires proposees par C++ (heritage multiple, templates tout ce genre de choses).
      ouais, le genre de choses qui rend le code inmaintenable donc...
      Jamais de ma vie je ne voudrais avoir à refaire du C++, c'est encore plus facile d'être porçin et incompréhensible qu'en C.

      Je ne suis pas sur que commencer par un langage objet soit vraiment ce qu'il y a de plus simple. La prog impérative est quand même plus proche des algo de math qu'on a l'habitude de voir...
      • [^] # Re: my 2 cents

        Posté par  . Évalué à 2.

        ben c'est ce que je dis : d'abord du turbo pascal/C, ensuite ocaml, ensuite java/c++.

        pour eclaircir ma pensee :
        d'abord imperatif pour une approche simple.
        ensuite ocaml pour le typage fort et toutes ses autres feature qui forcent a bien coder et donc ne pas etre tente de prendre des habitudes de goret.
        puis une fois les bons reflexes de programmation acquis, objet.
        apres, t'es normalement capable d'apprendre n'importe quel langage rapidement et facilement.
        sauf le perl, mais ca c'est normal. :)
  • # Quelle jungle

    Posté par  . Évalué à 8.

    Avec tout ça, si tu arrives à te faire une idée... Chapeau !
    Je crois que chaque opinion émise a été récriée au moins deux fois pour des raisons différentes... Personne n'a le même avis, en définitive. Personne n'a appris l'informatique de la même manière et ça se sent.
    Fais donc comme tout le monde et laisse le destin choisir ;)
    • [^] # Re: Quelle jungle

      Posté par  (site web personnel) . Évalué à 2.

      Oui mais ça me permet de mieux comprendre, au moins je choisirai pas un langage sur un coup de dés ;-)

      Merci pour toutes ces précisions
      • [^] # Re: Quelle jungle

        Posté par  (site web personnel) . Évalué à 2.

        Je pense que pour commencer, il faut un langage avec lequel tu ne vas pas te prendre la tête, il faut que tu t'amuses sinon tu seras vite dégouté de la prog.
        • [^] # Re: Quelle jungle

          Posté par  . Évalué à 2.

          Alors, en esperant que mon message passe malgre le nombre de commentaire de la news...

          * Oui, un langage avec lequel on ne se prend pas la tete. Pour ca un langage de haut niveau est tres bien. La gestion de la memoire ca peut tres bien s'apprendre plus tard.

          * MAIS un langage fortement type, sinon les choses ne sont pas claires dans la tete.

          J'aurais tendance a recommander Ruby, pour les memes raisons que d'autres ont recommande Python.

          En tout cas, ce qui est important c'est d'avoir des petits projets a faire (meme des trucs tout simples qui ne servent pas a grand chose et qui existent deja) car si tu essayes d'apprendre un langage sans l'appliquer rapidement tu ne vas pas saisir bien les concepts, tu vas te demotiver vite et tu vas oublier vite. C'est comme apprendre la grammaire d'une langue vivante sans essayer de lire, ecrire ou parler.
  • # Vive le OCaml !

    Posté par  . Évalué à 4.

    Franchement si tu veux faire du OCaml, fais du OCaml ! C'est un excellent langage pour débuter et pour continuer, avec, tu pourras tout faire (sauf de la programmation système de bas niveau, mais je doute que c'est ce que tu recherches).

    En plus, en commençant par lui, tu ne seras pas pollué par les habitudes de la programmation impératives qui empêchent de l'apprécier à sa juste valeur.

    Ses avantages: portable, sûr, rapide, efficace, facile et complet ! (que demander de plus ?)
    Sans oublier les 3 niveaux de compilation qui sont disponibles, interprété, bytecode ou natif.

    Je te déconseille de commencer par le C, tu vas t'e***rder pour rien avec la gestion de la mémoire, des tonnes de lignes de code qui ne font que combler le manque de ce langage archaïque ! En plus s'il ne t'attire pas, je ne vois pas l'interêt de te forcer.

    Et puis surtout, je vois pas pourquoi il faudrait commencer par apprendre un langage impératif. C'est pas parce qu'on le fait en général que c'est le mieux. D'ailleurs je pense que c'est l'une des raisons du faible nombre de programmeurs caml, l'approche est très différente et la plupart n'ont pas envie de s'investir pour comprendre la force de ce langage (mais il faut aussi avouer qu'il est peu et mal enseigné (dans ma fac en particulier)).

    Maintenant c'est à toi de choisir, mais comme tu dis que le caml semble te plaire, fonce !
    • [^] # Re: Vive le OCaml !

      Posté par  . Évalué à 1.

      Et puis surtout, je vois pas pourquoi il faudrait commencer par apprendre un langage impératif.

      ben l'avantage de l'imperatif pour commencer, c'est que c'est simplissime a comprendre (quoique, les mode de passage des parametres sont pas forcement evident au premier abord).
      Ca fait vraiment recette de cuisine qui se deroule dans l'ordre.

      perso j'ai commence la programmation avec le caml et j'ai franchement pas aime du tout et pas du tout saisi les subtilites (bon, faut dire aussi, nous faire coder sous notepad avec l'interpreteur boggue, c'etait peut etre pas la meilleur solution..).
      Ensuite, on m'a fait faire du pascal, ca s'est tres bien passe et ensuite re caml et la c'est passe nickel.

      my 2 cents, oublie pas de demander conseil a ton moniteur toussa.
  • # Inform, objc et python

    Posté par  . Évalué à 3.

    parmi les nombreux conseils que je lis, cela me rappelle lorsque l'on veut débuter la guitare électrique, et que l'on entend : " avant d'attaquer la guitare électrique fais d'abord de la guitare classique, c'est la base de tout, et puis ensuite de la basse, c'est plus facile dans un premier temps" (ou vice versa), quand on n'entend pas aussi "fais du piano en premier, c'est universel... etc."

    c'est sans doute pareil pour la programmation, on arrive souvent dans un cercle vicieux (ou vertueux, si on considère que l'on pourra ainsi connaitre une dizaine de langages ;) ), et c'est vrai que la meilleure réponse dépend certainement de ce que tu veux faire, et aussi de tes capacités.

    Si tu es doué et as besoin de coder des applications où la rapidité est primordiale, alors va y direct en objectif C ou en C++ l'avantage du C++ est qu'il est plus "répandu". Par contre objectif C me semble plus élégant, et ceux qui connaissent bien le préfèrent au C++ généralement. Cela te marginalisera sans doute un peu, mais tu pourras coder pour Mac OSX et pour GNUstep. Et même ailleurs sans doute également. Tu dois connaitre le site si tu t'intéresses à la question, mais voici un lien vers une vidéo présentant la facilité de programmation avec Gorm / Project Center / objc : http://www.gnustep.org/experience/DevelopmentDemonstration.html(...) (valable également pour xcode et mac os x)
    De plus autre avantage à cela, Apple fournit bcp de doc gratuites sur son site, ainsi que tous les outils de développement. Le fait que GNUstep existe permet de savoir que l'on ne sera jamais inféodé à Apple si on veut changer d'air un jour.
    Par contre sur bcp de tutoriels que l'on trouve, ils semblent considérer comme acquit que tu connais déjà bien le C... (on en revient à mon introduction).

    J'avais essayé le C il y a qques années, mais j'ai trouvé cela trop dur par rapport à mes capacités et l'investissement que je voulais mettre dedans, du coup j'ai arrêté. Mais mon intérêt grandissant pour objc me fais me replonger un peu dedans. Le problème avec C ce sont les déclarations etc, c'est un peu la galère, si bien que dans un premier temps on ne peut pas faire grand chose d'impressionnant avec et cela rebute un peu.

    Du coup, si on n'a pas besoin spécialement d'un langage de bas niveau, rapide et optimisé, il est possible de débuter en programmation avec python. Bon, bcp on déjà conseillé cela, et je pense que tout a été dit (y compris le lien vers l'excellent cours de python). Moi qui suis pourtant un grand débutant en programmation, en suivant ce cours et du fait de la facilité de ce langage de haut niveau orienté objet, j'ai pu créer très rapidement et très facilement de petites applications qui correspondaient vraiment à mes besoins. Je pense que cela permet de mettre un pied à l'étrier sans être rebuté, quitte à étudier ensuite le C et ses dérivés si besoin est (attention, je ne dis pas que python est moins bien que C, mais que les 2 sont pour des objectifs différents : il faut savoir utiliser le bon outil au bon moment).

    Je suis ouvert à toutes les propositions


    enfin, je voulais aussi parler du langage inform, dédié à la création de jeux d'aventures textuels. C'est un langage simple, mais qui est fait uniquement pour ce but, même si certains ont pu programmer des choses différentes avec (petits hacks pour la machine virtuelle qui va avec). Il y a des déclarations, cela permet d'avoir une introductions aux procédures, boucles etc dans une forme proche du C tout en obtenant rapidement quelque chose d'utilisable (c'est gratifiant quand on débute, et pousse à aller plus loin). C'est un langage idéal pour les débutants, mais bien entendu limité pour son domaine d'utilisation :
    http://www.inform-fiction.org/(...)
    http://ifiction.free.fr/(...) (en français)

    Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.