Perfect Guide to students in Indian colleges taught programming
In my second year in college (2010) we had to undertake Data Structure course. The course was considered to be one of the toughest courses at that time and moreover, the difficulty level was further compounded when we got to know that the instructor of the course was Prof.
He is a brilliant professor but quite a taskmaster. The seniors had already warned us that his assignments will leave you with sleepless nights.
Now the course was to be taught using Java Programming language and none of us had any idea about Object Oriented Programming. Although we did not expect him to teach us Java Programming we at least expected initial tutorials from his Teaching Assistants, plus we really wanted to learn everything about the macro recorder.
On the very first day, he gave us the good news that we had to submit our first assignment in the next week. On reaching our hostel we opened our assignments and despite staring at the assignment for about 1–2 hours we (7–8 batchmates) could not make any sense of it.
We had to use the concept of Multithreading which is a very advanced concept and usually discussed at the end of any Java Programming book. So here it was, we were expected to master it without having ever written even a Hello World program in Java!
What happened in next few days is something that I will never forget. All of us were literally spending countless hours in understanding the basics and then completing the assignment. One could also not copy the codes of others as our codes were checked for similarity and there were a heavy penalty and even suspension of the course on being caught.
Luckily, within 10 days most of us learned JAVA and all associated concepts.
Although one might not agree with the teaching methodology it seems to work perfectly well in IITs.
How are students in Indian colleges taught programming?
This answer will specifically try to elaborate the current methods of teaching programming to first years at IIITH. In my opinion, the first step in programming is learning the semantics of programming languages with help of a language like C and the second step is data structures and algorithms. These two courses are taught at IIITH in first and second semesters respectively. I’ll try to write about main aspects.
1. Faculty and class:
The professor usually(except a few exceptions) presents basic features of programming language C like recursion, arrays, pointers etc. with a mix of algorithms like Newton’s sqrt method, Euclidean gcd etc. In DS course, classes consist of theory about data structures and algorithms. The Minimal syntax is discussed in classes.
2. Programming Assignments
An online judge(OJ) which tests programs is set up and all assignments are graded through OJ. Problems in CPro course include implementations, linked lists, sorting, sieves, binary search, modular arithmetic etc. Here is a snapshot of the status page. Language is kept C. C++ is allowed in later stages of the second semester because by then students have implemented in C the STL data structures available in C++.
Copying such assignments leads to very strict action. So, major of the life in the first year at IIITH consists of all the fun with OJ(Wrong Answers, TLEs and most eluding ACs). OJ is just up in the air during assignment times.
A search “oj” in my feed brings up various posts like “OJ is bullshit!” and a lot of other posts describing what a monster it is.
Following is a picture before one of the assignment deadlines. The Internet is not provided for first years, but this particular location in the hostel has internet accessibility due to a workaround.
A 3-hour lab is held every week which aims to make the proper introduction to the C language and implementation aspects. Being a Data Structures TA I’ll tell you about the structure I follow in the lab. The lab begins with detailed introduction to the algorithm/data structure, followed by implementation details. A problem consisting of input/output files is formalized which is usually the direct application of the DS/algorithm. Often problems are solved on online platforms like SPOJ/Codeforces in the labs. Students can ask for implementation related issues, and there are 2 TAs per 60 people, hence proper attention is paid to every student.
Two lab exams carrying good weight are held in the course, which to consisting of submitting problems on a platform within a fixed time span.
4. Teaching Assistants and the coding culture
IIITH is assumed to have the best coding culture among universities in India. In my opinion, one of the main reasons behind that is TAs of courses like DS and CPro which introduce freshers to programming are themselves experts in competitive programming and ACM ICPC World Finalist and make sure the spirits stay. One of the things I vividly remember is that usually used to give WFs goodies to the best solver of a problem in labs. I myself distribute T-shirts(that I got from competitive programming) in labs.
5. Result of the process
At the end of the first year, a student is proficient in C and C++ and by then implemented in C data structures and algorithms like graph algorithms(Dijktra’s, Prim’s, Kruskals etc.) BSTs, AVL trees, stacks, queues, heaps, tries, segment trees etc. A student by then is very well acquainted with competitive programming. No doubt, IIITH keeps producing world finalists and enormous GSOCers every year.