ИМХО, JAVA/Python/C#/... - плохие языки чтобы на них учиться (из-за ООП). То есть надо понимать что уметь программировать "вообще" и уметь программировать на этих языках - это разные вещи.
Меня на хабре, за похожие непопулярные и холиварные мысли заминусовали
http://habrahabr.ru/qa/38309/#answer_147063Учить начиная с Си не советую, начинайте с простого, лучше спускаться вниз с верхов: JavaScript -> Java или C# -> C++ -> C (такая иерархия слишком образная и холиварная, но сойдет).
В данном случае это поэтапно позволит изучать сначала просто алгоритмы (JavaScript), затем объектно-ориентированный подход (Java или C#), затем к этому добавляется самостоятельный контроль за памятью (C++) а уже после этого вычитаем синтаксический сахар и объектную ориентированность и получаем голый C (дальше только ассемблер и машинные коды).
При обучении именно Си без понимания более высоких языков программирования поставит в тупик то, как и что в нем реализуют другие программисты, дело в том что в библиотеках очень старательно реализуют вкусности, которые появились позже в более высокоуровневых языках, и делают это ограниченными средствами языка — например на макросах (язык над языком — предпроцессор), и пытаться понять даже самые простые конструкции будет очень сложно.