Si vous souffrez des JargonFile:CreepingFeaturitis ou même pire, des gonflements de fonctionnalités, vous avec une mauvaise fonctionnalité karma.
De ce fait, quand vous doigts vous pressent d'ajouter encore une nouvelle fonctionnalité, vous devez effacer ou en simplifier une autre existante pour équilibrer la fonctionnalité karma.
Si vous croyez que l'ordinateur parfait est éteint et dans un remplissage de champs, alors vous pouvez facilement comprendre la philosophie. Aussi, si vous travaillez à construire une communauté, moins vous avez d'acrobaties à faire faire à vos éléments, mieux c'est.
Dit souvent d'une autre manière, le code le plus simple produit les meilleures communautés, parce que les personnes peuvent piger plus rapidement le comportement. Ceci parce qu'aù fil du temps, les personnes pratiquent doucement dans leurs têtes un reverse engineering des programmes.
Si vous avez autorisé peu de règles, vous devrez en faire des bonnes et puissantes. Alors, parce qu'il n'y a seulement qu peu de règles, les gens les apprendront et trouveront des façons intéressantes de les mixer. Voilà comment Wiki:JimCoplien a découvert <TAB><SPACE>:<TAB> == la citation et CliffordAdams a résolu le pluriel des ModèleDeLien's. [Localement la règle de citation est simplement un caractère : (au début de toute ligne), et la règle des ModèleDeLien's au pluriel a changé).]
Ceci est dans la même veine que le sage écrivant un conseil : vous n'êtes pas fait pour éditer à moins qu'on ne vous laisse avec une page blanche.
"Ecrire est facile. Vous rayez simplement tous les mots inappropriés." -Mark Twain
Maintenez-là simple. Maintenez-là puissante. OrdonnerLeChaos.
[Selon] JoeArmstrong?, NiklausWirth? a dit une fois que si quelque chose est ajouté à une langue, d'autres choses devraient être jetées.
Les fonctionnalités ne doivent pas être prises trop loin, tout spécialement quand des fonctionnalités moins importantes affectent les fonctionnalités communes. Les designers devraient choisir de bon comportements par défaut, et ne pas encombrer l'utilisateur avec trop de choix non demandés. D'un autre côté, un bon outil ne devrait pas limiter l'utilisateur à des comportements de novice.
Il est incertain de dire que ce HTML moderne pourrait avoir été conçu sans les erreurs produites dans les précédentes versions. Beaucoup de fonctionnalités communément utilisées (comme l'utilisation de "listes de définitions" pour décaler le texte) sont maintenant découragées en faveur de tel ou tel standard plus récent (feuilles de style). Parfois le meilleur moyen de faire est d'essayer, échouer, apprendre et à nouveau réessayer avec une nouvelle connaissance. Parfois, on peut démarrer le second ou troisième essai avant que la conception parfaite ne soit terminée.
Exactement. Pour équilibrer votre karma, vous devez effacer le "cruft" (code redondant et mal écrit) que vous avez accumulé. Il n'y a rien de mal à ajouter des fonctionnalités, tant que vous désirez effacez les stupides.
Et HTML n'est pas exactement un bon exemple. Il n'existe pas de HTML standard. C'est comme essayer de porter du code C avant ANSI/X3J11.
Html est l'exemple parfait. Il y a beaucoup de standards HTML -- sentez-vous libre d'en choisir un. La plupart des auteurs de navigateurs tendent à converger vers le standard W3C HTML 4.
Les standards acceptés tendent à mettre fin à l'innovation. C'est probablement plus facile d'écrire un tout nouveau langage que d'ajouter une fonctionnalité significative au langage C. (Bien sûr, standardiser le langage ne fait rien pour courber l'usage inventif du langage. Une dispute pourrait même être produite pour l'encourager).
Un truc pour obtenir un standard vraiment bon est de trouver ce que les utilisateurs veulent vraiment avant de geler le standard. Un bon moyen de savoir ce que les utilisateurs veulent est d'implémenter presque toutes les fonctionnalités demandées, puis de voir par la suite quelles fonctionnalités sont vraiment utilisées. Quelques fonctionnalités qui semblaient utiles ne seront pas utilisées, alors que quelques fonctionnalités obscures seront très populaires.
En quelque sorte, le fait d'ajouter des fonctionnalités demandées par les utilisateurs est plus important sur un wiki que dans la plupart des logiciels. Si un traitement de texte à une fonctionnalité manquante, on peut choisir un autre programme qui offre la fonctionnalité. Si un wiki n'offre pas une fonctionnalité, alors on n'a pas cette option-là (d'utiliser simplement un autre programme). Le contenu est lié à l'implémentation spécifique.
Les ModèlesDeLiens? au pluriel (ModèleDeLien) sont sûrement un anti-modèle. La leçon ici est que si vous n'ajoutez pas une fonctionnalité demandée, les gens essaieront de la falsifier par d'autres moyens. Vous parvenez avec une syntaxe de facto qui n'est pas évidente, verbeuse, aliénante et généralement élève la BarrièreALEntrée?.
L'utilisation de plusieurs apostrophes simples pour délimiter un ModèleDeLien n'est certainement pas évidente. L'interaction avec les règles de mise en page des textes était accidentelle et découverte lentement. Dans le proche futur, UseModWiki (et MeatballWiki) pourront ajouter une solution bien plus simple. La nouvelle méthode résoudra aussi les problèmes de ponctuation après les URLs utilisant la même syntaxe.
Si les fonctionnalités étaient "stupides", elles n'auraient pas été ajoutées, ou remarquées quand elles ont été jetées au dehors. Les décisions comme ça sont tout à fait faciles à faire. Traiter le développement de fonctionnalité comme un jeu à somme nulle peut être dommageable pour un utilisateur de communauté, en donnant aux gens des raisons de se battre contre les demandes de fonctionnalités d'autres personnes. (Il y aura encore une compétition pour un temps de développement limité, mais parfois il est facile d'accepter une demande de faible priorité.)
D'un autre côté, parfois les compromis sont valables. Par exemple, parfois une fonctionnalité désirée a un coût trop élevé en temps de développement, ou requiert une restructuration qui affecte d'autres fonctionnalités.
Par exemple, une fonctionnalité de "diff avancée" pour UseModWiki a été développée mais retirée plus tard. Elle fournissait une production presque optimale de "diff" en conservant les versions d'historiques de pages dans chaque page. Le nouveau code pouvait, à un temps donné, montrer toutes les différences depuis ce temps, ou montrer la différence disponible la meilleure et alerter l'utilisateur que plus de différences existaient. (Par exemple, sur une vision de 3 jours de ModificationsRécentes, le lien "(diff)" afficherait une diff unique avec toutes les modifications produites durant les trois derniers jours).
La fonctionnalité "diff avancée" avait néanmoins plusieurs inconvénients. Elle était difficile à tester. Elle a rendu la base de données beaucoup plus grosse. Elle a considérablement compliqué quelques fontions admin planifiées, et a souvent été un facteur dans d'autres plans. La fonctionnalité était difficile à expliquer et pouvait devenir confuse à utiliser. Ce n'était pas drôle du tout d'écrire et de maintenir ce code-là, et elle a presque interrompu tout autre développement. Pour finir, parès avoir imaginé que peu de personnes n'utiliseraient même les meilleurs parties de la fonctionnalité, la "diff avancée" a été laissée tomber. (Peut-être que cela fût stupide, mais c'était vraiment chouette quand elle fonctionnait.)
Je pense que j'ai été beaucoup trop dramatique quand j'ai utilisé le mot "stupide". Le point que j'essaye de produire est qu'il est souvent mieux de chercher des façons de condenser les fonctionnalités en des plus simples et plus puissantes plutôt que d'ajouter de nouveaux frobs au produit. Il est néanmoins stupide de patcher fonctonnalité sur fonctionnalité sans penser à ce que vous voulez pour finir du logiciel et d'imaginer ce qui est le meilleur. Au moins, c'est vrai dans notre contexte de constructeurs de communautés. -- SunirShah
Je suis d'accord généralement. Malheureusement, je suis essentiellement sur des idées de condenser encore plus à fond mon code wiki. [Attention : métaphre questonnable suit ;-] On pourrait penser que le processus d'ajouter "fonctionnalité sur fonctionnalité" puis de simplifier comme un empilement d'ordure. On construit un paquet de fonctionnalités, puis on enlève celles qui ne sont plus utiles.
J'ai eu de bons résultats avec une stratégie de plein de fontionnalités dans le temps. Dans le développement, le programme a démarré comme un énoncé simple dans l'une des fonctions de trn. Après que beaucoup plus de fonctionnalités aient été ajoutées, le code a migré sur un fichier et a été nettoyé. Plus tard, des fonctionnalités similaires ont été ajoutées à une partie différentee en copiant et modifiant le code. A la fin, j'étais fatiqué de modifier de mulitples sections du code qui faisait essentiellement la même chose, aussi je l'ai récrit d'une façon à moitié orientée objet. (C'était avant que le C++ ne soit utilisable dans mon environnement.)
Plusieurs fois, j'ai trouvé que mes premières suppositions étaient erronnées et ont drastiquement changé mes directions de développement. (J'ai probablement écrit plus de 20 000 lignes de code jeté, comparé à environ 10 000 lignes de code livré). A ce moment, je voyais toujours le code comme un modèle de prototype pour la version finale. Le plan était toujours d'agrandir le modèle actuel à ses limites, puis de reconcevoir le projet en se basant sur ce qui avait appris du modèle. Plus d'une fois, j'ai fait un backup du source, puis retiré les fichiers de mon répertoire de travail et l'ai récrit (pour coller à un nouveau design). Le code strn n'est certainement pas le code C le plus propre, mais il a produit des objectifs vraiment ambitieux.
Si je voulais justifier ma méthode, je pourrais l'appeler "organique" comme comparé à la croissance "cristalline". Puis à nouveau, peut-être que j'ai un sale esprit (comme mon bureau :-) J'aime vraiment le désordre comme la langue anglaise de Perl . -- CliffordAdams (qui tant de FonctionnalitéKarma, qu'il ressucitera probablement comme l'assistant presse papier de Microsoft.)
J'ai commencé à réfléchir moi-même à la fonction de redirection. Elle n'est vraiment pas trop mauvaise dans le code, parce que la plupart de ses fonctions sont partgées avec la redirection après édition. Je pense que ce devrait être non nécessaire la plupart du temps, parce que les personnes ne modifieraient simplement que les liens originaux vers la vraie cible, puis effaceraient la page de redirection. J'aimerais la laisser de côté durant un moment et voir si quiconque revient pour en faire bon usage. Si la fonctionnalité de redirection est sur le chemin de quelque chose d'autre de génial, elle s'estompera probablement.
Si vous abandonnez les idées au premier signe du problème, vous n'arriverez jamais à quelque chose de génial. -- DaveHarris
Mais parfois, vous devez savoir quand les plier... la fonctionnalité "diff avancée" avait presque tué le développpement UseModWiki. J'ai continué à penser "juste un petit peu plus et cela fonctionnera" durant des mois jusqu'à ce que n'ai réalisé que c'était une fonctionnalité que seul son créateur pourrait aimer. --CliffordAdams (ai je mentionné que c'était vraiment chouette ?)
Oui, vous devez savoir. Je ne suis simplement pas d'accord sur le fait que savoir est facile.
Personnellemnet je pense que "diff" est une fonctionnalité presque cruciale, en termes de visions personnalisées et de dimensionnement. Si je visite un site seulement une fois par semaine pour savoir ce qui a changé depuis, alors je ne peux pas me permettre de relire le site en entier à chaque fois. (Vos pages de modifications récentes y parviennent admirablement ici, ceci dit en passant). Je pense aussi que c'est important pour la responsabilité, comme partie d'une PisteAudit que je vois comme une section importante d'un modèle de SécuritéDouce. Je ne comprends pas vraiment ce que faisait votre "diff avancée" ou quels étaient les problèmes, aussi je ne vous dirai pas que vous avez fait une erreur d'y travailler, mais je pense que le champ général mérite beaucoup d'effort.
Ces décisions ne sont pas faciles ; avoir les bonnes est ce qui distingue les programmeurs de génie. En termes de Wiki:PatternLanguage : des pages comme FonctionnalitéKarma aident parce qu'elles identifient les forces, mais les forces doivent encore être amenées en équilibre et cette page est trop générale pour offrir une solution concrète. Le modèle proposé, "Effacer une vieille fonctionnalité à chaque fois que vous en ajoutez une nouvelle", est sur-simplifié. -- DaveHarris
J'aime désormais la façon dont cette page est pleine de contradictions. Ces jours-ci j'imagine le hack d'indentation de Cope et le hack de Cliff Wiki:SixSingleQuotes et le délimiteur à double apostrophe être très laid, et je pense que la transition SGML -> HTML -> XHTML ne démontre pas quoi que ce soit. A ce stade, encore je m'accroche à l'idée de la FonctionnalitéKarma, si seulement comm un EquilibreDeForces? vers la fonctionnalité-tis. Hé, le karma est assi difficile qu'il n'est facile. -- SunirShah