[MUSIC]. Hi. I'm Scott Ricksner and welcome to the principles of computing. I'm here with my less serious colleague, Joe Warren, and my more serious colleague Luay Nucklay. And we are the instructors for this class. The three of us teach the introductory curriculum here at Rice University, and we are trying to take this curriculum online. And this class here is the analog to a class that I teach in the first semester of the Freshman year. Now, first I would like to introduce ourselves a bit, okay the Principles of Computing is a class that. We have constructed to follow on to our first offering, introduction to interactive programming in Python, to start to dive a little bit deeper into the principles that underlie computer science. And with that, I'd like to let Joe Warren introduce himself now. >> Thanks. I'm Joe Warren. I'm a professor here at Rice. I along with Scott put together an introduction to interactive programming in Python. That class is based on a class here at Rice, in which we teach students how to program. With motivational aspect of building games. A couple of years ago, we sat down and kind of rebuilt this classroom from scratch, using Python. And so what we have right now is a class that we teach on campus to Rice students. It's about the, half a semester's worth of class. And we have an online class that a lot of you have taken, which kind of gives you really the same kind of material in there. >> And now let's hear from Luay. >> Hi, I'm Luay Nakhleh. I'm a faculty member here in the computer science department. I teach an algorithmic thinking course which will be the third course in the sequence as we all three of us will be teaching. My main role will be basically to fix all the mistakes that these two guys make. >> [LAUGH] We don't make mistakes. Come on now. >> And in, in algorithmic thinking, basically we teach the students how to go all the way from taking the problem in any domain like biology or physics or chemistry or social sciences. Go through algorithm design, reasoning about the algorithm and then implementing it so that we solve the original problem. I view algorithms as, as a central component in computer science, and that will be the focus in the course, which we have been teaching here at Rice for four years. And we will adapt it for this online version of the course as well. >> Thank you. The principles of computing really sits between the two courses that Joe and Luay talked about. The idea here is to bridge the gap between the motivational aspects of building games. In which we taught you some of the principles of how to construct larger programs in Python. To really doing the algorithmic thinking that is going to occur in Luay's class. So the idea here is to be able to give you a more principled way of constructing complex programs so that as you're doing the algorithmic thinking in the follow on class the programming will not get in the way. That you will have a foundation upon which you can build these complex programs. I think now we'd like to talk a little bit about our personal sort of experiences with computer science. And so again I'm going to, I'm going to turn to Joe and let him, you know, tell you why he's a computer scientist. >> Why am I a computer scientist? So I guess I went to high school in the late 70s. And I came here to Rice in 79, I was a student here from 79 to 83. And so at the time I had an option of being a math student or being a, this new kind of new fangled computer science student. And I decided that, you know, I do math but get paid like a computer science person, because the pay was actually quite well there. But, I kind of came to computer science because I really enjoyed this interplay between mathematical reasoning and building things. I could think mathematically but then have the joy of actually constructing these mathematical creations. And building those and seeing the tangible result of what I built. >> And I'm guessing Luay has a different story about why he's a computer scientist. >> So just to to start, I was born in the 70s. You can tell the difference in age between me and these two guys sitting here. I might look older than them, but that's because I am wiser. >> [LAUGH] >> So about my experience with computer science, it started in ninth grade when I took a computer science course. And for the entire year we did not touch a computer. We did not see a computer at all. It was actually about designing algorithms for doing something simple, like for example, finding maximum element in a list. And that immediately attracted me because I could see how we can develop methods that can solve problems from the simplest one, again like finding the maximum element in a list. To much more complicated problems. So that's how it started with me with computer science. When I finished high school, I applied to college for studying either Physics or Computer Science and I was accepted to both. I finished high school in 91, it was around the time when Stephen Hawking's book, A Brief History of Time came out. And everyone was talking about black holes and all these kinds of things. I was intrigued by that. But again as similar to Joe's story is that I thought about these two fields. That they are both mathematical in principle. But I thought that there would be more jobs for computer science. And that actually tipped the, the balance for me towards computer science more. >> Well I certainly have more gray hair than Luay but I'm not sure that means I'm older than he is. [LAUGH] Alright. So my story is a little bit different I think. When I was growing up you know, I was always fascinated by computers. Computers were not so common, right? I am old enough to not have had a computer in my house. As I was growing up until I was much older and I was fascinated by how they worked. And I continue to be fascinated by how computers work so a lot of, of my excitement about computer science is the interplay between hardware and software and how the underlying systems actually work. So I do enjoy math but I'm not a mathematician the way these guys are mathematicians. Okay? Alright. So now I'd like to talk a little bit about you know, what our belief of computer science is. And I'd like to let Joe start the discussion here, and give us a straw man for what he believes computer science is. >> So here, I'm going to pretend that Luay is a high school senior coming to interview at Rice, because I get this question all the time. Which is, they come and say. I want to, I want to do computer science. I've done all this programming in high school, and I'm ready to be a computer scientist. So, the thing that I would actually say about what is computer science is to consider what does it mean to be a writer? Think about your, in high school you've taken some classes on writing grammatically correct English. And you ask yourself, am I ready to be a writer now? And the answer is, no you're not. So, I think programming is very similar to basically writing grammatically correct English. You understand the kind of syntactic constructs of your programming language, you kind of put it together to solve simple assignments. But the reality is you're not ready to write a good novel yet. So computer science is this idea of kind of studying computing, and trying to understand how to basically build cool stuff with computers. I think I've heard it described as how to tell a story. And so for me, computer science is this idea of understanding the great themes of computing. What have people studied before, what do they know? What can we leverage? Adding new themes to those, going through and learning how to use the skills that you've learned as a programmer, to solve problems. To go out and build things that can change the world make the world a better place, make you some money, but it's to do things with computers. Is that okay Luay? >> Sounds fine, I would actually, for me, my view of computer science is influenced by how I do research or what the research I work in which is in applications of computer science to biology. So there we look at the problem that comes from biology without us being biologists ourselves. And we think about how do we take a problem that's described in English or any natural language, whatever the language of the biologist is, and how we thinking about to solve it using computers? Of course the problem is not described in, in a language that's amenable to algorithms. So we have to go through an entire process. Of, of, formalizing the problem, doing formal reasoning about it, thinking about the algorithm and then implementing it. So for me, I view computer science as this discipline of reasoning about problems, designing solutions for them, which includes the algorithm design as well as the implementation to solve real world problems. >> How important is it to be a good programmer? >> Obviously it's not that important because I'm not a good programmer. [LAUGH] I know that question was going to come at some point. >> I want you to know that Luay is the best pseudo-programmer I have ever seen. [LAUGH]. >> That was a serious question though. How important is it to be a good computer programmer to be a good computer scientist? >> I think it's very important to have outstanding programmers in computer science but, I don't think it is very easy to be outstanding at every aspect of computer science. Again as I mentioned, for me, I look at even in the homework assignments that we give in algorithmic thinking. We do, the homework assignments spans, spans the problem all the way from the English description to the implementation and running the analysis. And, in that part of that process is writing the program and one has to be, very capable of writing the problem, knowing the syntax of the language, knowing, you know, all sorts of tricks and so on to implement the, to implement the program. But there are many other skills that, that, the computer scientists need to be aware of. So many people, for example, are very good at designing algorithms, and once they design the algorithm they figure it out, that's where they stop and say someone else, let someone else implement it, and I see a room for these things because. It's not easy for everyone to claim that, I am good at doing algorithms, I am good at, at coming up with the math. And I'm the best also at doing the program, because I am sure I can write the program that implements my algorithm, but I am also sure that there's someone who can optimize that code even better. And make it even more usable. >> Come on, you're being ni, you're being to nice here. I'll, I'll shake it up, I'll get Scott inflamed here. >> [LAUGH]. >> So, I've actually read this, and I subscribe to this little point of view, that in some sense, programming is actually probably the least important skill. I kind of view that being the janitor of computer science. And let me explain why the process of taking a well defined description and turning it into code is actually a fairly straight forward thing. The hard intellectual challenge is hearing a problem, thinking how to formulate it, thinking about algorithms, data structures, how to solve it. It's taking that high level problem and turning into a specification and a program we can then turn into code. And I mean you'll see this, for example outsourcing. Outsource is going to take a lot of the low end programming jobs and essentially kind of. Kind of put them out to the world where they're really done by a low cost. The people that are actually making the six figure salaries in computer science are the problem solvers, the one that a corporation can come to and say hey, I have this computational problem and I need you to take it and figure out how to solve it and build me a description that I can then give to some programmers and turn it into some code. Now don't get me wrong, I don't think that programming is irrelevant. I think it is very important to understand how you actually implement these because it will influence your design. But I think the role of programming is not as high as Scott might think. >> So how important do you think it is to be disciplined in your approach to doing this versus being a maverick and just going out there and doing it? >> [LAUGH] So Scott was, so Scott and I actually have many, many comments about this. And I'll say in building IPP, I have learned the importance of discipline. >> [LAUGH] >> But I'll leave you a little background for what I do. So for 25 years, I did basically computer graphics. And so my kind of job was to solve problems in computer graphics. And I had students that essentially translated my ideas into code. And so a lot of code that they had built was kind of one-off code that was used to demonstrate a concept or to solve a problem and they weren't working in teams. The thing that I've learned working with you is that if you need to work with others, and that's for most of the problems your out there, you're going to have to work in teams. Discipline is very important because the wild hairy code that you write for one-off for maybe a research paper is not the kind of code you want to have in say. Maybe some kind of critical operating system for a flight control system on an airplane. So I definitely think that discipline is an important thing and I, and I've kind of come around a little bit in principles of computing where I think that it's important to train the students to be more systematic about the kind of code that they write. So, I'm coming around some. >> [LAUGH] So actually, I have a different perspective on computer science than these guys. While they like to focus on how I use a computer to solve sort of application level problems. I actually enjoy the system. I actually really enjoyed building Code Sculptor, for instance. I like thinking about how the underlying tools and the underlying computer actually works. So I can provide facilities for other people to build these kind of solutions that these guys are talking about. And I think that, this shows that there's a diversity of things that you can do in computer science and I think that's what makes computer science great, at least from my perspective. This is also why I think the three of us, perf form a great teaching team for this course and follow-along courses. That we each bring these different perspectives about programming, about systems, about applications, that hopefully will shine through in these courses, okay? And we want you to see that, yes, programming is important. These principles are important, algorithms are important. And the way that you think about problems and use computers to solve them are also important. We're definitely excited about teaching these courses. And I hope that you're going to be excited about taking them.