→ From Coder to Shipper
From Coder to Shipper · Nền tảng

Nền tảng Python

Ngôn ngữ 'keo' của server: script chạy ra sao, dữ liệu mà nó giữ, và các mẫu hình bạn sẽ nhận ra trong mọi dòng code phía sau.

← / → để chuyển slide · chuyển EN/VI bên dưới

Toàn cảnh

Python là thứ keo trong server của bạn

Mọi thứ phía sau frontend — ứng dụng, công cụ, script — thường là Python. Bạn sẽ đọc nó, đánh giá nó, và dẫn dắt AI viết nó.

Web app của bạn viết bằng Python

Flask — framework mà khóa học dùng — là một thư viện Python. Mọi trang mà app bạn trả về đều do code Python quyết định.

Ngôn ngữ keo

Python nối các mảnh lại: nhận request web, đọc dữ liệu, gọi công cụ khác, ghi file. Nó là chất kết nối của hệ thống phía sau.

AI viết Python rất trôi chảy

Python nằm trong nhóm ngôn ngữ AI viết giỏi nhất. Bạn không thuộc lòng — bạn hỏi, nhận code, và kiểm tra.

Việc của bạn: nhận ra & chỉnh

Bộ slide này cho bạn mô hình tư duy: mỗi cấu trúc dùng để làm gì. Nhờ đó bạn xem được code do AI viết và điều chỉnh đúng hướng.

Cách bạn sẽ code trong khóa học

Bạn không gõ — bạn nhận ra, hỏi, kiểm chứng

AI viết Python. Kỹ năng của bạn là ba bước khiến code từ AI đáng tin cậy.

Nhận ra hình dạng

Bạn không gõ từ bộ nhớ. Bạn nhìn code — của bạn hay của AI — và biết mỗi khối dùng để làm gì: một hàm, một vòng lặp, một lần đọc dữ liệu.

Hỏi để được giải thích

Dòng nào chưa nhận ra → dán cho AI: 'dòng này làm gì?' Giải thích là miễn phí; nhận ra mới là kỹ năng.

Kiểm chứng output

Kiểm tra tốt nhất là chạy thử: in ra thứ bạn mong đợi, đọc kết quả, so sánh. Output là sự thật — không phải code, không phải sự tự tin của AI.

01
Phần 1

Chạy Python

Hai cánh cửa vào ngôn ngữ — và chuyện gì xảy ra khi có sự cố.

Phần 1 · script đầu tiên

File .py chỉ là các hướng dẫn, từ trên xuống dưới

Biến giữ giá trị trong các 'ô' có nhãn; print() hiển thị chúng. Đó là toàn bộ vốn từ của script cho người mới.

hi.py
# hi.py — a comment: Python ignores it, humans read it
name = "shipper"           # a variable: a labelled box

print("Hello, " + name)    # send text to the screen
print("Ready to build.")

Đó là một chương trình hoàn chỉnh: một biến và hai câu print. Không cần thêm gì để bắt đầu.

Phần 1 · biến

Biến — những ô có nhãn

Biến là một tên trỏ đến một giá trị. Tên là nhãn; giá trị (và kiểu của nó) có thể thay đổi.

name = value

score = 82 — tên score giờ trỏ đến giá trị 82. Đọc là 'score đang giữ 82'.

Ghi đè là bình thường

score = 90 sau đó chỉ là chuyển nhãn sang giá trị mới. Ô không cố định — thứ di chuyển là nhãn.

Kiểu sống trong giá trị

Không cần khai báo kiểu. 82 là int, "An" là str, True là bool — Python biết từ chính giá trị.

Phần 1 · chạy nó

Chế độ script & chế độ REPL

Một lệnh chạy cả file; cùng lệnh không file thì mở REPL (Read-Eval-Print Loop) — playground trực tiếp để thử từng dòng.

ops@vps — zsh
$ python hi.py
Hello, shipper
Ready to build.
$ python ← no file: opens the REPL
>>> 2 + 2
4
>>> "ab" * 3
'ababab'
>>> exit()
Phần 1 · khi nó hỏng

