Rédaction tutoriel C

(auto)recrutement

a marqué ce sujet comme résolu.

Salut à tous, je plop simplement pour prendre des nouvelles et pour savoir où en est le projet car je suis intéressé :) Je ne pourrais pas réellement aider surtout si vous êtes déjà nombreux mais je voudrais bien voir ce que donne un cours C dirigé par Taurre, Syla, uknow, Maëlan et compagnie. Bonne continuation !

+0 -0

[…] je voudrais bien voir ce que donne un cours C dirigé par Taurre, Syla, uknow, Maëlan et compagnie.

poupou9779

Je pense que ce sujet avait essentiellement pour but de savoir s'il y avait des personnes intéressées par la rédaction d'un cours sur le C. Maintenant, à ma connaissance, il n'y a pas de cours actuellement en rédaction sur le sujet (à tout le moins, je n'en ai pas eu vent).

+0 -0

Bonjour,

Désolé de déterrer le sujet, mais je pense me mettre à la rédaction d'un cours sur le C. Le cours suivrait un plan assez simple qui permettrait d'acquérir de bonnes bases en algorithmiques procédurale : - Introduction, Histoire, Installations… - Bases : Variables, conditions, boucles, fonctions, TP (Jeu de Taquin) - Notions plus avancées : Tableaux, pointeurs, TP (Structure de données type piles, files…)

Merci de dire ce que vous en pensez, et savoir si je dois changer le plan ou y ajouter des parties…

Bonne soirée

Je n'avais pas lu toutes les pages, et en effet, après avoir relu, le problème est plus complexe. Est-t-il nécessaire de créer un cours uniquement destiné aux débutants (ce qui était mon idée principale) ? Ou vaut-il mieux créer un cours "deep-C" avec des notions très avancées (fonctionnel en C, bibliothèques Qt) que je ne maîtrise parfois même pas pour tout vous dire.

Sachant qu'un cours sur l'algorithmique générale est prévu (ce que j'ignorais), dans ce cas il est vrai qu'un cours sur les bases du C est plus dérisoire. J'ai tendance à penser que si le niveau est bon en algo', tout autre langage peut suivre. Après pour ce qui est d'un cours plus en profondeur, il faudrait constituer une équipe, et cela en vaut-il la peine si le C n'est pas le langage le plus actuel ?

+0 -0

Ce qui me gêne avec les cours de C pour débutants, c'est que le C est un langage particulièrement inadapté. La raison est qu'un bon code en C a pratiquement un if toutes les deux lignes. Et ça, c'est incompatible avec une approche pédagogique. Mais, bon, on s'est déjà pas mal étendus sur le sujet.

Je suis plutôt d'accord, mais le C impose une rigueur (notamment sur le typage) qui permet d'apprendre les bonnes manières de programmer assez rapidement et de ne plus être perdu dans d'autres langages. Les gens qui commencent par le PHP ne feront pas de distinction entre caractère et chaîne de caractère, ce qui ne sera pas le cas en C !

Moi je veux bien aider à la réalisation d'un cours si c'est demandé. Mais si de l'avis général, vous trouvez ça inutile, autant que je ne perd pas de temps.

+0 -0

Je suis plutôt d'accord, mais le C impose une rigueur (notamment sur le typage) qui permet d'apprendre les bonnes manières de programmer assez rapidement et de ne plus être perdu dans d'autres langages. Les gens qui commencent par le PHP ne feront pas de distinction entre caractère et chaîne de caractère, ce qui ne sera pas le cas en C !

Faut et archi-faux ! Au contraire, le C est laxiste sur le typage, notamment au niveau des pointeur ou bien en utilisant des casts. Certes plus strict que le PHP où le Javascript mais on ne peut pas dire pour autant qu'il soit rigoureux. Regarde du côté des langages fonctionnelles pour avoir une rigueur sur les types.

En C il y a plein d'exemples où il se fout du typage. Tu prends les opérateurs +,- . Tu peux me donner un type pour ces opérateurs ?

Bref mauvais exemple.

Moi je veux bien aidé à la réalisation d'un cours si c'est demandé. Mais si de l'avis général, vous trouvez ça inutile, autant que je ne perd pas de temps.

Louis_A

Le C n'impose rien en terme de rigueur. Il l'exige, mais personne ne l'enseigne à des débutants. Il est pédagogiquement impossible de leur enseigner l'algo en C avec un if toutes les deux lignes pour vérifier si l'allocation ou même la lecture depuis stdin s'est bien passée.

Autres exemples que je ressasse :

  • le récurrent et mauvais p = realloc(p, taille);
  • printf("%x", ptr);

Bref. Oui, la rigueur, c'est des langages comme CamL (ou Haskell, je ne me souviens jamais – je suis de la génération Pascal), ou Ada. Certainement pas le C.

Salut,

On dirait bien que le sujet est detrerré. Pour ma part j'aimerai ajouter que l'on utilise pas le C pour tout et rien. Meme si dans la pratique rien ne nous en empeche, on pourrait très bien faire un site web en C. Mais dans un veritable projet, le C ne s'utilise que dans certains cas precis. Et dans la plus part de ces cas on privilégiera souvent le C++ avec eventuellement quelques bouts de C.

Le C est presque exclusivement destiné a de l'embarqué et a la programmation système. Il est aussi utilisé pour la pedagogie, il aide a comprendre tout ce qui ce trame derrière un programme.

Personnelement j'affectionne beaucoup ce langage (voir meme plus que je ne le devrait). Le C tout comme le C++ a un potentiel assez énorme. Généralement rien n'est impossible a faire, on trouvera toujours un moyen d'arriver a nos fins (ce qui n'est pas forcément les cas d'autre langage/lib qui ne propose pas de binding). Mais le C a surtout la force d'offrir un contrôle total a l'utilisateur via les pointeurs. C'est a mes yeux l'arme et la faiblesse ultime du C. Les pointeurs permettent un nombre incroyable de choses (je pense surtout a de l'optimisation). Mais a contrario c'est aussi la source d'erreur principale, mal employé c'est une catastrophe.

