Java vs. C # - เปอร์สเปคทีฟการทำงาน [ปิด]


34

หากคุณมีประสบการณ์หลายปีในการทำงานกับ Java และประสบการณ์หลายปีในการทำงานกับ C # และ. NET ฉันจะให้ความคิดเห็นของคุณเกี่ยวกับความแตกต่างของประสิทธิภาพการพัฒนาซอฟต์แวร์ระหว่างสองสภาพแวดล้อมนี้ ลูกค้าคนหนึ่งของเรากำลังพิจารณาที่จะเปลี่ยนโซลูชันซอฟต์แวร์ที่มีอยู่ ในฐานะที่เป็นทดแทนจะต้องมีประมาณ 10 - 15 ปีคนทำงานตัวเลือกสำหรับ Java หรือ. NET บนพื้นฐานของความแตกต่างของการผลิตระหว่างพวกเขาอาจมีอิทธิพลต่อการลงทุนที่จำเป็นและเวลาในการตลาดอย่างมีนัยสำคัญ

คุณจะสามารถให้เราเป็นตัวบ่งชี้ถึงความแตกต่างของประสิทธิภาพการพัฒนาซอฟต์แวร์ระหว่าง Java และ C # /. NET หรือไม่ ฉันต้องการรับคำตอบดังนี้:

ประสบการณ์ของฉันขึ้นอยู่กับประสบการณ์ X ปีที่ทำงานกับ Java และประสบการณ์ X ปีที่ทำงานกับ C # /. NET Java มีประสิทธิภาพเพิ่มขึ้น X% แล้ว C # .NET หรือ C # /. NET คือ X ที่มีประสิทธิผลมากกว่า Java X ถ้าคุณคำนึงถึงสิ่งต่อไปนี้


24
ฉันคิดว่าสิ่งสำคัญที่นี่ก็คือสิ่งที่คุณกำลังทำ .NET อาจดีกว่าสำหรับโครงการบางประเภทและ Java สำหรับโครงการอื่น ๆ
Øyvind Knobloch-Bråthen

4
มันเป็นโครงการแบบไหน? มากขึ้นอยู่กับไลบรารีที่พร้อมใช้งานสำหรับสิ่งที่คุณพยายามจะทำ ภาษาฉลาดฉันชอบ C # มาก แต่ฉันไม่ได้อ้างว่า. net ดีกว่า java สำหรับโครงการทุกประเภท
CodesInChaos

7
IMO มีการตัดสินใจเชิงกลยุทธ์ที่สำคัญมากและไม่ควรขึ้นอยู่กับผลผลิตของโปรแกรมเมอร์เลย หากคุณต้องการ Windows GUI ที่ล้ำสมัยอย่างสมบูรณ์แบบคุณไม่สามารถเลือก Java ได้แม้ว่าสถิติจะอ้างว่ามีประสิทธิภาพมากกว่า 7% หากคุณต้องการผลิตภัณฑ์ cross-plattform ที่แท้จริงโดยไม่มีข้อ จำกัด Mono มาพร้อมกับ Java เป็นลูกของคุณแม้ว่า C # จะมีไวยากรณ์ที่ดีกว่า
281377

2
@Edin: "แอปพลิเคชันระดับองค์กร" ไม่ได้อธิบายอย่างชัดเจนว่าเป็นแอปพลิเคชันประเภทใด ... มันเป็นเดสก์ท็อปเท่านั้น, การกำหนดค่าไคลเอนต์ / เซิร์ฟเวอร์, บริการเว็บ, เว็บไซต์, แอปพลิเคชั่นดาวเทียมที่เป็นไปได้
ความกลัว

3
มันเป็น "Java" ไม่ใช่ "JAVA"
Mahmoud Hossam

คำตอบ:


17

ประสบการณ์ของฉันขึ้นอยู่กับประสบการณ์ 10 ปีในการทำงานกับ Java และประสบการณ์ 3 ปีในการทำงานกับ C # /. NET Java มีประสิทธิภาพมากกว่า 0% มากกว่า C # .NET สิ่งนี้มีพื้นฐานมาจากการเขียนแอพพลิเคชั่นที่รองรับบริการ
C # /. NET อาจมีประสิทธิภาพมากกว่า Java 5% สำหรับการเขียนแอปพลิเคชันผู้ใช้ แต่ฉันไม่ได้ทำสิ่งนี้เป็นเวลาเกือบ 5 ปีใน Java และตัวแก้ไข Netbeans UI ใหม่อาจปิดช่องว่างได้

คุณต้องการเพิ่มผลผลิตหรือไม่ CI (การส่งมอบต่อเนื่องที่ดีเลิศ) และการทดสอบอัตโนมัติ ประสิทธิภาพที่ได้รับจากตัวเลือกภาษา / แพลตฟอร์ม / IDE สำหรับภาษา / แพลตฟอร์ม / IDE หลัก ๆ นั้นมีขนาดค่อนข้างเล็ก


คุณหมายถึงพูด 0% สำหรับ Java หรือไม่ คุณหมายถึงประสิทธิผลเพิ่มขึ้น 0% สำหรับแอพพลิเคชั่นที่รองรับบริการด้านหลังหรือโดยรวมของ Java เพียงตรวจสอบ
Jon Onstott

