Avant d'entamer la programmation, commencez par etudier les algorithmes, en commencant par les tris de base (tri par insertion, tri en bulle/par permutations, tri fusion, tri en tas, quick sort, etc.). Puis petit a petit les manipulation des structures de bases : les arbres, les graphes, b-tree, etc.
Les gens qui n'etudient pas les algos et qui disent programmer, je les compare volontiers a des gamins de CP qui se disent capables d'ecrire du proust. (comprenez "ridicules au possible")
Je ne recommande ni C++, ni Java, qui necessitent la comprehension du paradigme objet, et encore moins C qui est tres obscure pour les debutants (surtout a cause des pointeurs, qui en derouteront plus d'un), a mon tres humble avis. Et probablement pas bash. Je vous suggere un langage de haut niveau ou de presque-haut niveau pour commencer.
Mon experience personnel a ete de commencer avec pascal. C'etait il y'a 12 ans et on trouvait deja ca
old school, mais ca a ete utile en terme de comprehension. Puis un langage lispien (scheme, en l'occurence) pour la manipulation de fonction, la comprenhesion des concepts tournant autour de la recursivite,..
objet (C++, plus souple que C tout de même, Java, OCaml, même Perl, Python ET ADA).
Et CLOS alors ? :p
Python est sans doute un bon candidat pour debuter.