เหตุใดจึงไม่ใช้ Java สำหรับการพัฒนาเว็บแอปพลิเคชันที่ทันสมัย [ปิด]


393

ในฐานะโปรแกรมเมอร์ Java มืออาชีพฉันพยายามทำความเข้าใจ - ทำไมความเกลียดชัง Java สำหรับเว็บแอปพลิเคชันสมัยใหม่

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

ฉันเคยได้ยินชุมชนการเริ่มต้นเว็บเดียวกันนี้อ้างถึงผู้พัฒนา Java ในเชิงลบ - มากขึ้นหรือน้อยลงซึ่งบ่งบอกว่าพวกเขาช้าไม่สร้างสรรค์และเก่า

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

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

ซึ่งนำมาสู่คำถามของฉัน :

เหตุใด Java จึงไม่ถูกใช้ในเว็บแอปพลิเคชันสมัยใหม่

  • มันเป็นจุดอ่อนของภาษาหรือไม่

  • มันเป็นกฎตายตัวของ Java เพราะมันมีมานานแล้ว (มันเกี่ยวข้องอย่างไม่ยุติธรรมกับเทคโนโลยีที่เก่ากว่าและไม่ได้รับการยอมรับสำหรับความสามารถ "ทันสมัย" ของมัน)?

  • ทัศนคติเชิงลบของนักพัฒนา Java แข็งแกร่งเกินไปหรือไม่? (Java ไม่เพียง "เจ๋ง" อีกต่อไป)

  • แอปพลิเคชั่นที่เขียนด้วยภาษาอื่นเร็วกว่าจริง ๆ ในการสร้างรักษาง่ายขึ้นและทำงานได้ดีขึ้นหรือไม่

  • Java ใช้เฉพาะกับ บริษัท ใหญ่ที่ปรับตัวช้าเกินไปกับภาษาใหม่หรือไม่?


142
ฉันคิดว่าคุณไม่ถูกต้อง: มันยังคงใช้อยู่มันหายไปเพียงปัจจัยที่ยอดเยี่ยม

41
@ Graham Lee: Java นั้นยอดเยี่ยมมากใช่ไหม ฉันจะต้องพลาดบางสิ่งบางอย่าง เอาล่ะฉันคิดว่ามันเป็นกาแฟเย็น แต่ก็เท่ห์ ฉันคิดว่าเหตุผลหลักคือจาวาโดยเฉพาะอย่างยิ่งเฟรมเวิร์กขององค์กรจาวาได้รับและยังคงถูก overengineered อย่างมาก คุณไม่สามารถมองว่ามันเบาคุณแค่ใช้มันเพราะคุณต้องการคุณสมบัติการกระจาย / การปรับสมดุล / ความสามารถในการปรับขนาดของแพลตฟอร์มและต้องการใช้เฟรมเวิร์กสำหรับส่วนหน้าที่ทำด้วยจาวาเช่นกันเพื่อความเป็นเนื้อเดียวกัน
Falcon

20
อาจเป็นเพราะมันไม่ทันสมัยใช่ไหม : P และ Java นั้นไม่เคยเจ๋งเลยเพราะมันทำให้ส่วนแฮ็คออกจากการเขียนโปรแกรม
back2dos

28
@Falcon Java ดูเท่ห์เมื่อเปิดตัวครั้งแรก Sun ทำผลงานได้ยอดเยี่ยมไม่ว่าจะเป็น hype ที่สมเหตุสมผลหรือไม่มีส่วนเกี่ยวข้องกับความเท่ห์หรือไม่สิ่งที่เจ๋ง ๆ มากมายถูกหลอกโดยไม่มีเหตุผล
Mahmoud Hossam

11
@Falcon คุณควรดูที่การสร้างเว็บแอปพลิเคชันด้วย JSF 2.0 ใน Java EE 6 และเปรียบเทียบกับประสบการณ์ของคุณ คุณอาจประหลาดใจ

คำตอบ:


174

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

ตัวอย่าง Twitter ถูกสร้างขึ้นโดยใช้ Rails / Ruby แต่เมื่อไม่สามารถปรับขนาดได้พวกเขาจะย้ายไปที่ JVM

ไม่ต้องพูดถึงว่ากระบวนการพัฒนาไม่ได้ผล: รหัส -> รวบรวม -> ปรับใช้ในขณะที่อยู่ในกรอบเช่น (Rails / Django / Grails): เรียกใช้เซิร์ฟเวอร์ทดสอบ -> รหัส -> เปลี่ยนแปลงสิ่งต่าง ๆ และดูสิ่งที่เกิดขึ้น

ข่าวดีก็คือJRebel ช่วยให้คุณเห็นการเปลี่ยนแปลงรหัสได้ทันที


81
Play Frameworkก็เหมือน Ruby on Rails แต่สำหรับ Java รหัส -> อัปเดตเบราว์เซอร์ของคุณ
Jonas

34
เพียงพยายามกำจัดความเข้าใจผิดบางอย่าง Java EE ไม่ใช่สิ่งเดียวที่อยู่บนฝั่งเซิร์ฟเวอร์ Java อย่างที่หลายคนคิด
Jonas

22
Facebook ยังทำสิ่งที่คล้ายกัน รหัสฐานของพวกเขาอยู่ใน PHP แต่เนื่องจากปัญหาความเร็วและความสามารถในการปรับขนาดได้พวกเขาจึงต้องเขียนคอมไพเลอร์ (HipHop) ที่รวบรวม PHP เป็น C ++ ซึ่งจะรวบรวมโดยใช้ g ++ มันตลกที่ทุกคนพูดถึงทับทิมและ PHP ที่ยอดเยี่ยมแค่ไหนและทุกไซต์นั้นถูกสร้างขึ้นรอบ ๆ ตัวพวกเขา แต่เมื่อคุณดูว่าพวกเขาไม่มีประสิทธิภาพองค์กรขนาดใหญ่ส่วนใหญ่ต้องเปลี่ยนไปเป็นอย่างอื่น ถ้าฉันจำได้อย่างถูกต้องรายการ Craigs มีโค้ดแบ็กเอนด์จำนวนมากที่เขียนใน C / C ++ ด้วยเหตุผลอย่างนี้
Kibbee

28
1) การใช้ Eclipse การรวบรวมเกิดขึ้นเมื่อคุณพิมพ์และคุณไม่ค่อยสังเกตเห็น นอกจากนี้การรัน Tomcat ภายใน Eclipse ฉันสามารถรีสตาร์ทแอพภายในไม่กี่วินาที ฉันมักจะถูกขัดขวางโดยการรีสตาร์ทแอพของฉัน 2) ไม่มีกระสุนเงินเลย Ruby หรือภาษาใด ๆ ไม่ทำให้คุณเร็วขึ้น 10 เท่า ปัญหาเกี่ยวกับ Java dev มักจะเพิ่มเวลา แต่ถ้าคุณรู้ว่าคุณกำลังทำอะไรอยู่คุณสามารถทำงานในโครงการได้ภายใน 10 นาที
alex

5
Java และภาษาสแตติกอื่น ๆ มีข้อดีสองประการคือเกือบจะปราศจากการรีแฟคเตอร์ฟรีและการค้นพบ API โดยไม่มีเอกสารประกอบ
Eran Medan

136

จากประสบการณ์ของฉัน Java สำหรับเว็บแอพพลิเคชั่นเกินขนาดสำหรับแอปพลิเคชันขนาดเล็ก ยกตัวอย่างเช่นบล็อกง่ายๆที่มีตารางฐานข้อมูลหนึ่งรายการสามารถทำสิ่งที่ง่ายกว่าได้

ฉันมักจะเห็นว่า Java ทำได้ดีกว่ามากในเว็บแอปพลิเคชั่นขนาดใหญ่ (คิดว่าธนาคารและ บริษัท ประกันภัย) ที่สื่อสารกับระบบอื่น ๆ จำนวนมาก (เช่นเมนเฟรมแบ็คเอนด์และฐานข้อมูลและเพียร์บริการเว็บ ทั้งหมดในแอปพลิเคชันเดียวกัน)

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


5
สำหรับแอปพลิเคชั่น "เล็ก" นี่เป็นเรื่องจริงมากขึ้นถ้าคุณต้อง (เพราะนี่คือ "มาตรฐาน" และ บริษัท ใช้มัน) ทำงานกับเซิร์ฟเวอร์แอปพลิเคชันมอนสเตอร์เช่น Websphere ในขณะที่บ่อยครั้งกว่า Tomcat เป็นต้น .. ทำไมต้องทำงานกับคอนโซลการจัดการที่ยุ่งเหยิง เฮ้อ ...
Jalayn

7
@Jalayn: จากประสบการณ์ของฉันมันเป็นเพราะพวกเขาต้องการที่จะรักษาโปรแกรมเซิร์ฟเวอร์หนึ่งโปรแกรมสำหรับทุกสิ่งมากกว่าผู้ดูแลระบบ WebSphere สำหรับทีม A, Tomcat สำหรับทีม B, Glassfish (หรืออย่างอื่น) สำหรับทีม C ... และฉันสามารถเข้าใจได้ว่า รู้สึกเหมือนกัน แต่ใช่มันน่าผิดหวังสำหรับฉันเช่นกัน
FrustratedWithFormsDesigner

3
สิ่งนี้เป็นจริงสำหรับ Java EE แต่ขณะนี้มีPlay Frameworkที่จะทำให้เว็บแอป Java ของคุณมีน้ำหนักเบาและมีประสิทธิภาพเหมือนกับ Ruby on Rails
Jonas

9
Java 6 EE ใหม่โดยเฉพาะอย่างยิ่งโปรไฟล์เว็บช่วยให้เว็บแอพพลิเคชั่นง่าย ๆ

4
@ ThorbjørnRavnAndersenแอพอาจเรียบง่าย แต่การทำความเข้าใจกับกรอบไม่ได้และไม่เข้าใจเครื่องมือหลักอย่าง Ant หรือ Maven เส้นโค้งการเรียนรู้ของมือใหม่นั้นมีขนาดใหญ่และเต็มไปด้วยซุปย่อที่ซ้อนกันความสับสนระหว่าง specs (เช่น JAX-RS) และ impls (เช่น Jackson) และอื่น ๆ มันซับซ้อนอย่างมากที่จะทำอะไรง่ายๆถ้าคุณต้องการเข้าใจสิ่งที่คุณกำลังทำอยู่
Craig Ringer

135

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

กรอบงานเว็บ:

เมื่อฉันเริ่มเขียนโปรแกรมเว็บแอพใน Java ครั้งแรก Struts เพิ่งออกมาและมันก็ไม่ได้ยอดเยี่ยม แต่มันเป็นสิ่งที่ดีที่สุดที่มีอยู่ ฉันสร้างแอพพลิเคชั่นมากมายและอีกสองสามเฟรมในระหว่างทาง เมื่อใดก็ตามที่เฟรมเวิร์กใหม่ออกมา (Tapestry, Wicket, GWT, Stripe, grails, AppFuse, Play, RichFaces, Spring ฯลฯ ) ฉันจะลองดูและดูว่ามันดีขึ้นหรือไม่และส่วนใหญ่แล้วมันจะดีขึ้นเล็กน้อย และบางครั้งก็ไม่ดีขึ้นเลย ฉันต้องบอกว่ากรอบการเล่นเป็นขั้นตอนในทิศทางที่ถูกต้อง

