Java จะทันกับ C # หรือไม่ [ปิด]


17

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

ดังนั้นคำถามของฉันสำหรับคุณทั้งหมดคือ Java จะทันกับ C # อีกครั้ง? และถ้าคุณต้องเดาว่ามันจะอยู่ในเวลา 5 ปี มันจะมีทุกสิ่งที่บางทีตอนนี้อาจหายไป? Java 7 เป็นอย่างไร?


7
-1, สันนิษฐานและสมมุติ จะเปลี่ยนเป็น +1 หากเปลี่ยนชื่อเป็น "Java อยู่ด้านหลัง C # หรือไม่และถ้าเป็นเช่นนั้นจะติดตามได้อย่างไร"
Nicole

2
Java และ C # สอดคล้องกับ Scheme หรือไม่ แจ้งให้เราทราบเมื่อคุณได้รับฟังก์ชั่นชั้นหนึ่งแบบไม่ระบุชื่อการปิดและการต่อเนื่อง
dietbuddha

5
@dietbuddha: ฉันไม่ชอบทิ้งขยะรหัสของฉันด้วย)ขอบคุณมาก
Josh K

1
@JoshK คุณควรจะเติมด้วย; และ} ใช่ไหม LISP ดูเหมือนว่าจะใช้วงเล็บจำนวนมากเพราะทุกฟังก์ชั่นใช้มันและคุณซ้อนฟังก์ชั่นไว้มากมาย
YuriAlbuquerque

คำตอบ:


32

คุณสมบัติภาษาเป็นส่วนเล็ก ๆ ของสิ่งที่ทำให้ Java และ C # ติ๊ก ท้ายที่สุดสิ่งเหล่านี้เป็นส่วนหนึ่งของระบบนิเวศ J2EE และ. NET ขนาดใหญ่

ทั้งสองมีจุดแข็งของตัวเองและควรเติบโตใหญ่ขึ้นในอีก 5 ปีข้างหน้า


19
+1 สำหรับ "คุณสมบัติภาษาเป็นส่วนเล็ก ๆ ของสิ่งที่ทำให้ Java และ C # ติ๊ก"
Craige

1
ใช่ API และไลบรารีมีความสำคัญมากกว่ามาก
Michael K

2
เห็นด้วย แต่คำถามเป็นเรื่องเกี่ยวกับภาษาไม่ใช่ระบบนิเวศ;)
ฟิลิปป์

1
ฉันเกลียดการลงคะแนน +1 สำหรับคำตอบสั้น ๆ แต่คุณอยู่ที่นี่ อยากเห็นคุณขยายคำตอบนี้
Nicole

3
คำถามพูดว่า: "ภาษา C # หรือ Java จะดีกว่าสำหรับฉันในการศึกษา" และ "จะอยู่ที่ไหนในเวลา 5 ปี" ทั้งสองด้านนี้ขึ้นอยู่กับระบบนิเวศแล้วภาษา
Shamit Verma

16

ฉันจะบอกว่าใช่จนกระทั่ง Oracle เข้ามาในรูปภาพ มันน่าเศร้าเพราะฉันสนุกกับการกระโดดโลดโผนในฟีเจอร์ Java และ C # ในช่วงหกปีที่ผ่านมา


2
ทำไมคุณคิดว่า Oracle จะก่อวินาศกรรม Java?

2
ฉันไม่คิดว่าวัฒนธรรมองค์กรจะมีความคล่องตัวเท่ากันที่ซันมีในการรวมคุณสมบัติต่างๆ
เจสซีซี. เครื่องตัด

8
@Glenn, คดีของ Oracle vs Google แสดงให้ฉันเห็นว่าพวกเขาไม่ได้ "รับ" โอเพนซอร์สและนั่นหมายความว่า บริษัท ขนาดใหญ่มีโอกาสน้อยที่จะเลือก Java สำหรับการพัฒนาในอนาคต groklaw.net/staticpages/index.php?page=OracleGoogle
Tangurena

