ผู้พัฒนา Python ควรรู้อะไรบ้างขณะเรียนรู้ Ruby [ปิด]


16

ฉันเป็นโปรแกรมเมอร์ Python ประมาณ 18 เดือนซึ่งประกอบด้วยการฝึกงานหนึ่งครั้งและโครงการสองสามด้านและฉันคิดว่าตัวเองค่อนข้างสบายใจในภาษา

อย่างไรก็ตามดูเหมือนว่าจะมีความสนใจมากใน Ruby ในด้านการเขียนโปรแกรม แต่ไม่มากใน Python อีกต่อไป

ดังนั้นในการเรียนรู้ทับทิมจะมีสิ่งที่ไพทอนเป็นเพียงแนวทางปฏิบัติที่ไม่ดีในทับทิมหรือไม่? ฉันควรระวังอะไรและควรหลีกเลี่ยงอะไร


4
ฉันมักจะถือว่าเป็นโปรแกรมเมอร์ Ruby หากฉันควรเรียนรู้ Python เพราะทุกคนพูดถึง: P
Earlz

แม้จะมีเรื่องปากต่อปาก แต่ดูเหมือนว่า Python ยังคงใช้ Ruby มากกว่าสองเท่า (ตาม TIOBE อย่างน้อย -> tiobe.com/index.php/content/paperinfo/tpci/index.html )
Daniel Scocco

10
แทนที่จะเป็น "Python โปรแกรมเมอร์" หรือ "Ruby โปรแกรมเมอร์" คุณควรพยายามเป็นโปรแกรมเมอร์ที่ยอดเยี่ยม จากนั้นคุณสามารถใช้ภาษาใดก็ได้ที่คุณต้องการและไปยังภาษาใหม่เมื่อถึงเวลา
BlackJack

คำตอบ:


31

ฉันทำ Python ย้อนกลับไปในปี 2003-5 เมื่อฉันเป็นที่ปรึกษาของ Plone / Zope จากนั้นในปี 2549 ฉันเริ่มรับทับทิม ฉันไม่เคยมองย้อนกลับไป ฉันคิดว่าคนอื่นรู้สึกสะดวกสบายกับภาษาและวัฒนธรรมการเขียนโปรแกรมที่แตกต่างกัน แต่สำหรับฉัน Ruby รู้สึกดีกว่า Python มาก

โดยส่วนตัวแล้วผมคิดว่าเมื่อเทียบกับ Ruby แล้ว Python เป็นสิ่งที่น่าเชื่อถือและน่าเชื่อถือ ทับทิมเป็นอะไรที่สนุกมากกว่า มันเป็นภาษาที่ดูดีขึ้นและสามารถทำสิ่งที่สนุกและขี้ขลาดมากมายที่ทำให้ผู้ฝึกปฏิบัติ ฉันได้ยินว่าคน Python โจมตี Ruby เพราะเป็นอันตรายเกินไปโดยบอกว่ามันง่ายเกินไปที่จะเปิดคลาสอีกครั้งและทำสิ่งที่บ้าคลั่งและไร้ความรับผิดชอบเช่นนั้น แต่นั่นเป็นส่วนหนึ่งของสิ่งที่ทำให้รูบีรู้สึกเหมือนเป็นนักแสดงตลกแนวผจญภัยแอ็กชั่นสุดโรแมนติกสำหรับฉัน ในทางกลับกัน Python เป็นเหมือนเฟอร์นิเจอร์ของ Ikea: เป็นที่น่าพอใจสะดวกสบายและน่าเชื่อถือ - แต่มันจะไม่มีวันทำให้คุณประหลาดใจ

