Showing posts with label Trainings. Show all posts
Showing posts with label Trainings. Show all posts

Friday, July 25, 2014

Teaching Software in Schools and Colleges of India

It's an unfortunate fact that in terms of Software technologies there is a big mismatch between what academics produce and what industry wants. It's so much true in India and I believe as per my discussion with other people it's quite true everywhere to a different extent. But this surely is a big problem in India.
I tried to ponder over these issues as I have some opportunity in interacting with colleges and taking workshops on software technologies. Some of the things that I observed, I am putting them down. First I will put down the structural issues which are relevant in terms of teaching itself.
  • Deep cultural issues: I am tempted to make this as no. 1 issue especially in terms of India. We put so much emphasis on face value than place value. The whole approach towards education is to find job, which is fine. But to have the only aim to have job is not fine. It should always be a by product of the efforts. But the emphasis should be on the good quality knowledge.In India the life of a person is scripted to such an extent that anyone with little creativity feels suffocated. The silver lining is that it's changing as people are questioning the old ways of living.
  • Morale of Teachers: If the commander of the army is a timid and under confident person, the army is never going to succeed. Same goes with the education system in India. Many of the people in teaching are not by choice but by compulsion because of personal issues or not able to get a job. And many of them are trying to flee at the first drop of the hat. Can we make it a better job in terms of respect it gets in society. The compensation is not the only issue in it. We have to find better ways to elevate the status of teaching in India. We give gallantry awards to people who save our nation. Cannot we institute awards of similar level for people who are involved in the process of building nation. Also there is a need of strong industry collaboration where teachers do get a chance to work in industry and the same way around. I am sure there are many people in industry who would not mind going for a sabbatical to teach. Prof and ex- President A.P.J. Kalam is a great example of this. Also there should be better mechanisms to judge the performance of teacher and rewards in place for better performance and equally severe punishments for not performing.
  • Politicization of education system: Time and again I have failed to understand the deep connection between politicians and education system. Why most of the college owners are politicians and why most of the politicians run colleges? It's a systemic issue in India. I am not against politician but the way colleges are run to serve political purpose is what harms the society. There are so many colleges which do not have minimal infrastructure to run the show. Still they are distributing Masters and Bachelors degrees.
The issues that I have discussed till now are more of systemic structural issues. Now I will try to talk a little bit about the approach towards teaching software technologies:
  • Too much emphasis on syntax: Again this goes with putting emphasis on face values and not place values. It's important to understand why we are learning technology. I see the syllabus full with all kind of programming languages including PHP, Java, C, C++ and many more and hardly one or two on algorithms and logic. It needs to be changed. Have one or two language and let people choose where they want to go. There is no point in learning how to read a file using 15 different languages but what is important is to understand the context in which you have a need to read the file.
  • Lack of tools usage: There are so many good development and project management tools which are open source and free. There should be an effort to build labs around those tools which will increase the productivity of students. Yes, the concept of productivity should be inculcated right from beginning.
  • Participation in real projects: We are very lucky to live in times where there is so much activity in open source. Encourage students to participate in them. Atleast they can participate in testing these applications and I am sure there will be some genius who will help in taking those projects to new heights.
  • Test skills and not knowledge: Our examination system needs a overhauling in terms of testing the applied knowledge than how much one can remember (mugging). This shift is required at all levels in our society.

Monday, August 1, 2011

Doing Trainings on Software

