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

Débuter en développement logiciel

Date de publication : Septembre 2011.

Par 3DArchi (Ressources proposées par 3DArchi)
 

Vous souhaitez vous lancer dans le développement logiciel, mais vous ne savez pas par où commencer ? Vous débutez dans la programmation et vous vous sentez désemparé face à toutes les possibilités offertes par le développement ? Ce guide est fait pour vous ! Il se propose de vous offrir une première feuille de route pour vous accompagner dans votre apprentissage et commencer à débroussailler le champ du développement logiciel. Alors lancez-vous !

       Version PDF (Miroir)   Version hors-ligne (Miroir)
Viadeo Twitter Facebook Share on Google+        



I. Qu'est ce que le développement logiciel ?
II. Quel langage pour débuter ?
II-A. L'assembleur
II-B. Les langages procéduraux
II-C. Les langages objets
II-D. Les langages fonctionnels
II-E. Les langages logiques
II-F. Le développement Web
II-G. Les bases de données
II-H. XML
III. Que faut-il pour développer ?
IV. Apprendre un langage est-il suffisant ?
V. Que livre ou quel cours choisir ?
VI. Où trouver de l'information ?
VII. Comment faire pour apprendre efficacement ?
VIII. Je veux débuter en ...
VIII-A. C++
VIII-B. C#
VIII-C. Java
VIII-D. Python
VIII-E. Smalltalk
VIII-F. Perl
VIII-G. PHP
VIII-H. C
VIII-I. Pascal
VIII-J. Assembleur
VIII-K. Prolog
VIII-L. Caml
VIII-M. Lisp
VIII-N. Scheme
VIII-O. Haskell
VIII-P. F#
VIII-Q. Scala


I. Qu'est ce que le développement logiciel ?

Le développement couvre différentes activités qui ont en commun l'utilisation d'un langage défini avec des objectifs variés :

  • écrire des systèmes d'exploitations ;
  • proposer des applications : jeux vidéos, traitement de texte, etc ;
  • créer des sites Internet ;
  • ajouter de l'intelligence à des objets usuels : informatique embarqué des voitures, système d'aide au pilotage dans les avions, automates dans une machine à laver etc.
  • effectuer des simulations numériques ;
  • automatiser des tâches ;
  • ajouter des fonctions dans ses applications favorites (traitement de texte, feuille de calcul, etc.) ;
  • etc ;
Cette liste est loin d'être exhaustive, l'électronique et l'informatique étant aujourd'hui très présentes dans nos environnements quotidiens.

Difficile de résumer ce que peut être le développement logiciel tant les applications sont variées et les langages utilisées différents.


II. Quel langage pour débuter ?

Soyons franc : dire qu'un langage ou un autre est plus facile à apprendre ou plus approprié pour un débutant est tout simplement un excellent sujet de troll. Il n'existe pas de langage ou de famille de langage plus facile à apprendre qu'un autre. Cela dépend des objectifs cherchés, des connsaissances déjà acquises en développement ou en mathématique, des compétences propres, etc.
Il existe des milliers de langages différents. Bill Kinnersley en dénombre plus de 2500 dans son site. Impossible donc de les passer tous en revu même pour une brêve présentation.

Famille de langage, famille de pensée

Derrière cette variété de langage, certains peuvent être regroupés ensemble. Ces familles de langage présentent des caractéristiques communes, des façons identiques ou similaires d'aborder les problèmes. En général, les langages d'une même paradigme nécessitent les mêmes prérequis pour correctement les apprendre et les comprendre. Les langages peuvent aussi être regroupés autour d'un écosystème commun, comme par exemple tout ce qui tourne autour d'Internet. Certains langages supportent plusieurs paradigmes de façon native ou avec des bibliothèques dédiées, la classification dans un paradigme a alors un caractère réducteur.
Nous allons ci-dessous balayer quelques unes des grandes familles de langage.


II-A. L'assembleur

Peu d'abstraction sépare l'assembleur du langage machine. L'assembleur est très spécifique du système cible. Si l'assembleur n'est plus utilisé pour développer entièrement des applications, il en demeure pas moins un langage important pour certains développements :

  • besoins de performance ;
  • pilotes (driver) ou parties spécifiques dialoguant directement avec l'équipement ;
  • certaines parties des systèmes d'exploitation ;
  • couches basses des logiciels embarqués ;
  • etc.
Quels sont les pré-requis pour apprendre l'assembleur ?

Selon l'objectif, certains thèmes doivent être abordés avant ou en parallèle à l'apprentissage de l'assembleur :

  • hardware : comprendre sa machine ;
  • système : comprendre le système d'exploitation ;
  • algorithmie : structurer sa penser.

