Saturday, February 9, 2008

Can we teach people Programming Methodology by 'teaching' them Programming?

I believe one cannot teach Program Methodology by teaching only Programming.

Programming methodology deals with the analysis, design and implementation of programs (John E. Howland, Trinity University, Texas).


Programming (often shortened to programming or coding) is the process of writing, testing, debugging/troubleshooting, and maintaining the source code of computer programs (Wikipedia),

Programming is the process of expressing an algo/flowchart/psedocode in a computer language.


By definition, these terms (Program Methodology & Programming. ) are different!

I believe that if we fail in imparting the analysis, design, and implementation skills, we cannot 'produce' decent programmers.

The key would be to help them acquire problem solving (analysis & design) skills which can then be expressed using any language (whether its a natural or Programming language).

Should the person not be able to express the solution in a natural language let's say 'English', it would be silly to teach him to program in any language.

However the main situation I am witnessing, is the fact that some people are failing to fully understand the problem leading to major difficulties when it comes to conceptualising a possible solution.

As a matter of fact it one cannot conceptualise, this implies that one cannot express the idea- this results in one's inability of program.C'est un problème de fond!!!

We are now in a paradoxical situation - can we teach people to think or is it something they have to learn by themselves?

IMHO should i try to 'teach someone to think'- this would be a failure, because i will only be able to teach that person to think like I do, what about his brain, to a certain extent I would be suppressing his creativity and decreasing the number of 'Aaaaha' or 'Eureka' moments . What fun would there be in that?



G@V!N

15 comments:

Anonymous said...

!Programming the so call "maux de tete :)" of many of the 1rst yr at Uom... lolz!

-->Of course,we cannot teach people how to program and neither do we have the capacity to produce efficient and well trained programmers by ourselves.Everthing is "inborn,natural",more precisely each and every person must devise his own ways and means of programming.
In the same way as we cannot pass on to someone the art of drawing.While only some rules and examples are given which are to be followed.

-->Similarly Lecturers can only play a fundamental role in imparting the information and knowledge to the students.

Conclusion == Definitely the remainder lies in the hands of the students.

Anonymous said...

From my experience as a Senior Programmer for quite some years now, Programming can be summarized as the ability to provide alternatives/solutions to a given problem. As such, it is a skill which is not inborn but can rather be acquired for it depends on rationality...and, on purpose, I did not say logical-thinking since lateral-thinking often gets the programmer the solution (s)he has been looking for! ;)

In my opinion, this is a three-fold problem:
=> What do our decision-makers want? A generation of Programmers or batches of Coders? The latter I believe from the way the BPOs are mushrooming in MRU. If this is (and will continue to be) our strategy, then definitely it's not worth reading further.

=> Is the problem addressed at the root so that the trees grow straight? Do students develop problem-focussed or solution-centric personalties from our current education system. The answer is so obvious that I don't deem it important to mention. Not only do the curriculum which needs to be revised again and again, but a holistic approach should be taken to address that in a view of instilling both curiosity and creativity. Though teachers (and friends) here play a major role (~70%), support from parents is crucial (~25%)..remaining 5% is for external factors.

=> Finally, whatever policies the government formulate, or however good the education system is moulded, ultimately it is up to the individual to make a move...and here I am relating to Motivation! Interest is the prime and maintaining it is the imperative. One needs a purpose in order to fullfill it and new challenges to keep it alive. Innovation is key!

Hmm this comment is getting a little long so I'll keep some space for G@V!N for other posts lol ;)

Feel free to message me on facebook ;)

G@V!N said...

I think you have identified some interesting viewpoints. The three perspectives are very interesting I'll try to address them as honestly as i can.

Point 1.
Regarding our 'valued' decision makers, i believe the decision-makers neither want programmers nor coders, they simply want Degree/Diploma holders to sell and illusion of progress. Furthermore, ensuring that the maximum number of people go straight to university after college tends to decrease unemployment statistics in the short term. Thus we are moving towards a further problem down the line. In about five years, we will have loads of degree holders which either
1. Cannot get a proper (appropriate to their field) job, or,
2. cannot bargain for a proper salary due to the sheer number of 'desperate others' who are willing to work for less- demand-supply, we have more graduates in a filed, the salary they can expect will decrease. We have already witnessed a similar phenomenon with IT people lately.

To come back to out decision makers, we have to point out that we are NOT a Cyber-economy, i believe that the term which describes most closely our country's economy is a Tele-Economy.
To many them BPO is synonymous of call centers. You will agree that Cyber Tower1, with its 11 floors only has about 4 floors where genuine IT/Software development is taking place. The other floors are only full of headset-wearing (or Top-Model wannabes) youngsters who are killing themselves by achieving tough sales targets, working odd shifts... I won't even mention Cyber Tower 2 for we know what’s in there.

