Both these courses will aim to introduce the methods of algorithmic thinking, analysis of correctness, and design of ``small'' building blocks of efficient algorithmic procedures. They will also introduce the issues involved in translation of algorithmic ideas into working programs. Neither of these two courses will directly address the engineering issues in design of large software systems, but will concentrate on the fundamental issues of correct and efficient design of the primitive building blocks. These courses are largely programming language independent, but will introduce major programming paradigms like the functional, imperative and object-oriented.
You are unlikely to be able to undertake the design of large and complex software systems - for that you will need to follow up these basic courses with more advanced courses in Computer Science and Software Engineering. However, you should be able to write correct and efficient codes of moderate size. More importantly, you can expect to be able to do some clean algorithmic thinking and problem solving, and be ready for further study of computing. You should also be able to pick up enough skills to program in almost any programming language with a reasonable amount of effort. Indeed, some past students of these courses have been able to write wonderfully creative programs immediately after these courses in a variety of programming languages which include ML, Java, C++, Matlab, Perl, Python, ...
Mainly because some students come into IIT with two or more years of exposure to computing from high school and some others come in with no background whatsoever. The instructors have found it problematic to handle the two groups together, especially at the beginning. The uninitiated tend to get intimidated by the ``somewhat'' initiated. However, according to most instructors, the advantage of the additional exposure is not significant and things do get evened out about half way through the courses.
The instructors don't think so, but it is true that many students do. The truth is that there is usually about 70% overlap between the two courses, often including the problems that get discussed in the class and sometimes even the exams have common questions. Also the performance statistics over the last four years show no major difference. If anything, CSL102 grades have been better on a few occasions.
There is bound to be some advantage. Not because they have done CSL102, but mainly because they have additional two years of exposure. However, this advantage is not alarming and CSL101 students can easily overcome it with reasonable additional effort. In fact, the statistics of last four years show that people who do well in CSL101 also tend to do well in CSL201 and people who do badly in the first course tend to continue with their poor performance in the second. The situation is similar for those who have done CSL102. It is definitely not the case that any significant percentage of CSL102 students who have done poorly in CSL102 can suddenly excel in CSL201.
It is the same reason why budding young cricketers are painstakingly taught batting techniques in cricket academies before they are encouraged to bat like Virendra Sehwag. While there may be geniuses who can hit the ball consistently out of the park with total disregard for foot positions and ``correctness'' of weight transfer while hitting the ball, most aspiring cricketers would do well to learn the basics of ``technique''.
You should know the syntax well enough to be able to program he assignments. There is absolutely no need to find out syntax details beyond that. This is a course on principles and not on the detailed features of any programming language. Actually, it should be sufficient to use the example programs provided by your instructor and the TAs as templates to learn the necessary syntax for this course.
Talk to your instructor and the TAs and let them know exactly what is bothering you. Be open to their suggestions.
Yes. Read ``What can I do to avoid doing badly in these courses?''. The situation is not beyond redemption, but you have to evaluate the situation. If you are in control of things in general and just have not been able to solve one or two unexpected ones in the examination, then there is no need to worry. Relax, and things will most likely work out. If, on the other hand, you have difficulties in programming and general understanding of concepts, please talk to the instructor and re-evaluate what you are doing wrong.
There is something problematic with the way you are approaching computing. However, things can be salvaged from here - please talk to your instructor.
Tough luck, there are all types. No, he can't be changed. You can of course try to bash him up at your own risk, but beware that most CSE faculty members are Judo experts.