Lectures

I have downloaded some lectures about computer science to watch. Some are from University, and some aren't.

I noticed the following:

I pause fairly often, and sometimes watch other videos instead then go back, or if I want to have some other sound (music, person talking).

I also pause sometimes to read the blackboard or slide, or consider something the lecturer said. Also if I don't understand part, or have a question, I might go find out the answer before continuing. Also I might try doing one of his examples.

I also need to have the option to pause if I think of something cool or important that I want to write about before I forget.

I skip forward or back in the lectures sometimes.

So so far: parts of the lecture are too fast, parts are too slow, parts are boring, and I rarely want to hear it all in one sitting.

I multi-task a lot. I am writing this with a lecture on. I also burned DVDs, chatted with people on AIM, organised files better, and read news articles.

For especially interesting parts, I watch with my full attention, but for most parts I only pay half attention. Sometimes I stop listening and miss parts. Later, I might or might not go back to hear it.

Missing stuff is OK. It's not important to understand everything the lecturer says. Not all parts of a subject are best learned through a lecture. Some gaps in my knowledge will be much easier to fill in when writing code, or watching a different lecture, or reading a book, or talking to someone.

Missing stuff does not make it impossible to learn about the later things. There are a lot of ways to understand later concepts without the previous concepts. Often I can just assume some feature works the way he says it does, and then the later features make perfect sense. Often later concepts are separate from earlier ones (perhaps they are both building blocks relevant to the conclusion).

So overall: I like to have, and extensively use, control over when I hear what parts of the lecture. Sitting through an entire lecture at once, not doing other things, is never ideal. It's not important whether I get the main point of the lecture or not.

In conclusion: the format of school lectures may be hard to change due to the practical problems presented by having in-person lectures with many students at once. But they are far from ideal for learning.

Lecture Links (Lisp stuff):

Univ: http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/

Not-Univ: http://www.iro.umontreal.ca/%7Eboucherd/mslug/meetings/20041020/minutes-en.html

Elliot Temple | Permalink | Messages (0)

Elliot Temple | Permalink | Messages (0)

Information Flow

Suppose we are programming a game and want a hero to have a multishot spell that shoots 20 arrows at once. We decide a monster can only be hit by one of the arrows per casting of the spell.

You might expect we could just have the spell itself keep a list of monsters it has hit so far, and check the list when an arrow hits a monster to see if that monster has already been hit. And that is indeed possible. However, having a bunch of code that controls a spell with a central data structure that every aspect of the spell reports back to is not a very good model. It leads to confusing, hard-to-change code.

A different approach would be that the multishot spell creates 20 arrows, and gives them initial velocity, and then that's it, the spell is gone. The arrows are now all separate. There are two ways to avoid redundant hits now. Either the arrows can have a list of all the other arrows and send a message when they hit something so the others know not to damage it (alternatively arrows could have access to everything and then search through everything for the other arrows from the spell. As long as they are all uniquely marked as coming from that spell they could be found that way). Or option two is to have the monster keep track of what it's been hit by. Then when an arrow hits a monster, it can check that monster's list of multi-shot spells that already hit it to see if it should do damage.

This is interesting due to parallels with capitalism and with physics.

The capitalism parallel is that autonomous, smart agents are a better model than central control. Programmers have known this for decades (at least Lisp programmers!), and write lots of papers about it. Here is a paper on dividing problems up into smaller discrete tasks, with detailed examples, which shows how this makes programs easier to modify. It explicitly criticises trying to code single, large functions that keep track of everything, and criticises programming languages that encourage or require that. Similarly, capitalists know (and have since before Lisp existed) that central authorities don't work as well as distributed decision making. Another point in the Lisp paper I linked is that lazy evaluation making is very valuable. That means only calculating things when they are about to be used to prevent doing unnecessary calculations that might not be used. Similarly, when people make their own choices, they can frequently do it at the last moment, and they can avoid deciding things that become irrelevant. When central planners try to plan, they have to, in order to have time to tell everyone what to do, plan way in advance, so they end up calculating lots of things that, it turns out, don't matter.