Point 2
Our education system which is very limited and lacks flexibility. We only have about 3 main streams namely science, economics, arts and technical drawing... These are too rigid. They have syllabuses which are so bulky that students barely have time to spend doing creative stuff or simply developing their personality. Assuming that a student has a particular liking for a subject area, very often due to parental pressure the student cannot pursue studies in that field. We have seen several people doing a course simply because the parent asked/forced him/her to do so.

Point 3.
About motivation, i believe it is hard to motivate some people simply because up to the final year of college, they have been 'FORCED' and not encouraged to study. Furthermore, it might even be the case that the student is not enjoying what he is studying at Uni. So motivating someone who is doing something he does not like can prove to be a tough task. Some students have been spoon-fed so much that they remember nothing apart from the shape of the spoon.

Anonymous said...

Computer programming doesn’t require a high IQ and an innate proficiency in advanced mathematics.Some people are naturally better than others, but anyone can get better with constant practice. When u program, u have to think in terms of the machine, how it does things..and zat may be regarded as an "inhuman" activity(think in terms of a machine)...lol. To my point of view programming METHODOLOGY is basically problem-solving concepts to coding.
If someone has never programmed before, then that person should be initiated with the thinking-skill first... making the proper analysis, meaning knowing what is the problem and then finding a solution to it. The language to begin with is v.important... I think Scheme is the best language for a beginner.. its a functional language ,its v.close to maths n the syntax is relatively easy.
The rest depends on students..they need to have a desire to learn and the patience never to give up.

Anonymous said...

One quote I found somewhere which has had a profound effect on me:

"A university should not teach what to think but how to think"

I'm bored to death with people who equate programming with C++ or Java because they studied those two languages. Programming is much deeper and is, as you wrote, close to problem solving.

Knuth said: "Let us change our traditional attitude to the construction of programs. Instead of imagining that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do."

Anonymous said...

Very much so indeed; People reading this post surely might get such a bleak picture, which by the way is not totally wrong.

A degree should show not be limited to an ability in a particular field but be complemented with a certain maturity of thinking. This is pretty much so in EU countries as we both know it; but this is what Asian-style (competition-oriented) universities lack..and Mauritius is not spared.

But as you mentioned, it's a "problem de fond" and the bulky syllabuses do not provide room for the blossoming of the students' personalities. Parental pressure plays an important role but are they really at fault? Are they not perpetuating what their parents have done to them? Wouldn't Parenting classes create a whole new generation were they to be included in high school/college curricula?

Far too often, asking an end-of-cycle student or graduate as to what career they aspire returns "I don't know". People should start with an end in mind and work their way through. Right when choosing their leads (SCI, ECO, TECH) in Form 3, they should basically have an idea of the job they are looking forward to. If they cannot choose, counselors, in touch with the job market, should provide directions and options.

Mauritius is currently at crossroads - return to the Third World or move to the "upper-2nd-World"....should our voices count ;)

G@V!N said...

Our students usually cannot break down the problem into smaller and more manageable parts which can then be integrated as part of a larger more complex algorithm/solution. Consequently, there is no solution to be implemented, which could explain their unability of code.

However, give them the pseudocode/algo and they will implement it rather quickly. This would be considered as spoonfeeding INHO. Better let them rack their brains and have their own 'Ahaa!!!'

So the problem remains the limitation of some to conceptualise the solution, as well as the parts making up the solution.

I do believe that we have to find out some problem domains which are of interest to them, and let them THINK about A (not the solution, letthem be creative) solution. We shall leave the implementation part for later.

May be we get it wrong by sticking them in front of a PC and wait for them to code down. This has for result that they stress out when they see the time going by and no concrete solution being developed, or lose confidence in themselves.

This leads to irrational comments like 'Programming is hard' and we get in a a vicious circle.

I can't program so i will not do it. And I will not program as I can't.

Since 'C'est en forgeant qu'on devient forgeron' then won't ever get good at it.

Most of you will agree that the Ahaa! moment does not necessarily come during the coding phase.

While writing my thesis for, they happened in the trains or in parks, supermarkets... i.e. when i least expected them, simpl because our sub-conscious or unconscious mind keeps on solving problem in the background.

I think that you will agree Avinash that the satisfaction of that 'Ahaa!' moment is something all programmers should experience at least once in their lives firstly for self-satisfaction and it does boost-up self-confidence as well.