Lỗi là bình thường — đọc phần cuối

Mỗi lỗi Python đều kết thúc bằng một traceback: ngăn xếp các vị trí bạn từng ở, và vấn đề thật ở dòng cuối cùng.

ops@vps — zsh
$ python hi.py
Traceback (most recent call last):
File "/home/student/hi.py", line 4, in <module>
print(nmae) ← typo in the variable name
NameError: name 'nmae' is not defined
↑ the last line is the answer — everything above is 'where'
Phần 1 · đọc lỗi

Đọc traceback, ba bước

Bạn sẽ dán những thứ này cho AI liên tục. Biết ba phần giúp bạn làm việc nhanh hơn.

File & dòng

File "hi.py", line 4 nói chính xác chỗ cần nhìn. Đó là con trỏ để bạn chỉ đích danh khi chỉnh.

Tên lỗi

NameError (sai chính tả / chưa định nghĩa), KeyError (thiếu key trong dict), TypeError (sai kiểu). Tên lỗi là phân loại, không phải phán quyết.

Dán nguyên cho AI

Copy nguyên cả traceback, không chỉ dòng cuối. Phần ngăn xếp phía trên cho thấy con đường dẫn đến lỗi.

02
Phần 2

Dữ liệu: Python thực sự giữ gì

Chương trình chủ yếu là dữ liệu đang chuyển động. Năm kiểu nhỏ đáp ứng gần như mọi thứ — và hai trong số đó (list, dict) là ngôi sao.

Phần 2 · năm kiểu dữ liệu

str, int, float, bool — và hai ông lớn

Bạn sẽ gặp các kiểu này trong mọi backend. str/int/float/bool là nguyên tử; list & dict là cách dữ liệu được tổ chức thực sự.

KiểuVí dụDùng để
str"hello"Chữ: tên, tin nhắn, URL
int42Số nguyên: đếm, id, cổng
float3.14Số thập phân: giá, điểm
boolTrue / FalseCông tắc đúng/sai: is_active, is_admin
list["a", "b"]Tập hợp có thứ tự — tác vụ, kết quả, người dùng
dict{"name": "An"}Cặp nhãn → giá trị — một bản ghi: người dùng, request, config
Phần 2 · hai ông lớn

List & dict trông giống JSON — vì chúng chính là JSON

Mọi phản hồi API, file config và dòng từ CSDL đều đến dưới dạng JSON. List và dict của Python đọc nó ngay — không cần lớp phiên dịch.

data.py
# A list: ordered things
tasks = ["design", "code", "test", "ship"]

# A dict: labelled values (a record)
user = {
    "name": "An",
    "role": "designer",
    "active": True,
}

Đã từng xem JSON thì bạn đã biết thứ này: dict = object JSON {…}, list = array JSON […].

Phần 2 · lỗi kinh điển

= so với ==

Một bên là động từ, bên kia là câu hỏi. Nhầm lẫn giữa chúng là lỗi hay bắt gặp nhất trong code của AI (và của người).

= — gán

Đặt giá trị vào ô: name = "An". Vế bên phải được tính trước, rồi lưu vào. Nó làm thay đổi trạng thái.

== — so sánh

Đặt câu hỏi: name == "An" → True hoặc False. Nó không thay đổi gì — chỉ trả lời, và câu trả lời là một bool.

Phần 2 · chuỗi

Chuỗi — chữ mà bạn làm việc được

Chuỗi là dữ liệu phổ biến nhất trong web app. Vài thao tác đáp ứng phần lớn việc hằng ngày.

len(s) — dài bao nhiêu

len("hello") → 5. Đếm số ký tự.

"in" — có bên trong không?

"ell" in "hello" → True. Kiểm tra chuỗi con; dùng được cả với list (slide kế tiếp).

s.upper(), s.lower()

"An".upper() → "AN". Đổi hoa thường để so khớp và hiển thị.

s.split() — cắt thành list

"a b c".split() → ["a", "b", "c"]. Text vào, list ra — cầu nối từ chữ sang dữ liệu.

Phần 2 · làm việc với giá trị

