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.