So people start trying to conceptualise solutions and get your brains working creatively!!

curiousEngine said...

Hello Mr. Gavin.

First of all, on behalf of Management with IS class, we would like to thank you for the revision classes which is so helpful for us.

Given that as am a coding horror fan, I would have as reference the following article:
http://www.codinghorror.com/blog/archives/001035.html
and my personal article on which I've blogged on relating to the topic:
http://ramjeeawon.info/HTML/node/11

Personally, I think Programming Methodology should enable someone to efficiently formulate a solution for a problem. Its the same as Mathematics, where you learn, say to differentiate/integrate and then you use it everywhere to solve problems. Of course, you use your logic to determine whether this problem should be solved by calculus or any other method.

In the same way, this module should permit students to express their solution in any programming language given that they know the concepts.

Firstly, I think: THEY SHOULD LOVE PROGRAMMING! and C++ is not good for a start.

I would recommend Turbo Pascal for Windows, which is a Structured, Disiplined programming language.
Within two-three weeks of the first semester, they should produce a practical assignment demonstrating the mastery of a range of programming skills.By the same time, I am confident that they would find programming easy and fun!

Then we shift to C++ to demonstrate the powerful concepts of OOP.

I know many colleagues who conceptualise the solutions but they are not able to express properly in C++ and in the C++ IDE.

Here are the following improvements that I would like to suggest:
1) The CSE website should implement an educational system where they can go through quizzes in programming, try online programming challenges for which lecturers can reward the student in terms of bonus marks for test/assignment, a lively forum on programming.

2) Lecturers should run the code before us. I do not agree that they have a laptop and do not even have a compiler even installed. In this way, we can enhance our debugging skills by learning how to use breakpoints, tracing the error, understanding the compiler messages.

Thank you.

G@V!N said...

Dear curiousengine,
First of all, I would like to thank you for going through the blog and replying.

I do agree with you on many points especially when you say ”this module should permit students to express their solution in any programming language given that they know the concepts ”. As you rightly mentioned ‘,express their solution’, however I have witnessed that they have major difficulties in coming up with that ‘solution’. I have no doubt that they are conversant with the concepts. Most of them know programming constructs and syntax.

As I have said before the main issue is not only with the programming language. It could have been Pascal, Basic or even Scheme, the problem resides of the inability to ‘think laterally and creatively’ and break down the solution in such a way that we can use simple constructs to build up the solution. The language is used just to express the logic, so the logic is more important. Loving C++……. is not primary, what’s most important is to love logical thinking and problem solving, the language comes in just to express/demonstrate the logic used.

The language used for OOP at UOM is mainly Java, whose syntax is similar to C++…. It’s like hitting two birds with one stone.

About your suggestions, I believe that should the student really be interested in programming, he can find loads of quizzes or challenges on the Internet, as regards ‘rewarding students’, well I believe that as adults they should not think that the time he spends to perfect himself in an art (i.e. programming) should be rewarded with things like bonus marks.

Because even if he is not rewarded with bonus marks, the skills he has acquired will be prove useful in tests/assignments and exams, and in their careers. They should regards their work (labsheets, quizzes, challenges...) as training/investments for their career.

As regards the ‘lively forum’, well it is the students make the forum lively, we have a forum in MOODLE, how many students have used it in the last 4-5 months? (as at right now, none).
Though I personally check the forum, no one posts anything on it.

Well personally, I believe that it will be tough for a lecturer to code in front of you and show you how the code works. Learning about error messages, debugging procedures and tracing the errors are things which are learnt by working through labsheets consistently. We allocate enough time in the labs for students to work their labsheets, but the reality is that some of them waste their time browsing, checking their e-mails, updating their facebook profiles and/or chatting.

I believe that some students, depend a little bit too much on the tutor.

These are university students. It is tough for someone to teach how to code or how to understand error.
IMHO That's spoon-feeding.

These error messages in the IDE are in plain English.
The students have to bear in mind that they will have different IDEs throughout their Programming Careers, so will they still expect being taught how to debug based on Error Messages)?

Some things simply need to be tested by the students for them to acquire skills, because I believe that ‘discovering something by oneself’ is still better than being taught that same thing.

G@V!N

Unknown said...

Hello Sir,
That's nice to hear someone DREAMING of programming.
To be honest, I appreciate the effort you put in to help us in programming, and hats off to the patience you have during lectures, worth admiring.