ไม่รวมแบตเตอรี่:

หนึ่งในส่วนที่น่ารำคาญที่สุดของ Java คือความจริงที่ว่าไลบรารีส่วนใหญ่ที่คุณใช้ไม่ได้รวมอยู่ในจาวาเองคุณต้องรวม libs ของบุคคลที่สามจำนวนหนึ่งจากสถานที่เช่น apache ทั่วไป หากคุณใช้บางสิ่งบางอย่างเช่นจำศีลกับห้องสมุดขนาดใหญ่อื่น ๆ คุณจะลงเอยในนรกที่ Jar พึ่งพาซึ่งไฮเบอร์เนตต้องการรุ่นหนึ่งขวดและอย่างอื่นต้องการรุ่นอื่น หากคุณโหลดไฟล์ jar ในลำดับที่ผิดคุณจะโชคไม่ดี คุณต้องพึ่งพาเครื่องมือเช่น Maven และไม้เลื้อยเพื่อจัดการการพึ่งพาของคุณและสิ่งนี้จะนำมาซึ่งการพึ่งพามากขึ้นในโครงการของคุณซึ่งส่งผลให้โครงการมีขนาดใหญ่ ฉันมีไฟล์ war 100MB + ไฟล์ war สำหรับเว็บแอพที่ง่ายที่สุด

มีตัวเลือกมากเกินไป:

ด้วยเหตุผลบางอย่างดูเหมือนว่าจะมีวิธีที่แตกต่างกันมากเกินไปในการทำสิ่งเดียวกันใน Java มีอยู่มากกว่า 38 กรอบเว็บที่แตกต่างกันสำหรับ Java ตามวิกิพีเดีย (มีhttp://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) และออมที่แตกต่างกัน 23 ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software# Java ) เพื่อตั้งชื่อตัวอย่างสองสามตัวอย่าง หากคุณดูภาษาอื่นพวกเขามีจำนวนที่เหมาะสมกว่า บางคนคิดว่าการมีตัวเลือกมากมายเป็นสิ่งที่ดี แต่มันไม่ได้นำไปสู่ความพยายามที่สูญเปล่าในชุมชนนักพัฒนาทุกคนกำลังสร้างวงล้อเดียวกันและถ้าคุณเป็นคนใหม่ในภาษาที่คุณมี ตัวเลือกมากเกินไปที่จะเลือกจาก

เซิร์ฟเวอร์แอป:

เว็บแอปพลิเคชัน Java นั้นหนักมากและต้องใช้ทรัพยากรจำนวนมากในการรัน พวกเขากำลังหน่วยความจำหิวโดยเฉพาะอย่างยิ่ง เช่นเดียวกับซอฟต์แวร์ใด ๆ ที่พวกเขาสามารถปรับเพื่อลดการใช้ทรัพยากรของพวกเขา แต่เมื่อเทียบกับภาษาอื่น ๆ พวกเขาออกจากการตั้งค่ากล่องน่ากลัว ในอดีตที่ผ่านมาฉันเคยใช้ weblogic, websphere, Jboss, Tomcat และ Jetty ฉันใช้สามข้อแรกเท่านั้นเมื่อฉันถูกบังคับให้ใช้ EJB แต่แม้ว่าคุณจะไม่ได้ใช้ EJB พวกเขาเป็นเซิร์ฟเวอร์แอปขนาดใหญ่และบางครั้งก็ยากที่จะกำหนดค่าและทำงานอย่างถูกต้อง Tomcat และ Jetty ดีกว่าและง่ายกว่าในการเซ็ตอัพ แต่ยังคงเป็น hogs ทรัพยากร

แอพโฮสต์:

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

เวลาในการพัฒนา:

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

นอกจากนี้ยังมีรหัสสำเร็จรูปจำนวนน้อยให้ทำสิ่งเดียวกันในไพ ธ อนดังนั้นฉันจึงใช้เวลาน้อยลงในการพัฒนาโค้ดเช่นกัน

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

IDE:

เมื่อฉันพัฒนาใน Java ฉันรู้สึกติดกับ IDE ฉันก็หายไปโดยไม่ได้ IntelliJ เป็น IDE ที่ดีที่สุดในตลาดและมันยากที่จะเปลี่ยนเป็นงูใหญ่เพราะไม่มีอะไรที่เหมือนกับงูหลาม ดังนั้นแทนที่จะเป็น IDE ฉันแค่ใช้ textmate ซึ่งเป็นเพียงเครื่องมือแก้ไขข้อความธรรมดา ตอนแรกมันยาก แต่เนื่องจากมันเป็นเพียงโปรแกรมแก้ไขข้อความมันเป็นแอปพลิเคชันที่รวดเร็วและตอบสนองได้ดีมาก ฉันสามารถเปิดโครงการทั้งหมดได้ในไม่กี่วินาทีในขณะที่เมื่อฉันต้องการเปิดโครงการใน IDE อาจใช้เวลาหนึ่งนาทีหรือมากกว่านั้นด้วยเครื่องที่มี RAM จำนวนมาก ผู้ผลิต IntelliJ ออกมาพร้อมกับตัวแก้ไขหลามชื่อ pycharm ฉันซื้อมันเมื่อออกมาครั้งแรกและมันยอดเยี่ยมมาก แต่สิ่งที่ฉันรู้คือฉันไม่ต้องการ IDE สำหรับไพ ธ อนฉันสบายดีด้วยโปรแกรมแก้ไขข้อความ เมื่อฉันกลับไปทำงานบน Java web apps ที่ฉันต้องทำเป็นครั้งคราวฉันพยายามใช้โปรแกรมแก้ไขข้อความ แต่ฉันก็ยังไม่เข้าใจในเรื่องนี้ ฉันต้องการ IDE สำหรับ Java มากขึ้นเพราะถ้าฉันทำบางสิ่งบางอย่างมันใช้เวลาในการคอมไพล์ใหม่และปรับใช้ใหม่ซึ่งทำให้ฉันช้าลง

ออม:

เมื่อฉันเริ่มใช้ Hibernate เป็น ORM ครั้งแรกฉันคิดว่ามันยอดเยี่ยมมีปัญหาและมันก็ไม่สมบูรณ์แบบ แต่ก็ดีขึ้นกว่าที่ฉันเคยทำมาก่อน ฉันมีความสุขกับมันจนกระทั่งฉันสมัครใช้งาน ORM ของ Django ในโครงการหลามและนั่นทำให้ฉันลืมตาขึ้นมานั่นคือวิธีที่ ORM ควรทำงาน หลังจากนั้นฉันก็กลับไปที่โหมดไฮเบอร์เนตและฉันก็รู้สึกผิดหวังและอยากกลับไปที่ ORM ของ Django หลาม ORM ที่ยอดเยี่ยมอีกอย่างหนึ่งคือ sqlalchemy ซึ่งคล้ายกับ ORM ของ Django แต่แตกต่างกันเล็กน้อย ฉันมีประสบการณ์ จำกัด กับ ORM ของ ROR แต่จากสิ่งที่ฉันจำได้มันก็ค่อนข้างดีเช่นกัน

แม่แบบ:

ระบบสร้างเทมเพลตบนเว็บใน Java นั้นไม่ค่อยดีนักและฉันคิดว่าฉันได้ลองทุกอย่างแล้ว (ไทล์ freemarker ความเร็ว ฯลฯ ) ส่วนใหญ่มีเพียงฟังก์ชั่นพื้นฐานเท่านั้นและเป็นความเจ็บปวดในการทำงาน ด้าน Python รายการโปรดสองรายการของฉันคือ Django templates และ Jinja2 พวกเขามีทุกอย่างที่ฉันต้องการในเครื่องมือสร้างแรงบิดและใช้งานง่ายมาก


10
ฉันอยู่กับคุณในหลาย ๆ จุด แต่มีปัญหากับบางอย่าง คอมไพล์ / ทดสอบลูป : ใช้โมดูลเว็บไดนามิกของ Eclipse และ / หรือ JRebel และมันหายไป ยิ่งใหญ่ ความหนัก : JBoss AS 7 ค่อนข้างเบาและรวดเร็ว และถ้าคุณไม่ต้องการ EE คุณสามารถใช้ Tomcat หรือ Jetty ซึ่งแทบไม่มีเลย การทดสอบ : Arquillian เป็นเครื่องมือทดสอบที่ดีที่สุดที่ฉันเคยใช้ในภาษาใด ๆ แม้ว่ามันจะเป็นเพียงการเติบโตพอที่จะใช้งานได้ นรกพึ่งพา : เพียงใช้ Maven; ควรเป็นมาตรฐานและเป็นส่วนหนึ่งของ JAva
Craig Ringer

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

2
ฉันยังคิดว่าคุณพลาดจุดสำคัญไปแล้ว: เส้นโค้งการเรียนรู้และข้อบกพร่องทำให้สิ่งต่างๆช้าลงจริง ๆ
Craig Ringer

@CraigRinger ฉันไม่ได้ใช้โมดุลเว็บแบบไดนามิกหรือ JRebel ดังนั้นคุณพูดถูกมันอาจหายไป
Ken Cochrane

2
หากคุณชอบ IntelliJ ให้ลอง PyCharm - โดยใช้พื้นฐานเดียวกัน
Tamlyn

94

Start Ups ต้องการความแวววาว ไม่ว่าจะเป็นเงางาม: RoR, Groovy, Grails, OOP w / PHP, Foobar, Wibble, Narf ฯลฯ

องค์กรต้องการเสถียรภาพเชื่อถือได้และปรับขนาดได้: Java และ. NET พอดีกับรายการนั้น (เมื่อทำอย่างถูกต้อง)

กิ๊กปัจจุบัน: บริการทางการเงิน แพลตฟอร์ม: ColdFusion (โดยพื้นฐานคือ Java Tag Library) และ Java

กิ๊กก่อนหน้า:

  1. บริการทดสอบทางการศึกษา - ColdFusion
  2. การประกันความเสี่ยงสูง - ColdFusion และ Java
  3. 401k - ColdFusion และ Java
  4. การเดินทาง - แอปพลิเคชัน ColdFusion ภายใน Java
  5. Securities - ColdFusion (เวอร์ชั่นพรี Java)

เว็บไซต์เหล่านี้ล้วน แต่มีความปลอดภัยสูง ไม่มีใครใน บริษัท เหล่านี้เคยพิจารณา PHP แต่บางคนก็มอง RoR และเห็นปัญหามากเกินไป บริษัท 401k มี บริษัท ในเครือที่รันแอพพลิเคชั่น. NET กับนักพัฒนาที่มีความสามารถแอพก็หยุดทำงานทุกสัปดาห์ ในที่สุดพวกเขาก็แปลงเป็น Java และได้รับความมั่นคง

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


23
"บริษัท 401k มี บริษัท น้องสาวที่ใช้แอพพลิเคชั่น. NET กับนักพัฒนาที่มีความสามารถแอพเพิ่งหยุดทำงานทุกสัปดาห์ในที่สุดพวกเขาก็แปลงเป็น Java และเพิ่มความเสถียร" ฮ่า ๆ ๆ :) เคยได้ยินกรณีตรงข้าม
ชัด

