Tôi đã làm Python trở lại vào năm 2003-5, khi tôi còn là chuyên gia tư vấn Plone / Zope. Sau đó vào năm 2006 tôi bắt đầu nhặt Ruby. Tôi chưa bao giờ nhìn lại. Tôi nghĩ những người khác nhau cảm thấy thoải mái hơn với các ngôn ngữ và văn hóa lập trình khác nhau, nhưng đối với tôi, Ruby cảm thấy tốt hơn Python rất nhiều.
Cá nhân tôi nghĩ rằng so với Ruby, Python là con ngựa đáng tin cậy cũng xảy ra một chút ẻo lả và nhạt nhẽo. Ruby vui hơn rất nhiều. Đó là một ngôn ngữ đẹp hơn, và có thể được tạo ra để làm rất nhiều điều thú vị và vui nhộn tiếp tục khiến các học viên của nó phải thán phục. Tôi đã nghe người Python tấn công Ruby vì quá nguy hiểm, nói rằng quá dễ để mở lại các lớp và làm những việc hoang dã và vô trách nhiệm như thế. Nhưng đó là một phần của những gì làm cho Ruby cảm thấy như một bộ phim hài phiêu lưu hành động lãng mạn đối với tôi. Ngược lại, Python giống đồ nội thất của Ikea: nó dễ chịu, thoải mái và đáng tin cậy - nhưng nó sẽ không bao giờ làm bạn ngạc nhiên và khiến bạn nghẹt thở.
Hai điều tốt nhất về Ruby, theo quan điểm của tôi, là hai điều phân biệt rõ ràng với Python. Đầu tiên, Ruby bị ảnh hưởng rất nhiều bởi Perl. Python dường như tự hào là người chống Perl. Nhưng những thứ mà Ruby mượn từ Perl có giá trị thực tiễn rất lớn. Lấy biểu thức chính quy, ví dụ. Trong Ruby, bạn có thể viết các biểu thức chính quy một cách tự nhiên, vd if mystring =~ /^\s+hello word!/ ...
. Trong Python, không quá nhiều, bởi vì Python quá lạc hậu về việc làm cho mọi thứ tuân theo một cú pháp có thể dự đoán thống nhất. Trong Ruby, bạn có thể nhận STDIN ngay lập tức với input = STDIN.read
. Trong Python, bạn phải import sys
và sau đó
sys.stdin.read()
. Đây chỉ là hai ví dụ trong đó nỗ lực của Python để tạo khoảng cách với Perl và được dự đoán là thường xuyên bị ảnh hưởng bởi sự sẵn lòng của Ruby để làm những gì cảm thấy đúng trong từng trường hợp.
Một điều khác để phân biệt Ruby với Python là Ruby gần gũi hơn với Lisp trong khi Python gần như là một ngôn ngữ lập trình bắt buộc. Tôi nghĩ rằng đây là một điểm cộng lớn trong sự ưu ái của Ruby.
Có nhiều tính năng giống như Lisp của Ruby cho phép thực hiện nhiều hơn với ít mã hơn trong Ruby so với Python. Ví dụ: mọi câu lệnh và cấu trúc điều khiển trong Ruby trả về một giá trị: bạn có thể thoát khỏi Ruby mà không bao giờ sử dụng return
câu lệnh. Ngay cả các if
câu lệnh cũng đánh giá một giá trị, vì vậy bạn có thể viết những thứ như thế này
result = if output == 'hello'
[some code here]
"world"
else
[some other code here]
"there"
end
Trong Python bạn sẽ phải viết
if output == "hello":
[some code here]
result = "world"
else:
[some other code here]
result = "there"
Python làm cho bạn gõ result =
hai lần. Đó không phải là DRY (Đừng lặp lại chính mình). Có rất nhiều trường hợp như thế này trong đó Ruby sẽ DRY nhiều hơn Python vì những phẩm chất giống như Lisp của nó. Matz, người tạo ra Ruby, đến từ nền Lisp.
Một số người nói rằng Ruby cũng đá đít Python trong siêu lập trình (hay còn gọi là lập trình động). Người Python trả lời bằng cách nói rằng siêu lập trình là quá nguy hiểm hoặc bằng cách nói rằng về mặt lý thuyết, bạn có thể hoàn thành tất cả các công cụ siêu lập trình mà Ruby có thể có trong Python, chỉ khác. Nhưng một điều mà mọi người đều đồng ý là việc lập trình siêu dữ liệu ít phổ biến hơn trong Python so với Ruby. Và điều đó thật tệ, bởi vì siêu lập trình là một chuyến đi.
Tôi nghĩ có lẽ đúng là vào cuối ngày, Ruby và Python đều có thể hoàn thành công việc. So với C và Java, Ruby và Python khá giống nhau. Họ là những ngôn ngữ biểu cảm, năng suất, cao cấp.
Vì vậy, nó sôi sục với tính cách của bạn.
Bạn có thích những thứ có thể dự đoán được, thường xuyên và an toàn không? Bạn có thích phong cách bắt buộc của lập trình? Bạn có muốn làm việc một ngày nào đó cho Google không? Bạn có nghĩ rằng Perl là một sinh sản hỗn loạn của địa ngục? Gắn bó với Python.
Bạn có rất vui khi tìm ra cách hoàn toàn ngắn gọn nhất để hoàn thành một số kết quả lập trình không? Bạn có cảm thấy nhàm chán bởi sự đều đặn và đồng đều? Bạn có muốn tự do viết mã theo một phong cách là của riêng bạn, và có nhiều không gian để đưa ra các thủ thuật hay ho của riêng bạn không? Bạn có cảm thấy yêu thích Lisp hơn là C không? Bạn có cảm thấy rất ngưỡng mộ sự đóng góp mang tính thời đại của Perl cho lập trình phần mềm, nhưng chỉ ước rằng nó có thể chỉ là một chút khó hiểu và xấu xí? Bạn có nghĩ về mã như những người khác nghĩ về thơ? Hãy thử Ruby.