Chạm vào: chỉ số, độ dài, so sánh

Dữ liệu không chỉ được tạo ra — bạn còn chạm vào nó. Ba thao tác này xuất hiện trong gần như mọi vòng lặp bạn đọc.

values.py
tasks = ["design", "code", "ship"]
print(len(tasks))         # 3
print(tasks[0])           # design — counting starts at 0
print("design" in tasks)  # True

age = 29
print(age > 18)           # True  ← a comparison makes a bool
print(age == 30)          # False

Đếm bắt đầu từ 0, nên phần tử đầu là index 0 và phần tử cuối là len − 1. Phép so (> , <, ==) không thay đổi gì — chúng sinh ra True/False.

Phần 2 · none

None — 'không có gì' đúng nghĩa

Giữa giá trị và lỗi, Python có một trạng thái thứ ba: sự vắng mặt hợp lệ.

None = không có giá trị

Từ mà Python dùng cho 'không có gì ở đây'. Hàm không return cho None; .get() thiếu key cho None.

Vì sao nó tồn tại

Nó thành thật: 'tôi đã tìm, không có gì.' Tốt hơn crash, tốt hơn giả một giá trị như 0 hay "".

Kiểm tra bằng is

if value is None: — cách chuẩn để hỏi 'có lấy được gì không?' trước khi dùng.

03
Phần 3

Logic

Python quyết định và lặp lại ra sao — những hình dạng bạn sẽ nhận ra trong mọi đoạn code AI đưa.

Phần 3 · bước quyết định

if / elif / else

Không cần học thuộc cú pháp — chỉ cần nhận ra hình dạng: một điều kiện, một dấu hai chấm, một khối thụt vào.

grade.py
score = 82

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
else:
    grade = "C"

print(grade)   # B

Python kiểm tra từ trên xuống và chạy nhánh đầu tiên có điều kiện đúng. else bắt tất cả phần còn lại. Khoảng thụt là nhóm lệnh — không cần ngoặc.

Phần 3 · bước đi qua

for — đi qua tập dữ liệu

Vòng lặp chính: cho nó bất kỳ tập dữ liệu nào, nó đưa bạn từng phần tử một.

loop.py
for task in ["design", "code", "ship"]:
    print(task)

for i in range(3):        # range(3) → 0, 1, 2
    print(i)

for đi qua bất kỳ tập dữ liệu nào, lần lượt từng phần tử — một list, hoặc tập range(n) 'đếm từ 0'. Đa số vòng lặp trong code thật là for.

Phần 3 · bước lặp lại

while — lặp chừng nào còn đúng

Vòng lặp bạn phải kiểm soát: nó chạy chừng nào điều kiện còn đúng.

retry.py
retries = 3
while retries > 0:
    print("retrying...")
    retries = retries - 1    # runs 3 times

Bạn phải làm điều kiện tiến về sai ở bên trong vòng lặp. Quên mất — vòng lặp vô hạn, server ngừng trả lời. for lo phần lớn việc; while là vòng lặp cần cẩn thận.

Phần 3 · ghép điều kiện

and, or, not — ghép các kiểm tra

Điều kiện thật hiếm khi chỉ là một phép so. Ba từ ghép chúng thành câu kiểm tra gần như tiếng Anh.

and — cả hai phải đúng

age >= 18 and active — cả hai vế đúng thì cả câu mới đúng. Nghĩa là 'và'.

or — một bên là đủ

role == "admin" or role == "owner" — ít nhất một bên đúng. Nghĩa là 'hoặc'.

not — đảo nghĩa

not banned — đúng khi banned sai. Nghĩa là 'không'. Bạn sẽ thấy ba từ này trong gần như mọi if mà bạn xem.

04
Phần 4

Tái sử dụng & thao tác hằng ngày

Hàm, chuỗi, thao tác dữ liệu, file, import — bộ công cụ hằng ngày của backend.

Phần 4 · hàm

def — đơn vị tái sử dụng

Hàm đóng gói một tác vụ: đặt tên, cho nó input, nhận kết quả về. Gọi nó bao nhiêu lần cũng được.

