 Two people so as long as there's and if there's too few laptops you can use mine And if there's still too few laptops and we can have three people every now and then So if anyone is wondering what's going on here The coding dojo and We've got five minutes before we start so for those of you who are showing up I think this if you're a Programmer who haven't done massive amounts of Test room development before I think this is probably going to be the most useful session that you go to on the whole conference If you're programmers who's done the massive amounts of test room development before it's still going to be fun To see if you get it with them and then we will switch if if the network helps us out that's a little bit of Time before we're starting. I'm just testing out Thing I'm a Bob. I think it will not be a big crowd this time So I think this will probably be mostly superfluous Yeah Can we have this mic on as well? It's a good point So do you did you get the slides? All right, I think we'll get started. So first I'd like to ask you guys to move a bit closer to the stage. So the Code a coding dojo like this works best when there's a little bit of buzz going on in the room It works best when there's a small crowd So you guys will get much more out of it than if there were many more people here So that's good. Good for you guys. Anyway, not so good for the people outside All right, so First question who here has written code in the last month Okay in the last in the last year. All right, so you my mind You'll be watching. All right. Oh, that's interesting. You'll also be a little bit more passive So we'll see how it that will work out for you. All right. Well come come in sit for sit in the front Okay to get started Welcome to the coding dojo. And my name is Johannes and with me here. I've got with the man who will help me Help you and also help me demonstrate how to do test room development in pair programming So this is a hands-on session I hope that at least half of you brought computers and it looks like it from an informal count And I hope that you have a development environment that you're comfortable with on those computers We'll get into that So I'll give a little bit of an introduction of what a coding dojo is come in come in You haven't missed anything come but come forward because I need everybody to be gathered closely together So we'll talk a little bit about what the coding dojo is while people are arriving We'll show I will show together with a buddhim what ping-pong programming looks like then we you will get to do a programming exercise and Then we might repeat that exercise because it's through repetition that we really learn and then we Won't have time for a second round But if we had more time, we would do a second round So a coding dojo is a place where programmers come together to practice in a group of people So this is an example from our first Code retreat in Sri Lanka, which is a which is one type of coding dojo So that's the people the second part is the practice So this is an example from a Kiev in Ukraine where I Gave a coding dojo two years back and What people are doing on the picture is what we call deliberate practice, which is to practice with a purpose with a purpose of learning and That is really how you become an expert at your craft is by slowing down and repeating what you do many times and Reflect on different ways of doing it. So that's what we'll have the chance to do and We do it in a social setting part of it is because One of the most important practices we'll be working on is pair programming and The scary part of pair program the difficult part of pair programming is to be comfortable Programming in social setting so that's why we've got the other people here And that is a very good way to improve But it is it takes some time getting used to but also it's a good way to get to know new people and to have More fun working together so it's more fun to work together than to work alone Here's another picture from a coding dojo in Oslo and it contains sort of to wrap up It contains the most important elements of coding dojo. It has code it has programmers and it has beer But we won't be having beer this time around. I'm afraid if you guys are very interested and we might Drag it into the evening and maybe get some beer in the bar This is ping-pong programming. You have two people so it's pair programming You have test room development Which means we write a test we make it pass we write the test will make it pass you have refactoring so when we've made a test pass will improve the code and We put it all together. So I will write a Failing test and Budima will make it pass. He'll write a failing test and I'll make it pass So that's the ping-pong part of it. And it's a very good way to practice how to share the keyboard together Pair programming doesn't necessarily work like that when you're doing it full-time it's not necessarily as as Rigorous sharing, but it's a very good way to practice and then we do refactoring when the code is great. So But imagine we get started the problem will be working on is calculating leap years and Do you have your environment ready? All right, so we'll switch to Budima's computer. We will be working with C sharp and visual studio, but these skills are independent of Programming language So while Budima is setting up here, maybe Or maybe it goes very fast. Yes All right, so that was a bit unclear Shall we increase the font probably enough. All right So I put him is changing the background color and increasing the font. So at first who here thinks of themselves as a programmer All right, so there's A few of you who didn't raise your hands Of so who didn't raise their hand? All right, so Do you guys have experience programming before? Yes. All right. So you will probably have a more passive role In your pair or you might be observing another pair for those of you who are Programmers, so what's your programming language? Your your preferred programming language JavaScript. Do you have a setup with a testing environment for it? All right, so we'll have to work on that a little bit and the network here is slow so that You have node and npm installed NPM node package manager, right? So you can already now you can do npm Install minus g mocha So that goes for all the JavaScript programmers as well. So who's the JavaScript programmer? You're the only one I think all right. So what's your favorite programming language? you would use Java and What programming tool do you have? Good eclipse is very easy to get started with Who else uses Java? You use a clip as well. Yes. Do you guys know each other? Great Okay And your programming language She's C sharp. All right. Who else uses she's C sharp and use her Ruby and you have an environment with the tests Framework set up good anyone else using ruby You're using your ruby great Okay, so what programming languages have we missed? So user which right so you probably will be comfortable with a C sharp developer or a Java developer I think not so much with a JavaScript developer. So you did you get it? It's it isn't but if we increase the font I think it'll be okay, okay, so You're starting with the npm thing. So, okay, so we're just get started All right. Do you want to write the first test? So the problem we're working on is calculating leap years. So Which years are leap years? Does anyone know? Years that are divisible by for our leap years good Come again and not 100 except 400 yes, so there is So what's an example of what's a good example to start with so what's a good example a year to write the first test for? 100 well when you go before six and hundreds everything is weird. So we're not probably not going to move there any other suggestions 2000 it's and is 2000 leap year or not It is but it isn't but it is so it is an example that covers all the Except the special cases. So I don't think it's a good place to start, but it's a probably good place to end All right. What's it? What's a simpler place to start? 1999 I like that. So that's not a leap year. All right, so 1999 is not a leap year. Yeah, that's good 1999 Moka mo cha. All right, so we call the method is sleep here Calculator good. Nice. We'll just leave it there for now and I can move it later. That's good Can we get this mic turned on so that returns a Boolean I guess Yeah, that's good False All right, so the test is failing and then I will take over and I'll make the test pass So what's the simplest thing that would possibly work? So that makes the test pass. Thank you. All right Any refactoring? So we move the initiation code to the class level refactoring I think that's introduced field like this. All right, I think that's enough for now and What's a good next test case for them? So 2012 2012 should be true. I Run it. I think we forgot a stamp. I don't have to catch up later Okay, you so what's the simplest thing that could possibly work now put an L's maybe yeah So First yeah, they would be to be divided by four. Yeah, I think we can just say if the number is divisible by four then we return True. All right, and I forgot an important step high five That's an important step of ping-pong programming See so what would be our next test? So does anyone remember the next exception case and others say I think we're outside of the range of reasonable expectation. I think we're gonna focus on the modern years 2000 yes as 2000 leap year or not Yes, and what will the code do now if we tried for 2000? It's a special case. Yeah, so there's a simpler special case. I Think two thousand one hundred would be a good example because since two thousand one hundred is not divisible by a hundred. It's Or rather it is divisible by hundred then it should not be a leap year Sometimes you wish that that earth was just a little bit more well-behaved going around the Sun Yes, that seems correct And now I see something here that looks very similar to what I like so I'll just Use to copy paste the same pattern and now comes your Your case with two thousand I think So two thousand is a leap year Because it is divisible by four hundred So we had divided by four hundred. Yes Could be just like these two. Yeah All right, so that is the leap year calculator cotton it is a very simple example and We use it to demonstrate the back and forth the red green red green cycle One is a good time for a factory and the kind of discussions that we have among ourselves and also introduce including you guys So what what do you guys think does this look easy or difficult? Easy. All right, so yes, it's running all the four test cases here In the test runner. So here they are. Yes a very very good point. So the Strength of our tests. So this this would be a very Reasonable error to introduce there and now a test should fail Yes So our tests are at least caching some of the problems Okay So I'd like to Review the rules of test room development. We don't have any markers. I'm not going to use that board Does anybody know the three rules of test room development? Red green refactor those are the three steps, but I'm thinking about uncle Bob's three rules of test room development What's the first thing you should do when you're writing when you're doing test room development? Yes, so you should write a test which fails. So how much test should you write one test? Yes, the first failing test. Yes, so you should you should only write enough tests to go to read only enough of the test to go to read and When you've written a failing test, which what should be your next step? Make it successful. So that's the third step and how much code should you write exactly? So you start with the test you only write enough tests to make it go read and only enough code then to make it go green Now if you'd only follow these three rules, you might be left with a mess on your hands So what do we do in order to? avoid the mess Refactor right and when do we refactor? When we're on green so that's that's the three plus one is So start with tests only enough tests to fail only enough code to make it pass refactor What do we refactor code and and the test? Yes I like to add a step number zero before those steps. So what should we do before we start writing the first test? It's a tricky one What what do we do before we write the first test? Think of it think of something. Yeah. Yes So the first step is to think the second step is to write a test The third step is to only make them enough tests to make it pass only enough Surveil only enough code to make it pass and then refactor shall we Look at problem that you guys could be solving So I think that this is probably more simple than we need to do now So we'll work on a little bit of a more difficult problem So who knows Roman numerals Roman numerals. Yes Let's write a function that takes a number and returns the number not a Roman numeral. All right So what would be a good first test case now? We're on the thinking step. We're thinking together What's a good test case number one? One. Yes, and what should one return? Yes, good. What would be a good second test case? To and what should to return? All right, I think you're getting the hang of it and what's a good number test case number three Or possibly it depends on how you implemented to So if you implement number two with a loop Then number four is good. If you have implemented number two with an if test Then three right And then so we've covered some of the Roman numerals. So what is five? V okay, and what is let's say what's ten? X all right, and what is 1999? Yes, something like that the 1999 is MCMXCIX and Some scholars wonder why the Roman Empire crumbled. Yeah All right, so I think so you guys understand the problem and I think you understand the approach So remember only so start with a test only enough test to go to red and only enough code to go to green So this covers the TDD part. What was the other practice that we're gonna do today? Very problem. Okay, so you need a pair All right, so I have So let's see who's a who's in Java working in JavaScript You're You're working in JavaScript, and you're working in JavaScript as well Good who's working in Java e people or so who's working in C sharp? so look around a little who's working in Ruby and And what else what are the programming languages have we not covered anything who wants to do something else? No, all right, so there's two rules for forming a pair Find someone who wants to program in the first programming the same programming language as you That's the first rule and the second rule is find someone that you don't know already to find someone that you haven't met before and then Get it it would be helpful if you guys stand up so until you found someone stand up And then when you found someone you can sit down. So if there is someone Who who's not comfortable programming you can go together with someone who feels like they don't need such an active partner You can go together with a group of two people already. All right, so Working walking around and help Yes Hold up a hand if you need help with setting up your environment to run tests doesn't sound like it has much to do with Market itself sometimes it's worth just trying Do you can you can you so you're comfortable with Jasmine? All right, so and you have it installed as well So so yeah, so Jasmine or market would both be okay So my preferred one is market, but if you have something that's worked then use that You probably won't be needing spice and mox for Roman numerals Yeah, so if you're comfortable with it, please first use that All right, so you just arrived. All right, so what's your favorite programming language? JavaScript You also want to program in JavaScript? So do you have a computer with you? All right, but you've got Yeah, I think there's power supply over on this end here So you can join up with this and he'll catch you up with what's going on tip is to Wait with the or to start writing the first test up until probably five before you start looking too much into the Whole thing of it so that you have some tests that are starting to run and you know what questions to ask Before you've written the first test you probably will ask the wrong question if you try and look at Wikipedia Wikipedia talks a lot about what happens after 4,000 which is No, 4,000 at the number 4,000 the largest number that can be represented within the normal rules It's three thousand nine hundred ninety nine and after that things go crazy So do you have a pair? All right, Aruna, how about you working together with come again? Yes, please You're not doing you're not joining him. You have to sit there. That's no longer your problem So using Java looks like you don't have the reference to the JVM. Have you configured the JVM on your Well, it's that's it should be okay as long as you go to it. Oh, right. Okay, so you guys Are you comfortable with the clips as well? What about you? All right, so so there is eclipse here as well So you could try that to see if it's I've always had bad luck with IntelliJ, it's sort of the opposite of my lucky charm All right Well, if you haven't used Intel J either. All right, so obviously Intel J is not the right tool for you guys so do you have Do you know how to set up the task environment with eclipse how to write your first task No Yeah, so Normal Java project is usually just as well so you got here Yes And actually the easiest way to do that now is if you write a new class No, you've just just added class so and call that so What yes, so what do what do you want to call the first test plan? Yeah from German test fun for now and here is a nice trick with the clips so when you Get it open. So right Test inside of the class body with a capital T Control space. Oh, I think this is control. I think you rematch it there. Okay, and then yep There's a kind of interesting way to do this is when you do Yeah The indentation is correct here control space control space enter and then you write a name for the test So here now you got a compilation error here. So if you if you go to that line So Control yeah, so the way to do it go there No, no, no. Yeah And there you got So if you're also also using the keyboard shortcuts, but that takes about 10 seconds. All right So now you got the first test Method in place and I think you got everything you need if you now have to write in the search You got the first one to pass So I'm now you're working on Yes, I think so All right, so yeah, you're Okay, all right, who's got a green test Passed. All right. Did you guys remember the step that what am I and I forgot? High five. Yes, I want to see more. Did you high five? Oh, great Yes, okay. Yes. So this is that's a improvement point Good. So you guys want to join? All right, you should write that make the test fail before you start writing code. So Actually, yeah, you could do it that way as well So what's what is your problem? Oh, yeah, you need an insertion. So actually These are static imports and they got deleted when we did when we saved as a tad clean up import search Control but assert equals like this That's all that you need All right, so then you call something here. So If you're if you're stuck with something Basic like how to get your test to run then raise a hand It they probably will take a long time to learn everything about testing on the internet before before you're Before we started Don't overdo your design now now one Do one case at a time. Yes Until until you see a pattern just do one case at a time So the biggest Mistake that people do when they try and learn or try and apply TDD is to take two big steps The key is to take the key is to take a small steps as possible Now it will take longer if you take bigger steps in the short run as well because That sounds good Now when you're doing that you'll yeah, so so that will get the test to pass very fast if you just do the if test And then you actually need one of them to be an else instead of an else if that should pass the test so right and Now the important step is to refactoring So now is green now you can refactor so This approach that you have here it doesn't seem like it's really Doing what you're we're not facing the problem like we're supposed to right so we're you're probably supposed to build Up that return value and then return it somehow right so then you can change that to do that But only for those cases So that would be probably introducing a local variable. Oh, you should keep the time the code there until you have something new working You should try and find a small place to refactor between each test case Between each case case take a a quick Check and say okay. Is it is it okay, or should we do something to refactor now? Generally the person who made the test pass is the natural person to start with the refactoring but It's something that's you can go a bit back and forth on That that looks good And now the question is what's the simplest thing that could possibly work So your partner should now make it pass right and see how fast you can make it pass Just make it pass without thinking about how you're doing it and then refactor right you skipped two You see why that's gonna be a Impacting your design in a negative way Too doesn't really fit into the pattern that you made You took too fast You didn't take enough small steps because that's that pattern will Will not look so good for two and three. I think step Refactor, okay, what would you like to refactor in the current code now? That's so but you don't have a test that indicates that that wouldn't be a refactoring That would be a design change Yes, so what's a good test number two? Good, I Gave you a little bit of a hint there. Would you like to join? Well, you didn't implement it correctly So the copy paste design pattern can help but it requires but it's very helpful to have a Programming partner to help spot. You also need to change the output All right, so now remember that the person who Who was writing the test and passes the keyboard to the other person to make the test pass And now when you're when you're in the state of red, you should be afraid of red So get to green as fast as possible and then start thinking so when when the code is red Don't try and think too much Get to safe place and then think more testing less talking You will not get more comfortable by asking question you'll be more comfortable by seeing more code Yes Yeah, just go go on Simplest thing that could possibly work now your code deals So your code has sort of run the test check it This is kind of redundant because you got these tests are sort of trying to do the same thing, right? So is it natural to check for high numbers first or low numbers first? Yeah, exactly Yes So now You can run it Yeah, there there is is like this this and this should kind of work, but it doesn't right. Yes Good. That's that's good. All right. So that as you see that passes, but you probably shouldn't do it because here you're Checking so now you're checking first for low numbers and then for high numbers, right? So what's the natural is that the natural order or would it be better to check for high numbers first and then for low numbers? Which one will exclude the other and we've been going for one hour. How long do we have do anyone remember? Until five so half an hour. All right, so Now How many got to? Let's say thousands You're at four. All right. So how many how many got past four? All right, and for those of you who did how many of you had The I repeat in one two and three. So how many of you hard-coded one two and three as or hard-coded three as II All right. Yes. Yes first time, but you did the refactoring, right? So yes, good. I'm very proud of you for saying that you did That's the first step to fixing your problem It's admitting that you have one. All right. So if you did if you continued from three with III You didn't refactor fast enough Now I thought that what we could do here is to have a to have a little bit of a demo and and reflection and then To spend the last 15 minutes or so doing it again. So though the key is To doing it well is to repeat Who would like to help me to do a bit of a demo? I think C sharp Yes, we'll do C sharp. Who's the C sharp programmer? Would you like to help me with the demo come again? That that makes it even better All right, we don't trust Test test. So would you would you like to come up test project? I'm just gonna make a simple unit has problem Just come on. It's it's a very cute solution The one that you've got. All right, so we got this working for us. So shall we rename it perhaps? What's a good name? Convert to Roman test. All right, and what should be our first test method? Let's let's do the simplest thing Should convert one. Yeah. All right, and then for now we can just do something local. So we say a search dot are equal So it should be I write and then to Roman of one And I'll make it compile. This should be a string string and then I'll run it The test runner Is a bit slow should convert one. Yes All right. So what's the simplest thing that could get this test to pass and V9? Simplest thing is I check whether P is one and if it is one, I'll return What's even simpler than checking if this one just return one. Yes, dude more code. Let's think so Come again, and there are on red They add code and not think on green think so That your instinct should be okay The code is read the first thing we need to do is to get to safe place. That's the green place And I think if you probably notice that if you if you haven't done pair programming before you probably noticed that it Do you can press run all here? You probably noticed that it's a little bit nerve-wracking to Pro oh high five. It's a little bit nerve-wracking to a pair programming. It's to pair program It's really much worse. What Avina is doing now standing on stage here. All right So it's your turn to implement the next or to write the next test. What's the what's a good test number two? Yes, I Copy paste that one. Yeah to Roman so So one of the things that so control r a so yeah So let's go of the control so control r a like this All right good So I one of the things that you learn when you write a lot of chances that the place to start is at the top of your method So what's the simplest thing I can do at the top of my method now if p equals to return? Hi, that's the simplest thing that will make the test pass now That's probably the simplest thing. It's at least very simple now Is there any repetition in my code return? That's that could be a repetition. I think that you're right I think that we should have a local variable here. So we could call it Roman and that's So we can do this and then we say Roman plus equals and That's this kind of interesting So sorry Roman So that's now there is kind of a Yes, thank you That's thank you for good programming there. All right. So now the repetition is even It's quite obvious. So what if I say so if it's greater than one we add one And if it's greater than two then add one again At this point in time, I could use a for loop. I think that that's simpler than what I've got now, but there is sort of thing that So this is a nice trick. So we'll do Minus equals one here and then we can do the for loop that should pass still All right, I'll leave the next refactoring for you What's the next test I should write? Five what's before five? Okay, so three will three pass All right, so So I'll try so no nobody could give me a definite answer for whether three would pass or fail I'll try it. That's the simplest thing is to see okay. Okay. It passes. So that means that okay I don't really need it. I can skip it, but it was good that I wrote it because now I Have then I can do Then I know that it's passing and I can continue. All right. What's the simplest thing that mean I can do now to make it pass Special case. Yeah Brilliant I love it it is it is And The least amount of thinking while the code is red and then we can start thinking all right So you need the semicolon before the early a keyboard skills go down when you're programming in front of a crowd Yeah, so control R and then let go of control and then up a it's one of the best I want to benefit to pair programming is learning Shortcuts like that. Ah high five All right So we did one refactoring with looking at a Logic I Would like to think of another refactoring. So what's the simplest refactoring out there? What's the simp? What's the what's the essence? What's the first step to get assigned? Yeah Rename are not necessarily method. What can we rename? What should we rename variables? Which variables what P? P is a horrible name It was a very name. I like it will do that There is a shortcut and there is also one thing I I often did the shortcut I often stop people doing it this way because I knew the shortcut, but there's two shortcuts Now you you just learned another one if you're if you only knew the one all right. So what about the logic now? What do you how do you feel about it? Yeah, so if it is above Three Then the V comes into picture Right, but I'm just talking about the structure now So these this is kind of a different structure is are we comfortable with that or should we do something about it? What do you think? So in this case with your return here here we do the return at the end and should we try and make it always return at the end So what we can do is like this is Roman is equal to and Then we need it to so yeah needed to close the quote and then Now what will happen is that it'll add these so when we have to reduce it by four we have to set it to zero So it doesn't do that So number that should work Now I don't like the Curly's here. Can you put them so that they're consistent? All right, I think that's starting to look good Next test It's your task. What's the next number that will not pass? All right, given the code that we have can anyone see say, what's the simplest way that I can make five paths? hard code and Is there anything that I can use as a template for how to hard code it? Right, so I'll use that as a hard code template so so now when we're when So I'm allowing myself to copy and paste code here But I'm also noticing it when it happens that that is probably a situation where we should refactor so This and now we got these things here. That's identical So what what should we do when we have like a block like this? What's the refactoring? extract method so convert Roman symbol so Here I need this to be about a parameter in this to be a parameter if I had and Resharper it would help me do this, but visual student itself doesn't so This is the string symbol. I and this is the Value of that symbol so we say value and we say symbol So that Hopefully passes the one for four. Yep, and then I can add five here as well So now it's starting to look like it's some code with a little bit of structure What's the next test that will fail? Six this one is a bit trickier. So what's the simplest way to get it to pass? Here we can there are a few different approaches here So Let's look at why it fails. It says I do what do you think it fails? So, I mean I was in this case It needs I and we are not considered that case. We are only So we're not considering when it's larger than five. Yeah, so change it here. Maybe So we can say if the number is greater than or equal to the value All right, try to try and run that see what happens So Sometimes you're kind of at a loss for what's going on and then okay, he gives us V Why does it give us V does anyone see? What happens there? Which line is the problem on come again? The greater than well, that's that's what kind of triggers the behavior But we want the V to come out there, but then we want something more So why doesn't there why isn't there more coming out? So we should put one in that case so that it will also pick up one letter and take the Well, yes, we need to do that. But so here we're doing something weird. Yeah This isn't good. Yeah, so we make it minus value So then we take out those five from the from the Roman number Yes, good job any refactoring I think we're good. All right. What's the next test? Seven eight so seven and eight will they pass? Yeah, so we're pretty confident that they will pass nine I guess it's the next one then All right. Do you want to do nine? All right, so how should I implement nine? So, yeah, it's so nine is just like four So that means that we've got it almost covered. We just need duplication of that one to control Yeah, control our a That's the one of the harsh keyboard shortcuts to learn in visual studio if you haven't done it before so very good job for learning it So we said, let's just copy this one So that's IX and nine That is interesting Hmm, very interesting good Okay, so What's the next one that will fail and this is a little bit tricky I think Ten. Oh, that's not tricky at all Okay, I think you've got an easy job now. Yes, I think so so you just you can just duplicate that one for 10 So a good way to do that if you're not selecting anything control C control Yeah, so if you're not if you don't have anything selected control C control V and I think you want the 10 before the nine Okay, and now maybe a little bit tricky which what's the next one that will fail 10 passes We're pretty happy with the cone 14. So let's try that So 14 should be so why would 14 fail? Yeah, I Think you're right and I think it's It's too bad that you're guessing because if if you weren't it would be very perceptive because there are three numbers that Will come into picture for your head for dinner. Yeah So it does fail and it does fail because it's for Which line is to blame pretty beautiful isn't it? This here says take stuff out of the number Come again Yeah, so this moves stuff from the number and into the Roman so that's that's very harmonious Those two lines they were they looked good together. They're a perfect couple. All right. What's the next number? Yeah, so we probably could have seen that right away because it wasn't quite harmonious the way it was but it's fine All right, what's the next value that will fail? 20 Yeah That will be the last one. I think that we'll do now Ah Thank you 20 and oh, yes Pastein isn't always so good. All right, so what will it do? Does anyone want to guess what will it say? X and then I Think it'll say X V IV I X I X I who knows why so what I don't know what's going on there X nine and one We'd put X nine and one Yeah, right, so it's one plus nine plus one. So that's it's doing it kind of correctly. It's just it's Roman it's not Roman way All right, so does anyone can anyone see what we need to do to to fix it So what's the what's the problem? What what are we not doing correctly in the case of the axis? What happened for the right? We need to repeat the axe. He said it here. We're only checking once How can check more than once? Why? Yes Go for it. It is something here. Yes. So so that's That's the smells like a refactoring should be coming up high five All right, and then like you said, this is the same. So yeah, so do you want to replace this loop with a another call to convert? So if you do that before the loop It I start by adding the other one So this is a good way to make sure that we're not moving very far away from the safe path. That's this probably should work So try and run the test Let's do this so run it like this it's running running running and it passes Then we can delete it then we run it again Because it already ate up everything so that loop was not executed high five All right, so is this starting to look like something having to do with converting Roman numerals? All right, we've got about ten minutes left. Would you guys like to try again what you did? Yeah But you didn't do it with your hands. So See how far you can get with this in ten minutes And I'll gonna ask you to stay five minutes over time so we can do a quick quick wrap-up of what you learned All right, so ten minutes of delete your code and start over again Now here, don't you have someone to pair with down there? It's your laptops so that I know I have your attention All right, thank you so close your laptop, but you can continue afterwards if you want to And it will have just a few questions. So All right, so what's one thing that surprised you about the last one and a half hour? No debugging so who fired up the debugger You did now so none of you debug that's anything that's interesting so That's that's a success. I think Okay, so what surprised you so small steps are often so you have to make the steps even smaller smaller steps Less you move faster All right So what's one thing that you learned? Yeah, sure. I was pointing behind you, but we'll do you afterwards. Yes, which one thing you learned perfect so a different way of thinking about the test so to do one test at a time and I Don't think that it's necessarily the only way or the right way But it's very useful to learn this way in addition to your your own way So what did you learn? That's that's always good. We always need more Roman numeral solvers out there. All right I Okay, Vinay What's one thing that you all that you plan to do differently when you return to work? So you're talking about the TDD approach So Vinay would like to try the pair programming and the TDD and I would really love it If you would write me an email Telling tell me how it went So who else wants to try pair programming and TDD with small stacks when they return All right, I would really appreciate and if you send me email on this you find my email address at the I'm Here oh no not here, but here And on the conference program Please tell me how it went. Please ask for help if there is anything I can do. I hope to enjoy I hope you enjoyed it and I hope that it will Help change the way you work Thank you, and I'm sorry for stealing three minutes of your time