“Learn Python the Hard Way” – Review chi tiết về cuốn sách học Python kinh điển

Để chinh phục Python, bất cứ ai cũng phải bỏ túi những quyển sách học Python kinh điển để làm bảo bối của mình. Trong số đó, “Learn Python the Hard Way” được coi là một trong những đầu sách phổ biến nhất qua nhiều năm. 

Learn Python the Hard Way

Dù phổ biến là vậy, song “Learn Python the Hard Way” vẫn nhận được nhiều tranh cãi từ người đọc. Nếu vẫn đang băn khoăn không có biết có nên lựa chọn cuốn sách này hay không, bạn có thể tham khảo những đánh giá trong bài viết này. Trong đó, chúng ta sẽ cùng tìm hiểu về tác giả, cấu trúc cùng những điểm tốt và những điểm gây trái chiều của cuốn sách.

(Bài viết chỉ mang tính tham khảo, vậy nên nếu có những suy nghĩ khác biệt, bạn hãy cho chúng mình biết thêm ở dưới comment nhé!).

1. Về tác giả

Zed A. Shaw là một lập trình viên chuyên nghiệp và dày dặn kinh nghiệm. Anh nổi tiếng với những ứng dụng Ruby (nổi bật nhất là web server Mongrel), các bài viết về công nghệ và những dự án giáo dục (trong đó có các khoá học “Learn Code The Hard Way”). Tuy vậy, đó chưa phải tất cả những gì làm nên sự nổi tiếng của Zed. Anh còn được biết đến với tư cách là một nhà phê bình thẳng thắn về một số công nghệ và nhiều khía cạnh khác của văn hóa lập trình.

