Download - Yet another building metaphor
![Page 1: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/1.jpg)
Yet Another Building Metaphorfactor10.com :: @aslamkhn :: aslamkhan.net
![Page 2: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/2.jpg)
Aslam Khan
mail at [email protected]
blog at http://aslamkhan.net
tweet at @aslamkhn
skype at aslmkhn
![Page 3: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/3.jpg)
10 I = INT(10 * RND(1))20 PRINT “GUESS MY NUMBER:”30 INPUT J40 IF INT(J) != I THEN GOTO 2050 PRINT “YOU GOT IT!”60 PRINT “PLAY AGAIN (Y/N)?”70 INPUT Y80 IF Y == ‘Y’ THEN GOTO 1090 PRINT “THANKS FOR PLAYING”
One of the first games that I wrote
![Page 4: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/4.jpg)
alert(“Thanks for playing”);
It looks better with whitespace
do { var i = Math.floor(Math.random()*11);
do { var j = prompt(“Guess my number”); } while (i != j);
alert(“You got it!);y = confirm(“Play again?”);
} while (y);
The JS version
![Page 5: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/5.jpg)
alert(“Thanks for playing”);
do { var i = Math.floor(Math.random()*11);
do { var j = prompt(“Guess my number”); } while (i != j);
alert(“You got it!);
y = confirm(“Play again?”);} while (y);
It reads better with whitespace
![Page 6: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/6.jpg)
What else can we do about it?
alert(“Thanks for playing”);
do { var i = Math.floor(Math.random()*11);
do { var j = prompt(“Guess my number”); } while (i != j);
alert(“You got it!);
y = confirm(“Play again?”);} while (y);
![Page 7: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/7.jpg)
do { do { } while alert(“You got it!);
alert(“Thanks for playing”);
var mystery_number = Math.floor(Math.random()*11);
var guessed_number = prompt(“Guess my number”);(guessed_number != mystery_number);
var play_again = confirm(“Play again?”);} while (play_again);
It reads better with nicer names
![Page 8: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/8.jpg)
Can we do better than renaming?
do { do { } while alert(“You got it!);
alert(“Thanks for playing”);
var mystery_number = Math.floor(Math.random()*11);
var guessed_number = prompt(“Guess my number”);(guessed_number != mystery_number);
var play_again = confirm(“Play again?”);} while (play_again);
![Page 9: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/9.jpg)
Make the intention clearer
keep_guessing_until_matched( mystery_number() );(play_again());
say_thanks();
do { } while
![Page 10: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/10.jpg)
do {
keep_guessing_until_matched( mystery_number() ); } while (play_again());
say_thanks();
It’s still not good enough
Why?
![Page 11: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/11.jpg)
Because it is still this design
10 I = INT(10 * RND(1))20 PRINT “GUESS MY NUMBER:”30 INPUT J40 IF INT(J) != I THEN GOTO 2050 PRINT “YOU GOT IT!”60 PRINT “PLAY AGAIN (Y/N)?”70 INPUT Y80 IF Y == ‘Y’ THEN GOTO 1090 PRINT “THANKS FOR PLAYING”
And it is not a very good
design either
![Page 12: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/12.jpg)
10 I = INT(10 * RND(1))20 PRINT “GUESS MY NUMBER:”30 INPUT J40 IF INT(J) != I THEN GOTO 2050 PRINT “YOU GOT IT!”60 PRINT “PLAY AGAIN (Y/N)?”70 INPUT Y80 IF Y == ‘Y’ THEN GOTO 1090 PRINT “THANKS FOR PLAYING”
And it is not a very good
design either
How do I add a new feature?
![Page 13: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/13.jpg)
10 I = INT(10 * RND(1))20 PRINT “GUESS MY NUMBER:”30 INPUT J40 IF INT(J) != I THEN GOTO 2050 PRINT “YOU GOT IT!”60 PRINT “PLAY AGAIN (Y/N)?”70 INPUT Y80 IF Y == ‘Y’ THEN GOTO 1090 PRINT “THANKS FOR PLAYING”
And it is not a very good
design either
How do I test it?
![Page 14: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/14.jpg)
Let’s just focus on the game itself
TestCase("Game Tests", {"test new game should let us play": function() { var play = new_game(); assertFunction(play); },
"test play should let us check for a win": function() { var play = new_game(); var win = play(5); assertFunction(win); },
"test winning play": function() { var play = new_game(); var guess = play['mystery_number']; var win = play(guess); assertTrue(win());}
});
![Page 15: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/15.jpg)
The game as Higher Order Functions
var play = new_game();var win = play(guess);
The rest is user interface stuff
![Page 16: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/16.jpg)
Does Language Matter?
![Page 17: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/17.jpg)
Every powerful language has this
Primitive expressions
Means of combination
Means of abstraction
(this parallels the basics of human understanding too, btw)
![Page 18: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/18.jpg)
We use these languages to express and organise our thoughts
do {keep_guessing( mystery_number() );
} while (play_again());say_thanks();
OR
var play = new_game();var win = play(guess);
![Page 19: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/19.jpg)
We use these languages to express and organise our thoughts
do {keep_guessing( mystery_number() );
} while (play_again());say_thanks();
OR
var play = new_game();var win = play(guess);
Build monolithic static structures
Build composable dynamic structures
![Page 20: Yet another building metaphor](https://reader034.vdocument.in/reader034/viewer/2022051502/58ef7f821a28abb0508b45cd/html5/thumbnails/20.jpg)
JS let’s you build both.What do you want to build?
factor10.com :: @aslamkhn :: aslamkhan.net