 I will very briefly go through the notion of lab assignments and projects. I believe you have printouts of these things. So, here is the sample lab assignment. The actual lab assignment has been printed out on a staple sheets. So, that you can look at. There is complete details are given. Very briefly, the assignment was that some mid-semester exam marks are entered in a text file and since students are divided into batches, we want to find out the batch-wise average marks and the class average. You would agree that this is a very standard kind of computation. The problem is that the mid-semester exam marks were entered in a spreadsheet and from that spreadsheet, the marks were saved in a comma-separated value CSV format text file. Now, when you do that, all the data entry errors get reflected in the text file. So, for example, the text file is like this. There is one record which does not have the name of the student. The students who have not appeared since there were no marks, I asked them to enter some negative value. Somewhere they entered minus 2, somewhere they entered minus 1. So, this is a record which is actually a complete record, but for an absent student. This is a record which is a complete record for a present student. In fact, this Guru Raj Shaileshwar is the highest score, 45.5 out of 45 marks. This is a good chap. So, these are similar records, but observe that there is a blank before this comma. An extra blank was inserted after the name. There is a blank after this roll number. There is a batch missing for Shaileshwar. It does not exist in any batch. Now, such are the actual real life records that will come. The idea of this lab assignment is people should take care of these things and should be able to work that out. Now, the assignment involves them to write C program. It is actually, we say C plus plus, but so far we have not discussed objects really. So, this entire assignment can work as a sample for our course as well. It is essentially a C program assignment if you remove C in, C out and such thing. But what I did is, in the class, I described a different solution and I said, let us learn programming language AUK. How many of you have used AUK, PERL or such things? Maybe a few people, but CS 101 students would certainly not have been exposed to AUK. So, I thought this will be a chance to tell them how simple life could become if you have a tool which is well set for doing that kind of job. So, here I just gave a brief introduction to AUK. Then, describe what AUK is. For example, it treats every record or every line as a sequence of fields and it is capable of determining patterns on those field values. So, it can check whether a field value is less than something greater than something and for every pattern that you define, if it matches, it is able to take some action. So, it is essentially a pattern action kind of a paradigm. Then, I showed that each record of our file is something like this and these different fields are named as dollar 1, dollar 2, dollar 3, dollar 4, dollar 5. AUK separates out various fields as it reads records. The normal separator delimiter as we call it field delimiter is blank, but I can describe any other field delimiter like here it will be comma and then it will assign the values to dollar 1, dollar 2. Now, we can define a pattern. For example, we know absentees are negative marks. So, if dollar 5 is less than 0, action is increment a count to calculate absentee's rule. But for all others, we have to increment batch counts, mark totals and add and print out the accumulated result. So, I gave them the AUK script. Here is an AUK program. So, for dollar 5 less than 0, you just upgrade the absent count. The point that I made to the student is I have not declared this variable, I have not declared its type. So, AUK automatically creates an absent count variable and initializes it to 0. Similarly, for dollar 5 greater than equal to 0, that means all the students who have marks, it increments a count, it increments a total mark counts. More important, it actually when I say batch tot and batch count and index it with dollar 4, dollar 4 observe that dollar 4 is the batch code. It is non-numeric. It is 0, A, 90 or whatever. And AUK does not even know how many unique such batch codes will exist in because it has not yet rated the data. So, what AUK does is, it creates an array called batch tot with unlimited extension of the number of elements. Every time it locates a record with some value of dollar 4, let us say it encounters 1B. It will create an element which is indexed by 1B and it will add 1 to the count. It also initializes all array elements to 0, whatever it creates. So, this is the best example of an associative array. If next record is 9C, it will create a field for 9C. If another record comes with 0A again, which already existed, it will locate that element and it will add the marks to that. That is the batch total and it will add 1 to that count. So, you see the Ghoragiri that we would ordinarily do in any C program for this matching is automatically done by AUK. And that is it. That is the end of the program actually as far as the actions are concerned. So, at the end of this, when all records of my text file are analyzed, I would have the total absent count. I will have the total count of students. I will have the total count of present students. I will have the total marks for all the students. Dividing this by this, I can get the average for the class. Additionally, for every existing batch, I will have the batch total marks and the batch count. Now, there is a pattern called end. The end pattern is merely for I in batch. So, I explained that the for loop in C, C plus plus, you have to give initial value, increment, final test, but it presupposes that the values are numerical. However, my batch array is not numerical. It is indexed by batch code. So, therefore, when we say I in batch, this I takes values of different codes that exist in that array at the end of the juncture. So, hopefully, there should be 40 batches which I have, but if some wrong batch code has been entered or some non-existent batch code has been entered, there will be a different batch. However, I scans all the batch codes and for each one of them, it will print the batch code, the batch count and the batch total. Sorry, the batch total divided by batch count, which is the average. So, notice the power of all that when I say print, it will print actually the character code that I have. Finally, I print total students are so many, total number of absent is so much and class average is so much and then I show them the sample output. So, the sample output, I tell them, for example, that there was one student whose batch was not entered. You remember the sample data that we have seen. Now, that student got accumulated in a batch with blank batch code and that is why the batch average is shown for one student, which is actually that fellow's mark. So, you can verify that Shailendra Seraf, whose batch did not exist given in the sample data sheet, turns out to be like this. But for all other cases, 0A, 0B, 1A, 0D, 1B, 1C, etcetera, etcetera, they come out like this. So, batch, total number of students in the batch and batch average and then total students are so many, these are so many, etcetera. The class average is so and so. Now, this program takes about five minutes to write and about two minutes to execute. As I guess that the C program will take much longer. So, I told them, if Auk is so simple, why use complicated languages? Well, Auk is super for such problems, but has limited capability to 100 data of all kinds. You cannot do multiplication arithmetic easily with Auk. It does not have strong typing. That is actually the computer science scientific reason. And it is an interpreted language. So, performance would be bad. With that, we get back to our C C plus. It takes about 15 minutes. It exposes students to a completely different programming paradigm, which is increasingly getting popular, scripting paradigm. So, if you know JavaScript, for example, all scripting paradigms are becoming more powerful and more popular. And people are saying, why with scripting, I can do anything that I want? Why do I need a programming language? Now, frankly, this debate is non-trivial. The computer scientists, amongst us, insist on teaching programming using conventional programming languages. How long they will survive? And how long it is before the whole world, the programming world takes over from the conventional programming language to the more powerful scripting languages? This is something that we also need to ponder about by the way as teachers. It does not have a simple answer. However, we say we have to teach this course. So, go back and write a program for doing this. I have given a sample program, which is printed on the accompanying what is interesting is to see that in every class, you will have some very enthusiastic students and some not very enthusiastic students. So, this assignment which was given, the last date was, last date is actually next Monday. But there is some fellow who wrote an email last night. So, he says, in case you are using character arrays for assignment seven, then to print details of top 10 scores we need to sort. Basically, what he means is you need to sort the arrays and you need to swap rows of two-dimensional character arrays a number of times. Can you explain how do we swap rows in two-dimensional character array? File of my program is included in case you would like to refer to it, what I am actually doing. Possibly not in the extra lecture tomorrow as I will be missing. So, you see he is one of the better students by the way. He did not top the class. He did not get 44.5, but I verified he got 44 marks. Now, 44 out of 45 in that kind of mid-sem paper is, we get that every year one or two and I am sure you would be getting one or two like that in your courses. These are exceptional people. They are better than us. This is the first thing we have to admit and therefore, we have to use them and their talent as much as is possible. I have been doing it earlier that somebody comes up with a nice solution. I take that solution, give credit to that student and explain that program in the class and give an additional whatever information. Why I am mentioning all this is that this could be a very useful style of teaching because the student's involvement increases significantly when they say that their work is being referred to by the teacher and the teacher is humble enough to accept that my student is a better programmer than me. That's a fact of life anyway. So, here what I did is I analyzed that program and I wrote this long answer. This may not be very readable. I can't read it. Can you? No. But you can read from the printout. So, after saying that I must say that you have written a really good program, but then I analyzed the program. For example, he has used in his program. You can refer to the listing later. There is a complete C program which I have slightly modified. No, I have not modified. This is the original one. So, you can see that he is using a very funny thing for the batch count. He presumes that the batch count, first digit is numeric and second digit is character, 0, 1, 0, a, 0, b, 0, c, 0, d, a to a to b, etcetera, etcetera. The curious thing is my data entry operator made a mistake in entering the marks for all students of batch 0, c. Instead of 0, he or she, I don't know who it was, but o. Now, o is not 0, 1, 2, 3, 4, 5, 6, 9. So, when I ran his program, batch 0, c was missing completely. Although the total students count, etcetera, was correct, the batch wise total was correct. So, that's what I have indicated. That you are, the words that I have used here is that, for example, you are completely missed out batch 0, c. This is the second part of my response. The reason is that, the data entry person entered the data for this batch with batch code typed as o, c with the letter o. Your clever ploy of treating the first letter of the code as a numeric digit has been the culprit. That's why your program none work. The moral of the story is that you can rarely make any assumptions for the data being right, especially when we deal with very large amount of data. I believe that this fact should be sort of exposed to our students as much as is possible, which normally does not happen. Particularly, if you see university guidelines, 25 programs. Now, none of the 25 programs can be 100 lines or 200 lines. But look at this lab assignment. This is not, this is just the midterm sort of level. We have yet to reach the projects and so on. But this fellow and the other people will write, is a four page lab assignment. Obviously, they can't complete it in two hours. That is why we do not insist that you submit lab assignment on that day. We give the lab assignment, it's a one week later you submit. So you have one full week to submit. And he has utilized that level. Not all people will get this answer right. Many will get wrong. And that is why we must give partial credit. So this zero one philosophy, which is what is required, can be applied only in some cases, in written exams or whatever. But not in assignments and projects. Because making mistakes in program, we make mistakes. When I was correcting that, correcting his program, I made two additional mistakes. The Ockstrip, which is a simple 10 line strip, I could not get it right the first time because I was writing an Ockstrip after 25 years. So that is perfectly fine in today's environment. You can recompile, compiler tells you what is the error, etc. The point is, I think it is important for teachers to spend time on such few programs, which are exceptional in your class. Invariably, our attention is focused on people for week. Naturally, we must pay attention to them because they need help. But if we don't encourage the better performance by a, taking cognizance of their work, and by b, actually participating in interaction with them, then they will not be encouraged further. And they are the people who will make a difference to themselves and to the world. So it is very important to emphasize that not only the bottom of the class, but even the top of the class must be in the focus of the teacher. That is the point I wanted to actually indicate through this exposition. Of course, subsequent things, there are, there are problems here. And I have indicated how I am going to demonstrate the solution of the problem in the class, that when you have large arrays, you never sort them along with the key array. So I have said here, for example, in the third paragraph, that ideally it should be avoided. Two-dimensional array movement. Imagine if the information associated is not just names, but something very large, such as detailed address occupying, say, 200 bytes. Worse, if it is a fingerprint image occupying a two-dimensional pixel array of size 120 kb. Now, you have 120 kb elements along with every roll number and marks. And just because you are sorting marks, are you going to move 120 kb elements in bubble sort? That will be disastrous. And this is 800 students. What do you do when the unique ID system of the country tries to sort an array of one billion records? Now, this is what will introduce them to the notion of indexed trees, bee trees, and such things. It is extremely difficult to tell them the reason why we require trees, search trees. Then in a single array, I can search by just linearly going through them. So these are the kind of instances we should use. And rather than we saying out of the world that this is the reason, if some student gives us an opportunity, we should exemplify that in the class. That, look, this student is asking this question is the right question. He's able to do that with this array, but will that be right? Will that not be right? Now, this student being special case I wrote to him in advance, although in a class when I explained the whole setup, I will use exactly the same. But imagine the thrill in the mind of that student and the appreciation in the minds of all other students when a teacher takes the example of a student's work, glorifies it, saying it's a beautiful program and then says these little modifications and then the final version. I think this is the notion of teaching pedagogy rather than anything else. So we close this discussion. The course projects, so here is the course project. The course projects for CS11 are group projects. We form five teams of four students each from a lab batch and there are four lab batches which form a group. Can imagine there are about 80 students. So if you have a class of 80 students, all 80 students can do one project. Now that is something very hard, right? We're not used to it. Framing such a course project takes several nights of work. I have done that in information system course. I am now trying it for the CS11 course. In CS11 course our practice is team projects. Four or five people will do a project. That is what is the prevalent practice everywhere else. I want to suggest this so that at least the some of the brave teachers amongst those thousand may want to try this out. If not, there are five member team projects as well. I mean five teams of four students. So four student team projects are also there. The difference is four student team project has to be defined as a very small nutshell thing because they can do only limited activity for about a month or month and a half that they will get to do the project. So therefore you can't expect them to develop say 10,000 lines of code or 20,000 lines of code. They'll probably develop thousand lines of code. Maybe 200, 300, 500 lines of code. And thousand lines of code will do limited function. Ten thousand lines of code will not do ten times more function but will do at least three times more function. So the main project is defined as a single group project which is called mini national UID for IIT campus. This is what all 80 students of a particular group are going to do. I have ten such groups by the way. So I am saying all ten groups will do the same project and they'll be relatively ready. So set up competition they'll be fun. I don't know what will happen. This is the first time this is being attempted even in IIT but I thought I'll share that with you. I see certain advantages. First of all the projects we have said we divide these projects into four sub-projects. One is called registration. You saw that registration name. So anybody who comes in he registers. Classification and consolidation. All data of images that has been collected. It has to be converted into minutiae or whatever the internal representation and stored at one place. Now that database formulation, collection, all logistics that is part of one project. Duplicate detection. This is actually part of the registration. For example you saw that if I try to register again it will say person already exists. But we will not load that with the registration group here. The registration group will do simple registration. So they will have to do a lot of data management, assigning, collecting information, keeping it. Please remember CS 101 students or programming students do not know databases. They don't have databases. Next year what I propose to do is I'll formulate such projects ahead of time, prepare a regular MySQL database, connect it through ODBC and give function calls to C++ programs. So they can read, they can write, they can update in the databases. Right now they can do it in the files. So when we discuss the file system they will be able to do that. So these are the four projects as I said. Duplicate detection is an important thing so it is being given as a separate project. And this duplicate detection whenever the batch completes that duplicate detection that is supposed to be integrated with the registration process. Finally usage. So like the attendance application that you saw, some simple application that they will have to code. And I am using the reason I asked them to develop this simple node is that this application if they can develop then the following things will be actually taught or learned by them. This is the object. If the students are doing the same project there are some sub modules which are very basic like registration. So the fundamental concept is always same. So how will you ensure that it is done by themselves? They are in competition. I will tell you once you put a competition for marks in amongst any students they will guard their software like mad. But there won't be much difference in the fundamental. They can add additional features. That's perfectly fine. You see the purpose okay let me let me put it again. For individual assignments it is mandatory to catch copy. For projects it is mandatory to encourage copy. Please understand the difference. Large software is never developed by everybody reinventing the wheel. Look at the whole philosophy of UNIX. Suppose I take 10,000 lines of C code to program a functionality. But if I can break it up into this utility, that utility, that utility, that utility. I identify the utilities which already people have written. I can say utility 1, pipe to utility 2, pipe to utility 3, pipe to myprog1.c, pipe to utility 4, pipe to myprog2.c. I might have to write 10 programs. Each of 100 lines. I get to do my entire work by writing only 1000 lines instead of writing 10000 lines. That is the basic philosophy of programming. And what you ask is a natural question. I used to ask it myself. Then I realized I am asking this question from an evaluation point of view. And I think as teachers we must completely remove that evaluation point of view when considering what to teach and how to teach. The objective here is to bring back the best in the student, not necessarily in terms of his or her own caliber of programming, but his or her ability to look at what is available in the world and use that. So this project is going to say his life is now open. Go to internet, go to any books, go to any algorithms, any algorithm that is available, any program code is available. Use whatever you want to. Give the credit and show that you yourself also have done adequate work to justify the problem. So no issue. If one batch shares with the another batch, they say that we have shared, they will miss the top three prizes. Because top three prizes will require minimum of original work in this, this area, et cetera. Now these things you can handle at different points. But again the concept that I am trying to initiate is that let us not always have the evaluation weighing very heavy in our mind. And in fact in programming, it is bad to keep saying never copy, never copy, never actual professional program is copy, copy, copy, copy, copy, copy, right as less as you can and do the work. That is what modern professional programming is. Are we trying to teach our students the exact opposite of it? That's the point. So there are good students who are doing additional projects apart from the academics, curriculum and when it is a part of our course, of course evaluation is The part of the course as far as exams are concerned, written test exams as far as quizzes are concerned. So what I am suggesting is we completely distinguish between the group activity and individual activity. An individual activity in there are ample opportunities. If you see 50 percent marks for the enzyme, sometimes 80 percent you can't help it. That's the university rule. But if I have the laxity for 20 percent, I would rather put all 20 percent on the group project. Because I want to expose them to real life programming. That is how real life programming is. You take TCS, you take Infosys, you take whatever do you think every person writes new code for every project. They have huge libraries. People have written those programs and they use them directly. And they are not ashamed of doing it. They are very proud of doing it. That others have done it. I'm using it. Why should I do that Godagiri to redo it? That is what real life programming is. Are we not supposed to teach our students real life programming? Look at this person who came. He was a student in a small college near Mehboos Navagiri in Andhra Pradesh four years ago. He joined this company. He would have learned programming like this. Had he been exposed to these kind of things, he would have probably become a better programmer than what he is today. Or he would have become a class one programmer in two years rather than four years. That's the point. We don't want our students after passing out later to laugh at us seeing kya parate. One of the reasons is many of these thousand teachers we'll find have no exposure to real life industry-grade software products or real life industry-grade software projects. And it is the job of us to spread the message that that is how composition is. What is the large project? Large software development. So here is the issue. We may not be able to teach them what you call IDs, integrated development environment completely. But we can tell them what are the standards, coding standards, programming standards. For this workshop incidentally in December, we are going to make coding standards, programming standards, all those things. Because the students must be exposed. They may not all follow that. Everybody may not write a 20 later variable name. In TCS there is a rule whatever if your variable name is less than this next month you did not come. Very simple. This is worse than marks. Your salary stops. Now we don't give such names. In fact we specialize in our examples also saying X, Y, A, B, C. Such variable names are not to be found there. Now what I'm saying is we must evolve our course. It's a one semester long course. Initially you give these simple examples A, B, C, X, Y. As we go further our own examples must have variables names which are professional. Our own examples must have comments which are professional. Our own examples must have the complete picture of how they will see the professional. And this evolution from simple examples to the more professional things actually is an important notion in programming teaching according to that. That's right. That's right. Yeah but I will tell you the problem. For example you take this Ock script. I would have liked to write it much bigger but I have to fit it in a screen for display. I have now found out what to do. My screen version will be different from printed version. The written program will be professional but I will be taking out a portion of it just for the explanation purpose. Invariably one dilemma that teachers have is that whatever they give as a handout that is what they would like to display on the screen. And the screen has limitations, physical limitations because the font size has to be big enough etc. So these are according to me these are not programming related. Any subject you teach there has to be a evolution from simple concepts to industry great professional thing whether it is heat engines or electrical transformers or whatever but programming is our concern so that is what I was suggesting. Anyway to conclude this then we are saying they have to be told about testing like for example that program fails to give you mean zero C batch whatever whatever. So they have to do professional great testing. Documentation as you mentioned but I will tell you our notion of documentation and other thing is very mundane and is very stereotype. It is better if we can get actual projects done with proper documentation and improper documentation and compile both of them and include that in our what you call distribution so that people know what good documentation is etc. And we should encourage them to do that. Teamwork is a most hazardous thing why ten people cannot produce ten times the output only three times the output because seven times the amount goes into communication and this thing. Now somebody may say that there is nothing to do with programming but I would say this is an extremely important learning. After all almost all major problems in life are solved by teams and if they don't understand teamwork where they should learn well they could start learning from here. Now I am extending it in my pendulum in the other way. 80 people group that is unbuilding. They are probably only discussing with themselves nothing will come out but that is why you build a hierarchy like a military operation you know a battalion and below that a unit whatever, whatever, whatever something similar. Professional peer evaluation is a concept which as I mentioned earlier I have used effectively in my post graduate courses I am going to use it for the first time. You may be hesitating in doing that but my suggestion to you is please believe me when you give responsibility to a group of students they behave really responsible. They will turn out a good but you have to have faith. Now you may try it you may not try but I will get the results of this process for the first year course and I will share that with you. This paradigm is not important to be included but you might do the following. Are you meaning when we talk to the thousand teachers that you have 100 marks total paper whatever 50 marks and same paper whatever you have anywhere between 5 marks to 30 marks under your command as a teacher can you not allocate 2 marks for the peer evaluation and see what happens. Does somebody give a zero mark to someone? If he does then he is doing as good a job as a teacher because I believe that professional peer evaluation which will happen in the rest of their lives whatever job they do after all when we sit amongst the group what do we do? In IIT the peer evaluation is it could be very frustrating. If I goof up in one lecture full of my colleagues we will say what have you learned today? You don't have any shame you have to go to class. Now this is the peer pressure and one of the reasons why IITs or any institution is excellent is tremendous peer pressure. So as a result automatically I work because I feel worried that somebody will point it out to me. Here the junior peer pressure is much more student pressure is tremendous. So students make me work. However peer evaluation is something I believe should be taught to our students as early as possible. Again there is nothing to do with programming. This is true for all subjects but we might indicate a beginning that's the point. How do you do it practically? Practically what we do is that we ask we tell the students that out of 10 marks they have to grade themselves in a group and the group has to submit a mark sheet. Through the question paper? No, not question paper. There is a separate sheet for the project. 10 marks evaluation will be given by the people. So all the 10 students or 20 students or whatever be the group size those group names will be written and against each marks out of 10 will be awarded. The methodology that I suggest is first each student submits to the group coordinator what he or she believes should be once on mark. I may say 10, 10, 10, 10 or somebody will say 5 somebody will say 7. Our experience in the project course says the first cut marks which are given by the student himself or herself are very close to the truth. And in fact they underestimate their own but they get peer reviewed. So finally they should have a group meeting in which the coordinators will ask they will say because they would have worked together. So this cannot be done for individual assignments. This can be done only for the group assignment where every member of the group has seen how much one has worked. The point I was making is earlier when I used to have Viva based evaluation there used to be cases every year where somebody who is a street smart person has not done anything but has glanced through the documentation has understood the project and is able to explain it much better than anybody else runs away with higher marks. You would have seen these things happen. But when that smart person sits in a group the other 10 people will eat him alive. He says I have been sleeping for two days and in a group see that discussion also is important. I have found that the peer evaluation actually comes out to be really accurate and I reserve the right so a practical implication is like this that I ask them to submit this. The group submits it. All members sign it. The group leaders submit. Yeah the group leaders all members sign it against their name and the group leaders submit it. And when he submits it I reserve the right to take any sample viva that I wish to. And as I mentioned if my sample viva detects that the person should get five marks less everybody in the group gets five marks less. I had never once to actually execute this trade. The existence of trade is sufficient for people to behave properly. But then different experiences will be there. But those of you would like to try and those thousand teachers whom you will train at your respective places some of them would like to try. I would like that feedback also to come in our portal I am actually planning a separate section for teachers. So the login will be restricted there where teachers would be able to freely discuss the pedagogical issues and the other issues of teaching. That's the idea there. Okay we close this.