Now, let's take a look at Java in the context of these other languages that we've discussed. Now, this slide is from one of the early lectures in this course. Why we use Java? Well, it's widely used, widely available, it's been under development for several decades, it's got all the modern abstractions and it has a lot of automatic checks for mistakes in programs, which are really useful for all programmers, but particularly beginning programmers. The Java economy is huge. It's used in all kinds of devices for all kinds of applications nowadays, from supercomputing to medical devices, to your phone, to the Mars rover, millions of developers, billions of devices. So, why did we use it in this course? Well, here's our checklist by comparison with these other languages that we've described. They're all widely used and they are all widely available, although you have to pay for MATLAB. They don't all have a really a full set of modern abstractions. C doesn't have objects, MATLAB kind of has objects, Python has modern abstractions, but you might not say that it embraces them without going into too much detail. Modern libraries and systems have probably, in C++, you could say it. Although, as time marches on in the Internet economy and mobile computing and so forth, really, Java's the one that's got the modern libraries and systems. MATLAB and Python are maybe plugged in, we'll give them checks. Automatic checks for bugs, well, they all do to some extent, but we're going to call a compiled time type checking. Really a must for C and C++, they get the check x because of the problem with memory leaks. So, anyway, lots of these points are debatable, but we use Java in this course because from our point of view, there's a check marks all the way across. So, that's fine, and so is Java perfect, why should we learn another programming language? Well, there's lots of reasons to learn a new programming language. It might be that it offers something totally new. You might get a job or work in a research group where everybody else is writing programs in that language and you need to interface with them. So, it's entirely possible that you need to learn a new programming language for that reason as soon as you get a job or change jobs. Could be that the new programming language is better than Java or for the application at hand? There might be something that in a particular language is very particularly suited for a build for the application that you're working at. Often, a good reason to learn a new programming language is just the intellectual challenge, and the second part of this course we have an imaginary machine language. It's fun to program in that language, and that's true of many programming languages. Sometimes there's an opportunity to really learn something about computation by studying another programming language or another point of view. Or maybe there's just a new style of programming that you don't know that you would be introduced to in this language. So, there's plenty of reasons and most people can expect to learn new programming languages as time wears on. This is just some examples from things that I can remember of the top of my head. In the 1960s, we wrote programs in assembly language where we had to pick 1 of 256 instructions in every line of code, we wrote corresponded to a machine instruction. So, C was definitely something new in that context. That was a high-level language where we could write things like if and while, and we could use functions in libraries, how do we use codes in all kinds of things. Definitely worth learning something new. Then, by the 1990s, the idea of data abstraction became very, very important, which allowed us to write really big software programs that could share libraries and make use of extensive libraries. Now, in this millennium, there's all kinds of things offered by new programming languages that are built for the web, for developing for the web that use scripting and directly interpret for the behavior in web type development projects. Those are just a few examples. I do want to talk just for a bit about programming styles because we'll talk about a completely different one at the end of this lecture. Then, there's object or a program that we've already talked about. The most natural is procedural, where we just execute one instruction after the other. Usually, we compile our programs into machine language and machine language is kind of procedural. So, that's what C was and that's what Java as we taught it before we get to objects as like. So, Python in modern web development languages like Ruby are usually interpreted, it's like command execution. It's like, well, we typed at the command line, compile this program, move this file, and so forth. You can right procedural type programs in scripted languages like we did with Python but usually interpreted. It's just a different programming style where how you expect to be using it. Now, there's also special purpose languages that are optimized around certain data types, like the postscript programming languages optimized around graphics. We'll talk about that in part two of the course. Or MATLAB optimized around matrices, and that's going to lead to a completely different style if you're really only worrying about a couple data types for most of the code that you write. In an object-oriented programming languages, we'll talk about it in more detail in the next segment. It really is a different style, and it took a long time for a lot of programmers to adapt to it, and there's still plenty of programmers out there that haven't taken the time to really learn object-orient, how to make use of object-oriented programming effectively. So, already with this course, you're ahead of a huge fraction of people out there doing programming. Then, there's functional languages, and we'll talk about that in the last segment where we treat computation as the evaluation of functions and it's got a lot of interesting ramifications. It's a completely different programming style that many people are embracing nowadays. That's kind of analogous to Java's automatic memory management winning out over the explicit memory management in C and C++. People are worried about efficiency, but in the end the convenience definitely won out, many people feel the same way about functional programming languages. In many ways, it's easier to express computation for lots of applications in these languages. So, it's definitely worthwhile to look at, and we will at the end of this lecture.