🐚 Shell Games — Làm chủ terminal, làm chủ công cụ (Pragmatic Programmer #17)

Phong

Chào mấy bạn! Mình lại tiếp tục series cảm nhận về cuốn "The Pragmatic Programmer" (20th Anniversary Edition) rồi đây. Hôm nay mình muốn chia sẻ với mấy bạn về Topic 17: Shell Games — một chủ đề nằm trong Chapter 3: The Basic Tools.

Nói thiệt, cuốn sách này đọc càng sâu càng thấy thấm. Những bài viết trước mình đã nói về chuyện quản lý kiến thức như một danh mục đầu tư, về cách dùng plain text, về tính trực giao trong code — hôm nay tới một thứ rất đời thường mà bất kỳ lập trình viên nào cũng dùng hằng ngày: cái terminal (shell, command line).

Ảnh: Nemuel Sereti — Pexels

🐚 Shell Games — Cái bàn làm việc của lập trình viên

Trong cuốn sách, Dave Thomas và Andy Hunt so sánh cái shell (terminal) với bàn làm việc của người thợ mộc (woodworker's workbench). Cũng giống như người thợ mộc dựa vào một cái bàn chắc chắn, bằng phẳng để đục đẽo, đo đạc, ráp nối — thì lập trình viên cũng cần một workspace linh hoạt, mạnh mẽ để thao tác với hệ thống.

Câu nói mình tâm đắc nhất trong topic này là:

"A benefit of GUIs is WYSIWYG — what you see is what you get. The disadvantage is WYSIAYG – what you see is all you get."

Tạm dịch: Ưu của GUI là "thấy gì được nấy". Nhược của GUI cũng chính là "chỉ thấy được từng đó thôi".

Nghe hơi nghịch lý nhưng nghĩ kỹ thì đúng. Một giao diện đồ họa đẹp lung linh (VS Code, IntelliJ, Figma, v.v.) cho bạn thấy các nút bấm, menu, thanh công cụ — nhưng bạn chỉ có thể làm được những gì nhà thiết kế giao diện nghĩ ra cho bạn. Còn với command line, bạn có thể kết hợp các lệnh theo bất kỳ cách nào bạn muốn, không giới hạn.

Ảnh: Pixabay — Pexels

Tại sao shell lại quan trọng đến vậy?

Trong topic này, tác giả khuyến khích chúng ta:

  • Làm chủ shell của bạn. Học các phím tắt, biết cách dùng lịch sử lệnh (history), biết tab completion, biết kết hợp lệnh với pipes (|).
  • Dùng các lệnh Unix cơ bản thành thạo: grep, find, awk, sed, sort, cut, wc... Biết kết hợp chúng với nhau.
  • Tự động hóa mọi thứ: Nếu bạn làm một việc gì đó nhiều hơn 2 lần, hãy viết script cho nó.
  • Biết cách mở rộng shell: Alias, function, custom prompt — tất cả đều làm tăng tốc độ làm việc.

Một điểm thú vị: cuốn sách khuyên bạn nên học cách dùng shell nhiều hơn là dùng IDE cho mọi thứ. Không phải là bỏ IDE — IDE vẫn rất tốt cho việc viết code. Nhưng còn rất nhiều việc khác: tìm kiếm file, filter log, xử lý dữ liệu, quản lý process... — tất cả đều nhanh hơn khi dùng shell.

Ví dụ thực tế

Hồi mình mới đi làm, mình toàn dùng Finder (hoặc File Explorer) để tìm file. Lúc đó thấy cũng ổn. Rồi một ngày mình cần tìm tất cả các file log có chứa từ "ERROR" trong một folder có cả ngàn file. Bấm chuột từng cái thì tới Tết. Lúc đó mình mới nhận ra sức mạnh của một câu lệnh đơn giản:

grep -r "ERROR" *.log | sort | uniq -c | sort -rn

Một dòng — và mọi thứ hiện ra rõ ràng. Từ hôm đó mình bắt đầu đầu tư thời gian học shell một cách nghiêm túc.

Ảnh: Christina Morillo — Pexels

💭 Cảm nhận của mình

Cá nhân mình thấy topic Shell Games này là một trong những topic "nhẹ cân" nhưng lại có sức ảnh hưởng lớn nhất trong cuốn sách. Dù chỉ vài trang ngắn, nhưng nó thay đổi cách mình nhìn nhận về tools. Nó không dạy bạn gì cao siêu — không có design pattern, không có architecture, không có algorithm. Nhưng nó dạy bạn một thái độ: "Hãy làm chủ công cụ của mình."

Điều mình thích nhất là các tác giả không nói "mấy bạn phải học shell liền đi, không là dốt". Họ đặt nó trong một bối cảnh rộng hơn — đó là việc một lập trình viên chuyên nghiệp cần có một bộ tools cơ bản vững chắc. Shell là một phần quan trọng trong bộ tools đó, bên cạnh text editor, version control, debugger.

Nhưng mình cũng công nhận — có một rào cản khi học shell: đó là cú pháp lạ lẫm. Không như ngôn ngữ lập trình "bình thường", shell scripting có vẻ "khó nuốt" với nhiều người. Mình cũng từng thấy vậy. Nhưng chỉ cần kiên trì một thời gian ngắn là bạn sẽ thấy nó tự nhiên như thở vậy.

Mình có một tip nhỏ: bắt đầu bằng cách gõ Ctrl+R để tìm kiếm lịch sử lệnh, và tự đặt alias cho những lệnh bạn dùng thường xuyên. Ví dụ:

alias gst='git status'
alias glog='git log --oneline --graph --all'
alias ..='cd ..'

Những cái nhỏ nhỏ này — khi tích lũy qua thời gian — sẽ biến bạn thành một "lập trình viên pragmatic" thực thụ, đúng như tinh thần của cuốn sách.

📝 Kết

Tóm lại, Topic 17 — Shell Games — nhắc nhở chúng ta rằng: đừng chỉ biết dùng GUI. Hãy học cách dùng command line. Nó không chỉ nhanh hơn, mà còn linh hoạt hơn, mạnh mẽ hơn, và quan trọng nhất — nó cho bạn khả năng tự động hóa mọi thứ.

Nếu bạn chưa từng dành thời gian để học shell, thì hôm nay là ngày tốt nhất để bắt đầu. Còn nếu bạn đã rành rồi, thì chắc bạn cũng đồng ý với mình: một khi đã quen với shell, không có đường lui đâu! 😄

Hẹn mấy bạn ở bài sau nha! 🙋‍♂️