Nhà phát triển Python nên biết gì khi học Ruby? [đóng cửa]


16

Tôi đã là một lập trình viên Python được khoảng 18 tháng, bao gồm một đợt thực tập và một vài dự án phụ, và tôi thấy mình khá thoải mái trong ngôn ngữ.

Tuy nhiên, dường như có rất nhiều sự chú ý về Ruby trong lĩnh vực lập trình, nhưng không còn nhiều trên Python nữa.

Vậy trong việc học Ruby, sẽ có những thứ Pythonic chỉ là những thực hành xấu trong Ruby? Tôi nên đề phòng điều gì, và tôi nên tránh điều gì?


4
Tôi đã luôn coi là một lập trình viên Ruby nếu tôi nên học Python vì tất cả mọi người đều nói về: P
Earlz

Mặc dù có tiếng vang nhưng dường như Python vẫn được sử dụng nhiều gấp đôi so với Ruby (ít nhất là theo TIOBE -> tiobe.com/index.php/content/apersinfo/tpci/index.html ).
Daniel Scocco

10
Thay vì là một "lập trình viên Python" hay "lập trình viên Ruby", bạn nên cố gắng trở thành một lập trình viên tuyệt vời. Sau đó, bạn có thể sử dụng bất kỳ ngôn ngữ nào bạn muốn và chuyển sang ngôn ngữ mới khi đúng thời điểm.
BlackJack

Câu trả lời:


31

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 sysvà 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 returncâu lệnh. Ngay cả các ifcâ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.


11
"Và điều đó thật tệ, bởi vì siêu lập trình là một chuyến đi" ... Và cũng giống như một chuyến đi, sẽ rất tuyệt cho một đêm, nhưng cuối cùng bạn thức dậy vào buổi sáng và quên đi những gì bạn đã làm. Tôi nghĩ rằng siêu lập trình được nhấn mạnh quá mức trong Ruby và tôi thích Ruby hơn Python. Hầu hết các giải pháp của Ruby cho các vấn đề cú pháp là "bạn có thể giải quyết vấn đề đó bằng lập trình meta"
Earlz

23
Gì? result = "world" if output=="hello" else "there"là Python hoàn toàn hợp lệ (và ngắn hơn ba ký tự).
Tim Pietzcker

3
@Tim OK cảm ơn đã sửa lỗi cho tôi. Nhưng bạn có thể làm điều tương tự với câu lệnh if / elsif / elsif / other - tức là if / elif / elif / other trong Python không? Bạn có thể làm điều tương tự ngay cả khi có nhiều câu lệnh bên trong mệnh đề if hoặc khác không?
dan

1
Đợi đã, Python không có toán tử ternary?
PP.

3
"Matz, người tạo ra Python, đến từ nền Lisp." chờ đã ... AFAIK Matz là người tạo ra Ruby ...
Eimantas

6

Nó phụ thuộc.

Đối với tôi, trăn dễ bắt hơn ruby, cộng với cả hai ngôn ngữ đều có mục đích khác nhau.

Python là một ngôn ngữ cổ điển với nhiều thứ lạ mắt ở mức độ thấp, giữ cho nó sạch sẽ và dễ dàng so với C chẳng hạn. Python không có tham vọng của Ruby, mà với tôi có nhiều tính năng cấp cao hơn.

Bạn sẽ không bị tổn thương khi học Ruby, bạn sẽ khám phá những điều mới, nhưng hãy chú ý hơn Python gần với các mô hình lập trình đơn giản tạo nên thành công của C, với rất nhiều tên lửa đẩy năng suất. Ruby dành cho những người muốn tiến xa hơn trong các khái niệm lập trình nói chung: Lược đồ và tất cả những ngôn ngữ "ưu việt" đó.


3

Câu trả lời ngắn: Có và có.

Học một ngôn ngữ mới hầu như luôn hữu ích và đặc biệt là đối với Ruby vì Rails vẫn còn rất phổ biến. Và vâng, biết rõ về Python sẽ giúp bạn dễ dàng lấy Ruby. Chúng có một số khác biệt về cú pháp và các quy ước khác nhau trong cách đặt tên, nhưng cũng có rất nhiều điểm chung.

Đây không phải là một khoản đầu tư lớn và luôn có ích khi có nhiều công cụ hơn trong hộp công cụ của bạn, vì vậy hãy thực hiện nó!

(Tôi đã sử dụng Python khoảng 10 năm và nhặt được Ruby vào năm ngoái. Hiện đang làm việc toàn thời gian trong dự án RoR)


2

Mọi thứ đều có một chỗ đứng. Ví dụ: Python (django) là công dân hạng nhất trong GoogleApp Engine, trong khi đó là ngôn ngữ hoặc sự lựa chọn cho nhiều dự án tin sinh học. Python có rất nhiều giá trị thị trường (tôi nhận được một số triển vọng công việc không được yêu cầu đơn giản chỉ vì tôi đã làm rất nhiều với Python), nhưng Ruby cũng vậy - trong các lĩnh vực khác nhau. Vì bạn chắc chắn đã nghe thấy ở đây nhiều lần, nó sẽ luôn giúp bạn học nhiều ngôn ngữ hơn, vì vậy, hãy học Ruby. Nó sẽ phức tạp chứ? Nó sẽ ít phức tạp hơn nhiều so với việc học COBOL, vì các ngôn ngữ và khung có sẵn tương tự nhau. Một ví dụ là đá quý của Ruby và pip của python .

Hãy nhớ rằng ngôn ngữ là công cụ và mọi công cụ là một mục đích. Càng biết nhiều công cụ, bạn càng có thể xây dựng nhà trên cây nhanh hơn, dễ dàng hơn và chính xác hơn.


Tôi muốn trả lời cùng một dòng, hy vọng bạn không bận tâm đến việc chỉnh sửa ...
Dimitrios Mistriotis

2

Có nên học ruby? Đúng.

Học một ngôn ngữ mới luôn có giá trị (đặc biệt là nếu nó áp dụng một mô hình lập trình khác với những ngôn ngữ bạn biết) và đôi khi có thể khiến bạn thành thạo hơn ngay cả khi lập trình bằng các ngôn ngữ khác. Ví dụ, tôi đã chọn hầu hết các chương trình chức năng mà tôi biết từ Lisp và tôi áp dụng nó khi tôi cần nó cho Python và Ruby.

Nó sẽ khó khăn? Nếu bạn đã học Python, bạn chắc chắn cũng có thể học Ruby.

Nó cũng hữu ích nếu bây giờ bạn đang tìm kiếm một công việc, nó cho thấy rằng bạn tò mò về công nghệ và bạn có thể tự học mọi thứ.

Có một so sánh tốt giữa Ruby và Python trên c2.com .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.