Procedural programming is a programming model based on structured programming and calling procedures or routines. It involves breaking programs into smaller procedures and functions. Object-oriented programming is based on creating objects that contain both data and code. It involves designing programs around objects that interact with each other and the real world. Some key differences are that procedural programming uses a top-down approach and focuses on functions, while object-oriented programming uses a bottom-up approach and focuses on objects, data abstraction, and inheritance. Common languages for each include FORTRAN, ALGOL, and COBOL for procedural programming and Java, C++, C#, Python, and others for object-oriented programming.