Should People Learn To Code? Yes – If They Are Judges Ruling On Cases Involving Software
from the you-can't-fool-me dept
Recently Techdirt wrote about the heated debate on the subject of whether people should learn to code. We pointed out that some knowledge of that subject could be particularly useful in helping people understand why copyrighting APIs or patenting software is just crazy -- whatever the abstract legal arguments, in practice both make programming much, much harder.
An obvious situation where such practical knowledge could be crucially important is in court cases dealing with software. Rather neatly, the long-running court case between Oracle and Google, where the former is accusing the latter's Android of infringing on its code in various ways, has thrown up a perfect example of this.
It arose in an exchange between Judge Alsup and Oracle's main lawyer, the high-profile David Boies, best known for representing the US Justice Department in the United States v. Microsoft case. Boies claimed that the fact that the jury had decided Google's "rangeCheck" code had copied Oracle's implementation of the same function was evidence that Google was trying to save time. The argument of Boies was that Google consciously copied those few lines from Oracle in order to accelerate development -- and thus to start making money faster through daily activations of phones running its Android operating system.
But Judge Alsup was having none of it:
I have done, and still do, a significant amount of programming in other languages. I've written blocks of code like rangeCheck a hundred times before. I could do it, you could do it. The idea that someone would copy that when they could do it themselves just as fast, it was an accident. There's no way you could say that was speeding them along to the marketplace. You're one of the best lawyers in America, how could you even make that kind of argument?
This is a perfect example of a judge being able to draw on his personal experience of coding to dismiss what a clever lawyer probably thought was a clever argument.
Contrast this with another judge, talking this time about software patents, as recently reported on Techdirt:
Judge Michel seemed unaware of the depth of the software industry's dissatisfaction with the patent system. He suggested the patent system's critics were relatively marginal figures not representative of the views of the broader technology industry. And he didn't seem to understand the dynamics of the patent arms race currently affecting the software industry.
No one who has tried to code in any depth could dismiss the problems caused by software patents so glibly -- it would be hard, for example, to imagine Judge Alsup saying this.
"If software is less dependent on patents, fine then. Let software use patents less as they choose," Michel said. "If other industries are terribly dependent on patents, then let's not wreck the system just because software people are unhappy."
Learning to code certainly isn't a panacea, nor is it relevant for everyone. But for those professionals who must make important decisions about software -- judges, for example -- a basic programming literacy is indispensable. As it is, the tech industry must count itself lucky that the Oracle vs. Google case seems to have ended up in front of one of the few judges qualified to decide it.
Follow me @glynmoody on Twitter or identi.ca, and on Google+
Thank you for reading this Techdirt post. With so many things competing for everyone’s attention these days, we really appreciate you giving us your time. We work hard every day to put quality content out there for our community.
Techdirt is one of the few remaining truly independent media outlets. We do not have a giant corporation behind us, and we rely heavily on our community to support us, in an age when advertisers are increasingly uninterested in sponsoring small, independent sites — especially a site like ours that is unwilling to pull punches in its reporting and analysis.
While other websites have resorted to paywalls, registration requirements, and increasingly annoying/intrusive advertising, we have always kept Techdirt open and available to anyone. But in order to continue doing so, we need your support. We offer a variety of ways for our readers to support us, from direct donations to special subscriptions and cool merchandise — and every little bit helps. Thank you.
–The Techdirt Team
Filed Under: android, code, david boies
Companies: google, oracle
Reader Comments
Subscribe: RSS
View by: Time | Thread
andif Argument == Strawman
then Lawyer == null;
[ link to this | view in chronology ]
Re:
[ link to this | view in chronology ]
Re:
[ link to this | view in chronology ]
Re: Re:
[ link to this | view in chronology ]
Yes! Very yes!
But not just "how to code". Schools should have courses on basic computer science and kids should be taught from an early age how computers work, and how to unleash their power.
The goal of schools is to prepare kids for the future. How can we do that if kids these days have no clue of what goes on inside a computer?
In the past, we had the excuse that computers were a niche thing. Today, we have no excuse not to teach some basic computer science in schools.
[ link to this | view in chronology ]
Re:
according to the entertainment industries, the most important thing to teach kids in school about computers is what NOT to do with them!
[ link to this | view in chronology ]
Re: Re:
[ link to this | view in chronology ]
Re: Re: Re:
[ link to this | view in chronology ]
Re: Re: Re: Re:
[ link to this | view in chronology ]
Re: Re: Re:
[ link to this | view in chronology ]
Re: Re: Re:
[ link to this | view in chronology ]
Re: Re: Re: Re:
[ link to this | view in chronology ]
[ link to this | view in chronology ]
See also What color are your bits?, which I probably found via Techdirt (thanks!).
[ link to this | view in chronology ]
Re:
They probably ripped off Oracle too by naming variables min, minValue, minimumValue etc.
How dare they take an incredibly simple routine with minimal logic and then convolute it with meaningful variable names.
I bet if we dig deeper we'll find out that Google took the concept of loops and methods and being the scum sucking pirates that they are used them throughout their program!
[ link to this | view in chronology ]
Re: I haven't seen the rangeCheck code...
[ link to this | view in chronology ]
Naivety
> how could you even make that kind of argument?
This judge must have seen thousands of lawyers argue equally stupid things, so I find it ingenuous that he should (presumably) feign surprise that Boies, when representing someone with practically no case, would grasp at straws.
[ link to this | view in chronology ]
There's a secondary reason for doing this
Good programmers learn to be careful with their assumptions, skeptical of their success, and committed to testing -- among other things. These are useful attributes for anyone to have, but they're especially useful for people whose work involves complex decision-making.
[ link to this | view in chronology ]
Re: There's a secondary reason for doing this
Nothing infuriates me more than when someone complains about a facial recognition tool being imperfect, then sits down to manually transpose some spreadsheet columns or rename a folder of files.
[ link to this | view in chronology ]
Re: Re: There's a secondary reason for doing this
I could create a bash script to do it, but by the time I've written that one, and concluded that it works the way I want it to, I'd been better off doing it by hand. :)
But I agree, that would be something best done automated.
[ link to this | view in chronology ]
Re: Re: Re: There's a secondary reason for doing this
For sure, there are times when the challenge of automating is greater than just doing it manually - of course, multiply the number of files a bit, or make it a daily task, and then that balance shifts.
[ link to this | view in chronology ]
Re: Re: Re: Re: There's a secondary reason for doing this
Sadly, more often than not, even when confronted with experts in the field, these politicians stick their fingers in their ears and shout: "LALALALALA, I DON'T WANNA LEARN!"
[ link to this | view in chronology ]
Re: Re: Re: Re: There's a secondary reason for doing this
1) the time to develop the automation is less than the time to do the task manually, or
2) the task is subjectively unpleasant enough, or
3) the task will need to be done again at least once more in the future
[ link to this | view in chronology ]
Knowing how to code helps lawyers in many ways
The best part, though, was standing up in court in front of a non-technical judge and refuting the other side's nonsense on how fast code is written ('no way an experienced developer can write hundreds, yes hundreds of lines of code in a week') by putting my laptop in front of the judge and rapidly whipping up an nice Mac program that printed the judge's name in a window on screen, demonstrating that (with the auto-generated code) I had just written a few hundred lines of code in minutes. The judge: "I am sorry, gentlemen, but I am going to accept the technical facts of this case from this lawyer: if he can do this, then his professional programming client can probably do more: you obviously are trying to abuse my lack of hands-on coding experience with your grand statements, but now that I see how it is done and that even your expert witness cannot refute what has been demonstrated I suggest you pipe down."
So yeah, learning to play with and understand code is VERY valuable to lawyers in the tech field, if not to most people.
[ link to this | view in chronology ]
Re: Knowing how to code helps lawyers in many ways
I'm all in favor of crushing a bad argument with an irrefutable demonstration. I'm all in favor of educating judges. And I'm glad you won. But the judge seems to have missed the two real lessons:
1) A non-technical judge should not accept an argument about a technical discipline without evidence, and
2) there's really no limit to how fast a tech-savvy coder can generate lines of code. (Extra credit if the judge realizes that there's no upper limit to how many lines of code can be used to perform a given task.)
[ link to this | view in chronology ]
Re: Re: Knowing how to code helps lawyers in many ways
[ link to this | view in chronology ]
Re: Re: Re: Knowing how to code helps lawyers in many ways
a = "hello judge";
alert(a);
Man, I'm spent... think I'm gonna lie down for a while. Hopefully nobody asks me to add a THIRD line there...
[ link to this | view in chronology ]
Re: Re: Knowing how to code helps lawyers in many ways
The industry-average rate of code production varies wildly, from the tens to the thousands, depending on what exactly we're talking about.
[ link to this | view in chronology ]
Re: “fully tested & debugged”
[ link to this | view in chronology ]
Re: Re: “fully tested & debugged”
What I meant was "production-ready". The last figures I saw for this kind of code was an industry-average rate of 10 lines per day.
[ link to this | view in chronology ]
[ link to this | view in chronology ]
Boies: Clinton's Lawyer
[ link to this | view in chronology ]
Re: Boies: not Clinton but Gore's Lawyer
[ link to this | view in chronology ]
Then again, having others try their hand means things can't possibly get any worse.
RIP KISS (not the band, which is a problem if you thought "I wish I had his tongue").
[ link to this | view in chronology ]
Knowing Code
When it comes to code, you also have to remember how history has behaved in the past... Two people in different parts of the world came up with calculus at the same time... Three separate and equally secluded scientists were all coming up with the "Atomic Solution" at the same time. It is inevitable that these 'code infringements' are going to occur at some level; that's just unconscious knowledge.
Coincidence is very convincing, but it is not a Guilty verdict...
[ link to this | view in chronology ]
rangeCheck
Yeah, that saved Google lots of time to copy.
[ link to this | view in chronology ]
Re: rangeCheck
Yup, still real complicated
[ link to this | view in chronology ]
Re: rangeCheck
if (fromIndex > toIndex)
throw new IllegalArgumentException("fromIndex(" + fromIndex +
") > toIndex(" + toIndex+")");
if (fromIndex < 0)
throw new ArrayIndexOutOfBoundsException(fromIndex);
if (toIndex > arrayLen)
throw new ArrayIndexOutOfBoundsException(toIndex);
}
[ link to this | view in chronology ]
transformation
[ link to this | view in chronology ]