NEW BUZZWORD – PREFACTORING !!!

THERE IS A NEW BUZZWORD – Prefactoring – IN THE CITY!
THERE IS ALREADY A BOOK ABOUT THE NEW BUZZWORD. JUST WAIT FOR THE COURSES, SEMINARS, ARMY OF CONSULTANTS WITH HASTILY-UPDATED RESUMES AND CLAIMS FOR 3-YEAR EXPERIENCE WITH THE NEW BUZZWORD!

THE DREAM OF PHBs AND OF 2nd RATE PROGRAMMERS HAS BEEN FULFILLED. PREFACTORING IS PANACEA, SILVER BULLET, BLESSING AND CURE FOR ALL ILLS AND BUGS AND AMBIGUITIES AFFLICTING SOFTWARE DEVELOPMENT PROJECTS!

WHAT ARE YOU WAITING FOR? DO NOT BE LEFT BEHIND! JUMP ON THE BANDWAGON!!!

Selecting a powerful programming language for a project

I have an ill-defined project, whose precise definition will need help from powerful concepts provided by strange and/or powerful programming languages such as Haskell, LISP/Scheme, O’Caml, or Prolog.
To be fluent with such a language, I need to invest some time learning and mastering it. Only then will I be able to determine whether it is really useful for my project.

So my Wish of the Day for today is for a selection guide, which lists a series of questions about the project and then makes a reasoned recommendation for one of the powerful languages for that project. For example, if one of those languages is indeed beautifully abstract but is poor in having runtime libraries and does not provide for linking to alien libraries (imported from mundane languages such as C, Perl or Python), then the language is ruled out for a project, which needs extensive support for manipulating XML files, playing with sockets and doing direct file I/O.

Third kind of languages?

I am now reading the book “Language in Space – a window on Israeli Sign Language” by Irit Meir and Wendy Sandler (ISBN 965-311-056-X). The book applies linguistic analysis to the Israeli Sign Language, used by most of the Deaf in Israel.

There are similarities and differences between spoken and signed languages. There are principles, which serve as common denominator between those languages.

As I am thinking about programming languages, I wonder whether they can be regarded as a third kind of languages. In other words, if we apply linguistic analysis to programming languages, what can learn from the linguistic analysis results? An example for a programming language, whose design takes into account linguistic issues in an explicit way, is Perl, especially Perl 6.

One major difference between human languages and programming languages is that humans can freely invent new words, new ways to modify words, and new ways to combine words into sentences. However software developers are constrained by the compiler/interpreter’s limitations and cannot easily break away from those constraints.

For example, to discuss sorting in Hebrew you need only to invent a new meaning for the word “מיון”. However to discuss sorting in a program, you need to develop, find, beg for, or steal a library, which implements the sorting algorithms, which interest you.

Recent programming languages are less constraining than early ones (with the exception of LISP, which was early, difficult to learn but not constraining). Languages like Perl and Python support lists (arrays indexed by numbers) and hashes (associative arrays, which map arbitrary-but-immutable values into other arbitrary values). They also support classes/objects. I wonder if there are more concepts, like lists, hashes and objects, which need to be supported in order to make programming languages feel as unconstrained as human languages.

European software patents

