LỜI MỞ ĐẦU 

As a reviewer I got an early opportunity to read the book you are holding. It was great, even in draft form. Dave Thomas and Andy Hunt have something to say, and they know how to say it. I saw what they were doing and I knew it would work. I asked to write this foreword so that I could explain why.

Là một người review sách, tôi đã có cơ hội đọc cuốn sách mà bạn đang cầm trong tay từ rất sớm. Nó thật sự tuyệt vời, ngay cả khi nó còn là một bản nháp. Dave Thomas và Andy Hunt có điều gì đó muốn truyền tải và họ biết cách để truyền tải. Tôi đã nhìn thấy những gì họ đang làm và tôi biết rằng những thứ họ làm sẽ đạt được mục tiêu. Tôi đã yêu cầu viết lời mở đầu cho cuốn sách này để có thể giải thích tại sao tôi lại nói như thế.

Simply put, this book tells you how to program in a way that you can follow. You wouldn't think that that would be a hard thing to do, but it is. Why? For one thing, not all programming books are written by programmers. Many are compiled by language designers, or the journalists who work with them to promote their creations. Those books tell you how to talk in a programming language—which is certainly important, but that is only a small part of what a programmer does.

Đơn giản là, cuốn sách này giúp bạn học lập trình theo một cách dễ hiểu. Bạn không nghĩ rằng điều đó sẽ khó, nhưng đúng là như vậy. Vì sao ư? Thêm một điều nữa, không phải tất cả các cuốn sách lập trình đều được viết bởi các lập trình viên. Nhiều cuốn được biên soạn bởi các nhà thiết kế ngôn ngữ hoặc các nhà báo làm việc với họ để quảng bá cho sản phẩm của họ. Những cuốn sách đó chỉ dạy bạn cách “giao tiếp” với một ngôn ngữ lập trình - đó chắc chắn là điều quan trọng, nhưng nó chỉ là một phần nhỏ của những gì mà một lập trình viên sẽ làm.

What does a programmer do besides talk in programming language? Well, that is a deeper issue. Most programmers would have trouble explaining what they do. Programming is a job filled with details, and keeping track of those details requires focus. Hours drift by and the code appears. You look up and there are all of those statements. If you don't think carefully, you might think that programming is just typing statements in a programming language. You would be wrong, of course, but you wouldn't be able to tell by looking around the programming section of the bookstore.

Ngoài việc “giao tiếp” với ngôn ngữ lập trình, một lập trình viên còn làm gì khác? Ohm thì họ sẽ giải quyết những vấn đề sâu hơn. Hầu hết các lập trình viên sẽ gặp khó khăn khi giải thích những gì họ làm. Lập trình là một công việc chất chứa đầy những chi tiết, và việc theo dõi những chi tiết đó đòi hỏi sự tập trung cao độ. Bạn ngồi hàng giờ và suy nghĩ mãi rồi những dòng code mới xuất hiện. Bạn tra cứu và có tất cả những câu lệnh đó. Nếu bạn không suy nghĩ cẩn thận, bạn có thể nghĩ rằng lập trình chỉ là gõ các câu lệnh bằng một ngôn ngữ lập trình. Hiển nhiên là bạn sai rồi, nhưng bạn không thể nhận ra điều đó chỉ bằng cách nhìn xung quanh khu vực trưng bày sách lập trình ở cửa hàng sách.

In The Pragmatic Programmer Dave and Andy tell us how to program in a way that we can follow. How did they get so smart? Aren't they just as focused on details as other programmers? The answer is that they paid attention to what they were doing while they were doing it—and then they tried to do it better.

Trong cuốn sách "The Pragmatic Programmer", Dave và Andy chỉ cho chúng ta cách lập trình một cách có hệ thống. Làm sao họ có thể thông minh đến như vậy? Liệu họ có tập trung vào chi tiết như các lập trình viên khác không? Câu trả lời là họ chú ý đến những gì họ đang làm trong khi làm nó, sau đó họ cố gắng làm tốt hơn.

Imagine that you are sitting in a meeting. Maybe you are thinking that the meeting could go on forever and that you would rather be programming. Dave and Andy would be thinking about why they were having the meeting, and wondering if there is something else they could do that would take the place of the meeting, and deciding if that something could be automated so that the work of the meeting just happens in the future. Then they would do it.