12
แน่นอนคุณมี มีเว็บแอปพลิเคชั่นมากกว่าเขียนโค้ดคุณต้องรู้วิธีปรับแต่งเซิร์ฟเวอร์เขียน SQL ที่เหมาะสมและอื่น ๆ บริษัท นั้นมี 2 .NET devs และไม่มีผู้ดูแลระบบเซิร์ฟเวอร์จริง บริษัท ที่ซื้อ บริษัท ที่ฉันเคยมีก็มีแอพนั้นอยู่ในข้อตกลง พวกเขาเป็นร้านค้า Java ขนาดใหญ่และมีทรัพยากรมากขึ้นเพื่อรับประกันความมั่นคง
Adrian J. Moreno

48
ดูเหมือนว่าไม่เหมาะสมสำหรับฉันที่คุณเขียนประโยคนั้นระบุว่าเป็นเหตุและผล แปลงเป็น Java = การเพิ่มความเสถียรหรือไม่ เราทุกคนรู้ว่านั่นไม่ใช่เหตุผล นอกจากนี้ขอโทษเกี่ยวกับประสบการณ์ ColdFusion ทั้งหมด;)
จอร์แดน

3
ก็ยุติธรรมนักลงทุนมักต้องการดูรสชาติของปี แต่ฉันเองก็ยังไม่สามารถคิดได้ว่าจะมีทางเลือกที่แย่กว่าสำหรับการพัฒนาต้นแบบอย่างรวดเร็วยกเว้น devs Java ที่มีคุณภาพสูงมากซึ่งหาไม่ได้ง่าย
Erik Reppen

9
Java devs คุณภาพสูงมากซึ่งหาได้ยาก - แน่นอน
luis.espinal

73

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


ฉันคิดว่าสิ่งนี้เปลี่ยนไป แต่ตอนนี้คุณสามารถโฮสต์เว็บแอป Java บน GAE ได้โดยไม่มีค่าใช้จ่าย
Mahmoud Hossam

+1 สำหรับโฮสต์ของ Java ถึงแม้ว่า ASP.Net จะหายากและราคาถูก ฉันจ่าย $ 8 ต่อเดือนสำหรับการโฮสต์ ASP.Net ที่แชร์ของฉัน ในทางกลับกันฉันต้องการลองไซต์ใน Java และไม่พบโฮสต์ที่ใช้ร่วมกันที่รัน Java และต้องใช้ VPS ไม่สนใจฉันสำหรับโครงการเรียนรู้
Jetti

9
+1 สำหรับสิ่งนี้ มันง่ายกว่าที่จะโฮสต์เว็บไซต์หลายแห่งบนเซิร์ฟเวอร์สำหรับ PHP มากกว่าสำหรับ Java และเพิ่มไปยังการหาวิธีแก้ปัญหาเว็บโฮสติ้งราคาถูกสำหรับ PHP ได้ง่ายกว่า Java
Jonas

คุณถูก @Mark ถูกต้องแล้ว
sebastiangeiger

1
@Kibbee - Arvixeนั่นคือสิ่งที่ฉันใช้ ฉันมีแผน personalASP Pro
Jetti

70

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

หากคุณมีความสนใจในเครื่องมือและกรอบการทำงานที่ทันสมัยลองดูที่:

แต่ฉันคิดว่าการพัฒนาเว็บที่ทันสมัยที่สุดอย่างแท้จริงบนแพลตฟอร์ม JVM นั้นน่าจะกระทำในหนึ่งในภาษา JVM ใหม่แทนที่จะใช้ Java โดยตรงโดยที่ Java นั้นเป็นเพียงการนำเสนอแกนหลักในแง่ของไลบรารีพื้นฐานและโครงสร้างพื้นฐานด้านหลัง มีการพัฒนาเว็บไซต์จำนวนมากที่เกิดขึ้นใน Groovy ( Grails ), Scala ( Lift and Play ), JRuby ( JRuby on Rails ) และ Clojure ( Noir , Ring / Enlive + เฟรมเวิร์กที่กำหนดเองจำนวนมาก) เพื่อตั้งชื่อ

ด้วยนวัตกรรมทั้งหมดที่เกิดขึ้นในพื้นที่ภาษา JVM ใหม่ฉันสงสัยว่า Java จะกลายเป็น "แอสเซมเบลอร์ของการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์" ในที่สุด


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

7
ตกลงกัน; Java EE 6 นั้นยอดเยี่ยมทันทีที่คุณวาง JSF2 และใช้สิ่งที่มีประโยชน์และมีประสิทธิผล ช่วงการเรียนรู้ยังคงมีอยู่อย่างมาก
Craig Ringer

1
คุณสามารถเพิ่ม Tapestry5 ( tapestry.apache.org ) ลงในรายการกรอบเว็บ Java ที่ทันสมัยของคุณ
Neeme Praks

@CraigRinger JSF เป็นเรื่องง่าย ความคิดเห็นของคุณอ่านเช่นเดียวกับคำถาม: คำโวยวายทางศาสนา
jwenting

@ jwenting มันเป็นเวลาสามปีแล้วดังนั้นมันจึงได้รับการปรับปรุงเล็กน้อยในแง่ของเอกสารและเครื่องมือภายนอกตั้งแต่นั้นมา ใน EE 6 สแต็คเมื่อผมทำงานกับมันมันเป็น frickin' น่ากลัวขึ้นดังนั้นหากสนับสนุน Glassfish 3 และ AS 7.
เครก Ringer

41

Google, Amazon หรือ LinkedIn นับว่าทันสมัยหรือไม่

Java ใช้สำหรับเว็บแอปพลิเคชันที่ทันสมัย หากคุณมองข้ามองค์กรมันเป็นภาษาที่ใช้อย่างหนักที่สุดสำหรับเว็บแอปพลิเคชัน (ภายใน)

ที่กล่าวว่า Java ผ่านช่วงเวลาที่เป็นมาตรฐานการพัฒนาเว็บพยายามทุกอย่างให้ทุกคน (arguably ยังคงทำ) "อย่าพูดซ้ำตัวเอง" เป็นการตอบสนองต่อนรก xml และวงจรการสร้างที่ยาวนานของการพัฒนาเว็บ Java ดังนั้น Java (EJB, Struts, JSF และอื่น ๆ ) จึงถูกมองว่าเป็นสิ่งที่กระบวนทัศน์ใหม่ทั้งหมดพยายามที่จะเอาชนะ

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

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

ภาษาคงมีสถานที่ของพวกเขาเช่นกัน สำหรับตรรกะแบ็คเอนด์ที่ซับซ้อนต้องทำงานเป็นเวลาหลายปีต้องปรับขนาดโดยไม่มีปัญหาต้องเร็วมากและต้องปราศจากข้อผิดพลาดโดยสิ้นเชิงภาษาที่พิมพ์แบบคงที่ (เช่น Java หรือแม้แต่ C) เป็นที่ต้องการ

นอกจากนี้เมื่อจำนวนนักพัฒนา / ผลประกอบการเติบโตและผลิตภัณฑ์ต่าง ๆ มีแนวโน้มที่ผู้คนที่มีเจตนาดีจะแนะนำข้อบกพร่องที่พุ่งสูงขึ้น ความเข้มงวดและระเบียบวินัยที่โครงการ Java ออกแบบมาเป็นอย่างดี (อินเทอร์เฟซรูปแบบและน้ำมนต์สำหรับแวมไพร์ php เหล่านั้น :)) ช่วยลดความเสี่ยงในระยะยาว ในขณะที่สิ่งนี้สามารถทำได้ผ่านการทดสอบหน่วยตาข่ายความปลอดภัยที่ได้มาจากการตรวจสอบแบบคงที่ (และเครื่องวิเคราะห์แบบคงที่เช่น findbugs และเสียงดังกราว) ให้ระดับการครอบคลุมโค้ดในตัวซึ่งยากที่จะทำซ้ำด้วยการทดสอบด้วยลายมือ อย่าเข้าใจฉันผิดควรมีการทดสอบหน่วยและการทดสอบการใช้งาน แต่องค์กรที่แท้จริงไม่เคยได้รับความคุ้มครอง 100% สำหรับสิ่งที่พวกเขาตรวจสอบวิเคราะห์คงทำ

ดังนั้นในโครงการขนาดใหญ่ (ตามที่กำหนดโดยขนาดของทีมมากกว่าขนาดรหัส) ซึ่งมีการทำงานร่วมกันที่ซับซ้อนระหว่างกลุ่มของโค้ดที่พัฒนาขึ้นอย่างอิสระภาษาเช่น Java ยังคงเป็นที่ต้องการ ตัวอย่างเช่นแอปพลิเคชันเว็บขนาดใหญ่ / ซับซ้อนเช่นที่โบรกเกอร์การเงิน (ameritrade) การแลกเปลี่ยนทางการเงิน (nasdaq, nyse, london หลังจากความล้มเหลวของ. net), ธนาคารออนไลน์ (เกือบทั้งหมด), อีเมล (google), การประมูล (อีเบย์) ฯลฯ

จากมุมมองด้านประสิทธิภาพและขนาดไม่มีสิ่งใดที่ยอดเยี่ยมที่สุดในแพลตฟอร์ม Java เพราะเป็นการผสมผสานระหว่างความสามารถในการปรับขนาดและประสิทธิภาพสำหรับเว็บแอปพลิเคชัน ตัวอย่างเช่น Twitter ต้องเขียนส่วนใหญ่ของโครงสร้างพื้นฐานของ Ruby ใน Scala บน Java VM เพื่อที่จะทำให้วาฬล้มเหลวกลับสู่ทะเล ฉันเคยได้ยินตัวอย่างที่มีขนาดใหญ่อื่น ๆ แต่พวกเขาหลบเลี่ยงฉันในตอนนี้

