Rédaction tutoriel C

(auto)recrutement

a marqué ce sujet comme résolu.

Mouais, pour cette tâche là il est normalement nécessaire de toucher un peu de l'assembleur, ne serait-ce l'x86 ce qui me semble dépasser le simple cadre d'un cours sur le langage C.

Renault

OK, on peut oublier ça du coup.

+0 -0

Bon, c'est mon premier message sur le forum, et ce que je vais dire risque de ne pas plaire à tout le monde mais : pourquoi ne pas imposer l'apprentissage de Python? Le débutant évitera les topics "Quel langage?", il pourra apprendre la programmation avec un langage simple (mais pas simpliste, et le tuto pourra explorer des notions avancées de Python sur la fin), et on s'assure que tout le monde a la même base pour les autres tutos.

Ainsi, le tuto C peut commencer par quelque chose comme "Assurez vous d'avoir suivi et compris les 2 premières parties du tutoriel Python avant de suivre celui-ci" (je dis 2 parties au pif), puis on explique les différences de syntaxe avec Python, et on entre dans le vif du sujet sans ré-expliquer ce qu'est une boucle.

Le tuto Python est donc généraliste et sert de base aux autres.

Pourquoi le Python ? Un tuto' d'Algorithmique est en cours de rédaction et conviendrait beaucoup mieux que de cibler le Python, ce n'est pas un langage de base, l'algorithmique (aussi connu sous le nom de pseudo-code, même si c’est pas exactement la même chose), lui, est prévu pour ça.

Tous les auteurs potentiels ici ont conscience qu'apprendre le C comme premier langage est contre-productif. Nous sommes tous d'accord pour partir du principe que les lecteurs savent déjà (un peu) programmer, et mettre un lien vers un cours pour débutants complets, afin de permettre à ceux qui en ont besoin de se remettre à niveau.

