Initiation Programmation - Aides et Tutos en ligne pour les stagiaires

publicité
[PROGRAMMATION] COMMENT DEBUTER, QUEL LANGAGE?
Publié par GT94, dernière mise à jour le jeudi 9 octobre 2008 à 19:50:12 par A Mancel GT94
C
N
A
M
Comment débuter, quel langage?
•
Introduction
•
Ceux que l'on peut utiliser
o
Delphi/Pascal
o
Java
o
o
o
•
o
o
o
o
•
o
o
o
.
A
Python
.Net
Smalltalk
Ceux que l'on peut utiliser à la rigueur
C/C++
PHP
Ada
Lisp/Caml/...
Ceux que l'on peut ne pas utiliser
(x)HTML/CS S
Perl
Visual Basic/Basic : D
L
E
Introduction
Bonjour tout le monde,
Une des questions récurrentes sur ce forum dédié aux débutants est "Comment débuter en
programmation ?" ou parfois "Quel langage pour débuter ?". Je vais tenter d'y répondre, mais
il faut bien savoir que ce genre de question est susceptible de déclencher des guéguerres de
chapelles. Pour essayer d'avoir quelque chose de relativement objectif, je me suis basé sur les
opinions des membres recueillies aux travers des réponses accordées à ces questions (utilisez
le moteur de recherche dans le forum programmation, il est là pour ça :o) ).
L
E
Alors tout d'abord, il n'y a pas de langage pour débuter la programmation, du moins la
programmation se commence sur papier, avec l'algorithmique.
(www.commentcamarche.net/algo/algointro.php3) Évidemment, pour tester les
C
N
A
M
algorithmes, il peut être confortable de le faire avec un langage de programmation, mais dans
ce cas, la seule chose que je recommanderai est un langage simple, non objet, non graphique.
Les bons choix peuvent être Basic, Pascal, Python, néanmoins la syntaxe de ces derniers sera
sans doute plus utile par la suite. Mais rien n'est vraiment à exclure ici, même le langage de
calculatrice peut suffire à tester les algos simples. Ensuite, il est de bon ton d'avoir une idée
sur les différents type de langages, sur ce qu'est un compilateur et autres choses
généralistes. (www.commentcamarche.net/langages/langages.php3).
Une fois ici, on a déjà des bases saines pour commencer à programmer...seulement on ne
programme pas pour programmer, il faut un but, une idée, un logiciel à faire. Là, je ne peux
.
A
rien faire pour vous, c'est en fonction de ses gouts, de ses connaissances,... et là s'effectue
les premiers choix techniques:
Langage objet, oui ou non ?
Multi plateforme, oui ou non ?
Avec machine virtuelle, oui ou non ?
Interface utilisateur, oui ou non ?
Accès à une base de données? Si oui laquelle?
...
Une fois ces choix faits, l'éventail des langages se retrouve singulièrement restreint.
Alors passons en revue les langages les plus souvent cités pour débuter, avec toujours en tête
le point de vue de l'apprentissage.
NB : il existe aussi une voie très ludique pour découvrir la programmation : KPL.
KPL signifie Kid's Programming Language (Le site KPL en français :
http://www.kidsprogramminglanguage.com/francais/index.php).
Interface soignée (couleurs, sons, graphismes) et un apprentissage de la programmation
orientée vers la conception de jeux. L'idée de fond est : apprendre en s'amusant. Si
réellement vous ne connaissez rien à rien à l'informatique ni à la programmation, cela peut
être une porte d'entrée. De même, cela est bien évidemment un moyen d'y mettre vos
enfants (ce qui est bon pour eux est bon pour vous, à priori). Ce logiciel est un freeware
(c'est dit sur le site) et n'est pas restreint aux jeux, bien entendu, et le site est multilangues
(anglais, espagnol, portugais, français et quelques langues nordiques), comme le logiciel. Le
langage lui est tout ce qu'il y a de plus commun dans les autres langages : Begin, End, Main,
False, True, etc.
Ceux que l'on peut utiliser
Delphi/Pascal
C
N
A
M
L
E
Une bonne solution, les compilateurs et environnements de développements se trouvent
gratuitement (sous certaines conditions peu contraignantes). On peut commencer par faire
des petits programmes dans des shell en Pascal et ensuite passer (après avoir appris la notion
d'objet) à des choses plus costaudes avec environnement graphique grâce à Delphi (et Kylix
sous Linux :o) ). Le langage est relativement intuitif, rigoureux, la création d'interface
graphique simple, on peut vite se faire plaisir. La portabilité est médiocre mais existe vers
certaines plateformes (Kylix...)
.
A
Pour apprendre :
www.commentcamarche.net/pascal/pascintro.php3
Site officiel Delphi (Anglais) : www.borland.com/delphi_net/
Télécharger Pascal :
telecharger.01net.com/windows/Programmation/langage/fiches/3340.html
Java
Langage objet, très portable, syntaxe utilisée également pour des scripts internet (la syntaxe,
pas le langage...). Il existe de nombreux environnements de développement gratuits sur le
net : il faut juste choisir en fonction de ses goûts, néanmoins, ça n'a pas la facilité de Delphi
au niveau des interfaces graphiques. Il s'agit là d'un langage "nouvelle génération" qui
donnera aussi une expérience intéressante à ceux qui souhaitent travailler en informatique.
Pour apprendre : www.commentcamarche.net/java/javaintro.php3
Désolé, pas d'autres liens, n'hésitez pas si vous en connaissez des bons
Python
Simple, rapide, donne de bonnes habitudes de programmation, léger (à tel point que repasser
à un autre langage après semble vite pesant), ouvert, énormément de documentation sur
internet, c'est le préféré de Sebsauvage ;o). Il permet de vite se faire plaisir soit en faisant
des scripts puissants (grâce notamment à la programmation objet). Il est également "nouvelle
génération" et portable. Il fonctionne avec une machine virtuelle qui peut être empaquetée
grâce à certaines classes disponibles sur le web (on en trouve de toutes sortes et à toutes
L
E
fins...) dans un exe pour distribuer l'application de manière simple et indépendante.
Site officiel python (en anglais): www.python.org
Livre "Apprendre à programmer avec Python " accessible intégralement en ligne:
http://fr.wikibooks.org/wiki/Apprendre_%C3%A0_programmer_avec_Python
C
N
A
M
Didacticiels python : python.developpez.com
Tutoriels Python : www.python-eggs.org/links.html
Wiki python francophone: wikipython.flibuste.net
.Net
Alias le futur selon Microsoft, du bon et du mauvais dans cette plateforme, mais elle permet
de programmer des applications graphiques de manière simple, ne tourne que sous Windows
avec quelques tentatives adaptives sous Linux. Je conseillerai le C# qui est le langage "natif"
.
A
de cette plateforme : sa syntaxe est proche du C et de java, pas de pointeurs, tout se passe à
un niveau d'abstraction supérieur aux anciens langages microsoft. C'est comparable à Java et
à Python, sauf que ce n'est pas libre.
Un environnement de développement gratuit et OpenSource pour .Net:
www.icsharpcode.net/OpenSource/SD/(Merci Rodolphe_)
Smalltalk
Pour moi LE langage objet par excellence. Gratuit, syntaxe simple, il impose une rigueur
inégalée dans la programmation objet. Malheureusement pas assez répandu, il est rare de
trouver un boulot avec, mais cela donne toujours une référence solide, et des choses comme
Squeak permettent de faire énormément de choses avec.
Squeak : www.squeak.org/
Tutorial Dolphin Smalltalk : www.object-arts.com/EducationCentre/Tutorials/Tutorials.htm
Ceux que l'on peut utiliser à la rigueur
C/C++
Ce sont de bons langages, mais avec une syntaxe compliquée qui ne facilite pas leur
apprentissage. De plus l'utilisation des pointeurs rend leur utilisation, même par des
professionnels, souvent ardue. L'avantage est que ces langages peuvent être utilisés sur
L
E
plusieurs plateformes (après compilation) et que, une fois maîtrisés, ils font paraître les
autres plus simples. De plus ce sont des langages encore très utilisés dans le monde
professionnel. A utiliser exclusivement dans le but de faire de l'informatique un métier.
Pour apprendre :
C
N
A
M
www.commentcamarche.net/c/cintro.php3
Pour apprendre : www.commentcamarche.net/cpp/cppintro.php3
_Site Borland C++ : www.borland.com/cbuilderx/
PHP
Un langage initialement prévu pour le développement de pages web dynamiques. Sa syntaxe
est proche du C++.
PHP est assez "simple" à aborder et permet de communiquer assez facilement avec une base
.
A
de données.
Pour développer des pages web dynamiques, il requiert aussi une bonne connaissance de
l'HTML et éventuellement du SQL si vous avez besoin d'une base de données.
Il permet notamment d'avoir rapidement une "visibilité" de son travail en le mettant en ligne,
et ainsi d'avoir les commentaires/suggestions des internautes.
On peut également développer des applications normales avec ce langage (hors web).
Notons aussi que vous pouvez programmer de manière procédurale ou orientée objet, au
choix, ça permet un bon tour d'horizon.
Ceci dit c'est un bon langage mais pas forcément le meilleur pour apprendre. Il est puissant et
permissif si bien que vous risquez de prendre de mauvaises habitudes en apprenant avec.
Notamment au niveau des pages web, il n'influence pas à programmer proprement de prime
abord.
Si vous chercher un langage facile à apprendre, qui permet d'apprendre l'orienté objet, et qui
laisse derrière lui de bonnes habitudes, choisissez plutôt un langage comme python.
Pour apprendre : www.commentcamarche.net/php/phpintro.php3
_Site officiel : www.php.net/
_Php France (Tutoriaux) : www.phpfrance.com/
_Php débutants : www.phpdebutant.org
_Le php facile : www.lephpfacile.com/
Ada
Langage encore utilisé dans le monde du temps réel. Il reste relativement facile à apprendre
mais est a recommandé surtout aux futurs informaticiens, sinon l'intérêt est limité. Il vaut
mieux passer à Ada seulement avec le but "temps réel" ou du moins informatique embarquée.
Il tend à disparaître.
Désolé, pas de liens, n'hésitez pas si vous en connaissez des bons
L
E
Pour apprendre : http://lmi17.cnam.fr/~barthe/APA_EAD/common/table-desmatieres.html
Lisp/Caml/...
C
N
A
M
Les langages fonctionnels. Ils sont nombreux, classifiés en deux grandes familles : les
purs(haskell) et les non purs(famille lisp). La famille des purs est en fait classifiée en deux:
les vraiment purs, pas d'effet de bord (famille haskell) et la famille ML (Caml,SML,...). La
manière de programmer est totalement différente par rapport aux autres langages. En fait, la
programmation fonctionnelle est une autre manière de voir un programme et cela n'empêche
pas par exemple d'avoir un langage fonctionnel et objet (scala par exemple) ou même un
.
A
langage fonctionnel qui allie impératif/objet/fonctionnel (Ocaml). En connaître un permet
d'avoir de bonnes bases et permettra également aux personnes plus orientées vers les
mathématiques de passer doucement vers l'informatique. Ils sont souvent utilisés en analyse
numérique ou en intelligence artificielle (mais c'est juste à cause de leur origine). On peut les
utiliser pour programmer tout ce que l'on peut programmer avec les autres langages (la
communauté commonlisp est très active par exemple).
caml.inria.fr/index-fra.html (La référence)
dept-info.labri.u-bordeaux.fr/~strandh/Common-Lisp/ressources-web.html
www.paulgraham.com/onlisp.html
scala.epfl.ch/index.html
Ceux que l'on peut ne pas utiliser
(x)HTML/CSS
Bon, je vais être bref, écrire une page ou un site en HTML est à la programmation ce que
boire un verre d'eau est à l'alcoolisme. Il s'agit de présenter un document, pas de
programmer quoique ce soit, et ce n'est pas en incluant quelques scripts au milieu que cela
change grand chose.
Pour apprendre : www.commentcamarche.net/html/htmlintro.php3
Pour apprendre : www.commentcamarche.net/dhtml/dhtmlintro.php3
Perl
C
N
A
M
Soyons clair, ce langage apparemment simple n'est pas du tout
adapté à l'apprentissage de la programmation. Sa souplesse et sa puissance
risquent de vous faire prendre de mauvaises habitudes de programmation
voire de vous décourager par les erreurs qu'elles vous autoriseront
silencieusement à faire. Mieux vaut commencer par apprendre un langage
rigoureux, pour ensuite pouvoir exploiter au mieux Perl.
L
E
Merci à Jeremy Just pour cette correction
Je rajoute pour ma pomme par contre, que l'on peut très bien vivre une vie professionnelle en
informatique sans l'utiliser ;o)
.
A
Pour apprendre : www.commentcamarche.net/perl/perlintro.php3
Visual Basic/Basic : D
Déconseillé formellement par tous les professionnels qui ont travaillé avec. Il donne de
mauvaises habitudes de programmation (déclaration des variables non nécessaire, aucune
notion de valeur/référence, tentative avortée de faire de l'objet,...), et de plus Microsoft (il
s'agit d'un langage propriétaire) l'a laissé tomber au profit du Framework.Net. Pour finir il
n'existe aucune version gratuite, il faut donc passer à la caisse. Le seul point positif que je lui
reconnaitrais, c'est son côté ludique et la facilité de faire des interfaces graphiques pour
Windows (Ha oui, j'oubliais, il n'est pas portable non plus...), mais c'est loin d'être le seul
dans ce cas, si c'est ce qui vous intéresse, penchez-vous plutôt sur Delphi ou encore .Net.
Le cas de Basic est plus ou moins le même, il existe des compilateurs gratuits, mais il s'agit
d'un langage dépassé qui n'est ni rapide, ni portable, ni objet, ni rigoureux. Préférez Pascal
qui permet par la suite d'évoluer vers Delphi.
Pour apprendre : www.commentcamarche.net/vb/vbintro.php3
Pour les matheux, vous pouvez aussi essayer les langages d'aide a la preuve. Pour le
moment, leur puissance est limitée mais on espère qu'ils se développeront avec le temps.
Pour le moment les plus répandus sont en couple avec la famille ML ou Haskell. Pour Ocaml,
vous avez coq. Les paradigmes sont fondés sur la logique.
Pour apprendre (le livre de Pierre Castéran était sur le net, mais malheureusement il
n'y est plus depuis l'année dernière avec la publication):
coq.inria.fr/
L
E
Quelques liens piqués au hasard des discussions sur le forum, ils me paraissent à ce jour les
plus complets mais bon :o)
C
N
A
M
www.commentcamarche.net/forum/affich-796367-d%E9butant-en-programmation
www.commentcamarche.net/forum/affich-756102-d%E9butant-en-programmation
www.commentcamarche.net/forum/affich-756219-%5BApprendre-%E0-programmer%5DAider-moi-s-%23039-il-vous
www.commentcamarche.net/forum/affich-579484-Aprendre-a-programer-rapidement
www.commentcamarche.net/forum/affich-474123-Suis-je-trop-jeune
www.commentcamarche.net/forum/affich-500093-Language
www.commentcamarche.net/forum/affich-328802-programmation
www.commentcamarche.net/forum/affich-212475-multi-languages
www.commentcamarche.net/forum/affich-99120-Re-Re-Ecrire-des-programmes
.
A
www.commentcamarche.net/forum/affich-301134-Visual-Basic-VS-Delphi
www.commentcamarche.net/forum/affich-409073-Euh-je-d%E9bute-alors
Encore une autre précision, il y a plusieurs liens en anglais (ou en anglo-américain ;o) ) cidessus. Ceci est courant dans le monde de la programmation, et apprendre à programmer se
fera dans de meilleures conditions si on lit bien l'anglais voire même si on peut l'écrire. (pour
poser des questions sur les forums spécialisés...).
Voilà, j'espère avoir été le plus complet possible, mais je m'aperçois que je n'ai pas réussi à
être vraiment objectif, mon opinion transparait encore énormément :o). De plus, un posteur
occasionnel avait donné un langage spécialement prévu pour les débutants, mais je n'ai pas
retrouvé le nom :o( si quelqu'un a ça ou si le posteur repasse par là je suis preneur :o)
Bon apprentissage.
------------------------------------
Vous trouverez également beaucoup de compilateurs gratuits pour différents langages à cette
adresse: www.thefreecountry.com/
PS : débuter en programmation, c'est aussi se trouver confronté à une épineuse question :
mais pourquoi mon programme ne marche pas ? Les messages d'erreur fournis (ou non) par
les environnement de compilation ou d'exécution (ou le comportement de l'ensemble)
plongent parfois les débutants dans une perplexité sans fond qui peut devenir exaspérante.
Une bonne méthode est de faire relire son code par quelqu'un d'expérimenté, et/ou
d'expliquer à autrui votre problème. Parfois l'énoncé à haute voix de votre raisonnement vous
mettra sur la bonne voie et fera de vous le vainqueur de votre chasse au fameux bug. Enfin,
la capacité à (bien) programmer va (souvent) de pair avec celle de s'abstraire de ce monde
L
E
matériel dans lequel nous sommes tous plongés. Bienvenue dans un monde où rien n'est
réellement concret.
Si la programmation vous mord, vous en rêverez peut-être ... Ayez dans ces moments là une
feuille et un crayon à papier (l'arme absolue de l'informaticien) sur votre table de chevet,
C
N
A
M
notez les solutions qui vous viennent à l'esprit et testez-les le matin venu, vous serez
probablement surpris du conseil que la nuit vous a alors apporté :-)
[OPTIMISATION] POLYMORPHISME “STATIQUE”
Publié par Fu Xuen, dernière mise à jour le mardi 21 septembre 2004 à 22:07:35 par tafiscobar
Le polymorphisme est l'une des pierres angulaires du paradigme objet :
- http://www.commentcamarche.net/poo/polymorp.php3
En C++, il s'exprime sous la forme de fonctions virtuelles : celles-ci permettent d'adapter
dynamiquement (i.e. à l'exécution) leur code au type de l'objet auxquelles elles sont
appliquées. Cela peut avoir un impact négatif sur les performances, dans le cas particulier où
.
A
:
• le code à l'intérieur de ces fonctions est court ;
• ces fonctions sont appelées très souvent.
En effet, comme le compilateur ne connaît pas à l'avance le code à appliquer, il ne peut pas
appliquer les optimisations usuelles. Par ailleurs, le coût en place mémoire est d'autant plus
grand que les branchements possibles (pour chaque type d'objet) sont nombreux.
Il existe cependant une astuce, dûe à Barton et Nackman :
- http://accu.org/cgi-bin/accu/rvout.cgi?from=0au_b&file=s002007a
Elle consiste à déclarer la classe parente comme classe générique, recevant comme paramètre
le type de la classe dérivée. Cette classe devra ensuite tout déléguer à ses héritiers (comme
un classe abstraite qui n'a que des fonctions virtuelles pures), mais ainsi le code à appliquer
est connu au moment de la compilation.
Voici un petit exemple :
// classe de base paramétrée par le type de la classe dérivée
template<class TypeEnfant>
class Matrice {
public:
// fonction de délégation
TypeEnfant& CommeUnEnfant()
{
return (static_cast<TypeEnfant&>(*this));
}
// surcharge par délégation
double operator()(int i, int j)
{
C
N
A
M
return (CommeUnEnfant()(i,j));
}
private:
...
};
L
E
// exemples de classes dérivées
class MatriceTriangulaire : public Matrice<MatriceTriangulaire> {
private:
.
A
...
};
class MatriceSymetrique : public Matrice<MatriceSymetrique> {
private:
...
};
// fonction "virtuelle" fonctionnant avec n'importe quel type de matrice
template<class TypeEnfant>
double norme(Matrice<TypeEnfant>&);
// exemple d'application
double nt, ns;
MatriceTriangulaire mt;
MatriceSymetrique
nt = norme(mt);
ns = norme(ms);
ms;
N'empêche que ce n'est pas totalement souple, car tout ajout se fera dans la plupart des cas
dans au moins deux endroits dans le code, dans l'interface de la classe dérivée et dans celle
de la classe de base. Je préconise donc que cette méthode est à utiliser lorsque l'interface est
figée et que comme le titre le dit, on veut optimiser le code.
.
A
C
N
A
M
L
E
Téléchargement