Environnement de développement pour le C

Introduction

Depuis quelque temps, je suis à la recherche d'un environnement de développement pour enseigner le C.

Les contraintes sont les suivantes :

  • IDE (pas des produits détachés)
  • Multiplateformes (en tout cas Windows et MacOSX)
  • Debugger intégré
  • Autocomplétion

Recherches

Jusqu'à maintenant, le produit utilisé était Microsoft Visual Studio. Celui-ci n'étant pas multiplateforme, il s'agit de trouver une alternative.

Lors de ma phase de recherche, je me suis penché sur les produits suivants :

Après les avoir tous évalués, j'ai choisi Netbeans. Celui-ci présente, selon moi, les avantages suivants :

  • Utilisé par les étudiants plus tard dans leur cursus pour les cours Java
  • Open Source
  • Multiplateformes
  • Traduit en français

De plus, même si je ne l'ai pas beaucoup utilisé pour écrire du C, j'écris la quasi-totalité de mes projets Java avec. J'ai donc beaucoup d'expérience sur ce produit et je trouve qu'il est de très bonne qualité.

Dans un premier temps, je n'avais pas envisagé Netbeans car une mauvaise expérience avait eu lieu, il y a quelques années. Sous Windows, le compilateur gcc était installé à partir du projet cygwin et cela ne s'est pas toujours très bien passé avec les différentes variantes d'installations.

GCC

Les trois EDI envisagés plus haut nécessitent l'installation séparée d'un compilateur. Voici, par exemple, la liste des compilateurs supportés par Code::Blocks.

Pour débuter, je vais essayer le plus courant de ces compilateurs (gcc) et, s'il ne donne pas satisfaction, j'étudierai des variantes plus exotiques.

MacOSX

Les outils de développement regroupés dans le projet xcode de Apple contiennent le compilateur gcc. Ce qui me dérange c'est que xcode contient beaucoup plus de choses que gcc. Ayant un disque ssd, je préfère économiser un peu de place, donc je me suis mis à la recherche d'un package prêt à l'emploi qui permet de n'installer que le gcc.

Voici ce que j'ai trouvé : gcc-10.6. J'ai choisi la version préconstruite pour mon OS (Snow Leopard) : GCC-10.6.pkg

 Test

Après cette installation, je fais un petit test de gcc :

Je crée le fichier "helloworld.c" dans le dossier /tmp

#include 
 
int main(int argc, char** argv) {
 
    printf("Hello World!\n");
 
    return 0;
}

Je le compile et l'essaye :

Windows

MinGW

Pour éviter les problèmes liés à cygwin cités précédemment, je vais essayer d'utiliser MinGW.

Téléchargement

Installation

Une fois le programme d'installation démarré, je ne choisis que le strict nécessaire : "C Compiler" et "MSYS Basic System".
Voici un aperçu de la dernière page avant l'installation :

Installing:
      mingw-get
      pkginfo
      C Compiler
      MSYS Basic System
 
Using pre-packaged repository catalogues (20120426)
 
Destination location:
      C:\MinGW

L'installation démarre ensuite et télécharge les fichiers dont j'ai besoin. Une fois l'installation terminée, j'ai un dossier "C:\MinGW" de 170 Mb avec le compilateur gcc et tout ce qu'il faut pour faire du développement C sous Windows.

Test

Comme pour l'installation sous MacOSX, je crée le fichier helloworld.c dans le dossier %TEMP% de Windows.

#include 
 
int main(int argc, char** argv) {
 
    printf("Hello World!\n");
 
    return 0;
}

Netbeans

Pour ce test, j'ai choisi de télécharger et d'installer la dernière version de Netbeans (7.2) uniquement avec le plugin C.

MacOSX

Le même magnifique test que précédemment donne un résultat tout aussi concluant.

Windows

L'intégration de gcc sous Windows est un peu plus compliquée que sous MacOSX. Il nous faut la faire manuellement, car Netbeans n'arrive pas à trouver gcc automatiquement comme sous MacOSX.

Path

Selon Wikipedia : "Sous Windows, si un exécutable n'est pas à l'emplacement par défaut, la variable %PATH% indique dans quels répertoires le chercher."

Avant de démarrer Netbeans, il faut modifier la variable path pour que cet EDI trouve les outils de "make" dont il a besoin. Si cette configuration n'est pas réalisée, la compilation ne va pas fonctionner et le message d'erreur "mkdir: Command not found" sera affiché.

Chemin à ajouter dans le PATH :

C:\MinGW\msys\1.0\bin

C plugin

Il s'agit maintenant de configurer le Plugin C de Netbeans pour utiliser le gcc que nous installé avec MinGW.


Test

Une fois ces quelques efforts de configuration terminés, la compilation sous Netbeans fonctionne aussi bien que sous MacOSX.

Conclusion

Netbeans sera utilisé comme EDI pour d'autres langages de programmation (Java et PHP). Il est donc intéressant de pouvoir l'utiliser également pour le C. Cela évite de multiplier les installations et permet de se concentrer sur les langages eux-mêmes plutôt que sur les outils de développement. Je vais donc utiliser cet outil pour mon cours de C.

Introduction à LARP

Comme je l'ai expliqué dans l'article Logiciel d'introduction à la programmation Je vais utiliser le logiciel LARP pour faire le lien entre la représentation graphique d'un algorithme et son code source en C.

Dans cet article, je vais présenter mes premiers pas avec ce logiciel.

Hello World!

Comme je suis assez superstitieux en matière de logiciel, je vais exorciser le système en réalisant le classique "Hello World".

Construction

