A lot goes into how the teacher is as well. I have reflected back and thought how a particular teacher could have taken a better approach. Knowing a programming language is fine, but understanding the concepts of programming is more important (logical reasoning). Its not an exam where we have to do everything without reference or help. Syntax is available on Google/documentation. You need to have good capability of applying logic. Take it like driving a car. Learning to drive is easier, but knowing when to apply breaks - how much gap to left while driving behind, knowing when to speed up or slow down is more important , and a programming language is just make/model of the car/bike, if you are good, you will be easily be able to switch over to a different vehicle .. hope you are getting the bigger picture.About C - You dont know where you are going to get into. Its not like in a hotel, wherein company will ask you (as a fresher) which dish you would like to have, i.e which language/platform would you like to work on. For example, if you had told me that I would be working on whatever I am working on now, I would have been very surprised. But, here I am.If you are going to get into service based companies (Wipro etc), then mostly its maintenance.. you would be involved in modifying (incl some development), maintaining & supporting existing stuff. Development alone from scratch is a rare breed, but exists. Product companies have more development work involved.I dont know much about CS Engineering (Especially things that could have changed in the past decade). I think only basic, if at all, will be taught related to gaming engines,graphics and Animation. Or you may need to do specialization courses from outside privately.