Oracle อาจไม่ตรงกับ "screw Java" แต่เป็น JVM ตอนนี้พวกเขามีโครงการรวมการใช้งาน JVM สองรายการที่พวกเขาได้รับ JRockit จาก BEA และ HotSpot สำหรับ Sun ในขณะที่พวกเขาอยู่ที่นี่พวกเขาก็ออกจากโครงการ Da Vinci Machine อย่างสมบูรณ์
vartec

2
ฉันผสมกับ Oracle ชุด Android เป็นชนิดปิด แต่พวกเขามีส่วนร่วมในเคอร์เนล Linux และพวกเขากำลังพัฒนาหลักของระบบไฟล์ Btrfs Oracle ดูเหมือนจะ "รับ" โอเพนซอร์สดีกว่า Microsoft แต่นั่นก็ไม่ได้พูดอะไรมาก
jonescb

6

ในฐานะภาษาฉันไม่ได้ขยายจาวาเพื่อเพิ่มนวัตกรรมในอัตราที่สำคัญเนื่องจากในชุมชนโอเพ่นซอร์สที่ทันสมัยมีแนวโน้มที่จะมุ่งเน้นไปที่ภาษา JVM รุ่นใหม่เช่น Scala, Clojure Groovy, JRuby และ JPython

นอกจากนี้ความมุ่งมั่นของ Java ที่มีต่อความเข้ากันได้แบบย้อนหลังหมายความว่าการเพิ่มคุณสมบัติภาษานั้นยากกว่าในสมัยก่อน ๆ ของภาษา


5

เครื่องหมายคำถามใหญ่ที่นี่คือ Oracle Sun ชะลอตัวลงอย่างมากสำหรับ Java ในช่วงครึ่งทศวรรษที่ผ่านมา ความหวังของหลาย ๆ คนในชุมชน Java คือ Sun จะแยก Java หรือขายให้คนที่ใช้ทรัพยากรและความพยายามมากมาย ในขณะที่ Oracle สามารถทำเช่นนั้นได้แน่นอน บริษัท ขนาดใหญ่ที่มีกลุ่มมากมายที่มีความสนใจของตัวเอง การเดาของฉันและเป็นเพียงการเดาคือ Oracle จะปล่อยให้ Java ซบเซาและใช้เป็นเครื่องมือสำหรับการฟ้องร้องสิทธิบัตรเป็นหลัก

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

ในแง่ดีของสิ่งต่าง ๆ แม้จะไม่มีการปรับปรุง Java ก็เป็นภาษาที่ดีและมีระบบนิเวศที่ดีรอบตัว ในขณะที่ฉันชอบ C # และโลก. NET, Java เป็นตัวเลือกที่ดี ก้าวไปข้างหน้าเวลาจะบอก แต่ ณ ตอนนี้จาวาไม่ได้เลวร้ายอะไร (ไม่รวมวันที่และเวลา ... ว้าวมันน่าเกลียดและยุ่งเหยิงไปหมด)


1
ขณะนี้มีห้องสมุดบุคคลที่สามเพื่อเอาชนะปัญหาวันที่ / เวลา
Michael K

1
Oracle ใช้จาวาพร้อมกับ PL / SQL เป็นภาษาสำหรับโปรแกรมที่อาศัยอยู่ในฐานข้อมูลอย่างน้อยเท่ากับ 10g Oracle ใช้ Java อย่างหนัก นี่หมายความว่าพวกเขาจะใช้ Java ในทิศทางที่ฉันชอบหรือไม่ แต่พวกเขาจะไม่ฆ่ามัน
David Thornley

4

ไม่มีอะไรให้ทันดังนั้นคำถามก็ไม่สมเหตุสมผล

เพียงเพราะ Java ไม่ได้จำลองแบบ C # อย่างแน่นอนไม่ได้หมายความว่ามัน "ด้อยกว่า" ในบางประการมันจึงแตกต่างกัน อาจถามว่าเมื่อ C # จะ "ทัน" กับ Cobol