Tout ca pour dire qu'un débutant pas forcément pationné risquerai de se prendre une sacrée claque. Et qu'a mes yeux le C est un langage destiner a ceux qui en veulent, qui on soif de connaissance et qui n'ont pas peur des segfault(s). Je pense donc qu'il serait préférable dans l'intérêt de tous de préciser dans les premières lignes du tuto toutes ces informations. Pas dans l'optique d'effrayer le lecture mais de lui expliquer a quels usages est destiné ce langage au lieu de lui mettre des étoiles dans les yeux en lui promettant par exemple qu'il sera ensuite capable de créer un jeu vidéo.

Pour finir même si ca peut paraître étrange a certains, je privilégierai un tuto avec des notions assez avancer destinné a un publique averti et pourquoi pas par la suite un tuto pour débutant que l'on peut déjà trouver sur une multitude d'autres sites.

(Désolé pour le manque de ponctuation, je corrigerai ça des que possible)

+1 -0

Je viens de lire absolument tout le sujet et c'est long mais très instructif pour un débutant comme moi.

Je pense d'ailleurs être une personne assez représentative d'un des publics possible : quelques connaissances en programmation (jusqu'aux fonctions en gros) mais rien de bien folichon, donc n'hésitez pas à me demander mon avis si vous rédiger quelque chose qui vise ce public :) .

Par contre je suis assez peu représentatif sur le reste : pas besoin de carotte, je la plante moi même à chaque fois, et pourvu que je sois lancé j'essaie toujours d'aller jusqu'au bout, même si je galère sur une notion.

Il y a une chose qui a été dite et que j'approuve plus que tout : un tutoriel détaché des langages et qui enseigne l'algorithmique. Si quelqu'un en sort un demain, je me lance dessus directement car c'est quelque chose que je n'ai pas encore trouvé dans les tutoriels axés sur un langage en particulier, ni ailleurs. À chaque fois on m'explique comment faire mais pas pourquoi faire comme ça. Et c'est vraiment frustrant quand on lit un code de ne pas savoir comment la personne en est arrivé là ni même d'avoir un début de jugement sur la qualité de l'algo.

Un tutoriel sur les bonnes pratiques, que ce soit en C ou autre chose (voir un pour chaque langage qui aurait un tuto sur le site) serait une plus-value énorme de mon point de vue (un débutant a envie de progresser rapidement, si en plus il sait qu'il code un peu comme le ferait un expert, c'est assez gratifiant pour lui).

