19 điểm bởi darjeeling 2025-09-23 | 3 bình luận | Chia sẻ qua WhatsApp

Đây là bản tóm tắt bài keynote "Siêu năng lực thực sự của Python" do Hynek Schlawack प्रस्तुत tại PYCON UK 2025.

Trước khi bắt đầu phần trình bày, diễn giả đã giới thiệu ngắn gọn về sự nghiệp của mình, đặc biệt nhắc đến "tình bạn đáng ghét" mà ông đã trải qua trong 14 năm hoạt động cùng cộng đồng PyCon.


Quá trình chuyển đổi từ Python 2 sang 3 (The Python 2 to 3 Migration)

  • Bối cảnh: Python 3.0 lần đầu được phát hành vào năm 2008, không phải để sử dụng đại trà mà để cho thấy định hướng của Python và thu thập phản hồi. Từ Python 3.2 trở đi mới được khuyến nghị sử dụng.
  • Những thay đổi chính:
    • Xử lý chuỗi: Python 3 đã thay đổi kiểu chuỗi mặc định từ byte thân thiện với máy sang Unicode thân thiện với con người.
    • Loại bỏ hành vi ngầm định: Nhiều hành vi ngầm định mà lập trình viên vô tình dựa vào trong Python 2, chẳng hạn như so sánh chuỗi và số, đã bị loại bỏ. Những hành vi này thường gây ra lỗi rất khó debug.
    • Cải thiện quốc tế hóa: Codebase Python 2 đầy rẫy lỗi giải mã Unicode, và Python 3 đã cải thiện điều này để trở thành một ngôn ngữ được quốc tế hóa tốt hơn.
  • Khó khăn của quá trình chuyển đổi:
    • Chi phí cộng đồng: Việc port toàn bộ hệ sinh thái sang Python 3 tốn kém khổng lồ. Rất nhiều phần mềm phải được port, trong khi thời điểm đó test coverage vẫn chưa phổ biến.
    • Phát triển codebase lai: Mãi đến năm 2012 khi Python 3.3 ra mắt mới hình thành được đồng thuận về cách viết codebase hybrid chạy được trên cả Python 2 và Python 3.
    • Lệnh tạm dừng phát triển ngôn ngữ: Trong giai đoạn từ Python 3.0 đến 3.3, gần như không có tính năng mới nào được bổ sung, khiến các lập trình viên thiếu động lực để chuyển sang Python 3.
    • Sự bất định: Không ai chắc Python 3 có trở thành phiên bản thống trị hay không; nó cũng có thể thất bại như trường hợp của Perl 6.
  • Lý do Python sống sót:
    • Dòng người dùng mới đổ vào: Trong giai đoạn các ngôn ngữ khác như Go, Rust... tăng trưởng, Python vẫn có số người dùng mới tham gia nhiều hơn số người rời bỏ.
    • Cộng đồng khoa học và kỹ thuật: Các nhà khoa học và kỹ sư đã dùng Python từ lâu, và từ giữa thập niên 2010, độ phổ biến của Python trong lĩnh vực khoa học dữ liệu bùng nổ mạnh mẽ. Hiện nay, hơn một nửa người dùng Python sử dụng nó cho việc khám phá và xử lý dữ liệu.
    • Hệ sinh thái sẵn có: Một hệ sinh thái thư viện tính toán khoa học mạnh mẽ như NumPy đã tồn tại từ trước.
    • Dễ tương tác với các ngôn ngữ biên dịch khác: Python dễ dàng tương tác với các ngôn ngữ biên dịch khác, nên có thể đóng vai trò như "chất keo" để kết nối các thành phần hiệu năng cao viết bằng C, C++, Fortran, Rust.
    • Lập trình khám phá: Python rất phù hợp cho exploratory programming thông qua interactive shell (REPL) và các công cụ như Jupyter Notebook.
    • Tính tiệm tiến (Graduality): Python cung cấp nhiều mức độ rigor khác nhau. Lập trình viên có thể làm việc linh hoạt ở giai đoạn thử nghiệm, rồi tăng mức độ chặt chẽ ở giai đoạn production bằng các công cụ như type hint, linter và test. Python cũng có thể được áp dụng cho nhiều trường hợp sử dụng khác nhau, từ bắt đầu trong Jupyter Notebook cho đến mở rộng thành dịch vụ web.

Siêu năng lực thực sự của Python: Tính tiệm tiến (Graduality)

  • Python không chỉ có rào cản gia nhập thấp mà còn cung cấp nhiều "trần cao", cho phép người dùng linh hoạt khai thác theo nhu cầu.
  • Hai mặt của tính tiệm tiến:
    • Mặt tích cực: Người dùng có thể chọn mức độ nghiêm ngặt và độ phức tạp mà mình muốn. Ví dụ, khi viết script có thể thoải mái code không cần type hint, còn với ứng dụng quy mô lớn thì có thể áp dụng kiểm tra kiểu nghiêm ngặt.
    • Mặt tiêu cực: Khi thêm các trường hợp đặc biệt hoặc ngoại lệ vào hệ thống, ngắn hạn thì có thể mang lại sự tiện lợi cho từng người dùng, nhưng về dài hạn sẽ làm tăng độ phức tạp tổng thể của hệ thống. Bài nói nhấn mạnh rằng "dễ không phải lúc nào cũng đơn giản", và điều này thể hiện rõ trong cách Python packaging vận hành.