Software patents cleared another hurdle toward approval by the EU (see http://comment.zdnet.co.uk/other/0,39020682,39190515,00.htm).

Now the question is: what are the implications for the Israeli patent law and software industry?

  1. Will Israel be pressurized to allow software patents as in USA and Europe, or will we escape this fate due to the relatively small local market for software?
    If pressurized, how much ability will Israel have to resist the pressure?
  2. Will the Israeli patent office rigorously examine software patent applications?
  3. What will happen to Israeli Hi-Tech companies, which develop and/or use software, which violates software patents, but is critical to their product, process or service business?
  4. What will be the impact on joint ventures between Israeli and European Hi-Tech businesses?

Jack W. Reeves' opinion that Code Is Design – an exercise in outdated concepts

In http://www.developerdotstar.com/mag/articles/reeves_design_main.html there are links to three essays by Jack W. Reeves, in which he claims that source code is software design, and that the software design process contains both high level design, coding, debugging and testing.
According to his point of view, software testing is the equivalent in software engineering of testing airplane models in wind tunnels in aeronautical engineering.

Now, the question is why haven’t people thought of this at the beginning of computer era?

One possibility is that the languages available for building the software for the first computers were very very very low level. Assemblers were nonexistent or very primitive. Compilers were not there yet, either.

Therefore, people had to do the equivalent of modern software building by hand. They had to manually translate their ideas into machine language (or low level assembly language), adjust addresses and offsets by hand, link code pieces by hand. In short, they had to manufacture software (in Reeves’ sense of the word) by hand. The process was relatively labor intensive. Therefore, at the early years of the computer era, design was really separate from coding, more or less.

However, the sixty years, which elapsed since those days, brought us better assemblers, good compilers and high-level programming languages. There were also changes in software development processes. However, our concepts about software design and manufacturing did not change to fit the new reality – until Reeves pointed out the discrepancy.

Any ideas for business model for distributed Free knowledgebase?

I am now reading the interesting article at http://www.virtualschool.edu/mon/SoftwareEngineering/BrooksNoSilverBullet.html, referred to by http://en.wikipedia.org/wiki/List_of_important_publications_in_computer_science, which is in turn referred to by http://www.livejournal.com/users/mulix/141984.html?nc=2&style=mine.

As I was reading the section about expert systems and knowledge bases needed by expert systems, the following question came to my mind:
Suppose we want to develop, build and deploy an Internet based database of rules for software test cases generation.
We would like to have software test engineers contribute their wisdom to the database, for the benefit of everyone.
We would also like to allow GPL-like freedom to the users of the information in the database.

Thus, access to the database and the expert system will be free for everyone. Everyone will also be able to contribute new knowledge to the system. Everyone will also be able to have a private repository of knowledge about testing those parts of his software, which he wants to keep secret for now.

The big question:
Is there any business model, which can make the above work?
Such a business model would have to:

  1. Encourage users of the system to contribute information to the public rather than keep it to themselves.
  2. Encourage payment to the company which developed and is maintaining the expert system and the database and the network of hosts, which make the data accessible to the public.
  3. Discourage people from defiling the database by filling it with junk information.

Will deaf people in Israel and other countries without relay services be able to use MS-Windows XP?

The Slashdot article http://it.slashdot.org/it/05/02/25/0350219.shtml?tid=201&tid=109&tid=164 mentions that as of February 28, Windows users who purchased their PC will no longer be able to reinstall without calling Microsoft and answering a series of questions. See also http://www.betanews.com/article/Microsoft_Closes_Activation_Loophole/1109293194
.
Deaf customers of Microsoft in USA will be able to reinstall MS-Windows XP, because USA has a well-developed infrastructure of relay services. Those services allow the deaf to use alternative communication technologies (such as TTY) and mediate between them and hearing people, who use regular voice phone.

However, several other countries have no well-developed relay services. And, if those services operate at all, they operate at limited hours.

This new development means that deaf persons may be unable to reactivate their MS-Windows XP installations at all, or have to wait until the next day to reactivate their installations, and if this is for their home computers – they may have to take few hours off their work. (Microsoft probably won’t pay for the time of the friendly hearing neighbor, whom the pressed-for-time deaf repeatedly summons to call Microsoft in his behalf.)

Software reliability according to Edsgar W. Dijkstra

Dijkstra (A position paper on Software Reliability) argued that the notion of software reliability is meaningless, because the environment in which the software is made to work cannot be dealt with in scientific ways. There is always a gap between the formal specifications and the behavior, which the software user really wanted from the software.

I agree with the meaninglessness of the notion. But I disagree that the environment cannot be treated scientifically.

Consider, for the example, software for controlling an airplane, which flies by wire. Let’s assume, for the sake of argument, that takeoffs and landings are 100% manually controlled. Let’s also assume that there is no issue of collision with mountains. Then, it is possible to specify all weather conditions, which the airplane might face while being en route. Thus, the control software can be fully specified to control the airplane no matter what air turbulences, rain or snow conditions the airplane might face as long as it is being flown in Earth’s atmosphere.