# 27: Đừng chỉ học ngôn ngữ, hãy hiểu văn hóa của nó

Ở trường trung học, tôi phải học ngoại ngữ.Vào thời điểm đó, tôi đã nghĩ rằng mình đã giỏi tiếng Anh nên tôi đã chọn (ngủ) quên trong suốt ba năm học tiếng Pháp. Vài năm sau tôi đến Tunisia vào kỳ nghỉ. Ở đây tiếng Ả Rập là ngôn ngữ chính thức, ngoài ra thì tiếng pháp cũng được sử dụng phổ biến do nơi đây trước kia từng là một thuộc địa cũ của Pháp. Tiếng Anh chỉ được nói ở các khu vực du lịch. Vì sự thiếu hiểu biết về ngôn ngữ của mình, tôi thấy mình bị giam cầm tại bể bơi khi đang đọc cuốn Finnegans Wake — một kiệt tác thành công của James Joyce về hình thức lẫn ngôn ngữ. Sự pha trộn vui tươi của hơn bốn mươi ngôn ngữ của Joyce là một trải nghiệm mệt mỏi đáng ngạc nhiên. Nhận ra cách mà các từ và cụm từ nước ngoài đan xen đã tạo cho tác giả những cách thể hiện mới về bản thân là điều mà tôi đã giữ trong sự nghiệp lập trình của mình.

Trong cuốn sách SEMINAL của họ, The Pragmatic Programmer, Andy Hunt and Dave Thomas khuyến khích chúng ta học một ngôn ngữ lập trình mới mỗi năm. Tôi đã cố gắng sống theo lời khuyên của họ và trong suốt những năm qua tôi đã có kinh nghiệm lập trình bằng nhiều ngôn ngữ. Bài học quan trọng nhất của tôi từ những cuộc phiêu lưu đấy là cần nhiều hơn (so với việc) là chỉ học cú pháp hay công thức để học một ngôn ngữ: Bạn cần hiểu văn hóa của nó. Bạn có thể viết Fortran bằng bất kỳ ngôn ngữ nào, nhưng để thực sự học một ngôn ngữ, bạn phải (Thực sự hiểu) ngôn ngữ đó. Đừng viện cớ nếu mã nguồn C# là một phương thức

Main với các phương thức trợ giúp tĩnh chủ yếu, nhưng tìm hiểu lý do tại sao các lớp có ý nghĩa. Đừng né tránh nếu bạn gặp khó khăn trong việc hiểu các biểu thức lambda được sử dụng trong các ngôn ngữ chức năng, hãy ép mình sử dụng chúng.

Khi bạn đã học được các ngôn ngữ mới, bạn sẽ ngạc nhiên về cách bạn sẽ bắt đầu sử dụng các ngôn ngữ bạn đã biết theo những cách mới. Tôi đã học cách sử dụng delegate một cách hiệu quả trong C# từ lập trình Ruby, release toàn bộ tiềm năng (full of potential) của .NET generics đã cho tôi ý tưởng về cách tôi có thể làm cho Java generics trở nên hữu ích hơn và LINQ đã tự mình dạy Scala.

Bạn cũng sẽ hiểu rõ hơn về design patterns bằng cách di chuyển giữa các ngôn ngữ khác nhau. Các lập trình viên C thấy rằng C#Java đã thương mại hóa mẫu lặp.

Trong Ruby và các ngôn ngữ động khác, bạn vẫn có thể sử dụng một khách truy cập, nhưng việc triển khai của bạn sẽ không giống như ví dụ từ cuốn sách Gang of Four.

Một số người có thể lập luận rằng cuốn Finnegans Wake là không thể đọc được, trong khi những người khác hoan nghênh nó vì vẻ đẹp phong cách của nó. Để làm cho cuốn sách trở nên ít khó đọc hơn thì cuốn sách đã có sẵn các bản dịch ngôn ngữ. Trớ trêu thay, đầu tiên trong số này là bằng tiếng Pháp. Code theo nhiều cách tương tự nhau. Nếu bạn viết code Wakese bằng một ít Python, một số Java và một gợi ý về Erlang, các dự án của bạn sẽ là một mớ hỗn độn. Thay vào đó, nếu bạn khám phá các ngôn ngữ mới để mở rộng tâm trí và có được những ý tưởng mới về cách bạn có thể giải quyết mọi thứ theo nhiều cách khác nhau, bạn sẽ thấy rằng code bạn viết bằng ngôn ngữ cũ đáng tin cậy của bạn trở nên đẹp hơn cho mọi ngôn ngữ mới bạn đã học.