greet.py
def greet(name):              # define: a reusable recipe
    return f"Hello, {name}!"

print(greet("An"))    # Hello, An!   ← call it
print(greet("You"))   # Hello, You!  ← call again

def đặt tên công thức, tham số (name) là input, return trả về kết quả. Chuỗi f"…" bên trong sẽ nói ở slide tiếp theo.

Phần 4 · chuỗi & chú thích

f-string & chú thích

Hai cấu trúc nhỏ nhất nhưng dễ thấy nhất — bạn sẽ thấy chúng ở dòng đầu của gần như mọi file.

f-string — chuỗi có lỗ

f"Hi {name}, còn {n} tác vụ" — giá trị nhét thẳng vào chữ. Cách số 1 để ghép tin nhắn.

{…} có thể là biểu thức bất kỳ

f"{2 + 3}" cho ra "5". Hàm cũng được: f"{len(tasks)}".

# chú thích — dành cho người

Python bỏ qua mọi thứ sau #. AI cũng đọc chú thích — một dòng comment tốt là bánh lái cho AI bảo trì code của bạn.

Phần 4 · thao tác hằng ngày

Làm việc với list & dict

Ba thao tác đáp ứng phần lớn việc hằng ngày: thêm vào list, đọc dict an toàn, và lặp qua dữ liệu.

work.py
tasks = ["design", "code"]
tasks.append("ship")           # grow the list

user = {"name": "An", "role": "designer"}
print(user["name"])            # An
print(user.get("email"))       # None — safe if missing

for t in tasks:                 # loop over items
    print(t)

d["key"] sẽ lỗi nếu thiếu key; d.get("key") trả về None bình thản. Nên dùng .get() khi key không chắc chắn — đa số bug do AI gây ra là từ key bị thiếu.

Phần 4 · bảng thao tác

Những thao tác list & dict bạn gặp nhiều nhất

Sáu thao tác đáp ứng việc hằng ngày. Tất cả đều là method: dữ_liệu.method().

Thao tácNó làm gì
len(x)Độ dài của list, dict hay chuỗi.
x in dataKiểm tra thành viên — phần tử hay giá trị này có bên trong không? → True/False.
data.append(v)Thêm v vào cuối list. Làm list dài thêm.
d.get(k)Đọc giá trị dict; trả None thay vì crash nếu thiếu key.
d.keys()Danh sách các nhãn của dict. Cách bạn lặp qua một bản ghi.
d.items()Cặp nhãn + giá trị, để lặp cả hai cùng lúc.
Phần 4 · file

Đọc file, cái nhìn tổng quan

File là cách chương trình nhớ chuyện giữa các lần chạy — config, dữ liệu, log. Hình dạng bên dưới xuất hiện trong gần như mọi backend bạn đụng tới.

read.py
with open("tasks.txt") as f:    # open, and close for you
    for line in f:               # a file is a list of lines
        print(line.strip())      # remove the newline

open() đưa cho bạn handle của file; with đảm bảo nó được đóng. Từng dòng một, file chỉ là list các chuỗi.

Phần 4 · ghi

Ghi file — chữ mode

Cùng hình dạng open/with như khi đọc; khác duy nhất một chữ cái: mode.

write.py
with open("out.txt", "w") as f:      # w = write, erases first
    f.write("task: design\n")

with open("out.txt", "a") as f:      # a = append, keeps existing
    f.write("task: ship\n")

w bắt đầu mới, a nối thêm. Đây chính là cách app ghi log và lưu dữ liệu — cùng hình dạng bạn vừa học để đọc.

Phần 4 · import

import — kéo vào các bộ công cụ

Bạn không tự xây mọi thứ. Một dòng kéo vào cả bộ công cụ — Python đi kèm một thư viện chuẩn khổng lồ.

import = một bộ công cụ

import json cho bạn công cụ JSON; import math cho bạn công cụ toán. Một dòng, cả bộ công cụ — đứng đầu gần như mọi file.

Mô-đun json

json.loads biến chuỗi JSON thành dict/list; json.dumps làm ngược lại. Đây là cách app của bạn nói chuyện với web.

