http://www.getrichslowly.org/blog/2010/09/01/yes-you-will-ge...
1,787 karma · joined April 7, 2008
I'm also a co-author of the Gosu programming language:
http://gosu-lang.org/
My e-mail is akeefer at gmail
http://www.getrichslowly.org/blog/2010/09/01/yes-you-will-ge...
The argument, then, is that patents on software are A) unnecessary to encourage innovation and B) actively discourage innovation. The argument for A) is that plenty of software development happened prior to it being patentable, few software developers or startups consider patentability when creating new products, software itself is well covered by trade secret and copyright protection, and the patents themselves contribute basically nothing to the world's store of knowledge about software. The argument for B) is that most software patent suits are complete BS and are launched either by trolls or in an anti-competitive manner rather than as a result of any sort of actual "theft," any piece of software could potentially infringe on hundreds of patents, patents themselves tend to cover "inventions" that anyone else solving a similar problem would come up with, and that patents themselves thus tend to either discourage people from even trying new ventures, out of fear of being sued, or serve to drain resources from companies that actually produce products, tying up resources that could actually be used for innovation. It's also worth noting that the 17/20 year term of a software patent is completely out of whack with the pace of innovation in software.
So you can try to split hairs around saying that some software patents (say those around non-obvious compression schemes) are legitimate, but I'd guess that something close to 99.95% of software patents are trivial/silly/should never have been granted, so in this case I'd argue that's totally worth throwing out that 0.05% of "good" patents in order to ensure that we get rid of the other 99.95% of them. I'd rather see that happen than try to defend that 0.05% and end up keeping even 5% of the current amount of BS patents.
The problem for AI is not just encoding the DNA, as it were, it's in building all those other pieces around it. Estimating the complexity of building a software brain based on the amount of information in DNA is like estimating the complexity of building a web application using 1950's hardware. "It's only 10,000 lines of code! How hard can that be? All we have to do is write the code, plus the frameworks, programming language, and operating system, plus do all the hardware design."
So the point is that perhaps if you had a system that simulated all of the laws of physics exactly correctly such that proteins folded and interacted exactly right, only then could you get away with an amount of input equivalent to the amount of information encoded in the part of our DNA related to the brain.
Actually encoding those rules is probably the harder part of the problem, and could easily take several orders of magnitude more work. (10x? 1,000,000x? Who even knows).
My two questions about it. 1) What's the plateau state and the initial fitness level/muscle density? Many weight-lifters have experienced that after a certain point, they start to plateau and don't gain further muscle density. Is the plateau point roughly the same for the two styles? 2) How does that correlate to strength? It's been hypothesized (but I'm not sure if it's been proven) that strength is a combination of muscle density and motor coordination (i.e. neural connections to allow muscle fibers to fire simultaneously), and that lifting heavy actually leads to additional nerve ends that help coordinate those things (or something like that, at least). So I'd be interested to know how the different lifting programs affected both maximum lifts and the number of reps that can be performed at, say, 70% of that max.
Maybe, just maybe, Google thinks that massive government regulation of the still-nascent wireless internet market will do more harm than good at this point, and that we should consider the question later once we have actual empirical data about what works and what doesn't? Is that really such an illogical position to adopt?
For some reason, though, this is a subject on which many people feel qualified to make pronouncements about the wisdom of what other people are doing. I have, for example, had a candidate come in for an interview, look at the office layout, lecture me for 15 minutes about how we must be idiots because we're killing our productivity with our open layout, and then leave because he'd refuse to work in a place like that. At least it saved me the other 45 minutes I would have had to spend interviewing the guy.
We allow working remotely one or two days a week, but our experiments with full telecommuting have not gone so well (though we'll probably keep trying). The level of success probably depends pretty heavily on the type of product you're trying to build and the resulting level of communication that's required. For enterprise software (or perhaps I should say "domain-specific apps" or something), you really need a customer proxy/subject matter expert on hand that you're talking to on a fairly constant basis, because the developers themselves aren't really experts in the domain; as a result, you want your development setup optimized for high-bandwidth communication. When 10 people are onsite but 1 team member is offsite, that communication just doesn't happen, and that 1 person ends up out of the loop and much less productive (at least that's what's happened with us). For other types of software, that's less of an issue.
I think it's also much less of an issue if the entire company telecommutes, or if at least a large percentage do: in that case, communication channels are optimized for that. If 5% of the staff telecommutes, the communication channels are optimized for face-to-face communication, and the people telecommuting are left out.
And on top of that, there are just different ways to go about developing: they're not necessarily better or worse, but they make different demands on physical presence. A lot of agile/XP practices work best when people are co-located in small cross-functional teams that are in constant dialog, pair-programming, etc. That doesn't mean it's the only way to develop, but it can be an effective way to develop (more so for certain domains than for others), and it doesn't mesh very well with full-time telecommuting. Other development strategies and methodologies make different trade-offs and will be more accommodating of telecommuting.
I can't really get into any specifics of the litigation because it's still ongoing.
I've heard of other similar incidents as well. They're far more likely if you're going into an existing market against well-funded (and shameless) incumbents than it is if you're in a nice market.
You're correct that the rational response is to not worry about it, simply because there's nothing you can do about it as a software startup. If someone wants to sue you, they will, no matter how far you go out of your way to avoid violating patents. So you just kind of hope you don't get unlucky and get sued before the company becomes big enough to file their own patents for defensive purposes.
Just because something happens infrequently doesn't mean it's not a real problem.
So there are several parts to this equation. 1) Creating any bit of software involves thousands of "inventions," any one of which could be patentable. 2) Patents are granted for things which fail the obviousness test, where the chance of someone else independently "inventing" the same thing is essentially 100%. 3) The damages for violating even one patent tend to be astronomical and totally out of line with the contribution of that "invention" to the software in question. Out of 2 million lines of code, if one total BS patent covers 20 lines of that code, why are the damages likely to be basically equivalent to most of the revenue for that product? 4) The cost of defending against a patent lawsuit is enormous.
In other words: if you're a small software business, then there's pretty much a 100% chance someone else can sue you for patent infringement if they want to, losing the case will kill your company, and trying to defend yourself will severely drain your resources and could kill your company anyway.
There's no part of that that helps or encourages innovation.
When I brought it up during this discussion, I got nowhere, and people basically looked at me like I was an idiot. It was pretty disappointing to see that a room full of language guys just didn't care about anything that would improve Java itself; the discussion pretty much entirely focused around small-scale stuff that would make it easier to efficiently implement dynamic languages on the JVM.
I think there's a certain enjoyment threshold below which something becomes "unpleasant," and moving from one state below that threshold to another state also below that threshold isn't as valuable as a similar state shift would be if the initial state happened to be above that threshold.
I'm not saying a website should be able to sue you or file criminal complaints if you violate a TOS; I'm just saying that they do have the right to expect you to abide by them if you choose to use the site. They should be able to behave exactly as a restaurant does: kick you out if you violate them, and file criminal complaints only if you actually do something criminal (cause damage, steal stuff, abuse staff, etc.).
Whether or not a TOS is criminally enforceable is a long ways away from your argument, which I interpreted as essentially saying that breaking/ignoring a TOS isn't any sort of ethical violation because it's not a countersigned negotiated contract.
So where do those terms come from? Rationally, one might expect the website to spell out what they expect from you and under what conditions their services are provided. If you don't like those terms, don't use the service.
It seems like you're arguing that you should get to determine under what terms the services are offered, or perhaps alternatively that services offered should never have any terms attached whatsoever; both of those positions seem pretty indefensible to me.
Just because you don't get a chance to negotiate terms doesn't make them invalid. It's a take-it-or-leave it offer, and you always have the right to leave it. When a restaurant gives you a bill, do you pay less than the amount just because you didn't get to negotiate the price? Do you walk into a restaurant shirtless that explicitly asks you not to do that? Of course not: your ordering the item indicated your willingness to pay the associated charge, and likewise if you don't want to abide by their rules around appropriate dress, you just don't go in.
You don't get to make up your own rules and then apply them to someone else's services.
It's a different question if the TOS are deliberately obscured such that you don't actually know what you're agreeing to, but the argument that just because you can't negotiate the TOS they're somehow invalid and you're thus justified in still using the service in violation of them is absurd.
So while the actual content of philosophy classes is pretty much irrelevant to anything in real life, the process of philosophical thinking and writing (at least analytic philosophy) turns out to be very good training for CS and probably a fair number of other things.
I get that CPS doesn't always do the best job, and plenty of the people that work there are on a power trip and got into social work because they like telling other people what to do. The world would certainly be a better place if they were able to do their job better and if some of their officers were more courteous.
But as you probably know, working for CPS is an incredibly difficult job. It's very demanding on your time, it's immensely stressful emotionally, everyone hates you, and it can put you in physical danger (you often have to be accompanied by a police officer). Unsurprisingly, in many places they have trouble finding enough qualified applications to fill the necessary positions. I know that I sure as hell wouldn't want to do that job.
I guess I just get tired of the vitriol directed their direction as if the world would be a better place if CPS wasn't around, or as if they intentionally make life hard on people just because, or as if they're somehow more lenient on poor people. Your additional comment there is, in my experience, pretty wildly off-base: my wife is a social worker who works with plenty of poor clients who have had children taken away and never managed to get them back because they're unable to support them financially or have ongoing drug or alcohol problems. The kids are put in group or foster homes basically permanently, not sent back to their parents. And it's not like the "poor crackheads," as you so respectfully put it, don't care: they care just as much as anyone else does.
What I'd like to see is some more level-headed analysis of what the "false positive" or "false negative" rates are. For every family innocently harrassed, how many families are quickly cleared of any wrongdoing and how many children are removed from abusive situations? It makes a big difference if 60% of the claims CPS investigates result in putting an innocent family through hell or if 1% of the investigations do.
Again . . . would the world be better if CPS was able to do a better job? Sure. Would the world be a better place if we reverted back to treating children like property with no rights and allowing parents complete free rein over their children? No.
One reason a lot of enterprise software gets bloated is that, in order for the market to be viable, it's hard to just target a single niche, so you end up with a superset of features so that you can sell the same market to customers with different requirements.
Even in the best case, though, system specialization can be a knife-edge that cuts both ways. Many of our customers, for example, are in a trouble precisely because they have way, way too many one-off systems. They have this system over here that does just workers comp claims, and another system for handling personal auto claims, and another system for tracking notes, and an entirely different system for first notice of less entry versus for actually handling claims, and then most of their commercial business is in yet another system, except for some specialty lines that are elsehwere. Then they have five different policy administration systems, and a couple of billing systems, and each of those talks to a different document production system . . . it's a total nightmare.
So sometimes the choice is between having 3 complex systems or 25 purpose-built systems and a total integration and user training nightmare, and both options suck.
Basically, as soon as you have a bunch of data that you need to do a ton of different things with, you're left with two bad choices: you can create one really complex application that tries to do everything, or you can create a bunch of smaller applications and end up with a bunch of complicated integrations. Fundamentally, as soon as you have complex data that you have to do a bunch of stuff with, you're going to be in trouble no matter what you do.
1) The developers often aren't the users either, which instantly makes things far more difficult. My company builds insurance applications; it would be 10x easier (if not more) for me to write an e-mail application with a good user experience than for me to write a policy administration system with a good user experience because I'm not an agent or underwriter. With consumer software, development or collaboration tools, and a lot of small business software, the developer might actually have to/want to use their own stuff. For most enterprise software, that's rarely the case.
2) As has been pointed out already, a lot of enterprise software is complex. It's hard enough to get everything to work, let alone to have a really nice, slick UI. There are often endless numbers of non-optional corner cases to handle. If you're really unlucky, the process in question will be subject to lots of government regulations you have to abide by; if you're even unluckier, those regulations will vary by state (not to mention by country). It's hard to make something that complex user-friendly.
3) In addition to complication, there's the issue of surface area, which is somewhat orthogonal. It's much easier to polish a web application with 20 different screens that to polish one with 2000, no matter how simple those 2000 are; you often don't have the resources to devote huge amounts of attention to detail on an application with that kind of surface area.
4) Enterprises themselves are difficult to sell to. Extremely difficult. It's largely a self-inflicted wound, but it results in an increased barrier to entry in that market, which increases the cost of actually selling into that market, which leaves fewer resources for development (relatively speaking).
5) Enterprise systems often need to integrate to a bunch of other enterprise systems. Any way you spin that, it's difficult and time consuming to do that, which sucks up more resources.
6) Most enterprise solutions involve a lot of vendor lock-in. That's partially due to the storage of large amounts of highly critical data, partially due to general risk-aversion at most companies (since such changes, if they're botched, can be disastrous), and partially due to the integration work mentioned above. The cost of switching tends to be very, very high.
7) Everyone wants to be a unique snowflake. For core business processes many companies consider their process to be a competitive advantage; at the very least, it's a core part of their business. As a result, enterprise software often has to be customizable so it fits with what data the customer captures and how they do business. That dramatically ups the complexity factor and makes polishing things much harder.
8) Because of all those factors, enterprise markets have a high barrier to entry. The complexity of the products means that you need a decent amount of funding to even begin to enter the market, and the sales difficulties suck up more money and make it difficult to establish a consistent revenue stream. The relatively small market sizes combine with that to turn many of the markets into winner-takes-all sorts of games. As a result, you end up with two classes of companies: new entrants and incumbents. The new entrants don't have the resources to really polish their stuff; they're struggling to build stuff that's functionally complete, actually works, and to sell it without running out of money. They can't afford to chop their footprint in half in order to make sure it's really slick, or to spend twice as much on development. The incumbents, on the other hand, often have no incentive to not suck. They tend to have high levels of lock-in and they know their competitors have huge barriers to entry, so the competitive pressure to be good isn't there.
9) The most talented developers and designers often simply won't work on enterprise software. You're working on something you wouldn't use and have no personal connection to, and no one you know can use or see your work. At least in the valley, if you tell people you build enterprise software, people often react like they feel sorry for you, or like you're some sort of idiot-leper who simply isn't good enough to get a job building cool consumer stuff. Ask awesome developers if they want to work on a database, a social networking site, or a claims processing system, and I think we all know which option will come in third place.
10) Those are all reasons why commercial enterprise software written by software companies sucks. A lot of enterprise software, however, is written in-house. If a company that can amortize their costs across dozens or hundreds of customers has a hard time doing it, you can imagine what happens when one company attempts to build things themselves. They really don't have the resources or expertise to product anything thoroughly polished most of the time. And the hiring problem there is even worse: most good developers would rather work at a software shop than in the IT department of some massive company.