นอกจากนี้ยังควรพิจารณาถึงความปลอดภัยด้วย ในขณะที่ปลั๊กอินของเบราว์เซอร์ Java ได้รับความเดือดร้อนจากช่องโหว่ด้านความปลอดภัยอย่างเป็นธรรมแพลตฟอร์ม Java เองก็เป็นหนึ่งในแพลตฟอร์มที่ปลอดภัยยิ่งขึ้นที่สร้างขึ้น เว็บแอปพลิเคชัน Java มีชื่อเสียงว่าปลอดภัยมาก มันเป็นวิธีปฏิบัติในการเข้ารหัสไลบรารีและสถาปัตยกรรมที่มีข้อผิดพลาดท้อแท้มานานซึ่งทำให้การโจมตีเช่นการฉีด sql หรือบัฟเฟอร์มากเกินความเป็นไปได้ ในขณะที่แพลตฟอร์มเว็บอื่น ๆ (ราง) มีชื่อเสียงด้านความปลอดภัยที่ดีไม่มีใครเกินกว่าจาวา

บรรทัดล่างสุดเว็บแอปพลิเคชันส่วนใหญ่ใช้งานง่ายในทางเทคนิค เพื่อความง่าย Java มักจะ overkill (เหมือนในสมัยก่อนเมื่อเราเขียนมันใน C :)) แม้ว่าเว็บแอพจะซับซ้อน (แบ็กเอนด์หรืออย่างอื่น) หรือคาดว่าจะมีนักพัฒนากว่า 100 ราย Java นั้นยากที่จะเอาชนะ

-

ในบันทึกส่วนตัวฉันใช้ Grails บ่อยๆเพราะมันให้สิ่งที่ดีที่สุดทั้งสองโลก (เช่นเดียวกันกับ JRuby ที่ฉันได้ยินว่ากำลังเป็นที่นิยมมากขึ้นในโลกทับทิม)

BTW - ฉันพบว่าการเพิ่มขึ้นของ PHP ทำให้ยุ่งเหยิงอย่างแท้จริง PHP เป็นภาษาที่เทียบเท่ากับ perl ในการอ่านและ VB ในคุณภาพของผลลัพธ์ มันสนับสนุนการปฏิบัติที่น่ากลัวติดกับเป็นไปไม่ได้ที่จะรักษาห้องสมุดของบุคคลที่สามไม่ค่อยทำงานตามที่คาดไว้และมีไวยากรณ์ที่จะขับ Larry Wall ขึ้น ... เป็น ... กำแพง คำอธิบายเดียวที่ฉันสามารถคิดในใจคือมันยืมตัวเองเพื่อการเรียนรู้ที่เพิ่มขึ้น (เช่น VB) กล่าวอีกนัยหนึ่งคุณสามารถทำสิ่งที่มีประโยชน์รู้น้อยมากเกี่ยวกับการเขียนโปรแกรม / การบริหารและคุณสามารถขยายความรู้ของคุณทีละน้อย มีหลายสิ่งที่ต้องพูดสำหรับเรื่องนี้จากมุมมองของการยอมรับ อย่างไรก็ตามสำหรับทุกคนที่ทุกคนต้องให้การสนับสนุนหรือแทนที่หนึ่งในพันล้านของแอป VB ที่เขียนโดย "โปรแกรมเมอร์" ในโลกธุรกิจ / mfg คุณอาจจะส่ายหัวและวางแผนเกษียณอายุของคุณ :)


3
สนใจที่จะอธิบายอย่างละเอียดเกี่ยวกับ "หนูรังที่ C # กำลังกลายเป็น" ชี้?
XåpplI'-I0llwlg'I -

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

38

เมื่อเร็ว ๆ นี้ฉันได้พบกับคนที่แต่งตัวประหลาด Java ที่ตื่นเต้นมากกับโครงการ Spring Data ใหม่เพราะมันใช้รหัสเพียงเล็กน้อยในการเข้าถึง CRUD ขั้นพื้นฐานไปยังฐานข้อมูลของคุณ

ฉันสามารถสร้างแอพพลิเคชั่น CRUD โดยใช้ Rails (ไม่ใช่แค่การเข้าถึง db แต่ดูและคอนโทรลเลอร์) ด้วยคำสั่งบางอย่าง

(ด้านบนสุดของหัวของฉัน: โครงการใหม่, 1 คำสั่ง scaffold ต่อเอนทิตี, 1 คำสั่งเพื่อย้ายฐานข้อมูล, 1 คำสั่งเพื่อเริ่มต้นเซิร์ฟเวอร์)

มันไม่มีอะไรเกี่ยวข้องกับภาษา แต่ทั้งหมดเกี่ยวกับเครื่องมือ และดูเหมือนว่าภาษาแบบไดนามิกมักจะมีเครื่องมือและกรอบงานที่เอาโค้ดสำเร็จรูปจำนวนมากออก (เพื่อชดเชยการขาด IDEs อันทรงพลังของเราที่สร้างหม้อไอน้ำสำหรับเรา)

นอกจากนี้ฉันรู้สึกว่าภาษาแบบไดนามิกมีแนวโน้มที่จะทำให้การเขียนเครื่องมือและกรอบดังกล่าวง่ายขึ้นมาก ฉันสามารถ grok รหัสสำหรับพูด Padrino หรือ Rails (ruby web frameworks) ได้ง่ายกว่าที่ฉันสามารถ grok รหัสสำหรับพูดกับ Spring Roo ได้ นี่อาจเป็นเพราะความจริงที่ว่าฉันรู้ทับทิมดีกว่าฉันรู้ว่า Java


24
ส่วนตัวฉันไม่ชอบภาษาแบบไดนามิก ภาษาแบบสแตติกทำให้ฉันทำงานได้มีประสิทธิภาพมากขึ้นเมื่อฉันเห็นข้อผิดพลาดทุกประเภทอย่างรวดเร็วใน IDE ของฉันและใช้เครื่องมือการปรับโครงสร้างใหม่ คุณควรดูPlay Frameworkเป็นกรอบเว็บ Java ที่ได้รับแรงบันดาลใจจาก Ruby on Rails และทำให้คุณทำงานได้อย่างมีประสิทธิภาพด้วย Java
Jonas

4
กรอบที่มีประสิทธิภาพเช่นเดียวกับรางก็หมายความว่าหากมีสิ่งใดที่ไม่ดีเกิดขึ้นคนส่วนใหญ่ก็ไม่สามารถแทนที่มันได้เพราะส่วนประกอบนั้นแน่นเกินไปกับกรอบ ในขณะที่สำหรับ java ถ้าฉันไม่ชอบ Hibernate ฉันสามารถใช้อย่างอื่นเช่น cayenne หรือ JPA
โคโยตี้ 21

2
ในขณะที่บางคนต่อสู้กับ Django ให้ฉันพูดว่า: Coyote21 ถูกต้องอย่างแน่นอน คุณสามารถเพิ่ม CRUD ขั้นพื้นฐานและไปได้ภายในห้านาที แต่ครั้งที่สองที่คุณเริ่มเพิ่มตรรกะทางธุรกิจ (เมื่อมีการอัปเดตระเบียนนี้จะต้องแทรกระเบียนในตารางนี้และ ... ) ใน CRUD คุณมีปัญหา .
asthasr

หากคุณอยู่ใน Rails แต่ต้องการ Java ให้ดูที่ Seam Forge ระวังมันใช้ JSF2 ซึ่งน่ากลัวมากที่ได้ทำงานด้วย แต่การปลอมตัวของตัวเองนั้นค่อนข้างดี
Craig Ringer

คุณสามารถสร้างแอพ CRUD ใน Java โดยใช้ Roo ในเวลาไม่กี่นาทีสิ่งเดียวกันกับ Grails (ไม่ใช่ Java อย่างแน่นอน แต่ก็ยัง JVM) Play 1.0 มีกำเนิด / นั่งร้านฉันสงสัยว่ามันไปที่ไหน ...
Eran Medan

24

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

ประสิทธิภาพความสามารถในการปรับขยายและความเสถียรนั้นลดลงเล็กน้อยในรายการลำดับความสำคัญ

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

ดังนั้นฉันคิดว่าสิ่งเหล่านี้เป็นสาเหตุที่ webstartups หลีกเลี่ยง java


12
การเข้าถึง db ที่ไม่เจ็บปวด? Spring JDBC หรือ Hibernate ทำงานได้ดี การจัดการสตริงที่ยอดเยี่ยม? อย่าคิดว่าการจัดการสตริงมีมากกว่า 5% ในโครงการใด ๆ ไวยากรณ์น้ำตาลหรือไม่ คุณหมายถึงอะไรโดยที่ กระบวนการวนซ้ำอย่างรวดเร็ว? Java มีมัน (Tomcat ภายใน Eclipse ไม่เจ็บปวด) Java เลิกแล้วหรือยัง? สิ่งเดียวที่ขาดหายไปคือคลาสที่ไม่ระบุชื่อรัดกุม / lambdas / ฯลฯ คุณสมบัติ "ความสนุก" ในภาษาอื่นมักจะทำให้สับสนและทำให้สิ่งต่าง ๆ ชัดเจนน้อยลง เงื่อนไขในการสลับ ... ใช่ฉันต้องยอมรับว่า sucks (แต่ส่วนใหญ่คุณควรใช้ enums)
alex

4
@alex: Syntax sugarJava ไม่สามารถใช้กับ DSL ได้ตัวอย่างเช่นไฟล์ config และเส้นทางของ Play ไม่ใช่ไฟล์ Java แต่อยู่ในรูปแบบไวยากรณ์ต่างประเทศซึ่งน้อยกว่าค่าตั้งและการตั้งค่าของ django ไม่มีความเข้าใจในรายการ; ประเภทข้อมูลที่สำคัญ (เช่นแผนที่รายการ) จะไม่ถูกนำเข้าตามค่าเริ่มต้น งี่เง่าหนึ่งคลาสต่อไฟล์ได้รับจริงๆในทาง; และ Java APIs มีแนวโน้มที่จะ verbose อย่างไม่จำเป็น นอกจากนี้คุณไม่สามารถใช้ enums เมื่อคุณสลับระหว่างสตริงที่คุณได้รับจากพารามิเตอร์ GET / POST
โกหก

4
@alex ที่น่าสนใจ ฉันมักจะใช้ยาชื่อสามัญทุกที่ใน C # - แม้ว่ามองจากภายนอกที่อาจเกิดจากการทำงานที่เพิ่มขึ้นของ lamdas - ดังนั้นผมจึงสามารถมีกับIRepository<T> IQueryable<T> Where(Expression<Func<T, Boolean> Expression)ฉันสงสัยว่าพวกเขาจะได้รับความนิยมมากขึ้นใน Java เมื่อมันได้รับ lambdas หรือไม่? มันอาจเป็นโซนที่สะดวกสบาย แต่ Java ก็รู้สึก verbose - และอย่างมากเช่นฉันได้รับบิตพอที่จะสร้างรถ 50 ประเภทที่แตกต่างกันโดยไม่มีการรับประกันใด ๆ 2 ส่วนจะเข้าด้วยกัน
พื้นฐาน

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

1
@Brandon ฉันจะสองที่ ฉันไม่เคยดิ้นรนกับปัญหาการตั้งค่าใน Node หรือ Python / Django ฉันหมดความอดทนกับ RoR รหัส Java ของเราเป็น Ant / Mvn / Spring / Hibernate / eclipse ซึ่งขึ้นอยู่กับว่าเป็นฝันร้ายที่ตื่นก่อนที่คุณจะได้รับรหัส
Erik Reppen

