October 2006


  • my English is so clumsy! (is “clumsy” the good adjective to express how bad it is?)
  • my posts are too long to express any clear idea
  • there is still no code!!!
Advertisements

Some of my good friends liked to kid me this way: they show me a program they just wrote/discover and secretly bid if I will ask my favorite question: “do you really need this?” [1]. Before they told me this fact, I didn’t realized that I often ask that question. The bad thing is that it could sounds like “what useless is your work!” … I’m so sorry if some people understood that of me. The good thing is that now I take care not to say it again … but I keep remind the real meaning: what is the point which is really important in that? In fact the real question is not about the word “need”, but is about the word “this”.

To my mind, the real importance of this question is about distinguish “how” and “what” [2]: this point is useful for me in any area but let illustrate it with programming language.

When I learned to program I often thought in a problem-solving approach: I searched how to solve the problem. Perhaps because of the language I used: C. This is a perfect example of language to express not what you want to do but to express what you have to do to get this result: this is exactly how to do (and you can even set the register of the microprocessor because you know exactly how to do to obtain your result … and how the processor work, wow!). This is really efficient on nowadays machine … but with new processor instruction sets and hopefully new processor architectures (x86 is not really the best one!), with also concurrency in its way to be widespread everywhere, the compilation of C code may result in less efficient running code that compilation of high level language. OK OK, some times a cast in void** is easier and more efficient than anything else, but I’m really curious of what Haskell compiler developers will be able to do.

Another approach of problem is to concentrate on definition of what we try to solve (problem-defining approach?). The idea is that if you know exactly the prototype of the C function to write and its documentation, 80% of the work is done. The best example I can think of is a logical programming language: prolog. Those kind of programming give you an reasoning engine to which you just have to give facts and rules: he will search for you the result you want. You have to define what you know and what you want, he knows how to do, really! It’s so convenient to express complex reasoning system of AI.

More surprisingly (to me at least) another language which guides you to think about what you want is SQL. That’s only after having written some fairly complex queries (like mathematical integration of probability distributions) that I realized that I was completely focus on the data I have and on the data I want, and no way I can define how to proceed in SQL!
Those languages can be seen as declarative languages: express your knowledge of what you want, let the engine do it for you.

Another kind of language can help to problem-defining approach: the functional languages. Because the way to write functional code is to think about what is entry of function and what is the output: the “how to do” is replaced by “what is this function” (for example you don’t write how to loop, you call the function which solve the next problem after the first step (often recursion)). Main difference between logical and functional languages is the internal engine of logical system (backtracking) which enable in logical language to not make difference between the parameters of function and the return value: functional language let you define what is the result and what is the process (here the developer is happy) where you have to use (and tricks) the logical language process with languages like prolog.

All that to say that in most of the case a language focusing on defining data and their process should be more convenient to design robust solution to well defined problem. And so my next blog post will probably be on what is my next language (matz said it’s good to learn one language every year!).

[1] PAF used to call it the “coquellienne question”
[2] Lot of those ideas come from my studies/past experience at ENIB/CERV

I recently discovered Africa@Home.

From of software engineer point of view, “@home” projects are very interesting. And when they are used for humanitarian purpose, that’s even better, isn’t it?

About education of CS and CS in education.

In the President’s letter of Communications of the ACM [March 2006, Volume 49, Number 3] David A. Patterson explained how to “re-invigorate computer science curriculum”, and request for evolution of computer science education. Briefly, improving CV is achieved by two general ideas. The first is “Technological update“: student should study and use tools (ex. Eclipse) as well as library (ex. JUnit) for homework, and also a focus should be given on study of parallelism. The second way to improve CV is to make “Course I would love to take“: for example he cites the construction of own supercomputer through FPGA, but also participation to an open-source project.

The point of view is mainly oriented toward programmers. And I agree that programmer students must be confronted to industry’s reality: they should have used during home-works a version-control system, followed any methodology … which imply that teachers use those tools too: this is not always the case as they are often researchers and don’t have the same needs as industrial do.

The education problem is not so simple if we think that today programmer can be tomorrow solution architect. Where the programmer will be interested in the better version-control system, the architect will like to know more about deployment tools. The problem arises: taking time constraint into account, what are the best things to teach to please future programmer but also future manager?
IMHO “what” we learn at school is not so important as “how” we learn it (curiously, when I am programming I always focus on “what” I do instead of “how” I do it … could be the next blog post). How we learn is of course the way we learn it but also the context or environment in which we learn it. If I would easily link the way to learn to pedagogical problem (see also an interesting blog on Non linear learning, the non linear internet), “how” we learn is certainly always oriented towards the learner: what is his motivation? And I guess that the only common interest for all students but also teachers is the CS culture: tools, languages, methodologies, communities, blogs, research … Students look only for help/guide/mentor/model to develop their computational thinking; if the teacher is aware to be an entry-point to CS culture, students will learn the needed knowledge from any source: lecturer, books, internet or themselves! Motivation is good enough (see Scientists call for government to help fund video game research), students will learn what they need. Ok, this is the optimistic point of view of education.

Lots of random thoughts … I hoped that bloging would help me to organize that confused brain of me, but instead it help to put in it some more random thoughts! All those ideas come to me when I thought to the recruitment problem: how to evaluate knowledge and knowledge use of a candidate? how to define the need of a position? … still have so few ideas about it.

So I conclude with the only thought that is clear to me:

Education

I changed the sound system of my computer from the cheapest one to a new Sony branded but yet very simple one. After 7 months using the old stuff, I just re-discover my music. That’s too good, and Popa Chubby guitar’s sounds better than ever!

This is my first blog: hopefully I will make progress in writing after a while … please be patient 😉

This is also my first English writing: I mean first text willingly written in English just for fun. We’ll see if the spell checker is good. Making this blog will certainly encourage me to use my new MacMillan dictionary for English learners: easy to search, easy to read with highlight of very common words (the “must know”), and easy to understand with very simple definitions. Particularity of this dictionary is that all the definitions are given using only a very small subset of English words, which is called the base vocabulary. I purchase the book version and got in same time free access to the on line version, which is really good and have the wonderful advantage of giving pronunciation by sound media.