Ví dụ nổi bật nhất là sự đánh giá của Zed đối với Python 3. Trong bài đăng trên blog vào năm 2016 của anh ấy, có một tiêu đề mang tên “The Case Against Python 3 (For Now”. Ở bài viết này, Zed đã vạch ra những vấn đề được cho là một số sai sót nghiêm trọng mà Python 3 mắc phải. Anh đã thẳng thắn chia sẻ rằng: “There is a high probability that Python 3 is such a failure it will kill Python.” (Có khả năng cao rằng Python 3 là một thất bại, nó sẽ giết chết Python).

Chính góc nhìn về Python 3 này của Zed đã được phản ánh trong cuốn “Learn Python the Hard Way”. Nó cũng là một trong những yếu tố dẫn đến các tranh luận trái chiều với quyển sách. Trong những phần dưới đây, chúng ta sẽ cùng tìm hiểu xem liệu hướng tiếp cận của Zed có hợp lý hay không.

2. Cấu trúc của “Learn Python the Hard Way”

2.1 Giới thiệu chung:

“Learn Python the Hard Way” là cuốn sách dạy về Python và những mindset về lập trình nói chung. Lộ trình học một ngôn ngữ lập trình mới được đưa ra khá rõ ràng: Hiểu ưu, nhược điểm của ngôn ngữ đó và cách ứng dụng vào từng trường hợp → Học các cú pháp → Đi sâu vào các cách hoạt động phức tạp của nó trong thực tế. Tuy vậy, cái khó và quan trọng hơn cả là làm sao để người học có tư duy giải quyết vấn đề tốt. Zed đã cố gắng làm điều đó ở trong cuốn sách này.

2.2 Cấu trúc các chương:

Mở đầu, cuốn sách sẽ dạy bạn cách cài đặt Python (cho cả Windows và Mac). Bạn sẽ  thiết lập được một môi trường hoàn chỉnh để đảm bảo mọi thứ hoạt động tốt. Khi đã sẵn sàng, giờ là lúc để bạn tìm hiểu các kiến thức cụ thể về Python:

  • Chương 1-14:  Lệnh print, chuỗi (strings) và biến (variables).
  • Chương 15-17: Cách làm việc với files: đọc, viết, copy.
  • Chương 18-21: Giới thiệu các hàm.
  • Chương 22: Chương này gợi ý người đọc xem lại kiến thức của các chương trước và liệt kê ra tất cả các ký hiệu họ dùng. Sau đó, họ sẽ dành ra 2 ngày tiếp theo để kiểm tra lại kiến thức của mình về các ký hiệu trên (VD: ‘, %, \, =, v.v).
  • Chương 23-25: Thực hành chuyên sâu về nội dung của các chương trước.
  • Chương 26: Bài kiểm tra khả năng debug của người đọc. Zed đưa ra các dòng code Python có lỗi và yêu cầu người đọc sửa nó. 
  • Chương 27-31: Giới thiệu về kiểu dữ liệu Boolean và câu lệnh “if”.  
  • Chương 32-36: Phân tích các vòng lặp. 
  • Chương 37: Ôn tập về các ký hiệu và cung cấp một cheat sheet nhỏ về các từ khoá, kiểu dữ liệu, chuỗi thoát (string escape sequences) và các toán tử.
  • Chương 38-39: Lists và từ điển.
  • Chương 40-49: Lập trình hướng đối tượng (Object-Oriented Programming).
  • Chương 50-52: Giới thiệu ngắn gọn về phát triển web với Flask.

3. Điều gì làm nên điểm mạnh của “Learn Python the Hard Way”?

3.1 Hướng tiếp cận khuyến khích khả năng tự học

Cách Zed lựa chọn để dạy kiến thức khá đặc biệt: Thông qua “Learn Python the Hard Way”, người đọc được kỳ vọng tìm hiểu rất nhiều thông tin một cách tự lập. Tác giả sẽ chỉ vạch ra một định hướng chung, còn người đọc sẽ cần chủ động đào sâu kiến thức đó bằng những nguồn tài liệu xung quanh.

Hãy rèn cho mình thói quen tự học từ sớm

Thực tế, không có một tài liệu nào cung cấp sẵn tất cả những kiến thức bạn cần. Muốn tìm lời giải đáp cho một câu hỏi nào đó, bạn cần biết cách tự tìm kiếm, chọn lọc và kết hợp nhiều nguồn thông tin khác nhau. Bạn có thể tìm đến bất kỳ cách nào, từ đọc tài liệu viết, xem các video hướng dẫn, hỏi những người xung quanh,…Miễn sao bạn tìm được giải pháp cuối cùng cho chính mình! Đây cũng chính là một tư duy mà bất kỳ lập trình viên giỏi nào cần có được.

3.2 Kiến thức bổ sung về Command Line

Nhận thấy “lập trình” không chỉ liên quan tới mỗi việc “viết code”, Zed đã bổ sung một chương phụ với tiêu đề “Command Line Crash Course”. Đây là chương cung cấp những kiến thức tổng quan và ngắn gọn về thế giới của những chiếc bảng điều khiển (consoles) và thiết bị đầu cuối (terminals). 

Có một số lập trình viên cho rằng những kiến thức về giao diện dòng lệnh (Command Line Interface hay CLI) không thực sự quan trọng. Tuy vậy, CLI thực chất là một kỹ năng rất hữu ích cho lập trình viên. Bạn có thể có thêm nhiều kinh nghiệm để áp dụng vào lập trình khi làm việc với Git, quản lý môi trường ảo thông qua pipenv, quản lý hiệu suất hệ thống thông qua các tiện ích của console như iperf hoặc  htop… Mặc dù đây không phải là một khóa học toàn diện, nhưng nó cung cấp cho người đọc hiểu biết vững chắc về cách hoạt động của CLI và điểm khác biệt của chúng với giao diện đồ hoạ người dùng (Graphical User Interface hay GUI). 

Các bài học bao gồm:

  • Làm việc với đường dẫn (paths), thư mục (folders/directories) (thông qua mkdir)
  • Điều hướng xung quanh hệ thống tệp (VD: ls, cd, pushd/popd)
  • Làm việc với tệp (VD: touch, cp, mv)

Cuối cùng, Zed cung cấp thêm một số cheat sheets cho cả Unix Bash và Powershell.

3.3 Chuyên mục “Common Student Questions” (Những câu hỏi thường gặp)

Nhận thấy rất nhiều người đọc sẽ có thể mắc lỗi, Zed đã bổ sung một chuyên mục ”Common Student Questions” (Các câu hỏi thường gặp) ở mỗi chương. Đúng như tên gọi của nó, chuyên mục này sẽ giải thích một số vấn đề người học hay gặp nhất, giống như Stack Overflow ở dạng sách vậy. Dưới đây là một số ví dụ:

  • Q: Tại sao tôi lại nhận được thông báo: “SyntaxError: invalid syntax” mỗi khi tôi chạy Pydoc? 

A: Bạn đang không chạy Pydoc từ command line; có thể bạn đang chạy nó bên trong Python 3.6. Hãy thoát khỏi Python 3.6 trước.

  • Q: Tại sao for i trong range(1, 3) chỉ được lặp lại 2 lần thay vì 3 lần? Hàm range() chỉ chạy các số từ đầu đến cuối và bỏ qua số cuối. Vì vậy, trong trường hợp này, nó dừng lại ở số 2 chứ không phải 3. Đây được coi là cách phổ biến nhất để chạy vòng lặp này.

3.4 “Learn Python the Hard Way” có thể được tiếp cận hoàn toàn miễn phí!

Dù là sách từ nước ngoài nhưng bạn chẳng cần phải lặn lội tìm kiếm đâu xa hay e ngại rằng giá của cuốn sách quá đắt. Phiên bản ebook của “Learn Python the Hard Way” có sẵn ở khắp mọi nơi và được tiếp cận hoàn toàn miễn phí! Got It gửi bạn link ebook của cuốn sách này tại đây.

4. Những ý kiến trái chiều về “Learn Python the Hard Way”

4.1 Tranh luận về Python 2 và Python 3

Tranh luận bắt đầu xảy ra vào năm 2014 khi Zed cho ra mắt “Learn Python (2) The Hard Way”. Ở “Exercise 0: The Setup”, anh đã viết:

Như có đề cập từ trước, là một tác giả và một lập trình viên, Zed vẫn luôn có những chỉ trích về Python 3 và dự đoán rằng nó sẽ không thể thành công. Ý kiến ​​này có thể phù hợp với một bài đăng trên blog cá nhân, tuy vậy anh lại đang gợi ý cho hàng nghìn lập trình viên sử dụng một công nghệ cũ hơn dù biết rằng những hỗ trợ cho Python 2 sẽ kết thúc vào năm 2020. 

Luận điểm này khiến cho nhiều lập trình viên không thực sự thoả mãn, bởi họ cho rằng  tác giả cũng nên thừa nhận vì sao ngày càng có nhiều người chuyển sang Python 3.

Cuối cùng, Zed cũng đã quyết định cập nhật quyển sách lên phiên bản với Python 3 vào năm 2017. 

4.2 Yêu cầu nhập liệu thủ công

Trong cuốn sách, Zed cảnh cáo người đọc về việc sao chép các đoạn code. Thay vào đó, họ được khuyến khích nhập các dòng code một cách thủ công để ghi nhớ những  trúc Python tốt hơn.

Chính Zed cũng đã gọi đây là một quá trình ghi nhớ nhàm chán và câu hỏi được đặt ra là: Những cú pháp Python có thực sự khó nhớ đến vậy? Thực chất, lập trình viên không nhất thiết phải nhớ từng chi tiết nhỏ mà chỉ cần ghi nhớ các nguồn họ có thể tra cứu ra một chi tiết nào đó. Cách tiếp cận qua hướng nhập liệu thủ công của Zed có thể phù hợp với một số người, nhưng chưa chắc đã hiệu quả với một lập trình viên mới học Python.

Kết luận

Trong thực tế, không có tài liệu nào là 100% hoàn hảo. Những hướng tiếp cận của Zed trong “Learn Python the Hard Way” sẽ trở nên phù hợp với tuỳ người, và bạn cũng có thể là một trong số đó. Dẫu sao, đây vẫn là một cuốn sách học Python kinh điển đáng để thử với mọi lập trình viên suốt nhiều năm nay. Nếu bạn đã đọc sách và có bất kỳ đánh giá nào khác về cuốn sách này, hãy chia sẻ nó với mọi người ở dưới phần bình luận nhé!

Got It Vietnam – Tham khảo: Tác giả Denis Kryukov, theo soshace.com

Đọc thêm về quy trình tuyển dụng tại đây.

https://d1iv5z3ivlqga1.cloudfront.net/wp-content/uploads/2021/04/29235048/1_QAG9RXQyyMAY7i9OYo84FA.png
Got It Vietnam
December 08, 2020
Share this post to:
Tags:
4 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback
Bắt đầu học ngôn ngữ lập trình Python qua các dự án - Blog | Got It AI
3 years ago

[…] Learn Python the Hard Way – một cuốn sách dạy các khái niệm Python từ cơ bản đến các chương trình chuyên sâu. […]

trackback
4 quyển sách Python tiếng Việt cho người mới bắt đầu - Blog | Got It AI
3 years ago

[…] đầu sách tiếng Anh về các kiến thức Python nâng cao. Chẳng hạn như quyển Learn Python the Hard Way – một trong những quyển sách “kim chỉ nam” mà bất kỳ coder Python nào cũng […]

trackback
Tài liệu Python: 10 cuốn sách Python cơ bản cho người mới bắt đầu
3 years ago

[…] Review chi tiết Learn Python The Hard Way […]

trackback
4 quyển sách học Python cơ bản bạn không thể bỏ qua - Blog | Got It AI
3 years ago

[…] Review chi tiết quyển Learn Python The Hard Way […]

Các bài viết liên quan
Các bước tạo một thư viện Python

Các bước tạo một thư viện Python

Tác giả: Minh (Software Engineer | CAI) Trong Tech Blog số này, Got It sẽ cùng bạn tìm hiểu về 6 bước để tạo và phân phối một thư viện Python. Cụ thể, chúng ta sẽ viết một CLI command tương tự cowsay cùng với một function để các package khác có thể import và […]
Sử dụng pre-commit để thực thi PEP8 chỉ trong 3 bước

Sử dụng pre-commit để thực thi PEP8 chỉ trong 3 bước

Tác giả: Kiên (Software Engineer | CAI) Đảm bảo code tuân thủ đầy đủ các quy tắc được đề xuất trong PEP8 là một điều vô cùng quan trọng, đặc biệt là trong làm việc nhóm, khi mà yếu tố dễ đọc, dễ hiểu, và dễ bảo trì code được đặt lên hàng đầu. Dẫu […]
Hướng dẫn cách triển khai và debug code Python trên Docker

Hướng dẫn cách triển khai và debug code Python trên Docker

Tác giả: Kiên (Software Engineer | CAI) Bạn đã bao giờ mất hàng tiếng đồng hồ, thậm chí vài ngày để cài đặt một số thư viện cần thiết cho việc chạy một project trên máy tính của mình chưa? Nếu có thì đây là bài viết dành cho bạn. Thông thường, khi bạn tham […]
Readable Code

Readable Code

Tác giả: Minh (Software Engineer, CAI) & Hương (TPM, CAI) Mục lục1. Readable code là gì?2. Làm thế nào để viết code dễ đọc?2.1. Style guide2.2. Viết function nhỏ, tập trung vào một tính năng2.3. Đặt tên hợp lý2.3.1. Dùng các tiền tố thích hợp để phân loại function2.3.2. Hạn chế thêm thông tin về […]
Tìm hiểu Tuple trong Python, phân biệt Tuple và List

Tìm hiểu Tuple trong Python, phân biệt Tuple và List

Ở bài viết này, chúng ta sẽ cùng đi tìm hiểu về Tuple trong Python, cách sử dụng chúng như thế nào, và sự khác biệt giữa Tuple và List là gì? Tất cả những nội dung trong bài đọc sẽ đều có ví dụ minh hoạ cụ thể, hi vọng các bạn đọc có […]
Anaconda là gì? Tìm hiểu nền tảng Khoa học dữ liệu phổ biến nhất

Anaconda là gì? Tìm hiểu nền tảng Khoa học dữ liệu phổ biến nhất

Để có thể tạo nên một ứng dụng của riêng mình, điều quan trọng nhất đó là phải thiết lập môi trường làm việc đúng cách. Vì vậy, bạn cần các công cụ để xử lý dữ liệu, xây dựng các mô hình và biểu diễn trên đồ thị. Việc sử dụng nhiều công cụ […]