18

ตอนนี้ฉันทำงานใน บริษัท ที่มีนักพัฒนา "ฉันเกลียดชวา" มันใช้เพื่อทำให้ตกใจฉันด้วย แน่นอนว่าฉันเกลียดเทคโนโลยีที่มีอยู่ในจาวาทั้งหมด สิ่งนี้ทำให้การตัดสินใจยากเกินไป มันเหมือนเมื่อคุณมีตัวเลือกมากเกินไปคุณก็ไม่มีทางเลือก คุณต้องใช้เวลากับกรอบ 100 เพื่อสร้างกรอบที่เหมาะกับคุณจริงๆ สถาปัตยกรรม Servelt แบบมาตรฐานนั้นมีความซับซ้อนสำหรับการใช้งานส่วนใหญ่ นี่ไม่ใช่กรณีของ Ruby, Django และอื่น ๆ พวกเขาเป็นกรอบเดียวมากกว่าภาษา

ข้อร้องเรียนที่ใหญ่ที่สุดที่ฉันได้ยินจากนักพัฒนาซอฟต์แวร์

  1. ไวยากรณ์ยาวเกินไป เพื่อพิมพ์สิ่งที่เราต้องเขียน System.out.print คุณไม่สามารถใช้ VI อย่างง่าย ๆ เช่นตัวแก้ไขและเขียนโค้ดที่ใช้งานได้ในเวลาไม่กี่ชั่วโมง
  2. กรอบการทดสอบที่อ่อนแอ แม้ว่าเฟรมเวิร์กการทดสอบจะคล้ายกันมากใน Java และ Ruby แต่ Ruby ก็ยังคงก้าวไปข้างหน้าด้วยการทำให้สิ่งต่างๆพร้อมสำหรับการทดสอบได้อย่างง่ายดาย นี่เป็นเรื่องจริงโดยเฉพาะถ้าคุณใช้ฐานข้อมูลอย่างกว้างขวางในแอปพลิเคชันของคุณ แม้แต่เฟรมเวิร์กเว็บจำนวนมากก็ยังไม่ได้คิดถึงการทดสอบ
  3. แม่แบบเป็นสิ่งที่เจ็บปวด ทำให้ภาษาที่ค่อนข้างง่ายเป็นบะหมี่ซุป
  4. ไม่เจ๋ง แอปพลิเคชัน Java ส่วนใหญ่เขียนขึ้นใน บริษัท ขนาดใหญ่ซึ่งเกี่ยวข้องกับระบบราชการที่ไม่เป็นไปด้วยดีกับนักพัฒนา ผู้คนไม่คิดว่า Google เมื่อพวกเขาคิดว่า Java Google == Python มันต้องทำหลายอย่างโดยที่ไม่มีหนังสือออกมาบ่งบอกว่าทำ X ในวัน Y
  5. ไม่ชอบที่จะรวบรวม เพื่อรวบรวมนักพัฒนาส่วนใหญ่เป็นปรากฏการณ์เก่าทศวรรษ มันสมเหตุสมผลใน 80 ของกับ C แต่คอมพิวเตอร์ mordern สามารถทำอะไรได้มากกว่า พวกเขาไม่เขียนโค้ดในภาษาที่คอมไพล์แล้ว Java เป็นหนึ่งในไม่กี่ภาษาที่รวบรวมและใช้ในการเขียนเว็บแอปพลิเคชัน
  6. แนวคิดอุ๊ปส์มากเกินไป แม้ว่านักพัฒนาซอฟต์แวร์จะใช้โดเมนโอ๊ะโออย่างเงียบ ๆ พวกเขาไม่ชอบมันเต็ม พวกเขาไม่ชอบเมื่อคุณเขียนแอปพลิเคชันที่มี 10 คลาสในแต่ละชั้นเรียนทำสิ่งเดียว ช่วยให้คุณเปิดไฟล์ 100 ไฟล์และจินตนาการถึงปฏิสัมพันธ์ระหว่างคลาส 100 คลาสในบางครั้งด้วยกรอบงาน ทำให้กิจกรรมการเขียนโปรแกรมทั้งหมดเป็นงานที่น่าเบื่อ นี่อาจเป็นจริงกับภาษาส่วนใหญ่ แต่ฉันได้เห็นว่า Java Developers ให้ความสนใจอย่างมากกับสิ่งที่เรียนทำ นักพัฒนา Java มันมักจะมาพร้อมกับรหัสที่มี 100 คลาส นี่เป็นสิ่งที่ดีจากหลายมุมมอง แต่ผู้พัฒนาที่ไม่ใช่จาวาเกลียด

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


(2) ได้รับการแก้ไขอย่างน่าอัศจรรย์โดย JBoss Arquillian ( arquillian.org ) ที่เหลือเป็นจำนวนมากเป็นปัญหา JSF2 มากกว่าปัญหาของ Java ปัญหาที่ใหญ่ที่สุด IMO คือการเรียนรู้ช่วงเวลาและความบึกบึนของเฟรมเวิร์ก แต่ถ้าคุณหลีกเลี่ยง JSF2 คุณสามารถทำได้ดี
Craig Ringer

5
ฉันรัก OOP ฉันรู้ว่า OOP ด้วยเหตุนี้ฉันจึงไม่เห็นด้วยที่ส่วนใหญ่ของ Java devs กำลังทำมันมากเกินไป คุณสามารถเขียนคลาสได้ แต่ถ้ารหัสของคุณยังคงยุ่งเหยิงสปาเก็ตตี้ทุกสิ่งที่คุณทำก็แค่หาวิธี (beans) เพื่อเขียนโค้ดโพรซีเดอร์อึด้วยโครงสร้างไร้สาระที่ห่อหุ้มสิ่งที่อาจเป็นฟังก์ชั่นหรือโครงสร้างที่ดีที่สุด
Erik Reppen

2
"ผู้คนไม่คิดว่า Google เมื่อพวกเขาคิดว่า Java" ... ฉันคิดอย่างแน่นอนเกี่ยวกับ Android และ Dalvik VM ของพวกเขา (ซึ่งเป็น Java VM) เมื่อฉันคิดถึง Google ฉันยังคิดถึงสิ่งดีๆเช่น GWT (การสร้าง JavaScript อัตโนมัติจาก Java) หากมี บริษัท หนึ่งที่ "สูง" บน Java แสดงว่าเป็น Google มากกว่า Apple หรือ Microsoft จริงอยู่ที่ Oracle และ IBM นั้นมีความเกี่ยวข้องกับ Java มากกว่า Google แต่ก็ยัง: อุปกรณ์ Android หลายพันล้านเครื่องที่ใช้แอพ Java บน Java VM เป็นสิ่งที่ยากที่จะคิดโดยไม่ต้องสร้างลิงค์ Google / Java ที่แข็งแกร่งมาก
Cedric Martin

ความเกลียดชังต่อฟอร์ม JSF2 จำนวนมาก @CraigRinger ในความคิดเห็นเหล่านี้ :-) มันเกี่ยวกับอะไรที่ทำให้คุณโกรธ ฉันพบว่ามันซับซ้อนที่จะเริ่มต้นด้วย แต่เมื่อฉันไปฉันรักมัน แน่นอนว่าฉันใช้ Spring มาก่อนหน้านี้ดังนั้นสิ่งอื่น ๆ ที่จะดูเหมือนการปรับปรุง ... :-)
Brian Knoblauch

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

14

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

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

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


+1 สำหรับการวางกรอบมากเกินไป มันบ้า, ฤดูใบไม้ผลิ j2ee maven มดจำศีลคุณใช้เวลาทั้งหมดของคุณเขียนการกำหนดค่า XML
ริชาร์ด

1
+1 สำหรับกรอบงาน ไม่เพียง แต่เฟรมเวิร์กดั้งเดิมจะพยายาม P ** s Poor (JSP, STRUTS) ตอนนี้เรามีประมาณสามสิบแบบให้เลือกไม่ใช่แบบที่ทำงานและ RoR
James Anderson

มันไม่ใช่แค่กรอบ มันเป็นระดับที่สอดคล้องกับสิ่งที่ไม่สมเหตุสมผล การเปิดเผยคุณสมบัติมากมายหมายความว่าคุณทำผิด ตบวานิลลาทะเยอทะยานและ setter ที่เพิ่งเพิ่มการเรียกวิธีการที่ไม่มีจุดหมายและไม่มีอะไรเปลี่ยนแปลง แต่ Java dev จะไม่มีการห้อยคุณสมบัติออกจากวัตถุเช่นนั้นเพราะชุมชนตอกย้ำว่ามันผิดมากกว่าสิ่งที่พวกเขากำลังทำอยู่ แต่อย่างจริงจัง XML แทนสิ่งโค้ด ... มันใช้เวลานานกว่า 5 นาทีอย่างไร
Erik Reppen

14

มันมาลงที่ค่าใช้จ่ายและแนวโน้ม การเริ่มต้นใช้งานเว็บ 2.0 นั้นถูกสร้างขึ้นโดยผู้มีวิสัยทัศน์อายุต่ำกว่า 30 ปีซึ่งมีความสามารถมากกว่าเงิน เขากำลังจะใช้ภาษาที่เขาคุ้นเคยเพราะเขากำลังเขียนโปรแกรมอยู่ (รวมถึงเพื่อน ๆ ด้วย) เขาน่าจะเป็นโปรแกรมเมอร์ที่เรียนรู้ด้วยตนเอง

Java ได้รับการกำหนดเป้าหมายเป็นสภาพแวดล้อมขององค์กร (โดย Java ฉันหมายถึงภาษากรอบงานและมาตรฐาน) มีเครื่องมือราคาแพงมากมายที่ IBM, Oracles และ BEA ในโลกต้องการขายวิสาหกิจ

ขั้นตอนในการใช้ Java อย่างซับซ้อนและซับซ้อนหรือแพง ฉันรู้ว่าภูมิทัศน์มีการเปลี่ยนแปลง แต่มันสายเกินไปหรือไม่

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

ความรู้มาพร้อมกับประสบการณ์ แต่โปรแกรมเมอร์ที่ทุ่มเท / มีความกระตือรือร้นจะได้รับความรู้อย่างรวดเร็ว (โดยเฉลี่ย) มากกว่าคนที่ไม่มีความทุ่มเท / ความหลงใหล เหมือนเด็กที่รักการเล่นกีตาร์จะดีกว่าเร็วกว่าเด็กที่เรียนเพราะพ่อของเขาทำให้เขา


ฉันคิดว่านี่เป็นจุดที่ดีจริงๆ +1
sfrj

