Ngôn ngữ máy tính không phải là ngôn ngữ của con người

Bài viết được dịch từ blog Coding Horror

Mặc dù tôi đã trở thành một người không thể hiểu về sự hoàn toàn vô nghĩa trong việc lựa chọn giữa VB.NET và C#, theo quan điểm của tôi thì cú pháp được kế thừa từ ngôn ngữ C là một điểm mà nhiều người thèm muốn. Và không chỉ trong việc phân biệt chữa hoa – chữ thường khi viết code. Daniel Appleman, trong một cuốn sách e-book tuyệt vời của ông, VB.NET hay C#, Nên chọn ngôn ngữ nào?, cũng đồng tình:

Ở đây tôi đang mạo hiểm bước đi trên chỉ vài ngón chân của mình, bởi vì cú pháp ngôn ngữ giống như một vấn đề tôn giáo đối với nhiều lập trình viên. Chắc chắn là tất cả chúng ta có khuynh hướng thích cú pháp ngôn ngữ mà mình đã quen thuộc, các lập trình viên C++ và Java chắc chắn sẽ cảm thấy rất quen thuộc khi làm việc với C#.

Một điểm cũng nên cần làm rõ từ phần này đó là sự khác biệt giữa 2 ngôn ngữ VB.NET và C# là thực sự không đáng kể. Cả hai hầu như đều có cùng chức năng.

Tuy nhiên, về vấn đề cú pháp đối tượng (object), tôi phải trao giải thưởng chiến thắng cho VB.NET. Bạn chỉ cần nhìn vào những khai báo kế thừa sau đây:

public class BClass: AClass, Iint
Public Class BClass
Inherits AClass
Implements Iint

Hãy xem các từ được sử dụng để kiểm soát kế thừa:

abstract, sealed, virtual
MustInherit, NotInheritable, Overridable, Overrides, Shadows

Khi nói đến việc nhìn vào code và hiểu ngay đoạn code đó để làm gì — đặc biệt là sau khi nhà phát triển ban đầu đã nghỉ việc và một số lập trình viên trẻ vừa mới chân ướt chân ráo bước ra khỏi trường đại học phải tìm hiểu phần code đó một cách nhanh chóng để giải quyết một số bug khó hiểu hoặc bổ sung thêm một tính năng mới, thì ngôn ngữ nào sẽ dễ hiểu hơn? Xin thưa, đó là Visual Basic .NET.

Ngôn ngữ lập trình nào là tốt nhất?Ngôn ngữ lập trình nào là tốt nhất?


Mặc dù tôi đồng ý với Appleman về điểm này– void thì dành cho những gã học khoa học máy tính; nothing là dành cho người bình thường– trong phần lớn mọi thứ, nó hầu như chẳng liên quan. Nếu sự thành công hay thất bại của dự án của bạn xoay quanh sự khác biệt cú pháp rất nhỏ giữa hai ngôn ngữ .NET hầu như giống hệt nhau này, thì chính bạn là người có vấn đề còn nghiêm trọng hơn là việc lựa chọn ngôn ngữ.

Mặc dù sự đánh đổi giữa phong cách rườm rà và súc tích là đáng để cân nhắc, nhưng có những rủi ro khác ở đây. Ngôn ngữ máy tính, dù bạn có làm chúng rườm rà đến đâu, cũng đừng cố gắng biến nó trở thành một phiên bản đại diện cho ngôn ngữ nói. Trước đây tôi chưa từng bao giờ làm việc với ngôn ngữ AppleScript, nhưng nó là ngôn ngữ đã rơi vào cái bẫy này. Dưới đây là một đoạn code nhỏ bằng AppleScript để minh họa:

tell application “Mori”
tell front document
set a to first item of selection
set b to second item of selection
set a’s note to (a reference to a’s) note & (a reference to b’s note)
end tell
end tell

Trông nó gần giống như một đoạn văn xuôi, phải không bạn? John Gruber đã gọi ngôn ngữ AppleScript là một con quỷ có cú pháp giống hệt tiếng Anh:

Cái ý tưởng, và tôi cho rằng vẫn còn, là vẻ ngoài giống tiếng Anh của ngôn ngữ AppleScript sẽ giải phóng bạn khỏi bận tâm về những thuật ngữ khoa học máy tính như class, object, properties, command, và cho phép bạn chỉ cần viết ra những gì bạn nghĩ và chương trình sẽ làm việc.

Nhưng viết ra cái ý nghĩ của bạn, bằng tiếng Anh, hầu như chẳng bao giờ “làm việc” và biên dịch thành công trong AppleScript, và do đó để có năng suất bạn vẫn phải hiểu tất cả những cách mà AppleScript thực sự làm việc. Nhưng điều này là rất khó, bởi vì cú pháp ngôn ngữ này được tối ưu cho giống tiếng Anh, chứ không phải là được tối ưu để khiến nó rõ ràng hơn trong việc thể hiện nó đang thực sự làm cái con khỉ gì (nguyên văn là what the f**k).

Đây là lý do tại sao Python và JavaScript, hai ngôn ngữ kịch bản khác cũng gần như là cùng loại với AppleScript, thì không chỉ là những ngôn ngữ tốt hơn AppleScript, mà còn dễ hơn so với AppleScript, thậm chí mặc dù không cái nào trong số chúng giống hệt tiếng Anh một chút nào cả. Cú pháp của Python và JavaScript là trừu tượng hơn so với AppleScript, nhưng chúng cũng rõ ràng hơn. (Đặc biệt Python nổi tiếng về sự sáng sủa).

Phép ẩn dụ ngôn ngữ tự nhiên của AppleScript trở thành một lời nguyền chứ không phải là một phước lành.

Một số ngôn ngữ được cho là dễ đọc hơn những ngôn ngữ khác, dĩ nhiên, nhưng việc giữ được mục tiêu phía trước một cách rõ ràng và trung tâm thì quan trọng hơn rất nhiều so với việc ngồi đó mà cãi nhau về việc lựa chọn ngôn ngữ một cách khá vô nghĩa. Bạn có thể viết FORTRAN trong bất kỳ ngôn ngữ nào, vì vậy hãy chọn bất cứ ngôn ngữ nào mà bạn cảm thấy thoải mái nhất và hãy tối ưu hóa để làm cho phần code của bạn thể hiện được là nó đang làm cái con khỉ gì (nguyên gốc là what the f**k).

(Tôi nghĩ đến việc thả quả bom “what the f**k” trong bài viết này để nhấn mạnh, nhưng mà quả bom của tôi không có sức công phá ác liệt như của John Gruber.)

Các bài viết liên quan:

Về tác giả bài viết:

Jeff_atwood_coding_horrorJeff Atwood là một chuyên gia công nghệ tại Mỹ, hiện đang sinh sống và làm việc tại Berkeley, CA. Anh là một kỹ sư phần mềm chuyên về công nghệ Microsoft .NET, và là một blogger nổi tiếng trong cộng đồng công nghệ với blog Coding Horror, anh là người sáng lập và kiêm Giám đốc điều hành (CEO) của trang web hỏi đáp uy tín Stack Overflow và cũng là đồng sáng lập của Stack ExchangeDiscourse.

Advertisements

3 comments on “Ngôn ngữ máy tính không phải là ngôn ngữ của con người

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s