23
ฉันไม่เห็นด้วย C # และ Java มีความคล้ายคลึงกันในหลาย ๆ ทางมากกว่า C # และ COBOL ฉันจำได้ว่าวันหนึ่งอ่านว่า "C # คือสิ่งที่ Java ควรได้รับ" โดยรวมแล้วฉันเชื่อว่า C # และ Java กำลังแข่งขันกันโดยตรงและทำงานกับทั้งคู่ฉันต้องบอกว่าฉันมีคุณสมบัติ C # จำนวนมากใน Java แต่ไม่ใช่วิธีอื่น ๆ ...
Philippe

คุณพบสถานการณ์ที่คุณสามารถใช้ C # หรือ Java อย่างใดอย่างหนึ่งหรือไม่ เช่นสถานการณ์ที่ผู้พัฒนาสามารถเลือกได้ โดยปกติแล้วร้านค้าจะมีการตั้งค่า / อคติ / อคติและการเลือกระหว่างภาษาในระบบนิเวศเดียวกัน เช่นระหว่าง Java และ Scala หรือระหว่าง C # และ F #
Shamit Verma

2
ฉันไม่เห็นด้วยกับการตัดสินใจออกแบบ C # ทั้งหมด แต่อย่าง Java พวกเขาตั้งใจที่จะทำการเปลี่ยน C ++ และด้วยตัวอย่างของ Java ก่อนหน้าพวกเขาพวกเขาจงใจเพิ่มคุณสมบัติที่สำคัญบางอย่างของ Java ไว้ ดังนั้นถ้าคุณคิดว่าคุณสมบัติเหล่านั้นดี Java ต้อง "ทัน" กับ C # โดยเฉพาะความสามารถในการสร้างวัตถุแบบอินไลน์เพื่อให้ทุกอย่างที่วางวัตถุไม่ต้องมีป่องและฉันคิดว่า const ผู้ได้รับมอบหมายเป็นคุณสมบัติใหม่ที่สร้างขึ้นไม่ใช่ว่าจะไม่สามารถสร้างเป็นโครงสร้างข้อมูลไลบรารีได้ ฉันจะบอกว่าพวกเขาทั้งสองต้องติดต่อกับ C ++!
Dov

@ ฟิลิปเป้อย่าไปตามตัวอย่างที่เคาน์เตอร์ เขาสามารถพูดง่ายๆเช่น "เมื่อ C # จะจับกับ Java?" จุดของเขายังคงยืนอยู่ที่ไม่มีเหตุผลวัตถุประสงค์ทำไม Java อยู่เบื้องหลัง C #; มันเป็นเรื่องส่วนตัว
jonescb

ไม่มีใครพูดคุยเกี่ยวกับการจำลองแบบ แต่ C # มีคุณสมบัติที่สำคัญบางอย่างที่ Java กำลังพิจารณาที่จะนำไปใช้ตอนนี้ (เช่น lambdas ซึ่งเลียนแบบด้วยการใช้งานวัตถุที่น่าเกลียด)
YuriAlbuquerque

4

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