1
ฉันไม่เห็นด้วยกับย่อหน้าที่กล่าวว่า: เขาน่าจะเป็นโปรแกรมเมอร์ที่เรียนรู้ด้วยตนเอง นี่ไม่ใช่เรื่องจริงในปัจจุบันนี้คนส่วนใหญ่ในยุค 30 นั้นเป็นโปรแกรมที่มีความสามารถและมีระดับอย่างน้อยหนึ่งระดับ
โคโยตี้ 21

1
??? ฉันวาดภาพเริ่มต้นเว็บต้นแบบ ฉันไม่ได้พูดอะไรเกี่ยวกับพวกเขาที่มีความสามารถ คุณสามารถเรียนรู้ด้วยตนเองและมีความสามารถในเวลาเดียวกัน ฉันไม่แน่ใจว่าคุณไม่เห็นด้วย
Michael Brown

1
นี่คือคำตอบของฉัน Java เป็นเทคโนโลยีเว็บเดียวในปัจจุบันที่ไม่ได้ออกแบบมาเพื่อให้นักพัฒนาที่มีความสามารถสามารถหยิบมาใช้งานได้ ส่วนที่สองของคำตอบของคุณคือสิ่งที่ Paul Graham เขียนไว้ในThe Python Pardox
user16764

14

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

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

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

ฉันพยายามที่จะเรียนรู้ Java ความประทับใจครั้งแรกของฉันว่ามันยืดเยื้อมานานและก่อให้เกิดอุโมงค์ carpal นอกจากนี้การเริ่มต้นทำให้ฉันมีคำถามมากมายที่อาจเป็นเรื่องง่ายสำหรับทหารผ่านศึก Java OpenJDK หรือ Sun? โพงหรือกลาสฟิชหรือ นอกจากนี้ดูเหมือนว่าทุกบทนำของหนังสือ Java จะทำให้คุณเริ่มเขียนโค้ดสำหรับบรรทัดคำสั่ง ฉันคิดว่าคนส่วนใหญ่ในทุกวันนี้พบว่ามีการเฉลิมฉลองการงีบหลับ


3
ฉันจะใช้ตัวเลือกมากขึ้นและเพิ่มความซับซ้อนเล็กน้อยกว่าวิธีการในตัวของ PHP มากกว่า 9000
Kaleb Brasee

1
PHP นั้นง่ายต่อการติดตั้ง
Barfieldmv

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

เว้นแต่ว่าพวกเขาทั้งคู่จะมีกลิ่นเหม็น แต่มี PITA มากกว่าหนึ่งตัวที่จะติดตั้งมากกว่าตัวอื่น
Erik Reppen

12

ขณะนี้ทีมของฉันและฉันกำลังพัฒนาแอปพลิเคชันกรีนฟิลด์ใน Java 6 + Stripes ภายในปีที่แล้วฉันยังทำงานกับเว็บแอปพลิเคชันอื่นที่ใช้ Java 6 + Stapler (กรอบเว็บที่ไม่รู้จักที่พัฒนาโดย Kohsuke Kawaguchi จากชื่อเสียงของ Hudson / Jenkins)

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

เซิร์ฟเวอร์แอป Java ที่ทันสมัยมีการแข่งขันสูงกับ ASP.NET ในแง่ของประสิทธิภาพและทั้งคู่ต่างก็มีลำดับความสำคัญเร็วกว่า VM แบบภาษาที่ฉันรู้จัก

อย่าเข้าใจฉันผิด ... ฉันไม่ได้บอกว่า Java เป็นตัวเลือกที่ดีที่สุดเสมอ (ไม่ใช่จากระยะไกล!) - แต่ไม่ใช่ว่าจะเป็นตัวเลือกที่ผิดหรือ "ล้าสมัย" อยู่เสมอ


1
ฉันมักจะไม่เห็นด้วยกับ "เร็วขึ้น" ในทางทฤษฎีพวกเขาควรจะมี แต่มีบางเว็บไซต์ PHP ขนาดใหญ่ออกมีและเกร็ดเล็กเกร็ดน้อยเกือบทั้งหมดเกี่ยวกับปัญหาประสิทธิภาพที่เกี่ยวข้องกับ MySQql หรือฐานข้อมูลพื้นฐานอื่น ๆ ในทางกลับกันเกือบทุกแอพ J2EE ที่ฉันติดต่อมาต้องมีการปรับแต่งอย่างละเอียดก่อนที่ประสิทธิภาพจะเป็นที่ยอมรับ
James Anderson

1
@ James: คุณมีอะไรนอกเหนือจากเกร็ดเล็กเกร็ดน้อยที่คลุมเครือเพื่อสำรองข้อมูลหรือไม่ เว็บไซต์ทั้งหมด 10 อันดับแรกนั้นมีทั้งที่ทำงานบนแพลตฟอร์มที่มีการจัดการ (Amazon บน Java, Twitter บน Scala IIRC, Google บนแบ็กเอนด์ที่กำหนดเองของ Java และ C ++) หรืออื่น ๆ ที่พวกเขามีโครงสร้างพื้นฐานที่กำหนดเองสูง (Facebook และ Wikipedia ใช้ PHP แต่ พวกเขาทั้งสองมีรหัสเนทีฟแบบกำหนดเองจำนวนมากสำหรับความเร็ว) Java มีประสิทธิภาพเหนือกว่าภาษาแบบไดนามิกในเกณฑ์มาตรฐานเป็นประจำ ฉันไม่ใช่ Java ที่กระตือรือร้น แต่ประสิทธิภาพไม่ใช่ปัญหาของ Java
Daniel Pryden

ไม่มีปัญหาเกี่ยวกับประสิทธิภาพของ Java เอง "ไม่เร็วเท่า C แต่เร็วกว่าสิ่งอื่นใด" อย่างไรก็ตาม J2EE รวมถึงเฟรมเวิร์กรวมถึง ORM รวมถึงการฉีดพึ่งพาและการออกแบบ overkill เกือบจะรับประกันได้ว่าจะไม่ดำเนินการ มีโอกาสมากเกินไปสำหรับคอขวดที่ซ่อนอยู่และการปฏิสัมพันธ์ที่ไม่คาดคิด
James Anderson

1
@ พื้นฐาน: อะไรคือจุดของคุณ? มีไลบรารีและกรอบงานที่ใช้ไม่ได้สำหรับภาษาใด ๆ ใช่มีเอกสารที่สกปรกและล้าสมัยจำนวนมาก - แต่มันก็ไม่ค่อยแปลกอะไรเหมือนกัน ในทางกลับกันมีห้องสมุดกรอบและเครื่องมือสำหรับ Java ที่ยอดเยี่ยม คุณพยายามแนะนำอย่างจริงจังว่าควรมีกรอบการทำงานแบบ end-to-end เพียงหนึ่งเดียวสำหรับทุกแอปพลิเคชันใช่หรือไม่
Daniel Pryden

1
@Basic: ถอยหลังจากอะไร ในปีครึ่งหลังจากที่ฉันเขียนคำตอบนี้ครั้งแรกฉันได้ย้ายไปและกำลังทำงานที่ Google และฉันสามารถมั่นใจได้ว่า Java ใช้อย่างมากสำหรับการพัฒนาโปรแกรมประยุกต์บนเว็บที่ Google แน่นอนว่าความต้องการของ Google นั้นแตกต่างจากความต้องการของ บริษัท อื่น ๆ มากมาย แต่ Java เป็นสัตว์ร้ายที่แตกต่างไปจากเดิมอย่างสิ้นเชิงเมื่อคุณใช้ไลบรารีและกรอบงานที่ถูกต้อง - ตรวจสอบบางสิ่งที่ Google ได้เปิดแหล่งที่มา (Guava, Guice, GWT, โปรโตคอลบัฟเฟอร์ ฯลฯ )
Daniel Pryden

12
  1. Java มีความซับซ้อนในการเรียนรู้มากกว่า PHP / Python / Ruby
  2. ระบบนิเวศ Java มีความซับซ้อนมากใหญ่มากและค่อนข้างสับสนสำหรับผู้เริ่มต้น
  3. มีกรอบไม่ดีในอดีตจำนวนมากที่มีชื่อเสียงเชิงลบที่เกี่ยวข้องกับจาวาคุณต้องรู้ว่ากรอบใดที่จะหลีกเลี่ยงการเสียเวลาใน
  4. เครื่องมือสร้าง Java เป็นวิธีที่ซับซ้อน (maven & ant)
  5. Java ไม่มีระบบโมดูลที่ใช้งานง่าย (OSGI ซับซ้อนเกินไป)
  6. Java IDE เช่น Eclipse ในขณะที่ทรงพลังมากพร้อมคุณสมบัติที่น่าทึ่งนั้นยากที่จะกำหนดค่าสำหรับการพัฒนาเว็บที่มีประสิทธิภาพโดยไม่มีประสบการณ์มากมาย
  7. หากคุณกำลังใช้สิ่งอื่นที่ไม่ใช่ Tomcat หรือ Jetty เป็นเซิร์ฟเวอร์คุณจะต้องผิดหวังเมื่อเวลาเริ่มต้นที่ยาวนานของ WebSphere / WebLogic / JBOSS
  8. Java EE แก้ปัญหาที่หลายคนไม่มีเช่นธุรกรรมแบบกระจาย

นักพัฒนาใหม่ที่เข้าสู่การพัฒนามืออาชีพจะพบว่า Java ลำดับของ Magnitude นั้นหนักกว่ารางหลามหรือ php เพื่อไปด้วยดังนั้นพวกเขาจะไปกับสิ่งที่เรียนรู้ได้ง่าย

จากที่กล่าวมาทั้งหมดข้างต้นฉันได้ตัดสินใจที่จะใช้ Java สำหรับการเริ่มต้นของฉันเพราะสภาพแวดล้อมการพัฒนา Java ที่กำหนดค่าไว้อย่างเหมาะสมนั้นมีประสิทธิภาพในการทำงานมาก

  1. เวลาเริ่มต้นน้อยกว่า 10 วินาที
  2. เวิร์กสเปซ eclipse ที่กำหนดค่าไว้อย่างเหมาะสมพร้อมกับเฟรมเวิร์กทั้งหมดที่ถูก wrangled และตั้งค่า
  3. มีห้องสมุดให้เลือกมากมาย (Spring, Spring MVC, Spring Social, Spring Security, JPA, Hibernate, Velocity, .... ฯลฯ )
  4. เครื่องจักรที่พัฒนาอย่างรวดเร็วด้วย SSD
  5. การสมัครสมาชิก Orielly Safari

