Python Productivity VS Java Productivity


24

ฉันได้พบกับคำถามเกี่ยวกับแพลตฟอร์มที่ Java หรือ Python ดีที่สุดสำหรับการพัฒนาบน Google AppEngine หลายคนกำลังอวดประสิทธิภาพที่เพิ่มขึ้นจากการใช้ Python ผ่าน Java สิ่งหนึ่งที่ฉันจะพูดเกี่ยวกับอาร์กิวเมนต์การผลิต Python vs Java คือ Java มี IDE ที่ยอดเยี่ยมในการเร่งความเร็วในการพัฒนาเนื่องจาก Python ขาดในพื้นที่นี้เนื่องจากธรรมชาติที่เปลี่ยนแปลง

ดังนั้นถึงแม้ว่าฉันจะชอบใช้ Python เป็นภาษา แต่ฉันไม่เชื่อว่ามันจะช่วยเพิ่มประสิทธิภาพการทำงานได้มากเมื่อเทียบกับ Java โดยเฉพาะเมื่อใช้เฟรมเวิร์กใหม่ เห็นได้ชัดว่ามันเป็น Java vs Python และเครื่องมือแก้ไขเดียวที่คุณสามารถใช้ได้คือ VIM ดังนั้น Python จะเพิ่มประสิทธิภาพการทำงานให้คุณอย่างมาก แต่เมื่อ IDE ถูกนำเข้ามาในสมการ

ฉันคิดว่าข้อดีของ Java นั้นมักจะถูกประเมินในระดับภาษาและมักจะเกิดจากข้อสันนิษฐานที่ล้าสมัย แต่ Java มีประโยชน์มากมายภายนอกตัวภาษาเองเช่น JVM (มักถูกวิพากษ์วิจารณ์ แต่มีศักยภาพมาก), IDE และเครื่องมือที่ยอดเยี่ยม ห้องสมุดปาร์ตี้แพลตฟอร์ม ฯลฯ

คำถาม Python / ภาษาไดนามิกส์ที่เกี่ยวข้องให้ประสิทธิภาพที่เพิ่มขึ้นอย่างมากที่มักพูดถึงหรือไม่? (ด้วยการพิจารณาให้กับการใช้กรอบงานใหม่และทำงานกับแอปพลิเคชันขนาดกลางถึงขนาดใหญ่)


2
ตรวจสอบ PyCharm IDE แต่ฉันก็เชื่อว่ามีเฟรมเวิร์กใหม่สำหรับ GAE ที่แปลงโค้ด Java เป็น JavaScript เพื่อใช้ในส่วนหน้าซึ่งอาจเป็นการเพิ่มผลผลิตขนาดใหญ่
Andrew M

14
IDE หรือไม่คุณยังต้องเขียน Java 10 บรรทัดสำหรับบางสิ่งที่สามารถทำได้ (ดี) ใน Python หนึ่งบรรทัด

2
อย่าละอายใจที่คุณรัก Java คุณได้เรียนรู้เทคนิคเล็ก ๆ น้อย ๆ (IDE, ไลบรารีและกรอบ) ที่ช่วยให้คุณเตะก้น ยอมรับมัน คุณไม่จำเป็นต้องได้รับอนุญาตจากเราให้ดีเลิศ หาก Java ทำให้คุณทำงานได้อย่างเพียงพอ
Scant Roger

1
1) ที่มีศักยภาพ JVM จะถูกจำกัด มาก จงใจ มันไม่ได้ "เลวร้าย" มันเป็นแค่ดี จำกัด 2) IDEs สามารถช่วยได้หากสิ่งที่คุณทำคือการรวมส่วนประกอบที่มีอยู่หลายร้อยรายการ (ซึ่งเป็นประเภทของการเขียนโปรแกรมที่ถูกต้องและมีเกียรติ แต่ไม่ใช่องค์ประกอบเดียว) เมื่อพูดถึงการใช้อัลกอริธึมที่ซับซ้อน Python มีประสิทธิภาพมากกว่า Java (แม้กระทั่งฟังก์ชั่นแลมบ์ดาและความเข้าใจในรายการ) ก็มีความแตกต่างกันมาก
SK-logic

