Si tu veux mon avis, le discours "il faut connaître plusieurs langages" est déjà dépassé. Maintenant c'est une méta-connaissance qu'il faut. Je m'explique :
Dans la vraie vie, le langage est souvent imposé soit parce que tu as déjà du code existant, soit parce que c'est préciser dans le cahier des charges, soit encore parce que tu vas avoir recours à des libraires précises. Et même dans les cas où le langage est au choix, il faut avoir des éléments pour faire un bon choix.
Du coup, ce qu'il faut c'est une connaissance générale des différents paradigmes de programmation, de leurs avantages et inconvénients, et savoir dans quelle case rentre chaque langage de programmation classique.
Après, c'est vrai aussi que c'est en forgeant qu'on devient forgeron, mais il faut garder un certain recul. Et puis le bagage théorique permet de s'adapter très rapidement à un langage qu'on ne connaît pas du tout.
Pour programmer en C sous linux, tout ce dont tu as besoin est dans les paquets suivants (ce sont les noms debian, il peut y avoir de légères variations sous ubuntu) :
build-essential = ça t'amène gcc (compilateur) et make (de quoi rendre les compilations plus automatique, pour le décrire vite) entre autres.
gcc-doc = documentation de gcc. C'est peut-être inclus d'office dans build-essential sous ubuntu, à voir si "man gcc" marche sans ça ou pas.
vim/emacs OU eclipse/anjuta/code::blocks = de quoi éditer ton code. J'ai coupé en deux car tu as les éditeurs de code et les environnement de programmation. Je pense que dans un premier temps, il vaut mieux se concentrer sur les éditeurs de code. Déjà, ils sont meilleurs pour l'édition du code. Et ensuite ça te permet de découvrir/comprendre comment marche la phase de compilation (transformation de code en exécutable), ce qui est un point important (qui est masqué par un simple bouton dans les environnements de programmation).