+0 -0

D'une certaine façon le C est de ce point de vue presque aussi primitif que l'assembleur ce qui en fait sa force pour avoir une sorte d'assembleur portable (ce que tu soulignes par rapport à son poids mais lié aussi à son expressivité).

+1 -0

Sans parler que cote optimisation, ton compilateur sera toujours meilleurs que toi et donc des indicateurs plus haut niveau voire totalement automatique donnent de meilleurs resultats. Si l'absence de type et les pointeurs du C etaient l'arme ultime pour l'optimisation, je ne pense pas que le tri de la bibliotheque standard du C++ soit environ 30% plus rapide sur de gros traitements par rapport au standard qsort du C.

Si je puis me permettre une suggestion…

Il semble que nous soyons plus ou moins tous d'accord pour dire qu'un débutant aura tout intérêt à commencer plutôt par du Python, du Haskell ou un langage équivalent que par du C, aussi bien en terme de simplicité que de stabilité du code. Que s'il veut vraiment commencer par un langage assez bas niveau, le C++ a beaucoup plus d'avantages par rapport au C qu'il n'a d'inconvénient.

Cependant, la plupart des « grands langages » (j'ai regardé pour Java, Python, Ruby, C#, Perl, PHP et Haskell) reposent sur une implémentation (compilateur, interpréteur ou machine virtuelle) écrite en C/C++ ou dans un langage qui repose lui-même sur une telle implémentation, voire commencent par produire du code C avant de le compiler. En outre, la plupart de ces langages permettent de créer artificiellement des bibliothèques et se contentant d'envelopper une bibliothèque en C, voire implémentent un certain nombre de leurs fonctionnalités natives par le biais d'une telle bibliothèque (par exemple, l'arithmétique multi-précision fait presque systématiquement appel à GMP en sous-main). Enfin, de mon expérience, le C est souvent utilisé comme pseudo-code pour expliquer un algorithme et sert souvent à réaliser l'implémentation de référence d'un algorithme donné (par exemple, fonction de hachage ou algorithmes cryptographiques).

D'où mon idée : plutôt qu'un cours destiné à apprendre le C pour développer avec, pourquoi ne pas faire un cours de C destiné à simplement comprendre ce que les autres écrivent dans ce langage ? À l'issue de ce cours, l'apprenant serait capable de lire du code C écrit par quelqu'un d'autre de manière à le porter dans son propre langage, et de comprendre pourquoi son propre langage réagit d'une certaine manière du fait de ses soubassements de C : par exemple, on comprend mieux pourquoi la fonction file() de PHP renvoie un résultat bogué quand on essaye d'ouvrir un binaire, quand on sait que c'est une limitation des fonctions C utilisées en sous-main.

À mon sens, cela obligerait malgré tout à traiter l'essentiel du langage et constituerait donc une bonne référence, mais la manière d'aborder le sujet permettrait de vraiment distinguer notre cours de tous ceux que l'on trouve partout sur le Net. En outre, cette méthodologie permettrait d'insister beaucoup plus sur l'aspect algorithmique (comprendre la structure d'un programme pour le réécrire dans un autre langage), ce qui semble être une demande.

+3 -1

Quand en C on passe des données par adresse à des fonctions à l'aide des pointeurs, il ne faut pas voir ça comme de l'optimisation AMHA.

Stranger

Rassure toi ce n'est bien évidement pas ce a quoi je pensais. Quand je parlais d'optimisation, je n'employais pas le mot à la légère. Je pense plus particulière ce genre de choses : lien

(D'ailleurs, c'est un lien que je recommande vivement à tous ceux que ca intéresse.)

Je ne m'informe peut être pas assez sur les autres langages mais c'est le genre d'optimisation que j'ai du mal à imaginer sans pointeurs.

+0 -0

Il y a une chose qui a été dite et que j'approuve plus que tout : un tutoriel détaché des langages et qui enseigne l'algorithmique. Si quelqu'un en sort un demain, je me lance dessus directement car c'est quelque chose que je n'ai pas encore trouvé dans les tutoriels axés sur un langage en particulier, ni ailleurs.

poliorcetics

Ça existe pourtant. Voici rapidement deux ressources, une de chez nous et une plus académique.

+0 -0
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