Friday, November 30, 2007

To Program or Not To Program? What is The Problem?!

The reason I'm writing this blog entry is two-fold: Analyzing the problems I faced with the students for three consecutive years teaching data structures, and trying to answer the eternal question asked by pure information systems fans: Do I have to program to survive the IT industry?
I'll first address the first part of the reason because it was what triggered the entry in the first place. The problem that made me wonder so many times and ask the question about programming was the fact that in the second year, I'm asked to teach the students a very hot topic (data structures) while they're oblivious to the fundamentals of programming; and I mean basic programming (either that or I'm totally getting the wrong signs from their confused looks and questions.) Students cannot understand what functions are, how they're called, what's the difference between variables and objects, or between data types and reference types, how to define a class, what can be a class, how to debug, and most of all how to read and correct programming errors (either syntax or logic ones.)
Let me clarify two important facts here before I proceed: First, I'm in no way a programming guru; I know some stuff but no advanced programming. Second, there ARE students who seem to have programming "programmed" naturally in their genes. I asked myself many times what gives me the right to discuss a topic I'm not a hundred percent experienced with, and the answer came to me this year; there's a serious problem with the way programming is taught, when it's taught, and why it's taught.
Second-year students are supposed to have studied at least one basic programming course in their sophomore year, and in the specific case of my faculty they're taught in labs by two of the most gifted TAs in programming whom I hold a great respect for: Waleed and M. Handousa. And I always blamed the students for not listening in labs. I figured out the problem isn't with the TAs ways nor in the students; the problem is, programming is a difficult subject to be taught and learned, and a huge effort should be paid to developing a methodical way of teaching it so that basic programming skills can be instilled in students to enable them to go the distance on their own.

The way programming is taught

In the first year, students are taught the basics of programming; that is, data types, variables, loops, flow control, and functions. I don't think amateur students know what any of these things is good for! They don't see the big picture: programming is a way to tell the computer how to solve problems, and it resembles our normal way of thinking when attempting to solve our problems. What adds "spice" to programming is that computer makes us capable of adding little "tricks" to solve problems that we don't usually use in real life. But it has the drawback of sticking to the way computers are built. So students don't see that programming is slightly different from ordinary problem-solving techniques in that it can do some things the mind can't do and it can't do some things the mind can do. Students should be able to see that all the basics of programming are tools to the original goal: solving a problem, and they should first be able to think systematically about how to solve the problem at hand and then proceed to check how programming is to be done, and what it will be able to do for them to enhance their way and what parts of the solution it will not be able to do "as they do it in their minds." the brilliant programmer then will figure ways to use whatever "is possible" within the programming language to achieve whatever "that can't be done following the normal human brain thinking."
Programming courses tend to teach students "how" to do stuff instead of "what" to do if a certain problem needs to be solved. I think an emphasis should be made on how the human brain solves a certain problem and then how to adapt the solution "manuscript" to fit the intricate programming concepts and techniques.

When programming is taught

The problem here is that programming is taught before the students have any idea of how to "think" about the solution to a problem, how to build flow charts, and how to understand algorithms. When a child goes to school for the first time and is taught how to make simple calculations, he doesn't see the big picture; the abstract mathematical principles that make computations what they are. That's exactly how students are treated when taught programming: Do it now and you'll understand later. Well, you can't tell a 17 or 18 years old student that! He or she is mature enough to understand why things are done a certain way. I should never write a recursive function call without explaining to the student how it's executed in memory. But to do that, he has to have a knowledge of memory and how to deal with it. That's not a problem to me to explain that; the problem is with so little time in the semester how am I supposed to do this and still have time to explain the different data structures and algorithms? Either more time should be dedicated to this matter or it should be dealt with in a separate course. The curricula is so keen on teaching a state-of-the-art programming language and no focus is given to what principles make understanding programming possible in the first place.

Why programming is taught

I'd like to make a distinction here; there is the problem that needs to be solved, and there are problems related to programming the solution to the problem. Software engineers should be able to solve the first; meaning they should be able to analyze the problem, define how it will be solved, identify the user requirements of the software, identify the software components, and make a detailed description of what to do programmatically, while computer programmers should be able to solve the second; meaning that once they have the "manuscript" of the solution, they should be able to address any problems that arise during programming, what classes are needed, code optimization, testing, …etc. There's a debate among many of the TAs I know about whether or not the first should do the job of the second, but I think there is an agreement -forced by the market- that the second "must" be able to do the job of the first. That's where the real problem is; how is the student supposed to know how to program if he doesn't realize programming is a tool to solve a problem and he must first figure out how to solve the problem?