1
หากความสามารถในการผลิตของคุณเพิ่มขึ้นอย่างมากจาก IDE ของคุณดังนั้นโอกาสที่จะเกิดความผิดพลาดอย่างร้ายแรงกับคุณหรือแพลตฟอร์มการเขียนโปรแกรมของคุณ (Smalltalk เป็นข้อยกเว้นนี้เพราะสร้างระบบไตร่ตรองทั้งหมดสำหรับการเขียนโปรแกรม)
Marcin

คำตอบ:


18

ข้อดีอย่างหนึ่งของไพ ธ อนก็คือปรัชญา "รวมแบตเตอรี่": ห้องสมุดมาตรฐานที่กว้างขวางและใช้งานง่าย ใน Java การอ่านไฟล์ข้อความต้องใช้โค้ดหลายบรรทัดผู้อ่านที่ซ้อนกันและเช่นนั้น f.read()ในหลามมัน นี่จะเป็นการเพิ่มประสิทธิภาพอย่างมากโดยเฉพาะในการสร้างต้นแบบอย่างรวดเร็ว ภาษาไพ ธ อนก็มีความละเอียดน้อยกว่าเช่นกันซึ่งไม่ใช่เรื่องเลวร้าย (แม้ว่าฉันคิดว่าความสำคัญของการใช้คำฟุ่มเฟือยกับความรัดกุมมักเน้นมากเกินไป)

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


ฉันจริงๆต้องเรียนรู้วิธีการใช้ GAE ชุดการสอนออนไลน์ใด ๆ ที่คุณอยากจะแนะนำ? ฉันคุ้นเคยกับ Python แต่ไม่มีเบาะแสเกี่ยวกับ GAE ขอบคุณ!


4
หรือคุณสามารถเพิ่ม Apache Commons IO ด้วยบรรทัด Maven config จากนั้นอ่านไฟล์ในหนึ่งบรรทัดเช่นกัน วิธีการรวมแบตเตอรี่เป็นดาบสองคมสำหรับฉัน
jiggy

@ jiggy: ฉันเห็นด้วยกับระดับหนึ่ง; แบตเตอรี่ของไพ ธ อนนั้นมีประโยชน์และมักจะเพียงพอ แต่เห็นได้ชัดว่าห้องสมุดมาตรฐานไม่สามารถรองรับวัตถุประสงค์ที่เป็นไปได้ทั้งหมดดังนั้นคุณต้องถอยกลับไปที่ห้องสมุดในบางครั้ง
Joonas Pulakka

2
อ่านแฟ้มข้อความใน List<String> lines = Files.readAllLines(Paths.get("file.txt"), Charset.forName("UTF-8"));java: ก็ไม่เลวนะ! (นี่คือ java 7 ซึ่งยังไม่วางจำหน่ายในวันที่ 11 มีนาคม)
assylias

19

นี่คือ 2 เซ็นต์ของฉัน จากประสบการณ์ของฉัน Python ดีสำหรับโครงการขนาดเล็กถึงขนาดกลางในขณะที่โครงการขนาดใหญ่ฉันมีประสิทธิภาพมากขึ้นด้วย Java

โดยทั่วไปแล้วฉันสามารถใช้ภาษาที่พิมพ์แบบไดนามิกเช่น Python (หรือ PHP) สำหรับโครงการขนาดเล็ก: มันไม่ซับซ้อนเกินไปคุณต้องการให้มันเสร็จเร็วและไม่มีอะไรผิดพลาดมากเกินไป ในกรณีนี้ฉันพบว่า Python สามารถใช้งานได้จริง

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


6
+1 เห็นด้วยอย่างเต็มที่ ฉันชอบใช้ Python และภาษาที่คล้ายกันในโครงการขนาดเล็กที่ฉันสามารถคาดหัวได้รอบขอบเขตทั้งหมดโดยไม่มีปัญหา ปัญหามาในโครงการขนาดใหญ่ที่คุณต้องเชื่อมต่อระหว่างส่วนประกอบต่างๆ เมื่อรวมกับการรองรับการปรับโครงสร้างที่อ่อนแอทำให้ฉันมีความมั่นใจน้อยลงในการผลิตระบบที่มีขนาดใหญ่เสถียรภาพและบำรุงรักษาได้ การทดสอบจำนวนมากจะต้องเขียนและดูแลรักษาเพียงเพื่อชดเชยการขาดการวิเคราะห์แบบคงที่ที่คอมไพเลอร์ดำเนินการ เมื่อมาถึงจุดนี้ประโยชน์ของการวนซ้ำเริ่มต้นอย่างรวดเร็วจะหายไปใน mainenance
bunglestink

