General intelligence means being able to transfer skills and knowledge to similar or analogous tasks ("transfer", when used as a noun, is a measure of success for education). In some cases, it means being able to deal with context.
Lisp is wonderful. My programs can't program themselves yet, but we're getting there...
Agents with high "general intelligence" can do the "meta-level transition" and start programming what's on their mind. My ideas are still vague.
What is it that I have that my programs don't when I read a specification and start implementing it? If we translated "easy" programming puzzles into a formal language, would current AIs tackle them successfully? If not, why not?
Lisp is wonderful. My programs can't program themselves yet, but we're getting there...
Agents with high "general intelligence" can do the "meta-level transition" and start programming what's on their mind. My ideas are still vague.
What is it that I have that my programs don't when I read a specification and start implementing it? If we translated "easy" programming puzzles into a formal language, would current AIs tackle them successfully? If not, why not?
(no subject)
Date: 2005-05-12 07:59 am (UTC)I can't believe you actually said that :).
(no subject)
Date: 2005-05-12 08:41 am (UTC)I don't know any other languages where you can straightforwardly implement a function like make-deriv.
(make-deriv `(subs ,*f1* ,*f2*))
will call SUBS with arguments *f1* and *f2* and then use the call itself as a label for what it did... that way, the result of MAKE-DERIV tells you exactly how it was called, so that you can reproduce it later.
(no subject)
Date: 2005-05-12 01:47 pm (UTC)Modern languages are not about the neatest syntax or cool features, but about making code maintainable, separating responsibilities and reusing components.
I'm making extensive use of SKILL, a proprietary derivative of LISP, and even the relatively modest amount of code we have is pushing the limits of the language.
(no subject)
Date: 2005-05-12 04:31 pm (UTC)Modern languages are not about the neatest syntax or cool features, but about making code maintainable, separating responsibilities and reusing components.
Lisp is the best language I've ever seen for code reuse. I don't see any issues with maintainability that other languages don't have.
I'm making extensive use of SKILL, a proprietary derivative of LISP, and even the relatively modest amount of code we have is pushing the limits of the language.
How would a "modern" language do better?
(no subject)
Date: 2005-05-13 09:00 am (UTC)Interesting. Why do you say that? What characteristics of LISP make it better at code-reuse than other languages? LISP as I know it has only the most basic language features (variables, functions).
How would a "modern" language do better?
A language like C++ has things like classes (which neatly delineate what functionality goes where) and templates (which allow parameterization of types). Both help maintainability and reuse.
In any case, perhaps we're talking about different types of programming here. I'm talking about large systems, worked on by many people. You seem to be working mainly on relatively small problems, by yourself. These different scenario's benefit from different language features.
(no subject)
Date: 2005-05-13 10:09 am (UTC)The fact that functions are first-order objects. If I had to program without passing functions, I would have to repeat myself a lot more.
I think this is also possible to an extent with C++ and Perl, but for some reason it's not common practice.
A language like C++ has things like classes (which neatly delineate what functionality goes where) and templates (which allow parameterization of types). Both help maintainability and reuse.
Common Lisp has classes too, and there are also ways of using and enforcing types (but it's optional!).
What you call "parametrization of types" is what I would call "dependent typing", though I'm not sure whether list or list would be called the dependent type.
Lisp ignorance
Date: 2005-05-13 01:40 pm (UTC)Firstly, it is spelled "Lisp" not "LISP", and it has been for decades. I have found the following rule of thumb to be true: that if people spell Lisp as "LISP" they usually no absolutely nothing about it (excepting Lisp old-timers).
LISP as I know it has only the most basic language features (variables, functions). [...]
A language like C++ has things like classes (which neatly delineate what functionality goes where) and templates (which allow parameterization of types).
Wrong. Besides variables and functions, Lisp has the best Object-Oriented system I know of (classes, classes-as-objects, meta-classes, multimethods, you name it). It also has the best exception system I know of. Templates are a really deranged form of macros (they are expanded at compile-time); Lisp does macros properly. Lisp also has extensible syntax, a package system, various module systems, a built-in compiler and dissassembler, interactive self-documentation, a large standard library, etc., etc. You can define just about any programming paradigm in Lisp. See http://www.gigamonkeys.com/book .
--Sebastian
Re: Lisp ignorance
Date: 2005-05-13 03:41 pm (UTC)I fully appreciate that I am ignorant about a great many things. If Lisp has made progress over time, great, glad to hear it. I'm prepared to revise my opinion of this new and improved Lisp over the old'n'busted LISP-derivative I use daily.
But I do expect to be treated with some respect, as I treat others. In your response, you imply that I lie and that I willfully remain ignorant about a subject. This is both offensive and unnecessary. If someone makes incorrect statement out of ignorance (As I clearly did), it's perfectly possible to remain civilized and point out their mistakes, instead of resorting to the "You suck" type response that is unfortunately so common on the internet.
Re: Lisp ignorance
Date: 2005-05-13 03:49 pm (UTC)But his response was implying that you "spread lies", which is not at all saying that you are malicious (i.e. "make up lies")
Re: Lisp ignorance
Date: 2005-05-13 04:34 pm (UTC)1. A false statement deliberately presented as being true; a falsehood.
2. Something meant to deceive or give a wrong impression.
If someone makes an inaccurate statement, you don't tell them they "lie", as the term by definition implies malicious intent.
Anyway, I appreciate you mediating here ;). No harm done as far as I'm concerned, but Sebastian needs to work on his social skills.
Re: Lisp ignorance
Date: 2005-05-13 04:40 pm (UTC)(no subject)
Date: 2005-05-13 05:50 pm (UTC)Politeness is not just nice words. Rudeness starts with disrespect for people, not with harsh words. Do you understand that the worst personal attacks are given in the most polite form? Just look at how astonishingly evil the British upper class can be -- so repressed that all hostility must be delivered "nicely" so those who do not think things through do not understand what is going on. Amazingly, this is considered an ideal by people who do not understand it.
The sad answer is that people have no reason to spread falsehoods. Why would anyone pass on a myth that they could not back up by fact? Sadly, again, they have no reason to do this: it is the prevailing default behavior. People do not generally think, unless they have been shown the great benefits of thinking. It has actually happened that people have become the president of very large countries without realizing the benefits of thinking. Thinking is hard work. Sorting true from false is hard work.
People often only parrot what they have heard unthinkingly, and have not yet experienced the great benefits of telling the truth and of thinking about what they say. Not thinking about what you say is the default human action. Telling things how you want them to be (without being particularly conscious of it) is much easier than getting up every morning to spend the whole day making enemies with others because you want to know the truth and they want to spread falsehoods. Everyone, including me, does it to a certain extent. Many things you have been told are false. Distinguishing truths from untruths takes time and effort, but so many more interesting things happen when you make that effort.
If you want to know what is true about Lisp, learn about it, read the book I recommended (Practical Common Lisp (http://www.gigamonkeys.com/book)), do whatever suits you. If, however, you spread falsehoods about Lisp, you should expect to be corrected. This has nothing to do with 'religion'. You have to see this from a Lisper's point of view: Lisp is possibly both the best and the most actively bashed language in the entire history of computing.
Most people do not carefully think about everything they say and will repeat myths and confusions in the service of maintaining a consensus of views, which is very useful to avoid cognitive dissonance, even when the consensus thus built is based on falsehoods misrepresentations. The only result of wanting to debunk all the myths is that people who value 'politeness' over truth, think you are out to start trouble and will accuse of 'flaming' and 'bad social skills', instead, so the price one pays for wanting the most correct technical environment is one where a lot of people who do not care about the truth when it does not serve their immediate needs will begin to turn a discussion into something personal.
Still, do not believe what you are told, do not even believe what I tell you, think about it for yourself and spend the time and effort to sort out the true from the false about Lisp. Most Lispers will be grateful to help debunk myth after myth and falsehood after falsehood.
If you investigate Lisp you will be very lucky and you will be pleasantly surprised to notice that many of the common myths about Lisp are wrong. Welcome to Lisp.
(no subject)
Date: 2005-05-13 06:00 pm (UTC)It may sometimes take some effort to avoid offending people, but avoiding something as flamey as the above shouldn't be that hard.
People do care about how you deliver a message. Sure, they are irrational, but you can be a more effective teacher if you are sensitive to that.
(no subject)
Date: 2005-05-13 06:37 pm (UTC)but you can be a more effective teacher if you are sensitive to that.
I disagree (http://groups.google.nl/group/comp.lang.lisp/browse_frm/thread/bdc3ce4d0241ae8d/f7fdb1f6f2d1bafa?q=3242911298524628@naggum.no&rnum=1#f7fdb1f6f2d1bafa).
(no subject)
Date: 2005-05-14 12:09 am (UTC)I disagree
So you're siding with Erik Naggum?
Btw, do you have a way of automatically checking this page for replies?
(no subject)
Date: 2005-05-14 12:17 am (UTC)The stress that comes from knowing you're wrong may be useful, but there's no reason to create the extra stress that comes with an impression (even if it's not fully substantiated) of hostility.
I believe that a testosterone-charged flame-war where honor / status is at stake provides far from optimal learning conditions.
(no subject)
Date: 2005-05-14 06:58 am (UTC)I believe that a testosterone-charged flame-war where honor / status is at stake provides far from optimal learning conditions.
"flame-war", "shouting-match"? What the * are you guys talking about?!
Pleas point out _any_ statement of mine that was insulting. (And saying that someone does not know something does not count as insulting, but is a factual observation.)
(no subject)
Date: 2005-05-14 08:56 am (UTC)It's not semantics, it's pragmatics.
Pleas point out _any_ statement of mine that was insulting. (And saying that someone does not know something does not count as insulting, but is a factual observation.)
Again, it's not what you said, but how you said it.
I have the same tendency myself, and often find myself embarassed or mocked for being too straightforward (in the good cases, it turns into a good laugh), so I find it somewhat odd that I'm the one suggesting you be more "tactful".
(no subject)
Date: 2005-05-13 06:29 pm (UTC)The thing is, your response was more than just a simple technical correction, which is why it turned into a thread about you. If you had stuck to a simple technical correction, my response would have been along the lines of "Gee, I didn't know that, thanks for the info", and everything would be peachy.
But instead, you made it personal. You say that people spelling Lisp as LISP (That would be me, in this case) they don't know what they're talking about. In other words, without knowing anything about me as a person or my experience, you assume I parrot some myths and falsehoods without really knowing anything.
But maybe I have very good reasons for opinion I state. Maybe, while the information on which I base my opinion is incorrect and/or incomplete, _given_ that information, my opinion makes sense.
Again, I have no problem being corrected. I certainly learned a lot about Lisp here, and my opinion has been modified. But politeness is not just some useless front intended to hide rotten ethics. It's an integral and necessary component of effective communication.
You may have heard that Andrew Wile's proof of Fermat's last theorem may again have been proven false by some other mathematician (whose name escapes me at the moment)? Some of the letters going back and forth between these men were made public, and it is striking how scrupulously polite they are to each other. In the end, they resolved to work together on finding a solution. Do you think they would have done the same if they would have started a shouting match? I think not.
If you think bad of people from the outset, you can only insult and alienate them. If you start out thinking good of people, you can always revise your opinion later, but you just might be surprised how seldom you need to do this.
(no subject)
Date: 2005-05-13 06:50 pm (UTC)No, I did not say anything about you personally, I said it was _a rule of thumb_ (that in this case was correct).
But maybe I have very good reasons for opinion I state. Maybe, while the information on which I base my opinion is incorrect and/or incomplete, _given_ that information, my opinion makes sense.
It is not OK when a misunderstanding is being defended as "it's just a matter of opinion". Not everything is a matter of opinion.
If you think bad of people from the outset, you can only insult and alienate them. If you start out thinking good of people.
Huh? "insult and alientate"? Dude, I _did_ think good of you, you seriously have to read better.
(no subject)
Date: 2005-05-12 08:05 am (UTC)Then you have to implement the algorithm in such a way that, when the inevitable modifications to the specs come in, those modifications can be implemented in the current code without too much rewriting.
If you transscript the specifications into a formal system, you're doing the first step. Having software take care of the second step might actually save time, because if changes to the specs come in, you 'just' modify the formal specs and let the software implement it as if it's a new system. It would free up lots of time that is now spent 'refactoring' or modifying code, or even carefully designing your program.
On the other hand, I'm pretty sure that expressing the specs in a formal system takes at least as much time as programming it all out.
(no subject)
Date: 2005-05-12 11:48 am (UTC)I'm interested in programming contest questions.
On the other hand, I'm pretty sure that expressing the specs in a formal system takes at least as much time as programming it all out.
I would say this really depends on what kind of program you're trying to make.
(no subject)
Date: 2005-05-12 03:04 pm (UTC)OK, that means that you have a lot less considerations that you would have if you were making commercial systems. No nebulous specifications, a one-off end-product and no changes afterwards -- so a lot of the reasons for 'neat' programming are gone.
It is ironic that programming contests test exactly the skills you don't need in 'regular' (commercial, or at least maintainable) programming.
I would say this really depends on what kind of program you're trying to make.
True. And it also depends a lot on your formal specification language. It should be rich enough to express every possible programming contest task -- designing such a language might be quite the task (though I have to admit I am not up to par where formal languages are concerned).
(no subject)
Date: 2005-05-12 08:12 am (UTC)In my view programming IS translating an informal specification into a formal one. As soon as you move from the informal into the formal world, the remainder of the task can be automated.
(no subject)
Date: 2005-05-12 11:46 am (UTC)If that were the case, every decent programmer would get the maximal score in many programming contest questions. Formalizing the specification is often very straightforward, and a trivial part of the assignment.
(no subject)
Date: 2005-05-12 01:54 pm (UTC)And yes, if you would make a formal specification of an "easy" programming puzzle, I think it would be _possible_ to automatically translate this into an implementation, even without AI. This doesn't mean it would be an efficient implementation, only that it would work.
Just out of curiousity, can you give an example of a formal specification for some small, easy problem?
(no subject)
Date: 2005-05-13 10:12 am (UTC)But you can think of sorting as having a trivial specification, and yet a non-trivial implementation... especially if you have an average efficiency requirement to meet.