As concerns programming as a subject matter, it is really interesting and challenging. It might be that we students never had a positive attitude towards the module which is most probably due to the fact that previous lecturers did not make the lectures hyper-active and entertaining for a joyful and sound learning.

I also THINK that had the imparting of programming knowledge been done through the traditional teaching methods rather than lecturing, it would have been easier for the students.

But given that we are University students, which is also synonymous to being mature people, we are supposed to be only GUIDED by lectures and the 75% learning process be done personally or through group work.

It is also difficult for both the lecturers & students since we have now adopted the large cohort classes given the financial situation of the UOM for on "alerte rouge"!

Personally, i like programming and the challenges it holds, but it's a rather demanding subject.I've been a science student at college level, and if could, i would equate programming to a slightly higher level to physics.

And I will try to enjoy programming as much as i did for physics!

Anonymous said...

Hello everyone!Well I must agree with Mr Sathan when he says:"I believe that some students, depend a little bit too much on the tutor." But it is really hard for us to make the transition from college spoon-feeding type of learning to the one where we have to do mostly all the work by ourselves.
But when it comes to the issue about teaching programming methodology, I believe programming cannot be taught because different persons will have solutions to the same problem.And it is really us, students who have to do all the thinking!
And yes,I sometimes find it difficult to have 'ahaa!' moments mainly because I have serious doubts when coding my lab sheet answers.It's like when I'm thinking about a particular solution I don't know if it can be done in C++ or not.
I often look for help on the internet,from friends and from our lecturer in our lab sessions and this sounds clearly enough to get through all the lab sheets!But apparently I'm not trying hard enough:S
Kushum Luchmun.CSE(YR1)

Anonymous said...

Oops!I missed out one word in the previous comment:"...I believe programming cannot be taught because different persons will have *different* solutions to the same problem."

Anonymous said...

Well according to me it's innate. A real gift from god. Those who want to achieve higher performance in problem solving, they'll simply consider it as a hobby. Like you and mr avinash are pros, it's only because IT/computer science is your passion... Well if some1 really wants to learn programming without coming from a computing background,brief them about how computers work and teach them problem solving using algorithmic approach first and then migrate to programming language... First we learn A,B,C...up to Z, then we come to know about words then subjects, verbs, sentences...The same approach programming should be taught... Well since you care for those who don't know programming, you really need to prepare some notes on algorithmic problem solving and give to students who havent' studied computing form the very beginning...

G@V!N said...

Well Yasir,
I do agree with the fact that we have to be able to think logically. Unfortunately, i believe that its wrong to expect to be taught all the things ...get rid of the habit of being spoon-fed....

As you pointed out, Mr Avinash Meetoo (and some other friends as well) and myself pretty much like programming as a hobby, but may be we have been inspired coz we did not do this subject in out college day...we only did Maths, Chemistry and Physics......so i think its about motivation.

I would not term myself as a pro in programming..i learn things all the time...and it takes about 10 yrs programming in a language to be come a pro...i am far from that.

I was a student at UoM and i believe that you are going through a phase through which everyone passes: Its the realisation that sudying at Uni is different from college.

Welcome to the club!

If by God's Grace i am given programming to teach i will try to apply all the feedback received in the online feedback form, conversations with students, and blog postings (and that includes ur posting as well)

Thank you for your comment. I am awaiting others as well!

G@V!N

G@V!N said...

Well Yasir,
I do agree with the fact that we have to be able to think logically. Unfortunately, i believe that its wrong to expect to be taught all the things ...get rid of the habit of being spoon-fed.... When i was studying I had a lecturer called Dr Eleanor Mc-Laren, she had a 'method' called the jump start..she would teach u complex stuff and u had to learnt the simple things by yourself, thus favouring discovery rather than learning....it worked fine for me! For example, something like HTML would be taught in 1.5 hours! She explained the tags and structure and HTML documents..and we have to investigate the attributes and create web pages in the remaining 1.5 hours

As you pointed out, Mr Avinash Meetoo (and some other friends as well) and myself pretty much like programming as a hobby, but may be we have been inspired coz we did not do this subject in out college day...we only did Maths, Chemistry and Physics......so i think its about motivation.

I would not term myself as a pro in programming..i learn things all the time...and it takes about 10 yrs programming in a language to be come a pro...i am far from that.

I was a student at UoM and i believe that you are going through a phase through which everyone passes: Its the realisation that sudying at Uni is different from college.

Welcome to the club!

If by God's Grace i am given programming to teach i will try to apply all the feedback received in the online feedback form, conversations with students, and blog postings (and that includes ur posting as well)

Thank you for your comment. I am awaiting others as well!

G@V!N