ฉันใช้ทั้งคู่และชอบทั้งคู่ ฉันเห็นด้วยกับคุณอย่างเต็มที่
Daniel Baktiar

11

ฉันมีประสิทธิภาพมากขึ้นในภาษาที่ทรงพลังเช่น Python หรือ Ruby ไม่สำคัญว่ารหัส Java บางตัวสามารถสร้างขึ้นโดย IDE มีโค้ดเพิ่มเติมให้อ่านและบำรุงรักษา ใช้เวลาในการลุยรหัสซ้ำและค้นหาส่วนสำคัญและใช้เวลาในการเปลี่ยนแปลงมากขึ้น ไม่เป็นไรที่ Eclipse สามารถแปลงได้

private Date dateOfBirth;

ไปที่:

private Date dateOfBirth;
public Date getDateOfBirth() { return dateOfDeath; }
public setDateOfBirth(Date d) { dateOfBirth = d; }

แต่ทุกครั้งที่ฉันเปิดชั้นเรียนฉันจะเห็นขยะนั้นและต้องอ่านผ่านมันเพื่อหาส่วนที่น่าสนใจ นอกจากนี้ในระหว่างการบำรุงรักษาข้อผิดพลาดสามารถนำมาใช้ในการสร้างรหัส

ฉันอยากจะดู:

attr :date_of_birth

สำหรับฉันความต้องการ IDE ในการทำงานอย่างมีประสิทธิภาพกับ Java เป็นเหตุผลที่ดีในการเลือกภาษาอื่น

บางทีมีพลังมากกว่านี้เปรียบเทียบรหัส Ruby นี้:

avg = people.filter { |p| p.height > 200 }.collect(:weight).average

เทียบกับรหัส Java ที่คล้ายกัน:

List<Double> weights = new ArrayList<Double>();
for (Person p: people) {
  if (p.getHeight() > 200) {
    weights.add(p.getWeight());
  }
}
return Stats.average(weights);

รหัสทับทิมเป็นการแปลโดยตรงของข้อกำหนด: น้ำหนักเฉลี่ยของคนที่สูงกว่า 200 (ซม.) ความคิดเห็นจะซ้ำซ้อนอย่างเต็มที่

รหัส Java ต้องการงานจำนวนมากทั้งการเขียนและการอ่าน

Paul Graham สร้างข้อโต้แย้งที่น่าเชื่อถือในเรื่องภาษาโปรแกรมในบทความนี้ หลังจากทำคณิตศาสตร์ระดับบัณฑิตศึกษามาแล้วฉันพบว่าข้อโต้แย้งของเขาน่าสนใจและข้อโต้แย้งต่อความกระชับสั้น ๆ แน่นอนว่าบรรทัดเดียวในภาษาระดับสูงอาจยากต่อการเข้าใจมากกว่าบรรทัดเดียวในภาษาระดับต่ำเช่นเดียวกับสมการเชิงอนุพันธ์ย่อยบางส่วนยากที่จะเข้าใจได้ง่ายกว่าการเพิ่มแบบง่าย แต่บรรทัดเดียวในภาษาที่ทรงพลังนั้นง่ายต่อการเข้าใจมากกว่าห้าหรือสิบบรรทัดที่มันมาแทนที่ ลองนึกภาพการอ่านข้อความคณิตศาสตร์ที่เขียนโดยใช้คำแทนที่จะเป็นสัญลักษณ์


ฉันไม่ได้ใช้ Python แต่ได้ใช้ C # ซึ่งมีคุณสมบัติอัตโนมัติ Python ใช้วิธีการทำงานมากแค่ไหนในการเพิ่มตรรกะลงไปในนั้น (กล่าวว่าการยิงเหตุการณ์หรือตรรกะการตรวจสอบ)
mlk