After doing so many workshops and trainings both at corporate levels to experienced developers to students in colleges, I have realized that teaching is more of an art than science. Of course you have to know your stuff in and out with good depth. This is the first prerequisite before you stand in front of the participants. There is no short cut, no magic wand to help you out if you have not done your homework. Still if you find a question which you don't know how to handle be honest. You are not god so be humble.
Now we will concentrate on what I have found is useful to teach technology subjects like Java. However I feel this is true for any technical subjects. I am drawing a line here in terms of teaching technical subjects vis a vis non technical subjects. The technical subjects especially in software engineering can be differentiated from teaching other subjects in following terms: Once you have landed with an assignment for a workshop, do the following:
  • Understand the technology stack in which you have to impart training: This is very important in terms of getting the expectations in line. In Software technology the frameworks and versions are always changing. People might be using different tools than you are comfortable with. In this respect it is very important that you work with the coordinator from participants side to zero down on the right versions and tools. Also it's useful to understand the rationale on the basis of which participants have reached to a certain stack. Sometimes people go for outdated technologies because they are working on a maintenance project or they might be shifting to project where the technology stack is not upgraded. But there are times where people opt for older versions and tools just because of lack of understanding of the space. They want to learn a technology but because of outdated articles still ruling high on search engine leads them to choose the wrong version. So understand the end result that the participants are targeting.
  • Make sure you talk to the relevant technical people directly at least once: Please do not ignore this step. Usually there are marketing people and non technical coordinators in the middle negotiating the trainings. And they are good in their job. To sell the training and to negotiate the dates, prices and logistics. But they do not understand technology. That's not there job. So in this context it's important that you talk to the relevant technical people directly and understand their needs. This is again about above point in setting the expectations right.
  • Design the content yourself and make sure it is approved by relevant technical people: Expectations can be matched at broader level but still a good understanding of the flow of the workshop should be clear. Outline the course flow at least on broader topics. The participants might provide their initial content and you can build on top of that to finalize the thing. Make sure to outline all the tools with versions which you will be using in the workshop. If it is open source and free, provide links to download. Also you might want to provide steps to set up the lab for the workshop. A good format for course content design can be:
    • Day wise breakups of
    • flow
    • Prerequisites
    • Tools
    • and their download/relevant site
  • Understand the background of participants: This I found always tricky. The batches are usually not uniform in terms of experience and expertise. Even in college batches the crowd is divided between smarted and happy go lucky kind of fellows. But have an idea of the crowd you are going to face. Design your content in such a way that if required you can vary it so that participants get comfortable with the concepts. The problem usually comes when people do not have the required prerequisites so you might want to give a quick refresher on basic things. But make sure you don't loose the focus of the workshop.
Once you are done with the above steps be ready with your presentations for the D-day. Only your hard work is going to help you into this. Also I have found it useful to develop your own course material. This has an advantages that you know your story. If you are using someone others material and try to present you may not feel comfortable. However I will leave this as a choice. The preparation of training material is a personal style. You have your own notions of comfort.
Now you are ready with your training material and standing in front of the class. Some of the things that might help you in making the flow smooth is:
  • Understand the background of participants: Some trainer use it as a ice breaker also. But I see it as an important step in setting the tone of the class. Spend some time in understanding each participants background in terms of their skill set. Especially what kind of tools and technologies they have used. What projects they have worked on. This will help you to get a clear idea of the nature of participants and this is going to help you for next couple of days for the duration of the workshop, to set the flow and tone. If it's a batch of fresher for the technology you might want to work more on building the basic concepts. If it is a relatively experienced batch you might want to focus on the advance concepts. Most of the time the batch is mix so you have mix your strategies. No two batch are same.
  • First hour is crucial: I have realized that in any workshop first hour is very crucial. You might be teaching rocket science but make sure people are comfortable with your approach. Do not start throwing jargon at the drop of a hat. I have found it useful to make it clear to the participants about the broader context in which the technology exists. Relate the need of the technology to the real life fitments. Where this technology is used and what kind of problem it solves? Make sure your participants understand the ecosystem of the technology.
  • Hands on Approach: I have found it extremely useful to deal with the concepts. For any concept first explaining it quickly. Do not spend too much time in explaining as most of them will see it a host of jargons coming to you. Than give a small exercise which they can do hands on. Make sure the exercise is designed in such a way that it can be implemented easily. I discourage copy and paste. Copying and pasting shields many smaller points. Better put the code in slides in front of the participants so they can take a cue from it. You can modify the example a little bit so that people have to apply their thoughts while building the example. Keep explaining each slide in details. Once the code is running explaining the full flow till the class is comfortable. This is an iterative process and be ready for it till the participants are comfortable with it.
  • Give comprehensive exercises: When giving exercises give comprehensive exercises which span more than one concept. It's not necessary that people should implement it completely but at least they are able to come up with broad design and relevant artifacts. For example in case of a program they can come up with list of classes, interfaces and able to explain the flow clearly.
  • Engage the class: Try to accommodate all the participants. There is usually a small minority who are never interested. Try your best to engage them but not beyond compromising on others. You will find fast learners and slow learners so devise strategy to engage all of them. The fast learners might do the exercise earlier so give them more variations to solve till the slow learners catch up. Also another dimension that I have useful to segregate the participants is in terms of inductive and deductive thinkers. The inductive thinker first understand the broader picture completely and than understand the small pieces building the big picture. Deductive thinkers will understand the small pieces as and when they come and after putting all the pieces will appreciate the full picture of jigsaw puzzle. So have in your iteration of explaining concepts include explaining the big picture and the smaller pieces.
  • Provide references: At the end of workshop provide references which people can use to know more about the subjects.
Hopefully this will help you in running your workshops better. I have not tried to cover skills like speaking and all as they are generic and common for any kind of speaking assignments.