# Python for Everybody của Charles Severance: khoá nhập môn có nửa sau đáng để FDE học kỹ

> Khoá này dễ bị kỹ sư đã đi làm bỏ qua vì nó dành cho người mới, nhưng các bài về regex, web service và cơ sở dữ liệu lại khớp với những việc dữ liệu đầu tiên mà FDE gặp ở site khách hàng.

Bản gốc: https://fdetimes.net/vi/sach-khoa-hoc/khoa-python-for-everybody-charles-severance/

Các khoá của Charles Severance nằm trong nhóm có lượng đăng ký cao nhất từ trước tới nay trên Coursera. Python for Everybody, một trong số đó, nói thẳng ngay ở trang bài giảng rằng nó dành cho người chưa từng lập trình.

Kỹ sư đã đi làm vài năm dễ lấy đó làm lý do để bỏ qua. Nhưng nếu đọc kỹ mục lục, bạn sẽ thấy nửa sau của Python for Everybody rất giống những việc dữ liệu đầu tiên của một FDE ở site khách hàng.

Severance là Clinical Associate Professor of Information tại University of Michigan. Toàn bộ bài giảng, sách và bài tập được đăng miễn phí trên py4e.com với giấy phép Creative Commons Attribution 4.0, còn mã nguồn trang web và sách Python 3 nằm công khai trên GitHub tại github.com/csev/py4e.

Ai cần chứng chỉ thì có bản "Python for Everybody Specialization" trên Coursera, gồm 5 khoá ở mức nhập môn. Khoá đầu tiên ghi rõ không đòi hỏi kinh nghiệm trước.

Với FDE, giá trị của khoá nằm ở chỗ dữ liệu của khách hiếm khi đến tay bạn ở dạng sạch. Bạn thường nhận một file export, một endpoint chưa có tài liệu, hoặc một database cũ.

Tên các khoá trong chuỗi Coursera cho thấy hướng đi đó: sau cấu trúc dữ liệu là dữ liệu web, rồi cơ sở dữ liệu, và khoá cuối là một capstone về lấy, xử lý và trực quan hoá dữ liệu bằng Python.

## Mục lục đi từ con số không tới dữ liệu thật

Trang bài giảng trên py4e.com có 17 bài. Các bài đầu dành cho người chưa biết lập trình, còn các bài 12 đến 17 lần lượt là regular expressions, lập trình mạng, dùng web services, lập trình hướng đối tượng, cơ sở dữ liệu và trực quan hoá dữ liệu.

Giáo trình đi kèm có tên đầy đủ là "Python for Everybody: Exploring Data in Python 3". Sách đánh số chương riêng, không trùng với 17 bài trên web: theo lời Severance, các chương 2 đến 10 của sách được phỏng theo khá sát cuốn sách mở Think Python.

Vì vậy phần đầu là nền tảng lập trình quen thuộc. Phần sau, nơi khám phá dữ liệu trở thành chủ đề chính, mới là chỗ một kỹ sư đã đi làm nên dừng lại lâu nhất.

## Ai nên học, và học theo thứ tự nào?

Nếu bạn chuyển sang từ support, vận hành hay phân tích nghiệp vụ và muốn đi tới vai trò FDE, hãy học trọn bản Coursera theo đúng thứ tự. Khoá đầu được thiết kế cho người chưa có kinh nghiệm, nên bạn không cần chuẩn bị gì thêm.

Nếu bạn đã viết Java, JavaScript hay Go vài năm, cách hiệu quả hơn là đọc nhanh các chương 2 đến 10 trong sách chỉ để quen cú pháp. Từ bài 12 (regex) trên py4e.com trở đi thì chậm lại và làm hết bài tập, vì đây là phần bạn sẽ dùng ngay.

Còn nếu bạn đã quen viết Python backend, có thể dùng các bài 12 đến 17 như một bộ bài tập ôn trong một hai cuối tuần, không cần học hết cả khoá.

## Ba ý nào đáng mang tới site khách hàng?

Ý đáng giữ nhất là dùng dict làm bộ đếm. Thử hình dung khách gửi cho bạn một file log hỗ trợ vài nghìn dòng, mỗi dòng lỗi có dạng `ERR-1042`, và hỏi lỗi nào xuất hiện nhiều nhất.

Bạn chỉ cần ghép regex của bài 12 với việc đọc tệp và dùng dict ở mức cơ bản. Đoạn code dưới đây là một ví dụ minh hoạ, với tên file và định dạng mã lỗi giả định:

```python
import re

counts = dict()
with open('support.log') as fh:
    for line in fh:
        m = re.search(r'ERR-(\d+)', line)
        if m:
            code = m.group(1)
            counts[code] = counts.get(code, 0) + 1

top = sorted(counts.items(), key=lambda kv: kv[1], reverse=True)
for code, n in top[:5]:
    print(code, n)
```