II-B. Les langages procéduraux

Les langages procédureaux sont essentiellement axés autour de fonctions et/ou de procédures. Impératifs, ces fonctions font évoluer l'état interne du logiciel en modifiant des variables représentant cet état. L'idée est de définir des données et d'avoir des fonctions qui opèrent dessus. On y retrouve les langages suivants :

  • C (LE langage roi des langages procéduraux) ;
  • Cobol (encore très présent dans l'informatique de gestion) ;
  • Fortran (très utilisé en milieu scientifique pour les calculs mathématiques et les simulations numériques) ;
  • Basic ;
  • Pascal ;
Quels sont les pré-requis pour apprendre un de ces langages ?

Apprendre un langage nécessite d'avoir des connaissances appuyées en algorithmique et en structure de données. Celles-ci peuvent se travailler parallèlement à l'apprentissage du langage.


II-C. Les langages objets

Issu des laboratoires de recherche et fruit de l'expérience des limites des langages procéduraux, les langages objets émergent il y a une trentaine d'année pour s'imposer comme la famille domintante des langages utilisés dès lors pour le développement logiciel. L'objet est la brique de base de ces langages. Les objets séparent un comportement proposé à ses utilisateurs des détails d'implémentation. Cette encapsulation permet une meilleur maintenance et évolutilivité des applications. Couplées avec les notions d'héritage, de liaison tardive (fonctions virtuelles), de polymorphisme, les classes ont fait leurs preuves dans le développement logiciel.
Les langages suivant supportent le paradigme objet :

  • SmallTalk ;
  • C++ ;
  • Java ;
  • C# ;
  • Python ;
Quels sont les pré-requis pour apprendre un de ces langages ?

Apprendre un langage objet nécessite forcément d'avoir des notions de conception et modélisation objet. De même que pour les langages procéduraux, des notions d'algorithmique et de structure de données restent des fondamentaux avec lesquels il est important de se sentir à l'aise.
L'apprentissage de la conception objet peut précéder ou accompagner celui du langage, le premier apportant les bases théoriques, le second permettant un pratique rapide.


II-D. Les langages fonctionnels

Le paradigme fonctionnel est le fruit des travaux de recherche mathématique des années quatre-vingt-dix. Basée sur le lambda calcul, l'approche fonctionnelle considère les fonctions comme les données manipulées par l'application.
On trouve parmi les langages supportant l'approche fonctionnelle :

  • Lisp ;
  • Haskell ;
  • F# ;
  • OCaml ;
  • les génériques (template) en C++ forment un méta-langage fonctionnel pour celui-ci ;
Quels sont les pré-requis pour apprendre un de ces langages ?

Des notions mathématiques de lambda-calcul peuvent aider à comprendre la pensée sous-jascente de ces langages.


II-E. Les langages logiques

Le paradigme logique utilise l'inférence pour, à partir des faits et des règles, déduire de nouvelles conclusions ou apporter des réponses aux questions posées. On trouve :

  • Prolog
Quels sont les pré-requis pour apprendre un de ces langages ?

Connaitre la logique et l'inférence permet de comprendre comment fonctionnent les langages logiques.


II-F. Le développement Web

Ici pas un langage particulier mais toute une famille d'outils qui peuvent être regroupés sous la bannière du oueb :

  • (X)HTML et CSS permettent d'écrire des pages consultables sur un site Internet ;
  • PHP introduit du dynamisme côté serveur en générant dynamiquement du contenu ;
  • Java peut se trouver indifféremment côté serveur ou côté client pour rendre le contenu oueb plus riche et plus interactif ;
  • .Net de Microsoft propose un environnement complet pour le développement Internet aussi bien côté serveur que client, C# étant la figure de proue de cette plateforme ;
  • JavaScript permet l'ajout de l'interactivité côté client ;

II-G. Les bases de données

Les bases de données peuvent être exploitées à partir d'une variété de langages et d'outils. Cependant, SQL est le langage de construction de requêtes pour interroger les bases de données et mettre à jour leurs tables.


II-H. XML

XML propose une approche structurée pour la représentation et l'échange de données. XML n'est pas à proprement parlé un langage de développement mais propose une approche structurée et extensible pour la définition de document. Un document XML est une suite d'élements précis et présente une structure arborescente : un élément racine, puis un ou des éléments enfants jusqu'à des éléments terminaux. XML est indissociable des langages :

  • XSD : langage de définition d'un format XML ;
  • XSLT : langage de transformation d'un document XML ;
  • XPATH : langage d'interrogation de l'arbre XML.

III. Que faut-il pour développer ?

Selon le langage vous pouvez avoir besoin :

  • d'un compilateur qui va transformer les instructions du langage vers la cible ;
  • d'un interpréteur qui exécute les instructions du langage au fur et à mesure qu'elles sont saisies ;
  • d'un E.D.I. (ou I.D.E. en anglais) - Environnement de Développement Intégré - qui regroupe différents outils utilisés avec un langage ;
  • d'un débugger pour vérifier l'exécution du programme et aider à la recherche de bug ;
Chaque rubrique propose une page outils présentant les principaux outils associés à un langage. Lorsque plusieurs outils existent pour un même langage, vous pouvez trouvez dans les forums des discussions présentant les avantages des uns et des autres ainsi que des sondages indiquant la fréquence d'utilisation de ceux-ci aussi bien en milieu professionnel que pour le développement personnel.

info Consulter les pages outils pour savoir ce dont vous avez besoin pour apprendre un langage particulier.

IV. Apprendre un langage est-il suffisant ?

Nous avons régulièrement dit qu'il y avait des prérequis à certains langages. Aussi, vouloir attaquer bille en tête un langage sans avoir une notion plus ou moins approfondie de ses bases c'est courir le risque de passer à côté du langage et de faire des erreurs majeures. C'est un peu comme si vous appreniez la syntaxe d'une langue étrangère, sa conjugaison, ses règles de grammaires sans jamais traduire le vocabulaire, sans donner du sens. Peut être arriverez-vous à former des phrases syntaxiquement correctes mais absolument dénuées de sens. Un langage ne s'apprend pas indépendamment de notion de programmation plus abstraite comme l'algorithmie ou la conception par exemple.

warning Ne pas hésiter à réviser ou acquérir les bases nécessaires à l'apprentissage d'un langage.
Avoir une culture générale sur le domaine aide aussi à comprendre certains choix de développement. Par exemple, sans que cela soit indispensable pour un débutant, avoir des connaissances sur les systèmes d'exploitation ou sur le fonctionnement d'un PC peut aider à réaliser des logiciels avancés pour PC. De même, avoir conscience des protocoles utilisés sur Internet peut aider à comprendre les logiques d'enchaînements des requêtes. Ces éléments ne doivent pas venir perturber le débutant pour lequel cela peut rester des abstractions. Mais acquérir une culture générale de son domaine particulier et de l'informatique plus globalement ne peut être que bénéfique à sa formation de développeur.


V. Que livre ou quel cours choisir ?

Chaque rubrique contient une section regroupant des critiques de livre proposées par les membres de la rédaction de développez. Ne vous fiez pas aux succès de librairie ou aux stars des livres pour débutant. Certains ont une qualité médiocre et peuvent vous faire prendre plus de mauvaises habitudes dont il est ensuite difficile de se défaire. N'hésitez donc pas avant d'acheter un ou des livre à consulter nos critiques et prendre des informations sur nos forums.
Developpez.com propose des cours et des tutoriels pour apprendre un langage ou préciser certains aspects. N'hésitez pas à consulter des tutoriels en parallèle à la lecture d'un livre. Présentée sous des formes différentes, une même notion peut être mieux comprise.

idea Ne pas hésiter à puiser à différentes sources pour apprendre un langage.
Etant donné la complexité et la richesse des langages de développements, les cours et les livres sont en général des ouvrages conséquents. Ils sont construits pour aller des éléments de base vers les éléments plus avancées. Qu'ils contiennent ou non des exercices, l'assimilation des informations apportées à chaque chapitre ne peut être immédiate. Il est donc fortemement recommandé d'arrêter régulièrement la lecture pour mettre en pratique les points abordés, pour revenir sur les points déjà évoqués et voir comment ils s'articulent avec les nouvelles notions introduites. En d'autres mots, sauf si vous êtes exceptionnellement surdoué, lire d'une seule traite un livre ou un cours est contre-productif. La seule exception étant bien sûr pour ceux qui maîtrisent déjà un ou des langages de la même famille.

warning Ne jamais lire un livre ou un cours d'une seule traite.

VI. Où trouver de l'information ?

Si votre environnement de développement contient un manuel ou un système d'aide alors sachez chercher dedans. Les rubriques d'aide sont élaborées par les personnes qui ont fait l'outil et donc les plus à même à donner des informations à jour. Dans le même ordre d'idée, le site Internet de l'éditeur qui propose ces outils est généralement une référence sur ceux-ci. A titre d'exemple, impossible de développer sous Windows avec les outils Microsoft sans apprendre à naviguer dans le MSDN.

Google est votre ami. D'autres ont peut être rencontrés les mêmes problèmes et expliqué leur solution. Apprendre à chercher efficacement sur Internet aide à trouver de l'information pertinente pour le développement.

Les pages tutoriels de Développez : chaque rubrique propose des tutoriels allant du cours pour débutant jusqu'à la présentation de notions avancées. Puisez dedans, ces pages issues du travail des équipes de rédaction sont une mine de pépites précieuses.

Les pages F.A.Q. de Développez : n'oubliez jamais de consulter les pages F.A.Q. des rubriques qui vous intéressent. Avec une approche simple et rapide construite avec une question et une réponse, ces pages sont l'occasion d'obtenir des précisions et regroupent des réponses élaborées par les rédactions à des intérrogations récurrentes.

Les forums de Développez : Avant de poser une question, utilisez la fonction de recherche. Il se peut que cette question aie déjà été abordée et que la réponse se trouve déjà dans le forum. Si vous nous trouvez pas de réponse à votre question, alors ouvrez une nouvelle discussion et exposez clairement votre problème.


VII. Comment faire pour apprendre efficacement ?


  • Coder : il n'y a pas de secret, comme pour n'importe quelle activité, la pratique régulière participe activement à l'assimilation des connaissances et à l'acquisition des bonnes pratiques. En situation d'apprentissage, le codage est l'équivalent pour les étudiants des exercices associés aux cours. Ça peut être comparé à l'entrainement pour un sportif.
  • Lire du code : les écrivains sont d'abord de grands lecteurs, un ébéniste regarde toujours les meubles réalisés par ses confrères, un chef cuisinier n'hésite pas à goûter les plats élaborés par ses collègues... Pour un développeur, c'est tout aussi vrai. Lire du code écrit pas d'autres ouvre sur des styles et des pratiques différentes, amène des questions (pourquoi a-t-il fait ceci ou cela). Cela permet d'accéder à une plus grande variété de code et de regarder différentes mise en application des notions apprises. Même lire du mauvais code renforce l'apprentissage. Car c'est l'occasion de détecter des faiblesses d'approche, de voir les erreurs fréquentes, d'imaginer des solutions alternatives etc.
  • Proposer son code en relecture à des pairs : même si votre code réalise correctement ce pour quoi vous l'avez écrit, il est toujours enrichissant de le proposer en relecture à d'autres développeurs plus expérimentés. Les pairs peuvent détecter des fragilités éventuelles non perçues. Mais ils vont probablement aussi ouvrir sur des évolutions possibles, sur des pratiques alternatives réputées éprouvées, diriger vers d'autres pistes. Sachez qu'en entreprise, la revue par les pairs une pratique courante pour la qualité logicielle et même obligatoire dans certains domaines.
  • Commencer modestement : pour éviter le découragement, il faut commencer par des exercices simples et des petits développements. Ceux-ci doivent permettre d'acquérir les bases et les notions juste apprises. Vouloir démarrer avec un développement long et complexe, c'est se heurter dès le départ à des problèmes abscons. Et c'est surtout un inexorable cheminement vers le découragement et l'abandon. Garder vos ambitions en têtes mais allez-y pas après pas.
  • Accepter les boîtes noires : dans un premier temps, il n'est pas possible de tout comprendre et tout apprendre. Il faut donc accepter d'utiliser des bibliothèques, des composants, des éléments sans comprendre comment ils fonctionnent. Ce n'est qu'au fur et à mesure de l'appentissage et que les notions sont assimilées qu'il est possible de comprendre et de rentrer dans ces boîtes noires. L'essentiel est de rester concentrer sur les notions qu'il faut d'abord apprendre.
  • D'abord chercher par soi-même : obtenir une solution à une question sans avoir fait un travail préalable de recherche est inefficace en terme d'apprentissage. Ce n'est qu'après avoir commencé à construire une solution, s'être heurté aux limites de celle-ci qu'il est enrichissant de solliciter des pairs pour apporter des informations complémentaires ou des précisions.

VIII. Je veux débuter en ...


VIII-A. C++


VIII-B. C#


VIII-C. Java


VIII-D. Python


VIII-E. Smalltalk


VIII-F. Perl


VIII-G. PHP


VIII-H. C


VIII-I. Pascal


VIII-J. Assembleur


VIII-K. Prolog


VIII-L. Caml


VIII-M. Lisp


VIII-N. Scheme


VIII-O. Haskell


VIII-P. F#


VIII-Q. Scala



               Version PDF (Miroir)   Version hors-ligne (Miroir)

Valid XHTML 1.0 TransitionalValid CSS!

Copyright © 2010 3DArchi. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.