The parallel with physics is that a huge amount of mysticism can be detected and refuted by a detailed analysis of information flow. For example, suppose someone claimed a certain arrow would only hurt you if you hadn't already been hit by another arrow from the same group. We would know there is no overall central control mechanism (located at the bow?) that arrows report back to (what do they report back with? light? we'd notice, and light has limited speed so it wouldn't work if the arrows went too fast). We also know arrows don't pass messages to each other about what targets they've hit (not only are arrows unable to identify what people they've hit, they don't have anything to send or receive messages with). And we know the model of the monster keeping a list of which arrows it was hit by wouldn't work either (that involved the arrow, on hitting something, checking the list, but arrows cannot do that. how would it read the list? compute whether it was on the list? also arrows aren't marked by what volley they were fired in). So we can call anyone who believes in a real multishot spell of this sort a mystic (after we ask his explanation, and it turns out he has no explanation of how his idea is possible within the laws of physics).

This arguing technique applies to a lot more than magic spells. Suppose someone said he spoke to God. We might well ask how the information got from God to him. If God communicated with light or sound it could be recorded with a video camera, and he'd need a convincing reason to think it wasn't just a natural process (there is a lot of light bouncing around. how do you know this light bounced off God?). People who believe in telepathy never explain how thoughts travel between brains, nor what they sense thoughts with (eyes? neurons?). Do psychics who do phone readings claim that reading thoughts is possible from many miles away? If it is, why can't they read the thoughts of people they aren't on the phone with? Do thoughts travel through telephone wires? Of course, phone psychics in fact just don't bother to address the issue at all. It'd be very amusing if they were asked questions like this more often. Some would be foolish enough to attempt to answer some of the questions. It's pretty hard to refuse to say the range of one's psychic powers. But it'd also be pretty embarrassing to claim telephones are a psychic amplifier. And if it's someone's voice that matters, why won't a recording do? And after the psychic says it recordings don't work, trick one and do an entire phone reading by playing pre-recorded sound bites over the phone and then ask why the psychic didn't notice he wasn't talking to a person (shouldn't his powers have not worked?).

It works on a lot of bad philosophy too. Imagine someone says that meaning is assigned to objects by humans, and can exist no other way. That is nonsense. The first thing to do is ask whether its possible to think about something before assigning it a meaning. If that's possible, begin asking about what difference it makes to human thinking whether a meaning has been assigned or not. What specifically, if anything, is impossible before a meaning is assigned? Why does assigning a meaning change that?

The more interesting case is when the person says that thinking about something that your brain hasn't yet assigned a meaning is impossible. Next he will say that meaning is assigned immediately when a person first encounters something, and not before, and not after. One issue is this needs to be done instantly, so that stray thoughts don't try to think about the object before the meaning is assigned. Thinking instantly isn't possible because electrical impulses require time to move around. Further, when the assign-meaning function is called, it needs to know: A) what the object is B) what meaning to assign. All the information necessary to assign the meaning must be there before the meaning is assigned, and thus before the object has been thought about at all. That means all meanings are assigned without thinking about what they should be! But it gets worse. If Jack will respond to seeing a rock for the first time by assigning it "hard" (that's over-simplified), then we might say he already, right now, before interacting with his first rock ... has a worldview such that rocks will be assigned the meaning "hard". So what difference does it make if Jack assigns that meaning now or later? What's so special about the act of assigning when the result could have been worked out in advance? People may say Jack could change his worldview before seeing a rock. But that doesn't really change anything: as he changes his worldview, the implied meaning of rocks according to Jack changes as well. And what about assigning meaning to objects that don't exist anymore but that we've heard of? And objects that don't exist yet but will? Were cars meaningless until they were completely invented?

Elliot Temple | Permalink | Messages (2)

Capitalism

I have posted some comments about capitalism here and in some of the other recent posts at that blog.

Elliot Temple | Permalink | Messages (0)

