What tuple spaces provide is a high-level, very loosely coupled "coordination language" for multiple processes: potentially very good for "grid" computing, workflow with multiple agents or many other forms of asynchronous processing.
Primitive type system (compared to Haskell or O'Caml). One of the reasons for Java's verbosity is the lack of type inference. Another is the absence (until very recently) of type parameterisation (now provided, kinda, by generics). You're stuck with a cumbersome, inflexible type system that forces you into cumbersome, bloat-inducing "design patterns" every time you want to glue two different kinds of thing together. No wonder everyone's defecting to Python.
No first-class functions. Java's "object-oriented", you say? So's Smalltalk, in the truest sense of the expression (everything's an object), and Smalltalk has blocks which are true closures and can be passed around and composed together to your heart's content.
The most tiresome exception-handling mechanism of any mainstream language ever.
J2EE. Yes, I know you don't have to use it. Yes, I know you can use some of it without having to use all of it. Yes, I'm sure there are cases where you really do need the things J2EE endeavours to provide. None of that makes J2EE anything other than a stinking morass of terrible design, responsible for hours upon hours of pointless busywork for coders and an entire industry of consultants whose sole contribution to the field of human knowledge is finding ways to make-believe the J2EE is anything other than a total, hopeless, hideous loss. Why's this a reason for not using Java? Because it tells you how Java people - I mean specifically the Sun suits responsible for Java-the-product - think. It tells you how much they value the time and intelligence of Java programmers. And, most importantly, it tells you that there's a sucker born every minute. And that sucker is telling the developers on his team that they've got to use Java, so he can replace them cheaply when they finally collapse of boredom, self-loathing and the frustration of working on yet another never-ending J2EE behemoth that could have been implemented in a quarter of the time with a few well-crafted Perl scripts.
Quite a lot of the local network administration in individual colleges used to be done by students - it gave those willing to give up their time the opportunity to learn some practical skills. This was ten years ago, mind - I don't know how they have things set up now.
I do know that I spent an ungodly number of hours in the computer room at Lincoln college playing Civilisation, when I should have been revising for finals. D'oh!
I think Miguel's made a great play for the future of applications development on the Linux platform and I hope it pays off. Anything to wean Linux developers off C/++ (not kernel developers, obviously...). The only other project that shows anything like the same promise, IMHO, is Parrot and the great assortment of "dynamic" languages that are being ported to it.
Hah! I work in Northampton at the moment. It's a fairly unprepossessing little place. I'm tempted to seek out the book, just to see what there is about the town that I might be missing (it does seem to have slightly more than its fair share of peripatetic basket-cases, certainly...).
Ironically, this news makes me feel more like paying up for Mandrake Club membership - at the point when they needed it most, it seemed least worthwhile since who knew when they might be going out of business?
God, what a shitty way to think. I'm glad they've managed to pull through in spite of people like me.
Or how's about John Maynard Keynes, the economist? Anthony Burgess' _Earthly Powers_ has a very funny running joke about how many of the greatest and most serious thinkers of the twentieth century were gay (or non-straight, in any one of a number of ways).
An excellent biography of Turing that explicitly deals with the significance of his sexual outlaw status is Andrew Hodges' Alan Turing: The Enigma. Makes one think of the expression "the backroom boys" in an altogether different way.
I don't think that Turing wanted to be a "sexual outlaw", by the way - obviously he'd have preferred it if the authorities had simply left him alone - but there is a subversive, anti-authoritarian streak in him which has some of its roots in the British gay culture of his times. An often overlooked aspect of the Turing Test is the stipulation that the human participants must also pretend to be something they're not - namely a member of the opposite sex...
The UK Labour Party is just weird about personal freedoms - it has a real "nanny state" mentality. This isn't, as some have suggested, evidence of a right-wing tendency within a supposedly left-wing party. There is a puritan left and a libertarian left, just as there are puritan and libertarian right-wingers, and New Labour's leftism is the puritan kind.
The more I hear along these lines (and - for no particular reason, unless you count synchronicity - I've heard quite a bit along these lines recently), the more I think that there's something to be said for unsophisticated software environments.
The fact is, almost everything that's ever broken a piece of software that I've written has been to do with some aspect of the environment it had to run in that I hadn't accounted for. This is in an NT4/VB6 context, so we're talking.dll hell, permissions on servers, weird conflicts between totally unrelated applications, that sort of thing. There are a lot of things that can go wrong in that environment even when the core of the application is reasonably robust.
This isn't just special pleading on my part; obviously, I have a responsibility as a coder to anticipate such problems and find ways of dealing with them - we live and learn. But it does seem to me that the simpler the operating environment, the more of a chance you have of getting basically correct code to run reliably. A lot of these older systems do have that one advantage: although the systems themselves may have been coded in awe-inspiringly hackish ways, in a mixture of C and hand-crafted assembler, and thus represent impressive feats of disciplined engineering, the environment they had to work in were relatively homogenous and uncomplicated.
Ironically, hair-metal band Tesla were unaffected, due to their having abandoned electrical instruments during the making of their album Five Man Acoustical Jam...
I write code, but not all the time (I don't think I could write code all the time). A lot of the rest of the time I talk to other people about the code they're writing, or the code we're going to write together. I have just a little bit of seniority, so I get to enjoy sharing what I know and being listened to respectfully by the very smart people who work with me. Sometimes there's troubleshooting work to be done, and sometimes I end up in meetings talking about business processes and requirements. It's pretty much all good, except on the rare occasions where the person chairing the meeting is one of a small number of total dorks we sometimes have to deal with.
My only real gripe is that sometimes it's hard to get things done. If you go entirely by the book, and someone doesn't want to help you, it can take forever. People who understand what you want and are interested in helping you to make it happen will often come out from behind the wall of paperwork separating you from them and help you to sort it all out. But we're still at the mercy of pen-pushing time-servers when it comes to things like getting a replacement battery for a laptop. *shrug* - that's corporate IT, I guess.
Recursion is cool (and SICP is a lot of fun), except when it sucks ass or you need to do something real world that is optimized and may not have a gig of stack to solve a particular solution.
Given proper tail recursion - which essentially converts recursion to iteration, and which Scheme, SICP's implementation language of choice, supports - you don't need a gig of stack...
Second that. The book discusses serious software issues - things like hashing, concurrency and synchronisation, inheritance/composition as methods for code re-use, the use and handling of exceptions, all the stuff a working coder needs to be aware of - in the context of Java and its particular advantages and pitfalls. It will make students worry if they haven't considered these things before, and it will help them to consider them in future. It's a real gem.
It is entirely necessary to form, defend and - at the limit - enforce judgments about who should have which liberties. This is because not all liberties are commensurable: not all liberties can be realised simultaneously in the same universe. The liberties of the child rapist in particular absolutely contravene the liberties of the child he rapes. Conversely, the protection of that child necessarily entails the curtailment of the rapist's liberties, including the liberty to advertise, legitimise and profit by his actions.
Michel Foucault, no great friend of authority, once commented that it will always be intolerable to the necrophiliac that he is excluded from the mausoleum. I admire the technology behind Freenet, which poses all sorts of challenges all by itself; but the "idealism" driving it is another matter. Like every idealism, it is incoherent precisely because it fails to recognise the incoherencies inherent in the domain it idealises. There can be no consistent and coherent all-embracing model of liberty, either in speech or in conduct.
There are dozens of ways to link one program with another. If you can send and receive XML, you can send and receive text formatted in any other format you like - or "raw" binary data, if that's your bag. The only reason to use XML is if both sender and receiver have some nifty tools (like the MS SOAP toolkit, xmlrpclib, SOAPPy, SOAP::LITE or whatever) for sending and receiving messages that happen to use some XML vocabulary to encode things on the wire.
If you have such tools, you should use them (unless you have other, better tools - or have a need for other, better tools that don't exist yet, in which case consider creating them yourself); and if you're using them right, you shouldn't be having to worry too much about the fact that they use XML because they should be encapsulating that fact right out of your way. The Python xmlrpclib libraries certainly do this, as does the MS SOAP toolkit.
If you're having to build XML documents by hand at one end, and decode them by hand at the other, then arguably XML isn't doing anything special for you and you should ask yourself why it matters that you should use it.
If Mono ever finishes, the platform-specific CLR can run most code. Even though Java's done it for a long time, you're tied to one language: Java
Any language that can target the CLR can target the JVM. Take a look at Jython, JScheme...
The only problem is that they've made the damn IDE too simple and now every Tom, Dick, and Sally thinks they can program. Writing code and actually developing applications are vastly different.
I doubt that the ease-of-use of the IDE is a major factor here. Once you've dragged and dropped those controls onto the form, you still have to write the code to handle what happens when the user starts interacting with them; and that gets hard just as quickly as anything else, in proportion to the complexity of the application. The proliferation of code monkeys is more likely to be due to the popular romantic image of the coder as a dressed-down whizkid flipping his PHB the finger and earning mega-$$$$ in his early Twenties - it suits the universities, for instance, to go on pretending that the job market for "Business Information Technology" graduates is the same as it was five years ago.
This week my department's interviewed several candidates for a technical post. None had any discernable talent or experience as a programmer, but all had expectations of high status and salaries - based on a half-digested module on C++ they dozed through eighteen months ago...
That's how I would have implemented it to begin with, you insensitive clod!
Relatively speaking, yes.
There's a little more on Tuple Spaces, including a toy Python implementation, in my blog here:
http://codepoetics.com/poetix/index.php?cat=2.
What tuple spaces provide is a high-level, very loosely coupled "coordination language" for multiple processes: potentially very good for "grid" computing, workflow with multiple agents or many other forms of asynchronous processing.
Ratwar!
Um...you've heard of Viaweb, have you?
Quite a lot of the local network administration in individual colleges used to be done by students - it gave those willing to give up their time the opportunity to learn some practical skills. This was ten years ago, mind - I don't know how they have things set up now.
I do know that I spent an ungodly number of hours in the computer room at Lincoln college playing Civilisation, when I should have been revising for finals. D'oh!
I think Miguel's made a great play for the future of applications development on the Linux platform and I hope it pays off. Anything to wean Linux developers off C/++ (not kernel developers, obviously...). The only other project that shows anything like the same promise, IMHO, is Parrot and the great assortment of "dynamic" languages that are being ported to it.
Let a thousand flowers bloom!
Hah! I work in Northampton at the moment. It's a fairly unprepossessing little place. I'm tempted to seek out the book, just to see what there is about the town that I might be missing (it does seem to have slightly more than its fair share of peripatetic basket-cases, certainly...).
Actually if somebody writes a convert from Java->MSIL...
That would be Visual J#, then.
Ironically, this news makes me feel more like paying up for Mandrake Club membership - at the point when they needed it most, it seemed least worthwhile since who knew when they might be going out of business? God, what a shitty way to think. I'm glad they've managed to pull through in spite of people like me.
My favourite quantum joke: Heisenberg is driving home late at night when he is stopped by the police.
Police officer: Do you know how fast you were going, sir?
Heisenberg: No, but I know exactly where I am.
Or how's about John Maynard Keynes, the economist? Anthony Burgess' _Earthly Powers_ has a very funny running joke about how many of the greatest and most serious thinkers of the twentieth century were gay (or non-straight, in any one of a number of ways).
An excellent biography of Turing that explicitly deals with the significance of his sexual outlaw status is Andrew Hodges' Alan Turing: The Enigma. Makes one think of the expression "the backroom boys" in an altogether different way.
I don't think that Turing wanted to be a "sexual outlaw", by the way - obviously he'd have preferred it if the authorities had simply left him alone - but there is a subversive, anti-authoritarian streak in him which has some of its roots in the British gay culture of his times. An often overlooked aspect of the Turing Test is the stipulation that the human participants must also pretend to be something they're not - namely a member of the opposite sex...
OK, can anybody speak up for this? What's to like about it? Why's it cool? What's it got that I should drool over?
It looks pretty dated and derivative. It's also non-free. So - make me care...anybody?
The UK Labour Party is just weird about personal freedoms - it has a real "nanny state" mentality. This isn't, as some have suggested, evidence of a right-wing tendency within a supposedly left-wing party. There is a puritan left and a libertarian left, just as there are puritan and libertarian right-wingers, and New Labour's leftism is the puritan kind.
The fact is, almost everything that's ever broken a piece of software that I've written has been to do with some aspect of the environment it had to run in that I hadn't accounted for. This is in an NT4/VB6 context, so we're talking .dll hell, permissions on servers, weird conflicts between totally unrelated applications, that sort of thing. There are a lot of things that can go wrong in that environment even when the core of the application is reasonably robust.
This isn't just special pleading on my part; obviously, I have a responsibility as a coder to anticipate such problems and find ways of dealing with them - we live and learn. But it does seem to me that the simpler the operating environment, the more of a chance you have of getting basically correct code to run reliably. A lot of these older systems do have that one advantage: although the systems themselves may have been coded in awe-inspiringly hackish ways, in a mixture of C and hand-crafted assembler, and thus represent impressive feats of disciplined engineering, the environment they had to work in were relatively homogenous and uncomplicated.
There's something to be said for that.
Ironically, hair-metal band Tesla were unaffected, due to their having abandoned electrical instruments during the making of their album Five Man Acoustical Jam...
I write code, but not all the time (I don't think I could write code all the time). A lot of the rest of the time I talk to other people about the code they're writing, or the code we're going to write together. I have just a little bit of seniority, so I get to enjoy sharing what I know and being listened to respectfully by the very smart people who work with me. Sometimes there's troubleshooting work to be done, and sometimes I end up in meetings talking about business processes and requirements. It's pretty much all good, except on the rare occasions where the person chairing the meeting is one of a small number of total dorks we sometimes have to deal with.
My only real gripe is that sometimes it's hard to get things done. If you go entirely by the book, and someone doesn't want to help you, it can take forever. People who understand what you want and are interested in helping you to make it happen will often come out from behind the wall of paperwork separating you from them and help you to sort it all out. But we're still at the mercy of pen-pushing time-servers when it comes to things like getting a replacement battery for a laptop. *shrug* - that's corporate IT, I guess.
Given proper tail recursion - which essentially converts recursion to iteration, and which Scheme, SICP's implementation language of choice, supports - you don't need a gig of stack...
Second that. The book discusses serious software issues - things like hashing, concurrency and synchronisation, inheritance/composition as methods for code re-use, the use and handling of exceptions, all the stuff a working coder needs to be aware of - in the context of Java and its particular advantages and pitfalls. It will make students worry if they haven't considered these things before, and it will help them to consider them in future. It's a real gem.
GHC (Glasgow Haskell Compiler) does type inference just fine. Not that this makes programming in Haskell that much easier...
It is entirely necessary to form, defend and - at the limit - enforce judgments about who should have which liberties. This is because not all liberties are commensurable: not all liberties can be realised simultaneously in the same universe. The liberties of the child rapist in particular absolutely contravene the liberties of the child he rapes. Conversely, the protection of that child necessarily entails the curtailment of the rapist's liberties, including the liberty to advertise, legitimise and profit by his actions.
Michel Foucault, no great friend of authority, once commented that it will always be intolerable to the necrophiliac that he is excluded from the mausoleum. I admire the technology behind Freenet, which poses all sorts of challenges all by itself; but the "idealism" driving it is another matter. Like every idealism, it is incoherent precisely because it fails to recognise the incoherencies inherent in the domain it idealises. There can be no consistent and coherent all-embracing model of liberty, either in speech or in conduct.
There are dozens of ways to link one program with another. If you can send and receive XML, you can send and receive text formatted in any other format you like - or "raw" binary data, if that's your bag. The only reason to use XML is if both sender and receiver have some nifty tools (like the MS SOAP toolkit, xmlrpclib, SOAPPy, SOAP::LITE or whatever) for sending and receiving messages that happen to use some XML vocabulary to encode things on the wire.
If you have such tools, you should use them (unless you have other, better tools - or have a need for other, better tools that don't exist yet, in which case consider creating them yourself); and if you're using them right, you shouldn't be having to worry too much about the fact that they use XML because they should be encapsulating that fact right out of your way. The Python xmlrpclib libraries certainly do this, as does the MS SOAP toolkit.
If you're having to build XML documents by hand at one end, and decode them by hand at the other, then arguably XML isn't doing anything special for you and you should ask yourself why it matters that you should use it.
It's also "too hard" in a variety of circumstances where the reason it's too hard is that it's the wrong thing to use.
Good programmers can cope with XML just fine when it's just what they need to get the job done, and are smart enough to avoid it when it isn't.
Any language that can target the CLR can target the JVM. Take a look at Jython, JScheme...
I doubt that the ease-of-use of the IDE is a major factor here. Once you've dragged and dropped those controls onto the form, you still have to write the code to handle what happens when the user starts interacting with them; and that gets hard just as quickly as anything else, in proportion to the complexity of the application. The proliferation of code monkeys is more likely to be due to the popular romantic image of the coder as a dressed-down whizkid flipping his PHB the finger and earning mega-$$$$ in his early Twenties - it suits the universities, for instance, to go on pretending that the job market for "Business Information Technology" graduates is the same as it was five years ago.
This week my department's interviewed several candidates for a technical post. None had any discernable talent or experience as a programmer, but all had expectations of high status and salaries - based on a half-digested module on C++ they dozed through eighteen months ago...