You make some fair counterpoints in regard to programming and obviously as a professional software engineer you have more experience than me, however I must disagree about algorithm efficiency. There is only one ultimately most efficient piece of code for any given operation. We usually don't start off with much efficiency at all, but over time better and better techniques are discovered. If you are to patent an algorithm, it is true that someone else can theoretically come up with an entirely different algorithm to accomplish the same task; however one of them will accomplish it more efficiently than the other, even if by a tiny margin. Many programmers feel that efficiency is not very important anymore because the power of hardware is advancing as fast or faster than the demands of software; i disagree, but if that's your school of thought we're just not going to see eye to eye here and it's outside the scope of our argument.
There isn't always
one most efficient algorithm. I realize that they teach this in undergraduate comp sci classes, but it is an idealization. For simple tasks, yes, for subtasks, maybe. But as software becomes more complex and less mathematical, you are not guaranteed that there exists exactly one best solution. Additionally, as software grows in complexity, you have secondary considerations besides what will run fastest - you may have to consider user requirements, network connections, concurrent processing, ease of maintainence, platform independence, and a slew of other issues. Efficiency is not a black and white issue. What works best in situation A with software B is not necessarily best for situation X with software Y.
In regard to the Gimp vs. Photoshop as an example of cheap/free software vs.
commercial software, yes I've expressed some conflicting points of view there. So have you; according to your point of view, if GIMP is free and as fully featured and capable as Photoshop, Photoshop should be practically dead already. One thing I can agree with you on is that GIMP is very powerful and very successful. It lacks one critical feature (full Tablet PC support) that Photoshop has that is absolutely critical to me, though, so I haven't been able to migrate to it. However is has gotten that way because of a development process that largely models what I am advocating, as opposed to the proprietary process that Photoshop has used. Open Office might be a better example, but I haven't used it enough to draw a good comparison between it and MS Office.
No, because Photoshop is still
perceived to be better, as you yourself demonstrated. Personally, although I've used and appreciated both, I will never switch from Photoshop. I literally grew up with the program, using it has become nearly instinctive. Getting used to a new interface would be difficult, and I imagine anyone else who has used any graphics editing software extensively would have the same difficulty switching to another.
You might try StarOffice as a potential replacement for MS Office. I use it on my Mac, and I find it does everything I need it to do.
It has also taken somewhere near 15 years to come close to catching up to Adobe because of the demand for constant reinvention.
If every piece of software is simply building from the original idea for that type of software, where would innovation come from? Software engineers are notorious scavengers (we politely call it code reuse), if there is no reason to reinvent the wheel, we won't do it.
The first word processor was Word Star. If anyone here was unfortunate enough to use it, it was only slightly more user-friendly than VI. Written shortly after were WordPerfect, Electric Pencil, Apple Write, Scripsit, and Word. All of them approached the problem in different ways. Of those, only two are still in existence and, in the case of at least one of them, because it was a superior product with superior performance. If all of them had been knock-offs of Word Star, then where would word processing be today? While I can't say I have any great love for Word, I think WordPerfect is a well designed piece of software with little bloat, great features, and few bugs. It started out that way, in fact (I'm betraying my age by revealing I used the original WordPerfect
). It was everything Word Star was not - which it couldn't have been if it had simply built on Word Star's base.
In a patent scheme there would have been two possible outcomes: pay Adobe for the right to reproduce their algorithm or invent a new algorithm. If a developer chose the latter, he could still look at Adobe's original patent and get a concept of how it worked, and maybe even come up with a more efficient way of doing it. That in turn would pressure Adobe to come up with an even better way to do it or develop a new idea that would keep their software on the cutting edge. In practice that still eventually happened, but I believe the pace was slowed by the misapplication of copyright and the need for complete reinvention.
A "better" way to do it is almost certainly going to be transparent to the user. Do you really think the average user will notice or care that the layers are handled more efficiently? In most software, speed ups are a matter of milliseconds if you're lucky, almost always not enough for a human to notice. All average user Joe will notice is that Program X has the same feature and is cheaper. He will neither know nor care that Program Y did it better.
From your perspective, the aesthetic and creative portions of hardware design are, indeed, creative content and entitled to copyright protection. An Intel x86 processor and an AMD x86 processor are drastically different internally and look different even to the naked eye but accomplish largely the same tasks, yet they are covered by patents, not copyrights. If the x86 instruction set (which is by the way simply a collection of algorithms somewhat like computer software, which I'm sure you understand but I'm stating it for anyone else who might be reading the thread) and the processors that were a product of it were covered by copyright, AMD simply could not have ever entered the market. Intel's copyrights would have extended for another 65 years, and people looking for a cheaper alternative to Intel processors in the early 90s would have been forced to buy a computer that ran on an entirely different platform (like a Mac, except they were even more expensive, and the other platforms were even farther removed in functionality and cost). I hope you can agree that that would be a colossal failure of our legal and economic system.
Unless I miss my guess, it's not the appearance of the processors that is patented. It is the internals, the functional parts. Assuming that the patent hadn't expired yet, I could make as many duplicates of the external fluffy stuff of the processor as I wanted, so long as I wasn't duplicating the processor itself. It's the functional parts that are important, they more or less have to be laid out as designed or they don't work (or don't work properly, I still remember the processor I tried to build that never quite worked right ':| ) When I write software, there are often literally hundreds of ways I could put it together, all with pros and cons, or sometimes with no functional differences at all. You're thinking of software as a collection of seamless algorithms that work together - but it is far more complex than that.
Right now I am working on a massive web application for my internal users. I had several equally efficient methods of implementation, but I've settled on one of them. Not because it was better, as I said, they were equally efficient. Because it is more elegant. "Elegance" is not a scientific concept, it is an artistic concept. (If I patented that, what's to stop someone from looking at my design, switching to one of those equivalent designs, and declaring it different enough not to be subject to the patent? Who will be checking these things, where will the lines be drawn, and how much will it end up costing the taxpayers?)
Additionally, I had to weigh the efficiency of the program vs. the validity of the data. Querying the database is an expensive operation, I do want to keep it to a minimum. However, the user can be changing data in the database, so it is also important to keep the data all users see up to date as much as possible. There is no right answer to this question - only a compromise that will depend on me and my users.
In regard to the cost of software, supposing for a minute I'm building an educational computer for a low income family. It has to be able to handle modern software if it's going to be a valuable training tool, but it doesn't need to be by any means top of the line. I can build a 1ghz pc with 32mb onboard video, onboard sound, 256mb RAM, 20gb HDD, and a CD/DVD-ROM out of used parts for roughly 200 U.S. dollars retail, and I know that because until recently I did it professionally. That meets and exceeds the minimum requirements to run Windows XP and all of the following software as long as you don't bog it down too much. Now, for the cost of software licenses: $115-Windows XP Home Edition, OEM. $135 - Office 2007 Home Basic, OEM. $149-Adobe Photoshop Elements 5.0+Adobe Premiere Elements 5.0. $120-Dialup internet service at $10 a month for one year. You can see where I'm going here. Now you can argue effectively that I can put Linux and a bunch of open source software for nearly free and maybe even find some free or cheap internet service, but I don't believe you can convince anyone that it would be an acceptable solution (and believe me, I tried, both with my customers and my boss). And also remember that the only reason I can do that is because the developers of that software agree with the principles of open distribution of knowledge. So that's where I was coming from with that statement; and even then, 200 dollars is more than many people in the world, particularly the ones that make most of the goods you and I take for granted, make in a year, believe it or not.
In the parts of the world where $200 is a lot of money, I suspect that they have far more pressing concerns than whether or not they have a computer. Such as a dawn to dusk (or more) job, lack of food, lack of sanitary water, lack of adequate medical care... Honestly, I'd be more concerned about getting those people a higher standard of living before worrying if they have enough material possessions. Sure, a computer is nice, but it really wasn't that long ago that no one had one in their homes, and everyone did just fine without them. You can also pick of an older computer with "used," free, or cheap software to go with it for under $200 (I sold my old laptop for $20, and I gave away my license to Windows 95, Photoshop 5, and Wordperfect 4 with it - all of which would be just as good to someone using it for educational purposes as a brand new $200 computer).
As to your example, if they don't wish to take free or cheap software that is just as good, that's, forgive me, their own problem. And it would hardly be alleviated by the introduction of yet more cheap and free alternatives if they're stuck on the "name brand." They don't need Photoshop Elements or Microsoft Word to get an education, make a living, or go about their lives.
While you contradicted the statement I made here, you didn't really address my supporting statements, specifically the example I provided in painting vs. scripting, and the understanding of that is the pivotal difference between copyright and patent systems. Remember earlier I also suggested that the purely creative content in software should be covered by copyright (and/or trademark). So for instance I don't disagree with you at all about UI design (which I said earlier), in my mind it definitely falls under creative content, at least until there is some kind of solid science to be applied to it
You're right, I didn't, because Razdel did it quite nicely. You're comparing a javascript function to a digital painting, but a javascript function is closer in complexity to a 32x32 pixel sprite.
Yes, I could reproduce a 32x32 pixel sprite just by looking at it and reproducing it one pixel at a time in a blank canvas.
However, if I showed you a complex web application that you have never seen before, you could not reproduce it exactly just by looking at it. There are so many different ways it could have been designed that it would be a stroke of luck to hit on exactly the right one (and you should go play lotto that day, because that will be your day).
If we can agree on a few basic assumptions:
1. That the patent system is based on the idea that the social value of propagation of information in regard to invention greatly exceeds the social value of ensuring profits of the inventors indefinitely, and to that end has been very successful in striking a balance.
2. That the copyright system is based on the idea that the protection of unique creative works from reproduction and exploitation against the author's wishes far exceeds any social value of free distribution, and to that end has been very successful in promoting the creation of artwork.
3. That part of software development more resembles unique creative content, and part of software development more resembles invention.
I will try to provide some citations on that if you don't know/don't agree on the first two points.
The basis of our debate then should be how much of software design is creative and how much is inventive, on which point you have greater authority than I do, and whether because there is creative content in software entire pieces of software should be covered by copyright, which I believe is more of a question of the design and intent of the legalities involved, which I believe I am more educated on.
As I said before, there are often literally dozens, perhaps hundreds, of ways the same subprocess in one piece of software can be written. If that isn't creative choice, I don't know what is. There isn't just the physical appearance of software that is creative - there is expression present in the design, as well. Also, the design is often driven by the UI - if my user requirement say they want a form that contains this and that, and I decide that, among other things, I want to display the data for selecting the state in a combobox, then I need to represent that data internally, perhaps as an Oracle object, perhaps as a Java bean, maybe as hardcoded values in an XML file, just to name three. Either of those three would be valid choices, none is going to be a "better" choice, and each would result (if propogated throughout the design for all choices, which it should be for consistancy's sake) in a radically different design than choosing one of the others.
Object-oriented design is similarly creative. No two people are going to pick exactly the same objects, object names, object interfaces, packages, etc. for the design of any software of significant size. While that might seem trivial, it is not - how your code is split up and how it is accessed plays a large role in what that code actually is and does.
Even the scripts in RMXP - if you were to ask someone who had never touched RMXP before to design a system in Ruby that met all of the same user requirements, it would not be the same code, in fact, it would likely not even be recognizable as the same intent without some digging.
Software, no matter what they teach in school, is not a science. There is almost never no most efficient way to do real world things. You almost never get to use those snazzy algorithms and Big O Notation. I have yet to have actually used Dijkstra's algorithm (to my sorrow).