Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 45 additions & 29 deletions curriculum/01-introduction/01-how-this-course-works.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,37 +7,51 @@ lesson: true
---

# How to Participate in This Course
## What is TPL (The Python Ledger)?
**The Python Ledger** is an open-source, community-driven roadmap designed to take you from writing your first line of code to building professional-grade software. We don’t just teach you Python syntax; we teach you how to think like a developer.

In this first unit, we’ll learn what is a computer and how it runs the code you write.

## Course Overview
Each of the following lessons are considered **essential knowlege**. Even if you dont plan on becoming a python developer, these foundations will be a good introduction into world of computers.

We will start by learning what a computer is and explain basic parts and how they work together to run the code you write. After that we will shortly touch on learning what is a programming language and continue to python foundations.
### Basics of Computer Science and Programming Languages
We start by learning what a computer is and explain basic parts and how they work together to run the code you write.

After that we will shortly touch on learning what is a programming language and what is Python programming language.

### Software Installation and Setup
Making sure we are all on the same page, this section guides you with installation and setup of required software.

It also teaches you basics of **command line interface** which is essential skill to have as a developer.

### Git and GitHub Basics
Essential tools in everyday developer workflow are `Git` and `GitHub`, so we deal with those next as you will be expected to use them throughout the rest of the course.

**Python foundations** will be done in our browser based python enviroment, giving you a place to experiment and learn right here in your browser.
### Python Foundations
Finally, our Python journey begins, starting with basics and progressing further along with content that builds upon last lessons.

After the foundations, we will drop down to **local development enviroment**. We will set up *Python* locally on your own machine, learn basics of `git` and `Github` and learn more about IDEs ( Integrated Development Enviroment ) like `VS Code`
We will use our **browser based** Python runner to demonstrate examples directly on the web page.

By the end of this introduction, you should be able to understand what a computer is, how parts of your computer work together and how your code actually runs. Its silly to go straight into code without understanding how that code interacts with your machine.
In addition to content, you are expected to go **documentation hunting**. Lesson are purposely built around basics, and you are to seek specific ways to achieve your goal by yourself. Do not let this discourage you, as real developer work is mostly reading through documentation and finding answers to questions you have.

This introduction section is intentionaly broad in topics, as these will be essential for your future learning.
Each lesson will have additional content that you should be able to solve after reading everything the lesson suggested. These are **Quiz Questions**, **Exercises** and **Assignment** - in that particular order.

## Lesson Overview
This section explains what the lesson contains and what topics will be covered.
* Understand how **The Python Ledger** course works
* Understand how **Foundations** course works
*Exercises* and *Assignments* are **required** to solve on your own machine and no interactive code blocks will be provided for these sections.

Exercises follow a specific topic and are *test based*, while assignments follow a storyline from start of the foundations course, making us rewrite and improve our project little by little each lesson.

## How It Works
This course works by collecting content from internet to teach a specific lesson. We will introduce a specific topic, give you basic overview, useful context and point you to external resources made by others.
This course works by collecting content from public internet to teach a specific lesson. We will introduce a specific topic, give you basic overview, useful context and point you to external resources made by others.

Most lessons will contain questions that you should be able to answer before moving forward. Some lessons will also contain excercises for you to complete.
Most lessons will contain questions that you should be able to answer before moving forward. They will also contain exercises and assignments for you to complete on your own machine.

At the end of each section, you will be tasked with creating projects that help you grow understanding of the topics by actually incorporating them and building something useful. This will also serve as your own portfolio with ready made project when you finish the course.

Try not to think of this course of programming as a class in a school that you forget after the exam passes. Its not something you can learn at once and it certanly has its challenges. Think of the experience as a pizza dough you are making.
Try not to think of this course of programming as a class in a school that you forget after the exam passes. It's not something you can learn at once and it certainly has its challenges.

