This video brings us to our last programming tip for the specialization. Now we hope what you've learned here has really sparked your interest in scripting and coding in general, and you're eager to learn more about this topic. So, what I want to do is give you a few tips on how to proceed from the specialization. The first topic that I want to talk about is an important one that we didn't cover in the specialization which is, Object-oriented Programming. Learning to read and write object oriented code is a skill that distinguishes an intermediate scripter from an advanced scripter. And since it's tricky to kind of learn about object-oriented programming, I want to give you a few concrete steps you can do to improve your knowledge in this area. Okay, let me talk a little bit more about how I would go about learning about object-oriented programming. So, the first thing I'm going to do is I'm going to do a little bit of shameless self-promotion. Scott and I built this, one of the first specializations on Coursera, launched about three years ago. It's called Fundamentals of Computing, and it's designed to give you kind of a more general introduction to computer science. So, the first two courses in this specialization are on interactive programming and building GUIs. And the second class, it's really part of a two part class called Introduction to Interactive Programming in Python, teaches you how to write programs in an object-oriented style. Now, I should give you one caveat, this is all done in Python 2 because it was developed a few years ago. But I would say that learning Python 2 is not a bad thing. The most thing is the differences are pretty small, so you won't see it's very hard to pick it up if you know Python 3. But probably more important from a perspective of a scripter, many of the modules that you will use are written in Python 2 and have never been ported to Python 3. So being able to understand and work with Python 2 code and Python 3 is a very useful skill to have. Let me show you a quick example of what you would do in there because I think a lot of students find this attractive. Here's a video of a project that someone built for the next or last part of the class. It's basically blackjack. It's written in CodeSkulptor and it uses an object oriented approach. And the way this works is the students implemented a class for cards, they implemented a class for hands, they implemented a class decks. The logic of the program is really moving these objects around between three different classes. And what you'll see is, that this is also a little bit bigger than the code that you've written in here so you get a little bit more coding experience on there. Okay. So we've done a little bit about object-oriented programming in Python, how can we move forward from there? Well, my suggestion is that you learn a second language and that language should be object oriented. Let me explain why. So, when you're writing scripting code it's typically you're just writing the code, and it's for typically small applications. When you're building programs for large applications, it's basically impossible for one person to write all the code. And so in that situation, object-oriented programming design comes into its own. Because we can break this large program into components, where each subset of the development team can work on that particular component, and then the other development teams can use that component that's been developed. And so this idea of encapsulating pieces of a program is very important in object-oriented programming is the way to do that. So, there's one language that I think that's great for kind of understanding this concept, it's used in practice, is Java. I mean Java is really designed to be an object-oriented style and it's used in lots of commercial applications. So, my recommendation is you go out and check on Coursera, and there are some specializations that can teach you how to program in Java from scratch. This first one here I think is a very reasonable one. I will note that there's another specialization here on Concurrent and Distributed Programming from Rice. Again some shameless self-promotion here. But, you can go on and do things like write Android apps once you understand how to program in Java. So, that's another thing that I would do to kind of move my education in computer science forward. Okay, you've learned a little bit more about object-oriented programming. You have a second language under your belt. What next? My suggestion is that you learn a little bit more about computer science in general. And, kind of the core topic that I'm going to recommend you look into is what we talked about in last week's programming tips, look at algorithms, and data structures, and kind of the whole concept of algorithmic thinking. The idea is we're going to learn about topics related to coding and programming that transcend a particular language, and focus more on the idea of computations and algorithms. And so, again, it's more self-promotion if you go back to our specialization on the fundamentals of computing, you'll see that the next four courses actually focus on this particular topic. The middle two courses are called The Principles of Computing. They're built in two parts. And what they do is you talk about some kind of fundamental ideas from computing, and we also teach you some of the math that you'll need to know to kind of work with those ideas. So you're going to see these are more rigorous academic classes where are you going to be challenged, you're going to have to learn a little bit of math. The payoff then is in the last two courses in the specialization we talk about algorithmic thinking, in which we look at a collection of interesting applied problems from the real world, and we apply what we've known to write some fairly complex code to analyze, and solve those problems. And so I think what you'll see is by the time you get to this end of the specialization, you'll have a fairly deep knowledge of really how computer science works. I'm not going to lie, it's going to be more challenging than the specialization just finished, but I promise you you'll learn a tremendous amount if you work through these classes. Okay, I have one more tip. Okay. You've learned more about object-oriented programming. You've learned another programming language. You've learned about algorithms and data structures. You've learned more about computer science. At this point you know a fair bit, and maybe you are hey I want to get a job, how can I enhance my chances of getting a job? Okay, the last piece of advice I have is to get involved in a free and open source software project. So let me say a little bit about what free and open source software is. It's basically is software that people can freely use, copy, study, change whenever they want. The most important thing that the source code is openly shared. So anybody can take a look at it and play around with it. Now, there's lots of open source projects out there that you can take a look at. Here's a very nice listing of all those open source projects. And if we run down here, I love 3D graphics and animations so I'm going to click on this, and here's the top one. It's Blender. And Blender is a tool for doing 3D graphics and animation. So, hey, I want to go out, I want to work on improving Blender. And so, in fact, if you scroll down here there's a link to blender.org. And this is the website for it. And you can see there's all kinds of things. You can look at the features of it, you can download it. You can also get involved. So, for example, here's a page that talks about how you can go in and help with the development, help with the documentation. You can kind of network with peers that are working on this. So this an example. A little bit of kind of what you might do is, look at one of these open source projects and get involved with it. And to get involved, you're going to need to pull down the code. You probably going to use some kind of version control system like get to pull down a copy of the code, you're going to have to familiarize yourself with the code. You have to understand kind of what features maybe the users would like to have added, and then take a crack at adding in those features. Once you've done it, you'll need to have that code vetted by the maintainers of the system. And they may like it, in which case they'll make it kind of a permanent part of the project. They may give you constructive feedback and say you need to improve in these particular areas. But you'll notice here you're going to get practice in a very important skill. That's working on a project with others, and dealing with feedback both from users, and other developers. Kind of my experiences, this is a really critical step moving forward to a career as a professional scripter, or coder, or programmer. So, I hope these tips have kind of given you some ideas on where you'd like to proceed in your career. It's been a pleasure doing these programming tips and I'll see you soon.