> For the complete documentation index, see [llms.txt](https://mrparkonline.gitbook.io/guide-to-high-school-computer-science/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mrparkonline.gitbook.io/guide-to-high-school-computer-science/python-programming/python-programming/python-basics/procedural-programming-and-programming-paradigms.md).

# Procedural Programming & Programming Paradigms

A [**programming paradigm**](https://en.wikipedia.org/wiki/Programming_paradigm) refers to the way in which a programming language is designed or the methodology followed by a programmer when writing code. One of the advantages of Python is its high degree of flexibility, as it was created to be a general-purpose language. Although the primary creator of Python may not have intended for [**certain paradigms**](https://python-history.blogspot.com/2009/04/origins-of-pythons-functional-features.html) to be employed in the language, this flexibility enables us to explore various paradigms using Python, rather than having to learn different languages for each paradigm. In conclusion, a paradigm represents a way of thinking, and by practicing Python in different ways, it can guide us to become better Python programmers.

Now that we have a general understanding of paradigms, let's focus on the one that will be emphasized in this course: [**Procedural Programming**](https://en.wikipedia.org/wiki/Procedural_programming). However, it is crucial to grasp a significant concept: this course serves as a preparation for procedural programming. We will cover the fundamental basics required to venture into procedural programming. Some experienced programmers might view this as imperative programming, and I agree with them. Once again, please note that this is an introductory course.

Procedural Programming revolves around creating a clear set of code that solves a given problem. I want you to pay attention to the word "set" at this point. In computer science, it is common to abstract a problem and understand all its components in order to derive a solution. Consequently, we write sets of code that address the various components of a problem to construct a solution. Throughout this course, you will encounter simplistic problems that allow us to apply the same logic and structure to other challenges we may encounter in the future.

### Other Paradigms

The [**Object-Oriented Programming Paradigm**](https://en.wikipedia.org/wiki/Object-oriented_programming) (OOP) offers a distinct approach that changes our perception of problem-solving. Instead of crafting a linear set of instructions to resolve a problem, OOP allows us to construct new entities, known as objects, which inherently tackle the problem. Another paradigm is [**Functional Programming**](https://en.wikipedia.org/wiki/Functional_programming) (FP), which draws inspiration from mathematics and emphasizes the definition of programming solutions through functions. It's worth noting that these are not the only two paradigms; there exist various variations of each, as well as numerous others!