Ví dụ về vấn đề packaging (Packaging Problem Example)

  • Có hai cách cấu trúc một ứng dụng Python: kiểu 'ad hoc' và kiểu 'package'. Cách package được định nghĩa rõ ràng hơn và có công cụ tích hợp sẵn, nhưng vì lý do lịch sử nên cách ad hoc vẫn tiếp tục được hỗ trợ.
  • Điều này khiến các vấn đề như sys.path trở nên khó hiểu, và những tính năng như pip install --user gây ra vấn đề trong global namespace, làm việc debug trở nên khó khăn hơn.
  • Các công cụ mới như UV ban đầu chỉ hỗ trợ cách package, nhưng cuối cùng cũng phải hỗ trợ cả các dự án ad hoc, khiến độ phức tạp tăng thêm.
  • Những "attractive nuisance" như vậy mang lại sự tiện lợi ngắn hạn nhưng về dài hạn lại gây ra chi phí đáng kể cho cộng đồng.

Kiến trúc phần mềm (Software Architecture)

  • Bài nói chỉ ra rằng trong cộng đồng Python, thảo luận về kiến trúc phần mềm còn thiếu, và cho rằng điều này xuất phát từ sự phản cảm với "enterprise pattern" cùng "nỗi sợ trở thành Java".
  • Sự cần thiết: Để xây dựng và bảo trì các hệ thống phần mềm phức tạp, việc thảo luận về kiến trúc phần mềm nhằm tổ chức và quản lý module, layer và tương tác là rất quan trọng.
  • Giải pháp:
    • Cộng đồng Python nên tránh kết thúc cuộc đối thoại chỉ bằng những từ như "pythonic" hoặc "unpythonic".
    • Cần học hỏi và áp dụng các best practice từ cộng đồng ngôn ngữ khác, ví dụ như domain-driven design.
    • Cần nhiều người hơn chia sẻ kiến thức liên quan đến kiến trúc phần mềm, tạo ra nội dung liên quan và tập trung vào giải pháp.

Kết luận (Conclusion)

  • Đừng lo lắng quá về Python, mà hãy đón nhận nhiều cách viết Python khác nhau.
  • Hãy thử những phong cách và công cụ mới để mở rộng tư duy.
  • Mọi lựa chọn đều đi kèm chi phí, vì vậy cần cân nhắc cẩn thận tác động của một tính năng cụ thể lên toàn bộ cộng đồng.
  • Bên cạnh việc làm cho những thứ đơn giản trở nên dễ làm, cũng cần đầu tư nhiều hơn để khiến những thứ phức tạp trở nên khả thi.
  • Cần có nhiều cuộc trò chuyện hơn về kiến trúc phần mềm, đồng thời chất vấn những tư duy giáo điều để đưa Python đến một tương lai tốt đẹp hơn.

Bài trình bày này bao quát quá khứ, hiện tại và tương lai của cộng đồng Python, nhấn mạnh "tính tiệm tiến" là thế mạnh thực sự của ngôn ngữ, đồng thời mang đến những góc nhìn sâu sắc về các thách thức mà cộng đồng đang đối mặt và những rào cản văn hóa cần vượt qua.

Nếu muốn xem video, hãy tham khảo liên kết sau: https://youtu.be/gDvwRpl9erE

3 bình luận

 
3ae3ae 2025-09-23

Nếu một trình quản lý gói hiện đại kiểu uv trở thành tiêu chuẩn thì có lẽ sẽ tiện hơn rất nhiều, nhưng dù sao thì chắc cũng khó nhỉ..

 
click 2025-09-23

Hồi những năm đầu đại học thì python 2 vẫn nhỉnh hơn một chút về độ phổ biến, nhưng đến lúc sắp tốt nghiệp thì tôi nhớ là mọi người đều đã chuyển sang python 3.

 
meteorizer 2025-09-25

Nếu là người làm nghề lập trình, thì dù chủ yếu dùng Python, phần lớn cũng sẽ biết ít nhất một ngôn ngữ khác.
Tôi không hiểu vì sao cứ phải liên tục đưa các tính năng hay đặc điểm của ngôn ngữ khác vào, trong khi nói rằng Python cần trở nên tốt hơn.
Có vẻ như người ta đang bỏ qua điểm này: chính những phần còn thiếu của Python cũng là một trong các lý do khiến nó trở nên phổ biến.
Python ngày càng trở nên phức tạp và khó chịu theo một cách kỳ lạ.
Ý tôi là những lợi thế của việc dùng Python dường như đang dần biến mất.
Thay vì cố biến Python thành Java, chẳng phải cứ dùng Java khi cần là được sao.
Nếu không phải Java thì còn có Kotlin và Scala nữa mà.
Dù vậy, tôi vẫn nghĩ Python sẽ không suy tàn đâu.
Vì thực tế là gần như không có ngôn ngữ nào cho phép lập trình một cách đơn giản đến vậy.