หากคุณต้องขอให้ฉันเขียนแอปพลิเคชั่นเอนด์เอนด์ (กฎบางอย่างการเข้าถึงฐานข้อมูลและสิ่งที่มีอยู่) การประมาณการจะเหมือนกันสำหรับทั้ง C # และ Java หากคุณถามถึงแอปพลิเคชันผู้ใช้ windows ฉันจะทำให้การประเมินของฉันมีขนาดใหญ่กว่า Java มากกว่า C # (WPF / XAML และการสนับสนุน MVVM ผ่านการเชื่อมโยงเล็กน้อยฉันคิดว่าการทำงานมีประสิทธิภาพมากกว่าการผูกด้วยมือและ UI ใน Java 5 ปีที่แล้ว))
mlk

+1 สำหรับ "ประสิทธิภาพที่ได้รับจากตัวเลือกภาษา / แพลตฟอร์ม / IDE สำหรับภาษา / แพลตฟอร์ม / IDE หลัก ๆ นั้นมีขนาดค่อนข้างเล็ก"
Adam Jaskiewicz

3
-1 สำหรับประโยคสุดท้าย สำหรับชั้นเรียนที่มีปัญหา (ในโลกแห่งความเป็นจริง) คุณสามารถเลือกภาษาระดับสูงสำหรับวัตถุประสงค์ทั่วไปสองภาษาซึ่งการเพิ่มประสิทธิภาพจากหนึ่งไปอีกภาษาหนึ่งเกินกว่า 100% หากคุณเลือกระหว่าง C # และ Java คุณจะพบความแตกต่างเล็กน้อย (แม้ว่าฉันจะยืนยันว่า C # จะพิสูจน์ประสิทธิผลในพื้นที่ที่เหมาะสมสำหรับการเขียนโปรแกรมการทำงาน) หากตัวเลือกอยู่ระหว่าง C และ OCaml ความแตกต่างจะทำให้คุณอิจฉา
back2dos

42

ฉันทำงานในโครงการทั้งในวิทยาลัยและในโลกแห่งความเป็นจริงโดยใช้ Java และ C # เป็นเวลา 5 ปีแล้ว

ลงมือฉันสนุกกับการใช้ C # มากขึ้นเพราะมันกระชับและการใช้น้ำตาลซินแท็กซ์ คุณจะไม่ค่อยพบFactory.GetFactory(OfFactory.GetFactory(Factory));รหัสใน C # ง่ายต่อการอ่านและติดตามเนื่องจากไวยากรณ์มีขนาดเล็กลงและกระชับยิ่งขึ้น

คุณจะทำสิ่งใดได้ผลมากขึ้นด้วย? ขึ้นอยู่กับประเภทของโครงการ

คุณกำลังออกแบบแอปพลิเคชันเดสก์ท็อปสำหรับ Windows อยู่หรือไม่? ดังนั้น C # จึงเป็นตัวเลือกที่ดีที่สุดเพราะมันมีประสิทธิภาพ IDE Visual Studio และ. NET Framework ทำให้การสร้าง GUI นั้นง่ายมาก

ตรงไปตรงมาฉันดีใจที่ฉันไม่ได้ใช้ Java อีกต่อไป (เป็นเวลากว่าหนึ่งปีแล้ว) เพราะฉันจำได้ว่ารหัสที่ได้รับนั้นน่ากลัวเพียงใด ตัวอย่างรวดเร็วคือการจัดการข้อยกเว้น หากรหัสของคุณสามารถโยนข้อยกเว้นคุณต้องบัญชีสำหรับทุกข้อยกเว้นที่เป็นไปได้ สิ่งนี้จะเปลี่ยนรหัสเล็ก ๆ น้อย ๆ อย่างรวดเร็วเป็น 20 บรรทัด + ความน่ากลัว

C # ไม่ใช่การจับมือกันหากคุณเลือกที่จะปล่อยให้รหัสของคุณเปิดอยู่ซึ่งเป็นเรื่องของคุณในฐานะนักพัฒนาที่จะตัดสินใจ

C # ยังมีการเพิ่มจำนวนมากในช่วงปีที่ทำให้มันมีความสุขที่จะใช้ Lambdas, ผู้ได้รับมอบหมาย, ฟังก์ชั่นนิรนาม (a la Ruby), ของเล็ก ๆ น้อย ๆ ที่ดีมากมายที่คุณจะได้พบเมื่อคุณไปด้วยกัน


3
ฉันจำได้ว่าใน Java จาก uni จุดฉันดีใจที่ลืม การจัดการข้อยกเว้นบังคับ ใช่มันมีจุดประสงค์ แต่เอกสารโค้ดสามารถบอกคุณได้ว่าวิธีการใดมีข้อยกเว้นหรือไม่และมันให้คุณเลือกว่าจะทำอย่างไร
JonWillis

5
ฮ่าฮ่าฉันเป็นโปรแกรมเมอร์ Java แต่ฉันชอบโค้ดตัวอย่างของคุณ
Chuck Stephanski