สองสิ่งที่ดีที่สุดเกี่ยวกับ Ruby จากมุมมองของฉันคือสองสิ่งที่แยกความแตกต่างอย่างชัดเจนจาก Python อันดับแรกทับทิมได้รับอิทธิพลอย่างมากจาก Perl Python ดูเหมือนจะภาคภูมิใจในการต่อต้าน Perl แต่สิ่งที่ทับทิมที่ยืมมาจาก Perl นั้นมีประโยชน์อย่างมาก ยกตัวอย่างเช่นใช้นิพจน์ทั่วไป if mystring =~ /^\s+hello word!/ ...ในทับทิมคุณสามารถเขียนการแสดงออกปกติตามธรรมชาติเช่น ใน Python ไม่มากนักเพราะ Python เป็นเรื่องเกี่ยวกับการทำให้ทุกอย่างเป็นไปตามไวยากรณ์ที่คาดเดาได้อย่างสม่ำเสมอ ในทับทิมคุณจะได้รับ STDIN input = STDIN.readทันทีด้วย ในหลามคุณต้องแล้วimport sys sys.stdin.read()นี่เป็นเพียงสองตัวอย่างเท่านั้นที่ความพยายามของ Python ในการแยกตัวออกจาก Perl และเป็นเรื่องปกติที่คาดเดาได้ก็คือการที่ Ruby ตั้งใจที่จะทำสิ่งที่ถูกต้องในแต่ละกรณี

อีกสิ่งหนึ่งที่แยกความแตกต่างของ Ruby จาก Python ก็คือ Ruby นั้นใกล้กับ Lisp มากในขณะที่ Python นั้นค่อนข้างเป็นภาษาโปรแกรม ฉันคิดว่านี่เป็นข้อดีอย่างมากในความโปรดปรานของรูบี้

มีคุณสมบัติคล้ายกับ Lisp มากมายของ Ruby ที่ทำให้สามารถทำงานได้มากขึ้นโดยใช้โค้ดใน Ruby น้อยกว่าใน Python ตัวอย่างเช่นทุกคำสั่งและโครงสร้างการควบคุมใน Ruby คืนค่า: คุณสามารถไปใน Ruby ได้โดยไม่ต้องใช้returnคำสั่ง แม้แต่ifข้อความสั่งให้ประเมินค่าคุณก็สามารถเขียนสิ่งนี้ได้

result = if output == 'hello'
           [some code here]
           "world"
         else
           [some other code here]
           "there"
         end

ใน Python คุณจะต้องเขียน

if output == "hello":
  [some code here]
  result = "world"
else:
  [some other code here]
  result = "there"

Python ทำให้คุณพิมพ์result =สองครั้ง นั่นไม่แห้งมาก (อย่าทำซ้ำตัวเอง) มีหลายกรณีเช่นนี้ที่ Ruby จะแห้งกว่า Python เนื่องจากมีคุณสมบัติคล้ายเสียงกระเพื่อม Matz ผู้สร้างทับทิมมาจากพื้นหลังเสียงกระเพื่อม

บางคนบอกว่ารูบี้ก็เตะตูดของไพ ธ อนในเมตาโพแกรมมิง (การเขียนโปรแกรมแบบไดนามิก) คนงูใหญ่ตอบว่าโดยบอกว่า metaprogramming นั้นอันตรายเกินไปหรือโดยบอกว่าในทางทฤษฎีคุณสามารถทำ metaprogramming ทั้งหมดที่ Ruby สามารถทำได้ใน Python ต่างไปจากเดิม แต่สิ่งหนึ่งที่ทุกคนเห็นพ้องต้องกันก็คือ metaprogramming นั้นพบได้น้อยใน Python มากกว่าใน Ruby และนั่นก็แย่เกินไปเพราะการเดินทางผ่านเมโทรโพรไฟล์เป็นทริป

ฉันคิดว่ามันอาจเป็นความจริงว่าเมื่อสิ้นสุดวัน Ruby และ Python ก็สามารถทำงานให้สำเร็จได้ เมื่อเทียบกับ C และ Java แล้ว Ruby และ Python ก็เหมือนกันมาก พวกเขาเป็นภาษาที่แสดงออกและมีประสิทธิผลในระดับสูง

ดังนั้นมันจึงเป็นสิ่งที่คุณต้องจดจำ

