General


STM stand for Software Transactional Memory. How does it drive me to anarchy? because I get lost again following all the web links!

In fact I was wondering where to get some information about this mechanism used in some concurrency models. For those like me who like concrete explanation, I recommend to read this blog post from Joe Armstrong then beautiful concurrency for more details.

And if you are still wondering why I wrote the term “anarchy”, it’s just because I read about the work of Audrey Tang who integrated STM in Pugs (an Haskell implementation of Perl) … and she also appears to be a proponent of the Individualist Anarchism.

I assisted to my first presentation about User Experience Design (as I discovered, UX Design is not only UX). Here is a quick summary of what I still remember.

From what I understood UX Design is defined by:

  •   aesthetic
  •   functionality
  •   innovation
  •   enterprise impact
  •   human factor (~ergonomics)

A product specification can then be described by a list of features, where each feature is defined by:

  •   description (what is/does it?)
  •   functional test (how to test the functionality?)
  •   intend or goal (what’s the objective of the feature, for e.g. “make user happy”)
  •   how to test/measure the feature (particularly its goal)

Relative reading (added in my reading queue):

  • The Design of Everyday Things [Donald Norman, 1988]

D. Norman introduced the term affordance about user interaction, and emphasize on the design of product: “make the task dominate, make the tool invisible”.

What should contain my blog-posts? (sorry, I’m quite new in blogging world…)

Anyway, question is: should I post from time to time on the music I like or should I make a web page to gather all? Ok, nobody care … but if you have time, have a look at musicovery, it’s beautiful and fit well in my graph-oriented brain (I have a dream project called orgraphizer, but it’s still more a dream than a project).

I did mistakes (I mean I discover some new ones).
I implemented programming tools, some of them far too quickly to provide them a good architecture. At this time, I only needed few functionalities, but as requests came I implemented some quick-fix/quick-adds. And now, even if we don’t planned to use those tools any further, I have to maintain those becomed-crappy-tools!
Too conclusions, choose one depending of your mood:

  • Don’t do anything before to be requested to do so; don’t provide tools, keep it secret.
  • Never implement software without specifications and stay humble: never never never do quick design before to be a expert/guru/grand-master/programming-giant/computer-god!

Oh no! I will become a real nerd if I continue to laugh at those stupid (and so gr8) jokes!
http://xkcd.com/c184.html
Only one excuse: I used to work in 3D computer graphics field …

Zune: an iPod-like with Wi-Fi!
… but I don’t like all the marketing stategy behind those products :(
Any iTux project?

Since I read this post from Joel Spolsky about Sonos, I cannot wait anymore to get such a cool wireless distributed system everywhere in my house … but I will try to wait a bit more for two reasons: first my house is too small :), second I would like the same kind of system but also including video.


(from the humor archives)

This blog has moved here and this post can be found at http://blog.khigia.net/wp-import/general/2006/11/02/what-is-my-next-programming-language.html

… This is a personal message address to me in future …

What is my next programming language?

Scala , F# , Haskell , OCaml or Erlang?

Yes, my next language will be functional, and I will focus on improving my skills in concurrent programming and distributed applications. And here come the reasons for the choice of the above shortlisted languages:

  • I just experimented the threading system of Python … that really not fair guys, so I quit Python!
  • Scala use the Java threading model, that’s good as far as I know (and Scala looks fine!);
  • F# enable to use all .NET library so I could experimented Tao on Mono (.NET threading is also good, IronPython rocks);
  • Haskell is pure … I’m curious to understand those mysterious monads;
  • OCaml mixes functional and imperative … really efficient and yet simple;
  • Erlang embed asynchronous model inside the language … concurrent and yet simple.

Why concurrent programming? Why distributed?

Nowadays computers aim to solve complex systems: large amount of data to process, large number of interactions, or naturally distributed systems. Parrallelism and distribution seems to be in the pipeline with multi-core processors and clusters supported onto a network more and more efficient (optic-fiber at home by example). Without looking at language theory (see Future of software design?), my next language has to enable a software design with those intrinsic features: parallelism (data or computing) and distribution.

And why functional?

I don’t really know … for the fun??? I read a lot about Haskell recently; I just want to change my mind with another programming paradigm, and I secretly hope that my functional code will be better optimized on multicore machine. If you want real justification you may have a look at Functional Programming For The Rest of Us or Everything Your Professor Failed to Tell You About Functional Programming.

Final choice of my future language

Still have to choose one in the shortlisted choices, but with which criteria?
Type inference is a must (coz above all, any good programmer has a special quality: he’s lazy). But I don’t see a strong typing as a must-have: it sure solves problem, but not all, and in the end you still rely on unittesting.

Let’s do a first cut in the shortlist based on personal assumption: .NET is a better platform than Java (wow!). So:

  • remove Scala: F# offer same kind of possibilities using .NET;
  • remove OCaml: shares a common ML-like syntax with F# but F# offer .NET platform access where OCaml offer efficiency.

Haskell is pure but I prefer easy development aiming at concurrent and distributed programming, which is not part of the Haskell language itself. Then I have to choose between Erlang or F#: let’s go for Erlang, let’s concentrate on distributed development embedded in Erlang language. If later I really need/want .NET platform, it will still be good time to review all those choices adding new languages progress!

Thanks to Hanna Wallach for pointed to some articles about autism and mirror neurons .

In the field of agent simulation in a VR world, some AI method give to an agent a representation model of its world where it can simulate approximate behaviors of other agents before to take a decision of its action in its real (virtual) world: simulation of a virtual world inside a virtual world…

But the first time I discovered this idea of “interpreting a model of other” was with Hercule Poirot who try to imitate the person he want to understand, and even some small movements (like the position of hands or the smile…) can help him to “take the place of other”.

  • 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!!!

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.

« Previous Page

Follow

Get every new post delivered to your Inbox.