Chưa tới 15 dòng là bạn có năm mã lỗi hay gặp nhất, ngay trong buổi họp, khỏi phải hẹn tuần sau. Mẫu này dùng lại được cho gần như mọi câu hỏi kiểu "cái gì nhiều nhất": khách hàng nào gọi nhiều nhất, endpoint nào chậm nhất, giờ nào tải cao nhất.

Ý thứ hai là đừng coi mạng là hộp đen. PY4E dành riêng hai bài cho lập trình mạng và web services. Khi học hai bài này, hãy tự hỏi request của mình đi đâu và phản hồi về trông ra sao, vì khi API của khách trả lỗi lạ lúc hai giờ sáng, người hiểu tầng bên dưới thường tìm ra nguyên nhân nhanh hơn.

Ý cuối là biết lúc nào nên chuyển từ tệp sang cơ sở dữ liệu. Một script chạy một lần chỉ trả lời được một câu hỏi. Khi dữ liệu đã nằm trong bảng, bạn truy vấn lại được, người khác cũng dùng được mà không phải chạy lại script.

**Điểm mấu chốt:** Script chạy một lần trả lời một câu hỏi; dữ liệu nằm trong bảng mới thành công cụ cho khách.

## Hai cái bẫy khi đem bộ đếm vào log thật

Bẫy đầu tiên là log nhiều dòng. Đoạn code trên xử lý từng dòng một, nên nếu một lỗi kéo theo stack trace dài, mã lỗi và nguyên nhân thật có thể nằm ở hai dòng khác nhau. Trước khi đếm, hãy mở file ra xem vài mục đầy đủ và quyết định một "bản ghi" bắt đầu ở đâu, thay vì mặc định một dòng là một sự kiện.

Bẫy thứ hai là regex quá dễ dãi hoặc quá chặt. Mẫu `ERR-(\d+)` sẽ bắt cả chuỗi `ERR-1042` nằm trong một câu trích dẫn hay URL, và bỏ qua `err-1042` nếu hệ thống của khách viết thường. Hãy đếm luôn số dòng không khớp và đọc thử vài dòng trong đó: con số ấy cho bạn biết câu trả lời của mình đáng tin tới đâu.

## Biến bài tập thành bằng chứng trong CV

Hãy ghép bốn bài regex, web services, cơ sở dữ liệu và trực quan hoá dữ liệu thành một dự án nhỏ, đúng tinh thần capstone của bản Coursera. Lấy dữ liệu từ một API công khai, dùng regex làm sạch, lưu vào cơ sở dữ liệu, rồi vẽ một biểu đồ trả lời một câu hỏi cụ thể.

Phần README nên viết như báo cáo gửi khách: khách hỏi gì, dữ liệu bẩn ở chỗ nào, kết quả là gì.

Trong CV, mô tả dự án bằng đúng chuỗi việc bạn đã làm (lấy dữ liệu, làm sạch, lưu trữ, báo cáo) thay vì chỉ ghi tên khoá.

## Một bài tập trước khi mở khoá

Lấy đoạn code đếm mã lỗi ở trên và sửa cho nó đếm theo giờ trong ngày thay vì theo mã lỗi. Bạn chỉ phải đổi regex để bắt phần giờ trong timestamp của từng dòng.

Sau đó thử thêm một bước: thay vì `print`, ghi kết quả vào một bảng hai cột (giờ, số lỗi). Nếu bước này làm bạn lúng túng, đó là dấu hiệu nên bắt đầu học PY4E từ bài cơ sở dữ liệu.

Severance viết khoá này cho người mới bắt đầu, nhưng điều nó dạy kỹ nhất, đưa dữ liệu thật từ đầu vào tới câu trả lời, cũng là điều nhiều kỹ sư lâu năm vẫn còn yếu.

**Thử ngay tuần này:**

- Mở py4e.com/lessons, đánh dấu những bài bạn chưa tự tin từ bài 12 (regex) trở đi, rồi học đúng một bài mỗi tối
- Lấy một file log hoặc CSV thật bạn có trong tay, chạy lại đoạn code đếm bằng dict trong bài với regex của riêng bạn, và kiểm tra xem có bản ghi log nhiều dòng nào bị đếm sót không
- Lên ý tưởng cho dự án cuối: một API công khai, một bảng trong cơ sở dữ liệu, một biểu đồ, và một README viết như báo cáo gửi khách

## Nguồn

- [PY4E - Python for Everybody](https://www.py4e.com/lessons)

- [PY4E - Python for Everybody](https://www.py4e.com/)

- [Python for Everybody: Exploring Data in Python 3](https://www.py4e.com/book)

- [Python for Everybody Specialization – Coursera](https://www.coursera.org/specializations/python)

- [Programming for Everybody (Getting Started with Python) – Coursera](https://www.coursera.org/learn/python)

- [Charles Severance (computer scientist) – Wikipedia](https://en.wikipedia.org/wiki/Charles_Severance_(computer_scientist))

- [csev/py4e – GitHub](https://github.com/csev/py4e)

- [Python for Everybody – Goodreads](https://www.goodreads.com/book/show/54444612-python-for-everybody)