6
If your code can throw an exception you must account for every single exception possible.ฉันไม่เห็นข้อเสียของเรื่องนี้อย่างน้อยก็ทำให้ฉันตระหนักถึงปัญหา ... แต่อาจเป็นฉันก็ได้
Bobby

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

ฉันคิดว่ามันเป็นเพียงความขัดแย้งในสิ่งที่ยกเว้นหมายถึง - พวกเขาสามารถคาดการณ์สถานการณ์ (ไฟล์ไม่มีอยู่) หรือข้อผิดพลาดที่ไม่คาดคิด (หารด้วย 0) Java ตัดสินใจว่าข้อยกเว้นควรเป็นตัวแทนของทั้งคู่และดังนั้นจึงมีทั้งข้อยกเว้นที่ถูกตรวจสอบและไม่ถูกตรวจสอบ นี่เป็นคุณลักษณะที่ขัดแย้งอย่างน่าประหลาดใจ
Tikhon Jelvis

23

ฉันได้ทำงานอย่างกว้างขวางกับทั้ง Java (ตั้งแต่ปี 1996) และสุทธิ (ตั้งแต่ปี 2002) และในปี 2010 ทำให้การตัดสินใจที่จะไปกับ Javaใน บริษัท ของฉันบนพื้นฐานที่ว่ามันจะเป็นสภาพแวดล้อมที่มีประสิทธิภาพมากที่สุดโดยรวม

โปรดทราบว่าฉันกำหนดผลิตผลการพัฒนาซอฟต์แวร์ในแง่ของมูลค่าทางธุรกิจที่สร้างขึ้นต่อหน่วยของต้นทุน / ทรัพยากรบนพื้นฐานแบบครบวงจร (เช่นคุณต้องดูประสิทธิภาพการผลิตของวงจรชีวิตซอฟต์แวร์ทั้งหมดรวมถึงการปรับใช้และการบำรุงรักษา การเข้ารหัสเริ่มต้น !!)

