00:00:00,600 --> 00:00:01,450 - All right. so, let's go ahead now and make a transition in code. - So much like our transition from scratch to C and ultimately C to JavaScript. So with C to Python, I decided to take the approach of trying to map one language to another. Give students a representative example of a construct in C, whether it's a function, or a loop, or condition, or a variable. And then show them the equivalent Python. So much like in Scratch, they're reassured that the idea is the same, but now you have a colon and you have fewer parentheses and no semi-colon and you really have to indent. But it's not a big deal, is the point at least, of that. And what I found hopefully was helpful too in explaining this, or at least as helpful for the way my mind works, is to actually pull up some representative examples. Not just of lines of code, but whole programs, and import them from C to Python. So that one, students ideally already know how the C version works. So there's no cognitive barrier there. Now it's really just a syntactic translation of one to the other. - So it's certainly nice then to have that corpus of demos ready at hand. all of our lecturers come with a zip of all of the source files that you show and lecture. And so we can just take those and immediately transform them into Python. - And it's a very safe way, I think, of exploring a new language. Even for me it was enlightening to just take the C example and then figure out, all right here's the solution literally on the left, how do we now on the right re-implement this in Python. And it's an opportunity to read up on a language, figure out how I can do things a little more elegantly, maybe Python really can tighten some of those things up. Because you can you have some nice constructs like for...in for instance. And so that was helpful exercise I thought. - And super impactful is the ability in CS50 IDE to actually have a split window to show it literally side by side, as opposed to jumping back and forth between them or showing them on a PowerPoint slide, which is what we've done before. - I agree. And hopefully students found this helpful too for pset 6. Since beyond the sentiment analysis and the ML part of that problem set did we have students reimplement Mario and/or Caesar or Visionaire or Crack, and so forth. And there too, I feel like that's a very comfortable space to be in because, hey, you already have your solution, whether it's yours or ours that we made available. All you have to do is figure out now how to map this to a new language and you have the entirety of Google and the web at your disposal, as well as the lessons learned from class. So hopefully that's a nice way of sort of bootstrapping oneself to enough comfort to then bite off something like sentiment analysis. - Now Python, as a language, has much better I/O capabilities than C, at least out of the box. So what motivated, nonetheless, we saw a little bit earlier porting the library to Python. - Yeah. It was a good question and it was kind of a toss up because Python has a nice input function that will just get you user input, much like getString. But I wanted to actually return a specific data type, much like we did with C. And I also wanted there to be really a one to one mapping for those early conversions, those warm up exercises where you don't have to figure out how getString and getInt and getFloat and so forth work. We actually want to just port those, literally, over to the equivalence. Plus for some of our teachers online, especially in CS50 AP who might be using Python even more, it's just nice to be able to hand students a library with which they can even do earlier portions of the course, but in Python. So just having that in our toolkit felt compelling, even though we very quickly abandoned it deliberately for later in that same piece set. - I suppose even on its own it it allows us to introduce the equivalent of pound include with Python's import. - Indeed. There's a nice mapping to that as well.