An interesting study conducted by Dr. Saeed Dehnadi and Prof. Richard Bornat from the school of computing, Middlesex University; which was titled "A cognitive study of early learning of programming", argues that there are two distinct groups of students when it comes to the ability to learn programming skills: those who can, and those who cannot. The focus of the solution to this problem has been always on the teaching side: changing the language, using an IDE…etc. this will evidently lead to no progress, since the problem (from their perspective) lies in the learning capability, how to measure it, and I can add how to enhance it. I made a quick review of some programming course pages on the web (check below) and found an interesting point: these courses DO NOT teach a specific programming language, they just pave the way to that by focusing on principles and concepts of programming. The problem with our way of teaching is that we think it's cool to hit it off and jump start the students into the completely different and mystic world of coding, thinking that their excitement about it is a good thing. They end up being so confused about what it is exactly that they're supposed to do with all these for loops and if-else conditions. When I ask the students in my sections whether they can trace what a code does, they seem perplexed and unwilling to even try; to them, those who write the algorithm are super humans.

I conclude with excerpts from two of the sites I checked…

"
List and Explain the five steps in the Programming Process:
There is a basic flow for computers as well as in programming. All programming commands can be mapped to this basic flow: BASIC FLOW OF COMPUTERS = INPUT, PROCESS, OUTPUT.
To be effective in anything, you really need a Process. The programming process can and should be used for any programming language that you use. The five steps in the programming process are:

  1. Define the Problem – discuss problem with the users of a system and the systems analyst to determine the necessary input, processing, and output
  2. Design the Solution – design an algorithm and represent the logic using a Flowcharts or Pseudocode
  3. Write the Program – express the solution in a programming language
  4. Test and Debug the Program. Insure that the program works as planned (Use an Interpreter or Compiler
  5. Document Throughout – provide material that supports the design, development, and testing of the program.

"
From http://avconline.avc.edu/rhoffman/Programming.html

"
Introduction to Programming
Objectives
By the end of this reading you should know the following:
Expain in simple terms what computer programming is.
Understand why there are programming languages.
Understand the terms high-level language and low-level language.
Understand the difference between compiled and interpreted programming languages.

"
From http://revolution.byu.edu/programmingconcepts/programmingIntro.php

Read This

This article - in my humble opinion - is hilariously funny and honest..
http://www.ahram.org.eg/Index.asp?CurFN=educ1.htm&DID=9416

Friday, November 16, 2007

Guide to Establishing Good Correspondence With International Professors and Institutes

In this second installment, I'll talk about what a researcher should do and in what order to establish a correspondence with an international professor or institute. The process is not greatly different if you're pursuing a Master or a PhD degree, when there are differences, I'll try to highlight them.

First of all, this is an extensive process that can give you a smash hit from the start or can go on and on for some time, so the key to complete it successfully and reach the goal is to be patient, dedicated, and appreciative (I'll get to the appreciative part later). The following steps pretty much summarize what's to be done:

1. Identify the countries in which your research is strongly established (for example: East Asian countries are strong in hardware-oriented research, robotics, AI, …, while European Countries have a strong base for applicable research, business-oriented research, ...)

2. In each country you choose, identify the list of top 100 universities there. Note that there are numerous terminologies used there that are different in meaning. For example: a university is either composed of faculties (just like us) or schools (a school being an analogy for faculty), or departments (a department being an analogy for faculty). Faculties and schools of a university are not necessarily in a single building, rather they're distributed all over a campus that's much wider that what we know here. A faculty or a school can be composed of many departments, possibly located in a single building. A university also may have research centers which can be either independent (resembling a faculty) or a part of a certain department or faculty.

3. Now that you identified the list of universities, check in each one whether they have a faculty, school, department, or center that are related to the field of study that you plan to pursue. Keep an orderly journal on your computer for each university so that you won't get confused, I personally use Microsoft Office OneNote (brilliant!).

4. In each faculty/school/department, you'll usually find the following information:

(i) General info about the faculty/school/department
(ii) What undergraduate students study
(iii) What postgraduate students study
(iv) Research activities and areas
(v) Scientific degrees given
(vi) People (Faculty --> meaning professors, doctors, lecturers)
(vii) Current events and activities

In the previous list, only (i, iii, iv, v, vi) are of importance to you. You want to know about the faculty/school/department, what degrees they give (so you know if you can go there or not), what are their research areas (so you'd know whether they can support your proposed research or not) and what postgraduate students study, because that's what you are. You also want to know the names and contacts of faculty members and what their research interests are so you can later choose who you'd want to contact.

5. The next thing to identify is whether the faculty/school/department provides the degree you're pursuing by research or by courses. Usually, a Master degree is provided by courses, while a PhD degree will differ according to the country of choice. Let's elaborate further:

  • A Master degree by courses means that the faculty/school/department offers a collection of postgraduate courses that you need to choose from until you complete a certain amount of credit defined by the requirements (will discuss requirements later), these courses usually are taken over a year if you're a full-time student. After you complete the courses, you need to choose a research subject and write a research proposal to be presented to the faculty/school/department. If they agree to your proposal, they assign a supervisor to you and you start working for the amount of a year-two years max, by the end of which you need to present a dissertation (thesis) and defend your work orally in front of a referees committee. Don't make the mistake of thinking the preparation of a research proposal is a piece of cake; it has to be detailed yet not long, and you need to device your research methodology carefully. It can be rejected if it does not meet the standards of the faculty/school/department.
  • A PhD degree can be obtained either by research or by courses. In fact, there's not a great difference between the two. A PhD by research involves working with the supervisor(s) during the research phases proposed by you, with the possibility of taking some courses in the first six months of your stay at the university. A PhD by courses involves taking an extensive set of course for the duration of a year to two years (depending on the number of courses you should take to fulfill the credit required) then proceeding to work on a research dissertation; just like the Master degree. The difference here is in the amount of course credit required, which depends on whatever previous courses you took back home and whether you already hold a Master degree (Yes people, you don't need to hold a Master degree to take a PhD degree, though you'll need to take additional courses). Some faculties/schools/departments will acknowledge your Master degree while others will not. Anyway, whether you choose a PhD by research or by courses involves preparing a PhD dissertation (thesis) that you will defend orally in front of a committee. Not all faculties/schools/departments offer both options, in USA and Canada and some universities in Japan and Hong Kong, you can only take a PhD by courses. IN the rest of the world, you have a choice or you work by research. So you need to read carefully what the type of PhD offer is. As to the matter of which is better, it really depends on you:
  1. A PhD by courses has the following advantages: the courses provide a variety in study and practical involvement with teams of other researchers, and some people are more comfortable with course work, whose objectives are clearly defined. Also, courses give you a chance to see how different professors work and think and makes it possible for you to make an informed decision about who's the professor you want to work with. The courses will often involve seminars and projects that are considered preludes to the actual PhD work, giving you more ideas about the "hot" points in current research. However, course work involves a lot of studying, and you have to maintain high grades in all course for all the duration it takes to finish course work and you have to work on many projects for different courses. So unless you're fully prepared to meet the stress with equal vigor and hard work, you'll take forever to finish.
  2. A PhD by research resembles what we're doing here in Egypt; you make a proposal, then you're free to conduct your research at your own pace. This has the advantage of being a little less stressful and does not involve the hectic course schedule and project deadlines. However, since you work more independently, you risk the possibility of falling behind your timeline. So you must not give yourself much slack and you need to try and stick to your own schedule. Foreign supervisors are often polite; they will not chase after you with a stick to finish because they realize it's your own work!

6. (Requirements part!) The next important thing to check is the admission requirements for the degree you're pursuing. Usually you'll find that in a section or link for "prospective students ->postgraduate". Read the basic information provided and do not forget to check the requirements from international students, which usually involve the language scores required and whether recommendation is needed by local professors. DON'T forget to check the accommodations provided (in-campus housing, near campus, or private; the best option is in-campus if available). Also, check for the deadlines for admission, usually deadlines for international students are earlier that the official deadlines (for matters related to limited places and required visas, ...)

7. Make a checklist of all the required paperwork and check which is already available to you and which needs to be obtained (TOEFL, GRE, Recommendation letters,...)

8. Begin to make a list of all the professors/doctors/lecturers in the faculty/school/department you're planning to join and who specialize in the subject area of your interest. Then proceed to write e-mails to them explaining your wish to join the faculty/school/department and your wish to have them as supervisors. That's only preferable if you're conducting a degree by research. There are a number of rules for writing these mails:

  • Address the professor as: Dear Professor …….. or Dear Dr. …….. According to his/her title
  • The first thing in the body of the message is to state your name and affiliation: I'm ….., a teaching assistant in ……, university of …..
  • Then proceed to state that you're planning to apply for the degree you want and that your research interests are so and so, and that you'll be honored if he/she agrees to supervise your work
  • State any research publications, test scores that you ALREADY have. They're great assets in you advantage.
  • Say thank you for the time spent reading the mail; he could discard the mail and don't bother at all, it's gracious of him/her to read your mail and take the time to reply (that's the appreciative part!).
  • Write a detailed signature stating your name, affiliations, and contact info.
    If the professor replies with a no, you have to reply with a thank you anyway for your time, otherwise, he/she will usually ask for your plan of work, so be ready with it! Also be ready with any information they need about your place of work or future plans (when do you plan to join the research,...)
  • Make the mail as short as possible with separate paragraphs for separate parts of what you want to say. Be concise, don't tell a life story!
  • DO NOT write to more than ne professor in a single department or school. Write to as many as you like, but not to two people who work together. Wait a week until the first replies, if he/she doesn't, then safely proceed to his other colleagues. Notice that they have a weekend on Saturday and Sunday so don't send Friday expecting a reply the day after. Also notice the time zone differences.
  • Wait, be patient, and watch for admission deadlines and send your papers before them, the earlier you send your papers, the earlier they will process them, and the earlier you're granted admission and accommodation.

I hope this article sheds some light on this subject that's usually left to the imagination of the researcher!

Just a Thought

Greatness has many interpretations in people's minds. In my mind, a great person is a someone who's main focus in life is to conquer the impossible and break the barriers.

In the world of a great man, there's no place for a great woman, because when a great woman is found, she needs to be cherished all the time, and this holds no prospect of challenge to a great man. That's why a great man can only have one (or both) of two types of women in his life: a quiet woman who's a mother most of the time, and a series of flings. That's because a great man wants and gives love in small, distant doses. A great man doesn't have the time to worship a woman all the time, but a great woman needs to be worshiped most of the time.

A great man has a great pride, and he will never compromise that pride. That's why he's so stubborn, because his opinion is not just a opinion; it's an expression of his pride.
In the world of a great woman, there's a small place for a great man, provided he does not shake her sense of greatness and does not invade her space with his own grandiose self. A great woman wants and gives love most of the time, and she can cave for small things to please that man, but there are things that are off limits. She demands the great man to compromise in the amount of attention he's willing to give. If the great man is really moved by that woman, he may be ready to make the compromise, but that might not last for long. Because a great man lives for the challenge, the great woman has to be a constant challenge. So the great woman has two things to do for that man; show him that she sincerely appreciates the extra amount of care he's giving her, and pose a continuous out of reach goal to him.

Why is a great woman asked to go the extra mile for a great man while he's just asked to give a little more love that he normally gives? Because a great woman can make the compromise without feeling that her pride is injured. Because her generosity is an integral part of her greatness. While selfishness is an integral part of the man's greatness. Not the selfishness that means self-absorption in his needs without a care for the world, but rather the selfishness that makes him strongly believe in himself and his capacities.

Need Equation


Thursday, November 15, 2007

Lessons learned from the Master degree

Now that I have a Master degree and on the track to get a Ph.D., and being a researcher in a developing country, I think I can make some notes about what to know and what to do to obtain a Master degree. Also, I think it's about time someone begins to explain all about the process of obtaining a scholarship, either locally or internationally funded.
Well, let me talk first about the lessons I've learned during the phase of the Master degree. In doing so, I'll try to stress upon some points that are different between computer science research and research in other branches.
There are three extremely important things that a Master degree seeker need to make choices about:

  • Pick a subject area,
  • Pick a supervisor,
  • Pick a research methodology.

Picking a Subject Area:

I've seen many colleague researchers; including me, who did this the wrong way. The wrong way being to choose a general area of research then pick a sometimes random title then applying for the Master degree. After that comes the precise definition of what the research will propose as a contribution to science. Most of this happens because of the scarcity of computer science professors that are available to supervise researchers. This, in turn leads to one of four situations:

  • Professor IS knowledgeable in chosen area AND Researcher CAN work mostly on his own: Professor provides only necessary guidance, smooth collaboration or total clash
  • Professor IS NOT knowledgeable in chosen area AND Researcher CAN work mostly on his own: Researcher is faced with the possibility that his work is not scientifically validated by a specialist
  • Professor IS knowledgeable in chosen area AND Researcher NEEDS major support from supervisor: Normal situation, professor gives correct guidance to the researcher and directs the whole process, researcher learns two things: new science and the proper way to guide researchers in the future
  • Professor IS NOT knowledgeable in chosen area AND Researcher NEEDS major support from supervisor: Complete Darkness!!!

I think the proper procedure of choosing a subject area should be:

  • Identify a general subject area of interest to the researcher
  • Discussing with the supervisor what possible "hot" points (usually described as problems) in that research area that are currently the focus of world researchers, then choosing a point that is not likely to get "cold" in the near future (within 3 years)
  • Conducting a preliminary review of the current research in that point to see what other researchers are doing to solve the problems in that point and whether their approaches are classified or need to be classified.
  • Determining, based on either the professor or the researcher knowledge, what other venues of mechanisms or techniques that were not explored yet to deal with that point.
  • Choosing a technique or mechanism that the researcher is willing to explore then assessing the initial validity of applying it to the problem at hand.
  • Writing a research proposal that highlights:
  1. The point and its importance
  2. The background review conducted
  3. The proposed approach to deal with the problem in that point, and a definition of what aspects of the problem will be addressed.
  4. The proposed outline of activities that the researcher will perform to reach from a preliminary understanding to a possible solution, usually this is known as the research agenda or timetable.

Picking a Supervisor:

Picking a supervisor is pretty much like picking a friend, both of you have to be on the same page in the crucial principles, and otherwise you should be able to tolerate each other's "minor" differences. Some of the researchers I've seen are stubborn, especially when the case is that the researcher "assumes" he's knowledgeable in the chosen subject while the supervisor is not. Stubbornness here means that the researcher thinks he/she is entitled to "lead" the research and ignore whatever professional advice the supervisor can provide. The supervisor is not a supervisor just because he's knowledgeable in a subject area, he's also responsible for managing the quality and the pace of the conducted research. So even if he can't provide much help scientifically, he still is the senior and major partner in this Master project. He's been around; maybe even before the researcher was born. He has priceless experience regarding what professors like to read and how they evaluate scientific material.
There is no doubt that it's up to the supervisor to make things "heaven" or "hell" for the researcher, that's why the researcher should take the time to think about who he/she wants to work with and how well his/her social skills can salvage any thing that might go wrong in the relationship.
However, the common case is that the researcher does not have much say in who should be the supervisor. Sometimes it's a choice made by the department, sometimes there's no choice whatsoever because of the previously pointed scarcity of professors. If that's the case then obviously you can get stuck with a supervisor that you might not like. The important question to ask yourself here is: Do I not like the chosen supervisor for personal reasons or for professional reasons? If it's the former, then I can't highlight this fact enough: Work shouldn't be a place where "likes" and "dislikes" control the dynamics of relationships among coworkers. As the English and Americans say: Business is Business!
If the later is true; which means you have objections to the supervisor's professional ability, then it's one of two thing: maybe you're prejudiced; you hear that he's not professionally adequate so you're assuming it's true. The other thing is you're right, and in that case there is a possibility that you can still salvage something out of the situation. You'll have to focus on benefiting from his other strengths and compensate for his supposed lack of knowledge with your own determination to do well. You can benefit from the help of other professors and/or coworkers. Participate in seminars and conferences and if attendants do not critique your work ask them afterwards what they think of your work. Join Internet groups and forums that are engaged in your research area and ask for help or guidance, and chances are there are professors who participate in these groups and forums who are willing to provide help.
Having identified the grounds you're standing on, now it's time to proceed to the actual work. Set up meeting appointments with you supervisor that can be kept, and make him always involved in what you think and what you do. Maintain a good friendship with him and have an open mind that listens with appreciation, not with rejection. If the supervisor asks for a certain task to be done, a certain techniques to be used, don't just say no because you don't want to do the task or use the technique, analyze what he's proposing and check its feasibility. If "in you humble opinion" you think the request is not doable, then argue nicely and make a logical point. Discuss the issue with him like this: "I can see how good and reasonable your suggestion is, but there are reasons why it may not be the best course of action to do so and so." Do not ever use the term "it cannot be used" because of two reasons: first, this sentence is like shutting the door in his face (not polite and not constructive to the relationship), and second, because there is a possibility that his suggestion IS viable. The key to not losing the good balance in the relationship is to always be open to discussion and debate.

Picking a Research Methodology:


I didn't know there was something called a research methodology, and I think most of my colleagues don't know what a research methodology is. Nonetheless, we all choose our methodology intuitively.
Research methodology is the set of actions that a researcher takes in order to solve the problem he/she is addressing, and the validation tests that will be performed in order to know the suggested solution/mechanism/technique is correct and solves the problem. Those tests and the way you are supposed to handle them to give rigor to your research is what is understood under methods.
There are two main research methodologies:

  • Qualitative (interviews, questionnaires)
  • Quantitative (statistics, modeling, ...)

For some projects qualitative methods are more appropriate, for some quantitative, while for most a mixture of the two is adequate. You should pick your methods and justify your choice. Research methodology, however, is too a complicated thing to be explained here. In computer science, the quantitative method are more prevalent and thus I can elaborate on it further. In a quantitative method, you should specify the following:

  • Explain clearly and comprehensively what will be done, in what order and how
  • Identify independent, dependent and confounding variables:
  1. Independent variables are variables that you suggest based on your solution/mechanism/technique. Their different values affect your dependent variables in a consistent way (increase, decrease) or do not affect your dependent variables (stability)
  2. Dependent variables are the variables that measure the performance of your solution/mechanism/technique. Your aim is to measure how they are affected by your proposed independent variables and identify the nature of effect (positive, negative, none)
  3. Confounding variables are variables whose behavior cannot be determined by changes in the independent variables (they increase for specific values and decrease for other values)
  • Describe study setting (naturalistic or contrived)
  1. Naturalistic study setting refers to applying your research solution/mechanism/technique to a real life situation, most probably in the industry
  2. Contrived study setting refers to your construction of a prototype, simulation, or limited pilot of your proposed solution/mechanism/technique and measuring its performance within a limited and controlled environment
  • Describe sample (type, how it is selected, criteria for inclusions and exclusions of members of the sample)
    Here's where I get confused a little bit about how to carry this part, in some applications, choosing a sample is very natural (studying the effects of a medication on the improvement of health), but in computer science, I don't know exactly what's the scope of a sample in certain applications. Suppose one of my colleagues wants to study the improvement a new algorithm has on the performance of query execution in distributed database systems. What is the sample space that she should deal with?
  • Specify time horizon
  1. Snapshot: measuring performance in a single point in time
  2. Multiple points in time: measuring performance after carrying out the solution/mechanism/technique (after). Measuring performance before carrying out the solution/mechanism/technique, then applying the solution/mechanism/technique and measuring performance after that, then comparing the two performance measurements(before/after). Measuring performance before carrying out the solution/mechanism/technique, then applying the solution/mechanism/technique and measuring performance after that, restoring the environment to the status previous to the application of the solution/mechanism/technique and measuring the performance, then evaluating the changes in performance measurements (before/after/before).
  • Identify equipment (including techniques, measures, measurement scales, materials)
  • Describe experiments from most to least important
  • Provide the measures, equations, descriptions of techniques or prior knowledge that relate to data production and analysis
  • Discuss whether your approach and its results can be generalizable, and if not, identify what modifications that are to be done to make it applicable to situations or systems other than the one you chose for application (whether natural or contrived), and changes of performance are to be expected then.

Well, that concludes just about most of what I wanted to talk about in that subject, I hope it can be of use, and next time I'll talk about the process of obtaining a scholarship, either locally or internationally funded.

Template by:
Free Blog Templates