คุณชอบสิ่งที่คาดเดาได้ปกติและปลอดภัยหรือไม่? คุณชอบสไตล์การเขียนโปรแกรมที่จำเป็นหรือไม่? คุณต้องการทำงานกับ Google ซักวันไหม คุณคิดว่า Perl เป็นแหล่งวางไข่ที่วุ่นวายหรือไม่? ติดกับงูหลาม

คุณมีความยินดีอย่างยิ่งที่จะหาวิธีที่กระชับที่สุดในการบรรลุผลการเขียนโปรแกรมใช่ไหม คุณเบื่อกับความสม่ำเสมอและความสม่ำเสมอหรือไม่? คุณชอบที่จะมีอิสระในการเขียนโค้ดในสไตล์ที่เป็นของคุณเองและมีพื้นที่มากมายในการสร้างลูกเล่นของคุณเอง? คุณรู้สึกผูกพันกับ Lisp มากกว่า C หรือไม่? คุณรู้สึกชื่นชมอย่างมากต่อการมีส่วนร่วมในยุคสมัยของ Perl ในการเขียนโปรแกรมซอฟต์แวร์ แต่หวังว่ามันจะเป็นความลับและน่าเกลียดน้อยลงหรือไม่? คุณคิดว่ารหัสเหมือนคนอื่น ๆ คิดว่าบทกวี? ลองทับทิม


11
"และมันก็แย่เกินไปเพราะเมโทรโพรมิงแกรมเป็นการเดินทาง" ... และเช่นเดียวกับการเดินทางมันจะดีสำหรับหนึ่งคืน แต่ในที่สุดคุณก็ตื่นขึ้นมาในตอนเช้าและลืมสิ่งที่คุณทำไป ฉันคิดว่า metaprogramming นั้นเน้นใน Ruby มากเกินไปและฉันก็ชอบ Ruby to Python โซลูชันของรูบี้ส่วนใหญ่เกี่ยวกับปัญหาทางไวยากรณ์คือ "คุณสามารถแก้ไขได้ด้วยการเขียนโปรแกรมเมตา"
Earlz

23
อะไร? result = "world" if output=="hello" else "there"เป็นงูหลามที่ใช้ได้จริง (และสั้นกว่าสามอักขระ)
Tim Pietzcker

3
@Tim ตกลงขอบคุณสำหรับการแก้ไขฉัน แต่คุณสามารถทำสิ่งเดียวกันโดยใช้คำสั่ง if / elsif / elsif / else - เช่น if / elif / elif / else ใน Python ได้หรือไม่? คุณสามารถทำสิ่งเดียวกันได้แม้ว่าจะมีหลายประโยคในประโยค if หรือ else?
แดน

1
เดี๋ยวก่อน Python ไม่มีผู้ประกอบการที่สาม
PP

3
"Matz ผู้สร้าง Python มาจากพื้นหลัง Lisp" เดี๋ยวก่อน ... AFAIK Matz เป็นผู้สร้างทับทิม ...
Eimantas

6

มันขึ้นอยู่กับ.

สำหรับฉันไพ ธ อนนั้นง่ายกว่าที่จะเรียนรู้มากกว่าทับทิมและภาษาทั้งสองมีจุดประสงค์ที่แตกต่างกัน

Python เป็นภาษาคลาสสิกที่มีสิ่งแฟนซีระดับต่ำจำนวนมากทำให้มันสะอาดและง่ายกว่าเมื่อเปรียบเทียบกับ C Python ไม่มีความทะเยอทะยานของ Ruby ซึ่งสำหรับฉันมีคุณสมบัติระดับสูงมากมาย

มันจะไม่ทำร้ายคุณในการเรียนรู้ Ruby คุณจะค้นพบสิ่งใหม่ ๆ แต่ระวังมากกว่า Python อยู่ใกล้กับกระบวนทัศน์การเขียนโปรแกรมแบบง่ายซึ่งทำให้ C ประสบความสำเร็จ Ruby เป็นมากกว่าสำหรับผู้ที่ต้องการไปเพิ่มเติมในแนวคิดการเขียนโปรแกรมโดยทั่วไป: Scheme และภาษา "superior" ทั้งหมดเหล่านั้น