Le choix du langage dépendra en fait de la disponibilité d'un cours pour débutants complets de qualité. Si on a un très bon cours niveau débutant pour Python, on mettra un lien vers celui-là. Si on a un très bon cours de Ruby, on mettra un lien vers le cours de Ruby, et ainsi de suite. Le choix se fera en fonction de ce qu'on aura sous la main (sachant qu'on peut très bien mettre plusieurs lien pour laisser le choix au lecteur, si on a plusieurs bons cours).

+1 -0

Pourquoi le Python ? l'algorithmique (aussi connu sous le nom de pseudo-code, même si c’est pas exactement la même chose), lui, est prévu pour ça.

Titi_Alone

Rien à voir, surtout.

L'algorithmique, c'est tout ce qui constitue les étapes à suivre pour résoudre un problème.
Aucun rapport avec l'écriture de pseudo-code.

On a déjà débattu sur ce sujet avant :-° et nous ne sommes tous pas d'accord pour la création d'un cours sur « la programmation en général ».

+0 -0

Je ne suis de toutes les manières pas d'accord avec le fait d'imposer même si ça peut aider les membres au niveau du forum. Admettons que je suis un débutant lambda et que je veuille apprendre les bases du C. Je ne veux pas forcément avoir à apprendre le Python dans un premier temps :p

Tous les auteurs potentiels ici ont conscience qu'apprendre le C comme premier langage est contre-productif.

J'en ai déjà discuté, on m'a souvent dit que cela amenait de mauvaises pratiques, mais je ne suis pas d'accord.. Personnellement, j'ai commencé avec le C, et ce, sur feu le SdZ (le tuto C++ n'existait pas encore, ni même le tuto SDL, si je me souviens..).

Ensuite, j'ai aidé pas mal de débutants sur le forum C (comme vous), et je trouve qu'ils ne codent pas si mal que ça.. (sauf dans certains cas, et au début) Avec quelques conseils dans le tuto, je suppose qu'on peut faire en sorte qu'ils se mettent à faire les choses proprement.. On pourrait à la limite faire des cours sur la complexité, dans le tuto C..

+1 -0

Dans ce cas, concevoir deux cours : « Une introduction au C » pour les débutants masochistes (je m'assume pleinement), et un autre sur « le langage C » complet et pour les gens plus expérimentés.

Vous en pensez quoi ?

Psst, j'adore ta signature.

+0 -0

Un cours complet, sur le langage C, ça risque d'être super compliqué. Y'a pas mal de notions à aborder ^^

Pour les personnes avancées, je suis plus d'avis de faire une multitude de tutos plutôt qu'un gros tuto, en fait..

(edit: merci pour la signature d'ailleurs :p Je l'ai trouvée sur un site de proverbes à la noix x) )

Edit: Mais si l'idée est de faire un tuto pour débuter la programmation avec le C, et un pour ceux qui savent déjà programmer et qui veulent passer au C, en expliquant de manière un peu plus technique, ce n'est pas bête.. maintenant, il va falloir le faire :D

+0 -0

Très intéressant tout ça … Je sais que beaucoup de gens sur ce forum son d'accord sur le fait que Python comme premier langage, c'est bien. En tout cas c'est mieux que le C, le C++, le JAVA ou encore le PHP et j'en passe. Sur France-IOI, Python est d'ailleurs mis en avant pour les débutants, tout comme les élèves de Terminale option ISN ont souvent des cours d'initiation au Python.

Bref, tout ça pour dire que des exemples en Python pour un cour d'algorithmique ça me semble très bien. En tout cas, mieux que le pseudo-code.

Le sujet initiale étant un tutoriel sur le langage C. Je trouve les TD finaux de GuilOooo très intéressants. Je suis partisan bien-sûr d'un cour sur le C pour non-débutant.

Si jamais le projet vois le jour, je serrais certainement de la partie.

+0 -0

Je ne comprends pas trop le rapport entre « faire une belle while » et la complexité.

Tu veux dire pondre un code complexe ? Oui, les manières de l'éviter, cela va de soi presque :)

lesmon

Par exemple :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
printf("Donne moi un truc strictement supérieur à 0\n");
do
{
    scanf("%d", &resultat);
    if(resultat <= 0)
    {
        printf("Non, je veux un truc strictement supérieur à 0\n");
    }
}
while(resultat <= 0);

Est moins bon que :

1
2
3
4
5
6
7
printf("Donne moi un truc strictement supérieur à 0\n");
scanf("%d", &resultat);
while(resultat <= 0)
{
    printf("Non, je veux un truc strictement supérieur à 0\n");
    scanf("%d", &resultat);
}

Et on pourrait expliquer que dans un cas, on fait un test pour rien, que l'on peut optimiser facilement ce morceau de code. (On passe de deux tests à un, si on avait un algo (sans scanf) avec des millions d'enregistrements, on pourrait diviser le temps d'execution par 2. On passe de O(2n) à O(n))

+0 -0

Réinventer la roue moi ça me botte pas trop. Des tutoriels qui expliquent le C pour un débutant complet il y en a plein. Des bons, beaucoup moins. Mais il me semble, bien que je ne l'ai pas lu, que celui que l'on trouve sur PdP en fait parti. Pourquoi aller se retaper un boulot déjà fait ? Et si il y a des améliorations à faire sur le tuto C de PdP d'un point de vue pédagogie, les auteurs sont très sympas et ils seront attentifs à ce genre de propos.

Donc pour moi, le type qui n'y connait rien et qui veut absoluement commencer à apprendre le $C$, la question est réglée, on peut le rédiriger vers ce tutoriel.

Maintenant, il se peut que le type n'y connait pas grand chose, mais on peut le rediriger vers un autre tutoriel de qualité comme cela a été discuté. Encore une fois, l'idée c'est d'avoir des notions de bases sur les structures de contrôles et la programmation modulaire pour aborder ce nouveau tutoriel.

Si je devais commencer le tutoriel quelque part ça serait en parlant des pointeurs et en poussant un peu vers le langage machine (le langage assembleur).

Et ensuite, on pousse, on fait ce qu'on veut, mais on y va franco. C'est du boulot, c'est un chantier intéressant je trouve, et qui aura le mérite, je pense d'être inédit.

Si je dois faire un tutoriel $C$ aujourd'hui, il me servira plus comme un tram-plain et faire découvrir de nombreux sujets :

  • La programmation système avec Linux par exemple
  • Le fonctionne interne d'un ordinateur avec l'assembleur
  • Regarder dans les entrailles du C avec $malloc$ par exemple, mais on pourrait considérer d'autres fonctions de la glibc

Bref, plus des sujets qui ont été mentionnés par GuilOooo.

Je vais me faire taper sur les doigts, mais le seul intérêt qu'on a de faire un tutoriel sur le langage C à proprement parler, serait de parler des pointeurs. Tous le reste on peut le voir dans d'autres langages. Donc autant parler de ce qu'il y a autour. En plus, ça permet au lecteur une ouverture d'esprit qui peut manquer quand on apprend juste un langage. On mentionne assez peu les écueils de ce langage. C'est fort dommage.

@SylarfrsOne : Ton exemple porte plus sur la programmation de façon générale et en aucun cas elle est dépendante du C. Comme le souligne lesmon, l'intérêt de ton exemple est minime, surtout qu'un compilateur risque d'optimiser le code si bien que la différence se verra seulement d'un point de vue utilisateur.

le langage machine (le langage assembleur).

un langage assembleur :p

parler des pointeurs. Tous le reste on peut le voir dans d'autres langages.

Je ne dois pas connaître suffisament les autres langages, mais selon moi les constantes de préprocesseur, les champs de bits, par exemple, sont des choses que je n'ai vu qu'en C et C++, pour l'instant..

Pour la programmation système sous Unix, on peut aussi dire que ça a déjà été fait :p

Mais j'ai ma propre version sous format .tuto, au cas où, pour le moment ^^ (En tout cas la toute première partie qui traite des processus, des pipes, etc..)

+0 -0

malloc() c'est plus vraiment les entrailles du C, mais plutôt du système d'exploitation :p

Après, cela reste un programme alléchant.

lesmon

Tiens, voilà le code source de malloc. En faite, malloc est bien une fonction écrite en $C$, et on la recoder à l'aide d'appels de fonction systèmes du genre brk.

Corrigez moi si je me plante, mais c'est plus brk qui est lié au système d'exploitation que malloc.

@SylafrsOne: Tu peux déjà tout considérer que tout a été fait. Quand ça ne l'est pas, tu publies un papier. Pour la programmation système il y a ce très bon livre Programme système en C sous Linux. Mais il existe plusieurs façon de voir les choses de les aborder.

Après, le préprocesseur, à ma grande surprise, je l'ai retrouvé en Haskell, si c'est bien son nom. En tout cas ça y ressemble grandement. Mais le préprocesseur, comme son nom l'indique c'est juste pour rendre du code portable principalement. Est-ce que toi, en tant que programmeur, savoir que le préprocesseur existe en $C$ va te faire changer ta façon de coder ? Le seul cas que je vois c'est pour de l'optimisation de code, et là encore, vu l'intelligence des compilateurs, c'est pas dit que tu seras gagnant.

En ce qui concerne les champs de bits, c'est un principe que tu peux retrouver dans d'autres langages assez facilement. C'est pas THE truc du C. Mais on s'en sert beaucoup pour faire de la programmation système justement et c'est ça qui est intéressant, pas la fonctionnalité en elle même.

Et my bad pour la faute.

Hmm.. le préprocesseur permet également d'être plus productif. C'est ce qui fait tourner les templates en C++, ça permet de faire de la meta-prog.

http://www.dreamincode.net/forums/blog/91/entry-2309-x-macros-in-c-abstracting-datafiles/

Bon, certes, on peut toujours utiliser void*, mais.. :p

Ce n'est pas parce que ce n'est pas forcément utile que ce n'est pas marrant à connaître ^^

Tu peux déjà tout considérer que tout a été fait.

Oui, je suis d'accord. Alors pourquoi pas refaire la roue ?

+0 -0

Naooon, pas glibc...

Ben globalement, ça fait faire le tour du C tout ça.

  • Structures de contrôle & structures tout court
  • Préprocesseur
  • Pointeurs
  • Bibliothèque standard

lesmon

Tu peux enlever les structures de contrôles. Entre un if en C et en python, c'est globalement la même chose. La seule structure de données contestable c'est le for.

Mais oui, ça n'empêche pas de faire le tour du C, seulement tu peux faire la supposition que l'utilisateur s'y connait déjà en programmation. Et surtout tu peux faire ça en utilisant des exemples, ou par le biais de TP.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte