[Edu-sig] Dreaming in Code by Scott Rosenberg (2007)
john.graves at aut.ac.nz
Sun Mar 28 03:27:18 CEST 2010
This book is about the open source, python-based Chandler project ( http://chandlerproject.org/ last mentioned on Edu-sig in 2006) and, more broadly, about the art of creating software.
Here is the website for the book:
And a Salon interview with the author:
Surprisingly, this book has not been mentioned before on Edu-sig if a Google search of the archives is to be believed.
Here are excerpts [and comments on the excerpts] which suggest why it might be useful to Python-using Educators:
Torvalds, who is known as Benevolent Dictator for Life of the Linux operating system, consistently exudes a calm optimism about the long-term prospects for the movement he symbolizes. "In science," as he explained in a 2004 interview in Business Week, "the whole system builds on people looking at other people's results and building on top of them. In witchcraft, somebody had a small secret and guarded it--but never allowed others to really understand it and build on it. Traditional software is like witchcraft. In history, witchcraft just died out. The same will happen in software. When problems get serious enough, you can't have one person or one company guarding their secrets. You have to have everybody share in knowledge."
[Are the principles of open source and the reading of well written code parts of your curriculum?]
In the 1962 essay that laid out his plan of research into the augmentation of human intelligence, Engelbart explained why computer programmers were the most promising initial target group. ... [He] noted that "successful achievements can be utilized within the augmentation-research program itself, to improve the effectiveness of the computer programming activity involved in studying and developing augmentation systems. The capability of designing, implementing, and modifying computer programs will be very important to the rate of research progress." In other words, if NLS [oNLine System] could help his programmers program better, they'd be able to improve NLS faster. You'd have a positive feedback loop. You'd be, in the term Engelbart favored, bootstrapping.
To Engelbart, bootstrapping meant "an improving of the improvement process."
"If it takes the typical programmer more than two minutes and twenty-seven seconds to find something," Constantine wrote, "they will conclude it does not exist and therefore will reinvent it."
[How do you teach code reuse and enhancement?]
There is no reliable relationship between the volume of code produced and the state of completion of a program, its quality, or its ultimate value to a user. ... The week that he was asked to fill out the new management form for the first time, Atkinson had just completed rewriting a portion of the Quickdraw code, making it more efficient and faster. The new version was 2000 lines of code shorter than the old one. What to report? He wrote in the number -2000.
[What do you teach students to produce -- code or value-to-the-user?]
In 1990, at the PC Forum gathering of computer industry luminaries, Kapor first delivered the text of his "Software Design Manifesto."
No one is speaking for the poor user. ... Perhaps the most important conceptual move to be taken is to recognize the critical role of design, as a counterpart to programming, in the creation of computer artifacts. ...
Reaching back to ancient Rome, Kapor proposed applying to software the architecture theorist Vitruvius's principles of good design:
firmness--sound structure, no bugs;
commodity--"A program should be suitable for the purposes for which it was intended";
delight--"The experience of using the program should be a pleasurable one."
[What design principles do you teach? How do they compare?]
[In "Methods" chapter, discussion of CMM:]
One Humphrey presentation offered these bluntly persuasive bullet points:
- We all work for organizations.
- These organizations require plans.
- Unless you are independently wealthy, you must work to a schedule.
- If you don't make your own schedules, somebody else will.
- Then that person will control your work.
The meeting found a more virile name for the movement--Agile Software Development--and produced a manifesto that reads in its entirety:
We are uncovering better ways of developing software by doing it and helping others do it.
Through this work we have come to value:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
[Do you expose students to these ideas?]
Knuth's faith is distilled in the haiku-like poem by the Danish poet/scientist/designer Piet Hein that adorns the entryway to his home:
The road to wisdom?--Well, it's plain
and simple to express:
and err again
Literate programming is intended as an antidote to the excruciating fact that, as Joel Spolsky puts it, "it's harder to read code than to write it.
Instead of imaging that our main task is to instruct a computer what to do, let us concentrate rather on explaining to human beings what we want a computer to do.
[By implication, if you do not teach literate programming, you teach "illiterate" programming! ;-) ]
Software is easy to make, except when you want it to do something new.
The only software that's worth making is software that does something new.
[see also discussion at http://www.wordyard.com/2007/01/15/rosenbergs-law/ ]
After spending some time studying Chandler's code base, Eby posted to his blog a lengthy entry titled "Python Is Not Java."
... So, the sad thing is that these poor folks worked much, much harder than they needed to, in order to produce much more code than they needed to write, that then performs much more slowly than the equivalent idiomatic Python would.
Pretend that Python is a magic wand that will miraculously do whatever you want without you having to lift a finger. Ask, "how does Python already solve my problem?" and "What Python language feature most resembles my problem?" You will be absolutely astonished at how often it happens that [the] thing you need is already there in some form.
[ http://dirtsimple.org/2004/12/python-is-not-java.html ]
I found the book very informative and inspiring--especially in light of another open source, Python-based project, Open Allure, a voice-and-vision enabled educational software, which is part of my PhD study of open source software development. If you are interested in following this project, check out the short videos at
join the discussion list at
or get the source code at
More information about the Edu-sig