 Alright, welcome everyone to CSU 340, making sure that I'm the right person, you're the right person, everybody's the right person. If you're not, it's okay because you get up very quickly and make sure that nobody will stare at you. I'm really excited for this semester. For those that don't know me, I'm an academic, I'm a professor in the computer science department. My research interests involve security. So what I'm really interested in is using automated tools to automatically find security vulnerabilities in programs. And that actually uses a lot of the techniques that we're going to talk about in this class as the basis for that. So part of a lot of compiler techniques, most kind of things that we use there, we actually use in my research a lot. So that's why I'm really stoked to be teaching this class. And yeah, a little bit about my background. I did, let's see, five, no, a total of nine years at DC Santa Barbara. So I did like a five plus one or four plus one undergrad thing there in computer science. And then working for Microsoft full time as a software developer. And I decided I really, really like doing research when I went back to Santa Barbara for a PhD. And then I came here to ASU, so this is the start of my third year of ASU. So I'm very excited to be here. I'm going to be super excited when the weather cools down a little bit. So I'm not a little germane while I'm up here talking to you. But I think with a room like this, we should be good on AC, right? Since we're not 438 students in there. So yeah, it's a little bit about me. So if you have any questions about what it's like in industry, what industry people are looking for, feel free to send an email. We're happy to talk about that for coming out office hours. Always happy to chat with interesting, interesting students. Questions? So here's the course webpage. So this is basically all the information you need to be on this website. We have a blackboard page as you go to my ASU. The blackboard page is really just for homework submissions and to give you grades. That's it. So all the information you need about projects, about when homework assignments, one thing you're doing is all being on the website. So it's your responsibility to check it and keep it up to date. All right. Let's see. Nothing super crazy in here. Meeting times. We all found the right place. That's good. Let's see. Okay. All right. So everybody's going to be on here. Now let's go over to the Superfunds little bit. So what you have to do is make sure that when we start the course, you're on the same page, not on the same page, because I want you to be successful in this course. So who's heard about 340 before? If you want to share something that you've heard about before? No? Yeah? And pack that up? No? Okay. It's a big group of all friends here. Good instructor. Okay. You know where. The first thing that all of that helps a little bit, I'm just kidding. I have no idea where you are. You're just some kind of audience right now. Okay. I like that. Anything else? I mean about the course itself? Yeah. Start early on these things. Yes. Start why? They're long. They're long and difficult, right? These are going to be some of the most challenging projects you will do up to your computer science career at this point. My goal is to challenge you and push you and set really high standards, because the people graduating this class are the people who are able and ready to solve complex problems using computer programs. And so that's what I want you to do. So you have to help me help you, right? You have to start early on projects. You have to actively try and do these things. I have met many students over the last year and a half who up to this point are very good students, very smart, very bright like everyone in this room. And then they wait until two days before a four-week project is due to start. And they do not finish on time. And so they take a zero for that assignment. And this can happen to many, many people. So this is the aspect of everything. Anything else? Class is hard. It should be. You should like it. That's hard, because you like solving challenges and this is going to make you better or employable programs in the future. Cool. Okay. We have two TAs who I believe are not here. Is that correct? Anyone want to pretend to be the TAs? No. Cool. So Eric and Mohsen are TAs for this course. They're both PhD students in computer science. They have a lot of experience. I know some of you are at Eric's recitation section yesterday. So you got to meet a little bit about him. He's a very good person. And Mohsen has TA'd this course, I think since 2011. Like he's probably, don't tell him this, but he probably knows more about this course than I do. So he's a great resource who can help you be successful in this course. Because he's seen literally the gamut of what makes people successful in this course. So you can see on the website, we have office hours. So please feel free. Come visit us in our office hours if you're having trouble with the material, if you want to talk about projects, and that's what we're here to help you. Because there's three of us, and it can get communication, it can be a little bit weird. If you want to send an email to me or us, if you use this email address, csc348springf16adansv.edu, that'll get routed to all three of us so that one of us can respond to you. So take a look around and look at all of your fellow students in this class. I'm sure there'll be people in the back. These are oddly not distributed evenly throughout there, right? There's a lot of you, right? We want all of you to be successful, so you have to help us. If you do things like this, if you, as I see, ask questions on the mailing list, then we can help you, and your fellow students can help you. If you just send emails directly to me, they can get varied in a lot of other emails and other things that I have to deal with. So this is a very good way to make sure your email is addressed. Questions so far? I don't think it's too long on this, but I don't think it's a cool subject. Okay, yeah, so off-hours, I want you to know one of the worst things is when a student comes to my office and is like, I don't understand this. And you're like, okay, that's totally fair. I had trouble understanding this material, too. Great. What don't you understand and what things have you tried? And you say, well, I don't know, I just don't get it. Okay, well, what have you tried? Have you read the book? Did you read any other readings, right? So it's up to you to take responsibility for your education and try to train yourself the best you can in this material. You know, we will help everyone, but it will be much more successful helping if you take the time and effort to read any of these things. There's a fantastic essay that I highly encourage everyone in this room to read. How to ask questions to the smart leg. You all want to be smart, right? We all are smart and you work hard, right? So asking questions, right? Maybe that's what we haven't thought of, right? This is how to ask questions. This has fantastic examples of how to ask questions so that people can help you. And it's related to what I just talked about, right? So have you ever had a friend evening on you and was like, hey, can you help me with pointers or something or linked lists? And you're like, that question is so generic that how could I ever respond to that in a fixed amount of time, right? What's more useful is, hey, I'm having this trouble with linked lists. It turns out my linked lists are empty, but I tried this code. I'm adding things to this linked list and I searched for these keywords, but I can't find anything that helps me. So that demonstrates to us that you're actually actively looking for things and that you're not just saying, hey, I don't know how to do this. You help me, right? It's like, no, you've done the work and you're just stumped. But you put work in so it will definitely help you. So this is good for the advice for the rest of your career as well as communication. So Google Group. So I use Google Group. You'll be required to sign up for this Google Group. Any announcements about project due dates, whatever will be made through this Google Group, so it's a good way for me to announce things to all of you. It is also a fantastic resource for the, for you to get help from other students and to help other students. So that way one of us can apply right away. Super happy and I really think that's where we're going to be successful when we help each other on these projects. We also, I mean you realized, we also have some TAs we're not yet listed on the website but they will need. We have some undergrad TAs. Do they want to stand up and wait so maybe you can see their faces. So they will have office hours in the computer labs. There you go. Yeah. So they've taken this course. They've done really well which is why I have undergrad TAs for this course. And so they're very familiar with the material. They're familiar with the projects. And so they'll be holding office hours in the computer labs so you can come to them for help. They'll also be very active on this mailing list answering your questions. And so I think we're, actually we have, I believe the count is six. Some of those who are doing the error, I think there's other people who couldn't count. There's lots and lots of support for you in this class. Questions? You can ask questions. It's okay. Just have a raise of hand. Not yet. So yes, but in a bit. Yes. So the mailing list is Spring 2016? Yes. No, no, no. Oh, I knew wrong. Okay, I'll take that. And... Okay. This one's all. Cool. Okay, so this is what you have. 230 eyeballs. What do you do with my slides? Not yet. We'll get to that in the syllabus. Okay, so another important thing is, right, so dealing with 230 students if you send me an email directly with a question, I will I think I'm, like, 98% I will respond to you. I will make every effort to respond and whether I respond. If it's not a private question or I have a raise or anything like that, I'll CC the mailing list. So everybody benefits from your answers and everything. It's a good heads up. Pre-rex, 230 through 10. The textbook is recommended. I have pointers on the homepage and various topics that we'll talk about are. Maybe I won't put too much thoughts in your head, but there's a reason it's a recommended textbook and not a required textbook, right? Use it as you will. The second edition you can use, I also have the things for the second edition that's a lot cheaper. Who wants to pay a bunch of money for the books. They're going to respond to this class, right? Okay. New this semester, one thing we're really excited about is we've helped you be successful. We have recitation sections for the first time ever. So these are 15th classes. We have eight of them scheduled throughout the year. You all signed up for a recitation section and we signed up for the course, right? Everybody got a recitation section? Cool. You are, oh, I guess I didn't say that in the output. You're all adults, right? Well, I'll put it this way. You're a class and you can maybe work out something, but I'm going to treat you like adults, right? So you are paying for this course, right? They just pay money to be here in these seats today, right? You're paying to go to the recitation section. So you as an adult, if you choose to pay and not attend the recitation sections or not attend class, I don't care, right? That's not you. You're an adult. You deal with it. So you don't have to go to the recitation sections, but the TAs are giving you awesome, awesome material to help you out in this course. So we'll be covering the materials in the class. There's some material here that's very tricky, so they'll give more detailed examples and a lot of feedback in the recitation sections. Project discussions, so discussing how to how to structure your project and how to solve somebody's challenging homework assignment. That's also one of your recitation sections and important midterm reviews. So we won't actually do any midterm reviews in class. We're going to do those in recitation sections. So this is going to highly, highly recommend that you attend recitation sections. But don't feel tied to only going to your section, right? So feel free to attend whatever section fits you the best. I don't know. If we ever have too many for one section, the TAs will have to figure that out at that point, but I had to have stampede at 8.30 in the morning. Like at half of you going to one recitation section. Questions in recitation sections? Did I answer the question earlier? Provided there's space and we can make one of the recitations and we can go to another one? Yes, absolutely. You can go to whatever one you want. Is there any work that you credit to go? No. Besides increasing your odds and passing this class, which should be all the credit, yeah. Yeah, absolutely. Thank you. And you can go to one of the different people if you want to try out. Let's see who's who. What we're giving you is the tools to optimize your success in this class. I urge you to take advantage of that. More questions in recitation sections? Is that even on the recitation section? Okay. You find it useful? If you're ready to hand this way you can feel better. Alright, so here's kind of the layout of the courses and how you're going to do this. You can bruise this at Lelezer. We will have five projects in this course, eight homework assignments and three midterms. The homework assignments are a lot more in number than last semesters, but they will be the same amount of work just spread throughout the semester more so you get more feedback that's the point of the homework. So the homework will be very similar to the midterm problems. So you're doing homeworks to practice to get these concepts together so that you can be successful on the midterm because you want to be successful. Midterm dates are already out so I'm already asking about midterm dates. These are set in stone. A lot of days off. Finally, Sam. A fifth. If you have anything conflict with the wood, holidays or anything, please contact me. We'll definitely in all of these classes. Anything else? Work alone. Alright, it's going to be hard if that's what this says. This is the main thing. First, consistent effort. This is actually one of those things that people underestimate how effective consistent effort is. Some of the best, the people who do the craziest coolest research project are not the brilliant, smart people that just see these things and then it suddenly strikes them and they have this epiphany. It's people who are smart and work hard. They consistently make effort on these problems and that leads to really good results. So you'll get the same thing in this class. Homework assignments. We homework assignments. Notice the material. Five projects. One mile. Here's the breakdown of your thing. Split weight-wise. 15% more. 30% more. 5% more. 3% more. Projects 345 are the very difficult projects. That's why they're worth 10% if you're great. I think it's only fair. If you're doing the effort to do these programming assignments then you get the credit for it. Questions for 8% and breakdown? These are the initial thresholds of the grades. This is my promise to you. The next line says I can lower the thresholds but I want to raise them. If you get a 94% that will always be an A. It could be an A+, but the highest rate I haven't had to curve down really far, so don't count it. This goes back to being adults. Homework must be submitted by 11.59.59pm. No weight homework. Does being homework 5 minutes late is accepted? No, I have given 0s to people for homework that's 5 minutes late. Your feedback is important, but for point-flights it's going to be a 0. This is your 418. Projects are a little more convenient because we know how difficult the projects are. You get a 20% deduction. If you're 5 minutes late it will be 20% off whatever you would have gotten if you submitted that homework assignment. The max you could get up to a day late would be 80%, the max you could get 2 days late is 60%, probably too much fun. Here's something I haven't worked on but recording class lectures so I will try to record the audio and the screen of all the class lectures and post them online. However, this is actually a very good point, this is not guaranteed and this is a good point because A, if you're watching this online now you'll notice that there is no video recording that would be because I forgot my laptop at home or not at home, at my office on the way here. So I'm doing this all on this machine here and I don't have my normal recording setup so I'm trying to record all the stuff on the mic and post that mp3 or whatever on YouTube literally a video in my box. I'm going to try to do that. I've done it for two semesters every single class so I just broke my treat on the first day of this class. I don't know how that goes for the rest of the class but okay, I try. And there is the material to your free reference material on the past two semesters that's on my website and your teaching you can see all the recorded lectures from 340 spring 340 fall 15 because I think that's 50 videos on here so I like it all if you choose to not attend and just watch the lectures that's fine with me out there but I try to keep my lectures more discussion based that's why I'm trying to get you to participate and I think you learn a lot more when you're here present and you can ask questions. Cell phones, I think they're actually pretty good at this. They may not keep their cell phone vibrating constantly. There's probably usually a huge problem now it's like I don't even know what my cell phone ringtone sounds like. Any special foundations with a disability source center please contact me I'm going to take care of that. Now we get to the super serious very very important part of the syllabus and that is the plagiarism and cheating section. So you're all adults you've read the ASU student code of conduct, the ASU student academic integrity policy and yet in every course I have so far issued 23 academic integrity policy violations so when this happens I meet with you, I show you that evidence and then I report it to the dean's office and I've reported this regardless of people who have, I'll say it this way I have every person that I've caught violating the academic integrity policy I have reported it to the dean's office so and the dean's office keeps a list what happens there is the first time well so okay that would be great so in my class when you violate the academic integrity policy you get a zero on the assignment right which makes sense to get a cheat on that assignment if you get a zero and you get a lower letter grade in the score so if you were able to get a B that B would turn into a C and this is because this is really unfair to the rest of the students in the class who are doing the work themselves and not violating the academic integrity policy and when you buy this you get to report it to the dean's office then if it's your first violation you meet with the something in the dean's office you can't be a TNA you get put on a list that if it happens again you get suspended for a year and there's all these horrible consequences so don't let it be your first offense don't get any I really don't want this number to increase at all because I hate going through this but I will because it's fair to everyone else in the class cool so how do you you can use code stickers that you find online let's say you're googling how do I reverse a list in Stack Overflow or how do I reverse a list if you come to some Stack Overflow code you can use that code as long as you put in the comments of your source code where you got it so it should be a link in the comments that says hey I got this at this web page so that is realistic for you in your coding experience because you can in some way do this in your career but also this way two of your code matches and you say this function to reverse a link list is exactly the same between two students how could that happen if you both said well we got it from this thing online and we can say okay yes that was covered here but otherwise the code matches we're going to have problems using another student's code for my students so that means anybody in this room anybody who's taking this course remember we have everything back to 2011 so it has been tried and it's been found if it's not if it's 90% of your program yeah we'll have problems I highly doubt we'll find something like that so yeah no you will not have problems because I encourage you to you're extending your learning by going out and finding those types of things yes is it another student's see this is the like how would we know it says csv340 on the top and it solves the exact problems you're trying to solve sorry yes so there's a question it would actually in this case stack overflows a little bit easier to wipe this because their license says that every code post should just create a comment so people can use it right it would depend on precisely what the license is of that code right you wouldn't be aware of software licenses what do you do these kind of things I think on GitHub everything should be open source so it should be fine yeah so it's like I took this function from this random unrelated code on GitHub I don't know a lot of professor submissions issued on GitHub in public and false stories I was curious um would you recommend the place where we have like three private false stories so like this one yes so brings us two blocks okay let's get there in two seconds so okay some examples right and I actually think I think I've seen every single one of these now which is funny I hope nobody's getting ideas what's going on sharing a code with a fellow student right you're in the lab and you send somebody else your code right that's not okay right collaborating on the code with a fellow student right I got a case where people claimed they were collaborating well no we were just working closely together then why does the entire program look identical between the two of you modular the variable names or something right that's too close to the collaboration computer trust me these projects are big enough when you work on it on your own they won't end up different submitting another student's code is your own so finding or submitting or taking somebody else's code submitting it is your own submitting a prior student's code is your own like I said if you find something online don't submit it and don't look at it because you're ruining yourself and engaging opportunities of doing these assignments and then we get to posting your code to post your code online explicitly forbidden from now until forever and I totally understand people who want to have an online presence of their work so that they can show employers right we all everyone get a job all 230 of us in this room but I guess I'm not proven to do 30 things right but I'll give you a little hint and I'll peek behind the covers of the acronym process every single computer science student in every single university does a project similar to this in some way right so posting that doesn't matter how beautifully structured your project is every single student has done that right in order and it shows up on your grade you got in the class great that means you did those projects well awesome right what hiring people want to see is they want to see that you did something outside of the class even if it's 100 lines, 200 line project right do something else that's not part of the class put it as a public game of the repo and that will impress the heck out of these people who are trying to the hiring people then you just okay so talking about where to get that so I had a case a student who was working out was using GitHub for backup did not did not realize that as a public and it turns out that another student submitted that code is their own right so many of the cases where two sources of code are almost literally identical and we have to buy the plagiarism policy here right sharing your code is just as bad as cheating and kicking it from somebody else so I have to report that violation as well so GitHub has this awesome student developer pack which you totally take advantage of this you get all kinds of stuff in here with all types of I don't even go through all this stuff in here unlimited private repositories bang awesome super cool you get $7 a month so this way you can use GitHub for for a backup which is good and it's free and you all have access to this as many as these students questions on the academic area policy it's really important yeah Visual Studio used to have a bug where it would flat out ignore your privacy settings for GitHub and then post it to the public anyway I believe that bug is fixed now good public service now yeah you're responsible for your own code you're responsible for what happens to your code so be aware and this also means okay no posting on for anything else okay update you can update this at any time okay any more questions syllabus, material, different classes I know we need to depend on the download can't be on Thursday you don't have classes on Thursday okay project one is already released I'm going to give you the briefest overview of it because this is the point of the recitation section is to give you in-depth insight and go over these projects so project one is due August 29 there are really this project is structured to make, help you be successful in the rest of this course and it's a piece of this project and I think it's going to help you be successful in this course so sign up for the mail and let's boom 10 points super easy, the easiest 10 points you'll ever get in this class part two set up a CentOS 7 virtual machine set up okay part of the answer is because we say so but part of the answer is that we're using automated grading systems for all of your assignments so we don't want to hear and it's not a valid excuse to oh but the code works on my windows machine the server is not running this is just like when you're in your career and you're working in a company you often don't get to choose the development environment the development servers are running through 14.04 better work on 14.04 otherwise it doesn't work right? so that's the same policy in this course so most of you created this awesome CentOS guide of how you thought you created a virtual machine for you so you don't have to do it because you have a download list start at the end and you have everything you need to go there it is you are accepting your responsibility totally on your own shoulders I would check to make sure that the GCC version matches one of the biggest issues CentOS 7 is a little bit newer so I think we should have less of those problems but still at the end of the day it doesn't work on CentOS 7 the homework server did not default to Z++ 11 has it been updated to a version that does short answers I don't know but everyone is on CentOS 7 I know it's not the GCC version I think it will do that by default but I'm not 100% sure most of it is handling the whole submission system so actually send an email if there are any discrepancies and then we'll share that with everyone so that we can make sure we're on the same page at the very least it will just be like flags this Saturday if you don't have a system or you can install a virtual machine the computers in the Brickyard 214 lab with the underground TAs will be having their office hours to have CentOS 7 and VNs on that so you can use those okay so this is our submission website which is not up yet it's the first day and so most of it is running the course submission thing do not bother you that the thing is not up yet when it's out it will be announced on the mailing list okay then once you get all this to show that you actually have set up your environment and you're not just going who wants to go to the actual setting up all this jump I'm just going to use my Windows machine to get into problems it's all about helping you you download this code you run it it will be on the submission site and you submit the output you can go into the details part 3 cool so one thing of writing reliable software is being able to write correct code you want to write code that's correct that doesn't have to do anything more so in this class we're going to be writing programs completely from scratch we're going to give you a description here's the input, here's the output build it which is similar to what you'd be doing at a job and so part of that is you need to code correctly but part of that is being able to actually test your own code so part 3 we will give you a scene programming and you have to create test cases that exercise 100% of the code for that program so the goal there is to get you used to some tools that measure code coverage and to think about and really understand code and the other side benefit so in a lot of your classes your programming classes you're writing new code right? creating some scratch writing new functions stuff that you control no, I'm going to say a lot of not again yeah reading everything from scratch what's most of your time spent doing? reading documents reading documents reading documents reading other people's code right? you have to integrate into a monster 50,000, 100,000 500,000 line of code piece of software and you're like hey change the text on this file right? that was literally my first bug that I had to do and it took me 2 days because you don't know that there are resource files on it so that's part of this assignment is learning how to read and understand other people's code right? so I wrote this code and so it's going to be useful for you to read this see code, get read familiar with C if you're not and understand how to test it okay any high level questions on this? I'm not going to go over this anymore cool, further project questions oh I was going to say in recitation time I'll take one more do you see or see plus plus on the project or just see? depends on the project but we either see or see plus plus no I'm sorry we'll either say you use both or just no I think for everyone you can use either one but we may tell you specifically once you use a C style struct linked list right? they're using like linked list classes, sets or actions or something but when you don't want to agree on complex stuff it'll be mostly up to you if you miss some test cases can you submit those I would yes, you have only submitted submissions on the submission site for now see how you abuse or use that yes some people are laughing because we had a problem last year of everybody submitting is taking down the submission server I think somebody was doing that a hundred times this is why having a local environment is really important right? so you have to test and not use the server or just be like make one change and just throw it to the server imagine I'm working something like that because it's a concept I can make and I would be pushing it to production will your lecture slides be available? yes so my lecture slides my lecture slides will be available most of the lecture slides and recitation sections will be available the recordings hopefully will be available we'll see how I keep going with this cool let's get to do it so this class is Principles of Programming Languages so what is the programming language? you've been programming for three or four years or something in your career or junior or senior level some of you master's graduate students so what is the programming language? what is it? this is not a rhetorical question I want to see me and if anything I'm well it's tricky right? we're using all time we shouldn't be able to say what it is do you want another cracker or do you want to let somebody else go? come back high level machine code high level machine code what does that mean? what is machine code? machine code you should know it's in zeros ones and zeros okay high level ones and zeros so it's legible cool more intuitive way to give instructions to a machine intuitive for who? us as humans keep that in mind when we look at some examples yeah instructions to solve a problem is that different from an algorithm though? an algorithm is kind of a series of steps to solve a problem but is it an algorithm a programming language? why not? what's it missing? let's go somewhere else let's go somewhere in the back over there yeah it's how we solve it in computers ooh how we talk to computers like a series so we have a problem we have a problem we have a problem we want to solve it and what? we have a problem and that's how we I like that ask Siri she can't talk to the internet right now I put her in my phone I got it it's a constructed language which can be compiled or translated into any language okay it's syntax and um it's a little too close to what we're talking about here cool so there's a lot of ways right so I like to change this because I think every time I teach this class I think about different ways because your ideas about what are coding languages are are very interesting right? I kind of think of it like a structured way to define computation right? so it's not just so this separates it from me describing an algorithm to you in the English I could maybe describe bubble sort to you in English and you would understand how to do it but if I took that same English explanation and gave it to the computer it would go I don't know what you're doing so right so it has to be structured in some ways so that the computer can understand it and okay yeah so this could be one thing I like the idea that it's different than just a pure algorithm because it needs to somehow be able to be executed by a computer or the task has to be cared about by the computer what are some other purposes of programming because why do we use them? do we just use them to talk to the computer let's say? let's use kind of a communication idea, do we just communicate with the computer? anybody over here? yeah so you're actually yeah it's a good point right? actually not even it may be a way to precisely describe an algorithm to share with somebody else to show them that you don't even want it to be executed right? it's a communication medium that's interesting yeah it depends on the paradigm that you're looking at or are you the sort of problem that might be trying to solve in some cases it might be effective to take an object oriented approach and where you have we'll define objects with behaviors and that do different actions so it might be doing more things like databases so you're playing with just more of a series of about rules that you then have to have approved so there's different ways of how to structure this computation so there's different ways we can think about describing a computation so to communicate an algorithm that can be definitely one way any well maybe to describe a process we want to describe how something should be done and so we can use maybe code to do that communicate the system to another person right? so this is actually one thing that if this sticks in your brain you'll be a much better programmer going forward is yes the computer has to execute and understand your your commands right? the programming language but more important than that in your career is your fellow programmers on your team being able to read and understand your code to know what you intended to do if you've looked at code that they wrote like if you've looked at your code you wrote freshman year or beyond like my gosh what was I doing like this is just outrageous I do this now and I have to look back at it oh who wrote this crap oh it's me and we also want to communicate some kind of destruction to a machine so we touched on this a little bit but do we have any like CSE what's in the room? so what does the hardware understand our instructions is it magic? does the machine just know oh yeah look at this C program maybe this python thing it just like executes and does something it's just this magical thing that is at the bottom of our stack that we just do not care about at all no so this is one of the main goals of this course is to get you to understand that nothing in the computing system is magic there is no magic you we are giving you the tools and techniques to understand every layer of the computing stack from the applications to operating systems to hypervisors to firmware to all the way down to like hardware level so you should know that you can study and understand exactly how everything works which is super cool like this is like a knowledge that it's kind of like seeing the matrix you guys are seeing the matrix right it's like seeing the code they're like whoa I can change things right so you know how everything works so how does the computer understand what does the CPU understand administration machine instructions right we think of it as slightly one step up just one to zero right at the end of the day it's just bits so you could do this back in the day on some of the like I think it's the alt hares you had a series of switches and you had to switch the switches in the right order to do program thing I don't know if they're done PDT8 PDT8 yeah I don't go that low you just stick to the software level right but underneath right this is what the CPU when you look at that chip from Intel or Andy or the one in your phone which is probably some type of arm chip right it's fundamentally just executing ones and zeroes it's taking instructions decoding them it's moving things and registers and that's what it knows right and so what do we need to get this to happen right we want we want we talked about how great we talked about a little we touched on abstraction right the programming language gives us some sort of abstraction so we don't have to code these ones and zeroes and we can say something that's maybe a little bit more high level right so we can get closer to describing the problem and not worrying about oh well so we sort this list first take this memory address and move it into register r0 and then negate that and then do this and then fetch this memory right we can think about it at a higher level right and so we need programs that translate our intentions to the assembly language that the CPU understands and so this is where we get to compiler so what we're focusing on in this course is how does this translation happen how do does the computer get our instructions when we write a C program somehow that C program translates to ones and zeros and the CPU executes it does anyone use it in compiler do you know how it works you use this every day when you're programming you don't know how it works it's crazy right huh that is why you're here very good that is why you're here to understand how it works this is an essential part of your toolchain that you use every day and so not knowing how it works is insane it'd be like a what are the people who call the chopper a lumberjack not knowing how the saws work what different types of saws are you should have something that's starting to swing in the tree it's different for different jobs so what's the compiler what's the job of the compiler convert it up ooh I like that it's pretty weird crime source chains that are not sure it's going to work yeah look at that cool is that going to work cool so I have many other companies because they're just like the high level definition of a compiler really to me is it translates from one thing to another right the java c compiler the java c program that compiles the java program to the java bytecode I consider that compiler even though it's not compiling it down to machine code that x86 code that can actually run in a processor but it's translating but there are different types of these things so compilers translate the programming really to execute a binary that essentially just goes to the processor and executes with various steps in between that you learn in like operas and classes so how does that take away from an interpreter somebody else say that again kind of almost the distinction is given to a fancy interpreter doesn't necessarily have to so really the difference is instead of just translating it interprets it understands that programming language and it performs the actual computation so it does use binary it has to call out all that stuff the interpreter usually doesn't see some interpreters do just in time compilation will interpret things they use a lot of compiler to binary almost a lot taking one programming language into another anybody do JavaScript programming anybody do JavaScript programming that's crazy and now I forgot the name of them like the languages that aren't JavaScript but are JavaScript like what was it? keep shouting what was it? TypeScript TypeScript is a good example TypeScript is a language developed by Microsoft that has type in for JavaScript and you can add annotations and things but they have a transpiler that can transpile that to actual JavaScript code I can't remember what was it? CopyScript yes that's the one I was thinking of it's not very related to the JavaScript but you can transpile it to JavaScript so it runs on your browser it's all kinds of stuff here sorry for repeating so long but I only did this on Monday so important lecture on Monday we're gonna finish this and then we're gonna do a central programming language