Googlebomb

Jew

(An anti-semitic site is the second hit right now, and is on top sometimes)

Elliot Temple | Permalink | Messages (0)

Elliot Temple | Permalink | Messages (0)

Arguers

There should be a profession called an arguer. This would not be like a lawyer, because few of their arguments would focus on the law. They would be called in when a company made a controversial decision and expected a lot of public discourse. They would accept jobs on a case-by-case basis so that they only argued for things they believed in (some wouldn't operate that way, but the good ones would).

Their job would be to engage with the public. This would be nothing like a Public Relations guy giving a statement, customer service giving a run around, or a press release. They would spend their time reading comments by the public -- both in public places and sent directly to the company -- and having conversations with those people. They would not give a statement and move on, instead they would actually engage with what the person was saying.

In some circumstances, this would be a far more effective use of money than advertising. There are all these people who want to interact with the company. So why not hire people to tell them a personalised version of the company's point of view?

A good arguer would persuade a few people that the company was right, and a fair amount would become less hostile. But more than winning arguing points, he'd show the company *has* arguing points that can hold up in a sustained debate and don't fall down after a few back and forths. He'd be demonstrating that people seriously believe the company is right and have thought it out.

Another part of his job would be to relay any opposition to the company that he considered especially interesting or thought had a good point. A company has a hard time reading and filtering a huge in basket, but when you cut down incoming arguments by a factor of a thousand or so (removing duplicates and bad arguments and fluff) it gets way more manageable.

Unfortunately the primary problem I see with this idea is the difficulty of hiring qualified, competent arguers. Letting people speak for your company is risky, so you need to be sure they are good at it. And the arguers job requires a lot more skill to avoid mishaps than a press release writer's job. The arguer will write a thousand times as many words, but every single one could end up quoted by the press if he messes up.

One day in the future, arguers will not be expected to be perfect and if they messed up now and then the press would realise this doesn't reflect badly on the company.

Elliot Temple | Permalink | Messages (2)

Islamic Insanity

In Iran, a girl was sentenced to death by hanging for defending herself against rapists. If she hadn't defended herself, she would be stoned as an adulterer.

Elliot Temple | Permalink | Message (1)

How To Get Popular

Rule 1) Do *not* second guess your memes

this applies to most forms of popularity, especially school grades k-12. it applies 10-20% less at college.

Elliot Temple | Permalink | Messages (0)

Programmer Productivity

Yannis has proposed Yannis's Law which states that programmer productivity doubles every 6 years. He gets the figure from a project that took a week or two in 1972, but would now take an hour or two. I just did it in twenty minutes using a plain text editor (with python syntax highlighting) and a unix terminal. My Python is rusty.

The KWIC index system accepts an ordered set of lines, each line is an ordered set of words, and each word is an ordered set of characters. Any line may be "circularly shifted" by repeatedly removing the first word and appending it at the end of the line. The KWIC index system outputs a listing of all circular shifts of all lines in alphabetical order. This is a small system. Except under extreme circumstances (huge data base, no supporting software), such a system could be produced by a good programmer within a week or two.
Here's my code:

#!/usr/bin/env python
def main():
    f = open("kwic.txt", "rU")
    out = open("kwic-output.txt", "w")
    final = []
    for line in f:
        words = line.split()
        count = len(words)
        for i in xrange(count):
            final.append(makestr(words))
            cycle(words)        
    final.sort()
    for ele in final:
        out.write(ele + "\n")
        
def makestr(li):
    s = ""
    first = 1
    for ele in li:
        if first == 1:
            first = 0
            s += ele
        else:
            s += " " + ele
    return s
    
def cycle(li):
    tmp = li[0]
    del li[0]
    li.append(tmp)
    return li

if __name__ == '__main__': main()


By the way, if someone knows a more elegant way to avoid having an extra space in makestr, let me know. I'm aware of the option of deleting the first character after making the string, but I don't consider that very nice either.

Elliot Temple | Permalink | Messages (4)