I always wonder why colleges start out teaching Java first. [...] Always start with the fundamentals.
It's easier to learn a safe language than an unsafe one, since safe languages have deterministic behavior. It's easy to lose sight of the fundamentals of programming when you're busy tracking down bus errors and segmentation violations.
You learn 2 + 2 = 4 before you learn a^2 + b^2 = c^2.
Yes! And this is precisely why a value-oriented functional language should be the "first language" of choice: we learn and intuitively understand evaluation at a very early age!
[...] Take that away, and you might as well just use ML.
And then you'd get a powerful static type discipline to boot! Hey, come to think of it, maybe that's actually more useful than being able to treat code as data...
Check out Stellarium, a cross-platform OpenGL application that takes your coordinates and gives you a realistic 3D night sky, with optional star names, constellation names, constellations, and all kinds of other nifty features. It's perfect for a night of stargazing.
Holy mackerel! Look at the lower left-hand corner of the image, and you see an *obvious* collection of Star Wars-era technology! There's something like the back of a landspeeder, as well as a vaporator on what appears to be an enormous moisture farm in the distance. Amazing!
n 1: an expression of regret at having caused trouble for someone; "he wrote a letter of apology to the hostess"
2: a formal written defense of something you believe in strongly [syn: apologia]
I honestly think ``apology'' was meant in the former sense. See Backus's Turing award lecture or his work on the FP programming language. He was actually trying to pioneer a new way of thinking about programming, which led to the modern theory and practice of functional programming. His ``apology'' wasn't a defense so much as a hope that the world could move on to something better.
I understand the context in which the word "apology" is being used (as in "justification"),...
Actually, I'm pretty sure they do mean ``apology'' as in ``sorry, world''. Backus's work on FP was all about getting past the ``word-at-a-time'' assignment-based paradigm popularized by FORTRAN (the ``von Neumann bottleneck''), and moving on to more expressive algebraic programming techniques, today referred to as functional programming. Check out his Turing award lecture -- it's a great read!
Design by contract seems like a lot of extra work and runtime cost for something that might once in a while catch a bug in already-deployed code. Lighter weight methods like static typing catch (certain kinds of) errors before the code is even compiled; unit testing is usually done before code is deployed, and with the express aim of exposing incorrect behavior in corner cases.
Just what niche is design-by-contract supposed to fill? It's heavyweight, costly at runtime, undirected, and likely to catch bugs only after deployment -- too-little-too-late. Maybe it's unpopular because it's a poor tradeoff.
Yet I'd speculate that VB has made more people more money (and i dont just mean microsoft - i mean the computer industry) than all other languages/environments combined.
When did total gross profits become the key criterion in choosing a suitable language for learning how to program? It seems to me that factors such as likeliness to expand one's mind and ease of reasoning about one's programs should take priority. Statically-typed functional languages are a clear win in those areas, with fundamental core concepts like abstraction and compositionality.
... little understanding of where the 5 goes and of what a type is.
I imagine the best way to learn what a type is is to learn a type-safe language, like ML or Haskell. Come to think of it, that's probably better than Python and C!
Well, the recommended wording reads (emphasis mine):
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
As an author you needn't worry about having to pay licensing fees, since the GPL governs redistribution and doesn't take away the author's copyright. Furthermore, you needn't worry about people being forced to pay licensing fees to redistribute your software, since they can always elect not to apply the terms of the new license.
I'll take a stab at it. NP problems are generally regarded to not be solvable in polynomial time. (Polynomial time is when the amount of time taken to solve a problem is no greater than the problem size raised to some constant exponent times some constant factor: cn^k, or O(n^k).) They generally take exponential time or worse - as far as we know.
Take another:) NP problems can be solved in polynomial time by a non-deterministic Turing machine. This includes every problem that can be solved in polynomial time by a deterministic machine, too, and those problems certainly don't take exponential time, even as far as we know.
Another way to think about it is this: NP problems can be verified efficiently (i.e. in polynomial time, using a deterministic Turing machine) -- if you already know the answer, it's easy to check that it's correct. For some of these problems, it's easy to come up with that answer from square one. For the NP-hard ones, though, it's tough -- so tough that if we could solve them efficiently, we could solve every NP problem efficiently, even the hard ones.
Also, not all NP-hard problems are NP -- there's a special title reserved for problems in both classes: NP-complete.
(I don't know why i should be wasting so much time being pedantic about complexity theory on Slashdot... especially at this hour!)
Oh, and...
(Has anyone else been impressed lately at the quality of CS- and math-related pages at Wikipedia?)
The statement is correct. There is no general solution. For an NP hard problem, you're forced to iterate through every possible solution, and then decide which one is "best".
Guess again -- ``NP hard'' just means we don't know if there's a general solution, because if we did, we'd know the same thing about every other NP hard problem (and every NP problem, for that matter). The article is incorrect. Consult your algorithms textbook.
The bottom line is that if you could trick users into running a Perl script that came through email, which wouldn't be that difficult for a certain percentage of them, you could write a decent worm for Linux.
If you can make it fit into four 80-column lines that get inserted into the victim's.signature file, i bet you could even get curious techies with it.
You're not saying that all people in Islamabad are terrorsits, are you? [...]
Please stop this racist hysteria.
it may be racist to say that all people in Islamabad are terrorists, but surely chance has something to say about the probability of any random person in Islamabad being a terrorist, versus the probability of any random person in Sydney being a terrorist.
similarly, one could make a (perhaps even more striking) statement about the probability of any random terrorist coming from Islamabad, versus the probability of any random terrorist coming from Sydney.
statistics are a poor substitute for hard facts, but they're the only one we've found so far.
But yes, I agree that such a list can be made, and mine would be: C, C++, Java, VB, Perl, COBOL, PL/SQL, HTML/XML, ASP/JSP/PHP, SAS, Python, Matlab, Fortran, Common Lisp, mostly in that order, but maybe COBOL even more to the front of the list.
Functional languages are sorely under-represented in your list. It ought to include at least some dialect of ML (SML or O'Caml) and at least one pure functional language (e.g. Haskell). Really, though, it is a silly academic exercise to try to form a list that comprehensively includes every ``useful'' language, as definitions of useful vary widely. (In fact, that's why there are so many languages in the first place, and in some sense, why it's justifiable to have so many languages.)
Case in point: your list leans heavily towards the imperative and object-oriented styles of programming (C, C++, Java, COBOL, Perl, Python, Fortran), and also towards web technologies and scripting languages (HTML/XML, ASP/JSP/PHP (which are really three different things anyhow), Perl, Python, Java (arguably)). (It's also arguable that you include some languages which are decidedly less useful -- e.g. VB, SAS -- but i only mention that to point out that these things are all a matter of taste; let's not get into a holy war on everyone's favorite programming language!:)
it doesn't matter if most crypto algorithms are not NP-complete -- if a problem is NP-complete, that means that every problem in NP reduces to it in polynomial time, i.e. P = NP. so if you solved an NP-complete problem in deterministic polynomial time, you'd have an efficient (polynomial-time) solution to every NP problem, and most crypto depends on problems which are known to be in NP ("hard") but not known to be in P.
also, solvability (i.e. decidability) has nothing to do with NP-completeness, so "You can solve 'em it just takes a ton of time" says nothing about whether a problem is NP-complete, but it suggests that the problem is in NP.
It's not a valid criticism in that the test programs are all very simple to implement. Also, taking into account the fact that some unexpected languages made it to the top reveals the relatively low level of bias.
I always wonder why colleges start out teaching Java first. [...] Always start with the fundamentals.
It's easier to learn a safe language than an unsafe one, since safe languages have deterministic behavior. It's easy to lose sight of the fundamentals of programming when you're busy tracking down bus errors and segmentation violations.
You learn 2 + 2 = 4 before you learn a^2 + b^2 = c^2.
Yes! And this is precisely why a value-oriented functional language should be the "first language" of choice: we learn and intuitively understand evaluation at a very early age!
[...] Take that away, and you might as well just use ML.
And then you'd get a powerful static type discipline to boot! Hey, come to think of it, maybe that's actually more useful than being able to treat code as data...
That... is why he fails.
Check out Stellarium, a cross-platform OpenGL application that takes your coordinates and gives you a realistic 3D night sky, with optional star names, constellation names, constellations, and all kinds of other nifty features. It's perfect for a night of stargazing.
Holy mackerel! Look at the lower left-hand corner of the image, and you see an *obvious* collection of Star Wars-era technology! There's something like the back of a landspeeder, as well as a vaporator on what appears to be an enormous moisture farm in the distance. Amazing!
2: a formal written defense of something you believe in strongly [syn: apologia]
I honestly think ``apology'' was meant in the former sense. See Backus's Turing award lecture or his work on the FP programming language. He was actually trying to pioneer a new way of thinking about programming, which led to the modern theory and practice of functional programming. His ``apology'' wasn't a defense so much as a hope that the world could move on to something better.
Actually, I'm pretty sure they do mean ``apology'' as in ``sorry, world''. Backus's work on FP was all about getting past the ``word-at-a-time'' assignment-based paradigm popularized by FORTRAN (the ``von Neumann bottleneck''), and moving on to more expressive algebraic programming techniques, today referred to as functional programming. Check out his Turing award lecture -- it's a great read!
Design by contract seems like a lot of extra work and runtime cost for something that might once in a while catch a bug in already-deployed code. Lighter weight methods like static typing catch (certain kinds of) errors before the code is even compiled; unit testing is usually done before code is deployed, and with the express aim of exposing incorrect behavior in corner cases.
Just what niche is design-by-contract supposed to fill? It's heavyweight, costly at runtime, undirected, and likely to catch bugs only after deployment -- too-little-too-late. Maybe it's unpopular because it's a poor tradeoff.
Yet I'd speculate that VB has made more people more money (and i dont just mean microsoft - i mean the computer industry) than all other languages/environments combined.
When did total gross profits become the key criterion in choosing a suitable language for learning how to program? It seems to me that factors such as likeliness to expand one's mind and ease of reasoning about one's programs should take priority. Statically-typed functional languages are a clear win in those areas, with fundamental core concepts like abstraction and compositionality.
... little understanding of where the 5 goes and of what a type is.
I imagine the best way to learn what a type is is to learn a type-safe language, like ML or Haskell. Come to think of it, that's probably better than Python and C!
kevin_t kevin = malloc(sizeof(kevin_t))!!
Lick a whore, of course! It's the missing link!
Well, the recommended wording reads (emphasis mine):
As an author you needn't worry about having to pay licensing fees, since the GPL governs redistribution and doesn't take away the author's copyright. Furthermore, you needn't worry about people being forced to pay licensing fees to redistribute your software, since they can always elect not to apply the terms of the new license.This issue is covered in the GPL FAQ.
(ex post facto disclaimer: IANAL)
0s and 1s are perfectly capable of expressing variation along two dimensions :)
....funny....0 01000000
....funny....0 11100000
... right?)
Hit your funny bone.
0000111110000
0000011100000
0000
Now, hit it harder.
0000111110000
0000111110000
0000
Unless you wanna say your brain is one giant DAC.
Well, once you accept that the universe is fundamentally discretized . . . (not a controvesial idea at all!
Pinch yourself. Hurts, no?
Ones.
Pinch harder. Hurts more?
More ones.
Thought so.
Yep. Zeros and ones...
I'll take a stab at it. NP problems are generally regarded to not be solvable in polynomial time. (Polynomial time is when the amount of time taken to solve a problem is no greater than the problem size raised to some constant exponent times some constant factor: cn^k, or O(n^k).) They generally take exponential time or worse - as far as we know.
Take another :) NP problems can be solved in polynomial time by a non-deterministic Turing machine. This includes every problem that can be solved in polynomial time by a deterministic machine, too, and those problems certainly don't take exponential time, even as far as we know.
Another way to think about it is this: NP problems can be verified efficiently (i.e. in polynomial time, using a deterministic Turing machine) -- if you already know the answer, it's easy to check that it's correct. For some of these problems, it's easy to come up with that answer from square one. For the NP-hard ones, though, it's tough -- so tough that if we could solve them efficiently, we could solve every NP problem efficiently, even the hard ones.
Also, not all NP-hard problems are NP -- there's a special title reserved for problems in both classes: NP-complete.
(I don't know why i should be wasting so much time being pedantic about complexity theory on Slashdot... especially at this hour!)
Oh, and...
(Has anyone else been impressed lately at the quality of CS- and math-related pages at Wikipedia?)
Yes :)
The statement is correct. There is no general solution. For an NP hard problem, you're forced to iterate through every possible solution, and then decide which one is "best".
Guess again -- ``NP hard'' just means we don't know if there's a general solution, because if we did, we'd know the same thing about every other NP hard problem (and every NP problem, for that matter). The article is incorrect. Consult your algorithms textbook.
The bottom line is that if you could trick users into running a Perl script that came through email, which wouldn't be that difficult for a certain percentage of them, you could write a decent worm for Linux.
If you can make it fit into four 80-column lines that get inserted into the victim's .signature file, i bet you could even get curious techies with it.
Why? What would the author of the book, Eric Schlosser, have to gain by scaring readers of his book?
Duh! More sales? That's the whole point of sensationalism...
it may be racist to say that all people in Islamabad are terrorists, but surely chance has something to say about the probability of any random person in Islamabad being a terrorist, versus the probability of any random person in Sydney being a terrorist.
similarly, one could make a (perhaps even more striking) statement about the probability of any random terrorist coming from Islamabad, versus the probability of any random terrorist coming from Sydney.
statistics are a poor substitute for hard facts, but they're the only one we've found so far.
But yes, I agree that such a list can be made, and mine would be: C, C++, Java, VB, Perl, COBOL, PL/SQL, HTML/XML, ASP/JSP/PHP, SAS, Python, Matlab, Fortran, Common Lisp, mostly in that order, but maybe COBOL even more to the front of the list.
Functional languages are sorely under-represented in your list. It ought to include at least some dialect of ML (SML or O'Caml) and at least one pure functional language (e.g. Haskell). Really, though, it is a silly academic exercise to try to form a list that comprehensively includes every ``useful'' language, as definitions of useful vary widely. (In fact, that's why there are so many languages in the first place, and in some sense, why it's justifiable to have so many languages.)
Case in point: your list leans heavily towards the imperative and object-oriented styles of programming (C, C++, Java, COBOL, Perl, Python, Fortran), and also towards web technologies and scripting languages (HTML/XML, ASP/JSP/PHP (which are really three different things anyhow), Perl, Python, Java (arguably)). (It's also arguable that you include some languages which are decidedly less useful -- e.g. VB, SAS -- but i only mention that to point out that these things are all a matter of taste; let's not get into a holy war on everyone's favorite programming language! :)
it doesn't matter if most crypto algorithms are not NP-complete -- if a problem is NP-complete, that means that every problem in NP reduces to it in polynomial time, i.e. P = NP. so if you solved an NP-complete problem in deterministic polynomial time, you'd have an efficient (polynomial-time) solution to every NP problem, and most crypto depends on problems which are known to be in NP ("hard") but not known to be in P.
also, solvability (i.e. decidability) has nothing to do with NP-completeness, so "You can solve 'em it just takes a ton of time" says nothing about whether a problem is NP-complete, but it suggests that the problem is in NP.
yeah -- personally, i'd call it Insightful...
It's not a valid criticism in that the test programs are all very simple to implement. Also, taking into account the fact that some unexpected languages made it to the top reveals the relatively low level of bias.