un langage où tu fais l'allocation mémoire à la main, c'est un langage de bas niveau

(ou de moyen niveau mettons, mais le C a d'autres features qui en font un langage de bas niveau. Enfin ça dépend ce qu'on fait en C, disons qu'il est utilisable à moyen niveau si on veut, c'est un peu un mélange. Mais haut niveau, laisse-moi rire...)
et ça me paraît assez irréaliste de coder en C correctement sans rien connaître du fonctionnement de la machine derrière (bon tu peux en connaître plus ou moins, et ça dépend ce que tu codes, pour hello world ok ça va, mais bon ^^)
Un exemple : tu es à peu près obligé de connaître la représentation interne des chaînes de caractères pour les manipuler sans faire un programme qui plante aléatoirement (si tu sais pas ce que tu fais tu te retrouves avec des buffer overflow à coup sûr). Et d'ailleurs tu es très souvent amené à utiliser cette représentation interne directement... bref la manipulation des strings en C, par exemple, est absolument de bas niveau.