8
ขอให้มีความชัดเจนว่า ภาษา Java นั้นไม่ยากที่จะเรียนรู้ มันคือทุกชั้นของอึที่สร้างขึ้นโดยทำงานร่วมกับ Java เพื่อชดเชยข้อบกพร่องของมัน (คำฟุ่มเฟื่อยปกป้องคุณจากตัวคุณเองและเพื่อนร่วมทีมของคุณโดยไม่ยืดหยุ่นเหมือนการหลบหนีทั้งหมด เพื่อเรียนรู้
Erik Reppen

2
@ErikReppen จริงมาก ฉันต้องทำงานกับโปรเจ็กต์ Java แต่มีพื้นฐานใน. Net ภาษาและไวยากรณ์นั้นง่ายเหมือนที่ฉันเข้าใจ มันเป็นคำฟุ่มเฟื่อยที่ขับรถฉันถั่ว สิ่งที่ฉันใช้ใน 1 บรรทัดตอนนี้ใช้เวลา 5-10 และ (มัก) แก้ไขไฟล์กำหนดค่า XML ไม่ต้องพูดถึงว่าหากไม่มีการใช้เวลาหลายชั่วโมงในการอ่านการเลือกกรอบงาน "ที่เหมาะสม" สำหรับงานนั้นเป็นฝันร้าย - และนั่นคือก่อนที่คุณจะพบว่าสถานการณ์ของคุณได้รับการพิจารณาว่าเป็นกรณีที่ไม่ได้รับการสนับสนุน มันเขียนใหม่ ฉันต้องการที่จะใช้เวลาของฉันแก้ใหญ่ปัญหา
Basic

"Java เป็นที่ซับซ้อนมากขึ้น" - สามารถใครเคยจำคำสั่งพารามิเตอร์สำหรับของ PHP strposหรือin_array? และอินเทอร์เฟซ XML DOM ของ PHP นั้นไร้สาระ OSGi ยอดเยี่ยมและเป็นอิสระจากภาษาอย่างแน่นอน
jevon

@jevon: เอกสาร PHP นั้นดีมากและ IDE ของฉันก็อยากเตือนฉันอยู่ดี นอกจากนี้ SimpleXML
DanMan

12

ประมาณ 5 ปีย้อนกลับฉันและเพื่อนร่วมงานได้รับมอบหมายงานเขียนโปรแกรมสำหรับโครงการภายในบางอย่าง งานง่ายพอที่จะแยกคำสั่ง

ฉันมากับสิ่งทั้งหมดในประมาณ 80 บรรทัดของรหัสจาวาและเพื่อนร่วมงานของฉันใช้เวลาหนึ่งสัปดาห์ประมาณ 20 ชั้นเรียนจาวาและอีกหลายบรรทัดของรหัสจาวาเพื่อทำแบบเดียวกัน จำเป็นต้องพูดรหัสของเขาถูกเลือก

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

ตอนนี้มันเป็นความคิดหรือเพียงแค่ความเย่อหยิ่งที่ปฏิเสธความเรียบง่าย ฉันคิดว่าความรู้สึกทั่วๆไปควรจะมีชัย ไม่ว่าจะเป็นองค์กรหรือเว็บแอปพลิเคชันที่เรียบง่ายกรณีการใช้งานพื้นฐานก็เหมือนกัน ควรถูกต้องและตรวจสอบได้

ฉันไม่ใช้จาวาอีกต่อไปด้วยเหตุผลหลายประการ แต่หนึ่งในปัจจัย - ความซับซ้อนคือความคิดที่แพร่หลายในจาวา devs มากมายเมื่อพูดถึงการพัฒนาซอฟต์แวร์

สำหรับการปรับขนาดภาษาไดนามิก JVM เป็นผลมาจากการวิจัยหลายทศวรรษ มีหลายอย่างที่เกิดขึ้นเหมือนกันสำหรับ Ruby และอื่น ๆ

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

สำหรับ Ruby และ Rails นั้นเป็นสิ่งใหม่สำหรับการเริ่มต้นมันเป็นเรื่องยากมากที่จะจ้างผู้พัฒนา Rails ที่แข็งแกร่ง อันที่จริงมันเป็นอุปสรรคต่อการเริ่มต้นในขณะที่เหลือเฟือของจาวา devs ควรทำให้รู้สึกทางธุรกิจมากขึ้น


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

11

ในการสัมภาษณ์เมื่อเร็ว ๆนี้ Joseph Snarr หัวหน้าฝ่ายเทคนิคของ google plus อธิบายว่าแอปพลิเคชันใช้ Java Servlets สำหรับส่วนหลังและ JavaScript ที่ส่วนหน้าอย่างไร

ดังนั้นเพื่อตอบคำถามของคุณJava ยังคงใช้สำหรับการพัฒนาเว็บที่ทันสมัยมาก ไม่ใช่สำหรับการเริ่มต้นที่ได้รับการกดมากเมื่อเร็ว ๆ นี้

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


4
การเริ่มต้นใช้เทคโนโลยีอื่น ๆ เพราะพวกเขาต้องการที่จะทำมันตอนนี้ ไม่ช้า และพวกเขาก็ทำเสร็จแล้วโดยชอบ 3 คนไม่ใช่ 30.
Erik Reppen

การอ้างถึงบุคคลอาจให้มุมมองและตัวเลือกของเขาเท่านั้น แต่ไม่ได้ตรวจสอบว่าสิ่งที่ตนเลือกคือการตัดสินใจที่ถูกต้อง
DivKis01

9

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


9
ไม่ได้อย่างแน่นอน! จริงๆแล้ว Java เป็นภาษาที่โดดเด่นในโลกฝั่งเซิร์ฟเวอร์ แอปเปิลอาจจะดับไปเมื่อสิบปีก่อน
Chiron

5
Flash ทำในสิ่งที่ Applets พยายามทำ เริ่มต้นใช้งานอย่างรวดเร็วดาวน์โหลดอย่างรวดเร็วรอยเท้าหน่วยความจำเหลือน้อย

4
ฉันรู้จักผู้คนมากมายที่ไม่สามารถแยกแยะความแตกต่างระหว่าง Java กับ Javascript ได้ แม้ว่าพวกเขาจะไม่เกี่ยวข้องอย่างสมบูรณ์ นี่เป็นอีกสิ่งที่ทำให้ Java ชื่อไม่ดี
Kibbee

5
@Kibbee ... หรือให้ชื่อ Javascript ไม่ดี :)
Matthew Schinckel

9

คำถามควรเป็น "ทำไม Java จึงไม่ถูกใช้โดย startups หรือโครงการขนาดเล็ก" Java ใช้แน่นอนสำหรับ "เว็บแอปที่ทันสมัย" ที่ Google นั้น Java ใช้กับแบ็กเอนด์สำหรับบริการมากมายและการปิด JS หรือ GWT ที่คอมไพล์แล้วจะใช้สำหรับส่วนหน้า ปัญหาคือหนึ่งในความเร็วเทียบกับระดับ สตาร์ทอัพจำเป็นต้องได้รับผลิตภัณฑ์ที่มีศักยภาพขั้นต่ำ พวกเขามักจะเป็นทีมเล็ก ๆ ของวิศวกร 1-3 คนและให้ความสำคัญกับความเร็วในการทำซ้ำหรือการบำรุงรักษา การจัดการกับปัญหาความสามารถในการปรับขยายได้หรือปัญหาการบำรุงรักษารหัสของรหัสทีมเป็นปัญหา "ที่คุณต้องการ" นั่นคือเมื่อคุณมาถึงขั้นตอนนั้นมันเป็นสัญญาณของการเริ่มต้นใช้งานของคุณ การลงทุน คุณสามารถที่จะเขียนแอพใหม่ ณ จุดนั้น

บริษัท อย่าง Google สามารถให้ความสำคัญกับการสร้างสิ่งต่าง ๆ ให้สูงขึ้นได้แม้ว่าพวกเขาจะเสียเวลาในการปรับขนาดสำหรับสิ่งที่อาจไม่มีผู้ใช้เพราะพวกเขาสามารถดูดซับการสูญเสียได้

อย่างน้อยก็เป็นความคิดของฉันว่าหลาย บริษัท "เจ๋ง", "ฮิป", "ทันสมัย" สร้างแอพขนาดเล็กที่มีทีมเล็ก ๆ


1
แหล่งที่มาของคุณระบุว่าผู้เริ่มต้นไม่ได้ใช้ Java อยู่ที่ไหน โปรดสำรองสมมติฐานของคุณด้วยข้อเท็จจริงบางอย่าง
วอลเตอร์

7

เว็บแอปพลิเคชันแบบดั้งเดิมบน Java แต่มีโครงสร้างที่ดีนั้นอยู่ไกลจาก "การพัฒนาอย่างรวดเร็ว" มาก แม้ว่าฉันจะเคยเขียนเว็บแอปพลิเคชั่นเต็มรูปแบบเพียงตัวเดียว (Java / Tomcat / Struts) แต่มันก็พิถีพิถันอย่างมากใช้เวลานานกว่าที่คาดว่าจะทำการดีบักและโดยทั่วไปก็เจ็บปวดเมื่อใช้เลเยอร์ตรรกะทางธุรกิจ ในการป้องกันที่อาจเกิดขึ้นกับ Java มันเป็นเว็บแอปพลิเคชั่นเดียวที่ฉันเขียนใน Java (แม้ว่าฉันคุ้นเคยกับการเขียนโปรแกรมแอปพลิเคชันระดับระบบใน Java) และฉันเชื่อว่าฉันสามารถเขียนเว็บแอปพลิเคชันอื่นได้เร็วขึ้น

ต้องบอกว่าฉันยังได้เขียนแอปพลิเคชันใน PHP และ C # และพวกเขาทำงานได้ดีขึ้นและมีการให้อภัยมากกว่า Java ยิ่งไปกว่านั้น Ruby on Rails ถูกเขียนขึ้นเป็นพิเศษเพื่อการพัฒนาแอปพลิเคชั่นที่รวดเร็วอย่างที่ Robbie กล่าวว่าช่วยให้สามารถเข้าถึง CRUD ได้ง่ายไปยังฐานข้อมูล ปัญหาคือเว็บไซต์ส่วนใหญ่ที่คุณจะพัฒนาด้วยตัวคุณเองไม่จำเป็นต้องมีระดับของการปรับแต่งที่ Java นำเสนอ (และคุณต้องดำเนินการ) นอกจากนี้วัตถุการเชื่อมต่อฐานข้อมูลทุกชิ้นจะต้องเขียนด้วยมือและไม่ง่ายที่จะสร้างแม่แบบ อาจมีกรอบที่ดีกว่าโดยเฉพาะที่ใช้ประโยชน์จากคุณสมบัติการสนับสนุนภาษาแบบไดนามิกของJava 7แต่ฉันยังไม่ได้ทำการวิจัย


3
คุณควรดูPlay Frameworkเป็นกรอบเว็บ Java ที่ทำให้คุณทำงานได้อย่างมีประสิทธิภาพด้วย Java และได้รับแรงบันดาลใจจาก Ruby on Rails
Jonas

2
@ Jonas พิจารณาเขียนโพสต์บล็อกที่ดีอธิบายทั้งหมดนี้รัดกุม

@ Jonas สิ่งที่ Thorbjorn พูด! ฉันจะให้มันอ่านอย่างละเอียด :)
Brian