ปัญหาเกี่ยวกับการเปลี่ยนวิธีการทำงานของภาษา:

  1. หากคุณทำลายความเข้ากันได้ย้อนหลังคุณจะโกรธนักพัฒนาจำนวนมาก
  2. หากคุณฉี่นักพัฒนาของพวกเขาพวกเขาย้ายไปยังภาษาอื่นที่สนับสนุนพวกเขาดีกว่า ดังนั้นไม่มีเหตุผลที่จะทำงานกับภาษาต่อไป
  3. Java ได้ทำการตัดสินใจในการออกแบบ แต่เนิ่นๆด้วยแรงกดดันที่จะทำให้ภาษาออกสู่ตลาด ความหวังคือการย้อนกลับไปเติมในช่องว่างบางส่วน การตัดสินใจเหล่านั้นยังคงทำให้เกิดภัยพิบัติทางภาษาเพราะผู้ดูแลไม่ต้องการละเมิดจุดแรก
  4. Java ทำให้ดินแดนใหม่เป็นจำนวนมากและพิสูจน์แล้วว่าภาษาที่รวบรวมขยะสามารถนำมาใช้อย่างจริงจังและทำได้ดีพอสำหรับคนส่วนใหญ่
  5. C # เข้ามาในภายหลังและเรียนรู้บทเรียนมากมายที่ Java สะดุด - ดังนั้นพวกเขาจึงสามารถหลีกเลี่ยงข้อ จำกัด ทางเทคนิคบางประการที่ Java มีเนื่องจากจุด 3
  6. คุณสมบัติภาษาใหม่ต้องแก้ปัญหาจริงอย่างสมเหตุสมผล คุณสมบัติบางอย่างของภาษานั้นไม่สมเหตุสมผลในบริบทของภาษาที่คุณพยายามจะเพิ่มเข้าไป นี่คือเหตุผลว่าทำไมแม้จะมีความคล้ายคลึงกัน Java และ C # จะยังคงเป็นภาษาที่แตกต่างกัน

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

หนึ่งในคุณสมบัติของ Java ความสามารถในการเขียนโปรแกรมบน Windows และปรับใช้บน Unix หรือ Mac จะไม่เกิดขึ้นโดยตรงโดยการสนับสนุนของ Microsoft คุณถามทำไม? ไม่ใช่เพราะ Microsoft เป็นสิ่งชั่วร้าย (ไม่ว่าจะเป็นจริงหรือไม่ฉันไม่สนใจจริงๆ) เป็นเพราะพวกเขาเรียนรู้บทเรียนที่ Sun ไม่เคยทำ: เขียนครั้งเดียวทำงานได้ทุกที่ที่มีระบบปฏิบัติการและฮาร์ดแวร์ หากคุณสนใจที่จะทำเงินจากการขายระบบปฏิบัติการของคุณคุณไม่ต้องการทำให้มันสลับไปมาเล็กน้อยและยังมีแอปพลิเคชันทำงานอยู่ หากคุณทำเช่นนั้นคุณจะไม่สามารถทำกำไรได้จากระบบปฏิบัติการเพราะมีตัวเลือกที่ถูกกว่าเสมอ


เหตุใดจึงสำคัญที่ Mono ไม่ทำงานโดย MS โมโนใช้งานได้ดีจริงๆ อย่าดูถูกดูแคลน
Kugel

ไม่ใช่การขุดบน Mono แต่ไม่รองรับ API ของ. NET ทั้งหมดโดยตรง ในขณะที่พวกเขากำลังคืบหน้าและมาไกลค่อนข้างมีข้อ จำกัด - โดยเฉพาะอย่างยิ่งในการใช้งานเดสก์ทอป ไม่แน่ใจว่า Mono มาใกล้แค่ไหนหรือสามารถใช้ Winforms หรือ WPF ได้อย่างถูกกฎหมาย อย่างไรก็ตามสำหรับฝั่งเซิร์ฟเวอร์อย่างเคร่งครัดฉันค่อนข้างมั่นใจว่ามันเข้ากันได้ ไม่ได้ดูมันเมื่อเร็ว ๆ นี้
Berin Loritsch

ฉันคิดว่า "ความสามารถในการเขียนโปรแกรมบน Windows และปรับใช้บน Unix หรือ Mac จะไม่เกิดขึ้นโดยตรงจากการสนับสนุนของ Microsoft" ได้รับการพิสูจน์แล้วตอนนี้
JoelFan

ตอนที่ฉันเขียนคำตอบมันไม่ได้ ดังนั้น C # มี Microsoft เขียน runtime และไลบรารีที่ทำงานบน Mac และ Unix? Mono ไม่ได้โดยตรงจาก Microsoft แม้ว่าอาจมีนักพัฒนา Microsoft บางคนทำงานอยู่ ฉันยังมีข้อสงสัยเกี่ยวกับแอพเดสก์ท็อปที่สร้างขึ้นบน WPF ที่ใช้งานได้กับ Linux ฝั่งเซิร์ฟเวอร์เท่านั้นอาจตกลง
Berin Loritsch

