Introducing the Project11:25 with Craig Dennis
We developers spend more than half our time, maintaining code that in most cases we didn't even write. Let's get started in a simulation.
- Learn Java Track or a basic understanding of the Java language
- Local Development Environments or some basic experience with the Intellij IDEA IDE.
- Dependency Management with Gradle or light experience with Gradle
- GitHub Basics or a general understanding of how GitHub works.
- Spring Basics or some basic knowledge of how a Spring Application works
- Build a REST API with Spring or some light experience with Spring Boot
[SOUND] Hello, I'm Craig, and I'm a developer. 0:00 Did you know that we developers, on average, spend more than half of our time 0:06 maintaining existing products, as opposed to writing new ones? 0:10 If we're going to take up more than 50% of our precious work time in maintenance 0:14 mode, don't you think it's a good idea to get some hands on practice on how 0:18 that might feel? 0:21 In addition to gaining that experience, I'd love to have you sharpen 0:22 your debugging skills so that you can make better usage of all that time. 0:26 So that's what we're going to do for this workshop. 0:30 We're going to drop into a very common scenario. 0:31 We're going to simulate a common development pattern that happens to both 0:34 workers at agencies, as well as self-employed contractors. 0:37 But before we get started, remember that there are video speed controls, 0:41 should you need to speed me up or slow me down. 0:44 Don't forget, check the teacher's notes on each video. 0:47 I'll link to places where you can learn even more information, and 0:50 I'll expound on things presented in the video. 0:52 For instance, right now, please check the prerequisites so 0:54 we can make sure that we're on the same page. 0:57 Finally, please ask questions, your community of fellow students is friendly, 0:59 inviting, and ready to help. 1:03 Also, if you feel like you can answer a question, give it a spin. 1:05 Everyone wins, and you'll learn a ton from providing answers. 1:08 Okay, so here's the typical scenario. 1:12 A client comes to you and says, hey, I got this app developed for 1:15 me from another group of developers, and 1:18 it's pretty much working, but it keeps doing this weird thing. 1:19 Can you fix it? 1:23 You, of course, say something cautious like, sure, probably, let me take a look. 1:24 And sometimes you get super lucky, and the app's well documented and 1:29 thoroughly tested. 1:32 But most of the time it's just not. 1:33 In fact, it most certainly is not how you would have programmed it. 1:35 It's written in a totally different coding style than you normally use on your 1:38 projects, and there's usually, literally zero tests. 1:40 And on top of it all, it has this monstrous, undocumented, poorly named 1:44 methods, and it's sort of confusing branches and looping and, yuck, right? 1:49 But you got to pay the bills, so you take it on. 1:53 Now, this is such a common story that I thought we should play it out together. 1:57 So what do you say? 2:01 Let's imagine that we, me and 2:02 you, we're running this little web consulting business together. 2:04 So we're out networking at a meet-up as we do, 2:07 and we start chatting with an owner of a little startup. 2:09 Now, their business model is to assist people in passing certification exams. 2:12 So they have these different study tools that help their students prepare for 2:16 those exams. 2:18 It seems like a pretty cool idea, right? 2:19 Well, they have this flashcard web prototype that they have 2:21 some other firm built for them, and they're pretty happy with it. 2:24 If flashcards are a new concept to you, 2:28 they're a pretty common studying technique for terms and definitions. 2:30 Now typically, 2:33 one side of an index card, like this one here, has a term like this, JVM. 2:34 So, what does that mean? 2:38 The idea is you look at this and try to remember the definition. 2:39 So, what does JVM stand for? 2:43 Come on partner, you know this one. 2:45 So on the back side, here's the answer. 2:47 Java Virtual Machine. 2:49 So the owner tells us they're pretty happy with the digital version of the flash card 2:51 concept that the firm delivered, but the contract's up, and 2:54 the other consulting firm had gone way over budget. 2:57 Now, since you seem so knowledgeable and friendly, good job, 3:00 by the way, they were wondering if we were interested in taking on the project and 3:03 making some tweaks and bug fixes. 3:07 Think we should take it? 3:08 Yeah, me too. 3:10 Let's do this. 3:11 Okay, so the code itself is a Spring Boot application, 3:12 which we have some experience with. 3:14 And I'm sure as a team, we can figure this stuff out. 3:16 Let's download it and get it up and running. 3:19 All right, so to begin the simulation, I'm going to need you to fork this repository. 3:22 Now, that way we can both kind of make changes to the repo. 3:27 So here I am, I'm at the repository. 3:30 It's linked in the teacher's notes, 3:32 along with some more information about GitHub in general. 3:34 So what I'm going to do is I'm going to fork it. 3:36 So I'm going to click fork, and I'm going to choose my personal account. 3:38 And there, now it exists in my personal account as a Java-debugging-flashy. 3:43 Now, unfortunately, since issues don't come across when you fork, 3:48 we're going to have to do a few more steps later. 3:52 So, the first thing that I want to do is I want to grab the clone URL. 3:55 I'm going to come over here, and notice that mine says Clone with SSH. 3:58 I'm going to switch between these two, I'm going to do that one. 4:02 Choose the git, and I'm going to flip over to my IntelliJ. 4:05 And notice that I'm using 2016.2. 4:08 That's the current version, and my version might look a little bit different. 4:11 So here, what I'm going to do is choose Check out from Version Control, and 4:16 I'm going to choose GitHub. 4:18 Now if you haven't set this up before, 4:20 you might see a little bit different of a interaction. 4:21 I have two factor authentication installed, so 4:25 I need to put in a special code, don't worry, it expires, so you can't copy this. 4:27 Cool, and now I'm going to paste my repo there, and 4:34 I'm going to leave all those defaults just as is, and click Clone. 4:36 And it says you've checked out an IDEA project because we cloned it locally, and 4:42 yeah, we want to open it. 4:46 We want to take a look. 4:47 So we'll click Yes. 4:47 We definitely want to import the Gradle project. 4:49 It really wants us to click that twice. 4:51 And then I wanna choose create directories for empty content roots automatically, 4:54 just in case something's missing that Gradle wants. 4:58 So I'm going to click OK. 5:00 Okay, so now everything's installed, and 5:04 we should have a nice slew of external dependencies, look at all these. 5:07 All right, that's looking good, and I'm going to open up the project here. 5:11 And one thing that I noticed is these are going to be using a different style. 5:15 I saw it, I was looking down here at the repo, it says contributing. 5:21 The original authors of this code use the Google Java style guide. 5:26 So I'm going to click the link here, and just take a look really quick. 5:29 So, Google has their own style because they have so many projects out there, 5:32 and they publish the Style Guide, which is awesome so that people can use it. 5:35 And they do things a little bit differently than the defaults of what your 5:40 editor might be, so for instance, block indentation is two spaces. 5:42 Normally, the editor's at four. 5:46 So, one main thing that you're going to notice as soon as we open this is that 5:48 the code is all it two spaces. 5:51 So I think we should switch to use that Google style guide. 5:53 That doesn't mean we have to go switch all these settings because there's actually 5:57 a really nice implementation which has very nicely been linked here 5:59 in the readme by the creators of this repo. 6:03 So I'm going to click that and 6:05 open this up, and this is a fork from the Google Style Guide, and like I said, 6:06 there's a new release currently of IntelliJ, and so, there's a branch here. 6:11 That's the IntelliJ2016 branch. 6:17 I'm going to go ahead and click that. 6:19 This might be a little bit different if you're watching this. 6:21 I'll try to update that link so you can go to the right place. 6:23 So what you want to do here you want to find your file, so this looks good. 6:26 This is what we want, you want the IntelliJ Google style. 6:31 So here it is. 6:33 These are all the settings, and basically you can import this into the editor. 6:34 So the way that you do that is you download this file. 6:37 And to download in GitHub, there's a little trick. 6:40 If you click this raw, 6:43 it will just show the raw page without the GitHub stuff around it. 6:44 So if we come back. 6:47 If we right click here, and we choose Save Link As, it will allow us to save. 6:48 And I'm just going to save it in my downloads directory. 6:54 And I'm going to flip back now to the project, and 6:57 I'm going to choose IntelliJ > Preferences. 7:00 And here under Editor > Code Style, 7:04 if I choose Java, I can choose Manage and Import. 7:06 And again, so that scheme, we're going to manage the scheme, 7:13 and we're going to import IntelliJ IDEA code style. 7:16 And in my downloads directory, I'm going to find that file I downloaded. 7:20 I'm going to click OK, and I'm going to call it Google Style, that's great. 7:24 And now and I go ahead and click Close, and 7:28 what that does that imports the settings for us. 7:30 So, see, here's the indents at 2, as opposed to 4where normally is, so 7:32 I'm gonna click Apply, and I'm going to click OK, awesome. 7:36 And so, because we are using Git, it's going to ask if we want to add this. 7:41 Let's go ahead and say Yes. 7:45 All right, and now that we've got that all set up, 7:47 I'm going to blow us up to full screen. 7:49 Let's navigate around in here and 7:51 let's see if we can't find a common starting point. 7:53 So, in Java > App, let's see what's in here. 7:55 Let's open this up. 7:59 And this is a Spring Boot application, okay. 8:02 So if we click this play here, let's do this Run > Run. 8:04 And we'll choose App. 8:10 Okay, so we are up and running, and it started on port 8080. 8:20 So I'm going to go ahead and open up localhost:8080 here. 8:25 Well, this is our app here. 8:32 All right, so let's click around, so refresh your memory. 8:33 Let's say, let's get started. 8:37 So, nice, there's a card here. 8:39 I'll click this. 8:40 And it flips, cool, and then we can choose next. 8:42 There's the next term. 8:44 And it looks like it says how many times it's been viewed, and 8:46 you just keep on clicking next, awesome. 8:50 And then the times change there. 8:53 Cool, pretty nice application. 8:57 Let's flip back here and let's navigate around a little bit. 8:58 Let's take a look at the tests, and uh-oh, there aren't any at all, yikes. 9:02 So, because this project is from GitHub, you can use open on GitHub. 9:10 If you right-click and choose open on GitHub, and 9:15 what it will do is it will open a window for you, and this is handy, 9:19 because this is where our issues are going to to be at. 9:23 Which reminds me, we need to run the Bootstrap program. 9:29 So, the Bootstrap program is, if we go to local host, then we go to 8080, 9:34 then we and go to bootstrap/GitHub, 9:38 this what we're going to use the copy our issues across so that we can have them. 9:41 So, I wrote some instructions here for you. 9:48 In order to copy issues across, you need to create a GitHub personal access token. 9:50 So go ahead and click that. 9:54 And if you come in here, you can click generate new token, and we'll 9:55 do something like treehouse-issue-copier is what the token description can be. 9:59 And I just want you to click repo. 10:04 And we're going to create this, and then we're going to delete it right away, so 10:06 don't worry. 10:09 I'm going to generate the token, and this token is going to be a one use only. 10:10 So you can copy this token, and I'm going to delete this token when we're done, 10:15 so you can't hack my account. 10:19 So I'm going to click over to Flashy, and so 10:23 I am going to paste it in here, and then I'm going to click Submit. 10:26 And it's going to just make sure that this is the right place, 10:32 make sure that this is the repo that you want, and that this is your name here. 10:34 And I'm going to click fork it. 10:37 Cool, and it went ahead and it added all of those issues. 10:40 So if we come back over here and we refresh, now, see, 10:43 that there's issues in there, there's six issues in here. 10:46 I'm gonna flip back to my personal access tokens, and I'm going to click Delete. 10:49 And I understand, delete this token. 10:53 Awesome. 10:55 And with that, I think we're ready to get started. 10:57 Okay, so the app looks pretty great, and it seems pretty functional. 11:00 It is a little alarming that there aren't any tests, but 11:04 it's not the end of the world. 11:06 It just means we'll need to lean a little bit harder on our old 11:07 friend, the debugger. 11:10 So we can pause the code and 11:11 check its state, just to get a handle of what's going on line by line. 11:12 If you don't have too much experience using the debugger, don't worry, 11:16 we'll walk through its power here in just a few. 11:18 Let's take a quick break, fill up your beverages, and 11:21 let's take a crack at our first issue. 11:23
You need to sign up for Treehouse in order to download course files.Sign up