Think of it instead as a ball of dough rolling across a flour-covered counter. You are the dough. As you roll forward, flour sticks to you - a little more with every pass. Some of that flour will shake loose again, and that's fine, that's just what rolling dough does.
Don't worry if you get to a new recipe and feel like none of the flour stuck. That's normal — it happens to everyone. The recipes aren't tests of how much flour you've retained so far. They're just the next stretch of counter to roll across, where the flour you need will stick to you again as you go, one pass at a time, with help from **Google** and **The Python Ledger community** when you get stuck.
Don't worry if you get to a new recipe and feel like none of the flour stuck. That's normal - it happens to everyone.

The recipes aren't tests of how much flour you've retained so far. They're just the next stretch of counter to roll across, where the flour you need will stick to you again as you go, one pass at a time, with help from **Google** and **The Python Ledger community** when you get stuck.

## A Note About Course Teaching
The goal of **The Python Ledger** is not to be just another tutorial. The goal is to provide you with the *why* rather then *how*. This is not a tutorial on a specific subject. This is a course designed to make you think diffrently.
Expand All @@ -50,9 +64,12 @@ Its about:

Getting confortable with your skills also means you will likely to expand on those skills. Once you have a solid *base* it will be simpler to expand on it.

Once you finish this course, you will be able to learn **anything** diving straight into documentation. Reading documentation is the best way to learn how to use any tooling. But it does take time to master. Many people feel intimated at first, because of techical jargon and that can be expected. People who write documentation often assume the reader comes from a programming background. This is why we give you plenty of materials to read.
Once you finish this course, you will be able to learn **anything** diving straight into documentation. Reading documentation is the best way to learn how to use any tooling. But it does take time to master.

Many people feel intimated at first, because of technical jargon and that can be expected. People who write documentation often assume the reader comes from a programming background. This is why we give you plenty of materials to read.

The skills you build here will be foundation on which you will build for years to come. Skills you learn here are transferable to other contexts and will play essential role in further learning.
* The skills you build here will be foundation on which you will build for years to come.
* Skills you learn here are transferable to other contexts and will play essential role in further learning.

## A Note About the Language
This course is written in *English*. As you develop your programming skills, you will see that its firmly rooted into *English* language. This means that the syntax of the language, documentation that you will read and majority of people in community will be in *English*.
Expand All @@ -74,23 +91,22 @@ During this course, you will be required to create an account on a website calle

Github provides something called **gist**. You can think of them as a notes and these can be *secret* or *public*. Our platform can make use of *secret* gist (only available to your account) to store your leason progress remotely, so you dont have to think about downloading and uploading data yourself. Github integration is completly optional.

## What to Expect Next?
Once you completed this foundation course you should be able to understand how programs are executed on your machine (or any other). You should be able to create and execute your own python programs

As you move between lessons, each portion is build on the last one so skipping stuff will make it harder to understand later lessons.

### The Path Ahead
We start with a few introductory but fundemental topics such as your motivation, how to ask for help, and basics of computer science and programming in general.

Next, we’ll move to your local machine, where you’ll learn the "Developer’s Toolbelt": the **Command Line**, **VS Code**, and **Git**. From there, we dive deep into **Python**.

## Integrated Tools
### Embedded Python Runner
Our platform has a simple Python runner as part of the course, so you will be able to run code examples and play around directly in the webpage. Be aware that you will be required to make **assigments** and **excercises** on your own device, making use of your local development workflow.
Our platform has a simple Python runner as part of the course, so you will be able to run code examples and play around directly in the webpage. Be aware that you will be required to make **assignments** and **exercises** on your own device, making use of your local development workflow.

This is an example of our browser based editor. For now, don't wory about what it says in the **code** (but you can surely take a guess as python reads like english). Just press the `▶ Execute Program` button and see it in action.
This is an example of our browser based editor. For now, don't worry about what it says in the **code** (but you can surely take a guess as python reads like English). Just press the `▶ Execute Program` button and see it in action.
```python interactive
print("Entry #1: My journey begins.")
print("The Python Ledger is active.")
```

### Memory Graph
We have integrated some of our examples with external **Memory Graph** tool that visualizes execution of python code line by line. This can be an excellent way of visualizing what the code is actually doing.

To run the provided code in this tool, just click on the button that says `View on Memory Graph`. This will open another tab with the code from the lesson already loaded in. You can press **Play** to see how the code reacts in slow motion, line by line.

