[MUSIC] Hi, I'm Mia Minnes, and I'd like to think with you for a minute about computer science and the various roles that we can play as computer scientists. So, when you think about building your project or building a new application, there's a spark at the beginning which is the idea for what you want to build and what you wanna do. And then there's a process where you do some algorithm development and decide how you're going to solve the problem and perform that task. And then you go into the implementation phase, testing, maybe doing some use cases and use error analysis. And then think about that user experience, and the human computer interaction. Now within computer science we have sub disciplines that really think about each one of these stages and go even further. And, in this course, we invite you to try on some of these hats and to work in each one of these roles, but the focus will be on the first few pieces that we talked about, those first few stages. The algorithm development, which is where my research area really focuses, but then also the implementation and analysis of performance, and different data structures that support the project and the performance of our code. So what we'll be doing in this project demo, is showing you a prototype of the project that you'll be developing in this course. And I hope that you'll be as excited about it as I am. So what you can see here is a prototype of the project that you'll be building. Now you'll be focusing on the backend algorithm design and implementation, and the performance implications. But we've built a front-end prototype, very simple user interface. So you can see your work come to life and really interact with it. Now from the get go you'll already be able to type in some text into this text box. For example the cat is on the mat. But now let's think about the functionality that you'll add in. And so for example, you'll be able to do spell check. And so when we go on and try to write more we might wanna write the cat. Look, there's already a mistake, T-E isn't a word. And so, your code will be able to highlight those spelling errors and indicate that there's a problem. Moreover, when we right click on that error, we can look for suggestions. And so, the, which is what I intended to spell, comes off as a suggested word. And so if we say the cat is black, then already when I'm just starting off to type B-L-A-C, I haven't gotten to a fully correct spelled word. And so my text editor is saying hold on, you haven't spelled the word correctly yet, and I might ask my word processor for help. Could you help me autocomplete the word? And so in that if I turn on autocomplete then, now I have a list of suggestions as I'm developing the new text and as I'm writing more. So for example I can write the and without having to spell the whole word, I'm coming up, I'm getting suggestions about how I might want to complete my word. So the cat is [SOUND] happy. That sounds good, that's the word I want. And now I have three sentences, two of which were helped by the code that you'll be running, namely Spell Check, Spell Suggest, and Auto-Complete, which I think is really cool because we use these functionalities every day when we're typing on our really modern word processors, but now you get to peek under the hood and see how those functionalities really get developed and implemented. Now in addition to the pieces that we've already seen, we'll also be implementing what's called the Flesch Index, which is this button over here. And what the Flesch Index lets us calculate is how hard it is to read this text. And so, for example, if we compute the Flesch Index of the text that we have over here, we get a really high number which indicates that these sentences are really quite simple, and we expect beginning readers to be able to read and understand what's going on in them. And that kind of makes sense too. So you'll be implementing that and moreover, you'll be implementing something called the edit distance, which lets us compare two words to see how far they are from one to the other. And you can see how that might be connected with some of the other functionality that we've already jammed into this really cool project like autocomplete because then you want to find nearby words. So, let's try the words hi and bye and let's see how far apart they are from one another. And so if we think about connecting those two words, we see that we could switch the word hi by switching one word at a time to get all the way to bye in just first three steps. And so, you'll be implementing that game too as well as generating mark off text. Which means start with the words that are already in that text box and try to create new text based on the patterns or the quirks that we see in the text that we trained on or we started with. If we want, for example, to generate maybe 20 more words, based on the cat is on the mat, the cat is black, the cat is happy, then we see the cat is on the mat. The cat is black. The cat is black. The cat is happy. The cat. And so notice that these sentences are a little bit different from what we had before, but they have some of the same feel. And so we're able to do this predictive text creation as part of the nifty word processor that you will be creating. So these are the functionalities that you will be developing throughout this course. But what's really important aside from having a sense of satisfaction in building this application, is that you'll be using really important fundamental computer science concepts throughout. And you'll be thinking about how these roles of back-end developers and front-end developers interact with one another, and how the algorithm design and the foundational concept of computer science really drive us forwards as we develop more and more projects.