Apparently some people believe that that's enough of an advantage to lose 30 to 50% productivity. I for one would rather rely on unit testing (which you have to do in either case).
I assume that you have actual statistics to back up
your assertion that static typing results in a 30-50% productivity hit, and
your implication that there is not an equivalent 30-50% productivity hit as the result of the extra unit-testing required to catch type errors, repair them, and retest.
When it comes to the artists: Yes, they should be respected. But again, I don't believe it's morally wrong downloading music I didn't pay for, so I don't feel disrespectful towards those artists.
You are not respecting their choices about music distribution. And yes, I've read your previous comment. But the bottom line is that the only thing you can know about how an artist regards file-sharing is the terms they choose (choose!) to distribute under. Are some artists getting screwed? Possibly. But it's their battle, not yours - you can't know who's getting screwed, and who's happy with the status quo. There are plenty of artists that either (a) choose not to join in the RIAA clusterf**k and become independent, or (b) negotiate with their studio to allow online distribution. Your claim to be "fighting for the small artists" is specious at best.
Which is precisely why the term "free" is a poor one. It is semantically confusing, and even contextual cues can be insufficient to determine which meaning is intended.
No, you don't get it (don't worry though, not many do). This is not about "payment" in any form, people don't use the GPL because they want to "earn" something, if that's the reason then they're confused. This is about Freedom.
No, I don't think you get it. It's not so much that coders who release under the GPL expect to earn anything specifically for themselves, but that they require anyone who wishes to make use of their work (where use here means deriving a new piece of software) to provide some value in return (by releasing the derived code). The end result is about freedom, but the mechanism is identical to the situation with music. That's the whole reason that the GPL is referred to as "copyleft" - it uses the mechanism of copyright in a way that most people view as backwards. But the fact remains that the GPL uses copyright law. It could not exist without that copyright law. The same copyright law that music producers rely on. Unless you respect copyright law, the GPL is meaningless.
Ethically speaking, this is also about freedom in another sense: the freedom of a creator of some form of "content" to choose how their work will be used and distributed. GPL coders choose to release their code under the GPL. Others choose to use a BSD-style license. For whatever reason, most creators of music choose a very restrictive set of distribution terms. Not all of them do though. And frankly, I consider it far more ethical to respect the choices of "content creators" (else how can I ask anyone to respect my choice to use, e.g. the GPL) than to violate the terms which those creators freely chose. Better to persuade people that they're making the wrong choice about how to distribute their work, than to deliberately flout their choice (thereby encouraging them to flout my choices).
Usually, if there's a demand, a supply manifests itself. it's automagic, really.
Yes, but that supply usually manifests itself because the people doing the supplying see some kind of benefit in meeting the demand. Usually because they get financially compensated. Sometimes for other reasons. But always because they get some beneift from it. Whether or not there will be an "automagic" supply of free information depends a lot on what the incentives are for suppliers of that information.
Your understanding of the GPL is indeed limited. In fact, you have it confused with the original BSD license. The GPL essentially specifies that if you wish to redistribute an original or modified binary version of GPLed code, then you must also make the corresponding source code available (under a GPL license) to any recipient of the binary who requests it. See here for more info.
The situation with the GPL is precisely analogous to the situation with downloaded music. (Most) music copyright owners expect a payment of some kind in exchange for their providing you with music. Creators of GPL code also expect payment. The only difference is that the music owners expect payment in the form of money, while GPL code owners expect payment in the form of more GPL code. In both cases, you legally have no right to distribute or use the music or code unless you make the appropriate payment - it's just that the terms of payment are different. In both cases, you have the choice not to accept the terms imposed by the owner of the work, by choosing not to use their work (and finding e.g. an independent artist who allows free downloads, or software that is distributed under a BSD or MIT license).
CSP primitives are inherently different from threads because they strictly ban shared data. All communications between CSP processes is via message passing (typically with blocking). There is no need for locks, mutexes, or semaphores, nor all of the conceptual difficulties that those engender. CSP primitives combine very naturally into larger systems through a parallel composition operator which establishes an inter-process interface. Composite processes can be further composed with other processes, making it easy to build hierarchical process networks. Becuase there's no shared data, you don't need to mentally keep track of what every thread is doing as you build your system: CSP-style concurrency gives you a much cleaner, easier to use, more scalable concurrency model than threads.
The key advantage that CSP has is that it is a real, live, honest-to-god mathematical theory of concurrency, which means that the primitives and composite operators have extremely well-defined semantics, and have been analyzed to ensure that they compose correctly. Plus, you can express a design intended for a language that supports CSP-style concurrency directly in CSP notation, and then analyze it using various tools (or even pencil and paper) to ensure that it is deadlock-free, and maintains whatever properties you want maintained.
If you are a Java programmer, you may want to check out the JCSP library of CSP primitives for Java. IMHO much easier to use than Java's native concurrency model.
There's a simple answer to your problem: stop using the ancient and bug-instigating threads model of concurrency, and use a better model. It worked for Bell Labs.
I've personally created complex programs with several thousand threads, without having to worry about any of the defensive techniques you preach, simply by using a better concurrency model. Not only do they work, I can prove that there are no thread-related bugs (which testing - no matter how much you do - simply isn't guaranteed to catch) because the CSP concurrency model can be mathematically analyzed and mechanically model-checked.
See also occam, the original CSP-based language, and JCSP, a CSP library for Java. The WoTUG website has lots of great references on CSP, occam, and the communicating process model in general.
Perhaps if we could get out of the mindset that the ancient "threads" paradigm is the only way to do concurrent programming we'd be better off. The folks at Bell Labs have been doing concurrent programming for decades using the CSP concurrency model. It's worked fine for them. The same concurrency model underlies the occam language, which has been used to produce some extremely complex concurrent applications. See also stackless python, JCSP for Java, CCSP for C, and C++CSP for C++.
Concurrency isn't the problem - the threads model is. The CSP style of concurrency reduces the number of difficult to reproduce bugs, and make those bugs that remain aenable to mathematical analysis to determine their cause and solution.
If you like the concurrency model that stackless uses, you should take a look at CSP, the concurrency theory that the stackless model is based on. It's the same theory that formed the basis for the occam programming language (probably the best concurrent language ever), as well as providing ideas for stackless, alef, limbo, concurrent-ml, and a host of other languages (as well as the JCSP and CCSP concurrency libraries for Java and C). The link above is to Hoare's original book on the subject, which is a little dated, but free.
A good grasp of CSP theory makes concurrent programming much easier, and allows concurrent systems to be engineered mathematically, instead of just hacked together.
No, multithreading is where concurrency oriented programming, as implemented in languages such as Erlang and occam, begins to really shine.
Lining up thread boundaries with object boundaries can help, but only if you implement the objects as "monitors" and avoid shared data. But why bother messing with monitors when you can go a step further, and use the concurrency model that Hoare (the inventor of monitors) came up with to address the shortcomings of monitors: CSP. Which just happens to be the concurrency model that underlies occam:) The CSP approach to concurrency makes the avoidance of race conditions trivial, and the avoidance of deadlock a matter of design instead of luck. Amusingly wnough, the CSP model of message-passing concurrency much more closely matches the original concept of objects than the method-based object model implemented by most modern OO systems.
I have personally created programs that implement several thousand "threads" using the CSP model, and are completely (and provably) free of deadlock and race conditions.
Yes, but is saving Hubble in the long-term best interests of the district she represents, or simply short-term pork which will help her get re-elected? Too many "representatives" seem to focus on the latter rather than the former.
Yes, but the question remains: would there have been further attacks on American soil if there hadn't been any "anti-terrorism measures" put in place? Or was 9/11 juts an anomaly?
Of course, this has nothing to do with the fact that NASA Goddard Space Flight Center is located in Mikulski's district. I'm sure she'd support a Hubble repair mission even if that wasn't the case...
The thing is, just how complex is the shuttle flight control system, really? Is it really comparable in complexity to the kind of apps TFA was talking about? I'm skeptical. Besides, if you read this, you'll find that "exhaustive" testing of the shuttle software to achieve the levels of reliability NASA desires simply isn't feasible, so they end up using a statistical process to track and predict faults. Not quite the same process that TFA was advocating, but similar in principle.
Which would be nice if that $250 got you access to the digital library. But it doesn't (unless I'm missing something somewhere - if so, please tell me). To get full access to the IEEE digital library you need to shell out an additional $35/month. Plus you face a 25 paper/month download cap if you do decide to subscribe.
Agreed. I'm an IEEE member. I also a member of 1 society, which gets me online access to precisely two publications - neither of which are really technical journals; they're more like news magazines. I'd like to see more, but I'm not about to pay the additional $35/month required to get full access to the digital library (especially with their cap on the number of papers per month you can download). The ACM pricing scheme is a lot more reasonable, so I have signed up for their digital library. I'm willing to pay for access to an archive as extensive as the IEEE's. Just not as much as they seem to want to charge.
Comments shouldn't be describing what code is doing - as you say, that should be obvious from the code - they should be describing why it's being done. Comments of that nature are far less likely yo go out of date in th face of implementation changes.
And actually, I'd argue that most programming languages are "inherently readable" if you write clean code. In fact, I can think of several languages that are more readable in that regard than Java or C#.
I assume that you have actual statistics to back up
- your assertion that static typing results in a 30-50% productivity hit, and
- your implication that there is not an equivalent 30-50% productivity hit as the result of the extra unit-testing required to catch type errors, repair them, and retest.
If you do, I'd like to see them.Also Stackless Python.
You are not respecting their choices about music distribution. And yes, I've read your previous comment. But the bottom line is that the only thing you can know about how an artist regards file-sharing is the terms they choose (choose!) to distribute under. Are some artists getting screwed? Possibly. But it's their battle, not yours - you can't know who's getting screwed, and who's happy with the status quo. There are plenty of artists that either (a) choose not to join in the RIAA clusterf**k and become independent, or (b) negotiate with their studio to allow online distribution. Your claim to be "fighting for the small artists" is specious at best.
Which is precisely why the term "free" is a poor one. It is semantically confusing, and even contextual cues can be insufficient to determine which meaning is intended.
No, I don't think you get it. It's not so much that coders who release under the GPL expect to earn anything specifically for themselves, but that they require anyone who wishes to make use of their work (where use here means deriving a new piece of software) to provide some value in return (by releasing the derived code). The end result is about freedom, but the mechanism is identical to the situation with music. That's the whole reason that the GPL is referred to as "copyleft" - it uses the mechanism of copyright in a way that most people view as backwards. But the fact remains that the GPL uses copyright law. It could not exist without that copyright law. The same copyright law that music producers rely on. Unless you respect copyright law, the GPL is meaningless.
Ethically speaking, this is also about freedom in another sense: the freedom of a creator of some form of "content" to choose how their work will be used and distributed. GPL coders choose to release their code under the GPL. Others choose to use a BSD-style license. For whatever reason, most creators of music choose a very restrictive set of distribution terms. Not all of them do though. And frankly, I consider it far more ethical to respect the choices of "content creators" (else how can I ask anyone to respect my choice to use, e.g. the GPL) than to violate the terms which those creators freely chose. Better to persuade people that they're making the wrong choice about how to distribute their work, than to deliberately flout their choice (thereby encouraging them to flout my choices).
And how does that apply to the "demand" for free information that we were discussing?
Yes, but that supply usually manifests itself because the people doing the supplying see some kind of benefit in meeting the demand. Usually because they get financially compensated. Sometimes for other reasons. But always because they get some beneift from it. Whether or not there will be an "automagic" supply of free information depends a lot on what the incentives are for suppliers of that information.
The situation with the GPL is precisely analogous to the situation with downloaded music. (Most) music copyright owners expect a payment of some kind in exchange for their providing you with music. Creators of GPL code also expect payment. The only difference is that the music owners expect payment in the form of money, while GPL code owners expect payment in the form of more GPL code. In both cases, you legally have no right to distribute or use the music or code unless you make the appropriate payment - it's just that the terms of payment are different. In both cases, you have the choice not to accept the terms imposed by the owner of the work, by choosing not to use their work (and finding e.g. an independent artist who allows free downloads, or software that is distributed under a BSD or MIT license).
The key advantage that CSP has is that it is a real, live, honest-to-god mathematical theory of concurrency, which means that the primitives and composite operators have extremely well-defined semantics, and have been analyzed to ensure that they compose correctly. Plus, you can express a design intended for a language that supports CSP-style concurrency directly in CSP notation, and then analyze it using various tools (or even pencil and paper) to ensure that it is deadlock-free, and maintains whatever properties you want maintained.
If you are a Java programmer, you may want to check out the JCSP library of CSP primitives for Java. IMHO much easier to use than Java's native concurrency model.
Erlang is much nicer to use than Java's built-in thread model. If you want decent concurrency for Java you should get the JCSP library.
I've personally created complex programs with several thousand threads, without having to worry about any of the defensive techniques you preach, simply by using a better concurrency model. Not only do they work, I can prove that there are no thread-related bugs (which testing - no matter how much you do - simply isn't guaranteed to catch) because the CSP concurrency model can be mathematically analyzed and mechanically model-checked.
See also occam, the original CSP-based language, and JCSP, a CSP library for Java. The WoTUG website has lots of great references on CSP, occam, and the communicating process model in general.
Concurrency isn't the problem - the threads model is. The CSP style of concurrency reduces the number of difficult to reproduce bugs, and make those bugs that remain aenable to mathematical analysis to determine their cause and solution.
A good grasp of CSP theory makes concurrent programming much easier, and allows concurrent systems to be engineered mathematically, instead of just hacked together.
Lining up thread boundaries with object boundaries can help, but only if you implement the objects as "monitors" and avoid shared data. But why bother messing with monitors when you can go a step further, and use the concurrency model that Hoare (the inventor of monitors) came up with to address the shortcomings of monitors: CSP. Which just happens to be the concurrency model that underlies occam :) The CSP approach to concurrency makes the avoidance of race conditions trivial, and the avoidance of deadlock a matter of design instead of luck. Amusingly wnough, the CSP model of message-passing concurrency much more closely matches the original concept of objects than the method-based object model implemented by most modern OO systems.
I have personally created programs that implement several thousand "threads" using the CSP model, and are completely (and provably) free of deadlock and race conditions.
Why on earth are you running a windowing system on a server at all then?
And it's a lot more fun doing the crossword on an easily portable piece of paper...
Yes, but is saving Hubble in the long-term best interests of the district she represents, or simply short-term pork which will help her get re-elected? Too many "representatives" seem to focus on the latter rather than the former.
Yes, but the question remains: would there have been further attacks on American soil if there hadn't been any "anti-terrorism measures" put in place? Or was 9/11 juts an anomaly?
Of course, this has nothing to do with the fact that NASA Goddard Space Flight Center is located in Mikulski's district. I'm sure she'd support a Hubble repair mission even if that wasn't the case...
Eh. I know people who have designed spacecraft using Excel...
The thing is, just how complex is the shuttle flight control system, really? Is it really comparable in complexity to the kind of apps TFA was talking about? I'm skeptical. Besides, if you read this, you'll find that "exhaustive" testing of the shuttle software to achieve the levels of reliability NASA desires simply isn't feasible, so they end up using a statistical process to track and predict faults. Not quite the same process that TFA was advocating, but similar in principle.
Which would be nice if that $250 got you access to the digital library. But it doesn't (unless I'm missing something somewhere - if so, please tell me). To get full access to the IEEE digital library you need to shell out an additional $35/month. Plus you face a 25 paper/month download cap if you do decide to subscribe.
Agreed. I'm an IEEE member. I also a member of 1 society, which gets me online access to precisely two publications - neither of which are really technical journals; they're more like news magazines. I'd like to see more, but I'm not about to pay the additional $35/month required to get full access to the digital library (especially with their cap on the number of papers per month you can download). The ACM pricing scheme is a lot more reasonable, so I have signed up for their digital library. I'm willing to pay for access to an archive as extensive as the IEEE's. Just not as much as they seem to want to charge.
And actually, I'd argue that most programming languages are "inherently readable" if you write clean code. In fact, I can think of several languages that are more readable in that regard than Java or C#.