3

คำตอบสั้น ๆ : ใช่และใช่

การเรียนรู้ภาษาใหม่นั้นมีประโยชน์เกือบตลอดเวลาและมันเป็นเรื่องเฉพาะสำหรับ Ruby เนื่องจาก Rails ยังคงเป็นที่นิยมมาก และใช่การรู้ Python ดีจะทำให้ง่ายต่อการรับ Ruby พวกเขามีความแตกต่างทางวากยสัมพันธ์และการประชุมที่แตกต่างกันในการตั้งชื่อ

มันไม่ใช่การลงทุนครั้งใหญ่และเป็นประโยชน์เสมอที่จะมีเครื่องมือมากมายในกล่องเครื่องมือของคุณดังนั้นไปเลย!

(ฉันเคยใช้ Python ประมาณ 10 ปีและรับ Ruby เมื่อปีที่แล้วปัจจุบันทำงานเต็มเวลาในโครงการ RoR)


2

ทุกอย่างมีช่อง ตัวอย่างเช่น Python (django) เป็นพลเมืองชั้นหนึ่งใน GoogleApp Engine ในขณะที่มันเป็นภาษาหรือทางเลือกสำหรับโครงการชีวสารสนเทศจำนวนมาก Python มีมูลค่าตลาดจำนวนมาก (ฉันได้รับโอกาสในการหางานที่ไม่ได้ร้องขอเพียงเพราะฉันได้ทำกับ Python มาก) แต่ Ruby ก็เช่นกันในหลาย ๆ พื้นที่ เนื่องจากคุณไม่เคยได้ยินข้อสงสัยมาก่อนหลายครั้งมันจะช่วยให้คุณเรียนรู้ภาษาได้มากขึ้นดังนั้นใช่เรียนรู้ Ruby มันจะซับซ้อนไหม? มันจะมีความซับซ้อนน้อยกว่าการเรียนรู้ภาษาโคบอลเนื่องจากภาษาและกรอบการทำงานมีความคล้ายคลึงกัน ตัวอย่างหนึ่งคือทับทิมอัญมณีและหลามpip

จำไว้ว่าภาษาเป็นเครื่องมือและเครื่องมือทุกอย่างมีจุดประสงค์ ยิ่งคุณรู้เครื่องมือมากเท่าใดเร็วเท่าไหร่คุณก็สามารถสร้างบ้านต้นไม้ได้เร็วขึ้นง่ายขึ้นและถูกต้องมากขึ้นเท่านั้น


ฉันต้องการตอบตามบรรทัดเดียวกันหวังว่าคุณจะไม่สนใจการแก้ไข ...
Dimitrios Mistriotis

2

ฉันควรเรียนทับทิมไหม ใช่.

การเรียนรู้ภาษาใหม่นั้นมีค่าอยู่เสมอ (โดยเฉพาะอย่างยิ่งถ้ามันบังคับให้กระบวนทัศน์การเขียนโปรแกรมที่แตกต่างกับภาษาที่คุณรู้จัก) และบางครั้งสามารถทำให้คุณมีความเชี่ยวชาญมากขึ้นแม้ว่าจะเขียนโปรแกรมในภาษาอื่น ตัวอย่างเช่นฉันเลือกโปรแกรมการทำงานส่วนใหญ่ที่ฉันรู้จักจาก Lisp และฉันใช้มันเมื่อฉันต้องการ Python และ Ruby

มันจะยากไหม? หากคุณได้เรียนรู้ Python คุณก็สามารถเรียนรู้ Ruby ได้อย่างแน่นอน

นอกจากนี้ยังมีประโยชน์หากตอนนี้คุณกำลังมองหางานแสดงว่าคุณอยากรู้เกี่ยวกับเทคโนโลยีและคุณสามารถเรียนรู้สิ่งต่าง ๆ ด้วยตัวคุณเอง

มีการเปรียบเทียบที่ดีระหว่าง Ruby กับ Python c2.com

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.