Emprunter un solveur au lieu de réécrire les règles
Quand une démo a besoin de la logique d’un produit, est-il plus sûr d’intégrer le vrai code que d’en réécrire une version simplifiée ?
·
Une démo de navigateur réimplémente normalement juste assez du produit pour que cela paraisse juste. C’est très bien jusqu’à ce que la partie intéressante du produit soit une règle facile à décrire et difficile à réussir — moment où la réécriture livre discrètement une version moins bonne de ce qui est annoncé.
Glow Garden est exactement ce cas. Sa règle se lit comme un cliché de casse-tête : une luciole par ligne, par colonne, par région colorée, aucune ne se touchant. Mais le jeu ne vérifie pas les placements par rapport à ces règles. Il demande à un solveur si le plateau peut encore être achevé, et refuse le toucher si ce n’est pas le cas. Cela signifie qu’un placement peut être légal isolément et pourtant être rejeté, et c’est ce qui fait que le jeu paraît juste plutôt qu’arbitraire — et c’est précisément la subtilité qu’une réécriture aurait aplatie.
Au lieu de réécrire, le noyau de règles a donc été copié de l’application sans modification, son empreinte consignée, et une frontière typée placée devant lui pour que la compilation casse si l’original vient à dériver. La même approche a ensuite fonctionné pour la fonction de gabarit de Veyra.
Ce que nous avons appris
Les conclusions à ce jour.
- 01
La partie qui mérite d’être copiée est rarement celle qui paraît compliquée. C’est celle où une réimplémentation plausible serait subtilement fausse et où personne ne s’en apercevrait.
- 02
L’intégration a besoin d’une frontière, pas seulement d’une copie. Une surface typée écrite à la main devant le code emprunté est ce qui transforme « cela a dérivé » d’un changement de comportement silencieux en une compilation en échec.
- 03
Cela ne marche que là où la logique est déjà pure. Les deux morceaux qui se sont transplantés proprement n’avaient aucun import et aucun framework sous eux, et c’est une propriété qu’on obtient en les écrivant ainsi, pas en le souhaitant après coup.
- 04
Un plateau figé a tout de même besoin de la garantie du vrai générateur. Le plateau de la démo a été cherché avec le solveur même de l’application jusqu’à ce qu’en apparaisse un n’ayant exactement qu’une solution, plutôt que dessiné à la main et espéré.
Le voir en action
La vérification des règles est le code de Glow Garden lui-même, repris sans modification, y compris le solveur qui refuse tout placement rendant le plateau insoluble. Le plateau est fixe plutôt que généré, et il a été recherché avec ce même solveur jusqu’à en trouver un ayant exactement une solution.