@ Thorbjørn: ฉันไม่มีบล็อก กล่าวโดยย่อ: ด้วย Play Framework คุณเพียงแค่บันทึกซอร์สโค้ด Java ของคุณแล้วอัพเดตเว็บเบราว์เซอร์ รหัสถูกคอมไพล์ฝั่งเซิร์ฟเวอร์โดยอัตโนมัติโดยใช้คอมไพเลอร์ Eclipse JPA ใช้สำหรับการเข้าถึงฐานข้อมูล นี่คือบทความเกี่ยวกับPlay! Framework Usability (Framework Usability)
Jonas

2
@ Thorbjørn & Brian: ดูวิดีโอบนหน้าแรกของเว็บไซต์เฟรมเวิร์กการเล่นมันอธิบายได้อย่างดีว่าฉันจะบอกว่า
Bjarke Freund-Hansen

7

คำตอบง่ายๆ: กราฟการเรียนรู้เพื่อผลผลิตพื้นฐาน

ระบบที่ใช้เฟรมเวิร์กเช่น RoR มักจะใส่ "เวทย์มนตร์" ในภาษา / ไวยากรณ์ มันง่ายมากที่จะเพิ่มทางลัดให้กับพื้นฐาน RoR ของคุณและรับแอพพลิเคชั่นไปเรื่อย ๆ

Java เป็นภาษาแรกและเครื่องมือและกรอบแสดงให้เห็นในภายหลัง ดังนั้นคุณต้องเรียนรู้ Java ก่อนจากนั้นคุณต้องเรียนรู้ Spring หรือ Grails หรือ IDE super ของคุณหรืออะไรก็ตาม ตัวอย่างที่ชอบของ Ruby ไม่จำเป็นต้องใช้ setters และ getters ความจริงก็คือ Java IDEs กำจัดการเข้ารหัสด้วยตนเองเช่นกัน ... แต่ก็ยังอยู่ในแหล่งที่มาของคุณ ประโยชน์ของวิธีนี้คือด้านล่างของกรอบมีภาษาที่สอดคล้องกับที่นักพัฒนา Java ทุกคนสามารถทำงานได้

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

แต่ถ้าคุณดูที่ Facebook และ Twitter ขณะที่ขยายพวกเขาพบสิ่งที่ไม่สามารถจัดการได้โดยกรอบนอกกรอบดังนั้นพวกเขาจึงต้องใช้เทคโนโลยีระดับล่าง

สงครามศักดิ์สิทธิ์นี้ที่นักพัฒนากรอบการทำงานให้พวกเขาสามารถทำอะไรได้เร็วกว่านั้นเป็นการหลอกลวงพวกเขาสามารถทำสิ่งที่พวกเขาต้องการได้ง่ายกว่าและมีช่วงการเรียนรู้น้อยลง และสำหรับหลาย ๆ สิ่งนั่นก็คือ "ดีพอ" ใช้สิ่งที่ถูกต้องสำหรับปัญหา


6

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


6

Google App Engine รองรับ Java เพื่อให้คุณสามารถเขียนเว็บแอปทั้งหมดของคุณใน Java โดยใช้ Eclipse เป็น IDE และส่วนต่อการปรับใช้พร้อมกับเอกสาร API ของ Google ที่สมเหตุสมผล - ดังนั้นฉันจะไม่บอกว่ามันไม่ได้ใช้หรือไม่ ใช้ได้


5

ในการเริ่มต้นฉันทำงานให้เราเลือกที่จะใช้ทั้ง Java และ JRuby เพื่อใช้ API ของเราเพราะพวกเขาเติมเต็มซึ่งกันและกัน

สำหรับโครงสร้างพื้นฐานการกระจายกระบวนการและการสื่อสารเราใช้ประโยชน์จากความแข็งแกร่งของ Java ในขณะที่การใช้งาน API ปลายทางที่แท้จริงเราเลือก JRuby เนื่องจากการโทรทั้งหมดเกี่ยวข้องกับ JSON และทำให้มีความรู้สึกมากขึ้นในการจัดการกับการแสดงแบบหลวม ๆ (JSON) พิมพ์ภาษา (Ruby)

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

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

กุญแจสำคัญคือการหลีกเลี่ยงสิ่ง Java EE ทั้งหมด - มันมีขนาดใหญ่และยุ่งยากและต่อต้านได้


5

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

ที่กล่าวแสดงความคิดเห็นคำถามเดิมทั้งหมด ...

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

มันเป็นกฎตายตัวของ Java เพราะมันมีมานานแล้ว (มันเกี่ยวข้องอย่างไม่ยุติธรรมกับเทคโนโลยีที่เก่ากว่าและไม่ได้รับการยอมรับสำหรับความสามารถ "ทันสมัย" ของมัน)? Java นั้นไม่เก่าจริง ๆ และมีการปรับปรุงให้ดีขึ้นอย่างมาก มันเป็นแพลตฟอร์มที่ยอดเยี่ยมและเกี่ยวข้องเมื่อประมาณ 10 ปีที่แล้ว แต่ตั้งแต่นั้นมามีแพลตฟอร์มใหม่ที่มีปัญหาใหม่ในใจเช่น Ruby on Rails ภาคหลักของ Java นั้นส่วนใหญ่เป็นโลกธุรกิจที่มีปัญหาแตกต่างกันดังนั้นผู้คนที่ค้นหาโครงการใหม่นอกที่มองหาเครื่องมือที่แตกต่างกัน นอกจากนี้ข้อได้เปรียบที่สำคัญของการออกแบบ Java ซึ่งเป็นมัลติแพลทฟอร์มก็ไม่ได้มีความเกี่ยวข้องเหมือนในทุกวันนี้

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

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

Java ใช้เฉพาะกับ บริษัท ใหญ่ที่ปรับตัวช้าเกินไปกับภาษาใหม่หรือไม่? การมีทีมผู้พัฒนา Java ที่มีอยู่แล้วใน บริษัท ทำให้สามารถใช้ภาษาเดียวกันกับโครงการใหม่ได้ง่ายขึ้น นี่คือการรับรู้ว่า "เดิมพันปลอดภัย" โดยเฉพาะอย่างยิ่งถ้าหลักของ บริษัท ไม่ใช่เทคโนโลยี แต่อย่างไรก็ตาม Java ไม่ได้ใช้เฉพาะกับ บริษัท ขนาดใหญ่เท่านั้นยังมี startups จำนวนมากที่ใช้ Java สำหรับสิ่งดีๆ (ตัวอย่างเช่นFightMyMonsterหรือSwrveใช้ Java อย่างกว้างขวาง) แต่ฉันบอกว่าแนวโน้มทั่วไปในการเริ่มต้น ฉากคือการใช้ภาษาอื่น นั่นเป็นวิธีการรับคนเนื่องจากคนส่วนใหญ่จะตื่นเต้นกับการทำงานกับ Ruby, Python หรือ PHP มากขึ้นว่าเป็น "มิตร" และ "สนุก"


5

สิ่งนี้เป็นจริง แต่ไม่ใช่เพราะของ Java และระบบนิเวศของมัน เป็นเพราะคนที่เมื่อใช้ Java มักจะสร้างความยุ่งเหยิงและสิ่งที่น่ารังเกียจอย่างหนัก

มีเฟรมเวิร์กเพียงพอ (spring-mvc, grails, play ฯลฯ ) ที่ให้คุณสร้างสิ่งต่าง ๆ ได้อย่างรวดเร็ว ความจริงที่ว่าผู้คน overengineer ระบบของพวกเขาเป็นปัญหาที่มาพร้อมกับความรู้ที่เพิ่มขึ้นที่คนได้รับเมื่อพวกเขาทำงานกับระบบนิเวศ Java - คุณรู้อีกหลายสิ่งและคุณมีให้ (มีเครื่องมือสำหรับทุกอย่าง) และ "ทุกอย่างดูเหมือน เล็บ "

หากคุณเป็น "แฮ็ค" คุณสามารถทำได้เหมือนกันกับ Java เหมือนกับภาษาอื่น ๆ และนี่คือการศึกษาที่ระบุว่า:

การศึกษาโปรแกรมเมอร์ 49 คน: ระบบแบบคงที่ไม่มีผลต่อเวลาในการพัฒนา ... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf


3

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

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

นอกจากนี้หากคุณไปกับ Linux และ PHP / Python / Ruby เครื่องมือและแพลตฟอร์มนั้นให้บริการฟรีและออกแบบมาเพื่อช่วยเหลือซึ่งกันและกัน ด้วย Java บางครั้งดูเหมือนว่าทั้งสองโลก (OS และ Java) บางครั้งดูเหมือนจะไม่สอดคล้องกับกันและกัน


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

3

ใครบอกว่าไม่ใช่

Spring MVC + Spring Data JPA หรือ Mongo + Thymeleaf สำหรับ templating + coffee-maven-plugin สำหรับ Coffee to JS transpiling และคุณพร้อมที่จะไป


ฉันเห็นด้วยกับคุณโดยสิ้นเชิง +1
Arshad Ali

3

หลายคนอาจเชื่อมโยงการพัฒนา Java และเว็บแอปพลิเคชั่นเข้ากับความน่ากลัวของ J2EE ซึ่งมาพร้อมกับแอพพลิเคชั่นเซิร์ฟเวอร์ J2EE ที่ยิ่งใหญ่จาก บริษัท ขนาดใหญ่สีฟ้าและสีแดงเทียบกับสัปดาห์ก่อนทำงาน "Hello World" พื้นฐาน

จริงข้อกำหนด JEE ล่าสุดและการใช้งานมีน้ำหนักเบา แต่ฉันยังคงคิดสามครั้งก่อนที่จะแนะนำอะไรเช่นนี้สำหรับโครงการพัฒนาอย่างรวดเร็วรอบสั้น

นี่ยังคงเป็นวิธีมาตรฐานในการพัฒนาเว็บแอปพลิเคชันใน Java ทางเลือกที่หลายคนกล่าวถึงในคำตอบอื่น ๆ นำเสนอภาพที่สับสนและสับสนมากขึ้นพร้อมตัวเลือกมากมาย

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


Java EE 6 อาจเป็น "น้ำหนักเบา" (ยกเว้นสำหรับ JSF2) แต่มันยังคงเป็นเส้นโค้งการเรียนรู้ขนาดใหญ่อย่างไม่น่าเชื่อสเปคขนาดใหญ่ที่ซับซ้อนและระบบชั้นที่ซับซ้อนอย่างมาก อาจจะเบา แต่ก็ไม่ง่ายนัก
Craig Ringer

2

ฉันคิดว่ามันถูกใช้งานมากกว่าที่คุณคิด - การใช้นั้นต่ำกว่าระดับน้ำ มีมากมายหลายทับทิมบนรางล้อมรอบหนาบริการ java แฟนซี โดยเฉพาะอย่างยิ่งเมื่อคุณเริ่มจัดการกับอะไรก็ตามที่เข้าใกล้ข้อมูลขนาดใหญ่ . .

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