La construction du graphique est très intuitive, il suffit de glisser les différents éléments de la boite à outils sur les points d'insertion du graphique en cours  de réalisation. Ensuite, il faut saisir le contenu des éléments en pseudo-code. L'éditeur du logiciel propose un peu de documentation sur les organigrammes de LARP

Diagramme "Hello World" dans LARP

Exécution

Exécution de "Hello World" dans LARP

Simple, mais efficace! Comme dans tout langage de programmation, une instruction permet l'affichage d'une valeur. Dans ce cas précis, l'instruction est en pseudo-code et donc assez intuitive (Ecrire).
Bien entendu, cet exemple est trop trivial pour juger de l'aspect pédagogique de ce logiciel.

Boucle

Dans ce deuxième exemple, je vais implémenter une boucle "while" qui affiche les valeurs successives d'un compteur (de 1 à 9).

Construction et exécution

Comme précédemment, la construction est très simple. Pour le pseudo-code, j'ai saisi les valeurs d'instinct et c'était la bonne syntaxe. Vraiment très intuitif!
Construction d'un boucle dans LARP

Debugging

Il est possible de lancer l'exécution en mode "pas-à-pas".

  • La console est ouverte pour afficher le résultat
  • l'élément graphique en cours d'exécution est mis en évidence
  • Le contenu des variables est affiché

Mode pas-à-pas

Conclusion

Les deux exemples ci-dessus sont triviaux, mais ils m'ont permis de me faire une idée sur le potentiel de LARP.
Simple et intuitif, le logiciel permet de modéliser les opérations de base facilement. Le mode de debug est très bien fait. Il ressembl, en plus simple, à ce que je suis habitué à voir dans un EDI. La possibilité d'afficher le pseudo-code permettra, je l'espère au novice d'avoir une idée du code à développer à l'aide d'un "vrai" langage de programmation.

C'est donc sans hésitation que je vais utiliser ce logiciel pour montrer à mes élèves les bases de l'algorithmique. Il faut que j'y réfléchisse encore, mais j'hésite presque à leur faire faire toute la partie modélisation avec ce logiciel plutôt qu'en UML avec ArgoUML. Autant je suis convaincu de la nécessité de maîtriser UML dans le monde professionnel, autant je ne suis pas sûr que c'est important pour un débutant.
En tout cas, je suis certain que les concepts sont infiniment plus importants que la symbolique utilisée. Du coup, LARP va m'aider à faire passer les concepts en douceur (je l'espère ;-) ).

Logiciel d’introduction à la programmation

Depuis quelque temps, je suis à la recherche d'un logiciel pédagogique pour faire l'introduction à la programmation en C.

Au cours de mon expérience en tant qu'enseignant en développement logiciel, j'ai eu l'occasion de constater que, dans le cas d'un débutant complet, le lien entre le code source et le logiciel n'est pas évident pour tout le monde. De plus, les progrès sont très lents au début de l'apprentissage du langage, car deux difficultés s'additionnent:

  • Abstraction et algorithmes
  • Syntaxe et sémantique du langage C

Le cours est structuré en fonction de ces deux points. Dans un premier temps, les élèves étudient l'algorithmique à l'aide du diagramme d'activité UML et ensuite, ils commencent à implémenter leurs premières lignes de C. Le problème c'est qu'il y a une rupture entre les deux parties du cours et je "perds" systématiquement quelques élèves.

Algobox

Pour remédier à ce problème, j'avais tenté d'utiliser Algobox pour faire le lien entre les deux parties du cours. L'effet a été très différent de ce que j'espérais. Pour les élèves qui avaient de la facilité, rien n'a changé, par contre ceux que j'espérais aider ont vu le pseudo-code d'alogobox comme un nouveau langage de programmation "presque aussi difficile" d'accès que le C lui-même.

Scratch

En discutant dernièrement avec un collègue, j'ai découvert Scratch. Je l'ai immédiatement étudié et j'arrive aux conclusions suivantes :
Le programme est très bien fait. Il est beaucoup plus ludique qu'algobox et permet, grosso modo, de faire la même chose. Dans mon cas, l'aspect ludique est à double tranchant. D'un côté, le cours s'adresse à des jeunes, c'est donc un avantage. Par contre, l'aspect austère du C va ressortir encore plus si l'introduction est faite avec Scratch. Du plus, l'aspect "troisième langage" est similaire à algobox.

Malgré cela, j'ai de la peine à rejeter complètement l'idée d'utiliser Scratch tant le logiciel est de bonne facture... Peut-être qu'il permettrait de faire une bonne introduction à l'orienté-objet...

LARP

J'ai donc continué ma recherche et je suis tombé sur le logiciel LARP. En plus de l'aspect "pseudo-code" des deux précédents, il permet de créer un diagramme et de le faire "fonctionner". Même si la symbolique est un peu différente de l'UML, le "style" de diagramme est respecté. Comme les deux précédents, LARP a été conçu pour répondre à des besoins pédagogiques. Il permet de construire très rapidement un algorithme simple et d'observer son fonctionnement.

Je vais donc utiliser ce logiciel dans mon cours de C et je publierai dans quelques temps un retour d'expérience sur ce sujet... En attendant, je vais préparer un petit article sur ce logiciel et son fonctionnement.

Ecole des Arches

L'école des Arches prépare, entre autres, des jeunes à la maturité suisse, au baccalauréat international et au CFC d'informatique.

Depuis 2008, je donne des cours sur mandat dans cette école. Tous ces cours sont liés au développement logiciel.

  • Introduction au développement
  • Langages de programmation
    • Java
    • PHP
    • C
  • Modélisation

Cette activité représentait 20% à 25% de mon temps de travail, mais, depuis la rentrée 2012 ce pourcentage va augmenter pour dépasser les 50% et donc, devenir mon activité principale.