@mlk - คำสั่ง "attr" มาจาก Ruby ใน Ruby มันง่ายมากที่จะแนบพฤติกรรมเมื่อตั้งค่าคุณสมบัติ
kevin cline

ในไพ ธ อนแอตทริบิวต์คลาสทั้งหมดจะถูกเปิดเผยโดยอัตโนมัติดังนั้นส่วนใหญ่คุณจะเข้าถึงได้โดยตรง
Zhehao Mao

3
Python ไม่ต้องการ getters หรือ setters - เพียงทำให้เป็นdateOfBirthสาธารณะ หากจำเป็นต้องเพิ่มตรรกะในภายหลังในการรับหรือการตั้งค่าให้เพิ่ม_dateOfBirthเพื่อเก็บข้อมูลจากนั้นสร้างวิธีการpropertyตั้งชื่อที่dateOfBirthมีทั้งวิธีรับและตั้งค่า รหัสการโทรไม่จำเป็นต้องเปลี่ยนเลยใน Python Java ใช้ตัวเข้าถึงเนื่องจากไม่มีแนวคิดของ "คุณสมบัติ"
Izkata

1
ด้วย Java 8 และสตรีมรหัสน้ำหนักเฉลี่ยของคุณสามารถเขียนได้เช่นนี้:people.stream().filter(p -> p.getHeight() > 200).mapToDouble(Person::getWeight).average().orElse(0);
vitro

7

ฉันย้ายจาก Java เป็น Python เมื่อไม่กี่ปีที่ผ่านมาและโดยส่วนตัวรู้สึกว่าฉันมีประสิทธิผลมากกว่า @Joonas ชี้ให้เห็นว่าผลผลิตจำนวนมากมาจากห้องสมุดที่บรรจุ แต่บางส่วนมาจากภาษาของตัวเอง ฉันนึกภาพไม่ออกว่าไม่ได้มีพจนานุกรมรายการที่เข้าใจฟังก์ชั่นการสั่งซื้อที่สูงขึ้นและเชลล์

โปรดทราบว่าหากคุณรู้จัก Java แล้วจะต้องใช้เวลาสักครู่ในการใช้ภาษา Python


7

นี่เป็นคำถามเก่า ๆ แต่ฉันต้องการเพิ่ม $ .03 ของฉัน ฉันคิดว่ามันขึ้นอยู่กับวิธีที่คุณคิดเช่นกัน ฉันคนเดียวไม่สามารถยืนได้ภาษาที่มีการแปลและถูกต้อง ในทางกลับกันฉันเป็นแฟนตัวยงของภาษาที่พิมพ์แบบคงที่ แน่นอนว่าการใช้ Java สามารถพูดได้มากกว่า แต่ฉันคิดว่าการอ่านและการบำรุงรักษาทำได้ง่ายขึ้นเมื่อพูดและทำเสร็จแล้ว ฉันพบว่า Python, Ruby และ Perl เป็นเรื่องยากมากที่จะอ่าน (สำหรับฉัน) ฉันไม่สามารถห่อหัวของฉันไปรอบ ๆ มันได้แม้ว่าฉันจะพยายามแล้วก็ตาม ที่กล่าวว่าฉันสามารถเขียนรหัสใน Scala ได้ดีและมันก็ไม่ใช่เรื่องใหญ่ ฉันคิดว่ามันขึ้นอยู่กับสิ่งที่คุณพอใจ ในตอนท้ายของวัน Java จะมีประสิทธิภาพมากขึ้น มากกว่า Ruby, Python หรือ Perl JVM เป็นเทคโนโลยีที่น่าสนใจและการเรียนรู้ที่จะควบคุมพลังของมันสามารถพิสูจน์ได้ว่ามีประโยชน์มากสำหรับคุณ


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

2
จะสิ้นวันนั้นจะมาถึงเมื่อไหร่ เรารอประมาณ 20 ปีแล้วและ Java ยังไม่มีฟังก์ชั่นชั้นหนึ่งหรือระบบการเขียนโปรแกรมเมตาดาต้าใด ๆ ในระหว่างนี้ C # ได้ก้าวหน้าอย่างมาก ปีที่ผ่านมาฉันเริ่มเขียนโค้ด Groovy แทน Java และประสิทธิภาพของฉันเพิ่มขึ้นอย่างมาก รหัส Groovy เล็กกว่าและเข้าใจง่ายกว่าโค้ด Java ที่เกี่ยวข้องเนื่องจากเสียงดังหายไป
kevin cline