Hãy tưởng tượng rằng bạn đang ngồi trong một cuộc họp. Có lẽ bạn đang nghĩ rằng cuộc họp có thể kéo dài mãi mãi và bạn thà ngồi code còn thích hơn. Dave và Andy lại đang nghĩ về lý do tại sao họ có cuộc họp, và tự hỏi liệu có điều gì khác mà họ có thể làm thay cho cuộc họp đó, và quyết định xem điều đó có thể được tự động hóa để công việc của cuộc họp sẽ xảy ra trong tương lai. Sau đó họ sẽ thực hiện nó.

That is just the way Dave and Andy think. That meeting wasn't something keeping them from programming. It was programming. And it was programming that could be improved. I know they think this way because it is tip number two: Think About Your Work.

Đó là cách mà Dave và Andy suy nghĩ. Cuộc họp đó không phải là điều ngăn cản họ khỏi việc lập trình. Đó chính là lập trình. Và việc lập trình đó có thể được cải thiện. Tôi biết họ suy nghĩ như thế vì đó là lời khuyên số hai: “Hãy suy nghĩ về công việc của bạn”.

So imagine that these guys are thinking this way for a few years. Pretty soon they would have a collection of solutions. Now imagine them using their solutions in their work for a few more years, and discarding the ones that are too hard or don't always produce results. Well, that approach just about defines pragmatic. Now imagine them taking a year or two more to write their solutions down. You might think, That information would be a gold mine. And you would be right.

Vì vậy, hãy tưởng tượng những người đàn ông này suy nghĩ theo cách đó trong vài năm. Kiểu gì họ cũng sẽ có một bộ sưu tập các giải pháp sớm thôi. Bây giờ hãy tưởng tượng họ sử dụng các giải pháp của họ trong công việc của họ thêm vài năm nữa, và loại bỏ những giải pháp quá khó hoặc luôn luôn không mang lại kết quả. Oh, cách tiếp cận đó chính là định nghĩa cho “pragmatic”. Và tiếp theo, họ dành một hoặc hai năm để viết ra các giải pháp đó . Bạn có thể nghĩ rằng, thông tin đó sẽ là một kho vàng. Và bạn sẽ đúng.

The authors tell us how they program. And they tell us in a way that we can follow. But there is more to this second statement than you might think. Let me explain.

Các tác giả cho chúng ta biết họ lập trình như thế nào. Và họ giải thích cho chúng ta một cách dễ hiểu. Nhưng có nhiều điều hơn trong câu thứ hai này mà bạn có thể bỏ lỡ nếu không đọc kỹ. Để tôi nói bạn nghe.

The authors have been careful to avoid proposing a theory of software development. This is fortunate, because if they had they would be obliged to warp each chapter to defend their theory. Such warping is the tradition in, say, the physical sciences, where theories eventually become laws or are quietly discarded. Programming on the other hand has few (if any) laws. So programming advice shaped around wanna-be laws may sound good in writing, but it fails to satisfy in practice. This is what goes wrong with so many methodology books.

Tác giả đã cẩn trọng để tránh đưa ra một lý thuyết phát triển phần mềm cụ thể. Thật may mắn vì nếu họ đưa ra, họ sẽ phải thay đổi nội dung của tất cả các chương để bảo vệ lý thuyết của mình. Sự biến tấu này là truyền thống trong các khoa học vật lý chẳng hạn, nơi các lý thuyết cuối cùng trở thành định luật hoặc bị bỏ qua một cách im lặng. Trái lại, lập trình có ít (nếu có) luật. Vì vậy, các lời khuyên về lập trình được hình thành xung quanh các định luật ảo có lẽ sẽ tốt hơn trong văn bản, nhưng nó không đáp ứng được trong thực tế. Đây là quan niệm sai lầm mà rất nhiều sách liên quan đến phương pháp lâp trình mắc phải.

I've studied this problem for a dozen years and found the most promise in a device called a pattern language. In short, a pattern is a solution, and a pattern language is a system of solutions that reinforce each other. A whole community has formed around the search for these systems.

