So, good morning. We are into the second session. As I said, I will quickly discuss an example which was part of the laboratory assignment and then I will go over to the discussion of group projects which we conducted at IITB. This is just to give you a glimpse of how a programming course is taught here. Just as an example, if you find something useful you can take it. I am specifically going to discuss only the group projects. There is another important announcement. The news is that the Honorable Minister for Human Resources Mr. Kapil Sibble would like to talk to all the participants. The tentative time given is 12.30. So, we might interrupt our ongoing proceedings for a short while to let the Honorable Minister address all of us and maybe I will arrange some interaction during that time so he can see how this workshop is going on. So, let us go ahead with the example that I am considering here and that is the load balancing problem. So, this is nothing new. We will very quickly go over it. Most of you have actually cracked this algorithm. I am just trying to show how I would logically arrive at the final program from the problem statement. And in the second part of course we will discuss the course projects in CS101 which is the first year programming course at IIT Bombay. So, here is the problem. There are two trucks. So, each of which contains packages having different weights. We make an assumption that all weights are integers. It is an incidental assumption and there could be interesting variation to the problem if the weights were sort of fractional and then we would come to the nearest weight etcetera. But that is not the problem at hand. The problem is we wish to balance the load in both the trucks and wish to find out if it is possible to swap exactly one pair of packages between two trucks to achieve this. Incidentally, I got a query from one of the participating teams that if the number of packages are same in both the trucks, they believe this problem can be solved. However, if the number of packages are different, they do not think that the problem would have a solution. I would like to submit that they are wrong on both counts. First of all, the number of packages in each of the trucks does not matter. For example, one truck has 78 packages and the other truck has 44 packages. I may still be able to find a specific pair which balances the load after swapping. Second, if they are equal number of packages, there is no guarantee that I will be able to solve a problem because I may simply fail to find out one pair of packages on each of the trucks which when swapped would balance the load. I will illustrate this during the program, that particular condition. Many of you have worked out that condition already and we will actually see how that is factored in. The point I am making is that when I am solving a problem, I will start with the problem statement first. Now, this is the problem statement. Please note, it does not talk of variables array, input, output, computation, nothing. This is a problem and that is the fact which I believe we must emphasize to our students. They are not learning programming language for the sake of it or for the sake of learning syntax. They are going to be required to solve real life problems. Real life problems do not come defined in an algorithmic fashion the way we often tend to ask questions in our exams. Real life problems typically come in this kind of form and we may have to translate this language into our data structures, our algorithm to attempt to solve this problem. So that is the key point. So I have tried to go through the process. So this is the problem statement. Now let us look at initial thoughts on the program design. So first question that occurs to me as a student, how should we represent the problem data? So what is the problem data? There are two trucks. There are packages in each truck. Each package has a weight. Since we will be required to compare weights of packages from each truck with those in the other. Now this is the first important observation that there are packages here, packages here and ultimately I may end up comparing the weights of every pair. That means the best way would be to read the respective load values in two arrays. This can sort of come obviously, but it is stated here. Now I have to assume some maximum number of packages in each truck. Why? Because I have to declare the size of the array. Well, 100 appears alright, but if I am talking about a very large truck or a container, I might even make this number 500. 100, 500, 1000, 2000 doesn't really make any difference. But the assumption should be realistic, number one. And whatever is the assumption, it should be stated explicitly. Typically our students when they write the program, they will declare an array. And they will declare it as 10 or 100 or 1000 depending upon what sizes they have seen in the examples that we teachers have shown them. So if for example up to the point all arrays that I have declared have a size 10 or 10 by 10, then intrinsically every student will tend to write a size of 10. It is important to emphasize that maximum size of an array has nothing to do with what programs you have seen in the past, but has everything to do with what problem you are solving. So again I repeat, I make an assumption, maximum number of packages in each truck and I state that assumption. Then I say we will use integer arrays A and B of size 100. Each will have M and N elements respectively, which is actual number of packages. Why integer? Because we have assumed that the weights are integer. So far so good, very straightforward, no problem with these assumptions. Now I state the problem in programming terms, restate the problem. So my problem was that there are weights in the two trucks and I want to swap exactly one pair of weights. In terms of the numbers in my arrays now, I redefine the problem to be following. There may exist pairs of elements of the type X, Y such that X is an element of A and Y is an element of B. So I am taking some arbitrary element X in array A and some element Y in array B. And now I want to compare, I want to see that if I swap these two. So that is X goes from array A to B and Y goes from array B to A. Then the resultant arrays will have the property that sum of elements of the new array A is equal to sum of elements of the new array B. Notice how easily and in a very logical fashion we have been able to translate a physical problem into a mathematical formulation or may be an arithmetic formulation, whichever you call. But formal mechanism of stating what we want. So what should program find out? The program should find out if there exists any such pair of elements X and Y. Then we proceed to think of how we will solve this problem. How will we find this pair? Well, since I have to compare some element of array A with all elements of array B or I may go other way round, I take one element of array B and compare it with all elements of array A. Doesn't matter whichever way the both the solutions are symmetric. So here I am saying one possible algorithm is to iterate on one array B and for each element of array B which represents a weight Y, I first find out the permissible value of X. See the point being made is I have identified an element Y. Now if I have to swap Y with some element in array A, what should be the value X such that after swapping the sum of the elements of the new modified array So the question how is answered by this condition and once this condition I know what is the value of X. Now I find out if A has an element whose value is X. Please note that the determination of value of X does not require me to examine an element in A. Knowing the sum of all the elements in A, knowing the sum of all the elements in B and knowing which particular element Y I am looking at in array B is adequate to tell me what should be the value of X. So we shall see how that is derived. So this is generally the initial thought and after this we can proceed to write our program. But what is important for us to emphasize to our students you will write your program only after doing this. I would like to digress a bit and suggest the following. Ultimately our students when they write programs as let us say professionals whether it is with TC as Infosys or IBM or whatever they will be required to rigorously follow software engineering principles. Software engineering is not a course taught to all undergraduate students. It is typically taught to computer science and IT students. But first year students of all branches take our course. Is it not useful and necessary in fact that students of mechanical engineering, mathematics, geology whatever whenever they apply programming to solve real large problems from their own field they should also be following some basic software engineering principles. There is no occasion in the entire syllabus of their own disciplines where software engineering will be conveyed formally to them. But at least those of our students who are interested or who have to write large programs can at least be told in the formative stage when they are learning first programming language the basic principles. That is the reason why the notion of analysis, the notion of program design, the notion of good coding style, the notion of testing all has to be imbibed without using these bombastic words without really talking about whole software engineering because this is not the place to do that. Observe that all the examples that I have considered in this workshop and the ones which we typically consider in our CS 101 follow this pattern. There will be a problem stated, there will be some kind of a modeling, there will be some evolution of an algorithm and when the program is written there will be lot of comments in the programs. This effectively embodies the principles of software engineering without calling it software engineering. So that is why you will find that these three or four slides which I have shown here if you show similar slides for any problem that you discussed in the class it will go a long way to tell the students that perhaps this is the style they should also follow when they construct programs. Otherwise what happens is you state a problem and students tend to write a program and to make matters simple we state a problem in algorithmic terms only. Find the kth maximum of n numbers. Now this is a mathematically stated problem it is well understood and very easily mapped into a sort of programming paradigm or programming model that they have. They do not have to exercise their mind. Unfortunately in real life generally never ever our students will be required to write programs for such well defined problems. That is indeed an additional purpose of programming project which I will explain later on. So sorry for the digression but I thought this was an important aspect so I will mention this. We now go over to the next slide where the program itself is now written. So this is a program for load balancing. It has the usual includes it has integer arrays a and b. m and n are supposed to be number of elements in each of these representing the weights. i, j are sort of index variables you can guess. Someone and some two are the two sums of naturally of that two arrays of m and n elements because we have to balance these two sums. If is the current difference between the two sums and x and y are two elements which are going to be swapped. Notice that I am verbally mentioning all of this. It may be a good idea that while explaining a program in the class I might just have this but if I ever give a handout then the handout should contain detailed explanation of each variable or array what it will contain etc. It is useful that. Now read numbers in two arrays. So I read m, I read m elements of array a then I read n and I read n elements of array b. So far so good nothing very difficult to understand. Now I find some of all elements of each array because that is what I have to balance. Simple iteration someone is 0 for i equal to 0 to m minus someone plus equal to a sum 2 equal to 0. The second iteration should run from i equal to 0 to n minus 1. Now for i equal to 0 so I have found out the two sums. I find out the difference. If the difference the absolute value of the difference absolute value of someone minus sum 2. So that means the diff parameter is always positive. Now I do a very interesting thing. If diff modulo 2 is not equal to 0 what would that mean? Diff modulo 2 can be either 0 or 1. If the remainder is 0 that means the difference is an even. If the diff modulo 2 is not 0 means it will be 1 then the difference is r. What is the significance of this? Well the significance is that if the difference of sums is not even then the desired elements do not exist. This is actually the condition. So it is not the number of elements in each array or each struct but it is whether their sums of the weights differ by even number or odd number. If they differ by odd number you cannot find a pair. This can be proven theoretically. For those who are interested I would suggest that take one sum to be odd, another sum to be odd, one sum to be even, another sum to be even and one sum to be odd and another sum to be even. So when the both the sums are even or both the sums are odd the difference will be even. But when one sum is odd and one sum is even you can prove that no x and y can ever exist. Anyway so this I leave it to you. It does not really matter even if you do not find it but if the sum is odd as the difference is odd and you proceed with the algorithm you would not get anything. So this is basically you are reducing the unnecessary work of the computer. Here is a load of comments. Now locate the elements meeting the criteria. If x is element of A and y is element of B we need to find x and y such that sum 1 plus y is equal to sum 2 plus x. This is the balancing part. I find x from array A whose sum is sum 1. I find y from array B whose sum is sum 2. When I swap them y will go to sum 1 and x will go to sum 2. So sum 1 will be actually sum 1 plus y must be equal to sum 2 plus x or x is equal to sum 1 minus sum 2 plus y. In general for sum j we are looking at B j then for sum i we must have a i equal to sum 1 minus sum 2 plus B j. Rest is technique. We can see how this is implemented. So I just say for j equal to 0 to n minus 1 start with sum B j. Find desired value x. So B j is actually y now. So x is equal to sum 1 minus sum 2 plus B j. Search for x in array A. All that I do is I locate I go through all the elements of array A. Just for the sake of later discussions please remember the iterations that we are setting up. This is an outer iteration which executes n times 0 to n minus 1. For each of these iterations I take up some value in array A. So again the value I am choosing is from 0 to m minus 1. That means if m and n are roughly equal then I am actually running two iterations one nested on inside the other and the internal comparison is a i equal equal x will be executed roughly n square times here n into m times. We just record this fact. We can go through this and discover it later by re looking at the program but effectively if I do find such a thing I will output a i and b j. These are the two elements which need to be swapped. Else break. Break is a statement which says I have not been able to find anything I will abandon the search. Now I will analyze the algorithm. If m is equal to n the problem size is n. In our program we have an outer iteration executing n times every time considering one value from the array b and for each outer iteration we have an inner iteration also executing n times. Notice I am presuming m is equal to n. Please note that when I do analysis of algorithm I am actually interested in finding out the complexity of the algorithm as some of the later slides will show this is not to be confused with the execution time which is given in minute seconds or hours. That is nothing to do with analysis of algorithm. Analysis of algorithm is to find out the order of complexity. So order of complexity remember we said when size tends to infinity that is when we want to find out the order. That is why m and n both are integers roughly similar in nature because both maximum values are 100. So there is no harm in assuming this for the analysis problem. Now we are checking every value in a for each value in b and therefore the complexity of this algorithm is order n square because the innermost computation in this case a comparison is executed n square times. So as n increases whatever other parameters will move away and the order will remain n square. Now suppose I sort array a then I can use binary search on array b. So this is what I have indicated. If we search a using binary search the inner iteration will execute only log n to the base two times. So instead of executing n types it will execute log n to the base two times significant reduction and therefore the complexity of our algorithm will be not n into n or n square but it will be order n into log n to the base two. Algorithmic complexity of n log n to the base two is decidedly a much better algorithm or more efficient algorithm than order n square algorithm. I would like to take this opportunity because I saw there was some confusion because the terminology that I had used probably in a hurry I made perhaps some mistake somewhere. You know when explaining the order of complexity of the algorithm I started with execution time an equation for execution time and then extended that logic that when size tends to infinity what would be the predominant term and we said that will be order of complexity. Unfortunately in the process some of the participants have got a notion that the execution time which we measure through the time command is the algorithmic complexity. I would like to very very emphatically state that that is not the case at all. So this is an important note please ponder over it very very carefully. So I am saying some of us are confusing between the complexity of an algorithm with the time required to execute a specific program as seen from the time command. The time required to execute a specific program has absolutely absolutely nothing to do with algorithmic complexity absolutely nothing to do with. The time depends not only on the equation that you have formed how many comparisons how many this etcetera etcetera and the time as I said could be some k 1 times n square plus k 2 times n etcetera which is a mathematical representation but the actual time we measure using time command which gives us system time user time total real time etcetera. Please note that apart from the way you have written your algorithm the actual absolute time will depend on several other thing how good is your compiler how good is the machine on which you are executing the same program with the same compiler executed on a faster machine may execute in 2 seconds whereas on your machine it is taking 20 seconds. What are these these are actual execution time as measured by the watch these execution times are important to us because we want to know how long a program takes to execute but how long a program takes to execute measured in real time in clock has absolutely nothing to do with algorithmic complexity. Thus we should not use terms like reduce complexity by 6 seconds or user complexity or system complexity this term is wrong we are talking about time of execution which has absolutely nothing to do with complexity. The complexity of the algorithm stays same independent of whatever is the execution time on different machine even if I modify some instructions unless the basic nature of the algorithm changes there is no change in the complexity. So I repeat complexity is never expressed in time never seconds minutes hours is nothing to do with complexity. Complexity is only expressed as an order of a function of n as n tends to infinity. So complexity is only expressed as an order some f n representing the behavior of an algorithm as its size n becomes very large or tends to infinity that is the notion of algorithmic complexity or time complexity. Unfortunately when we call it time complexity we tend to think in our mind time means second that is different. So I will conclude this small but important note by reiterating the following. Execution time of a program is something that we can measure with our wrist watch or by the time command or whatever it is an important parameter to us because that is what will tell us that in general if this I have written a program let us say to do online transactions on back then how many seconds I will get my response or totally how many transactions can be completed with this server and so many client machines in a day or in one hour or something like that. So these are important parameters and in fact when people perform benchmark exercises performance benchmark they are actually interested in these times. This is one side again I reiterated all of this has nothing to do with algorithmic complexity. Algorithmic complexity is only a mathematical notion it is expressed as big o it is called big o notation order of f n where f n is actually some function of n and that function represents the behavior of an algorithm as n becomes very large that is why algorithmic complexity is always stated as order n square order n cube order n log n order log n etcetera and that represents the fundamental characteristic of the algorithm in terms of how efficient or less efficient it is computationally or theoretically. However the measurement of time should be recorded exactly as what it is namely the time of execution of a program. The best way to remember this difference is when we use time command or stopwatch or anything what we are measuring is execution time of a program. When we comment on the algorithmic complexity we are not measuring any time we are commenting on the behavior of the algorithm as the size n tends to infinity and represent it as order something something. Sorry for taking too long on this but this is an important aspect so I thought I will emphasize this adequate with this we go over to the discussion of CS 101 project activities at IIT Bombay as I had mentioned to you it is a common practice in most courses particularly practical courses which require people to develop skills and concepts in activities such as programming it would happen in practically all most computer science courses I would say and many courses in other disciplines as well that students are required to do a group activity towards the middle from middle of the semester to end representing some problem solving ability development and demonstration. In this particular case so CS 101 or the first year earlier it was called CS 4101 earlier it was called something else I mean like most of you our institute has been teaching this programming course for well over 50 years or 40 years not 50 really 45 or whatever and it has undergone various changes but the course project or the group project was always an integral part of the thing. Now in this particular offering since I took CS 101 last time I had the liberty of deciding how I will organize the course projects I had a large class as I said I had over 800 students so the class was divided into 40 batches each batch had 20 students and these 20 students were divided into 5 teams compare this with our workshop participants about 550 or 600 people now what I was saying is that the number of participants that we have in this workshop would roughly resemble a large class and a remote center would roughly resemble a batch of course the batches are not evenly distributed there are some centers where there may be as few as 10 or 15 participants there are some centers where there could be 60 or 70 participants that does not matter the point is that there are such batches like this what I had done is that having got equally distributed batches I divide each batch into 5 teams so each team had 4 members you will observe that this is similar to what I have suggested to our participants form teams of 4 members each and if you have not exactly divisible by 4 numbers at your thing some some teams may have 5 members each now an entire batch was required to do a single project involving the following task entire batch remember all 20 students not just individual teams in our workshop we are limiting the group and team exercise to just one team so that team will discuss work out something and within 2 weeks it will submit a mandatory assignment and if they so wish optionally they may continue to work that is our proposal for workshop but for C.S. following what I did is what I am explaining so we had these 5 teams into each batch there were 40 batches so there were 200 teams and 40 batches each batch was required to do a single project involving the following task task 1 which had 25 percent weightage for the whole course which was a programming project this is the team project except that the team size was much larger what we are calling team here this was batch so there were 5 teams together working on a single problem 5 teams together working on a single problem and there is more to it I will explain task 2 of 10 marks which is 10 percent by the way we have a total of 100 marks which we calculate over the semester there is no sanctity for 100 my total could be 120 marks or 84 marks or whatever because we have relative grading but we generally describe different weightages in terms of percentages so indeed the task 2 had 10 percent weight task 1 has 25 percent weight 35 percent of the total evaluation weight in this entire course was based on this group activities the mid semester and end semester where I think 20 percent and another 25 percent or something and there were some lab assignments whatever so you can see that students took these projects very very seriously because there was a large percent of evaluation attached to that what was the task 2 task 2 was preparation of quiz and exam questions along with answers sound simple now let us look at the specifications of doing this programming projects were defined to be open ended projects what is to be done is not well defined so it is not even like a truck problem now I would like to suggest why not only me but all my colleagues in IIT and most people who take the problem solving approach for teaching programming believe so namely that in real life no problem will come very well defined and yet you have to figure out that a what do you want to solve and b how to solve it so in an open ended project what is to be done is not well defined second when there is a team work involving 20 people that will mean there are skewed efforts this is something that you would have noticed I have noticed it in most engineering colleges when I interact with the students typically our students in other colleges do a group project only as their final year project typically the groups are 3 4 students in invariably even in a 4 student team you will find that they have one or two sleeping members that means they work very little if they are smart they will understand what is being done so if you take a viva they can explain everything to you but if you ask them how much they have if you really ask them honestly how much work they have done you will find that they have done no work now these are two extremes in a team some people do all the work some people to do no work however even if everybody puts in the effort it will so happen that the amount of work both qualitatively and quantitatively done by different members of the team will differ it is natural there is nothing wrong in it so let us not imagine that we must force every student to put in exactly the same amount of work and to expect that is wrong according to so we have factored this possible not possibility but fact into account while doing our evaluation I will explain how so teamwork will mean skewed efforts but we emphasize that the learning here will be unique and important one you learn to take decisions you learn to take decisions about algorithm that you will use you learn to take decisions how many functions you will write you learn to take decisions about who will write which program in the team you learn to take decisions who will do variety of other work so spend time on deciding in naming conventions file structure memory and data structure identify functions write stubs stub is a dummy function which does not implement the desired computation while testing it actually takes in whatever value and returns the correct value what is the objective of a stub you when you are writing the rest of the program you do not depend upon somebody coding this function completely before you can test your program you can write a stub and test your program later on somebody from the team may write the details in that function now this is a neat and natural software engine trick which the teams follow okay we are introducing that sort of naturally to our first year students without again mentioning anything about software engine as we said so these are the programming projects project groups were formed there were 10 groups remember I said there are 40 batches these 40 batches actually were divided into 10 groups okay each of the group together works on four projects are CDA let me explain what was this RCDA this was by the way first time even in IIT we did such an experiment where I assembled really a very very large group so look at 10 groups means what if there are 800 students all divided into 10 groups then each group has 80 students so 80 students are working on four related projects what are these are CDA let me just explain it is not written in the slides the project I had chosen for them was the project involving using fingerprint identification at that time I was working on the national committee on biometric standardization for the most ambitious program that government of India has undertaken our well-known friend Nandan Nilekan is heading that it is the unique ID project for the country and the unique ID project depends upon capturing fingerprints of all citizens ensuring that unique identity number is given only for a because every fingerprint is unique so there is no duplication I cannot for example register as Deepak Phatak at one place and Shyamlal Sarada at another place with the same fingerprints so even if I go to some other village and give my fingerprints the registration process is supposed to catch that subsequently when I am registered if I go to a bank I can I can actually put my fingerprint and and do that application so do a banking transactions so these were the four projects that were given to the group R stood for registration C stood for consolidation where they consolidated fingerprints of all the students in that batch D stood for deduplication though deliberately some student will try to register twice and the deduplication team is supposed to analyze those fingerprints and remove that and A stood for application they have to write a simple application most groups teams ended up writing an application for attendance or some such thing well I will continue with the discussion in the on the groups but I am told that MHRD is logged in first I will go over to MHRD to see who are the people in attendance they are connected on a view good morning to you sir I am professor Farrakh from IIT Bombay and there are about close to thousand teachers participating from 30 remote centers they belong to more than 200 institutions and we are delighted to see that you could find some time from your busy schedule to watch us and talk to us I would request you to kindly address the participants briefly over to you sir professor it's you know you are you have the stage to address the participants not me all that I want to say is congratulate you this is I want to congratulate the the ministry I want to congratulate all those who are participating in this program to make this possible because this is the future the future lies in in communicating with each other through long distances the future lies in in in allowing the delivery systems of education to change because in the absence of the physical presence of faculty all over the country because of shortage of faculty it's only through processes like this that will be able to reach people and you are doing human service to society to government to the public at large and I hope that programs like this continue far more frequently through the system that you have put in place I congratulate you for this and I congratulate the ministry for making all this possible thank you thank you honorable minister we are not just delighted but we are enthused by your words I would like to assure you that we'll leave no stone unturned we have started with just 30 centers and 200 colleges but it will be my ambition to try to use this technology to reach all 4000 plus engineering colleges in the country so that any single teacher or a student even in the remotest place should be able to get the best of knowledge which will be culled out from all the participating teachers thank you sir if you are going to be there for two this is this is I think the best example of inclusiveness this is really the meaning of inclusive education you include within your fold a thousand children or two thousand children or five thousand children through technology and it is technology that can make a difference in this country so all of us should instead of being fearful for technology should embrace it so this is really another another thought that crossed my mind and I wanted to share it with you thank you very much and all the best thank you very much sir well dear participants that was the honorable minister of HRD please understand how the program is being appreciated I would like to tell you at this stage that this entire program would not have been possible without not just the funding from MSRD but an extraordinary support in all logistics and great encouragement I would like on behalf of all participants to take this opportunity to thank all the people in the ministry in general and in particular one gentleman Mr. Sinha who is the joint secretary and who has been single-handedly pursuing this important project our thanks to you sir thank you over and out so I was describing we could come back to this project but indeed I am I am so glad to see that this entire activity of arranging such workshops has the support at the highest level from the country's top political leadership not just the top bureaucratic leadership and both combined I think we have a long way to go I think we are really fortunate and what it means is that in coming years we will have more and more such workshops in more and more expanded versions I am CC Pune wants to just say something over to Dr. Sinha to give the NKN connections and NKN proposals of all the institutions who are participating in this particular workshop because we are eagerly waiting for that particular NKN project thank you very much I am CC and I think all our remote centers will agree that one of the problems that we have is lack of good and reliable bandwidth I would like to pass on this request directly to Mr. Sinha kindly give us all the participating centers connectivity through national knowledge network because then we will truly be able to exchange ideas without any delays and with the best quality audio and video I assure you I am CC Pune and of course all the remote centers that even if Mr. Sinha is not personally there I will take it upon myself to ensure that this request goes to both MHRD and to Dr. Chidambaram who is heading the national knowledge network initiative and we will ensure that each one of the 30 remote centers will be part and parcel of these NKN within a few months of time okay we get back now and we get back to work so I was describing the project groups now we said group will have four lab batches and each lab batch will work independently on one project the four lab batch coordinators together will be responsible for taking decisions on all design so notice how the leadership is set each lab batch okay which is part of the larger group so there are 10 groups each group has four projects each lab batch works on one project and each lab batch has a full team of five members so four lab batch coordinators together will be responsible for taking decisions so a leadership is defined just as we have asked you to choose a leader a leadership is defined for these projects the course projects we set the coordinator for a batch in consultation with team leaders so for the batch of 20 people there was a coordinator who was typically chosen from amongst the team leaders will allocate each of the activities under the project to a team within a team the team leader will allocate work to individual members since the work involves not just programming but also testing documentation data and file management schedules meetings etc there is considerable flexibility in the allocation of work I believe it is important to tell our students early enough hot a real life of a programmer what programming professional is when a student passes out of our institution and goes out whichever field programming projects are never one individual projects anymore in this world okay it is not uncommon to find anywhere between 10 people to thousand people working on a single project indeed that is what is the matter discussions under some aspects of softening team organization team work and so on here the attempt is to give them a glimpse of that kind of activity so here is the expectation minimally every student should write at least one program or function for his or her team and additionally should carry out at least one common task for the batch or team so notice that a programming project finally submitted by a batch of 20 students could be anywhere between 500 lines of code to 1500 lines of code it is not expected that every student will contribute exactly equally to the programming effort although it is a course in programming the project is about solving a problem and problem solving in a group work involves so many things that is why I have defined the flexibility that allocation has then we say each student must maintain a record of the time spent for the project and specific work done in that time the categorization of nature of the work could be as shown in the next slide so these are various categories of the work which people have to do notice the kind of activity discussion so if they record a discussion names of participant nature of discussion decisions taken etc design so what is the design for data files algorithm function program actual programming that is coding testing documentation report writing then logistics so for example it was a problem was about fingerprint capture fingerprint comparison etc then maintaining manual records of fingerprints collected uploading files CVS you know concurrent version control system is what we use to manage the code development phase okay I will I will explain this under the miscellaneous topics briefly it's an extremely important utility at the back end such controls version control systems are mandatory whenever large teams are developing project and additionally I said miscellaneous so observe that although it's a programming project the list of activities contain everything including programming and all of them I emphasize are equally important there is nothing less important than nothing more important so minimal expectations every student must write some program whether that program is 10 line program or 100 line program is left entirely to the team to decide next each student must submit the diary entries in the form of a common electronic document on a weekly basis the format is to be decided by the group a simple text format was suggested finally each lab batch will count the weekly total of person hours spent by each team of the lab batch and by the batch as a whole on the project and all individual diary entries for the week in the form of a single consolidated document is to be submitted to batch junior teaching assistant well this is something we are fortunate about I had 60 junior teaching assistant 60 of m tech students attending IIT Bombay compressor as program in the first semester assist in the CS 1 hour I'll later on comment how even in your colleges you can do a similar activity I'll buy slightly different and we said they must also upload it on the moodle so much of it was sort of automatic submissions all submissions are due midnight of each Sunday and there were penalties if the submission was late by as much as two minutes or one minute or even one second so midnight is midnight I said this is a hard deadline the submission need not be perfect but it needs to be complete and in time I would humbly suggest to all participating teacher colleagues that it is very very important to stress the aspect of timely submission ordinarily in the entire engineering education we insist on this but rarely this happens even our examinations we announced some dates then it there is a postponement practical examination in the morning there is a postponement in professional life such things don't occur if there are project deadlines they are required to be met and I think it's a very good idea to use this opportunity of a first-year course in programming to teach them some discipline about hard deadline believe me there will be instances when the students will not keep up with that or whatever but my suggestion is never change deadlines once you define them but you may give them a lighter punishment for not meeting the deadline not the harsh punishment so here is a suggestion do not wait for the last minute target your submission by Saturday midnight incidentally in 95 percent of the cases even from the large class of 800 students we had timely submission and this happens when you make your rules absolutely clear on day one and on the first occurrence of a mishap you refuse to relate don't extend deadlines each weekly submission will include consolidated diary document for the week any design documentation partial program code all files directories should be put together in a single star and uploaded of the batch mode notice that there is an incremental submission if we just ask them to submit their final project then we have no clue on how the progress was made in the project not only us even student teams themselves are no clue how they are progress but if you keep a weekly assignment and with the general breakdown of activities and timetabling that the student teams would have done you will be able to gauge whether the students have worked only in the last moment to do something or whether they have worked progressively the interesting part is the project evaluation the project evaluation was done in two parts remember I told you there were 25 marks for the project 15 marks for the entire lab batch was decided based on their report based on their diary submissions based on their quality of the work and based on the quantitative this was done jointly by the batch junior TA and the group senior TA each group of 40 students had a senior m tech student as a TA and 20 students each had a junior so these five people decided the lab batch grade these marks typically were first I mean broadly they were classified as categories a b and c a grade was awarded a variable marks between 12 to 15 b grade was awarded marks between 9 to 12 and c grade was awarded marks between 6 to 9 generally most people scored well because teams as a whole had done reasonably good work okay I think only one of the 40 batches scored 15 on 15 but otherwise the marks were 14, 12, 11 in majority of cases now this is the interesting point since a student is a member of the batch every student gets the same marks out of 15 now that is to convey that you sink or swim with the group if the group work is bad and let's say the group gets only six marks out of 15 every student in that batch gets six marks out of 15 if the group does exceedingly well and gets let's say 14 out of 15 every student gets 14 out of 15 some of you may ask me is that fair I would answer it is fair because I am teaching them the importance of group activity and please remember that in real life the entire group gets credit or debit to the same extent individually the group members may know who has worked more who has worked less who has contributed more etc etc and for that there is a second component these two components I found that are extremely good components to describe the evaluate or to evaluate the individual's activity one as part of the group so 15 marks for the each student gets the same marks 10 marks however for each student are based on peer review actually these 10 marks for the individual effort how much effort an individual has put in now the question is how do you judge this those of you who are actually and many most of you would be conducting or giving some kind of a programming assignment or something to a group those who have attempted to do that will probably agree that the standard way of evaluating students is to conduct a Viva so they submit a project report four or five students whatever is in a group they sit in front of teachers and teachers ask them questions they make a presentation may be a brief present this is exactly how we used to evaluate group projects earlier by the way our groups used to be five or six people since we no teacher can evaluate 800 students the teaching assistants would that do that job you will agree that m tech students are very smart students and coach properly in the teaching assistantship as good as teachers no difference anyway but one big problem was that when I am taking a Viva then usually I am unable to judge the quantum and quality of work done by every individual student my judgment is based on the answers that student gives me and here is the possibility which I have seen occurring many times I would like to see your experiences I have four students one of them has done extraordinarily good amount of work but is a shy style does not speak well maybe I will not give him ten out of ten maybe I will give him six out of ten because he fumbles or whatever this is another extreme a chap who has done absolutely nothing but two days before the Viva he has spent time with other group mates and say I tell me this tell me that tell me that he is smart enough to understand what the work has been done and then when you ask questions that student gives an elaborate explanation as if everything he has done is it not likely that we may mistakenly judge that student to be the best performer and give him very large money believe me I have seen this happening many times in the Viva misjudgment so the process that I followed and this was followed for the first time for an undergraduate course in IIT I have been following this self-evaluation scheme in my postgraduate courses on information system for last three or four years postgraduate students are supposed to be mature the scheme had worked very well I tried it for the undergraduate students and it worked very well also I will show you what the scheme is I call it peer evaluation so let us see how the students are evaluated by their peers who are their peers students themselves so effectively we say that peer review process is as follows as I said perhaps never attempted by any of you earlier but good time to learn so I told the students that so far in all your life you have given examinations and somebody else has evaluated you and given marks so you may never have given marks to yourself so I am addressing you meaning the students and then I say good time to learn so my instructions to the student award marks out of ten based on the quantitative and qualitative contribution by each student what is the process first initial inputs from the team leaders so team leaders will discuss with the team members and allocate marks out of ten then scrutiny by the coordination committee of all team leaders in the back because different team leaders may award different marks so these team leaders will sit down by this does not take too long the first meeting typically people have reported took about 15 minutes but it was a formal the second scrutiny meeting took about another 15 to 20 the longest what took was the last meeting finalization in a group meeting where every student defends himself or herself so notice there are 20 students sitting together in a huddle each student has been awarded some mark by the team leaders based on the team leaders judgment and the composite judgment now suppose I am a student and I have been given five out of ten I will say why I have done more work he has done less work than me and you have given him seven marks or somebody has been given ten marks these arguments need convincing within the group now here is an important point if a teacher takes my wife I am a student if a teacher takes my wife and if I am a smart aleck I can convince the teacher that I have done all the work and I might even get ten marks but when I am sitting with my peers 20 peers can I claim that I have done all the work no they know what I have done they know I was sleeping most of the time they know I have done nothing indeed there have been cases in the peer evaluation where some students have been given zero out of ten marks so this is the power of self evaluation of course one question that I was asked when I initiated the scheme by some of my colleagues is how do you ensure that they are truthful what if they lie what if everybody is given ten out of ten what is the safeguard how do you judge the accuracy of the peer process so here is my answer I may choose any two students from a batch and conduct the rigorous why why how will I conduct the rigorous why why examine their diaries in detail asking questions to collaborate the details if the diary said if the first the diary for example the diary said they discuss such and such thing on this day I will ask them describe the discussion it is a technical discussion if they are not held discussions they will not be able to describe ask questions to the on the specific work they claim to have done somebody claims I have written this program if he has not written this program believe me as teacher anyone of us can actually catch that in five minutes time notice that I cannot do that with eight hundred students but I can always do that with some sample ten or fifteen students across the whole thing arrive at my own judgment of marks out of ten and here is the final what should I say ultimate strategy which actually work what is that strategy I arrive at my own judgment of marks out of ten imagine the students these two students where given marks let us say seven each by out of ten by the team in my judgment they deserve nothing more than three marks this is the discrepancy of how that means they have been awarded four marks extra in the peer review process now look at the result if the marks awarded through peer review are significantly higher than the difference between my marks and those given through peer review will be deducted from the marks of each student of the batch so not only these two two students will lose four marks instead of seven they will get three but everybody else anybody who got ten will now get six anybody who have got four will get zero anybody who got two will get minus two this is the sting in fact there was a lot of discussion on this in the class when I describe this sir is that fair etcetera etcetera and the way I explained it and believe me all eight hundred students actually liked and appreciated the idea I said the following normally the authority to award marks west with the teacher this authority is being given to you but please remember that with every authority comes responsibility if I am a teacher if I am awarding then I am required to award fairly I am required to evaluate properly this is my responsibility and that is my accountability similarly if you award marks to yourselves you must be accountable to me and to yourselves they agreed and this was a roaring success by the way I did do a sample check at some places I did not find any discrepancy these were the final observations just to tell you that we found that the average marks given across all eight hundred students the average of marks given out of ten worked out to seven point two my own experience of giving marks on group five was earlier the average would be working out somewhere between six to six point five so it was not inordinately large secondly we saw the marks truly wherever the work was done more by individuals marks were given more ten out of ten was not uncommon because people did actually slog a lot work very hard but two out of ten six out of ten five out of ten four out of ten was also not uncommon what was very interesting and pleasant to watch is that several students were given zero marks by their peers in fact it's an interesting incident so I must narrate it to you in one of my lectures towards the end when this peer evaluation was done after the lecture when I came out one student said sir I have a crib I want to object to the marks given to me by my team and that was he was talking about peer review I said so where is your coordinator so coordinator was also there and so I asked him what is the problem the student said sir I have been given zero marks so I said well why are you defending it to me you should have defended it to your peers he said I did that sir but they don't listen then the coordinator suddenly said but you did nothing and therefore you have been given zero marks and then the student was arguing yes I may not have done anything I actually asked him before this I said how much work did you did do so he first confessed that the first he was ill for last two weeks then I said before that he says you are busy with some other activity then the coordinator suddenly said why don't you tell sir that you have done nothing then that student are started arguing with the coordinator and said well I have done nothing but that other student who has done very little work you have given him three marks you should give me at least three it was a very hilarious situation where students were arguing with each other on how many marks should be given in a nutshell I have found that this peer review process works very well it suddenly takes off the load of why was an evaluation you know how difficult it will be for a large class particularly in colleges where you teach you may not have the luxury of large number of teaching assistants that is where I had suggested that some of you might try to enthuse the final year we take students be students to become your course assistants or teaching assistants and they could do a good job but this process I have found to be working I am going to extend it further now this was about twenty five marks they were another ten mark assignment which was setting questions so this was the this was the assignment they said questions so this is a sample this was batch one d I told you there were forty batches so they were one to ten and one a one b one c one d kind of thing this was the nomenclature that we do so here is a test question they said difficulty level simple by the way each batch since they had five teams they were required to set five questions three questions for test and two questions for quizzes and the questions were of the type simple medium and difficult complexity there was a rider each batch of five will work in the following fashion they will set up a question first of all then three students from that batch will actually write an answer as if they are giving an exam I had suggested to them that they should divide they should define time like fifteen minutes for simple thirty minutes for medium complexity and forty five minutes for a complexity problem and they should write a program then the remaining two people will evaluate these three attempts will find out which is the best model solution modified if necessary and upload it this has to be done by each batch so from five batches I got five questions I have included on the moodle upload today representative question answers by one batch representative project report by another batch and self-evaluation marks by of other batch here I am just showing you quickly the glimpse but I would request all of you to kindly read this read these documents because you that will represent the kind of work that students are capable of doing and please do not for a moment think that this much amount of work was done because these are great students from IIT Bombay as I consistently maintain there is nothing great about student A and student B every student being is capable of doing great things provided we challenge the mind of the student ok it is possible that maybe they are less exposed to programming they do less programming or there may be less intellectual competence so they may not do as much work as some other students may do but they will do substantially more work is my observation in this group project so look at the sample question is a question says difficulty simple Armstrong Nungar is a number wherein the sum of cubes of its digits is equal to number itself so format is ABC is equal to this for example look at the bad English by the way we never write for EG E dot G dot means for example and after G there is always a dot before comma you may feel I am expanding on very small things I am not when we write a documentation whether it is of a question or project report or something the language must be as good and correct as possible teaching our students to write correct English is as important as teaching them to write correct C programs anyway so using the above information write a program to find all arms from numbers etc. this is the problem now the sample solution student one so he has given the solution will not waste time in this we simply go through this but this is their solution then student to again student to another solution student 3 another solution and then final solution question one in bracket they say student one they have not written modified but you can see for example this comment is not there in the original solution written by student one why because the student one is writing under time pressure but this final submission is not written under time pressure and that is exactly the point in fact I think we do a very bad thing by conducting exam for two hours one hour or three hours and say solve six problems or five problems in real life programming is never done like that you are never required to write a correct program in 15 minutes or 30 minutes you might have to do that under pressure but ordinarily you will be solving large problem and you will have sufficient time where in our course we give exposure to such requirements of us this was one of the idea anyway let's go over each lab batch had five teams each team prepared one question total three test questions and two quiz questions of differing complexity three students from each team wrote sample answers and other to select in the final model answer modified it and submit so we have now got remember there were five teams in every batch and there were 20 batches so I have got how many questions how many model answers for quiz test an exam sample project documentation then they they actual project which they did there is a sample documentation that they have produced I have also included a sample code the documentation may be by a different group the code may be by a different group so the idea is not that we can directly use this material the idea of my including this is to tell you what kind of work large groups of students are capable of doing by the way most of this would have been guided by the few students in that group who had a perhaps larger capability perhaps better exposure to programming from their earlier school days and a leadership this activity has actually helped the students to find their own leadership qualities and coordination qualities which perhaps lie dormant you might feel that is it not wasteful of time we should be spend spent in your programming understanding I would submit that I don't agree I think this is as important because all of this is integral part of any activity that you do including program and what they are doing is programming you should see actually that the program is they are submitted are really reasonably good program for the large problem here is a peer evaluation example team one roll number name marks then the task done coding task allotment discussion test files and code documentation discussion test files and code documentation helped in coding discussion main code developers has been given 10 marks by the way in the same group there are people who have been given six marks 10 marks etc etc all I think there are four teams here so all team evaluations follow one after another like this this was team 4 why I shown here is that while there are other students in that whole batch who have been given 10 marks but look at a comment made here 0 9 1 0 3 0 2 1 ground up 10 that is okay the other with 10 total code and finalize it and then there is a comment best work in team 4 please note that no matter how you evaluate we as teachers can never find out the best work in any batch only the peers know only the group members know incidentally this student is a five-year chemistry student is not a computer science although in this team there were some computer science students some electrical students etc etc why am I stressing this fact this is to stress that the knowledge of programming the enthusiasm to solve problems by writing programs that dedication to work hard to get the program right has absolutely nothing to do with either your intellectual capability or the marks which you have scored in your entrance exam and that fact has been proven again and again and again I would like to tell you to remember this expect the best out of a surprise candidate with whom you have never seen that group activity helps us bring out all of these things my proposal for next offering of CS 101 is I will continue the same approach but I propose to increase the weightage of peer evaluation from 10 percent to 20 percent incidentally as I told you last time the class average was 7.3 well the purpose of this very lengthy discussion was to suggest that a group activity of this type could be an extremely important activity for students to really learn programming and applying the programming to solve a problem I personally believe it is much better than going in a very just a systematic mundane way of describing conditional iteration arrays of control structures file IO etc. our syllabi unfortunately forced us to do that I had interaction in the previous interaction people have pointed this out you will remember the remarks made by I think professor fozia manzoor from Kashmir or by several other people that the way we teach the course perhaps currently is not the best in fact yesterday I had a long interaction because it was a sort of holiday for workshop our colleagues from colleague participants from makpur decided to utilize the time to discuss what they would like to do and they had some queries to make so mr. ravindra keskar who is the coordinator there a professor keskar incidentally was an IIT Bombay student and was my TA more than a decade ago I had forgotten that but he reminded so they had an interaction in one of them Rohit by the I think he's from K. K. Valk college he raised a very important point he said that as we see programming being taught in the colleges most colleges the emphasis is on syntax and all components whereas what we see in IITs and NITs and many institutions is that the emphasis on problem solving and he said it is obvious to me now because he's doing is also doing is m take in VNIT so he said it is obvious to me now that that is a better way of teaching program now here was this question if indeed you are so convinced that it's a better way and we are also convinced then why don't IITs work to get the syllabus change to get the teaching methodology change from a ICT from wherever it is this was a hard question it put the ball back into our code well so let me tell all of you the things that we are doing and things that I promise first of all this workshop itself is a mechanism to interact with you to share with you what we do to learn from you what you do and evolve a mechanism which is perhaps better for all concern can we enforce it one way of enforcing it to get the syllabus change I have promised mr. right there that I will personally work with a ICT to ensure that serious thinking starts maybe computer programming may be a beginning course which may start this really serious rethinking the whole process of evaluation examination and teaching I will do that over the next year for this course and I hope many others will do that over and out thank you