นี่คือองค์ประกอบสำคัญของการให้เหตุผลของฉัน:

  • วากยสัมพันธ์เป็นปัจจัยรองในการผลิต - ในขณะที่ Java เป็น verbose แน่นอนและฉันชอบไวยากรณ์ของ C # มันก็ไม่สำคัญ ไม่ว่านักพัฒนาของคุณจะพิมพ์หรือobject.getSomeProperty()เทียบกับการobject.SomePropertyใช้ชั้นในแบบไม่ระบุชื่อกับแลมบ์ดานั้นจะไม่สร้างความแตกต่างที่เห็นได้ชัดสำหรับความได้เปรียบในการแข่งขันของ บริษัท ของคุณ ....
  • ระบบนิเวศของห้องสมุดมีความสำคัญ - การพัฒนาผลิตภัณฑ์ซอฟต์แวร์ที่ทันสมัยคุณไม่ต้องการพัฒนาส่วนประกอบทั่วไปจำนวนมากตั้งแต่เริ่มต้น ระบบนิเวศ Java มีข้อได้เปรียบที่ชัดเจนในแง่ของจำนวนและคุณภาพของไลบรารีโอเพนซอร์ส (โดยเฉพาะอย่างยิ่งที่พัฒนาโดย Apache, Google, Eclipse Foundation และ RedHat / JBoss)
  • ความยืดหยุ่นในการพกพา / การใช้งาน - ฉันรู้ว่าฉันสามารถปรับใช้ JVM บนแพลตฟอร์มใดก็ได้รวมถึงคลัสเตอร์ Linux ราคาถูกขนาดใหญ่ ด้วย. Net คุณจะถูก จำกัด ในสภาพแวดล้อม Windows ด้วยความก้าวหน้าของตัวเลือกโฮสติ้งคลาวด์ฉันคิดว่านี่เป็นข้อได้เปรียบที่สำคัญทีเดียว
  • Scala และ Clojureเป็นทั้งตัวเลือกที่ทำงานได้สำหรับการพัฒนาบน JVM หากคุณต้องการคุณสมบัติด้านภาษาขั้นสูง มันเป็นตัวเลือกที่เหมือนจริงในการพัฒนาใน Java แต่เปิดตัวเลือกเพื่อย้ายไปยัง Scala หรือ Clojure เมื่อเวลาผ่านไป ในระดับหนึ่งภาษาเหล่านี้เป็น "รุ่นต่อไป" ที่ฉันคิดว่าเป็นทั้ง Java และ C # ดังนั้นสิ่งนี้ทำให้ฉันมั่นใจว่าแพลตฟอร์ม Java มีอนาคตที่ดีในแง่ของนวัตกรรมทางภาษา (Java 7 และ 8 ดูมีแนวโน้ม แต่ฉันไม่กลั้นลมหายใจ ... )
  • ต้นทุนการบำรุงรักษาดูเหมือนจะค่อนข้างดีต่อ Java Java มีไวยากรณ์ที่ง่ายกว่า C # ซึ่งหมายถึงการใช้คำฟุ่มเฟื่อยมากกว่า แต่ใน flipside หมายความว่าผู้คนมักจะเขียนโค้ดที่รักษาได้มากขึ้น - มันยากกว่าที่จะเขียน "รหัสที่ฉลาด" นอกจากนี้โลกของ Java ยังให้น้ำหนักที่มากขึ้นในการใช้งานร่วมกันได้มากกว่าโลกของ. Net ซึ่งจะเป็นข้อได้เปรียบด้านต้นทุนการบำรุงรักษาในระยะเวลาหลายปี
  • ความเป็นอิสระของผู้ขาย - ในอดีตที่ผ่านมา บริษัท ต่าง ๆ ถูก บริษัท ล็อกออนเข้ามาฉันรู้สึกว่ามันเป็นข้อได้เปรียบที่จะได้รับประโยชน์จากระบบนิเวศ Java ที่เปิดกว้างมากกว่าในโลกของ. Net ตัวอย่างเช่นฉันต้องการมีตัวเลือกฐานข้อมูลมากกว่าที่จะถูกผลักเข้าใช้ SQL Server (และการพุชค่อนข้างแข็งแกร่งทั้งการสนับสนุนเครื่องมือและชุดทักษะทั่วไปของนักพัฒนา. Net) การรักษาผู้จำหน่ายการลงทุนผลิตภัณฑ์หลักของคุณให้เป็นอิสระคือในมุมมองของฉันการเคลื่อนไหวระยะยาวที่ชาญฉลาด ฉันตัดสิน (อย่างถูกต้องตามที่ปรากฎ) ว่า OpenJDK จะเป็นอนาคตของ Java ดังนั้นฉันจะสร้างแพลตฟอร์มโอเพ่นซอร์สอย่างมีประสิทธิภาพ
  • Talent - แน่นอนว่าเป็นเรื่องส่วนตัว แต่ฉันประทับใจในความสามารถด้านเทคนิคของนักพัฒนาซอฟต์แวร์ในโลก Java มากกว่าในโลก. Net ความประทับใจของฉันโดยเฉลี่ยคือนักพัฒนา. Net มีแนวโน้มที่จะทำสิ่งที่ Microsoft ให้เครื่องมือหรือแม่แบบที่ง่ายสำหรับในขณะที่นักพัฒนา Java มักจะสนใจเพิ่มเติมเกี่ยวกับการค้นหาโซลูชันที่เหมาะสมจากมุมมองของวิศวกรรมซอฟต์แวร์ นี่เป็นอัตวิสัยอย่างสมบูรณ์และไม่ต้องสงสัยเลยว่าขึ้นอยู่กับพื้นที่ / ตลาดเฉพาะและมีบุคคลจำนวนมากที่ไม่เหมาะสมกับรูปแบบนี้ดังนั้นแน่นอนว่า YMMV
  • เครื่องมือเกี่ยวกับระดับ Microsoft มีเครื่องมือที่ยอดเยี่ยมและใช้งานง่ายจำนวนมากที่น่าดึงดูดเป็นพิเศษสำหรับการพัฒนาบน Windows อย่างไรก็ตามฉันทำงานเป็นหลักในการพัฒนาฝั่งเซิร์ฟเวอร์ที่ฉันโต้เถียงเครื่องมือ Java มีขอบ โดยเฉพาะอย่างยิ่ง Maven ได้พิสูจน์แล้วว่าเป็นเครื่องมือที่ทรงพลังอย่างยิ่งในระบบนิเวศ Java ซึ่งฉันยังไม่คิดว่ามีเทียบเท่าที่เหมาะสมในโลก. Net

ดังนั้นในขณะที่มีการพิจารณาที่ซับซ้อนจำนวนมากโดยรวมแล้วฉันค่อนข้างมีความสุขกับการเลือกใช้ Java และจะเป็นตัวเลือกเดียวกันในวันนี้ (ตั้งแต่ต้นปี 2012)

อาจเป็นกรณีเดียวตอนนี้ที่ฉันจะไปกับ. Net จะเป็นถ้าฉันได้พัฒนาแอปพลิเคชันบนเดสก์ท็อปที่ใช้ Windows เท่านั้น (ซึ่งประโยชน์ที่ได้รับ


9
+1: คำตอบยอดเยี่ยม! มันสรุปประเด็นต่าง ๆ ที่ควรพิจารณาเมื่อประเมินผลการผลิตโดยรวม น้ำตาลซินแทคติคบางอย่างอาจทำให้ภาษาดูเท่ห์และ "ทันสมัย" มากกว่านี้ แต่ก็มีปัจจัยสำคัญอื่น ๆ ที่ส่งผลต่อผลผลิต
Giorgio

3
+1 สำหรับคำตอบที่ครอบคลุมมากกว่าคำตอบก่อนหน้า
NlightNFotis

1
ตั้งแต่ที่คุณกล่าวถึง Scala และ Clojure คุณอาจรวมทั้งพูดถึง F # เกินไป ...
เมาริซิโอ Scheffer

2
ที่ดี! การวิเคราะห์อย่างละเอียด สิ่งที่ฉันกำลังมองหา :)
xebo

9

ฉันมี: Java 10 ปี, C # 8 ปี

