Previous Semesters
Previous Semesters
Previous Semesters
Hello and welcome to CC410. My name is Russell Feldhausen. My contact information is here on this slide. You can also find it on the syllabus and on the homepage on Canvas. I will be your instructor for the semester in the CC410 advanced programming course. So in this course the big picture is we’re going to cover a lot of programming topics including object oriented programming, unit testing, design patterns. We’re going to learn about building graphical user interfaces, web interfaces, and we’ll do some work with serialization. The way we’re going to do this is a lot of guided example projects where I will have longer form like 45 minute to an hour long videos where I do a smaller example of what you’re working on and then you’ll actually apply that by building out this point of sale system for a restaurant project. So you’ll do several milestones of this restaurant project and then throughout the semester you’ll also be thinking about and planning a final project that you’ll probably spend about the last four weeks of class working on but we’ll spend the whole semester actually thinking about it planning it and maybe getting some of the framework in place as you work on the restaurant project as well.
So in this course we’re going to introduce a lot of new technologies such as Git and GitHub classroom to keep track of our source code. We’re going to use build automation tools like Gradle in Java and Tox in Python. We’re going to introduce type checking in Python if you haven’t done type checking in Python before. We’ll do unit testing in both languages. We’re also going to do some style checking in both languages and we’re going to learn how to properly document our code and use documentation tools to actually build a documentation site for our projects as well. So in this course there is a final project you get to choose the topic it’s really the first time that we cut you loose in the computational core program to choose a topic. I generally recommend aligning the topic with your own interests and ideas and also trying to align the planned structure of the topic with the restaurant project itself. In general you want to keep the project pretty relevant to what we do in the class so for example you’re not really allowed to use to do like a video game or a web app for this project. It doesn’t really fit with what we’re doing in advanced programming But if you’re interested we can work with your ideas to try and align it to what fits in this class So you’ll come up with some ideas here in the first few weeks of the semester We’ll meet and kind of discuss the scope and scale of your project And then you’ll work on about four milestones for the final project throughout the semester and at the very end of the semester You’ll put together a short video presentation to present it to myself and the rest of the class
So this first week of the class is a bunch of administrative stuff just to get you going And then we have our first example project, which I like to call the hello real world example This is a hello world project if it was built following some more industry standards for coding It gets you experience working with the build automation tools unit testing documentation tools style checking tools All of the stuff we use in this class to build a hello world program I think it’s a pretty cool project just to get started with You’re also going to schedule your first final project meeting with me. All you have to do is schedule a time on Calendly to meet with me for about 15 minutes. We’ll just talk about the final project, answer any questions, and it’s a good chance for us to meet virtually for the first time just to chat if there are any questions you have about the class. Don’t forget, I do have office hours for this class. In general, office hours for this class are going to be by appointment only. I only have three students this semester, so I think it’ll be much easier if you just schedule times to meet with me instead of me having open office hours. The other thing that I’ll talk about is communication platforms. In this class, we use the Ed discussion tool, which is kind of a forum discussion tool that allows you to post questions and get feedback. The introduction assignment is held on Ed discussion, so everybody should have access to it and post there at least once. I also use the computer science discord server and Microsoft Teams, so you can chat with me there. And as always, there is a help address, the cc410 help email address is available if you have any questions there. So that’s the first week.
Second week of class, we dive right in, we build an object -oriented class library for our restaurant project to represent the items on the menu, so that becomes our first restaurant milestone. This project alone is about 2 ,000 to 2 ,500 lines of code depending on how you build it, so it’s already an order of magnitude larger than any project that you worked on. However, a lot of it is boilerplate code that you can copy paste, so I tell you to be very thoughtful about how you build this code, maybe build one class and then copy paste it and tweak it instead of building everything from scratch. I do totally allow copy pasting between your own code in this class. If you want to use any other resources, you’re welcome to do that as long as you clearly cite them and make sure that you’re not using those other resources to actually write your code. But for example, if you need to refer to a third -party tool to figure out how to sort something or how to build something, that’s fine, just kind of cite where you got it. I do not recommend using any AI tools like GitHub Copilot or Chat GPT or anything like that in this class. It generally produces very bad code. And it’s very poorly structured code and it’s very obvious that it’s generated using those tools because it doesn’t follow our coding standards So I don’t recommend using those But if you do use any external resources, please cite them and comment them so that I know where they’re at
Week three in this class. We’re introducing documentation and unit testing We’ll do the second restaurant milestone and because we’re adding unit testing it about doubles the size of the project to 4 ,000 lines of code My module solution for an older semester was about 423 individual unit tests So again, it’s an awful lot of code, but it’s many many repeats So again, be very careful about how you write your code and think about how you can reuse things Because even though there’s many many thousands of lines of code it’s all kind of repetitive and so there are ways that you can build it very efficiently and The hopeful thing with week three is that you catch any errors that you made by building your stuff on week two And we’ll talk about that when we get there
So then we go to weeks four and five where we introduce inheritance and polymorphism. It’s something you may have seen earlier in CC210 and maybe again in 310, but we’re going to hit it really deeply in this class to talk about it. This one, we’re going to refactor our old code in the restaurant milestone. It’s going to be about a thousand lines of code that gets changed, and it drastically simplifies the structure of the project. I have found that this is really the activity that helps really reinforce what inheritance and polymorphism does in your code by refactoring old code to be better structured. And so by the end of week five, you’re also going to schedule your second final project milestone and we’ll already be at the end of September and looking forward to October by the end of week five. Then beyond that, we’ll start introducing graphical user interfaces or GUIs. We’ll introduce web external libraries, serialization, so much more. There’s a lot of content in this course.
So last semester, I made some big changes to this course that involves splitting some milestones, moving some content around, making it more streamlined. I think that went really well last semester, so I’m going to leave it as is. Most of the changes start with module six. So if you notice any dip in quality or any restructuring of the course, it’s going to start around module six. I think it makes the course much more streamlined. But if you have any questions or content, just let me know. So some small updates as well. I updated the Codeo stack last semester. So we’re now running Ubuntu 22 with Java 11 and Python 3 .10. A lot of the example projects were written using Java 8 and Python 3 .6. In general, you shouldn’t have to change much, except a couple of version numbers, either in your Gradle file or in your Tox file. It should be pretty obvious. And a lot of times in the examples, I put a little reminder above the video that says what you need to change. The examples are being reviewed and tested. I may not exactly get them all updated this semester. So if you’re running any weird stuff with the examples, let me know. For example, a lot of the example starter code, you may just have to change one line in the Gradle file or the Tox file to update the Python version, and then it will work just fine.
So some advice for this course. This is a 4 credit hour college course. Four credit hours means we expect you to spend around 12 hours each week working on this course. That involves reading, watching the videos, working on the example project, working on the restaurant milestones, working on the final project milestones. 12 hours a week is quite a commitment for a four credit hour course, but it is what we expect. The best advice I can give you in this course is to schedule your time wisely and make sure that you are setting aside enough time to work on this course and also make sure you start early on the projects. Each project milestone you’ve got a week to work on. In general, the students that do not do well in this course are the ones that wait until the Saturday or Sunday before a module is due on Tuesday or Monday whenever I have modules due and they start on Saturday. They don’t have time to ask questions because I’m not working over the weekend and then they get behind and then they maybe lose 30 or 40 percent on late penalties due to the milestones being late. So start early, ask questions, take advantage of that help because it’s there for a reason. Likewise, if you get stuck or have problems, ask questions. In this course, if you get stuck and you find that you’re spinning your wheels for more than about half hour or so, that’s a really good opportunity to take a step back, ask questions, get feedback, and get back to it after that. Don’t sit there and spin your wheels for six hours and don’t make any progress because that just makes you frustrated. It wastes your time, it wastes my time. Just take a step back and ask questions.
Likewise, I talked about in this course, you’re allowed to copy paste between your code, especially in building out these first couple of milestones, there’s a lot of boilerplate code that you can copy paste and then do find and replace on to work. Make sure you’re doing that really carefully. If you have something wrong in the first piece of code, if you copy paste in 15 places, it’s really, really fun to go back and fix all of those. So be a little careful how you do that. Likewise, you’re going to have access to Git and GitHub classroom. Git is basically your autosave feature for working on code. If you’re a video game player, you know exactly what I mean. So I tell everybody commit to Git often. If you commit to Git and then you screw something up, you can roll back to your last commit, you can undo a commit. If you look in the documentation for Git, you can branch and so you can have different branches of things working. Take advantage of that tool. A lot of times students that don’t do well in this class, they commit to Git once per milestone and they just commit everything in one shot. And then halfway through a milestone, they’ll break something and they will wish that they weren’t doing that. So make sure you commit to Git frequently anytime you get something working, so you can roll back to it if you need to. And then finally, as I talked about earlier, you’re welcome to use online resources in this class. However, please make sure you cite them. If I see something that does not look like your code and it’s not cited, I probably will ask you questions about it and I may deal with that as an honor violation if you’re not citing your sources. Likewise, like I said before, I do not recommend using any sort of AI tools in this class. They are not helpful, they are not useful, at least for this outcome because I really want you to learn proper coding structure and technique on your own without relying on it. on these other tools. It’s like learning how to spell without spell check. It makes you a better speller by going through the motions and doing it yourself a few times before you turn on those tools.
So that’s all I’ve got for this first week. Generally I’ll post an announcements video like this about every week every other week. These videos are completely unscripted except for the slides so you’re going to see a little bit different version of me in these announcement videos than you do in the rest of the class. These are recorded live in the semester. I usually do them on Tuesday mornings. So feel free to keep in touch. Watch these announcements videos as they come out. You can post an ed discussion. You can contact me on Discord or Microsoft Teams. You can attend Tea Time office hours held through the computer science department. Those are online every Monday afternoon at one o ‘clock. We meet for about an hour on Zoom and in person. It’s a great time to just chat about life universe and everything. If you want an access to that and you don’t have the link for it just let me know and I’ll send it to you. And then you can also schedule one -on -one office hours with me anytime using Calendly. I’ve only got three students enrolled in this course, so I should have plenty of time to spend with each of you one -on -one if you have any questions or concerns in this class. So don’t be afraid to take advantage of that. I’m always happy to help. Other than that, good luck this semester. I’m rooting for you. This is a tough class, but I know you can do it. If you have any questions or concerns, feel free to reach out and let me know. Otherwise, best luck this semester, and I will see you in the next announcements video.
Hello and welcome to the week two announcements video for CC 410 in fall 2024. This week you should be wrapping up the first module in the class which includes the Hello Real World example project. All you really have to do for that project is watch the video and follow along and then submit what you have gotten completed at the end of that. You also should have scheduled a meeting to meet with me for the first final project milestone so if you haven’t done that please make sure you do that this week. All we’re really going to do is chat about the final project in this class and give you a chance to ask any questions you might have. You don’t have to come up with a project or anything at this point. I just like to get you thinking about it now so that when we do get to the final project later in October you already have an idea that you’ve been thinking about and you’re ready to go.
So this week we’re going to start working on the first real milestone project in this class. The second module in the class covers object oriented programming. You’ll do a small example where we’ll build out a basic object oriented programming project that looks very similar to the restaurant milestone and then you’ll do the first milestone for the restaurant project. If you saw the announcement that I posted earlier this week I’m actually giving you an option between two different restaurants that you can work on. There’s Starfleet subs which is one of the older ones that I developed but I’ve updated it a few times and then there’s also Game Grub. You can choose either one. The Game Grub one is the one the modules that are linked into the class itself so those will be the easiest ones to find but you can go directly to the textbook and look at some of the old milestones and you’ll be able to find the ones for Starfleet subs there. I included a direct link in the Canvas announcement for that. The other big thing to keep in mind is if you are retaking this class and you have done one of these projects before you’ll need to pick the other one for your retake so just to be aware of that. Other than that just some quick updates don’t forget we have the end discussion board so if you have any questions or comments or anything on this class you can post on end discussion. I get those emails pretty quickly and I usually respond within a business day usually a lot faster than that so feel free to post on end discussion board. For grading I’m gonna start grading your hello real world. probably today or tomorrow. The way I typically grade those is I fill out the rubric on Canvas, but then I’ll do code comments on GitHub if I see anything.
So for this first milestone, I’ll probably leave at least a comment somewhere so that you’ll see it. You should get an email to your GitHub email address whenever I leave a comment on your pull request, so you’ll be notified of that. But if you have trouble finding those comments in GitHub, just let me know. Otherwise, I think so far so good, everything seems to be going well in this class. So for this first milestone in the class, we’re going to create a lot of packages and classes for object -oriented programming, and it ends up being a lot of boilerplate code. That means there’s going to be a lot of repeated code between the various classes that you’re gonna work in, but I like to start here and then refactor the code later so you can really see the advantage of object -oriented programming going forward.
In this first milestone, you’ll notice that some of the requirements are not enforced, such as the style guide and the documentation requirements. However, you can make things easier for yourself later by going ahead and following those and doing that work now so that you don’t have to add that on later. This milestone, I estimate, takes anywhere between three to eight hours to complete. It really depends on your efficiency as you work on this project and your experience working with these tools. I’m able to complete it pretty quickly. For some of you, if this is very new, you may take a little bit of time, but that’s okay. And at least my model solution was around 1 ,500 to 2 ,500 lines of code, depending on how I build it. So it’s a rather large project. It’s much bigger than a lot of the projects you’ve done up to this point. But like I said, it’s a lot of boilerplate repeated code. So you should be able to get through it pretty quickly if you think about it. Also with this milestone and all the other milestones, feedback is always welcome. If there’s something in the milestone description that is unclear, please let me know so that I can clarify it and maybe rewrite the milestone to make that a little bit clearer. So your feedback is always welcome on these.
After we get past this module, the next module we’ll spend some time talking about documentation and unit testing. Then we’ll do some inheritance and polymorphism and refactor our code to take advantage of that. And then we’ll go on to module five, where we’ll talk about debugging, logging, lambda expressions and other things. And then we will actually introduce the second final project milestone. It will be at about the end of September by the time we get there. So hopefully everything’s going well for you this semester. If you have any questions or concerns, let me know. Otherwise I will see you again next week in one of these announcements videos.
Hello, and welcome to the week three announcements for CC410 in Fall 2023. So this week you should be wrapping up module two, which is on object oriented programming. There’s a small object oriented programming example where you’ll make a menu item for a fictional ice cream restaurant. And then you’ll be working on the first restaurant milestone where you’ll be making the object oriented classes for the menu of the restaurant project that you’ve chosen to work on. So after you’ve got that done this week, we’re going to go back to that code. We’re going to add some documentation and unit testing to it. We’re also going to create a UML diagram that oversees exactly how that code looks. So you’ll do a small example of adding documentation and unit testing to an existing project. And then you’ll go to the second restaurant milestone to do all of that work in your code.
The second milestone, you’re going to add unit tests to your code. Depending on how you implement the unit tests, I say there’s around 400 unit tests in the model solution that I wrote a few semesters ago. You’re also going to add documentation comments to every class file, every method that’s in the class. Those documentation comments are really important because that helps you understand what your code does and how it works so that if you come back to it years later, you understand the thought process and the design behind how you did it. You’re also going to create a simple UML class diagram. Make sure you get that done. A lot of students forget that and lose points for not doing the class diagram. Your work on this milestone, again, should take anywhere between three to eight hours of work depending on your comfort level working with these tools. And this one tends to be the largest one. It’s about 3 ,000 to 4 ,000 lines of code. But again, you’re doing unit tests. Unit tests themselves are very verbose. And once you write a unit test for a particular use, you may be able to copy it between multiple unit test files in order to actually get things to work. So there’s a lot of cool things you can do to make this coding go a lot better. And that’s part of the reason these milestones are so big is to kind of force you to learn some of these more efficient ways of coding instead of sitting down and trying to go line by line, file by file, because that will take forever. You need to think a little bit bigger about how you can reuse pieces of code. And then we’ll come back in and do some refactoring to kind of simplify that. once we’ve built everything out. And as always, feedback is welcome on the milestones. If there’s anything that’s unclear, just let me know and I will happily take a look at that.
So, some big hints for the milestone. First things first, I really tell you for milestone two, do not look at the source. And what I mean is do not look at your source code while you’re writing unit tests. In theory, you should be able to write the unit test for your source code without looking at the code itself to make sure that it works. And the reason I tell you that is let’s say in the menu, you accidentally got the price for an item wrong. If you’re looking at your source code to figure out what the price is, your unit test is always going to pass. That’s not the point. The point is to go back and look at the original documentation, the original design specs, and write your unit test based on that. So, if a menu item is supposed to be 325, and it’s really actually 375 in your code, the only way you would catch that is by writing your unit test looking back at the original documentation, not your source code. So hopefully that makes sense. It’s really one of the big things a lot of students get wrong with unit tests is they write these unit tests that confirm their code works, and those are just like tautologies. They don’t actually test anything other than that the code does what it looks like it does, not what it should do. Another big thing you can do is use global attributes, and I’ll give you an example here in just a second.
You can also generalize some unit tests. There’s a lot of unit tests that you can parameterize or generalize across the toppings or the base layers that you use. Anything that is part of an enum is really easy to generalize. Do not try and generalize the individual ingredients. So for example on the sandwiches, if you have individual ingredient attributes like ham and cheese and meatballs, don’t try and generalize those. You have to hard code those. We’re not really going to get into code reflection in this class where you could generalize those. It’s much more difficult than it sounds. So look at doing some parameterized tests, and here’s kind of a good example of using global attributes and using global attributes in your code. For example here, this is a test for a menu item called the riker in Starfleet subs, and up here at the top I’ve just made these global variables for price and calories, and then I referenced them later on in the test itself. And so the cool part is you can copy this entire piece of code for another class, do a find and replace replace riker with something else, and then at the top of the file just update these price and calories variables. You don’t have to go through and change the source code itself. That’s really the big power here. In the document, I also have an example of using enum parameterized tests. I really, really encourage you to do that. So instead of having one test for each topping or each item that you can add in an enum, you can just do for every item in the enum, check to see if it’s there, check to see if it’s not. There’s some really cool test strategies that you can use around that.
So the other big thing I want you to keep in mind in this class is that this class really is meant to be a challenging class. And it really requires you to come in having a growth mindset. I don’t want you to look at the things like the milestones and the quizzes as as busy work that you have to do. They are assessments that I’ve carefully designed to challenge you to help you grow as a programmer and grow as a software developer. And so if you come into this idea that you can learn and grow from these milestones, I think you’ll have a much better opportunity to really succeed in this class. And so because of that, the milestones themselves are challenging. They’re meant to be challenging because if I gave you all the answers and you just mimic what I give you, you’re not really learning and understanding what’s going on. You’re just following the leader. And so I really want you to see these milestones as challenging for a good reason to help you grow as a programmer. In the milestones themselves, there’s a lot of hints. There’s a lot of subtle things that I put in there to try and direct you in the right way to do things. So make sure you read the milestones very carefully. If there’s any extra documentation linked from there, I encourage you to go read that and check that out. If any of those links are broken, let me know and I’ll go fix them. But it’s really, there’s a lot of hints in those milestones that are there for a reason if you read carefully and find them. But. Don’t be afraid to ask for clarification, especially some of the later milestones. I leave a lot of things up to your own design. You can always ask me for clarification if there’s a particular way that you want to do something and you need a little help with it.
As with all of my classes, these classes are not designed for you to be able to pass them without asking questions. It’s really not an expectation at all that you can fly through this course without asking a question unless you really have a big background in software engineering and programming. So don’t be afraid to come and ask questions. That’s how this class is designed. The other big thing, hopefully I’ve said this enough, but on all of these milestones, it pays to start early and work methodically. I know that for some of you that might be really difficult given your schedules, but do the best you can to start early and work methodically on these milestones so you’re not trying to do them all in one weekend. That gets really, really tough. And then the last big thing, take advantage of the tools that you have. We’re using Git and GitHub and GitHub Classroom in this class. So anytime you’re working on code, save and commit your work often, especially if you’re like, oh, I don’t know how to do this. Let me commit what I’ve got, work on it a little bit. If it works great, I can commit that. If it’s not, I can roll back to that previous commit and try again. It’s so much easier to do that than to try and undo all of the changes that you made across your code, especially when you’re working across multiple files. If you look at the Git documentation, you can do things like branching and merging. So you can have multiple different branches that you’re testing out and then pulling them all together to submit. I can help you with that if you have any questions about that as well. So some tips to help you as we get into the big part of the class here where we have these few restaurant milestones.
So after this module, we’re gonna do some stuff on inheritance. We’re gonna spend some time in module four, refactoring our code to take advantage of object -oriented programming inheritance. We’re gonna spend module five talking about debugging a little bit. We’ll have a final project milestone meeting here toward the end of September. And then we’ll go into a couple of modules on design patterns and test doubles. If there’s one thing that you take away from this class, it is module six and module seven on design patterns and test doubles. Those are by far the most important thing that I want you to learn in this class. And so we’ll get to those here toward the end of September, early October. And then we’ll add some stuff about user interfaces, web interfaces, and et cetera. So hopefully everything’s going well. This milestone is all about writing unit tests. So hopefully it’s a really good experience for you. I know unit tests are pretty new for a lot of you, but they’re a really important part of any code that you write. If you have any questions, let me know. Otherwise, good luck this week and I will see you again next week.
Hello and welcome to the week four announcements video for CC 410 in fall 2024. So this week you should be wrapping up the second restaurant project milestone, which involves adding documentation, unit testing, and a UML diagram to your project. You should have done a short example of adding documentation and unit testing to an existing project, and then you’ll expand that into the restaurant project. And hopefully you’re getting that all done. I noticed that so far I’ve only got one of those submitted, so hopefully you’re getting that wrapped up and submitted pretty soon later today. So this week we’re going to shift gears a little bit, and we’ll spend some time talking about inheritance and polymorphism, which are two of the really big reasons that we use object oriented programming in this class. We’re going to do a small example of looking at inheritance, and then you’ll have some time to think about your project, but there won’t actually be a restaurant milestone due this week. There is one due next week that includes debugging and logging as well. And so instead this week you’ll have a little bit of time to think about your final project. There’s a start stop continue survey out there, which basically asks you if there’s anything I should start doing in this class, stop doing in this class, or anything I should continue doing if you like things that I do. So it’s a chance for you to give some feedback. But really the big thing for this module is get through this module pretty quick so you can go ahead to the next module and start looking at that content and start working on the milestone, because there is a reason that I give you two weeks to work on this milestone. So you want to get to that as soon as you can.
So next week we’re going to introduce some things around debugging and logging. We’ll also briefly talk about lambda expressions, which are one of the important things that you’ll need for this. We’ll do a small example about adding debugging and logging to an existing project, one that you might recognize. And then you’re going to have the third restaurant milestone where you’re going to implement some inheritance and polymorphism in the existing code. It’s one of the few times where we actually refactor existing code to work in that way. And then there’ll also be the second final project milestone, which is due by the end of the week. So we’ll be there pretty quickly to the end of September by the end of next week.
So for milestone three, this is the first milestone where we’re enforcing all general requirements in the course involving documentation unit testing. typing all of those things that you did in the Hello Real World project. Those need to be implemented in Milestone 3. For those of you in Python, make sure you’re using a TOX file that has all of the correct commands in it. For those of you in Gradle, make sure you’re using a build.gradle file with all the appropriate add -ins added to it like we did in the Hello Real World. You’re going to add some inheritance to this. We’re going to create a parent class over our entrees, our sides, our drinks. We’re going to add some other additional interfaces and things like that. So you get to add inheritance to your classes and refactor a lot of code. And then, of course, you’ll need to create some new unit tests to check your inheritance and make sure that it’s working and update your UML diagram to match that as well. Overall, this milestone is smaller than the other two. It’s only about 1 ,500 lines of code changed or updated, but it is much more complex because you’re refactoring and adjusting existing code. So be kind of careful as you work on this milestone.
So some big hints for Milestone 3. First and foremost, I encourage you to work in small chunks. Don’t try and do the entire milestone in one shot. So don’t try and do the entire milestone in one shot. and then at the end, try and compile and run it. Work in small chunks, make sure your stuff is working as you make changes, and if you break something, try and get back to a working state before you stop. The second thing is take advantage of Git. You can commit early, commit often, you should have multiple commits for this milestone. One of the things that really worries me in this class is when I see students have one commit on GitHub per milestone, that kind of scares me because it really means you’re not using GitHub the way that you can, where you make little commits every time you get something working, so you can roll back if needed if you make a mistake. This is also a good opportunity to try test -driven development. You can actually try and write your unit tests before you write your code, and then get your code to actually fulfill those unit tests. It’s a really neat idea, and it’s a fun way to actually work on your code a little bit differently. Some of the other things I really recommend is you can inherit the item or order item interface on your base class, so you don’t have to inherit that on each of the Entrez side and drinks. If you inherit it on the base class, it will then transitively get inherited on all of the other classes as well. And finally, there might be some questions about syntax for some of this. Feel free to ask questions if anything doesn’t make sense or you’re not sure exactly how to do things because of interesting syntax.
So, like I said, module four and five, we’re gonna talk about inheritance and debugging and have another final project check -in by the end of September. Then we’re gonna shift over to design patterns and test doubles. Like I’ve said earlier, module six and module seven, I think are the most important new content that you’re going to learn in this class, probably outside of unit tests themselves. So we’ll spend quite a lot of time working on design patterns and test doubles before we shift over to working on user interfaces and things like that. So, hopefully everything’s going well. Hopefully you don’t feel like the whole world’s on fire with these milestones, but I do recognize that they are very large. They’re meant to kind of stress your ability as a computer programmer a little bit and give you opportunity for growth to really see how far you’ve come as a programmer. So make sure you go into these with the right mindset of knowing that it’s a challenge out there to help you grow as a programmer. It’s not meant to be obstacles or busy work to make this more difficult. It’s really meant to challenge you and help you grow as a programmer. As always, if you have any questions, let me know. Otherwise, I will see you again next week.
Hello and welcome to the week five announcements video for CC 410 in fall 2024. This week, you should be wrapping up the work on inheritance and polymorphism. There’s a short example project that you’re working on, but there shouldn’t be anything else. And so instead at the end of this module, I’ve added a start, stop, continue survey, which gives you a quick chance at the beginning of the semester to tell me if there’s anything I should change about my approach. And then you also have some final project time that you can work on as well.
So this week, we’re going to continue that discussion by doing another lesson on debugging and logging and lambda expressions, which are very important things to learn. You’ll do a short example working with debugging and logging in a prior project. And then you’ll be working on the third restaurant milestone and hopefully scheduling your second final project milestone this week as well. So for milestone three, this is the first one where all general requirements will be enforced. So you’ll need to follow the model that we set with the Hello Real World project and have all of the documentation, all of the style guide implemented, type checking, unit testing, all of that needs to be implemented for this milestone. This is the first milestone where I will start taking points off if your code does not match the type check, does not match the style check, things like that. Basically what you’re doing in this milestone is adding inheritance to your existing code. You’ll need to refactor some classes and add some new unit tests as well as update your UML diagram. This milestone ends up being about 1500 lines of code. A lot of it is code that has changed and not necessarily new code. So hopefully it’s not that bad of a milestone. It requires a lot more thinking and a lot more careful preparation in order to complete it. And as always, feedback is welcome if you have any questions on that milestone.
So some big hints for milestone three. Like I said last week, work in small chunks, try and implement one feature at a time. And then as you get those implemented, commit early to GitHub and commit often. That way, if you make a mistake in a future edit, you can always roll back to a commit that you know works and try again. This is also a great chance to try test -driven development. If you’ve always wanted to try that, you can write your unit tests first and then try and implement those in your code and see if you can get them to pass. And as a quick hint, you’re making… an item or an order item interface in this milestone, you’ll want to inherit that on your base classes. Your base Entrez, your base side, your base strength classes, and then that will transitively get inherited on all of the subclasses of that base class. That makes your inheritance hierarchy a little bit easier. Then as always, you can ask questions if you have any questions on syntax.
Looking ahead at this point, the next module, we’re going to switch over and talk about design patterns and test doubles. Like I’ve said many times already, those are the two modules I think that are most important new content in this class. Then we’ll switch over and start working on writing a graphical user interface and doing some things around event -driven programming. Hopefully things are going too bad. Hopefully it doesn’t feel like that the weather’s gotten really bad and it’s just starting to really rain down on you in this class. But if you have any questions at all, let me know. Otherwise best of luck and I will see you again next week.
Hello and welcome to the week six announcements video for CC410 in fall 2024. So this week you should be wrapping up the modules on debugging, logging and Lambda expressions. There’s a small example that you do on debugging and logging and then the third restaurant milestone is due pretty soon. So make sure you get that done. You also should be scheduling your second final project meeting with me. So I look forward to hearing about some of your interests and things that you’re looking at for your final project. This is again, just a quick discussion to see where you’re at on project planning and maybe give you some advice of things that you could start working on in your final project as you have some time over the next few weeks.
So this week we’re going to launch into one of the most important topics in this class, which is design patterns. So you’ll do a small example this week, building some design patterns in an example project and then you’ll update your restaurant project to include some new design patterns and you’ll also work on the first concept quiz. So for the fourth milestone, we’re going to add some new design patterns building around an order class, a combo class, a combo builder class and an order number singleton class. All of those are pretty important classes for us to be able to build orders and combos out of our menu items that we can add to our cart. So you’re going to keep track of all of those. We’re just building those in this milestone. And then the unit tests for a lot of these are going to be in the next milestone. I used to do these all in one milestone, but I found it was a lot easier to split them into two milestones. So you have time to work on building the code for all the different design patterns in this class. And the next time we’ll add the unit tests as we learn about test doubles and mocking.
So the other thing that you’ll have this week is the first concept quiz. This is basically a quiz to check your understandings of some of the concepts that we’ve covered in this class, including object oriented programming theory, code comprehension, UML comprehension and the ability to do unit testing. I want you to think of these not exactly as an exam, but more of a check for understanding for a lot of the concepts that we worked on. This has a two hour time limit and it is open book, open notes, open code, but all of the- Your work should be your own. So for example, do not go to chat GPT and ask it these questions and then copy paste the answers. You can reference your book, you can reference your notes, you can reference your code from this class, but I really want this to be a representation of your own work and understanding of these topics. That’s really what I’m looking for just to see how well you actually have understood some of the bigger concepts that we’re looking at in this class. So that’s what this quiz is about.
Looking ahead after this, the next module we’ll talk about test doubles, which is really what we need to do unit testing for a lot of these design patterns. Then we’ll shift gears, we’ll start talking about graphical user interfaces and how we can do things with event -driven programming to make our GUIs more effective. So hopefully everything’s going well. Hopefully things are progressing very nicely in this class. As always, if you have any questions, let me know. Otherwise I look forward to seeing you all again next week.
Hello, and welcome to the Week 7 Announcements video for CC410 in Fall 2024. This week, you should be working on a Restaurant Milestone all about adding test doubles, which allows us to add mock or fake objects into our unit tests so that we can better test those design patterns that we’ve been working on. This really allows us to write more powerful and more expressive unit tests, which are really useful for actually measuring how we’re going to use our project in the future. You also should be working on the first concept quiz in this class, which is due later this week. Again, please remember that concept quiz is open book, open notes, but not open chat GPT or anything like that. It’s really a chance for me to test your understanding and your knowledge of the answers. And it’s usually pretty obvious if the answers are like way off base and use words and concepts that we haven’t even covered in this class. So please make sure that it is your own work and it represents your own understanding of what’s going on.
So for the Restaurant Milestone that you’re working on right now, like I said, you’re writing some unit tests for the different design patterns that we’re using and it gives you a chance to use these test doubles. You should use these test doubles in these tests like it states that you should in the milestone. So make sure you’re figuring out how to use those. If you’re not sure how to use those, feel free to let me know and I can give you some hints. But I think the sample project that we go through does a pretty good job of setting the stage for how we can actually do this. Focus on only testing one class at a time. Basically, your unit tests should only be testing the code in one particular class. And then all other classes and objects that are used should be mocked as best as possible so that you’re only testing the one class and you can assume everything else works. But like I said, it really allows you to write these more powerful unit tests going forward.
Looking ahead after this, the next module, we’re going to shift over and start working on graphical user interfaces. So that’s going to be really fun. We’ll spend a module on event driven programming and how we actually make our GUIs more functional. And then we’ll spend some time talking about libraries, releases, web APIs, and et cetera. So we’re getting pretty close to the halfway point of the semester. This is week seven out of 15 or 16, depending on how you count the weeks. So we’re close to halfway. Hopefully things are going well, but if you have any questions or concerns, let me know. Otherwise, best of luck on this milestone and I will see you all again next week.
Hello, and welcome to the Week 8 announcements video for CC410 in fall 2024. This week you should be wrapping up the module on test doubles. You should have also scheduled a meeting with me for your second final project milestone where we’ll talk a little bit more about final project ideas. And hopefully you should have also completed the first concept quiz, which goes over some of the big concepts in this class. I’m going to work on getting all of that graded this week. It may take me a couple of days to get through everything, but I’ll try and get you feedback as soon as I can.
So this week we’re going to shift gears a little bit and we’re going to start working on graphical user interfaces. So this week we’ll do a simple graphical interface basics example, and then you have a restaurant milestone where you’ll add a basic graphical interface into your restaurant milestone as well. So for this one, I’m going to kind of create the overall GUI structure that we’re going to use and give you one example of how to use that with some of the prior stuff that we’ve worked with. I’ll also give you some helpful hints in both the milestone and some of the discussion in the examples. So if nothing else, I really recommend following my overall GUI structure, but feel free to get creative if you want to do something a little bit different or use some different UI elements, you are welcome to do so. This is the one milestone where I really encourage you to be creative and go out there and do stuff for this milestone. I’m really just checking the overall layout of your UI. There won’t be much functionality on it at this point. And then in the next mile, we’ll actually add some of the functionality with event driven programming.
So like I said, looking ahead after this module, the next module will introduce event driven programming. Then we’ll talk about things like external libraries and creating releases of our project before we shift gears a little bit in November and start talking about web APIs and web interfaces as well. So we’re finally at the halfway mark of the semester. It is week eight. Hopefully things are going well. This shift gears to GUI is usually one of the better parts of this class where you get to learn some new stuff. So I hope this is really interesting for you. As always, if you have any questions, feel free to let me know or schedule office hours with me. I’d be happy to help. But otherwise, I will see you again next week.
Hello and welcome to the week 9 announcements video for CC 410 in fall 2024. I’m coming to you this week from my office on campus because I’m on the road a little bit so hopefully the quality of the video is not too bad and I can at least get the point across. So this week you should be working on a module all about parallel programming and doing an example of doing parallel programming in either language that you’re working on and then we’ll shift over and do some work with event driven programming which is the paradigm that we use a lot in graphical user interfaces. You’ll do an example around that and then you’ll be working on the seventh milestone in the restaurant project which adds some interactivity to your user interface that you built in the previous milestone.
So with this we actually run into some testing issues. The biggest thing we run into is that the Codio boxes by default only have 512 megabytes of RAM which is not an awful lot when you start running unit tests with a graphical user interface. So there are a few things that you can do to actually get around this. In Java if you find that you run into issues you might try the Gradle dash dash stop command to make sure there are no Gradle projects running in the background or you can also go to the project menu and choose the restart box option which will restart the underlying Codio box and then refresh your browser once that is done and then it should clear out any memory that you’re using in Java. In Python we can get around this by running our tox tests in batches. I show a couple of examples of how to do this in the example projects and I believe I also have some documentation in the textbook that gives you an example tox file that you can base your work off of If you have any trouble getting that to work or you’re not sure feel free to ask me and I will happily help you set this up so we can get around this. Of course the other thing you can do is if you’re set up to do this class on your local machine you can actually get around this without any issues itself but when I run the tests in Codio for grading I’ll kind of look for this or I’ll configure it real quick so it should work. So if you have any questions for this just let me know.
So looking ahead from here in modules 10 and 11 we’ll finally refine our user interface to add a few more features to it around combos and orders and getting everything such as the checkout process included. So module 10 we’re going to integrate an external library that mimics a cache register and then in module 11 we’ll actually learn how to build a release of our project and get it available before we shift gears and start talking about web APIs and things like that toward the end of the semester. So we’re getting close to the end of the semester we’re starting to get to the downhill slope so hopefully things are going well. As always if you have any questions or concerns let me know. As I hinted earlier in this video I am on the road a little bit this week so my availability is less than normal. Feel free to check my calendar to see what times I’m available or email me or email the help address and let me know you’d like to meet and I will try and find some time that I can meet with you while I’m on the road. So if you have any questions let me know otherwise good luck and I will see you again next week.
Hello, and welcome to the week 10 announcements video for CC 410 in Fall 2024. This week we’re working on parallel programming, so you’ll do a short example around that. We’ll also work a little bit on event -driven programming, and you’ll do an example around that. And then you’ll work on the seventh restaurant milestone. This is the milestone where you’re going to add event -driven programming to your user interface so that you can actually switch between windows, you can save objects, and you can actually update the order itself. This is where we actually start building the real interactive part of the user interface by building these event -driven pieces of code into our GUI, and it hopefully really helps you understand a little bit better how we actually work in an event -driven scenario instead of an imperative scenario like you’ve worked at in the past.
So like I said, this milestone is all about adding events to our user interface. We’re going to refine our user interface structure a little bit by replacing the order list with a tree. That turns out to be a little bit better structure for keeping track of orders and combos in our sidebar, so we’ll do that. The big thing is you’re going to add button -click handlers for almost everything, so you’ll end up with a mostly functional user interface by this point, and you’ll start writing some unit tests. Remember the goal of the unit tests is just to make sure that the selections on the user interface actually represent the item to get saved, and vice versa, if you hand an item to a user interface, it actually represents it correctly in the UI. So definitely read the hints and look at the example project on that because that gives you an awful lot of hints of how to actually complete that.
So, like I talked about last time, there are some testing issues with these larger projects, especially when we start testing the user interface. So remember that the Codio boxes have limited memory. In Java, everything should run okay, but if something crashes or something isn’t working, you can try and stop Gradle using the Gradle dash dash stop command. Then you can restart the box by going through the project menu and then refresh your browser. And of course, in Python, we’re just going to update our tox file to run the tests in individual batches. And I show some examples of how to do that in the lab.
So, looking ahead after that, module 10, we’re going to talk about external libraries and how we we can bring a cache register library into our code. We’re also going to work a little bit on adding orders and combos to our sidebars so that we can deal with that part of our project. And that really gets us to a mostly fully functional user interface. We’ll add a little bit more features on module 11 and actually build a release version of our project as well. And then we’ll shift gears and in November, we’ll start talking about web APIs and how to make a web interface for some of this as well. So at the end of this lab, you should be able to hopefully take an order and actually get the order to somewhat show up and use your interface between this lab and the next lab. We’ll get most of that functionality up and running. As always, if you have any questions, let me know. Otherwise, good luck on this lab and I will see you again next week.
Hello and welcome to the week 11 announcements video for CC 410 in fall 2024. This week you’re going to be working on an example around releases. We’re going to talk about how we can actually build a releasable version of our code that others can easily use. You’ll do a small example around building a release and then you’ll switch over to the restaurant project where you’re going to add an external library to help us actually go through the checkout process.
So for this milestone, we’re using a library that I have developed that simulates a cash register and a receipt printer and it allows you to add checkout functionality to your project while also learning how to interface with an external library that has code that you don’t control. The cash register itself handles either cash or credit card. It has a credit card machine that will basically tell you whether the card was approved or not. It also has a cash drawer that you can interact with that you have to read the documentation on a little bit to figure out how it works. Basically the cash drawer you can only count it while it’s closed, but you can only modify it when it’s open. And so you have to do your calculations in advance to make your change. The last thing that you’ll do is you’ll actually print a receipt using a receipt printer. Bear in mind that a receipt printer has a limited line length and so you’ll have to deal with that as well.
So some hints for this milestone. First and foremost, making change is hard, especially when you have a limited amount of money in the cash drawer. Generally, I would advise you to write the making change algorithm first without worrying about that limited amount of cash in the cash drawer. Just assume you have everything available and then only if you feel like it, go in and add the extra a little bit to deal with the fact that you might be out of ones and you’ll have to exchange a five for some ones and another cash drawer. So read that part of the assignment very closely. It’s only worth about five or 10% to actually get the change fully working. So get a bare minimum working and then move on and then come back to it if you have time. Likewise, printing receipts. You have to remember that the receipts have a limited length of characters that you can put on each line. So you may have to truncate or line wrap some of your stuff. You can also use some ASCII characters to do formatting on the receipts to make it look really nice. I’ve seen some really cool receipts. I’ve even seen some students do ask you out on the receipts. So feel free to be creative there.
The other thing I really recommend that you do is use the adapter pattern on this assignment. The adapter pattern allows you to take my library and then wrap it in your own code so that it’s more easy to unit test and it’s easier to work with inside of your own code. And finally, the source code for the library that I’m giving you is open so that you can check out both the source code for the cash register library as well as the unit tests that I wrote for it that may be useful in helping you write unit tests to test your change making assignment as well.
So looking ahead after this milestone, we’re gonna switch over and start working on some web interfaces. This is where we’re going to build a simple web interface for our project that keeps track of the menu and allows us to add custom menu items. After this one, there’s going to be smaller milestones. There’ll be a lot less actual code in the milestone. So it should take you quite a bit less time to do those milestones and the idea is it gives you more time to be working on your final project as we shift over into November and December and get close to finals week.
So hopefully things are going well. I hope you get excited the first time that you get the credit card swiper to work in the cash register so that you have the full checkout process going all the way through a point of sale system. That’s really the goal that we’re trying to get to at the end of this restaurant project. As always, if you have a question, let me know. Otherwise, happy Halloween and I will see you again next week.
Hello and welcome to the week 12 announcements video for CC 410 in fall 2024. This week you should be working on data driven websites. We’re going to introduce how to build a website using our same framework and so this first milestone is just adding the basics for the website so that we can produce a menu on the website. We’re not going to handle ordering items or anything on the website, we’re just going to create a data driven menu. But really the idea for this week is we’re going to start backing off so you can work on the final project. So like I said the tenth milestone is pretty simple. We’re going to install a web framework inside of our existing project. We’re going to set up the routes in the controller for the web framework as well as some layout templates and some route templates and it’s going to allow us to build a web page that has the menu on it that is driven by our object oriented data that we already have. In practice when you do this with a website instead of having object oriented classes for your menu you would probably have a database but that’s outside the scope of this class so we’re just going to use our existing object oriented layout to drive our menu.
Looking ahead after this we’re going to have a couple more milestones on working on web apps dealing with form data and filtering and serialization of web data. These milestones are generally smaller milestones where the milestone you do more closely aligns with the example project that I give you and it’s meant to give you more time to work on the final project for this last month of the course. So keep that in mind the last restaurant milestone is going to be due finals week. In lieu of any final in this class we’re just going to have that last restaurant milestone coming up soon. So hopefully everything’s going well you’re looking forward to get to the World Wide Web. If you’re around campus I encourage you to participate in either the high school programming contest which is tomorrow we still need volunteers or Hack Hey State which is this weekend albeit both of those events but otherwise best of luck as you switch over to the World Wide Web and I will see you again next week.
Hello and welcome to the week 13 announcements video for CC 410 in fall 2024. This week you should be working on some more of the restaurant milestones. We’ve switched gears into the web milestones. So this week you’re going to add some restful interfaces and a form interface to your restaurant website. This form interface is going to allow you to add a custom menu item or a list of custom menu items to the menu. They’re not going to change the existing menu items. They’re just going to add custom information.
So there’s a quick example, then there’s a restaurant milestone. These web milestones are meant to be a lot smaller and shorter and easier to complete to give you time to keep working on your final project. So like I said, milestone 11, we’re going to add web forms, search filters, and some results that you’re going to present from that search interface. It’s really great. It’s really easy to do. And then from there, we’re going to add restful controllers and serialization to handle those custom items. And like I said, more smaller milestones, more final project time for you. And then the big thing to keep in mind is the last restaurant milestone is going to be new finals week. In lieu of a formal final in this class, we’re going to do that finals week. You’ll also have a final project that is due finals week. And in the future, we’ll talk a little bit more about what you’ll do to actually turn in that final project by the end of finals week.
So that’s really it. We’re looking ahead to the end of the semester. It’s week 13 out of 16. So we’re getting there pretty quickly. I hope everything’s going well for you. And as always, if you have any questions, let me know. Otherwise have a great week and I will see you next week.
Hello and welcome to the week 14 announcements video for CC 410 in fall 2024. So this week you should be scheduling your final project check-in with me. This is the fourth final project milestone and the last one before you turn it in. So this is a last good chance to look at your final project and see how things going. We also have the second concept quiz that’s out and due this Friday so make sure that you get that done. As with the previous quiz it takes an hour or so to complete so make sure you schedule enough time for that. You’re also going to be working on an example project for restful routing and then the next restaurant milestone after Thanksgiving is also going to be about restful routing and so you should be working on that while you work on your final project as well.
So like I said the next milestone is all about building this restful web application where you can create update and delete new custom menu items. It’s going to reinforce some of the design patterns that we’ve covered previously in this semester including the iterator pattern and the singleton pattern and it also gives you one last chance to update the UML diagram for your project before the end of the semester. After that after Thanksgiving the next week of class we’ll have serialization and validation, we’ll have one more restaurant milestone and again you’ll get to keep working on the final project before the end of the semester. After that there’s one quiz for textbook extras that’s just extra things I wanted to cover in this course and then your final project milestone is due by the end of finals week which is December 13th.
So for your final project there are a few deliverables. First you should have a release tag on GitHub with your code just like we’ve done for all the milestones. Make sure you read the requirements page for the final project to make sure you have all the things that you’re looking for included in your code. Your code should have documentation in line just like we’ve done for all the projects. You probably should have some sort of a read me or user documentation that discusses how to run and how to use your project and then of course you will do a presentation for your project as well. The presentation itself should be around 15 to 20 minutes in length. You can choose to either pre-record your presentation using tools like Zoom where you can share your screen and record yourself presenting or you can schedule a time to present it with me live sometime during finals week. If you do pre-record or present live, we’ll have some time for Q&A. So if you send in a pre-recorded video, make sure you schedule a short amount of time with me after you’ve submitted your videos so that we can do some Q&A. Right now I’m planning on being available Mondays, Thursday, and Friday of finals week. So make sure you look at my schedule and get scheduled ASAP.
For your presentation itself, on the Canvas textbook page I give a suggested outline, here’s kind of that outline. You should start by introducing your project and giving the background for why you chose this project, why you’re interested in this project, things like that. Then you’ll spend some time discussing the implementation of your project yourself, including the code and the structures that you used. You’ll do a quick evaluation of yourself and see how well you actually met your initial goals. You’ll talk about your future work if you want to work on this project again into the future. You’ll give a short conclusion and then you’ll switch over and give a demo. In the demo, I encourage you not only to show your project working, but also talk your way through your code a little bit. So feel free to share both your screen with your app running and a screen with your code so that you can talk through anything that you think is interesting or useful for your project.
So that’s really where we’re at. We’re on week 14 of 16, so we’re getting close to the end of the semester. Hopefully that’s not freaking you out too much. If you have any questions or concerns with this class, let me know. Otherwise, I hope you have a great Thanksgiving break and I will see you again in a couple weeks.
Hello and welcome to the week 15 announcements video for CC 410 in fall 2024. So we are at the last week of the semester before finals so this week we’re going to work on our last restaurant milestone which is all about adding validation and some serialization to our web forms so hopefully that shouldn’t be too bad to get done it’s a usual usually a pretty short milestone and then other than that you should keep working on your final project which is due a week from this Friday.
So the rest of the semester after this you’re going to have a short module of textbook extras that are just things that didn’t fit anywhere else in the course all there is is a quiz that you’ll do during finals week for that and then by Friday you need to put present and finalize your final project which is final project milestone 5.
So for the final project itself your deliverables are to complete a release tag on github just like we always do make sure you read the requirements page for the project and make sure your project meets most of those requirements you should have documentation in your code you may also include a read me or some user documentation for how to use your project and then of course you will give your presentation. So the presentation itself you have two options you can either pre-record your presentation and submit the video to me before your Q&A time or you can just schedule to present live and then we’ll go directly to Q&A. If you pre-record your video you still have to schedule a time to meet with me for Q&A and you must submit your video at least an hour or so in advance so I watch your video before we do our Q&A session. Time for Q&A sessions is available Monday Thursday afternoon and Friday of finals week so make sure you look at that calendar you can get that scheduled anytime. Tuesday and Wednesday I’m on campus all day both days for senior project presentation so I’m not available but hopefully this should work out really well.
For your presentation itself here’s kind of suggested outline of your presentation spend some time giving some background of why you chose this project talk about your implementation of the code itself you can evaluate how well your project works talk about future work that you might do and then give a demo showing your project actually working and you can talk through some of your code as well. I recommend having a PowerPoint with a few slides sometimes that helps you get organized a little bit. Remember your presentation slash video should only be about 15 to 20 minutes so you don’t have to go too far into any of this but it should be enough time to describe your project and talk me through it.
The last thing to remember about in this class is there will be teaching evaluations or T-Vals available. Those will be emailed to you starting on finals week. You’ll get three email reminders to complete the T-Vals. Remember that T-Vals at K-State are completely anonymous and they are delayed so that I don’t see the results of your T-Vals until after I submit grades. All feedback is welcome. I really recommend giving me any feedback you have, both positive and negative. This class does change over time as I get feedback from students. So feel free to let me know what you thought. If you have any suggestions of things I can do differently, all of that can be posted directly to the T-Vals.
So we’re at the finish line in this course. I hope things are going well for you. I look forward to seeing all your final project presentations next week. In the meantime, if you have any questions, let me know. Otherwise best of luck in this course. Best of luck as you wrap up finals week. This is probably the last you’ll hear from me directly. If you have any questions, let me know. Otherwise I look forward to hopefully seeing you all in the future. Feel free to keep in touch. Best of luck.
Hello, and welcome to CC 410 Advanced Programming, the first week of the course in spring 2025. My name is Russell Feldhausen. I’ll be your instructor for this semester. My contact information is here on the screen. I work mostly remotely from the Kansas City area, so I’m not on campus very often. Generally, you can find me on campus on Mondays throughout the semester, although for the first couple of weeks of class, I’ll actually be on campus on Wednesdays. You can always email me at russfeld at ksu.edu, or you can find all my contact information on my website, which is russfeld.me.
So in this course, the big picture is we’re going to teach you advanced object-oriented programming. At this point, you should have taken several courses in Java or Python programming. You would have learned about data structures and all of the basic ideas around programming. This is the class where we take it to the next level. So in this class, you’re going to learn a lot about the object-oriented programming paradigm. We’re going to learn about unit testing and design patterns. We’re going to learn how to build a graphical user interface using a traditional method. We’re also going to build a web interface and do a little data serialization to store data on our computer. And we’re going to do this using three different methods. We’re going to do some example projects where you’ll follow along with my example to complete a project. We’re going to do a restaurant project, which is a long-form set of milestones that we’ll do throughout the semester. And in you yourself, we’re going to work on a final project that mimics the restaurant project, but it’s a self-directed topic so that you can apply that in your own area of interest.
So in this class, we’re going to introduce a lot of new technologies. First and foremost, we’re going to learn how to use Git and GitHub Classroom to store and maintain our code. Git is a very professional tool that almost every developer uses to track their code, so we’re going to get used to using that. We’re going to use automation tools such as Gradle for Java or Tox in Python to automate a lot of our build process. We’re going to introduce type checking and unit testing and style checking and documentation. All of these things that professional developers need to know how to do in their code, we’re going to work on doing that here in this class.
So as I mentioned in this class, there is a final project. You get to choose the topic. We want the topic to align with your interest and give you a chance to use the new skills you’re learning in this class. You and I will work together to discuss the scope and scale of your project and make sure your topics are on track. The final project itself is about four milestones that you’ll work on. And at the end of the class, you’ll actually do a presentation. We no longer present to the whole class, but you’ll present at least to me. The final project itself is about a quarter of the size of the restaurant project that you’re going to work on. And so as you get a few milestones in the restaurant project, you’ll get to see exactly what we mean about the scale for the final project.
So this first week is mostly just administrative stuff, getting you oriented to the course and what’s going on. We also do a project that I like to call Hello Real World. If you remember back when you first started learning programming, a lot of students, your first project is the Hello World project where you print Hello World in your programming language. We’re going to do that again, but this time we’re going to learn how to do it as a professional would do it. We’re going to use proper object-oriented structure, we’re going to document our code, we’re going to add unit testing, we’re going to add style checking, all of those things that a professional developer would do if they were writing a hello real world for their job. You’ll also be scheduling your first final project meeting to meet with me either this week or next week to talk about your final project. We’ll also discuss some things such as office hours, communication platforms, and you have an assignment out there to introduce yourself on the ed discussion platform, which is what we will primarily use for this class.
Then we get into next week where we start learning how to do object-oriented programming by building a class library for our project. We’ll work on the first restaurant milestone, and that project is pretty large. It is about 2,000 to 2,500 lines of code, which may already be several times bigger than the largest project you’ve ever worked on. However, most of this is boilerplate code, so once you get one part of the class library working, a lot of it you can copy, paste, and adapt existing code. The thing I tell you is to be thoughtful about your code and your structures. Don’t try and write all 2,500 lines of code raw. Try and build parts of it and learn how you can copy, paste, and pick and reuse things in your code, so that you start to see those common structures throughout your code.
Then we’ll go on to week three where we introduce unit testing and documentation. We’ll write some unit tests to confirm that our code library works correctly. This balloons the size of your project to about 4,000 lines of code, and at least in my model solution from several semesters ago, I ended up writing 423 unit tests. Again, many of them are repeats that you can copy, paste with minor changes, but still, it’s an awful lot of code, so just be aware of that. But this gives you a really good chance to catch errors in your previous work before you move on.
And then we get to weeks four and five where we start introducing more concepts around inheritance and polymorphism and restructuring our existing code to better take advantage of the object-oriented programming structure. And then by then, we’ll already talk about final project milestone two, but that’s already toward the end of February when we get there. beyond that we’ll introduce things such as graphical user interfaces, external libraries, web interfaces, etc. We’ll talk a lot more about those as we get to that point in the course.
So one thing we’re doing this semester that I think is really fun is I’m actually giving you a choice of the restaurant project that you want to do. I have two restaurant projects that I have used in previous semesters that I have cleaned up for this semester. One of them is called Game Grub where the menu is all built around things such as board games and then another one called Star Fleet Subs which is set in the Star Trek universe. And so a lot of the menu items are kind of punny jokes based on either Star Trek characters or board games that you may have played. The choice of the restaurant doesn’t really matter. It just tells you what menu items you’re trying to work with but you can choose either one. So if you’re interested in either one go for it. The Game Grub one is the one that is currently linked in Canvas. It’s the one that you’ll see if you go through the course. if you want to find Starfleet subs it is linked online in the textbook I give a link to it in the first intro announcement before this one so you can find it there or you can just talk with me and I will send you that information.
So some advice for this course this is a four credit hour college course which means I’m expecting you to have about 12 hours each week devoted to this course so if you’re working full-time this is about a day and a half of a full-time 40 hour week if you’re working solidly throughout that entire time so be aware that this is a four credit hour course the last four credit hour course you may have taken in this program would have been CC 210 so that gives you an idea I would recommend taking some time to schedule your time very wisely this semester make sure that you’re devoting enough time to this class and of course as soon as I give you a milestone start working on it and leave time to ask for questions most of the milestones are due on Mondays and the biggest mistake I see students make is they don’t start working on the milestone at all until Friday or Saturday and then they don’t have time over the weekend and then they get stuck and then it takes Monday or Tuesday to get answers to their questions and all of a sudden there’s two or three days behind so if there’s a milestone to start working on it Tuesday or Wednesday of that week so you’ve got time to get your questions answered and then you kind of know where you’re going so you have the time to work Saturday Sunday to get it done and get it turned in you can always ask questions you can get feedback on your code early that’s one of the nice things about using Codio and github is I have the ability to look at your code in progress so you can send me an email and say hey I’m working on this I’m not sure I’m getting it right can you look at my code and help me out I can totally do that.
Copy paste your code carefully - I do encourage you to copy paste code in this class unlike previous courses but I’m talking about copy pasting within your own Codio instance be careful as you do so it’s really easy to get your variable name screwed up what I don’t want you doing in this course is using tools such as chat GPT to generate your code that really defeats a lot of the purpose of the learning that we’re trying to do in this course and so I really want you to build the code yourself but you can copy paste within your own Codio to reuse things that you’ve already built. Just don’t use things like chat GPT or GitHub CoPilot. They really, really are going to shortcut your learning in this course, and I guarantee you’re going to have a hard time as you get further on and try and debug the code that those tools create. That said, you are welcome to use and cite other online resources. So for example, in this course, if you can’t remember how to sort a list, you can go look that up. I don’t expect you to remember that, but if you do borrow code from any other website, add a comment to cite where it came from, and try and not use it as your entire project. But if you need a little piece of code and find it online, just cite it, that’s totally fine.
Other than that, this is really the first time we’ll talk this semester. There’s a lot of different ways you can keep in touch with me. First and foremost, I really want you to use the Ed discussion boards. That’s a great way to chat between you and I and also your fellow classmates. So please feel free to post there. That’s my preference by far. I’m also on Microsoft Teams. So if you find me on Microsoft Teams for the K-State Microsoft Teams, I’m on there. You can usually chat with me there. I also host Tea Time office hours, which are going to be, I believe, Monday afternoons this semester. So you’ll see, for those of you in the computer science department, you’ll see some notes from David, one of the advisors about this. If you’re not in the CS department and you want to learn more about Tea Time, let me know and I’ll email you about that. And then finally, you can always schedule one-on-one office hours with me. I don’t hold official office hour blocks anymore because I work online. Instead, I have a Calendly that you can click on to schedule one-on-one times with me. And for the most part, that works. If I feel like I’m getting a lot of demand on Calendly, I may step aside from that and start doing scheduled block office hours. But generally, most students just need a five or 10-minute question so you can grab a time on my Calendly and we can meet during the day and get that taken care of.
So that’s all I’ve got for this first week’s announcement. Throughout the semester, I will try and post one of these a week, roughly once a week. So if you have any questions, let me know. I will talk every week about what’s going on that week and give you tips and tricks to help you out. But best of luck this semester, I’m rooting for you. This is gonna be a very tough class, but I know you can get through it. I know a lot of students before you have. So don’t be afraid to ask questions if you get stuck. And best of luck and I will see you again next week.
Hello and welcome to the week two announcements for CC410 in spring 2025. So this week you should be wrapping up the first module, which is the Hello Real World project. It introduces some of the coding style and some of the things we’re going to use in this class. Thankfully, that project is mostly just a follow along with me on the videos project, so you should be getting that wrapped up today. And then also, if you haven’t already, you should schedule your first final project milestone. It’s just a quick check-in meeting with me to get to know each other and talk about the final project in this class.
Then this week, you’re going to shift over and start working on the basics of object oriented programming. These are things that you maybe have seen before, but we’re going to go a little bit deeper into the theory and reasoning behind why we do the things we do in object oriented programming. We’ll do a quick object oriented programming example, and then you’ll start working on the first milestone for your restaurant. And remember that you can choose the restaurant project that you want to work on. There is an announcement that details the different restaurant projects that you can choose from. So, other than that, if there’s any updates, you can check the Ed discussion board for any discussions there for grading. We’ll kind of practice this on the first Hello Real World project. You’ll see your actual grade is filled in in the rubric on Canvas, but you’ll get comments on GitHub via the feedback pro request. I’m pretty sure those will send an email to your GitHub’s email account, so watch for that. But you can always go back and check for those as well.
Otherwise, I think so far so good. Everything seems to be going well in this class, so I’m pretty happy. The first milestone, like I talked about, is a lot of doing object oriented programming, so it’s a lot of boilerplate code to create the data classes that we’re going to use for this class. To make things easier, I encourage you to follow the style and documentation guides we talked about in the first project, but those are not required until later milestones. So you can take it a little easier on yourself and not have to worry about getting everything right at first, but you can work on that and make sure that it’s there. In my estimation, this first milestone takes anywhere from three to eight hours to complete, and a final solution will be anywhere from 1,500 to 2,500 lines of code, depending on how you write it. As always, feedback is welcome on my milestone descriptions. I try and make them as clear and as detailed as possible. If something is unclear, let me know and I’ll work on it.
So other than that, after there, we’re gonna spend the next few weeks working on just object-oriented programming details. So we’ll spend some time on documentation and unit testing. We’ll introduce inheritance and polymorphism again. We’ll spend some time working on debugging, logging, and lambda expressions. And then we’ll get into things like design patterns, which I think are one of the most important takeaways from this class, probably other than unit testing is design patterns. So hopefully everything’s going well. As always, if you have any questions, let me know. Expect most weeks to see an announcement video like this posted on Tuesday, but because of the week I’m on campus on Wednesday instead of Monday this week, so you get an announcement on Monday. But in the future, these announcements will probably be posted sometime around Tuesday morning, so you can watch for that. So anyway, best of luck this week and I will see you all again next week.
Hello and welcome to the week three announcements video for CC410 in spring 2025. So you should have already wrapped up the second module which is on object oriented programming. We do a small example on object oriented programming where you make a few data classes and then you worked on the first big restaurant milestone where you made object oriented programming classes for each of the menu items in that restaurant itself. So this week we’re going to move ahead by talking about some things around documentation, unit testing and UML to actually diagram your program. We’ll do a documentation and testing example. And then for your second restaurant milestone, you’re going to write unit tests to actually review the code that you wrote in the previous milestone and make sure it’s correct.
So for the second milestone, you’re going to be writing unit tests. The number of unit tests that you write may vary. My model solution has around 400 unit tests, but it may be a little bit overkill. So in the range of three to 400, I think is what’s appropriate. You’ll have documentation comments that you’ll add to all your code. You’ll add a UML class diagram for your project. In total, this project should take between three and eight hours as long as you work pretty diligently about duplicating unit tests carefully between the different classes. You’ll find that most classes have very similar unit tests. So this one may be between 3500 and 4000 total lines of code, but a lot of that again is repeated and copied. And as always, feedback is very welcome.
So some big hints for the second milestone. Do not look at the source code for your solution to milestone one. For example, the mistake that a lot of people make when writing unit tests is they pull up the code for the class they’re going to test and then right next to it, they write a unit test to test that code. That leads to tests that are bad. What we want to do is we want to write tests that confirm that the code works correctly, not that the code works like it is written. So for example, if you’re checking the price of an item, you should go back to the original menu from the milestone one description and look at the menu price for that object and code that into a unit test. You shouldn’t look at the source code to figure out what that price is because if the price is wrong in the source code, your unit test will then test for the wrong price. A lot of students have made this mistake. One thing you can do is you can use global attributes at the top of your test for things like the price and the number of ingredients and the toppings and things like that. You could just have some global attributes at the top and then write the unit test so that they just read those attributes. In that way, you can just copy paste all the unit tests between the classes and change those global level attributes to represent the different classes. There’s a lot of different ways you can do it. You should also look at parameterized tests across enums to check all the different values. For example, if you’re not sure how to do that, here is some examples of generalized tests using global variables in both Java and Python. For example, this Java one, I have a price and a calories at the top. And then when I check for the correct price, the correct calories, I just reference that global variable. So instead of having to change those values down in my code, I can just change them at the top of the class and then copy paste all these unit tests in between the multiple classes to check the price and check the calories.
Beyond that, I really want to encourage you to think about this class in terms of a growth mindset. The milestones in this class are challenging. They’re meant to be challenging. The only way that you’re going to grow and get better as a programmer is by being challenged a little bit. And so when the milestones don’t feel like they’re easy, that’s because they aren’t. We want you to learn. So I want you to take some time, make sure you’re reading very carefully. If something doesn’t make sense, ask for clarification. And then, of course, start early, work methodically, and commit your work often to Git. For example, the milestone that’s do this next week, you should be starting on it right now and starting to work through that code a little bit at a time, instead of saying, oh, I’ll just do everything on Sunday. When you try and work eight hours in a block, that’s really, really hard to do. So if you do a little bit at a time, that helps you figure out if you run in any errors, if you need any assistance, things like that.
So looking ahead after this week, we’ve got milestone four. Next week is going to talk about inheritance and polymorphism. Then we’ll spend a module on debugging and logging. Then you’ll have your second final project check in toward the end of February. Then we’ll switch over to do design patterns and test doubles, which I think are the two really cool things we cover in this class. And then after that, we’ll talk about graphical user interfaces, web interfaces, et cetera. So hopefully things are going well. You’re going to write an awful lot of tests this week, but it’s really, really good practice to get used to writing unit tests for your code. It’s something that you do a lot if you write professional software. As always, if you have any questions at all, feel free to let me know. Otherwise best of luck, and I will see you again next week.
Good morning! Unfortunately I’m not feeling very photogenic this morning so I won’t record a new announcements video. Instead, here is a repeat from last semester that has all the pertinent information about the upcoming milestone. Best of luck!
Hello and welcome to the week four announcements video for CC 410 in fall 2024. So this week you should be wrapping up the second restaurant project milestone, which involves adding documentation, unit testing, and a UML diagram to your project. You should have done a short example of adding documentation and unit testing to an existing project, and then you’ll expand that into the restaurant project. And hopefully you’re getting that all done. I noticed that so far I’ve only got one of those submitted, so hopefully you’re getting that wrapped up and submitted pretty soon later today. So this week we’re going to shift gears a little bit, and we’ll spend some time talking about inheritance and polymorphism, which are two of the really big reasons that we use object oriented programming in this class. We’re going to do a small example of looking at inheritance, and then you’ll have some time to think about your project, but there won’t actually be a restaurant milestone due this week. There is one due next week that includes debugging and logging as well. And so instead this week you’ll have a little bit of time to think about your final project. There’s a start stop continue survey out there, which basically asks you if there’s anything I should start doing in this class, stop doing in this class, or anything I should continue doing if you like things that I do. So it’s a chance for you to give some feedback. But really the big thing for this module is get through this module pretty quick so you can go ahead to the next module and start looking at that content and start working on the milestone, because there is a reason that I give you two weeks to work on this milestone. So you want to get to that as soon as you can.
So next week we’re going to introduce some things around debugging and logging. We’ll also briefly talk about lambda expressions, which are one of the important things that you’ll need for this. We’ll do a small example about adding debugging and logging to an existing project, one that you might recognize. And then you’re going to have the third restaurant milestone where you’re going to implement some inheritance and polymorphism in the existing code. It’s one of the few times where we actually refactor existing code to work in that way. And then there’ll also be the second final project milestone, which is due by the end of the week. So we’ll be there pretty quickly to the end of September by the end of next week.
So for milestone three, this is the first milestone where we’re enforcing all general requirements in the course involving documentation unit testing. typing all of those things that you did in the Hello Real World project. Those need to be implemented in Milestone 3. For those of you in Python, make sure you’re using a TOX file that has all of the correct commands in it. For those of you in Gradle, make sure you’re using a build.gradle file with all the appropriate add -ins added to it like we did in the Hello Real World. You’re going to add some inheritance to this. We’re going to create a parent class over our entrees, our sides, our drinks. We’re going to add some other additional interfaces and things like that. So you get to add inheritance to your classes and refactor a lot of code. And then, of course, you’ll need to create some new unit tests to check your inheritance and make sure that it’s working and update your UML diagram to match that as well. Overall, this milestone is smaller than the other two. It’s only about 1 ,500 lines of code changed or updated, but it is much more complex because you’re refactoring and adjusting existing code. So be kind of careful as you work on this milestone.
So some big hints for Milestone 3. First and foremost, I encourage you to work in small chunks. Don’t try and do the entire milestone in one shot. So don’t try and do the entire milestone in one shot. and then at the end, try and compile and run it. Work in small chunks, make sure your stuff is working as you make changes, and if you break something, try and get back to a working state before you stop. The second thing is take advantage of Git. You can commit early, commit often, you should have multiple commits for this milestone. One of the things that really worries me in this class is when I see students have one commit on GitHub per milestone, that kind of scares me because it really means you’re not using GitHub the way that you can, where you make little commits every time you get something working, so you can roll back if needed if you make a mistake. This is also a good opportunity to try test -driven development. You can actually try and write your unit tests before you write your code, and then get your code to actually fulfill those unit tests. It’s a really neat idea, and it’s a fun way to actually work on your code a little bit differently. Some of the other things I really recommend is you can inherit the item or order item interface on your base class, so you don’t have to inherit that on each of the entrees, side and drinks. If you inherit it on the base class, it will then transitively get inherited on all of the other classes as well. And finally, there might be some questions about syntax for some of this. Feel free to ask questions if anything doesn’t make sense or you’re not sure exactly how to do things because of interesting syntax.
So, like I said, module four and five, we’re gonna talk about inheritance and debugging and have another final project check -in by the end of September. Then we’re gonna shift over to design patterns and test doubles. Like I’ve said earlier, module six and module seven, I think are the most important new content that you’re going to learn in this class, probably outside of unit tests themselves. So we’ll spend quite a lot of time working on design patterns and test doubles before we shift over to working on user interfaces and things like that. So, hopefully everything’s going well. Hopefully you don’t feel like the whole world’s on fire with these milestones, but I do recognize that they are very large. They’re meant to kind of stress your ability as a computer programmer a little bit and give you opportunity for growth to really see how far you’ve come as a programmer. So make sure you go into these with the right mindset of knowing that it’s a challenge out there to help you grow as a programmer. It’s not meant to be obstacles or busy work to make this more difficult. It’s really meant to challenge you and help you grow as a programmer. As always, if you have any questions, let me know. Otherwise, I will see you again next week.
Hello and welcome to the week five announcements video for CC 410 in spring 2025. My apologies for not being here last week. I was under the weather, but hopefully last year’s video worked out really well. So this week you’re going to be wrapping up a module on inheritance and polymorphism. You did a small example exploring inheritance using a blender and a bunch of fruit. And then we also have in this class a start, stop, continue survey that’s out there. I’ve already seen a couple of responses from students. Basically I use that as a short little chance for you to give anonymous feedback to me throughout the semester of things you want me to start doing that I’m not doing, something you want me to stop doing that I’m doing that you don’t like, or something you want me to continue doing if you think it’s really important to your success. It’s just a great way for me to get some feedback and see what’s working and what’s not in the class. You also have some time this week to start thinking about your final project because there’s not a big restaurant milestone that’s due right now. So start thinking about how your final project idea might fit into some of the stuff we’ve already done with the restaurant milestones.
So this week we’ve got another new module. This module deals with debugging and logging and also introduces lambda expressions. So you’re going to do a quick example with debugging and logging and you should be continuing to work on the third restaurant milestone. That milestone you have two weeks to work on. So obviously it’s a larger milestone than before. So make sure you give yourself plenty of time to work on that third restaurant milestone. You should also be scheduling your second final project meeting. However, please be aware I’m out of the office entirely all of next week. I will also post an announcement to this effect later this week. It means I’m going to be unavailable for any scheduled meetings or anything next week. So if you need to schedule a final project, ignore the due date. Just get it on my calendar sometime between now and spring break and we’ll get that final project meeting taken care of.
So this week milestone three, all general requirements are enforced. That means your project needs to have all of those things we did in the Hello Real World project, including MyPy for type testing, using flake for style guide, using documentation. All of those things are going to work. to be enforced in this milestone, and if they’re missing, there are going to be point deductions that are taken off if you miss any of those things. So make sure you match all the requirements. You’re going to add some inheritance to your existing classes. You’re gonna refactor some stuff, add some new unit tests, and update your UML diagram. All told, this is really only about 1,500 lines of code added or changed, but you have to be very delicate and very careful to make sure that you’re changing the right parts. And as always, feedback is welcome if you have any questions or concerns about the milestone.
So some big hints for this milestone, work in small chunks. I see a lot of students that will slowly work through this entire project. They’ll kind of take everything apart, start trying to change it, and then they’ll get way in the weeds, and it’s hard to test if it’s all torn apart. So try and work on one part at a time, work in small chunks, take advantage of Git, use Git to commit early and commit often and save your code. That way, if you have something working and then you try and fix something else and it breaks, you can roll back to that earlier commit and try again. This isn’t also a good time to try a test-driven development, so you can actually try and write your unit tests before you try and pass them. That’s really an interesting thing to do. I give a hint on this one. You should always inherit the item or order item class on the base class and not the individual classes. So for example, in the entrees, the base entree class should be the one that inherits from order item. And in all of the subclasses of entree, don’t have to explicitly inherit order item because they’re inherited from the base class that inherits that. And finally, if you have any questions on syntax, please let me know, especially when we work with this inheritance stuff in Python, sometimes the syntax is a little weird. So don’t be afraid to reach out and ask questions if you have any questions on that.
Looking ahead for the rest of this next few weeks, we’ve got some time spent on design patterns and test doubles the next couple of modules. I’ve said this before, I’ll say it again. I think those are probably two of the most important modules in this class. And then after spring break, we’ll shift gears a little bit and we’ll start working on graphical user interfaces and things like that. And then leading toward web APIs toward the end of the semester. So hopefully everything’s going well. I know we’ve gotten a lot of snow this week and the week before. So hopefully it’s not too miserable out there. I know it’s really, really cold today, but try and stay warm. If you have any questions, let me know. Otherwise best of luck. I will not post a new announcement video next week because I’m on the road. I’ll probably repost a repeat from last semester again. But if you have any questions at all, feel free to let me know. Otherwise, good luck. And I will see you in a couple of weeks.
Good morning! I am travelling this week and won’t be able to record a new announcements video. Instead, here is a repeat from last semester that has all the pertinent information about the upcoming milestone. Best of luck!
Hello and welcome to the week six announcements video for CC410 in fall 2024. So this week you should be wrapping up the modules on debugging, logging and Lambda expressions. There’s a small example that you do on debugging and logging and then the third restaurant milestone is due pretty soon. So make sure you get that done. You also should be scheduling your second final project meeting with me. So I look forward to hearing about some of your interests and things that you’re looking at for your final project. This is again, just a quick discussion to see where you’re at on project planning and maybe give you some advice of things that you could start working on in your final project as you have some time over the next few weeks.
So this week we’re going to launch into one of the most important topics in this class, which is design patterns. So you’ll do a small example this week, building some design patterns in an example project and then you’ll update your restaurant project to include some new design patterns and you’ll also work on the first concept quiz. So for the fourth milestone, we’re going to add some new design patterns building around an order class, a combo class, a combo builder class and an order number singleton class. All of those are pretty important classes for us to be able to build orders and combos out of our menu items that we can add to our cart. So you’re going to keep track of all of those. We’re just building those in this milestone. And then the unit tests for a lot of these are going to be in the next milestone. I used to do these all in one milestone, but I found it was a lot easier to split them into two milestones. So you have time to work on building the code for all the different design patterns in this class. And the next time we’ll add the unit tests as we learn about test doubles and mocking.
So the other thing that you’ll have this week is the first concept quiz. This is basically a quiz to check your understandings of some of the concepts that we’ve covered in this class, including object oriented programming theory, code comprehension, UML comprehension and the ability to do unit testing. I want you to think of these not exactly as an exam, but more of a check for understanding for a lot of the concepts that we worked on. This has a two hour time limit and it is open book, open notes, open code, but all of the- Your work should be your own. So for example, do not go to chat GPT and ask it these questions and then copy paste the answers. You can reference your book, you can reference your notes, you can reference your code from this class, but I really want this to be a representation of your own work and understanding of these topics. That’s really what I’m looking for just to see how well you actually have understood some of the bigger concepts that we’re looking at in this class. So that’s what this quiz is about.
Looking ahead after this, the next module we’ll talk about test doubles, which is really what we need to do unit testing for a lot of these design patterns. Then we’ll shift gears, we’ll start talking about graphical user interfaces and how we can do things with event -driven programming to make our GUIs more effective. So hopefully everything’s going well. Hopefully things are progressing very nicely in this class. As always, if you have any questions, let me know. Otherwise I look forward to seeing you all again next week.
Hello and welcome to the Week 7 Announcements video for CC410 in Spring 2025. This week you’ll be working on a module about test doubles, which I think are one of the most important parts in this class outside of the design patterns that you worked on previously. We’ll be doing a restaurant milestone that implements a lot of these test doubles in unit tests, and you’ll also be completing the first concept quiz. In the previous video I talked a little bit about the concept quiz. It’s basically meant to check to see if you’re understanding some of the deeper concepts we’ve been covering in this class. It’s open book, open notes. It is timed, so make sure you watch out for that. And I’m really looking for you to do your own work. Please don’t use tools like Chat GPT on the concept quiz. I really want to see how well you’re understanding these deeper concepts because it really shows me that you’re getting the concepts that we’re covering in this class.
So the milestone you’re going to work on is adding unit tests for the design patterns that we added to the restaurant in the previous milestone. You’ll be using test doubles, so you’ll be mocking a lot of these design patterns up. What I really tell you to do is focus on only testing one class. So whatever class you’re testing, test that content, and then use test doubles to mock up all of the other classes that interact with it. If you do this correctly, it leads to a lot of more powerful unit tests for your project, which I think is really, really important in this class. Looking ahead after this, we’re going to have this up, and then we’ll switch over to working with graphical user interfaces here right around Spring Break. We’ll spend some time talking about event-driven programming. I think everybody should have scheduled a meeting with me this week or next week to talk about your final project. And then after that, we’ll kind of work on some stuff on external libraries, releases, web APIs, et cetera, as we get toward the end of the semester. So we’re getting close to Spring Break. Hopefully things are going well. We’re nearing that halfway point in the class, so hopefully things are going as good as you can. If you have any questions or concerns, let me know. Otherwise, I will see you again next week. Best of luck.
Hello and welcome to the Week 8 announcements video for CC410 in Spring 2025. So this week you should be wrapping up the module on test doubles. I believe most everybody already has that submitted, so that’s great. That module builds really nicely on the previous module working with design patterns. And so those two modules kind of go together. I’ll work on getting caught up on grading those now that I’m back from my conference. You also should have scheduled and hopefully already had your second final project meeting. If not, make sure you get that scheduled soon. And then you just completed the first concept quiz. And so I’ll work on getting that graded this week as well and get caught up on all of that grading.
So this week we’re going to shift gears and we’re start going to work on graphical user interfaces or GUIs. So the first one is just a basic GUI example. All you really have to do is follow along with what I do in the milestone and then build out your own GUI yourself. And so this leads to the sixth restaurant milestone. In this one you’re going to create the overall GUI structure with a lot of the buttons and some of the fields and things. I’m going to give you one example of how it can look. And if nothing else, if you’re not very creative, I encourage you to follow my example because it will work really well. But feel free to get creative if you want to adjust the layout or the colors or the fonts or anything. There’s lots and lots of things you can do in this GUI basics module to make your project unique. So feel free to take some time and get creative if you have any time and interest in that. Then looking ahead, we’re going to spend some time doing event driven programming where we actually make our user interface interactive. We’re going to talk about how we add external libraries to our project, how we build a release version of our project. And then once we shift over into April, we’ll shift over to web APIs and spend a little bit of time working on a web interface for a similar project as well.
So we’re finally at the halfway mark of the semester. This is week eight out of 16. So hopefully things are going well. This is kind of the point where we take a little bit of a break with this GUI basics module and having a spring break in here. Then we’ll have a couple of larger modules in late March, early April. Peter’s off after that. As always, if you have any questions or concerns, let me know. Otherwise, have a safe and happy spring break. And I will see you again in a couple of weeks.
Hello and welcome to the week nine announcements video for CC 410 in spring 2025. So last week you worked on adding a basic user interface to your program and this week we’re going to work on parallel programming and event driven programming so we can actually add events to your user interface so that when you click on the buttons they will actually do something. And then at the end of this we’ll complete restaurant milestone seven where we’ll add a lot of functionality to our user interface where you can actually create items and save them in the order list on the side of your user interface.
One of the things we run into in this particular lab when we start doing unit testing with user interfaces is the limited memory available in Codio. I talked through some of this in the example and in the project, but if you ever have any problems with limited memory, a couple of things that you might try. We don’t have any Java students this semester but if you run into problems with Python you can go to the project menu and hit restart box in Codio that will clear out all of the memory in Codio and then refresh your browser. For Python specifically in our tox file we’re just gonna run our tests in batches. That will help reduce the memory usage of all of our unit tests. So read that very carefully. Let me know if you have any questions doing that. If you’re working outside of Codio you shouldn’t have any of these issues and you don’t have to run the tests in batches. Just put a little note in the tox file that you do that and I’ll test it locally or batch it myself when I test it for grading.
So looking ahead after that, we’ve got module 10 and 11 where we talked about adding an external library to our project and building a release version of our project and then after that we’re gonna switch over and talk about web APIs. As I’ve talked with most of you once we hit that part of the class here in about three weeks the workload drops off quite a bit so you’ve got about the last month or so of the class to have more time to work on your final project. So we’re over the halfway point. We’re getting close toward the end of the semester already so hopefully things are going well. As always if you have any questions let me know. Otherwise best of luck and I will see you again next week.
Hello and welcome to the week 10 announcements for CC410 in spring 2025. So this week you should be working on an example of bringing in an external library into our project. We’re just gonna do a small example for how to do that. Then you’re gonna get started on the eighth restaurant milestone where we’re gonna add orders and combos. This is also another instance of the Start, Stop, Continue survey. So it’s a good chance for you to give me any feedback that you have on things that are either going well in the class, things you want me to start doing, stop doing, or things you wanna make sure that I continue doing in the class. This is another just good informal anonymous check-in to see how things are going.
So for milestone eight, we’re going to be working on the sidebar at the side of our UI for getting the orders correct. We’re gonna add new buttons on the panel for our combos and actually add a new panel for editing the combos themselves. We’re also gonna add some basic unit testing to our UI, nothing really particularly fancy, but kind of built on the example of what we’ve done previously for that. And a lot of this is going to make use of that factory method pattern that we learned a little bit earlier in the class. By the end of this milestone, you should be able to get everything into your sidebar, have your order show up, including combos. And then the next milestone will handle the checkout process where we can actually check out, get a receipt, things like that. So looking ahead after that, next milestone we’ll do releases and checkouts. And then after that, we’ll switch to the web UI basics. So April 14th is really that deadline where the content of the class starts to trickle off a little bit as we switch over to doing web APIs. So keep an eye out for that, that’ll give you more time to work on your final project as you go.
So we’re at a good point where we can finally start to take your order in our user interface. This is one of the best parts of this class where we actually get to bring everything together and see it work as a full point of sale system. As always, if you have any questions, let me know. Otherwise, best of luck with this milestone and I will see you again next week.
Hello and welcome to the week 11 announcements for CC 410 in spring 2025. So this week you should be working on a milestone on releases where we’re going to actually take our project and build a release version of it that we can share out with others across the internet. This is kind of the last big wrap up part of this whole GUI process that we’ve been going through. And so for the ninth restaurant milestone, you’ll be finishing the checkout process using the external cash register library that you’ve installed and also printing a receipt so that everything comes together and we have a fully working point of sale system for our project.
So the checkout milestone, milestone nine, you’re going to install an external library mimicking a cash register. This is a library that I have written that is open source so that you can read the source code for it, especially reading the source code might be useful when you’re trying to figure out how to write some of your unit tests. It allows you to pay with cash or with credit card, and then you need to write the algorithm to make change and make sure that the cash balances in the register itself. It is a little bit frustrating because you can’t count the cash in the register while it’s open. And so you have to have the register close to count it. You open the register, you make all of the changes to the register values and close it, and it should have the same amount in the register plus or minus the sales amount. So it’s a little bit tricky to make change. Don’t worry about handling every single minor detail in that process. If you get it mostly working, that’s what I’m shooting for. There’s a definite long tail of diminishing returns as you try and get all of the edge cases for making change. I’m not so worried about that. I just want you to see the complexity in that process. And then finally, make sure that you spend some time printing the receipt and read the directions on that to get your receipt to format correctly.
So like I said, making change is hard. So be aware of that. Don’t go chasing all of the little bugs. Get it mostly working and you should be fine, but make sure it is working so that you can see that. For receipts, remember that each line on a receipt has a limited length, and so you may have to trim or adjust the layout of your receipt to make it read. maybe even look at some real world receipts that you’ve received and see how you can format your receipt to match that. I highly encourage you to use the adapter pattern that we’ve learned earlier in this class, taking my catch register library, my receipt library, making a wrapper or an adapter around it, because that’s where you can write your unit tests. And then of course you can read the unit tests that I use for my library to kind of figure out how I interact with the library and how I test it. Remember, you don’t have to test the functionality of my library, you have to test the functionality of how you’re using it and make sure that you’re calling the right functions and doing the right things in your adapters.
So after that, this is the last week of the GUI milestone. So after this week, the milestones get a lot smaller as we start working on the web interface. The web interfaces is kind of a simple process, but I want you to at least see what it looks like and compare it to the GUI interface. So we have smaller milestones, it gives you a lot more time to work on your final project over the last four weeks of the semester. So hopefully everything’s going well. Hopefully you get really excited the first time you’re able to use the checkout and see that your credit card actually matches and it works. As always, if you have any questions, let me know. Otherwise, I will see you again next week.
Hello, and welcome to the Week 12 Announcements video for CC410 in Spring 2025. As promised, this week we’re going to shift gears from building a traditional desktop user interface to start building a web user interface. So this week we’re going to start talking about data-driven websites. You’ll go through a quick example to install a website framework on top of your existing project, and you’ll do that in your restaurant project as well. This is a good time to start working on your final project or keep working on your final project. Most of the milestones from here on out are much, much smaller, so you’ve got about four good weeks to really start working on your final project in this class. Remember the final project is meant to be about a third to a fourth of the size of the restaurant project, so a couple thousand lines of code is what we’re shooting for. That’s what we’re really looking at to get you to work on for this final project. So hopefully you can get rolling on that this week. If you have any questions, let me know, and I’m definitely happy to help with that.
So for the milestone, you’re basically going to set up a web framework inside your project. You’ll set up things like the web routes, the controller. We’ll also talk about using some template inheritance, and so you’ll have a master layout template for your whole page. You’ll do different templates inside of that for your routes, and eventually at the end of this, you’ll have a data-driven menu that basically generates a website that has the menu for your restaurant based on the data classes that we have. Obviously, in practice, you would do this based off of a database instead of a list of classes. We haven’t covered databases yet, so we’re using our object-oriented classes as a stand-in for a database, but really the theory is the same when you get right down to it.
So after this, we’re going to look at how we can actually add forms and custom fields to our website so that we can add custom menu items to our menu. Like I said, smaller milestones from here on out, and it gives you more time to work on the final project. Lastly, there will be one last restaurant milestone that is due on finals week, so make sure you’re planning ahead for that. That’s a really good thing to have in mind. So quick, we’re headed to the World Wide Web. Hopefully, things are going well. If you have any questions, let me know. Otherwise, best of luck on this week, and I will see you again next week.
Hello and welcome to the week 13 announcements video for CC410 in spring 2025. So this week you should be working on building a small RESTful API and building some web forms so that you can add custom menu items to your menu. We’re going to store those in a separate list from the classes that actually store the real menu items but it gives you an idea of what it might look like to have a web app that actually allows you to add custom menu items to our list. So you’re going to do a quick example around that and keep working on restaurant milestones for those. As before, these restaurant milestones are going to be smaller to give you more time to work on your final project, which remember that’s coming up very soon.
So like I said, milestone 11 is all about adding web forms and search results and presenting those results through your web application. So it’s a really nice way to actually play around with your application and make it a little bit more useful for your users. Other than that, we’re going to start adding some RESTful API content and giving you a lot of time to work on your final project. Remember that’s coming up in about three weeks. In the last restaurant milestone will also be new finals week. It’s a very minimal milestone where we add some serialization to the project as well. So just be aware of that, that that’s coming up. But other than the final project and the restaurant milestone, there are no other finals exams or anything in this class, just those milestones.
So looking ahead, we’re looking toward the end of the semester. It’s only three weeks to go. So make sure you’re getting stuff wrapped up. As always, if you have questions, let me know. Otherwise, best of luck this week and I will see you again next week.
Hello and welcome to the week 14 announcements video for CC 410 in spring 2025. This week you should be working on your fourth final project milestone. So you’ll be scheduling some time to meet with me either this week or next week to talk about your final project. There’s also the second concept quiz that’s out there. So make sure you’re looking at that and getting that done. And then there’s also a restaurant milestone and an example about using a RESTful API to be able to add and edit custom menu items to the project. And then of course, make sure you keep spending some time working on your final project. There’s a lot of different things to balance this week, but hopefully you’re finding time to get all of these things done as you get toward the end of the semester. So for the next restaurant milestone, we’re going to be building a RESTful web application that allows us to create custom menu items. We’re gonna reinforce some of the design patterns that we saw earlier this semester, such as the iterator pattern and the singleton pattern. And this is really the last time that you’re going to go through and update your UML diagram to match everything that you have going on in your web application.
Then we go to next week, we’re gonna have a quick example of using serialization to save data. So we’ll talk about some form validation and some serialization. And then of course, you’ll keep working on your final project as we get toward the end of the semester. After that, the rest of the semester is really a textbook quiz that’s going to be due on finals week. And then you’ll have your final project milestone five, which is the presentation that is due on May 16th, which is the end of finals week. For your final project itself, your deliverables are pretty simple. Just like every other project, you’re going to create a release tag on GitHub. Make sure that your release tag meets all the requirements for that project. So make sure you read the requirements page for your final project again. You should have code documentation in your code, but you may also wanna create things like a read me file or some user documentation for how to use your project. And then you will create and do a presentation.
The presentation itself should be around 15 to 20 minutes and it should go through your project both in code and demo your project and talk a little bit about the design of your project. Most students choose to pre-record this. All you do is just open up a Zoom room. hit record, share your screen, show whatever you need to do there. If you wanna present it live, you can do that. You just have to find a time on my schedule. But if you do pre-record it, I’d like you to schedule a time anyway for me to have a quick Q&A. Only needs to be 15 minutes long just so I can see your presentation, ask you a few questions about your project. Big thing to be aware of is my schedule on finals week is really busy because I take care of the computer science final project class and that eats up all of Tuesday, Wednesday, Thursday. So if you wanna meet with me on finals week, you really only have Monday or Friday and you are competing with the ICS capstone students. So if you wanna grab a time on my calendar, either Monday or Friday of finals week, for about half an hour if you’re gonna present live or for about 15 minutes if you’re gonna do a Q&A, that would be fantastic just to get that on the schedule.
A lot of students ask what their presentation should cover. Here’s kind of a quick suggested outline. You can also find this out on the materials for Canvas. You can give a quick, introduction to your project, talked about where your idea came from, some background behind, you know, what you looked at, maybe some other inspirations, things like that. Spend some time talking about the implementation, different code structures, classes, design patterns, anything you did in the implementation. Give a quick evaluation for how well your project met your original goals. Talk about future work. If you’re going to keep working on this project, what would you do next? And then, of course, give us a demo and show how it actually works.
So we’re getting toward the end of the semester. It’s week 14 out of 16. So next week is dead week and then finals week. Hopefully things are going well. Hopefully you’re getting toward the end of the semester. I will probably post one more announcements video next week for the semester and then we’ll wrap up from there. But as always, if you have any questions, let me know. Otherwise, best of luck this week and I will see you again next week.
Hello and welcome to the week 15 announcements video for CC 410 in spring 2025. So this week you should be working on the last couple of things in this class where we’re going to talk about some form validation and some serialization. You’ll do a quick example about that and then you’ll add that to your restaurant milestone. Other than that, keep working on your final project. This is really the last restaurant milestone and then you’ll have a couple of weeks to wrap up your final project. I believe I met with most all of you last week about your final project, so hopefully that’s all going well.
For the rest of the semester, there’s a quick quiz on some extras in the textbook that are out there for finals week and then the other big thing is to finish up your final project and present it to me either Monday or Friday of finals week. So remember the deliverables for your final project. You’ll need to have a release tag on GitHub that meets most of the requirements, so make sure you read the requirements page. Your code should have proper code documentation just like we’ve been doing in this class. It should meet all of the basic programming requirements such as having MyPy for typing. It should meet the flake style guide. All of those things still apply to your final project and then you’ll do a presentation.
Your presentation should be around 15 to 20 minutes. You can either pre-record it or you can present it live to me and then you should also schedule some time for some Q&A generally after you submit your video. So if you want, either schedule a time with me Monday or Friday of finals week. There’s lots of times open. If you pre-record your presentation, only schedule about 15 minutes for Q&A. It’s just a quick chance for me to ask any questions I have after watching your presentation before we turn in your final project. And then finally, a lot of students ask for an outline for your final project presentation. This is listed on the textbook. This is what I recommend. Basically talk about where your project came from, how you implemented it, how well it actually met your needs, talk about any future work you would do if you kept working on it, and then give me a quick demo.
Finally, last big thing in this class are teaching evaluations. Teaching evaluations will be sent out via email on finals week, so make sure you take some time to fill those out. Remember that teams are anonymous and delayed, I cannot read the T-Vals until after I submit final grades and any and all feedback is welcome both good and bad. This class has changed quite a lot over the past few years that I’ve taught it and a lot of the feedback has come directly from students via the T-Vals. So I really want you to take some time, tell me what you like, tell me what you don’t like, give me suggestions of things I could do better or things that you like that I should keep doing. All of that is very useful in the T-Vals so I appreciate your honest feedback in the T-Vals when those come out on finals week. So other than that we’re waving the checkered flag we’re at the end of the semester hopefully things are going well. This is the last announcements video I’m going to do for the semester so it’s been a great pleasure having all of you in my class this semester and I wish you best of luck in the future.