Annonce

Réduire
Aucune annonce.

Choisir un langage de programmation.

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Tutoriel Choisir un langage de programmation.

    Bonjour à tous.

    De plus en plus il est coutume de voir des pré-programmeurs en herbe se jeter dans l'apprentissage d'un ou plusieurs langages de programmation.

    Cependant, la majorité ne sait pas par où, comment et par quel langage commencer, et souvent les réponses données sont floues, ou tout le moins présentées sans aucun argument qui pourrait aider ces personnes dans le choix d'un langage qui leur correspond.
    Je me propose dans ce post de vous aider à analyser vos besoins et plusieurs autres paramètres afin de ne pas vous perdre dans votre apprentissage.

    I) Rappels sur les différents types de langages

    Un langage de programmation se définit comme une série d'éléments syntaxiques qui, agencés ensemble et de façon cohérente, permettent la création d'applications.

    Voilà pour ce qui est de la définition basique d'un langage de programmation.

    Nous avons l'habitude d'énumérer ces langages plus par leur dénomination (C, C++, Java, PHP, Delphi, Python...) que par leur type. Cependant c'est ce dernier qui est important car le type du langage utilisé détermine l'architecture du projet que l'on veut entreprendre.

    Les langages ont donc un "type" ?
    Tout à fait, et c'est d'ailleurs comme cela que nous les classons. Il faut savoir que chaque type de langage communique de manière différente avec la machine ; les paramètres utilisés ne font pas intervenir les mêmes zones de gestion système, et cela peut très grandement varier d'un langage à l'autre.

    Rentrons dans le vif du sujet. Il existe communément quatre types de langages :

    - Orienté objet (POO pour programmation orientée objet)
    - Impératif
    - Fonctionnel
    - Embarqué

    Il est probable que la majorité d'entre vous ai déjà entendu parler de ces notions mais peut être sans vraiment les comprendre ; nous allons donc voir ensemble ce qui différencie ces quatre type de langage.

    A. Langage Orienté Objet (POO)

    Le but de la POO est de pouvoir se servir d'objets maniables afin d'établir différentes communications fonctionnelles entre les éléments du code.

    Un objet est caractérisé par deux notions : ses attributs, qui sont les données et informations le décrivant ; et la méthode, qui constitue la réponse d'un objet à une fonction spécifique. Ces deux "valeurs" sont encapsulées, c'est à dire qu'elles sont invisibles pour l'utilisateur.

    Un objet possède également un type qui définit sa forme syntaxique et la manière de l'utiliser ; il peut posséder plusieurs types, c'est le polymorphisme. Le grand intérêt de ce type de langage est l'extension fonctionnelle que l'on peut en faire. Les objets précisent les actions à effectuer et la souplesse de leur utilisation permet une grande flexibilité dans le code.
    Langages appartenant classiquement à la POO : Java, Delphi, C++, Visual Basic, C#, Python, JavaScript, Ruby (pour les plus connus).

    B. Langage impératif

    Il est caractérisé par une suite d'instructions (ordres) agencées de manière à être exécutées par la machine sur lequel il est compilé.

    Contrairement à la POO, le langage impératif n'est qu'une séquence d'opérations (opcodes) basiques traduites en langage machine compris par le processeur.

    On reconnait quatre opérations élémentaires :
    • branchement conditionnel -> n'exécute les instructions que sous certaines conditions (if, else, elseif)
    • branchement inconditionnel -> exécute les instructions sans conditions
    • bouclage -> permet la répétition des instructions jusqu'à atteindre la condition requise (for, while, do)
    • assignation -> enregistre le résultat d'une opération dans la mémoire active


    L'intérêt du langage impératif repose donc sur sa grande rapidité d'exécution.
    Langages appartenant classiquement à ce type : ASM, C, PHP, LUA, Perl, Pascal, ASP (pour les plus connus)

    C. Langage fonctionnel

    Il se définit comme une séquence imbriquée de différentes fonctions paramétrées mais ne possédant qu'une seule sortie finale ; cette séquence de fonctions ne peut donc générer qu'un seul et unique résultat. Le langage fonctionnel n'utilise pas d'assignation mémoire, il ne stock donc pas les variables ou les instructions (ou leur résultat) en mémoire, ce qui évite les effets de bord rencontrés en programmation impérative et objet. Puisque qu'aucune donnée n'est stockée en mémoire, la valeur des variables ne peut pas changer au cours du programme, cependant elles peuvent être substituées par des variables de même valeur.

    L'intérêt réside donc dans la simplicité de la gestion mémoire (elle est automatique !) et l'écriture des fonctions.
    Langages appartenant classiquement à ce type : LISP, OCaml, Haspell (pour les plus connus)

    D. Langage embarqué

    Il se caractérise par la gestion, et la prise en compte, systématiques de la pile d'exécution comprenant les processus, les threads, les services... Ce qui permet donc l'accès à des ressources partagées avec d'autres programmes actifs, comme un port I/O, l'état de la RAM ou encore la fréquence processeur.

    Langage appartenant classiquement à ce type : ADA95

    II) Projet : réflexion et maturation

    Vous venez de trouver une idée, peu importe qu'elle soit grotesquement simple ou bien alors complètement fantasque : tout commence par une idée.

    Le premier réflexe à avoir est de rechercher systématiquement tout projet déjà existant possedant des ressemblances, de près ou de loin, avec le votre. Rien ne vous empêche de vous lancer dans un projet dont la nature a déjà été traitée par d'autres personnes, au contraire, l'apprentissage se fera plus facilement en étudiant la façon dont ces personnes ont procédé pour arriver au résultat que vous même attendez.

    Dans le cas contraire, félicitations, votre idée est novatrice. Néanmoins il va vous falloir la formaliser, c'est à dire lui donner un cadre précis et structuré. L'on dit généralement qu'il ne faut pas être esclave de l'idée initiale, car cela abolie toute mutation (et donc amélioration) de cette idée, mais un cadre de départ est cependant nécessaire afin de ne pas déborder dans tous les sens.
    La formalisation du concept doit passer par une série de questions diverses dont les réponses dessinent la trame principale du projet. Tant que vous n'avez pas répondu à l'ensemble de ces questions de manière plus ou moins précise, vous aurez de grandes difficultés à construire les bases de votre projet.

    Voici une série classique de questions à se poser :
    • Quel est le but de ce projet ?
    • Ce projet répond-il à un (des) besoin(s) public(s) ? Si oui, le(s)quel(s) ?
    • Mon projet est-il fait pour tout le monde ? Ou uniquement pour un groupe spécifique de personnes ?
    • Combien de temps puis-je y investir ?
    • Existe-il déjà des projets de même nature ?
    • De quel type est mon projet (ludique, éducatif, utilitaire, sécuritaire...) ?
    • Comment les gens y accèderont : application machine ou plateforme web ?
    • Vais-je travailler tout seul ?
    • Existe t-il une documentation suffisante ?


    Une fois que vous aurez donné une réponse assez précise à chacune de ces questions, votre projet aura acquis sa forme globale. Vous savez maintenant où vous partez, dans quoi vous vous lancez et si, finalement, ce projet est honnêtement réalisable ou pas.

    III) Analyse des besoins et cahier des charges

    Maintenant que votre projet s'inscrit dans un cadre cohérent, il faut définir une liste de paramètres définissant ses besoins.
    Chaque projet a des fonctions différentes, et donc des besoins différents ; un projet de calculatrice ne demande pas la même gestion qu'un projet de bloc-note, par exemple. C'est l'analyse de ces besoins qui vous orientera sur le type de langage de programmation à utiliser.

    Classiquement nous définissons six points primordiaux définissant un projet à préciser nécessairement :
    • Simplicité
    • Rapidité
    • Portabilité
    • Intercommunication
    • Interaction
    • Relation


    A. Simplicité

    Elle définie la flexibilité et la souplesse avec laquelle le projet sera écrit.

    Elle est fonction de vos connaissances déjà acquises, du temps que vous pourrez consacrer à votre projet et du résultat que vous en attendez.

    Exemple : vous avez pour projet la programmation d'une intelligence artificielle basique. Pour avoir le résultat le plus optimal, la doctrine voudrait que vous utilisiez le LISP, cependant c'est un langage dit parenthésé, dans le sens où chaque instruction/fonction possède des parenthèses (ouvrantes et fermantes), il n'est donc pas forcément très lisible. Le C est un langage plus lisible, il a donc une simplicité d'écriture supérieure au LISP, cependant le résultat en sortie sera moins optimal.

    La simplicité intervient donc dans la connaissance de votre méthode de travail et d'apprentissage.

    B. Rapidité

    Elle définie la rapidité d'exécution finale de votre projet. Votre application (machine ou web) a t-elle besoin de tourner rapidement ?

    La plupart du temps, les différence dans la vitesse d'exécution sont négligeables, cependant cette notion intervient pour de grands projets où là la rapidité devient significative. Si votre projet a pour aboutissement une application exécutant des tâches ou des opérations qui nécessitent une certaine rapidité d'exécution, cela passera alors par le choix d'un langage proche de la machine sur laquelle elle tourne ; notamment un langage de bas niveau. Mais dans la majorité des cas, cela ne reste vrai que pour les applications communiquant directement avec le système (gestion des drivers, de la mémoire, du CPU...) où les programmes embarqués.

    C. Portabilité

    Elle définie la capacité d'une application à pouvoir être exécutée sur n'importe quel support ou système d'exploitation.

    Elle est entièrement fonction de la nature de votre projet et du type de public à toucher. Si vous souhaitez toucher un large public, il faudra alors produire du code portable, c'est à dire utilisant des instructions compréhensibles par n'importe quel OS (Windows, Linux, MacOS pour les plus connus). Si au contraire votre projet ne doit toucher qu'un type particulier de public/système, choisir des instructions spécifiques à ce système permettra une meilleure gestion de votre application par l'OS.

    Exemple n°1 : une application client/serveur gagnera à être un maximum portable afin d'en assurer la plus complète diffusion.

    Exemple n°2 : une application de partitionnement FAT32 gagnera à utiliser WinAPI (l'API Windows) afin d'avoir une gestion optimale par le système.

    D. Intercommunication

    Elle définie la capacité d'une application à communiquer avec d'autres éléments du système tels que les drivers, le lecteur CD/DVD, l'écran, une webcam, la RAM...

    Dans la plupart des cas, elle est entièrement fonction de la machine sur laquelle elle doit tourner (un driver ne se manipule pas de la même façon sous Linux et sous Windows), et donc de l'API à utiliser. Elle va également définir le niveau du langage de programmation à choisir. L'intercommunication nécessite en effet d'être au plus proche de la machine afin de pouvoir dialoguer directement avec ses composants ; un langage tel que l'ASM remplit particulièrement cette fonction.

    E. Interaction

    Elle définie la capacité d'une application à interagir avec un utilisateur. L'interraction utilise beaucoup les input (entrées clavier) et les effets visuels ou audios.

    La nécessité d'avoir une communication flexible et rapide entre les différentes instances du programme tourne - pratiquement - systématiquement le choix vers un langage orienté objet, tel que le C++, le Java ou le Visual Basic.

    F. Relation

    Elle définie le type de relation que doit entretenir l'application avec le système : promiscuous (= promiscuité = proche) ou away (= loin). Elle est entièrement fonction des opérations que doit effectuer le programme.

    Pour une application utilisant directement certains composants du système (drivers, écran, USB, clavier...), la relation est de type promiscuous, un langage bas niveau s'impose pour une rapidité d'exécution optimale.
    Pour tout autre programme, la relation est away, et motive plutôt le choix d'un langage haut niveau.

    A ce stade là, vous devez déjà avoir une petite idée du langage qui vous conviendrait. Pour finaliser votre choix, il vous faut établir un cahier des charges (CDC) complet dans le but de commencer votre apprentissage.

    Le premier point concerne le support sur lequel votre projet porte ; il en existe deux types : système ou web. Chacun a ses avantages et ses inconvénients.

    Support système (ou machine) :

    (+) accessible peu importe où l'utilisateur se trouve
    (+) exécution locale
    (+) rapidité d'exécution
    (+) traitement des sauvegardes physique
    (-) nécessite la production d'un code portable
    (-) nécessite la diffusion de l'application

    Support web :

    (+) ne nécessite qu'un navigateur
    (+) accès direct sans installation/exécution préalable
    (+) peut générer du traffic et donc des revenus
    (-) dépend de la stabilité du serveur
    (-) nécessite une connexion Internet
    (-) sensible au piratage

    Si vous choisissez le support Web, il vous faudra répondre à une série de questions qui définira le(s) langages(s) à choisir :
    • Mon site ne fait-il qu'afficher des informations basiques ? -> xHTML/CSS
    • Le visiteur doit-il pouvoir communiquer avec mon site ? -> xHTML/CSS/PHP
    • Mon site doit-il pouvoir stocker les informations données par le visiteur ? -> xHTML/CSS/PHP/SQL
    • Mon site doit-il être interactif côté client comme côté serveur ? -> xHTML/CSS/PHP/AJAX/SQL
    • Mon site contient-il des animations interactives ? -> ActionScript (+) xHTMl/CSS/PHP/SQL/AJAX


    Idem si vous choisissez le support système :
    • Mon application ne doit-elle tourner que sous Windows ? -> [langage POO ou impératif] + WinAPI
    • Mon application doit-elle être portable ? -> C, C++, VB, Java, Delphi, Python...
    • Mon application doit-elle gérer directement les composants systèmes ? -> [langage bas-niveau] / ASM
    • Mon application est-elle interactive ? -> [langage POO] / C++, Java, VB...
    • Mon application effectue t-elle des tâches simples ? -> [langage impératif] / C, LUA, Perl, BASIC...


    Le langage que vous choisirez doit correspondre exactement à vos besoins ; on n'apprend pas un langage pour "se la ramener". Il n'est, par exemple, pas besoin d'apprendre le C++ si votre application est entièrement réalisable en C. Le tout est que ce langage vous ammène au but que vous recherchez pour votre projet.

    Le deuxième point important est l'assiduité de l'apprentissage. Essayez d'être le plus constant possible lors de votre formation.

    Par exemple, il est plus productif de passer 2h tous les jours à apprendre, que 6h d'affilée une fois par semaine. Votre cerveau enregistrera beaucoup plus rapidement les informations si vous vous tenez à votre planning d'apprentissage.

    Le troisième point concerne l'application de ce que vous avez appris.

    A chaque chapitre bouclé, faites des exercices, entrainez-vous, mettez en application ce que vous avez ou pensez avoir compris ; souvent, c'est pas ce biais que l'on se rend compte que l'on a mal compris un point particulier du chapitre.

    Il est inutile d'apprendre 10 chapitres en bloc et de s'entrainer ensuite, vous ne retiendrez rien de cette manière. Chaque fin de chapitre doit être suivie par plusieurs exercices destinés à consolider ce que vous avez appris.

    Le quatrième est dernier point concerne les étapes de votre projet. Vous devez les définir précisément et de façon cohérente afin de ne pas commencer n'importe où.

    Exemple : établissement d'un cahier des charges pour un logiciel de dessin.
    1. Définir les différentes fonctions
    2. Créer la fenêtre (GUI) utilisateur
    3. Créer les inputs/outils de l'utilisateur
    4. Créer le rendu de chaque outil
    5. Gérer les enregistrements


    Conformez vous à l'avance logique de chaque étape, ne commencez pas par la fin ou le milieu, mais par le départ basique de votre application. C'est en respectant ces étapes une à une que vous arriverez sans encombre à un code complet et fonctionnel.

    Voilà, j'espère que ce petit tutoriel vous permettra dorénavant de choisir le langage de programmation qui vous convient le mieux, et évitera à certain de s'égarer en quête de réponses introuvables.

    Dernière modification par SAKAROV, 20 octobre 2012, 21h19. Motif: aération
    Ex-membre Hackademiciens.

  • #2
    Bravo MadHatter pour ce beau topic tout propre qui permet d'y voir plus clair et permettra probablement à certains de bien choisir leur langage

    Pour ce qui est de l'apprentissage en lui-même, je profites de l'occasion pour renvoyer celles & ceux que ça intéresse, vers ce topic, où je met à disposition tout un ensemble de livres informatiques, dont pas mal sur les différents langages de programmation

    http://hackademics.fr/showthread.php...0769#post10769

    Comme ça, ça complète le topic initial et ça évitera les réponses du genre : "t'aurais un bouquin pour apprendre ..." ^^

    Have fun !
    Linux est à Windows ce qu'une jolie fille est à une prostituée : La jolie fille, il faut la séduire pour obtenir ce que l'on désire alors que la prostituée , il suffit de la payer, et surtout bien se protéger.

    sigpic

    Commentaire

    Chargement...
    X