ฉันลงคะแนน Java สำหรับ

  1. ไม่มีการล็อคผู้ขาย (คุณสามารถเปลี่ยนแอพ / เว็บเซิร์ฟเวอร์จาก linux เป็น windows เป็น Unix)
  2. การทำงานร่วมกัน / เปลี่ยนได้ของแพ็คเกจบุคคลที่สามเช่น JasperReports JFreeChart, JSF หรือ Spring
  3. นวัตกรรมส่วนใหญ่มาจากที่นี่ (Log4j, Ant, Spring, Hibernate และอื่น ๆ )
  4. ทำงานบนเซิร์ฟเวอร์แอปพลิเคชั่นหลายตัว (เช่น A) เช่น JBoss, Tomcat, WebSphere, GlassFish, WebLogic

23
"นวัตกรรม" ประเภทใดบ้างที่สามารถใช้ภาษาที่ไม่มีลูกแกะได้
SK-logic

6
มีกรอบ MVC อื่น ๆ ก่อนที่จะ ASP MVC (เช่น Monorail) ...
EricSchaefer

2
โอ้ BTW: Lambdas / Closures เป็นคุณสมบัติภาษาคุณกำลังพูดถึงกรอบ
EricSchaefer

5
@ SK-logic คุณไม่ต้องการให้ lambdas เขียนเลเยอร์ O / R

2
@Giorgio, lambdas ลงตัวกับภาษาทุกภาษาด้วย GC ไม่มีที่สำหรับพวกเขาใน C ++ และ C แน่นอน
SK-logic

6

Java: 5 ปี (ไม่ต่อเนื่อง)
C #: 7 ปี

ฉันไม่เชื่อว่าคุณสามารถวัดผลการผลิตเป็นอย่างนั้นได้ นั่นขึ้นอยู่กับนักพัฒนาและโครงการเป็นสำคัญ ใช้สิ่งที่นักพัฒนาของคุณรู้

แก้ไข:
ให้นิยาม "แอปพลิเคชันองค์กรทั่วไป" เป็น:

  • หลายฉัตร
  • ลูกค้า / เซิร์ฟเวอร์
  • สำรองฐานข้อมูลแล้ว

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


3
"นั่นขึ้นอยู่กับนักพัฒนาแต่ละคน" ... ซึ่งเป็นเหตุผลว่าทำไมเขาถึงต้องการความเห็นจากคนที่มีประสบการณ์ในทั้งสองโลก ... "และโครงการ" ... ซึ่งควรต้องมีคำตอบที่ชี้ให้เห็นว่าโครงการประเภทใดที่จะได้ประโยชน์จากเทคโนโลยีที่แตกต่างกัน
ความกลัว

4
มันไม่ได้ขึ้นอยู่กับ dev นี้ (aka ฉัน) แต่ขึ้นอยู่กับ devs ที่ควรจะสร้างโครงการ นอกจากนี้ยังจะง่ายขึ้นถ้าเขาได้กล่าวว่าสิ่งที่ชนิดของโครงการที่เขากำลังจะสร้าง ...
EricSchaefer

@eric มันเป็นแอพพลิเคชั่นสำหรับองค์กรทั่วไป
Edin Dazdarevic

@Edin, Java มีรุ่น JavaEE ที่มีคุณสมบัติขององค์กร inbuilt คุณสามารถพัฒนาแอปพลิเคชันได้อย่างรวดเร็วด้วยเฟรมเวิร์กนี้ อย่างไรก็ตามมันทำอะไรได้มากมายด้วยเวทมนตร์คุณต้องปฏิบัติตามกฎของมัน และหากสิ่งต่างๆเกิดขึ้นอย่าคาดหวังว่าข้อความยกเว้นจะมีประโยชน์เนื่องจากสแต็คเทรตมีขนาดใหญ่มาก การเข้าถึงฐานข้อมูลด้วยชื่อที่ไม่ถูกต้องหรือปิดฐานข้อมูลสแต็คเทรตมีขนาดใหญ่มากจนคุณไม่สามารถเห็นสาเหตุของปัญหาเริ่มต้นได้
JonWillis

5
ตรวจสอบว่ามี "แอปพลิเคชันองค์กรทั่วไป" นำข้อมูลนี้จากจุด a อนุญาตให้ผู้ใช้ทำข้อมูลให้ยุ่งแล้วจึงใส่ในจุด b ;)
mezmo

6

