5. When Is A Rose Not A Rose?
|
5. Když růže není růží
|
Having studied Linus's behavior and formed a theory about why it was
successful, I made a conscious decision to test this theory on my
new (admittedly much less complex and ambitious) project.
|
Poté, co jsem studoval Linusovo chování a zformuloval teorii, proč bylo úspěšné, vědomě jsem se rozhodl tuto teorii otestovat na mém vlastním (ačkoliv zdaleka ne tak komplexním) projektu.
|
But the first thing I did was reorganize and simplify popclient a lot. Carl
Harris's implementation was very sound, but exhibited a kind of
unnecessary complexity common to many C programmers. He treated the
code as central and the data structures as support for the code. As a
result, the code was beautiful but the data structure design ad-hoc
and rather ugly (at least by the high standards of this old LISP hacker).
|
Ale první věc, kterou jsem učinil, byla reorganizace a zjednodušení popklienta. Carlova implementace byla velmi rozumná, ale vykazovala nepotřebnou složitost, která je běžná u mnoha C programátorů. Považoval kód za jádro a strukturu dat jako podporu pro kód. Výsledkem bylo, že kód byl nádherný, ale struktura dat náhodná a dosti ošklivá (alespoň podle vysokého standardu tohoto zkušeného LISP hackera).
|
I had another purpose for rewriting besides improving the code and the
data structure design, however. That was to evolve it into something
I understood completely. It's no fun to be responsible for fixing
bugs in a program you don't understand.
|
K přepisování jsem měl i další důvod než vylepšení kódu a datových struktur. Potřeboval jsem program zcela pochopit. Není to žádná legrace, opravovat chyby v programu, kterému nerozumíte.
|
For the first month or so, then, I was simply following out the
implications of Carl's basic design. The first serious change I made
was to add IMAP support. I did this by reorganizing the protocol
machines into a generic driver and three method tables (for POP2,
POP3, and IMAP). This and the previous changes illustrate a general
principle that's good for programmers to keep in mind, especially
in languages like C that don't naturally do dynamic typing:
|
Během prvého měsíce jsem se držel základního Carlova plánu. První vážnou změnou bylo přidání protokolu IMAP. To jsem učinil tak, že jsem program rozčlenil na obecnou část a specifické metody. Toto a předchozí změny ilustrují obecný princip, kterého by se měli programátoři přidržovat, zejména pak v jazycích, jako je C.
|
9. Smart data structures and dumb code works a lot better than the
other way around.
| 9. Promyšlené datové struktury a průměrný kód fungují mnohem lépe než při obrácené konfiguraci |
Brooks, Chapter 9: ``Show me your [code] and conceal your [data
structures], and I shall continue to be mystified. Show me your [data
structures], and I won't usually need your [code]; it'll be obvious.''
|
Brooks, kapitola 9: Ukaž mi svůj [kód] a skryj [datové struktury] a nebudu rozumět. Ukaž mi [datové struktury] a obyčejně nebudu potřebovat tvůj [kód], většinou mi bude jasný.
|
Actually, he said ``flowcharts'' and ``tables''. But allowing for thirty
years of terminological/cultural shift, it's almost the same point.
|
Ve skutečnosti řekl diagramy a tabulky. Ale po 30 letech kulturních a terminologických změn to znamená téměř to samé.
|
At this point (early September 1996, about six weeks from zero) I started
thinking that a name change might be in order -- after all, it wasn't
just a POP client any more. But I hesitated, because there was as yet
nothing genuinely new in the design. My version of popclient
had yet to develop an identity of its own.
|
V tu dobui (začátek září 1996, asi 6 týdnů od času nula) jsem začal přemýšlet o změně jména. Konec konců, už to nebyl jenom POP klient. Ale váhal jsem, protože dosud v programu nebylo nic opravdu původního. Moje verze popklienta si teprve musela vytvořit vlastní identitu.
|
That changed, radically, when fetchmail learned how to forward fetched
mail to the SMTP port. I'll get to that in a moment. But first: I
said above that I'd decided to use this project to test my theory
about what Linus Torvalds had done right. How (you may well ask) did
I do that? In these ways:
|
Vše se změnilo velmi radikálně, když se fetchmail naučil přesměrovávat poštu na SMPT port. K tomu se dostanu za okamžik. Jak jsem se již zmínil, rozhodl jsem se použít svůj projekt jako test toho, co Linus Torvalds udělal dobře. Jak jsem tedy testoval? Takto:
|
I released early and often (almost never less often than every ten
days; during periodsof intense development, once a day).
| Publikoval jsem časně a často, téměř vždy alespoň jednou za 10 dnů, při intenzivní práci jednou denně |
I grew my beta list by adding to it everyone who contacted me
about fetchmail. | Zvětšoval jsem seznam testerů o každého, kdo mne kontaktoval ohledně fetchmailu |
I sent chatty announcements to the beta list whenever I
released, encouraging people to participate. | Všem z nich jsem posílal hovorné vzkazy, kdykoliv jsem něco publikoval, a povzbuzoval jsem je k spoluúčasti |
And I listened to my beta testers, polling them about design
decisions and stroking them whenever they sent in patches
and feedback.
| A naslouchal jsem jim, dával si od nich schvalovat rozhodnutí a chválil je, když mi poslali nějakou opravu nebo komentář. |
The payoff from these simple measures was immediate. From the
beginning of the project, I got bug reports of a quality most
developers would kill for, often with good fixes attached. I
got thoughtful criticism, I got fan mail, I got intelligent
feature suggestions. Which leads to:
|
Tato jednoduchá opatření se vyplatila téměř okamžitě. Od začátku projektu jsem dostával hlášení o chybách ve kvalitě, pro kterou by většina vývojářů byla schopna zabít, a často bylo přiloženo i dobré řešení. Dostával jsem poštu, kterou byla zábava číst, promyšlenou kritiku a rozumné návrhy na nové možnosti. Takže:
|
10. If you treat your beta-testers as if they're your most
valuable resource, they will respond by becoming your most
valuable resource.
|
10. Pokud zacházíte s Vašimi testovateli, jako by byli vaším nejcennějším kapitálem, oni se vaším nejcennějším kapitálem skutečně stanou.
|
One interesting measure of fetchmail's success is the sheer size of
the project beta list, fetchmail-friends. At time of writing it has
249 members and is adding two or three a week.
|
Jedno zajímavé měřítko úspěchu fetchmailu je velikost seznamu testovatelů, přátel fetchmailu. V době, kdy tento text píši, má 249 členů a dva až tři členové přibývají každý týden.
|
Actually, as I revise in late May 1997 the list is beginning to lose
members from its high of close to 300 for an interesting reason.
Several people have asked me to unsubscribe them because fetchmail is
working so well for them that they no longer need to see the list
traffic! Perhaps this is part of the normal life-cycle of a mature
bazaar-style project.
|
Ve skutečnosti, při revizi na konci května 1997 tento seznam již ztrácí ze svého maximálního počtu téměř 300 členů ze zajímavého důvodu. Několik lidí mne požádalo, abych je odhlásil ze seznamu, protože fetchmail už pracuje tak dobře, že nepotřebují sledovat, co je nového. Možná to patří k normálnímu životnímu cyklu vyspělého projektu ve stylu tržiště.
|