1

Java ไม่ต้องการ "คุณสมบัติ" ใหม่ ๆ มากกว่า C หรือ C ++ มันเป็นภาษาที่ออกแบบมาอย่างดีสำหรับการพัฒนาเชิงวัตถุ ส่วนเพิ่มเติมที่อาจเกิดขึ้นในการสร้างห้องสมุดสำหรับการทำงานที่หลากหลาย เช่นเดียวกันกับ C # - คุณสมบัติส่วนใหญ่ถูกเพิ่มเข้ามาเพื่อให้ภาษาทำสิ่งต่างๆมากขึ้น โดยส่วนตัวแล้วฉันคิดว่าคุณสมบัติเหล่านั้นส่วนใหญ่ไม่จำเป็น - ตัวชี้ใน OO จริงๆแล้วมันมีขนนุ่มมากเว้นแต่คุณจะทำงานในระดับฮาร์ดแวร์ นอกจากนี้การเรียกใช้ VM จะทำให้เข้าถึงฮาร์ดแวร์ได้ยากโดยตรงหากไม่สามารถทำได้

Unix เริ่มต้นแนวโน้มของการสร้างโมดูลที่ทำสิ่งหนึ่งได้ดีมาก ฉันคิดว่าทั้ง Java และ C # กำลังคืบคลานเข้ามาเล็กน้อยจากการคืบของฟีเจอร์ มันจะเป็นการดีกว่าที่จะสร้างแกนกลางที่ขยายได้ง่ายกว่า "ภาษา" อเนกประสงค์ขนาดยักษ์ซึ่งเป็นเหมือนกรอบ สำหรับฉันแล้ว Java เหมาะกับข้อกำหนดนี้ดีกว่า C #


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

2
@Craige ส่วนตัว (ความเห็น) ฉันไม่ชอบที่มีคุณสมบัติการเขียน ฉันต้องการให้ภาษาออกไปให้พ้น - น้อยมาก
Michael K

1
@Michael - ฉันล้มเหลวในการวาดการเชื่อมต่อระหว่างภาษา aa ที่มีคุณสมบัติการสร้างประโยคและภาษาที่ได้รับในทางของคุณ เพียงเพราะภาษาได้กล่าวถึงคุณสมบัติไม่ได้หมายความว่าคุณต้องใช้มัน ใช้วิธีการ getter และ setter ของ C # 90% ของเวลาที่จะช่วยให้คุณเขียนโค้ดซ้ำซ้อนหลายร้อยบรรทัด คุณยังสามารถเขียนของคุณเองได้หากต้องการ
Craige

1
@Craige หากภาษามีคุณสมบัติเครื่องมือของคุณ ต้องรู้เกี่ยวกับพวกเขาอย่างน้อย และพลังของระบบนิเวศ Java เป็นหลักในเครื่องมือซึ่งเป็นไปได้ทั้งหมดเนื่องจากภาษาเรียบง่ายเรียบง่าย
SK-logic

1
@SK ฉันไม่เข้าใจวิธีที่คุณพูดได้ว่าภาษาที่แลมบ์ดาใช้ไม่ได้ C ไม่มี lambdas และ C ++ ทำให้พวกมันเป็น C ++ 0x และผู้คนใช้ภาษาเหล่านี้มาหลายสิบปี เพียงเพราะคุณชอบการเขียนโปรแกรมฟังก์ชั่นที่ไม่ได้ทำให้การเขียนโปรแกรมที่จำเป็น
jonescb

1

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


0

ฉันจะไม่เริ่มฟอรั่มสนทนา แต่ฉันคิดว่า Java อยู่ที่นี่มานานก่อน C # และสำหรับเรื่องนั้น C # ดูเหมือนจะเป็นการจำลองแบบมากกว่าแล้ว java

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

ในที่สุดนี่ก็เหมือนกับการเริ่มหัวข้อ Windows vs Linux

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