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 !
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 :
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.
|
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.
|
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.
|
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.
|
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
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.