@ Kevin Cline - ฉันรู้ว่าคุณกำลังพูดอะไร - ฉันเป็นนักพัฒนา. NET มานานหกปีหรือมากกว่านั้น ฉันไม่ได้พูดถึงเพียงแค่การเพิ่มประสิทธิภาพ แต่ยังรวบรวมเวลาการทำงานพร้อมกันและสิ่งที่ประเภทมัลติคอร์ Java และ JVM (Groovy, Scala และอื่น ๆ ) JVM เป็นสิ่งที่สำคัญที่สุดที่นี่ไม่จำเป็นต้องมีจาวาเอง
Nodey The Node Guy

2
@ programmx10 การบำรุงรักษาโค้ด Python ของคุณนั้นขึ้นอยู่กับว่าคุณเขียนมันอย่างไร หากคุณสร้างมันขึ้นมาทั้งหมดแล้วคุณจะไม่สามารถแก้ไขข้อบกพร่องได้ หากในทางตรงกันข้ามคุณได้จัดระเบียบโค้ดของคุณให้ดีและแยกการทำงานของคุณออกเป็นโมดูลและคลาสแล้วมันจะง่ายต่อการบำรุงรักษา (ถ้าไม่ง่าย) กว่าโค้ด Java
Zhehao Mao

5

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

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


แอปพลิเคชันที่ยอดเยี่ยมของคำนี้feedback loop
amphibient

3

ฉันได้ทำหลามมากขึ้นเมื่อเร็ว ๆ นี้และเคยเป็นโปรแกรมเมอร์ Java มานานและสำหรับการพัฒนาใหม่ฉันคิดว่าฉันมีประสิทธิภาพมากขึ้นในงูหลาม สิ่งที่ค่อนข้างง่ายใน java อาจเป็นเรื่องน่าเบื่อเล็กน้อยเช่นการประมวลผลไฟล์ / สตรีมการอ่านเนื้อหาจาก URL, ซีเรียลไลซ์ XML และอื่น ๆ โดย "น่าเบื่อ" ฉันหมายถึงสิ่งที่คุณใช้รหัส 5 บรรทัดใน java มักจะดูเหมือน ใช้หนึ่งเดียวในหลาม อย่างไรก็ตามการใช้เครื่องมือที่เหมาะสมเช่นฝรั่งหรือ API คอลเลกชันอื่นสามารถช่วยได้จริงๆ

ฉันเดาว่าฉันกำลังบอกว่าข้อดีอย่างหนึ่งของ python คือมันมาพร้อมกับคุณสมบัติมากมายที่คุณต้องใช้ไลบรารีของบุคคลที่สามใน java เพื่อรับ

ทุกอย่างที่กล่าวว่าสำหรับบางสิ่งฉันจะมีประสิทธิผลในจาวามากกว่าที่ฉันจะเป็นงูหลามโดยเฉพาะอย่างยิ่งเมื่อต้องมีการปรับโครงสร้างและการทำงานกับโค้ดเบสขนาดใหญ่ ฯลฯ


1
Java เป็นเรื่องเกี่ยวกับห้องสมุด แต่ด้วย Python พวกเขามีวิธีการหลายอย่างเช่น PHP ที่จะจำได้ยากทั้งหมดด้วย Java คุณเพียงแค่ค้นหาไลบรารีที่เหมาะสมและอย่างน้อยคุณก็มีทางเลือกเช่น กับสิ่งที่คุณใช้
programmx10

1
@ programmx10 คุณกำลังพูดถึงเรื่องอะไร? Python มีห้องสมุดมากมายสำหรับทุกสิ่ง เพียงดูเอกสารประกอบของไลบรารีมาตรฐาน ไลบรารี Python จะถูกแยกออกเป็นโมดูลเช่นเดียวกับไลบรารี Java ที่ถูกแยกออกเป็นแพ็กเกจ
Zhehao Mao
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.