ฉันมีประสบการณ์ 10 ปีกับ Java (ตั้งแต่รุ่น 1.1 จริง ๆ !) และประสบการณ์ 7 ปีกับ. NET (C # ส่วนใหญ่)

คุณมีการตัดสินใจที่จะทำ แต่ส่วนใหญ่คุณควรพยายามแบ่งออกเป็นสองสถานการณ์:

แอปพลิเคชันเดสก์ท็อป

หากคุณกำลังพัฒนาแอพพลิเคชั่นเดสก์ท็อปคุณจะต้องไปกับแพลตฟอร์มหลักที่คุณจะใช้งาน หากเป็นแพลตฟอร์ม Microsoft ใช้. NET ไม่มีวิธีแก้ปัญหาที่ดีไปกว่าแพลตฟอร์มที่พัฒนาโดยแม่จัดส่งเอง หากเป็นสถานการณ์ Linux หรือ Multi-platform ให้พิจารณา Java หรือย้ายไปใช้โซลูชันบนเว็บ

แอพพลิเคชั่นบนเว็บ

นี่เป็นการตัดสินใจที่ยากมากเพราะแต่ละคนมีจุดแข็งและจุดอ่อนของตัวเอง นี่คือบางส่วน:

C #

จุดแข็ง:ปัจจุบันมีโมเมนตัมมากขึ้นในการสร้างคุณสมบัติใหม่ ๆ ในภาษาและแพลตฟอร์ม / กรอบงาน ทุกอย่างมาจากผู้ขายรายเดียวและนี่เป็นข้อได้เปรียบอย่างแน่นอน นอกจากนี้คุณยังสามารถใช้ส่วนประกอบที่ทรงพลังบางอย่างเช่น DevExpress (Java ไม่ใกล้เคียงกับสิ่งที่ทีม DX ได้รวบรวมไว้ในช่วงหลายปีที่ผ่านมา

จุดอ่อน:สำหรับแอปพลิเคชันองค์กร. NET ไม่ได้พัฒนาเต็มที่เท่ากับ Java คุณไม่มีผู้ค้าจำนวนมากที่สร้างซอฟต์แวร์องค์กรใน. NET เช่นเดียวกับที่คุณมีสำหรับ Java

ชวา

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

จุดอ่อน: Oracle เป็นเจ้าของ Java (ฉันรู้ไม่ใช่ JCP) และนั่นเป็นความเสี่ยงที่ต้องพิจารณา ความตั้งใจของพวกเขายังไม่ชัดเจนและโดยส่วนตัวแล้วฉันไม่ชอบภาษาที่กำลังดำเนินอยู่ในขณะนี้ (ฉันรู้ว่านักพัฒนา Java จำนวนมากมีความกังวลคล้ายกัน)

แอปพลิเคชันฝั่งเซิร์ฟเวอร์

โดยพื้นฐานแล้วมันมีข้อโต้แย้งแบบเดียวกับ Web Based Applications แต่เนื่องจากคุณไม่ต้องกังวลเกี่ยวกับ UI Java มากขึ้นในกรณีนี้ แต่อีกครั้งหากแพลตฟอร์มส่วนใหญ่เป็น Windows .NET อาจเป็นตัวเลือกที่ดีกว่า

ข้อควรพิจารณาโดยรวม

โดยรวมแล้วในความคิดของฉัน. NET มีข้อได้เปรียบส่วนใหญ่เป็นเพราะการรวมกันอย่างแน่นหนาของ Visual Studio 2010 (ส่งลง IDE ที่ดีที่สุดออกมา) MS SQL, Entity Framework, IIS และอื่น ๆ ทั้งหมดนี้แสดงให้เห็นถึงการเพิ่มผลิตภาพจำนวนมากและฉันมีประสบการณ์มากมายที่พิสูจน์ได้ นอกจากนี้ฉันทำงานกับนักพัฒนา Java ส่วนใหญ่ที่หันมาใช้. NET และพวกเขาแบ่งปันความคิดเห็นแบบเดียวกัน

ฉันคิดว่ามันเป็นจุดที่ดีที่ Microsoft แข็งแกร่งกว่าที่เคยหมายถึง. NET จะอยู่ที่นั่นซักพัก ดังนั้นเมื่อดู 10-15 ปีข้างหน้าฉันรู้สึกปลอดภัยกับ. NET มากกว่า Java


4

ฉันเป็นนักเรียนที่เพิ่งจบการศึกษาจากมหาวิทยาลัย แต่มีประสบการณ์การค้ากับทั้งสองภาษาให้รวมประมาณ 3 ปี java และ 4 ปี C #. สุทธิ (หมายเหตุ. net หมายความว่าคุณสามารถใช้ C #, VB.net, C ++ CLI, และ J # และ F #)

ฉันจะระบุว่าตอนนี้การตั้งค่าโดยรวมของฉันคือ C # บน Java ในขณะที่ทั้งสองมีไวยากรณ์ที่คล้ายกัน คุณต้องพิจารณาอย่างยิ่งว่าคุณต้องสร้างอะไร นี่เป็นเพียงแอปพลิเคชันเดสก์ทอปหรือไม่ คุณต้องการเชื่อมต่อกับลูกค้ารายอื่นหรือไม่ดังนั้นเดสก์ท็อปโทรศัพท์มือถือเว็บไซต์อื่น ๆ

** การอภิปรายเกี่ยวกับ IDE หายไปเนื่องจากคำถามที่ Stackoverflow ถูกปิด จุดสิ้นสุดของมันคือ Java มี IDEs ฟรีมากมาย แต่พวกเขาไม่ได้เปรียบเทียบในความคิดของฉันกับพลังและส่วนเสริมของ visual studio แต่ให้สังเกตว่า Visual Studio มีค่าใช้จ่ายสูงกว่าต่อใบอนุญาต

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


11
£ 1,000 ต่อใบอนุญาตสำหรับ VS หรือไม่ หากคุณได้รับการสมัคร MSDN คุณจะได้รับซอฟต์แวร์และเครื่องมือที่มีอยู่ในราคามากขึ้น ฉันสงสัยว่าทุกคนจ่ายราคาปลีกของ VS2010
James Love

6
@Michael ฉันไม่เคยพยายามที่จะขยายส่วนต่อขยาย VS อย่างไรก็ตามฉันใช้หรือทดลองใช้ปลั๊กอินที่หลากหลายสำหรับ Visual Studio เหล่านี้รวมถึง Resharper, CodeRush, Gallio, VisualSVN, AnkhSVN, testDriven.Net และอื่น ๆ อีกมากมาย
JonWillis

2
@JonWillis เห็นด้วยมีการขยายออกมากมาย นอกจากนี้ฉันยังใช้เครื่องมือเพิ่มประสิทธิภาพการผลิต CKS: Dev สำหรับ SharePoint และ WSPBuilder (ทุกวัน) แกลเลอรี่ (ที่visualstudiogallery.msdn.microsoft.com ) มีอยู่สองสามพันรายการดังนั้นจึงไม่ยากที่จะเขียนส่วนขยายเพิ่มเติมสำหรับ VS (กรอบเต็มรูปแบบมีไว้เพื่อการทำเช่นนั้นและมีชุมชนให้การสนับสนุนอย่างเพียงพอ) .
James Love

1
สำหรับโครงการที่วางแผนว่าจะทำงานได้ 10-15 ปีค่าใช้จ่ายเริ่มต้นสำหรับใบอนุญาต VS คือถั่ว
ความกลัว

1
Visual Studio 2010 Professional ที่ไม่มี MSDN คือ $ 550
Boris Yankov

3

ด้วยความคล้ายคลึงกันในซินแท็กซ์และเครื่องมือการผลิตที่ได้จาก C # หรือจาวานั้นไม่ได้มีลำดับความสำคัญที่จะสร้างความแตกต่างอย่างมีนัยสำคัญต่อโครงการทำงาน 10 - 15 ปีของคุณ ฉันจะพิจารณาประเด็นที่ต้องการอย่างละเอียดยิ่งขึ้น:

  1. ข้อกำหนดของโครงการคืออะไรและความสามารถด้านภาษาใดตรงตามข้อกำหนดเหล่านั้น (เช่นข้ามแพลตฟอร์มเทียบกับไคลเอนต์ Windows แบบเต็ม)
  2. สิ่งที่ฉันสามารถนำมาใช้เป็นแนวทาง / วิธีการโครงการที่จะทำให้ทีมของฉันทำงานได้อย่างมีประสิทธิภาพ
  3. ฉันจะทำอะไรได้บ้างเกี่ยวกับสภาพแวดล้อมการทำงานเพื่อให้แน่ใจว่าฉันได้จ้างรักษาและใช้ประโยชน์จากทีมที่ดีที่สุดสำหรับโครงการที่สำคัญ

ฉันขอแนะนำว่าในความคิดของฉันสถานที่ตั้งของคำถามว่า "ความแตกต่างของการผลิตระหว่าง (C # และ Java) อาจมีอิทธิพลต่อการลงทุนที่จำเป็นและใช้เวลาในการตลาด" ไม่เป็นความจริง ฉันไม่สงสัยเลยว่ามันจะมีความแตกต่าง แต่มันก็ไม่สำคัญ


3

ฉันพลิกกลับไปกลับมาระหว่าง Java และ. NET เริ่มต้นด้วย Java 1.2 ถึง 1.6 และ. NET 1 ถึง 4.0 มากกว่าประสบการณ์การทำงานระดับมืออาชีพประมาณ 10 ปี (เป็นโปรแกรมเมอร์ C / C ++ มาก่อน)

ในครั้งเดียวเช่น. NET 2.0 ฉันจะบอกว่า Java และ C # จะเหมือนกันโดยเฉพาะอย่างยิ่งสำหรับการทำงานส่วนหลัง โครงสร้างภาษายังคงคล้ายกันมาก .NET น่าจะได้รับความได้เปรียบในการเขียนโปรแกรม UI บนเดสก์ท็อปเนื่องจากผู้ออกแบบ WinForms ใน Visual Studio และ Java น่าจะมีความได้เปรียบในเนื้อหาเว็บ / เซิร์ฟเวอร์เพราะคุณไม่ได้ติดอยู่กับ IIS

ตอนนี้ย้ายเข้าสู่. NET 3.5 และ 4 ฉันให้ความได้เปรียบกับ. NET ลงมือ ในความคิดของฉันนี้เป็นหลักเพราะ. NET เป็นภาษาที่พัฒนาเร็วกว่ามากเนื่องจาก MS สามารถทำการตัดสินใจทางภาษาได้อย่างรวดเร็วค่อนข้างตรงข้ามกับการผลักดันการเปลี่ยนแปลงผ่านทางการเมืองของ JCP การปรับปรุงใหญ่เป็นvarคำหลักทั้งหมดของ Linq, วิธีการขยายกำหนดให้ผู้ประกอบ Null-coalescing ??,dynamicและสิ่งที่อาจจะดีมากขึ้นว่ามันช่วยเพิ่มผลผลิต

ตอนนี้ที่กล่าวว่าภาษา "มีประสิทธิผลมากที่สุด" สำหรับโครงการมักจะเป็นภาษาที่นักพัฒนาส่วนใหญ่รู้สึกสะดวกสบายและมีประสบการณ์มากที่สุด กราฟการเรียนรู้เป็นตัวช่วยเพิ่มประสิทธิภาพการทำงานที่ใหญ่ที่สุดเสมอ


3

สิ่งหนึ่งที่ฉันสังเกตเห็นคือร้านค้า C # /. NET หลายแห่งมีทัศนคติที่ "ไม่ได้คิดค้นที่นี่" และห้ามห้องสมุดของบุคคลที่สาม / โอเพนซอร์สทั้งหมดในขณะที่ร้านค้า Java จำนวนมากยินดีที่จะใช้ห้องสมุดโอเพนซอร์ส นอกจากนี้ดูเหมือนว่าจะมีไลบรารีเพิ่มเติมสำหรับ Java แม้ว่าคุณจะดูห้องสมุดบุคคลที่สามที่น่าสนใจใน. NET เช่น NHibernate, NPOI, Spring.NET และอื่น ๆ พวกเขาเป็นพอร์ตของห้องสมุด Java และด้วยเหตุนี้มันอยู่ข้างหลังพวกเขา แน่นอนว่าดูเหมือนว่านวัตกรรมเหล่านี้จะมาที่ Java เป็นอันดับแรกและหลังจากนั้นพอร์ต NET ก็ถูกสร้างขึ้น จากมุมมองของห้องสมุดดูเหมือนว่า Java ชนะในแง่ของการค้นพบนวัตกรรมใหม่

Microsoft ยังคงสร้างห้องสมุดอย่างเป็นทางการเช่น ASP MVC, LINQ และอื่น ๆ แต่บ่อยครั้งที่ชอบกับ ASP MVC ห้องสมุดบุคคลที่สามเช่น Struts, Spring MVC และอื่น ๆ ได้ออกมาแล้วสำหรับ Java และ Microsoft ก็เข้าสู่กระบวนทัศน์การควบคุมเว็บ

แน่นอนว่าห้องสมุดหลายแห่งประหยัดเวลาและทำให้คุณทำงานได้มากขึ้น ภาษาหลักของภาษาหลัก C # และ Java นั้นไม่แตกต่างกันและสำหรับฉันมันใกล้เกินไปที่จะโทร โยนเข้าไปในกองทัพของห้องสมุดบุคคลที่สามและขนาดจะเอียงไปทางจาวา ยังคงมีร้านค้าที่เปิดอยู่จำนวนมากที่เอียงยอดคงเหลือ เป็นเพียงร้านค้า. NET จำนวนมากที่มีทัศนคติที่ไม่ได้คิดค้นที่นี่ในขณะที่ร้านค้า Java จำนวนมากเป็นสิ่งที่ใช้ในการทำงานให้เสร็จ ... นี่เป็นเรื่องจริงแม้แต่ใน บริษัท ที่ฉันทำงานทีม. NET ไม่ได้รับอะไรมาก (เนื่องจากการจัดการ) ในขณะที่ทีม Java มีหลายไลบรารี / โปรแกรมอรรถประโยชน์ของบุคคลที่สามที่ได้รับการอนุมัติ ด้วย. NET สิ่งที่ดีมากมายไม่ได้ฟรี (เช่นก่อน NPOI หากคุณต้องการทำงานกับเอกสาร Microsoft office โซลูชันส่วนใหญ่ [ไม่นับระบบอัตโนมัติในสำนักงาน] ไม่ได้ฟรี


"ไม่ได้คิดค้นที่นี่" ขึ้นอยู่กับบริเวณใด ฉันทำงานในการผสมผสานระหว่าง C # และ Java และฉันดูเหมือนละเมิดสิทธิมนุษยชนมากขึ้นจากคน Java เช่นการสร้าง IConverter และการใช้ตรรกะในการแปลงสตริงเป็นสองเท่าและในทางกลับกัน
George Silva

ด้วยเหตุผลหลายประการที่ฉันชอบ C # มากกว่า Java แต่ฉันชอบไลบรารี่ Java ที่ได้ย้ายไปยัง C # มากกว่าภาษา C # โดยทั่วไปแล้วออกแบบมาทดสอบและใช้งานได้ดีกว่าในโลกแห่งความเป็นจริง
umlcat

0

ฉันถามตัวเองด้วยคำถามนี้มากมาย: ไหนดี? C # หรือ Java?

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

เรียนรู้วิธีการเขียนโปรแกรมและฝึกฝนตัวเองอย่างมากโดยใช้ภาษาเดียวและเมื่อคุณสมบูรณ์แบบในการเขียนโค้ดด้วยคิดเกี่ยวกับภาษาอื่นและเชื่อฉันคุณจะได้เรียนรู้ภาษาอื่น ๆ เช่นเค้กชิ้นหนึ่ง

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