Book Review: Giới thiệu blog Coding Horror của Jeff Atwood

Sau một lần lang thang trên mạng và kiếm gì đó đọc cho tháng này, tôi tình cờ thấy được cuốn Lập trình và Cuộc sống của Jeff Atwood được anh Hồ Sỹ Hùng dịch. Tôi cảm nhận được là một cuốn sách khá hay và thú vị cho các lập trình viên như tôi và có thể là bạn nữa. Jeff Atwood là một lập trình viên kỳ cựu và là đồng sáng lập StackOverflow, một website mà có thể các lập trình viên không thể sống mà thiếu nó được.

Tôi chợt nhận ra rằng, tại sao mình cứ loay hoay để thu lượm kiến thức về lập trình, trong khi đó có những thánh như Jeff đã trải qua những khó khăn và chia sẻ lại cho chúng ta. Bằng cách đọc và tiếp thu những gì Jeff chia sẻ tôi chợt nhận ra rằng có khi mình có thể tiết kiệm được mấy năm để có thể có được kiến thức đó. Đó là cách theo tôi tiếp thu kiến thức hiệu quả. Sách chia sẻ nhiều điều về lập trình, cũng như cách cân bằng giữa công việc lập trình và cuộc sống. Sau đây tôi sẽ chia sẻ lại những bài theo tôi là quan trong, còn với bạn thì có thể khác nhé. Sau khi đọc một quyển sách tôi nghĩ chúng ta nên tóm tắt và chọn lọc lại chỉ khoảng 20% nội dung trong sách mình vừa đọc. Vì theo quy luật 80/20 thì chỉ 80% kết quả đến từ 20% nguyên nhân.

1. Tại sao nhiều lập trình viên lại không biết code.

Nào hãy thú nhận thật lòng với mình rằng bạn đã dành thời gian để rèn luyện code và giải thuật như thế nào? Bạn có code cho vui khi rảnh rổi? Hãy suy nghĩ lại bản thân và hãy là một lập trình viên thực hành chứ đừng chỉ có biết chém gió. Tại sao hàng năm có hàng ngàn sinh viên IT ra trường nhưng các nhà tuyển dụng vẫn đang khao khát tìm đủ người tài. Cung rất nhiều, cầu rất nhiều nhưng đều không gặp được nhau? Bạn hãy suy nghĩ bạn có đáng để các công ty thuê để code những sản phẩm của họ? Bạn đã có thể code? Nếu bạn là chủ một công ty thì bạn có thuê chính mình hay không?

2. Lập trình không có comment.

Khi nào bạn cần comment cho code của bạn thì khi đó code của bạn đã không rõ ràng, hãy đập nó đi và xây lại, chứ đừng ngồi xuống viết một mớ comment cho chỉ 5-6 dòng code. Tôi không chê trách việc chúng ta comment cho code, nhưng sử dụng lung tung và vô tội vạ có lẽ là một vấn đề. Jeff khuyên chúng ta chỉ nên comment một đoạn code mà giải thích WHY nó tồn tại chứ không phải WHAT nó là cái the fuck gì?

3. Lập trình viên giỏi hãy bớt sử dụng chuột.

Điều này nghe có vẻ không liên quan lắm với kỹ nằng lập trình, nhưng có một sự thật là tôi thường thấy các pro thường chỉ sử dụng nhiều phím tắt. Nó nhanh hơn rất nhiều và trong thật là trôi chảy khi làm việc. Riêng đối với vấn đề này, tôi cảm thấy khá khó khăn vì thói quen khá gà của tôi, ngồi rê chuột quá nhiều…

4. Lập trình viên nên thuộc lòng triết lý KISS, DRY, YAGNI.

  • KISS là Keep it simple, stupid. Giữ cho code của bạn đơn giản nhất có thể, làm cho nó rõ như không cần comment gì nữa.
  • DRY là Don’t repeat yourself, bất cứ khi nào bạn copy một đoạn code và paste nó và một file khác hay bạn thấy những dòng code giống nhau xuất hiện 2 lần trở lên thì bạn nên xem xét viết lại để dùng chung nó.
  • YAGNI là You aren’t gonna need it. Bạn sẽ không cần nó cho tới khi bạn thực sự cần đến nó. Hãy sáng suốt chọn lựa công nghệ cho dự án của bạn.

5. Code tốt nhất là không code một chút nào cả.

Điều này thoạt đầu nghe có vẻ buồn cười nhưng nó đúng là như vậy, code chính là nơi sinh ra bug, bất cứ đoạn code nào bạn thêm vô chương trình của bạn đều có khả năng sinh bug.

“Là một nhà phát triển phần mềm thì bạn chính là kẻ thù lớn nhất của mình. Bạn càng sớm nhận ra điều đó, thì bạn sẽ càng sơm trở nên tốt hơn”.

Có nhiều tiêu chí để đánh giá một đoạn code, nó có thể là: tính khúc chiết, tốc độ thực thi, thời gian tiêu tốn trong việc lập trình, sự mạnh mẽ, tính mêm dẽo. Và tôi thấy nếu bạn không thể tránh được việc viết thêm code thì hãy bắt đầu bằng tính khúc chiết(KISS). Mỗi đoạn code chúng ta viết ra đều phải được biên dịch, debug, review, testing, và có thể là bug. Do đó, bạn hãy xem xét thật kỹ mỗi khi thêm một dòng code vào chương trình của bạn.

Còn tiếp …

Leave a Reply

Your email address will not be published. Required fields are marked *