(Continued from Part the Second)
Thursday, July 24, 2008 was a great day. I have notes from every talk I went to except for Andy petdance Lester's "Just Enough C for Open Source Projects", which, to be honest, went too fast for me. It bears mention, though, that Andy began his talk by showing a photo of Schwern xwrn and saying, "Michael Schwern is the reason I'm giving this talk." Heck, really, the best way to tell about Thursday is to just keep on quoting people.
- "When we look through this code, we see that in five places, we're using
$arg. The pirate variable!"
- "Having a variable called 'array' or 'list' is sort of like having a box and putting a label on it that says 'box'."
- Compound names: If your method is called
make_waffles_and_pancakes(), it's doing too much!
- Refactoring technique: extract. "If you can describe what 15 lines of code do with one sentence, then take them out and put them in a method."
- "Narrow scope forgives many sins." Yes.
- Discoverable reuse: pull something out into a method, even if you're only using it once! Someone else will need it!
- Don't ever put a comment at the end of the brace repeating what the condition was at the top. It violates DRY.
Ben Collins-Sussman and Brian Fitzpatrick on "Do You Believe in the Users?":
- "We recognize that other people have differing opinions, and we welcome you to get your own talk."
- Fitz: "Perception is nine-tenths of reality." Ben: "This is our new meme." Fitz: "Yeah, get it out there."
- Chris underwhelm will be pleased to note that they used the phrase "underpromise and overdeliver."
- And "lagniappe"! I forget the context.
- Either Ben or Fitz, I don't remember: "Someone actually manufactured this ridiculous thing, and people actually buy it!"
- Mercurial hits the usability-vs.-power sweet spot between SVN and Perforce.1
- Either Ben or Fitz, I don't remember: "While we preach consensus-based software development, there is no such thing as good consensus-based UI development." Snap.
- Fitz: "How many people have used
aron their unix computer?" *Nobody raises a hand.* Ben: "But they have a huuuuuge install base!" Fitz: "In 2000, they could have gotten funding!"
- Ben: "Google is basically assisted living for twentysomethings." Snap!
- "For those of you who have not heard me speak before, I started this talk in 2003. It's running a little long."
- In ancient Greece, "techne" was the process of making things. Architecture, sculpture -- a lower-class activity. "Praxis" was the leadership of men -- government, politics, military command. "Open source is a movement to convert software from techne into praxis."
- If "proprietary software" is about the making of software, "open source software" is about the leadership of men.
- Quoting SICP: "Programs must be written for people to read, and only incidentally for machines to execute." (r0ml posits that literature falls on the side of "praxis", and therefore so does literate programming.)
- "The strategy is to make open source appear one of the useless arts, so it will be respected."
- He showed us some search results: useful proprietary software, useless open source, useful open source, and useless proprietary software. "Why do more people search for useless things than useful things? They don't want to appear to be lower-class."
- "The more I read about rhetoric, the more it seems that the open-source movement is really the rhetoric of the 21st century."
- Jobs : praxis :: Gates : techne. "In the early days, Jobs and the Reality Distortion Field had clearly won. And then the pendulum swung back -- and now, based on what you see at this conference, it's heading back in the other direction."
- 'The Trivium: The Liberal Arts of Logic, Grammar, and Rhetoric'. Logic is concerned with the thing as it is known. Grammar is concerned with the thing as it is symbolized. Rhetoric is concerned with the thing as it is communicated.
- Rhetoric is the master art, for it presupposes the first two. It's the art of communicating, through symbols, ideas about reality.
- "Grammar is like writing proprietary software and rhetoric is like releasing the source code."
- Philosophers cast the orators (the "rhetors") as those who would say anything to get their point across -- "mere salesmen".
- Confutation!: It might be about the oratorical/philosophical divide rather than the techne/praxis divide.
- Quoting Programmers and Managers: The Routinization of Programming in the United States: Engineers were people who rearranged and redesigned work tasks in order to increase managerial control over production works -- but software engineers did it to themselves!
- What would it mean if the programming workers could seize the means of production of software (that is, the source code)?
- "The biggest problem in building a clock that would run for 10,000 years was building a society that would not turn it off for 10,000 years. And that's why we're all here. Allegedly we're here to talk about technology, but we're actually here for oratory or rhetoric, because why else have a conference? It's not technical, it's about the leadership of men."
- *looking at watch* "Oh, well, I'll continue next year."
Jamie Taylor, Colin Evans, and Toby Segaran (of the Metaweb project) on "Machine Learning for Knowledge Extraction from Wikipedia and Other Semantically Weak Sources":
- Wikipedia grows by two percent a week. "By the time this talk is over, there will be 150 new articles."
- A nice definition of machine learning: "If 'learning' is a change in behavior based on experience, 'machine learning' is algorithms that change based on input."
- "If you can count, you can do machine learning. You know, Google is just really good at counting. MapReduce is a beautiful mechanism for counting at a massive scale."
- "Haskell started as an academic language which nobody had heard of, and now it's graduated to an aspirational language which nobody uses."
- "In Haskell we don't have hash tables because they don't make any sense when your data is immutable, but instead we have this nice thing called a balanced tree." Oh, snap!
takejust takes the first k elements of a list. In an example he showed,
(sort xs)is just the sorted list -- but it's only enough sorting so that you can get the first
kelements in order! Yeah, laziness!
- "In this example, the Haskell is one-third the size of the equivalent Java, but normally I wouldn't expect it to be that bad." Even more burnsauce!
- Concurrency: We can do better than locking. Beautiful concurrency: Software transactional memory. Modifications as transactions. Who modifies first, wins. Helpful analogy: Software transactional memory is to concurrency as garbage collection is to memory management. (I didn't understand most of this part.)
- How to deal with bugs? Automatic test generation -- purity gives us a huge edge.
- Functional languages are very well-suited for parallelization. "Within a year or two, you'll be able to download GHC, write ordinary functional code, and have it run in parallel on as many CPUs as you like with performance comparable to optimized C."2
- Bryan: "And my book, Real World Haskell, is licensed under a Creative Commons license." Guy in the front row: "Which Creative Commons license?" Bryan: "CC-mumble-de-mumble-thingamajig."
- "In Haskell it's 100% necessary to separate code that deals with the outside world from code that does your own housekeeping."
- "You might think that I have something in for ORMs, and you would be correct."
- "OCaml is a gateway drug to Haskell. If you're going to do functional programming, why not go balls-to-the-wall?"
When Bryan took questions at the end, I raised my hand and asked, "What might trip up someone coming to Haskell from a Lispy language like Scheme?", and Karl Fogel turned around from the front row and mouthed "thank you" to me. That was awesome. (Bryan, of course, was like "Um, the type system.") And the evening and the morning were the third day.
Here's the coolest thing about going back and reading my OSCON notes. I enjoyed these talks when I heard them ten months ago, but after a year of school, I enjoy the memory of them more. I understand nuance that I didn't understand before, particularly in the Haskell talk. There were jokes that I genuinely laughed at ten months ago, but there were others that I only laughed at because everyone else was laughing, and that I now genuinely appreciate and find funny. If happiness is largely about developing a finely tuned sense of humor, then grad school is clearly where I'm supposed to be.