That's because you have the false premise that science is an objective search for knowledge.
Occam's razor works precisely because science doesn't care about truth but rather about prediction and manipulation.
The reason to choose the simpler theory is because the other ones aren't required to do the same predictive and manipulative tasks, and just require more work.
Science is inherently a pragmatic endeavor, not a philosophical one. Therefore, it focuses on pragmatic, not philosophical solutions.
I agree, but I also wanted to point out that every profession has its set of cocky, I'm-the-only-one-in-the-world-capable-to-handle-th is attitude. Programmers and lawyers especially. It's true, but it's not as true as the programmers and lawyers think it is.
If I remember correctly, Woz almost had to give the Apple I to HP, except they said that they didn't want it (HP couldn't imagine why individuals would want to own a computer).
Actually, if we taught everyone to program, that would also mean that we taught them to think logically. I can only think that doing so would make the world a better place.
What makes a computer even better than a logic class is that with computers, you know for sure at the end if you are logically correct or not, becuase if you aren't, the computing goes BOINK!
For teaching, I've always thought of having a class emulate the processor. Have some shoeboxes for memory, and each memory location has a number, which is the instruction. a person brings the instruction to the instruction decoder person, who looks up how to process that number. Then, if the instruction includes any memory locations, you have people who are the data bus running to get memory chunks.
The one I went to required assembly language programming, too, but it was an add-on for juniors and seniors. I think assembly language should be the beginning, not the end of learning computer programming.
Having said that - assembly languages _is_ disappearing from many schools altogether. Also, those who don't go to college (at least for programming) generally don't know it, either.
Thank you for your openness and honesty. I'm still wrestling with this question, and will keep your thoughts in mind. Personally, I don't see that there was something to be disclaimed, but it's obvious that at least some on this board do. Finding what is appropriate in all circumstances is always a hard battle, especially when addressing a crowd as diverse as Slashdot.
Anyway, I appreciate you taking the time to advise me.
"I don't like dishonesty in the submission process."
What's dishonest? It would have been dishonest had I registered a new account to make the submission. However, the way that you know that I was the author was because I _did not_ resort to dishonest tactics. I simply wrote from the third person, which is exactly how I wrote the back cover text for the book, the press releases, etc.
I don't even spamguard my email address, because I want people to know who I am and be able to reach me easily.
I am sorry you think I am a scam artist. I did not and do not feel that I did anything wrong. My comments should stand by themselves no matter if it was by me, someone else, or an alien just landing on the planet.
I did not, do not, and don't plan to ever disguise who I am (by the way, how did you find out that I was the author except by the fact that you looked up my user ID?). I don't even spam-hide my email address. I have exactly one Slashdot account, and cannot recall a time I posted anonymously. I just didn't see why who I am affected whether or not the editors liked my article.
I don't see how there would be a conflict of interest, since Slashdot has an editorial review process (even if it is somewhat questionable at times...). My submission was to the editors. They should be able to base their judgment on the content no matter who the author was. Your comments apply to the editors of content, not necessarily to the submitters of it.
I have no problem saying that I wrote the book, I just thought that the article's worth rested in it's content, not who wrote it. I decided to let the editors decide (and, frankly, was shocked that they posted it - I've posted about 10 stories to Slashdot and this is only the second one that has been posted).
"I have no idea what the submitter thinks goes on in good CS schools these days. I know they worked me to the bone with large projects in assembly, C, Java, Lisp, Prolog, you name it. The idea that they don't teach assembly is idiotic."
Most schools I've seen, while they do teach assembler, it's usually a late add-on for 4th year students (this was what it was at the University I went to - good program overall, though). In smaller colleges, it may not be taught at all, or it may be done in such a shoddy way as to make it not worthwhile at all.
The thing is, I think that assembly language is _foundational_, not just an add-on course. It helps you learn other languages. Teaching it first helps students really get a grasp on what the computer is doing. I've seen several students graduate from Universities where, at the end, they still just didn't quite get how the programming languages they used really worked. It was still a "magic black box" to them.
Actually I am very familiar with these people and with the perspective they come from. However, I think that doing abstractions FIRST is a bad idea. It is better to do the low-level first and then you know what it is you are abstracting. My favorite programming language is Scheme. However, in all languages, knowing assembly language helps me to know what the actual computer is doing.
"Bullshit. Since when did what language you know determine how good a programmer you are?"
Assembly is different. All languages eventually turn into assembly. Knowing how the stack operates, what a stack frame is, what a register is, what addressing modes are available, etc., all bear down on ALL programming languages.
For example, in C, where should you place your most-used member of a struct? Why, in the first position, since it can be accessed using indirect addressing rather than base pointer addressing.
Why do Scheme and C often have trouble interacting? Because Scheme's continuations mean that objects on the stack have to be able to live forever, meaning that the hardware stack is near useless.
Also, many people who have trouble understanding pointers in C are able to "get it" after learning assembly language because it makes the concept far more concrete.
Why are OO calls more costly than straight function calls? Because the method has to be looked up in a virtual method table first, before it is called. Not only does the lookup cost cycles, but the indirect jump can kill your pipeline.
Anyway, these are the types of issues that all programmers in all languages have to contend with. It is easier to understand these types of concepts if the programmer knows assembly language.
I don't see how it's "tricking" you. I believe in moral marketing. However, I don't understand the general opinion that one shouldn't promote one's own stuff.
Two things:
1) whether or not I wrote the book is irrelevant as to whether or not it makes a good Slashdot story.
2) would you be offended if I told you that the back-cover text, which was also written by me, is also written in the third person?
Anyway, I'm not quite certain where you think the trickery or deception is. The only thing I can see from your post substantiating this is:
"But when he doesn't admit that and writes obviously biased remarks regarding knowing assembly to be a good programmer, I can't help but view it skeptically."
I agree that the remarks are biased in the way all remarks are biased. However, I think you are reversing the order of the biases. It is _because_ I believed assembly language essential to being a good programmer that I bothered to write the book in the first place.
Anyway, I'm sorry if I offended you, but I am not sorry for how I worded my article submission.
You forget the other architecture: the pipeline / multijob architecture, where CPUs are divided up by jobs instead of being divided equally no matter how many CPUs. For example, they might do something like this:
CPU 1 runs the display/sound (continual refresh based on reading global data) CPU 2 runs the AI (modifies global data) CPU 3 handles game physics (modifies global data)
This would make your refresh rate constant, no matter how complicated the rest of the game is.
Then, in X-Box1 mode, it could switch to this:
CPU 1 does NVIDIA/ATI translations CPU 2 does x86/PPC translation CPU 3 actually runs the code
I did think. Thinking is what led me to believe that they probably will have excess inventory in the months leading up to their new release. I mean really, how many people are going to buy X-Box 1 when #2 is going to be out soon?
That's because you have the false premise that science is an objective search for knowledge.
Occam's razor works precisely because science doesn't care about truth but rather about prediction and manipulation.
The reason to choose the simpler theory is because the other ones aren't required to do the same predictive and manipulative tasks, and just require more work.
Science is inherently a pragmatic endeavor, not a philosophical one. Therefore, it focuses on pragmatic, not philosophical solutions.
Yeah, I was just remembering from "Pirates of Silicon Valley". Obviously not the most historically reliable source.
I agree, but I also wanted to point out that every profession has its set of cocky, I'm-the-only-one-in-the-world-capable-to-handle-th is attitude. Programmers and lawyers especially. It's true, but it's not as true as the programmers and lawyers think it is.
If I remember correctly, Woz almost had to give the Apple I to HP, except they said that they didn't want it (HP couldn't imagine why individuals would want to own a computer).
My Book if you want to start at the bottom and work up.
How to Design Programs or Simply Scheme if you want to start at the top and work down.
I think there's also some good introductory Python books.
Actually, if we taught everyone to program, that would also mean that we taught them to think logically. I can only think that doing so would make the world a better place.
What makes a computer even better than a logic class is that with computers, you know for sure at the end if you are logically correct or not, becuase if you aren't, the computing goes BOINK!
For teaching, I've always thought of having a class emulate the processor. Have some shoeboxes for memory, and each memory location has a number, which is the instruction. a person brings the instruction to the instruction decoder person, who looks up how to process that number. Then, if the instruction includes any memory locations, you have people who are the data bus running to get memory chunks.
I didn't see that posted anywhere. Sorry. You may have taken that for granted, but I did not.
The one I went to required assembly language programming, too, but it was an add-on for juniors and seniors. I think assembly language should be the beginning, not the end of learning computer programming.
Having said that - assembly languages _is_ disappearing from many schools altogether. Also, those who don't go to college (at least for programming) generally don't know it, either.
Thank you for your openness and honesty. I'm still wrestling with this question, and will keep your thoughts in mind. Personally, I don't see that there was something to be disclaimed, but it's obvious that at least some on this board do. Finding what is appropriate in all circumstances is always a hard battle, especially when addressing a crowd as diverse as Slashdot.
Anyway, I appreciate you taking the time to advise me.
"I don't like dishonesty in the submission process."
What's dishonest? It would have been dishonest had I registered a new account to make the submission. However, the way that you know that I was the author was because I _did not_ resort to dishonest tactics. I simply wrote from the third person, which is exactly how I wrote the back cover text for the book, the press releases, etc.
I don't even spamguard my email address, because I want people to know who I am and be able to reach me easily.
I did the same when I wrote the text for the back cover.
I am sorry you think I am a scam artist. I did not and do not feel that I did anything wrong. My comments should stand by themselves no matter if it was by me, someone else, or an alien just landing on the planet.
I did not, do not, and don't plan to ever disguise who I am (by the way, how did you find out that I was the author except by the fact that you looked up my user ID?). I don't even spam-hide my email address. I have exactly one Slashdot account, and cannot recall a time I posted anonymously. I just didn't see why who I am affected whether or not the editors liked my article.
I don't see how there would be a conflict of interest, since Slashdot has an editorial review process (even if it is somewhat questionable at times...). My submission was to the editors. They should be able to base their judgment on the content no matter who the author was. Your comments apply to the editors of content, not necessarily to the submitters of it.
I have no problem saying that I wrote the book, I just thought that the article's worth rested in it's content, not who wrote it. I decided to let the editors decide (and, frankly, was shocked that they posted it - I've posted about 10 stories to Slashdot and this is only the second one that has been posted).
Assembly language is useful for knowing how the pieces fit together, not necessarily for direct coding.
I agree that SICP is a foundational book. I just think that abstractions are better taught AFTER the concepts which they are abstracting, not before.
We teach people mathematical tables BEFORE teaching them how to use a calculator.
"I have no idea what the submitter thinks goes on in good CS schools these days. I know they worked me to the bone with large projects in assembly, C, Java, Lisp, Prolog, you name it. The idea that they don't teach assembly is idiotic."
Most schools I've seen, while they do teach assembler, it's usually a late add-on for 4th year students (this was what it was at the University I went to - good program overall, though). In smaller colleges, it may not be taught at all, or it may be done in such a shoddy way as to make it not worthwhile at all.
The thing is, I think that assembly language is _foundational_, not just an add-on course. It helps you learn other languages. Teaching it first helps students really get a grasp on what the computer is doing. I've seen several students graduate from Universities where, at the end, they still just didn't quite get how the programming languages they used really worked. It was still a "magic black box" to them.
That's an old link - outdated version. Go to
http://savannah.nongnu.org/projects/pgubook/
Actually I am very familiar with these people and with the perspective they come from. However, I think that doing abstractions FIRST is a bad idea. It is better to do the low-level first and then you know what it is you are abstracting. My favorite programming language is Scheme. However, in all languages, knowing assembly language helps me to know what the actual computer is doing.
"Bullshit. Since when did what language you know determine how good a programmer you are?"
Assembly is different. All languages eventually turn into assembly. Knowing how the stack operates, what a stack frame is, what a register is, what addressing modes are available, etc., all bear down on ALL programming languages.
For example, in C, where should you place your most-used member of a struct? Why, in the first position, since it can be accessed using indirect addressing rather than base pointer addressing.
Why do Scheme and C often have trouble interacting? Because Scheme's continuations mean that objects on the stack have to be able to live forever, meaning that the hardware stack is near useless.
Also, many people who have trouble understanding pointers in C are able to "get it" after learning assembly language because it makes the concept far more concrete.
Why are OO calls more costly than straight function calls? Because the method has to be looked up in a virtual method table first, before it is called. Not only does the lookup cost cycles, but the indirect jump can kill your pipeline.
Anyway, these are the types of issues that all programmers in all languages have to contend with. It is easier to understand these types of concepts if the programmer knows assembly language.
x86 is actually pretty decent when using it in Linux. It's the 16-bit stuff and the segmented memory models that are scary.
I don't see how it's "tricking" you. I believe in moral marketing. However, I don't understand the general opinion that one shouldn't promote one's own stuff.
Two things:
1) whether or not I wrote the book is irrelevant as to whether or not it makes a good Slashdot story.
2) would you be offended if I told you that the back-cover text, which was also written by me, is also written in the third person?
Anyway, I'm not quite certain where you think the trickery or deception is. The only thing I can see from your post substantiating this is:
"But when he doesn't admit that and writes obviously biased remarks regarding knowing assembly to be a good programmer, I can't help but view it skeptically."
I agree that the remarks are biased in the way all remarks are biased. However, I think you are reversing the order of the biases. It is _because_ I believed assembly language essential to being a good programmer that I bothered to write the book in the first place.
Anyway, I'm sorry if I offended you, but I am not sorry for how I worded my article submission.
Mix is actually what inspired me to write the book. I loved Knuth's approach from the assembler level, but felt there were two deficiencies:
1) There was no introduction to programming. Knuth's books assumed you knew how to program already.
2) It used Mix. I felt that for new programmers a real language would be a more concrete learning experience.
You forget the other architecture: the pipeline / multijob architecture, where CPUs are divided up by jobs instead of being divided equally no matter how many CPUs. For example, they might do something like this:
CPU 1 runs the display/sound (continual refresh based on reading global data)
CPU 2 runs the AI (modifies global data)
CPU 3 handles game physics (modifies global data)
This would make your refresh rate constant, no matter how complicated the rest of the game is.
Then, in X-Box1 mode, it could switch to this:
CPU 1 does NVIDIA/ATI translations
CPU 2 does x86/PPC translation
CPU 3 actually runs the code
So what?
I did think. Thinking is what led me to believe that they probably will have excess inventory in the months leading up to their new release. I mean really, how many people are going to buy X-Box 1 when #2 is going to be out soon?
Lowering the price is probably the only way.