Tôi đã nghiên cứu vấn đề này trong mười hai năm và tìm thấy thứ triển vọng nhất trong một thiết bị được gọi là “pattern language/ngôn ngữ kiểu mẫu”. Nói ngắn gọn, “kiểu mẫu” tức là một giải pháp, và một ngôn ngữ kiểu mẫu là một hệ thống các giải pháp được thiết kế sao cho chúng tương hỗ lẫn nhau. Một cộng đồng đã hình thành xung quanh việc tìm kiếm những hệ thống này.

This book is more than a collection of tips. It is a pattern language in sheep's clothing. I say that because each tip is drawn from experience, told as concrete advice, and related to others to form a system. These are the characteristics that allow us to learn and follow a pattern language. They work the same way here.

Cuốn sách này không chỉ là một bộ sưu tập các lời khuyên. Nó còn là một ngôn ngữ kiểu mẫu hệ thống các giải pháp được kết hợp với nhau theo một mô hình giống như một ngôn ngữ lập trình. Tôi nói vậy vì mỗi lời khuyên đều được rút ra từ kinh nghiệm, được truyền tải như là lời khuyên cụ thể và liên quan đến những lời khuyên khác để hình thành một hệ thống. Đây là những đặc điểm cho phép chúng ta học và theo dõi một ngôn ngữ kiểu mẫu. Ở đây chúng hoạt động theo cách tương tự nhau.

() "Sheep's clothing" is a metaphorical expression that means something is disguised or hidden by its outward appearance, just as a wolf might wear a sheep's skin to blend in with a flock of sheep. In the context of the sentence "It is a pattern language in sheep's clothing," it suggests that the book is more than what it appears to be on the surface and that it contains valuable information that may not be immediately apparent.*

You can follow the advice in this book because it is concrete. You won't find vague abstractions. Dave and Andy write directly for you, as if each tip was a vital strategy for energizing your programming career. They make it simple, they tell a story, they use a light touch, and then they follow that up with answers to questions that will come up when you try.

Bạn có thể áp dụng lời khuyên trong cuốn sách này vì nó rất cụ thể và rõ ràng. Bạn sẽ không tìm thấy những định nghĩa mơ hồ. Dave và Andy viết trực tiếp cho bạn, như thể mỗi lời khuyên là một chiến lược quan trọng để nâng cao sự nghiệp lập trình của bạn. Họ làm cho nó đơn giản hơn, họ kể một câu chuyện, sử dụng cách tiếp cận nhẹ nhàng và sau đó họ trả lời các câu hỏi sẽ phát sinh khi bạn thử làm nó.

And there is more. After you read ten or fifteen tips you will begin to see an extra dimension to the work. We sometimes call it QWAN, short for the quality without a name. The book has a philosophy that will ooze into your consciousness and mix with your own. It doesn't preach. It just tells what works. But in the telling more comes through. That's the beauty of the book: It embodies its philosophy, and it does so unpretentiously.

Và còn nhiều điều khác nữa. Sau khi bạn đọc mười hoặc mười lăm lời khuyên, bạn sẽ bắt đầu nhìn thấy một chiều sâu khác trong công việc. Chúng tôi thường gọi nó là QWAN, viết tắt của "the quality without a name”- một chất lượng không thể nào đặt tên được. Cuốn sách chứa đựng một triết lý sẽ thẩm thấu vào ý thức của bạn và hòa trộn vào chất riêng của bạn. Nó không hề thuyết giáo. Nó chỉ nói về những gì sẽ hoạt động. Nhưng khi nói ra thì nó lại mang lại nhiều điều hơn như thế. Đó chính là vẻ đẹp của cuốn sách: Nó thể hiện triết lý của riêng nó và ẩn chứa sự dung dị, tự nhiên nhất trong từng câu chữ.

So here it is: an easy to read—and use—book about the whole practice of programming. I've gone on and on about why it works. You probably only care that it does work. It does. You will see.

Vì vậy, đây là một cuốn sách dễ đọc và dễ sử dụng về toàn bộ quá trình thực hành trong lập trình. Tôi đã nói về lý do tại sao nó hiệu quả. Có lẽ bạn sẽ quan tâm chỉ khi nó thực sự có hiệu quả. Và nó sẽ mang lại hiệu quả. Rồi bạn sẽ thấy điều đó.