## What to Expect Next?
As you move between lessons, each portion is build on the last one so skipping stuff will make it harder to understand later lessons. Try not to do this.

Lets start with getting our head in the right mindset.
4 changes: 3 additions & 1 deletion curriculum/01-introduction/02-motivation-and-mindset.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ lesson: true
isDraft: true
---
# Motivation and Mindset
## Introduction
Learning to code can be very rewarding but at the same time it can be very daunting and difficult proccess. Like any skill that's worth aquiring, it takes time and effort and cannot be learned in a weekend, a month, or even a year. Its not hard to grasp at basic concepts but it is hard to actually design and develop a fully working project.

Before stepping into the course we want to share some good habits as well as the bad ones so you can be aware of them up front.
Expand All @@ -24,6 +23,7 @@ Take a few moments to think about why did you choose to learn programming?
* Are you automating your life?

Whatever your goals are, stick to them, as these will be the ones that push you forward and wishing to learn more.

## How to Learn Programming
Programing is incredibly vast topic and covers a multitude of programming languages, topics, and purposes. Learning new concepts and then **practicing** them is the best way to learn as you can understand how things fit together. Projects are ultimate test of your knowlege and skills and the perfect example of how much you understand the lessons that you learned so far.

Expand Down Expand Up @@ -58,9 +58,11 @@ Procrastination will be your biggest battle with.
**Solution**: [Pomodoro Technique](https://en.wikipedia.org/wiki/Pomodoro_Technique) is a time managing technique to keep you focused. The idea is to set a timer for about 25 minutes, and work on the task untill the timer goes off. If you get distracted or interrupted during your focus session, start another 25 minute timer. If you have managed to focus on the task for 25 minutes, take a 5 minute break. Once you have completed 4 sessions of 25 minute focus, take a longer 15-30 minute break.

If you want to give it a try, you can use this free browser based [Pomofocus](https://pomofocus.io/) application.

### Focusing on End Result
How long will this course take me? All the things you will do after you finish the course?

Wrong thinking and another form of **procrastination**.

## What's Next
Now that you are motivated and ready to learn, lets see how you can ask for help.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Data is "stuff" that computer works with and is usually grouped in 3 mayor categ
A program takes this **data** and does calculations on them, moves them around and displays the result back to user.

*Almost all programmes do just this. Move and calculate data to achieve some result*

# What Is an Actual Computer? {#what-is-computer}
Computer is a machine consisting of many parts. We will focus on 3 main parts that play a vital role in executing our programmes.

Expand Down
3 changes: 0 additions & 3 deletions curriculum/02-prerequisites/01-installations.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ sidebar_position: 1
lesson: true
---
# Installations
## Introduction
First step to building any software is to have the right tools. For us developers, this means having to set up our **local development enviroment**.

Many online courses (as well as ours) use in-browser code editors or *sandboxes* which provide some level of control for the given task but not much more. We will use these *sandboxes* throughout the course to demonstrate how code works. Projects on the other hand expect of you to use your own **local development enviroment** and will not provide code editor on the webpage itself.
Expand Down Expand Up @@ -42,11 +41,9 @@ A [virtual machine](https://en.wikipedia.org/wiki/Virtual_machine) (VM) is a sim
This is very common way for you to experiment with diffrent operating systems, tools or anything else, because its separated from you **host machine** and cannot modify it.

:::note[Virtual Machines consume resources]

Your **host** operating system has to share resources with other **guest** machines running.

If you own a system with low performances, this may be the wrong option. See **dual-booting** below.

:::

### Dual-booting
Expand Down
3 changes: 0 additions & 3 deletions curriculum/02-prerequisites/02-text-editors.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ sidebar_position: 2
lesson: true
---
# Text Editors
## Introduction
Text editor is the most used tool by developers. Having a good text editor can help you a lot with writing code and spotting mistakes.

## Lesson Overview
Expand All @@ -33,11 +32,9 @@ Visual Studio Code (or just VSCode) is a very good free code editor. It has exce
2. Familiarize yourself with VSCode as this allows you to save time and become more productive. Visit [Get Started with VSCode](https://code.visualstudio.com/docs/editing/getting-started) (skip the **Github Copilot** section - see below)

:::tip[Turn off AI features]

In VSCode AI features are enabled by default. As a beginner you dont want to use AI to generate the code for you as your goal here is to learn.

To disable AI features in VSCode go to settings (`File > Preferences > Settings`), search for "Disable AI Features" and check the box under the same name.

:::

## What's Next
Expand Down
7 changes: 0 additions & 7 deletions curriculum/02-prerequisites/03-command-line.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ sidebar_position: 3
lesson: true
---
# Command Line
## Introduction
Have you ever heard of **command line** (or **terminal**)? You have certainly seen one, probably in movies depicting hackers. Those black windows with loads of white or green text, hackers hacking into the bank, mainframe or whatever else producers can think of.

That black screen with white or green text is **command line interface** (CLI). We won't be hacking anything today (or any day in this course) but you need to get familiar with basics of *command line* as its **essential** skill for a developer.
Expand Down Expand Up @@ -42,11 +41,9 @@ We have successfully created a new directory, but for now its empty. We can chec
So lets go into our `test` directory. Typing `cd` (stands for *Change Directory*) followed by directory name takes us into our newly created directory. Let's try: type `cd test` and press <kbd>Enter</kbd>. Your **prompt** will change, indicating that we are no longer in previous directory but in a new one. Now let's create an empty text file (with the extension `.txt`) by typing `touch` followed by the name of the file we want to create. Let's try that now: type `touch myfile.txt` and press <kbd>Enter</kbd>. You will see no changes in your terminal other then the other **prompt** on a new line, waiting for the next command - this is completely normal. If you now run `ls` command again (remember, we are now inside the `test` directory so only `ls` is needed, no path specified after it) we will see the newly created file `myfile.txt`.

:::info[Do not close terminal window]

In the next step we will open VSCode from our terminal. Leave the terminal open and do not close terminal window as we will need it to continue practicing.

If you do happen to close terminal windows, just open it back up and navigate to our `test` directory.

:::

Now let's try something fun. We will open this file we created, but in VSCode. No, not from our menu, from the terminal. While you are in `test` directory, type `code .` (don't forget the dot (`.`)) and see how VSCode opens directly in our `test` directory. We can also see and edit our `myfile.txt` file.
Expand All @@ -66,9 +63,7 @@ Two dots (`..`) represent **parent directory**. To move back from your `test` di
Right now you should be in your `test` directory with a file inside named `myfile.txt` that has some content in it. If you are not, please open your terminal and navigate to `test` directory. To view the content of a file, you can use `cat` command which will dump everything that the file contains into your terminal.

:::tip[Clear screen]

If you have added too much content to our `myfile.txt` file, you may end up with a wall of text when running `cat` command. To clear your screen, you can use `clear` command, or use a keyboard shorcut <kbd>CTRL</kbd> + <kbd>L</kbd> (Mac: <kbd>CMD</kbd> + <kbd>L</kbd>).

:::

Lets see `cat` command in action. Type `cat myfile.txt` and press <kbd>Enter</kbd>. You should see content of your file right there in the terminal.
Expand All @@ -80,9 +75,7 @@ mv <old_filename> <new_filename>
If we type `mv myfile.txt mytestfile.txt` we will essentually be renaming our file. Feel free to do so.

:::danger

If the new name already exists, `mv` will overwrite it without warning. To prevent this, use `mv -i` (interactive mode) to prompt you before overwriting.

:::

Now that we renamed (moved) file, we can also learn how to delete it. If you type `rm` (stands for *remove*) you can delete the files. **Be aware** there is no *Recyle Bin* when working in terminal. If you remove a file, its gone, so be **extremely careful** with this command. Let's type `rm mytestfile.txt` and press <kbd>Enter</kbd>. This command does not return any output, so we can use `ls` command to check if it has worked or not. If the file is gone, you can use `cd ..` to go back to parent directory.
Expand Down
Loading
Loading