Dòng đầu của app bạn

from flask import Flask — ngay cả 'dùng Flask' cũng chỉ là một import. Mọi backend bạn đọc đều bắt đầu bằng imports.

Phần 4 · khi có thể thất bại

try / except — thất bại một cách đẹp

Dữ liệu thật lộn xộn: thiếu key, file rỗng, input sai. Chương trình biết xử lý sẽ tiếp tục chạy.

safe.py
try:
    value = user["email"]
except KeyError:
    value = "no email"

print(value)

try: thử phần rủi ro; except: nếu thất bại thì làm cái này. Chương trình suy giảm nhẹ nhàng thay vì crash — bạn sẽ thấy nó quanh mọi lần đọc dữ liệu.

Phần 4 · tất cả ghép lại

Một file, đủ mọi mẫu hình

Không có gì mới — chỉ là các mảnh của deck ghép lại một chỗ. Đọc từ trên xuống; bạn đã biết việc của từng dòng.

mini.py
import json

def summary(raw):
    users = json.loads(raw)      # JSON string -> list of dicts
    active = 0
    for u in users:
        if u.get("active"):
            active = active + 1
    return f"{active} of {len(users)} active"

raw = '[{"name": "An", "active": True}]'
print(summary(raw))              # 1 of 1 active

import, def, json.loads, for, if, .get, len, f-string — toàn bộ vốn từ của deck, làm việc thật trong mười hai dòng.

05
Phần 5

Python trong app của bạn

Mọi thứ là bước chuẩn bị cho phần này: app Flask, công cụ, script — tất cả là những mảnh bạn vừa học.

Phần 5 · không có phép màu

App Flask của bạn chỉ là các mảnh này ghép lại

Giờ nhìn app của chính khóa học: một file .py với hàm, dict, file và JSON. Mọi mảnh trên slide này đều có trong app đó.

Một route là một hàm

"GET /slides/python-basics" → Python gọi một hàm → hàm trả về trang web. def + return, chính hệt slide greet().

Request là dict

Mỗi request web đến dưới dạng túi có nhãn: query, form, header. Bạn đọc bằng d.get("key") — slide thao tác hằng ngày.

Dữ liệu ra dạng JSON

App đọc dữ liệu (file, CSDL), xếp thành dict và list, gửi về trình duyệt dưới dạng JSON — chính list/dict ở Phần 2.

File ở phía dưới

Cấu hình và dữ liệu đến từ file — hình dạng open/with ở Phần 4. Python là chất kết nối giữa web và đĩa.

Phần 5 · quy trình của bạn

Đọc & chỉnh code với AI

Vòng lặp hằng ngày của khóa học: bạn và AI, từng khối code một.

  1. 1

    Quét các hình dạng

    Trước khi hỏi, hãy tìm các mẫu hình: def, for, if, dict, open. Bạn đã biết mỗi thứ dùng để làm gì.

  2. 2

    Hỏi từng dòng

    Dán một khối và hỏi 'giải thích đơn giản đoạn này.' So sánh câu trả lời của AI với cách bạn hiểu — chỗ chênh lệch ấy là nơi bạn học.

  3. 3

    Chỉ đích danh, đừng đổ cả file

    Chỉnh sửa hiệu quả nhất khi có đích: 'thay đổi hàm này để kiểm tra thêm key email.' Vào cụ thể, ra cụ thể.

  4. 4

    Chạy & kiểm tra output

    Sau mỗi thay đổi, chạy và nhìn kết quả in ra/trả về. Output đúng → hình dạng đúng. Output sai → dán lại cho AI và lặp.

Bạn không cần viết Python bằng tay. Bạn cần nhận ra nó, đánh giá nó, và dẫn dắt AI viết nó.
— khóa học

Biến. Dữ liệu. Logic. Tái sử dụng. Đó là ngôn ngữ.

Tiếp theo: route Flask đầu tiên của bạn — cùng Python đó, giờ trả lời cho web. Hãy nhờ AI giải thích bất kỳ dòng nào bạn chưa nhận ra.