Rédaction tutoriel C

(auto)recrutement

a marqué ce sujet comme résolu.

Saroupille : Je ne sais même pas de quoi tu parles. Pour moi ça fait parti des nombreux cas où le C à une sémantique ambiguë. Il faut faire un choix sur l'évaluation des expressions.

Est-ce que tu sais à présent ? ;) .

Vu ta phrase tu pensais peut être à un cas du genre :

1
2
i = 2;
printf("%d - %d\n" , i , ++i );

Manque de bol (de connaissances?) tu es tombé sur une expression indéfinie.

+0 -0

@GuilO(o)*3 et FrizaSalikoko, vous m'avez mal compris. Justement, ça m'intéresse ; j'aimerais toucher au C et à ce qu'on peut faire de bas-niveau avec (de même que j'aimerais m'initier à un langage assembleur quand j'aurai le temps), à titre de curiosité intellectuelle plus que "pour en faire quelque chose". Aucun des cours que j'ai pu survoler ne répondait à ces attentes, contrairement à celui qui ressortirait de la synthèse que j'ai faite dans mon message plus haut des idées que j'ai vues proposées ici. :)

+1 -0

(de même que j'aimerais m'initier à un langage assembleur quand j'aurai le temps), à titre de curiosité intellectuelle plus que "pour en faire quelque chose".

J'ai un projet de tutoriel du genre dans les cartons. Malheureusement c'est super dur d'être pédagogue quand on parle de ça et du coup je ne sais pas du tout par où commencer.

Et par curiosité, t'aimerais quel genre de contenu ?

+0 -0

Pour l'ASM ? Aucune idée, mais j'avais commencé à lire un cours (sur developpez.com je crois ?…) vachement généraliste et super bien foutu qui détaillait le fonctionnement d'un processeur en partant quasiment du matériel, la gestion des mémoires etc. ; c'était le genre de choses que je recherche, mais à l'époque j'avais pas le temps d'y employer l'investissement (intellectuel et temporel) nécessaire.

Pour ce qui est du C, plus ou moins tout ce qui ressort des 6 pages précédentes : les spécificités du C et leur fonctionnement (malloc() &co), un peu de prog' système, des gros TPs tels que la création d'un système de fichiers et ce genre de choses…

Edit : voilà, c'était ça !

+0 -0

Mis à part en utilisant gdb, qui permet de voir la tête de l’exécutable en un peu plus lisible, et comprendre le fonctionnement du C (par exemple : le passage des paramètres d'une fonction), je ne vois pas trop comment ^^

On peut tenter un petit OS effectivement ou voir comment un ASM fonctionne en général (pour apprendre tout ça, j'avais un vieux logiciel : "CASCAD" à mon IUT, mais j'avoue que sans.. ça risque d'être un peu plus embêtant pour expliquer, pour moi ^^ ) avec les registres, l'horloge, l'UAL et tout :3

Mais je pense que ça pourrait faire à la limite un sujet pour un autre tuto ^^'

Edit : Déjà lu, tiens celui là, aussi ^^

Mais il faudra préciser que le but des OS était à la base de rendre les programmes portables entre toutes les architectures en proposant leur propre ASM et en faisant la 'convertion' eux-même à l'execution. (corrigez moi si je me trompe, je le sens mal, là XD)

Ne pas croire que les instructions sont directement injectés dans les circuits, contrairement aux OS ^^

+0 -0

Après, y'a des trucs rigolos à faire dans la même veine que nand2tetris, mais ça devient vraiment un gros boulot.

Je pense partir sur l'idée de Javier et rédiger de petits cours de temps en temps, façon « TP de C » pour implémenter quelques algos avancés. On pourra sans problème les fusionner dans un éventuel grand cours plus tard.

Pour l'ASM, un cours m'intéresserait aussi. Pour le genre de contenu, c'est difficile à dire, justement parce que je ne connais pas l'ASM. Mais par exemple, ça me ferait marrer de pouvoir programmer (même en galérant) quelques algos connus en assembleur. (c'est sans doute totalement inutile, mais ça m'amuserait)

EDIT : si on continue à partir dans tous les sens comme ça, d'ici 2 pages, on pourra renommer ce topic « le café du forum C » ;) .

+1 -0

(de même que j'aimerais m'initier à un langage assembleur quand j'aurai le temps), à titre de curiosité intellectuelle plus que "pour en faire quelque chose".

J'ai un projet de tutoriel du genre dans les cartons. Malheureusement c'est super dur d'être pédagogue quand on parle de ça et du coup je ne sais pas du tout par où commencer.

Ge0

Pourtant je trouvais que tu t'en étais super bien sorti avec ton article sur pdp

Justement j'y pensais, Christophe. Mais sur ledit article je ne montre pas comment assembler et lier un programme écrit en langage machine, par exemple.

Ca serait sans doute un TEA de rêve pour les curieux, une approche " top-down " en quelques sortes (je pars du C et je descends jusqu'à l'architecture matérielle d'un ordinateur) mais… Je ne maîtrise pas tout et il y aura toujours au moins un détail important qui m'échappera. :P

Après je peux peut-être faire ça sur ma biographie…

Aussi, si on veut être pédagogique, parler de l'assembleur x86 n'est pas forcément la meilleure chose, et parler du MIPS est probablement un choix plus intéressant.

Le problème c'est qu'un utilisateur lambda n'est pas souvent confronté à des processeurs MIPS.

Saroupille

Oui c'est pour ça que si je devais conseiller quelque chose, je proposerais plutôt l'ARM qui sont des RISC et déjà beaucoup plus courantes que les MIPS.

Je verrai un cours sous le plan suivant :

  • Généralités sur le C, historique, cas d'usage…
  • Environnement de dév : IDE, Lignes de commande, Makefile (chacun s'y trouvera)
  • les bases du langage : syntaxe, types, objets, fonctions.
  • les notions avancées : étapes de construction d'un programme, les nuances dans les bases du langage, utilisation des libs…
  • plus encore, les côtés obscures (visant l'expertise) : les notions "barbares" du C (et il y en a beaucoup…)
  • la portabilité : impact, enjeux, intérêt, bonnes pratiques…
  • pratique : exercices, TPs…
  • programmation fonctionnelle en C : découpage d'un problème complexe…
  • méthodologie : conception, algorithmie, architecture, techniques de debug, méthodes de tests, comment se documenter
  • Big Projet : pourquoi pas prendre une lib et montrer comment l'utiliser avec du C

Ca semble ambitieux mais ce sera la valeur ajoutée par rapport à celui du SDZ je pense.

uknow

C'est alléchant. Juste ces 2 points

  • programmation fonctionnelle en C : découpage d'un problème complexe…
  • méthodologie : conception, algorithmie, architecture, techniques de debug, méthodes de tests, comment se documenter

Il me semble qu'une approche agnostique serait plus intéressante, le C n'est pas des plus adapté pour l'apprentissage de ces domaines à mon sens. Pour les test et l'algorithmie par exemple, je pense que d'autres langages sont plus adapté pour l'apprentissage.

Du coup, l'intérêt serait peut-être de ne pas tenter de rédiger un monstre qui couvre tout les domaines, mais plutôt faire en sorte que tout ce qui est traité est correct et pertinent.

Oups, j'ai mangé beaucoup de pages du sujet. Désolé si je suis à coté de la plaque.

+0 -0

@GuilO(o)*3 et FrizaSalikoko, vous m'avez mal compris. Justement, ça m'intéresse ; j'aimerais toucher au C et à ce qu'on peut faire de bas-niveau avec (de même que j'aimerais m'initier à un langage assembleur quand j'aurai le temps), à titre de curiosité intellectuelle plus que "pour en faire quelque chose". Aucun des cours que j'ai pu survoler ne répondait à ces attentes, contrairement à celui qui ressortirait de la synthèse que j'ai faite dans mon message plus haut des idées que j'ai vues proposées ici. :)

Alkareth

Je cite ce message mais c'est pour reprendre le fait que l'on parle de l'embarqué.

J'ai lu rapidement le sujet et vous parlez des trucs compliqués du C notamment la gestion de la mémoire et autres joyeuseté avec l'assembleur. Mais cette complexité de la gestion de la mémoire est aussi en partie dû au fait que l'on code sur un OS qui gère la mémoire avec des notions complexes pour un débutant (adressage virtuel, etc.)

Pourquoi ne pas faire un partie dédiées aux notions complexes mais en s'appuyant plus sur une programmation sans OS, directement sur microcontroleur ? Alors oui cela nécessite de connaître l'architecture des ordinateurs mais on ne peut pas y échapper de toute façon. Et faire un renvoi vers le cours de mewtow permet de lier un peu les tutos. Cela permet de voir que la programmation ce n'est pas non plus que du code mais aussi un peu de hardware.

Un peu comme ce que propose Ge0 :

Justement j'y pensais, Christophe. Mais sur ledit article je ne montre pas comment assembler et lier un programme écrit en langage machine, par exemple.

Ca serait sans doute un TEA de rêve pour les curieux, une approche " top-down " en quelques sortes (je pars du C et je descends jusqu'à l'architecture matérielle d'un ordinateur) mais… Je ne maîtrise pas tout et il y aura toujours au moins un détail important qui m'échappera. :P

Après je peux peut-être faire ça sur ma biographie…

Ge0

N'oubliez de bien cerner le public pour votre tuto. Il n'est pas impossible que cela finisse en plusieurs tutos pour publics différents.

Après, si vous aimez les défis, j'en ai un, et il est très difficile. Passez-le, et vous aurez un cours qui se démarquera indubitablement des autres cours/tutos disponibles en ligne.

Il est extrêmement rare (je laisse une faible possibilité mais je n'y crois pas trop) qu'un cours de C (et pire un tuto) enseigne à coder correctement en C, et ce dès le début. C'est dû à un problème inhérent au C : la prise en compte des cas dégradés possibles impacte obligatoirement la complexité des sources et donc les profs donnent des mauvaises habitudes en montrant dès le début, et pratiquement tout le temps, des codes qui sont au pays magique des erreurs qui n'existent pas. Résultat les élèves prennent des mauvaises habitudes qui perdurent.

Un code incorrect est facile à reconnaitre, il ne passe pas le test évoqué par Raymond Chen (en gros: un if toutes les deux lignes)

@lmgh : même si je partage en grande partie ton avis, je me dis tout de même qu'un tutoriel parfait -au sens de tout le monde- n'existera pas. Mais pour atteindre le niveau de qualité que tu as décrit, je ne vois pas d'autres moyens d'y arriver que d'expliquer le C avec le vocabulaire du C (comportements indéfinis, lvalue, rvalue, identificateur…).

De s'attarder sur les notions barbares, mais de les aborder telles qu'elles sont sans simplifications. Je pense vraiment que c'est le meilleur moyen de savoir tout de suite si le C est compatible avec notre logique ou non, et ne pas se laisser abuser par un discours trompeur pour finalement se rendre à l'évidence que le C n'est pas pour nous.

Je sais qu'avec cette logique on risque de perdre pas mal de lecteurs, mais tant pis, le cours sera de meilleure qualité, et on aura le mérite d'avoir été honnêtes.

Ou alors cibler vraiment les novices indépendamment du fait qu'ils soient ou non compatibles avec la logique du C, avec plus d'explications, et plus d'analogies, mais il faut vraiment rester dans le vocabulaire C et ne pas user de synonymes du genre (adresse au lieu de pointeur, esperluette au lieu d'opérateur unaire &…). Mais perso je ne crois pas en cette option.

+0 -0

Vu comme les choses se dessinent, il y a de la place pour deux tutoriels C parallèles. Je suis effectivement dans la logique d'écrire un cours encourageant le code de qualité (du haut de mes maigres compétences…), quitte à demander des prérequis aux lecteurs.

Un autre cours plus orienté-débutants pourrait très bien voir le jour. C'est là que le tuto C « alternatif » du SdZ/PdP (déjà mentionné à plusieurs reprises) pourrait entrer en scène : il pourrait très bien être importé et faire office de tuto “débutants”, pour ceux qui préfèrent l'autre approche.

PS : ravi de voir un noyau dur de la communauté C(++) du SdZ ici. :)

+1 -0

Mais pour atteindre le niveau de qualité que tu as décrit, je ne vois pas d'autres moyens d'y arriver que d'expliquer le C avec le vocabulaire du C (comportements indéfinis, lvalue, rvalue, identificateur…).

De s'attarder sur les notions barbares, mais de les aborder telles qu'elles sont sans simplifications. Je pense vraiment que c'est le meilleur moyen de savoir tout de suite si le C est compatible avec notre logique ou non, et ne pas se laisser abuser par un discours trompeur pour finalement se rendre à l'évidence que le C n'est pas pour nous.

Je sais qu'avec cette logique on risque de perdre pas mal de lecteurs, mais tant pis, le cours sera de meilleure qualité, et on aura le mérite d'avoir été honnêtes.

Idéalement, pour apprendre a programmer en C. il faudrait déjà savoir programmer en C. Donc a défaut, savoir programmer dans un autre langage est déjà un bon point. C'est ce qui fait que le C est un langage totalement inapte pour un programmeur non averti (en plus de ses usecases peu nombreux).

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