I see it as the skill of being able to look at anything and find the repetitive behavior or redundant characteristics. The best example I can give is the way humans stereotype as a way of reducing mental clutter. A chair might have any of a bazillion different forms but we reduce it to the stereotype "chair" and use that as our conceptual construct.
Uh huh. This is called "abstraction." Not a new idea. Plato wrote about it a lot.
Oh, wait! Variations of provability logic known as "Dynamic Logics" can deal with expressing algorithms and proving things about them (like the non-existence of a halting function) all within the same formalism. I'm sure this is what the article's author has in mind for a pedagogical replacement to Turing machines.
Dynamic logics don't handle concurrency very well, but then, neither do people.:-)
Operating systems are functions of software, hardware and user input. This can be represented in at least two ways. The straightforward way is just to specify the interactions with hardware and the user as part of the input to a turing machine...
I'm not so sure about that. I do agree that an operating system can be modelled by a running Turing machine. But only degenerate cases of operating systems halt. The purpose of an operating system is all the side-effects it creates while it doesn't halt. That is to say, it creates an environment in which other programs can run. It interfaces with hardware to output, say, video and sound. These side-effects are essentially analogous the states a the TM are in while running TMOS. (This analogy is why I'm willing to agree, with the stipulation that the TM must be running) By definition, a Turing machine only computes a function when it halts (and the result is what is written on the tape once it has halted). Operating systems make pretty boring Turing machines anyway. Unless something like a kernel panic happens, if they halt, they'll always halt with instructions to reboot or turn the hardware off, no matter what the user input or what side-effects it has created.
When I got my CS degree, the halting problem was only one section of one of the finite automata courses. It took maybe a week to cover, and explaining turing machines was necessary anyway in order to explain NP completeness. In light of that, is such a fundamental theorem worth dropping?
Recursive function theory is a much neater way to prove that no halting function exists. Rice's theorem is an easy generalization of the methods used. This can be covered in a day, if suitable homework problems are given. Turing machines are tangential to this topic, especially since Turing's contribution was to prove that TMs can compute the recursive functions, putting them on par with plain old recursive functions as a model of computation. Using provability logic, the proof is downright trivial.
If they're using a small virtual machine, the right security protocol would be to make an MD5 (or SHA-1 or whatever) hash of each essential component of the virtual machine and on board software that enforces DRM. It would then be a matter of storing a private key somewhere on the machine, after encrypting the hashes using the private key, comparing to an encrypted list stored on the disc.
This would make cracking the machine a nightmare. Recovering the list of keys from the disc might not be too hard. But even then, you'd have a very hard time writing a "liberated" firmware that hashes to the same value as the original. (You could also try to change the private key, but that sounds even harder)
Well, I figured you meant Set Theory, since sets as sets[1] themselves have very little structure. I do try to be a charitable reader. Hell, sets are isomorphic as sets if they have the same cardinality. And I am familiar with "normalization" as it occurs in Database Analysis. On the other hand, I still have no idea how set theory relates to pattern recognition in the sense you're describing.
Were you just trying to use normalization as an example of a proper design pattern? If so, there is already vast literature on design patterns, all the way from architectural patterns to very details implementation patterns.
This is fundamentally, ignorantly wrong. Anyone who has worked with lambda calculus or turing machines probably has an intuitive notion of why it's wrong too.
Oh? See, where I come from, Turing machines and the lambda calculus are formalisms for describing and computing functions, stateless mappings from a domain to a range. Operating systems, for example, are not functions, because they are not stateless.
This is a common theme among functional programming languages. They want to remain as purely functional as possible (because that approach has proven to be powerful), but are unable to do so in various circumstances because they have to interact with the underlying hardware or user. For instance, Haskell has its monads. Functions, as such, are unable to maintain state. They cannot express the idea of waiting for an arbitrary condition.
I don't know how this dude describes "expressional possibilities", but I bet he uses the notation of set theory to do so, and probably relies on the axioms of ZFC when he's talking about the possibilities, especially when he tries to count them.
That irrelevant to his point. He's not saying mathematics isn't a useful tool in computer science. He's saying that the aims of mathematicians and computer scientists are different. Even if they use the same methods. The majority of people working on whether P=NP, or extensions to Rice's theorem (there are lots), or Oracle Machines, etc. are mathematicians. These are very different kinds of problems than computer scientists are interested in. The last computer science conference I went to had papers on Data Mining, AI, computer vision and other kinds of pattern recognition, the mathematical basis of computer security, HCI, and a multitude of other subjects.
More to his point, he's saying that the mathematician's focus on Halting algorithms (and other Rice's theorem-related constructs) is inappropriate for tackling the kind of (mathematical) problems computer scientists deal with. As such, there shouldn't be a focus on them in CS curricula. Alternatives that capture what computer scientists are interested in already exist (slightly modified Finite state machines, different sorts of logics).
Apparently all he wants is some different representation, but he shouldn't make sweeping remarks about mathematics being inappropriate to talk about it.
He didn't. He gave a concrete example of a real life computer program that cannot adequately be modelled by a Turing machine or the lambda-calculus.
How would I be able to tell? Simple. I measure bogosort performance against shellsort, quicksort and my own rumplsort. What I need is just some datasets and a timer. As I don't bother with worst case analysis but use perfectly natural data to get real world results I don't need any math.
Or you could just count the number of steps each of those sorts take quicker than you could write and test them. That's how Landau analysis is done on algorithms. Simple counting. Your fear of mathematics is keeping you from counting when it's appropriate.
Yup. The key to design is pattern recognition. The mathematical idea of sets is somewhat similar but people who are too strong in math tend to think in only one dimension, for lack of a better term.
The idea is to make the criminal start lulzing so hard he roffles on the floor until the real police show up and arrest the victim. Heart attack inducing lulz ensue. No need for a court or prison then, see?
I agree. Linux isn't going to take Microsoft or Apple down anytime soon, what many people mean by the "Year of the Linux Desktop". And trying to quantify when it has become the Year of the Linux Desktop in terms of userbase is futile, as you said.
On the other hand, 2007 has been a good year for Linux adoption. Ubuntu especially has recieved quite a bit of press attention, and people are starting to realize there are alternatives to Windows. If this trend continues, 2007 or 2008 could legitimately be called the Year of the Linux Desktop. But only in retrospect.
Yes, of course. They're looking to fill up their new Research and Development facility with Canadian code-monkeys for 20% less of the cost of hiring American code-monkeys. That makes perfect sense. Anybody can do Research and Development. R&D laborers are a commodity.
And if you must shower, clean and dry your balls really well. While you're getting dressed, rub on your balls and rub the oily sweat on your neck, face, chest, and wrists. Women love the smell of balls.
In context it's pretty clear that I mean that development tools for a particular platform don't really affect which platform is most lucrative from a business point of view. Context makes this especially clear since I continued to discuss how Windows doesn't include any good cross-platform development tools, or (outside of Java) language runtimes.
I bet you stopped reading after the first sentence.
That is rarely true, which is why so much software only works for Windows. Commercial software houses want to sell as much software as possible. If it takes 2 years to develop a Windows program that can sell 2000 copies, and an extra year to port it to OS X & Linux to sell another 350 copies (Windows had about 85% client-side market share in 2004), there is almost no point to porting the software. They could just spend that year working on their next Windows project which will make them three times as much money.
I expressed myself poorly, but this was part of my point. Windows doesn't include tools to create cross-platform applications (except for Java, but *gross*), so to target the largest userbase, they must target Windows, usually to the exclusion of other platforms.
IMHO, Windows will only lose its dominance when cross platform development tools become as easy to use and feature rich as Visual Studio. The software that I write is all Windows-only because it is written in Visual C# from within Visual Studio (using.Net).
This is a part of the issue, but keep in mind that most commercial software houses are going to target the biggest userbase they can. Even if they have to use Notepad to write the software.
I would love to write software that would work on Windows, Linux, and OS X; but I work at a small development company. We are far more productive just sticking to one set of code for one platform, because there are no good languages out there that work for any platform.
There are good languages that work for any platform. Ruby is the current favorite among fanboys. (I'll admit, it's my favorite too, for now. Though it has its warts). Java is certainly cross-platform, but it's almost as painful to code in as C.
Writing software that works with Linux, OS X, and the other Unix-like operating systems is trivial, if you plan it right from the start. Apple has done a lot to make targetting Unix-like operating systems as easy as possible, and they keep adding tools to make porting Unix applications to OS X easy.
For instance, OS X comes with Perl, PHP, Python, Ruby, and Java, by default. Getting GCC installed is a matter of installing the Xcode Tools. Leopard is going to include Cocoa bindings for Ruby (I'm excited about that).
Outside of Java, Windows doesn't include any cross-platform programming language, which complicates deploying to that platform. Targetting.NET wouldn't be so bad, but Mono isn't quite ready. There are, however, Ruby bindings for.NET available.
Tis true, but as has been pointed out, there is very little dissolved oxygen at those depths. So the GP's "point" that water is composed of oxygen still has no bearing.
No he doesn't. He was in the Skull and Bones, ffs. He's just as cynical and cunning as the rest of them. Don't underestimate him.
I see it as the skill of being able to look at anything and find the repetitive behavior or redundant characteristics. The best example I can give is the way humans stereotype as a way of reducing mental clutter. A chair might have any of a bazillion different forms but we reduce it to the stereotype "chair" and use that as our conceptual construct.
Uh huh. This is called "abstraction." Not a new idea. Plato wrote about it a lot.
Oh, wait! Variations of provability logic known as "Dynamic Logics" can deal with expressing algorithms and proving things about them (like the non-existence of a halting function) all within the same formalism. I'm sure this is what the article's author has in mind for a pedagogical replacement to Turing machines.
:-)
Dynamic logics don't handle concurrency very well, but then, neither do people.
Operating systems are functions of software, hardware and user input. This can be represented in at least two ways. The straightforward way is just to specify the interactions with hardware and the user as part of the input to a turing machine...
I'm not so sure about that. I do agree that an operating system can be modelled by a running Turing machine. But only degenerate cases of operating systems halt. The purpose of an operating system is all the side-effects it creates while it doesn't halt. That is to say, it creates an environment in which other programs can run. It interfaces with hardware to output, say, video and sound. These side-effects are essentially analogous the states a the TM are in while running TMOS. (This analogy is why I'm willing to agree, with the stipulation that the TM must be running) By definition, a Turing machine only computes a function when it halts (and the result is what is written on the tape once it has halted). Operating systems make pretty boring Turing machines anyway. Unless something like a kernel panic happens, if they halt, they'll always halt with instructions to reboot or turn the hardware off, no matter what the user input or what side-effects it has created.
When I got my CS degree, the halting problem was only one section of one of the finite automata courses. It took maybe a week to cover, and explaining turing machines was necessary anyway in order to explain NP completeness. In light of that, is such a fundamental theorem worth dropping?
Recursive function theory is a much neater way to prove that no halting function exists. Rice's theorem is an easy generalization of the methods used. This can be covered in a day, if suitable homework problems are given. Turing machines are tangential to this topic, especially since Turing's contribution was to prove that TMs can compute the recursive functions, putting them on par with plain old recursive functions as a model of computation. Using provability logic, the proof is downright trivial.
If they're using a small virtual machine, the right security protocol would be to make an MD5 (or SHA-1 or whatever) hash of each essential component of the virtual machine and on board software that enforces DRM. It would then be a matter of storing a private key somewhere on the machine, after encrypting the hashes using the private key, comparing to an encrypted list stored on the disc.
This would make cracking the machine a nightmare. Recovering the list of keys from the disc might not be too hard. But even then, you'd have a very hard time writing a "liberated" firmware that hashes to the same value as the original. (You could also try to change the private key, but that sounds even harder)
Well, I figured you meant Set Theory, since sets as sets[1] themselves have very little structure. I do try to be a charitable reader. Hell, sets are isomorphic as sets if they have the same cardinality. And I am familiar with "normalization" as it occurs in Database Analysis. On the other hand, I still have no idea how set theory relates to pattern recognition in the sense you're describing.
Were you just trying to use normalization as an example of a proper design pattern? If so, there is already vast literature on design patterns, all the way from architectural patterns to very details implementation patterns.
[1] Not a typo.
This is fundamentally, ignorantly wrong. Anyone who has worked with lambda calculus or turing machines probably has an intuitive notion of why it's wrong too.
Oh? See, where I come from, Turing machines and the lambda calculus are formalisms for describing and computing functions, stateless mappings from a domain to a range. Operating systems, for example, are not functions, because they are not stateless.
This is a common theme among functional programming languages. They want to remain as purely functional as possible (because that approach has proven to be powerful), but are unable to do so in various circumstances because they have to interact with the underlying hardware or user. For instance, Haskell has its monads. Functions, as such, are unable to maintain state. They cannot express the idea of waiting for an arbitrary condition.
I don't know how this dude describes "expressional possibilities", but I bet he uses the notation of set theory to do so, and probably relies on the axioms of ZFC when he's talking about the possibilities, especially when he tries to count them.
That irrelevant to his point. He's not saying mathematics isn't a useful tool in computer science. He's saying that the aims of mathematicians and computer scientists are different. Even if they use the same methods. The majority of people working on whether P=NP, or extensions to Rice's theorem (there are lots), or Oracle Machines, etc. are mathematicians. These are very different kinds of problems than computer scientists are interested in. The last computer science conference I went to had papers on Data Mining, AI, computer vision and other kinds of pattern recognition, the mathematical basis of computer security, HCI, and a multitude of other subjects.
More to his point, he's saying that the mathematician's focus on Halting algorithms (and other Rice's theorem-related constructs) is inappropriate for tackling the kind of (mathematical) problems computer scientists deal with. As such, there shouldn't be a focus on them in CS curricula. Alternatives that capture what computer scientists are interested in already exist (slightly modified Finite state machines, different sorts of logics).
Apparently all he wants is some different representation, but he shouldn't make sweeping remarks about mathematics being inappropriate to talk about it.
He didn't. He gave a concrete example of a real life computer program that cannot adequately be modelled by a Turing machine or the lambda-calculus.
How would I be able to tell? Simple. I measure bogosort performance against shellsort, quicksort and my own rumplsort. What I need is just some datasets and a timer. As I don't bother with worst case analysis but use perfectly natural data to get real world results I don't need any math.
Or you could just count the number of steps each of those sorts take quicker than you could write and test them. That's how Landau analysis is done on algorithms. Simple counting. Your fear of mathematics is keeping you from counting when it's appropriate.
Yup. The key to design is pattern recognition. The mathematical idea of sets is somewhat similar but people who are too strong in math tend to think in only one dimension, for lack of a better term.
Of sets? WTF are you talking about.
The idea is to make the criminal start lulzing so hard he roffles on the floor until the real police show up and arrest the victim. Heart attack inducing lulz ensue. No need for a court or prison then, see?
Why? It's just masturbation. With your mouth.
Tempura.
NEXT!
I agree. Linux isn't going to take Microsoft or Apple down anytime soon, what many people mean by the "Year of the Linux Desktop". And trying to quantify when it has become the Year of the Linux Desktop in terms of userbase is futile, as you said.
On the other hand, 2007 has been a good year for Linux adoption. Ubuntu especially has recieved quite a bit of press attention, and people are starting to realize there are alternatives to Windows. If this trend continues, 2007 or 2008 could legitimately be called the Year of the Linux Desktop. But only in retrospect.
He already mentioned it. SDL and OpenGL together do what DirectX does for Windows. Portably.
Yes, but twice $.01 is $.02. Doubling your investment is fun.
Yes, of course. They're looking to fill up their new Research and Development facility with Canadian code-monkeys for 20% less of the cost of hiring American code-monkeys. That makes perfect sense. Anybody can do Research and Development. R&D laborers are a commodity.
Oh, wait. That's not how R&D works...
Considering how utterly moronic most slashdot posters and readers are, that doesn't seem like a very good theory.
And if you must shower, clean and dry your balls really well. While you're getting dressed, rub on your balls and rub the oily sweat on your neck, face, chest, and wrists. Women love the smell of balls.
No joke.
Sorry, that's not true. There might be things nobody ever talks about. So their probability of coming up in conversation is forever 0. :fnord
Or Dragon Ball into 26! I'm gonna send them an email.
You must not be familiar with Worthington's Law.
Why is everybody reading this so uncharitably?
In context it's pretty clear that I mean that development tools for a particular platform don't really affect which platform is most lucrative from a business point of view. Context makes this especially clear since I continued to discuss how Windows doesn't include any good cross-platform development tools, or (outside of Java) language runtimes.
I bet you stopped reading after the first sentence.
That is rarely true, which is why so much software only works for Windows. Commercial software houses want to sell as much software as possible. If it takes 2 years to develop a Windows program that can sell 2000 copies, and an extra year to port it to OS X & Linux to sell another 350 copies (Windows had about 85% client-side market share in 2004), there is almost no point to porting the software. They could just spend that year working on their next Windows project which will make them three times as much money.
I expressed myself poorly, but this was part of my point. Windows doesn't include tools to create cross-platform applications (except for Java, but *gross*), so to target the largest userbase, they must target Windows, usually to the exclusion of other platforms.
IMHO, Windows will only lose its dominance when cross platform development tools become as easy to use and feature rich as Visual Studio. The software that I write is all Windows-only because it is written in Visual C# from within Visual Studio (using .Net).
.NET wouldn't be so bad, but Mono isn't quite ready. There are, however, Ruby bindings for .NET available.
This is a part of the issue, but keep in mind that most commercial software houses are going to target the biggest userbase they can. Even if they have to use Notepad to write the software.
I would love to write software that would work on Windows, Linux, and OS X; but I work at a small development company. We are far more productive just sticking to one set of code for one platform, because there are no good languages out there that work for any platform.
There are good languages that work for any platform. Ruby is the current favorite among fanboys. (I'll admit, it's my favorite too, for now. Though it has its warts). Java is certainly cross-platform, but it's almost as painful to code in as C.
Writing software that works with Linux, OS X, and the other Unix-like operating systems is trivial, if you plan it right from the start. Apple has done a lot to make targetting Unix-like operating systems as easy as possible, and they keep adding tools to make porting Unix applications to OS X easy.
For instance, OS X comes with Perl, PHP, Python, Ruby, and Java, by default. Getting GCC installed is a matter of installing the Xcode Tools. Leopard is going to include Cocoa bindings for Ruby (I'm excited about that).
Outside of Java, Windows doesn't include any cross-platform programming language, which complicates deploying to that platform. Targetting
Tis true, but as has been pointed out, there is very little dissolved oxygen at those depths. So the GP's "point" that water is composed of oxygen still has no bearing.