Java neden modern web uygulamalarının geliştirilmesinde kullanılmıyor? [kapalı]


393

Profesyonel bir Java programcısı olarak, anlamaya çalışıyorum - neden modern web uygulamaları için Java'ya karşı nefret?

Günümüz web girişimlerinden nispeten daha küçük bir yüzdesinin Java kullandığı görülüyor (Java'nın genel popülaritesi ile karşılaştırıldığında). Bunun hakkında birkaç soru sorduğumda, genellikle "Tutkuyla Java'dan nefret ediyorum" gibi bir yanıt aldım. Fakat hiç kimse gerçekten kesin bir cevap veremiyor gibi görünüyor.

Ayrıca, bu aynı web başlangıç ​​topluluğunun Java geliştiricilerine olumsuz yönelttiklerini de duydum - yavaş ya da yaratıcı değil eski olduklarını ima ederek.

Sonuç olarak, temelde ne kaçırdığımı bulmak için Ruby / Rails'i almaya çalışarak zaman geçirdim. Ancak, öncelikle göreceli deneyim seviyelerimden dolayı, "Java kullanıyor olsaydım daha hızlı yapabilirim" diye kendi kendime düşünemiyorum.

Fakat aynı zamanda Java ile ilgili "eksik" bir şey görmediğim için aynı uygulamayı oluşturmamı engelliyor.

Bu beni sorularıma getiriyor :

Java neden modern web uygulamalarında kullanılmıyor?

  • Dilin zayıflığı mı?

  • Java'nın haksız bir klişesi mi çünkü çok uzun zaman oldu (eski teknolojilerle haksız yere ilgiliydi ve "modern" yetenekleriyle tanınmıyor)?

  • Java geliştiricilerinin negatif klişeleri çok mu güçlü? (Java artık sadece "havalı" değil)

  • Diğer dillerde yazılmış uygulamalar daha hızlı oluşturuyor, bakımı daha kolay ve daha iyi performans gösteriyor mu?

  • Java sadece yeni bir dile adapte olmak için çok yavaş olan büyük şirketler tarafından mı kullanılıyor?


142
Bence yanılıyorsun: hala kullanılıyor, sadece kaybedilmiş serin faktörü.

41
@Graham Lee: Java hiç hoş oldu mu? Bir şeyleri özlemiş olmalıyım. Sanırım soğuk kahve, ama soğuk? Bence asıl sebep, java'nın, özellikle kurumsal java çerçevelerinin, çok fazla üzerinde çalışılmasının ve halen üstlenilmesinin sağlanması. Hafif düşünemezsiniz, sadece onları kullanın çünkü platformun dağıtım / dengeleme / ölçeklenebilirlik özelliklerine ihtiyacınız var ve homojenlik için java ile yapılan ön uç için bir çerçeve kullanmak istiyorsunuz.
Falcon,

20
Belki, modern olmadığı için ? : P Ve Java hiç havalı değildi, çünkü programlamayı kesen kısmı attı.
back2dos

28
@Falcon Java ilk piyasaya çıktığında geri döndü, Sun Java'ya çok iyi bir iş çıkardı, hype haklı olsun ya da olmasın, bunun serin olması ya da olmayışıyla hiçbir ilgisi yok, bir çok güzel şey sebepsiz yere atılıyor.
Mahmoud Hossam,

11
@Falcon, Java EE 6'da JSF 2.0 ile web uygulamaları oluşturmaya ve deneyimlerinizle karşılaştırmaya bakmalısınız. Hoş bir sürpriz olabilir.

Yanıtlar:


174

Günümüz girişimlerinin mümkün olan en kısa sürede piyasaya çıkması gerekiyor. Java web uygulamalarını serbest bırakmak için yaklaşık altı ay harcamak zorunda kalmazlar.

Örneğin Twitter, Rails / Ruby kullanılarak oluşturuldu, ancak bir kez ölçeklenemez hale geldiğinde, JVM'ye geçti.

Geliştirme işleminin verimli olmadığından söz etmeyin: code -> derleme -> aşağıdaki gibi çerçevelerdeyken konuşlandırın (Rails / Django / Grails): test sunucusunu çalıştırın -> kod -> işleri değiştirin ve ne olduğunu görün.

İyi haber şu ki, JRebel kod değişikliklerini anında görmenize izin veriyor.


81
Oyun Çerçevesi , Ruby on Rails'e benzer, ancak Java içindir. Kod -> tarayıcınızı güncelleyin.
Jonas

34
Bazı yanlış anlamalardan kurtulmaya çalış. Java EE, Java sunucu tarafında, pek çok kişinin düşündüğü kadar tek şey değil.
Jonas

22
Facebook da benzer bir şey yapıyor. Kod tabanı PHP'dedir, ancak hız ve ölçeklenebilirlik sorunları nedeniyle, PHP'yi C ++ 'a derleyen bir derleyici (HipHop) yazmak zorunda kalıyorlardı. PHP'nin ne kadar harika olduğu ve PHP'nin ne kadar büyük olduğu ve tüm sitelerin etraflarında inşa edildiği hakkında konuşmaları komik, ama ne kadar verimsiz olduklarına baktığınızda, çoğu büyük kuruluş başka bir şeye geçmek zorunda. Doğru hatırlıyorsam, Craigs List, C / C ++ ile yazılmış çok fazla arka uç koduna sahiptir.
Kibbee

28
1) Eclipse kullanarak, derleme siz yazdıkça gerçekleşir ve nadiren farkedeceksiniz. Ayrıca, Tomcat'ı Eclipse içinde çalıştırmak bir uygulamayı bir saniyenin altında yeniden başlatabilirim. Uygulamalarımı yeniden başlatarak nadiren engelleniyorum 2) Gümüş mermi yok, millet. Ruby veya herhangi bir dil sizi 10 kat daha hızlı yapmaz. Java dev ile ilgili sık sık zaman sıkışık, ancak ne yaptığınızı biliyorsanız, bir projede <10 dakika içinde çalışabilirsiniz.
alex

5
Java ve diğer herhangi bir statik dilin, iki büyük avantajı vardır; neredeyse endişesiz ücretsiz yeniden düzenleme ve dokümantasyon olmadan API keşfi.
Eran Medan

136

Deneyimlerime göre, web uygulamaları için Java, küçük uygulamalar için çok azdır. Örneğin bir veritabanı tablosuna sahip basit bir blog, blog girişlerini tutar, örneğin, çok daha basit bir şey yapılabilir.

Java'nın genellikle daha büyük web uygulamalarında (düşünce bankaları ve sigorta şirketleri), diğer ana sistemlerle (anabilgisayar arkaplanları ve veritabanları ve akran web hizmetleri arka plan toplu işlem sistemleri gibi) iletişim kurduğunu çok daha iyi yaptığını gördüm. hepsi aynı uygulamada).

Gördüğüm kadarıyla, bir JavaEE web uygulamasının mimarisi, genellikle küçük / basit web uygulamaları için gerekenden daha fazlasını gerektirir.


5
"Küçük" uygulamalar için, (bu "standart" ve şirket kullandığı için) mecbursanız, Websphere gibi canavar uygulama sunucuları ile çalışmak zorunda olursanız, örneğin Tomcat'ten yeterince sık olmamakla birlikte, bu daha doğrudur. .. Neden ah neden bu berbat yönetim konsolu ile çalışmak zorundayım? Sigh ...
Jalayn

7
@ Jalayn: Tecrübelerime göre, A takımı için yönetici WebSphere, B takımı için Tomcat, C takımı için Glassfish (ya da başka bir şey) yerine yalnızca bir uygulama sunucusu programını sürdürmek istiyorlar. Ben de hissediyorum, ama evet, bu benim için de sinir bozucu.
SinirliFormsDesigner ile

3
Bu, Java EE için geçerlidir, ancak şimdi Java web uygulamalarınızı Ruby on Rails kadar hafif ve üretken kılacak Play Framework vardır.
Jonas

9
Yeni Java 6 EE - özellikle web profili - bazı basit webapps'lere izin verir.

4
@ ThorbjørnRavnAndersen Uygulama basit olabilir, ancak çerçeveyi anlamak değil, ne de Ant veya Maven gibi ana araçları anlamak değildir. Bir aceminin öğrenme eğrisi kocaman ve iç içe geçmiş kısaltma çorbası katmanlarıyla dolu, gözlük (örneğin JAX-RS) ve impls (örn. Jackson) ve daha fazlası arasında karışıklık var. Yaptığınız şeyi gerçekten anlamak istiyorsanız, basit bir şey yapmak KADAR karmaşıktır.
Craig Ringer

135

Java web uygulamalarını, 10 yıl önce python'a geçmeden önce 10 yıl boyunca programladım. Python kullanarak daha üretken olduğumu ve daha kısa sürede çok daha fazlasını yapabileceğimi hissediyorum ve dürüst olmak gerekirse, python'da geliştirdiğimde daha mutlu oluyorum. Python'un kişisel deneyimlerime dayanarak Java'dan daha iyi olduğunu düşündüğüm nedenlerden bazıları:

Web Altyapıları:

Java'da web uygulamalarını ilk programlamaya başladığımda Struts az önce çıktı ve harika değildi, ama mevcut en iyi şeydi. Bir sürü payanda uygulaması ve birkaç tane başka çerçevede yarattım. Ne zaman yeni bir çerçeve ortaya çıktıysa (Goblen, Wicket, GWT, şerit, grails, AppFuse, Play, RichFaces, Bahar, vb.), Denemeye çalışırdım ve daha iyi olup olmadığını görürdüm ve çoğu zaman sadece biraz daha iyiydi ve bazen hiç iyi değil. Oyun çerçevesinin doğru yönde bir adım olduğunu söylemeliyim.

Piller dahil değildir:

Java'nın en sinir bozucu kısımlarından biri, kullandığınız kitaplıkların çoğunun java dahil olmadığı, apache commons gibi yerlerden bir sürü 3. parti kitaplık eklemek zorunda olmanızdı. Başka bir büyük kütüphane ile hazırda bekletme gibi bir şey kullanırsanız, hazırda bekletmenin bir kavanozun bir sürümüne, başka bir şeyin de başka bir sürüme ihtiyaç duyduğu Jar bağımlılık cehennemine uğrarsınız. Jar dosyalarını yanlış sırada yüklerseniz, şansınız kalmaz. Bağımlılıklarınızı yönetmek için maven ve ivy gibi araçlara bağımlı olmanız gerekir ve bu sadece projenizin daha büyük olmasıyla sonuçlanan projenize daha fazla bağımlılık getirir. En basit web uygulamaları için bazı savaş dosyalarım 100MB + savaş dosyalarım oldu.

Çok fazla seçenek:

Bazı nedenlerden dolayı aynı şeyi Java'da yapmanın çok farklı yolları var gibi görünüyor. Vikipedi'ye göre ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) ve 23 farklı ORM'nin ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software# Java ) sadece birkaç örnek vermek için. Diğer dillere bakarsanız daha makul bir numaraya sahip olurlar. Bazı insanlar çok fazla seçeneğe sahip olmanın iyi bir şey olduğunu düşünüyor, ancak geliştirici topluluğunda çok fazla boşa harcanan bir çaba değil, herkes aynı tekerleği yeniden icat ediyor ve sahip olduğunuz dile yeni bir kişiyseniz seçilecek çok fazla seçenek var.

Uygulama sunucuları:

Java web uygulamaları gerçekten ağırdır ve çalışması için çok fazla kaynak gerektirir. Özellikle hafızada açlar. Herhangi bir yazılım parçası gibi, kaynak izlerini azaltmak için ayarlanabilirler, ancak diğer dillere kıyasla kutudan çıkan ayarları korkunçtur. Geçmişimde weblogic, websphere, Jboss, tomcat ve jetty kullandım. İlk üçünü sadece EJB'leri kullanmak zorunda kaldığımda kullandım, ancak EJB'leri kullanmasanız bile büyük uygulama sunucularıydılar ve yapılandırılması ve doğru şekilde çalışması zor oluyordu. Tomcat ve Jetty'nin kurulumu çok daha iyi ve daha kolay, ancak yine de kaynak domuzları.

Uygulama Barındırma:

Kendi sunucunuzu çalıştırmıyorsanız, java uygulamalarınız için paylaşılan barındırma hizmetini makul bir fiyata bulmak gerçekten zor. Asıl sebep, java uygulamalarının diğer dillere kıyasla çok daha fazla bellek gerektirmesidir, bu nedenle paylaşımlı bir barındırma sağlayıcısının aynı yerde 5 php siteyi çalıştırabildikleri zaman bir java sitesi çalıştırarak değerli RAM'lerini harcamak mantıklı olmaz. Bu, java hosting sunan daha az sağlayıcı olduğu anlamına gelir, bu da web sitenizi çalıştırmak için daha yüksek maliyet anlamına gelir.

Geliştirme Zamanı:

Java'da geliştiğim zaman kendimi daha yavaş buldum ve pitonda ne yapabilirim. Bir değişiklik yapmam, derlemem, yeniden konuşlandırmam ve sonra test etmem gerekiyor ve bu yinelemeli süreci yavaşlatıyor. Bunu daha hızlı yapmanın yolları olduğunu biliyorum, ama en iyisi bile, pitonda yapabileceğimden daha yavaş hissettim.

Python'da aynı şeyi yapmak için daha az kazan kodu da var, bu yüzden kodu geliştirmek için daha az zaman harcıyorum.

Java sadece birçok parçada kendini geliştirmiş hissediyor, API'lerin ve arayüzlerin çoğu yapmak istediğin şey için karmaşıklaşıyor. Ve herkes ve erkek kardeşleri bir java mimarı olduklarını düşünüyorlar ve bu da kullanımı ve geliştirilmesi zor olan büyük karmaşık sistemlere yol açıyor.

IDE:

Java'da gelişirken, IDE'ye sıkışmış hissettim, onsuz kayboldum. IntelliJ, piyasadaki en iyi IDE'ler ve python'a geçiş yapmak zordu çünkü python için böyle bir şey yoktu. Bu yüzden IDE yerine sadece normal bir metin editörü olan textmate kullandım. İlk başta zordu, ancak sadece bir metin editörü olduğundan, gerçekten hızlı ve duyarlı bir uygulamaydı. Tüm projemi birkaç saniye içinde açabilirim, oysa IDE'de bir proje açmak istediğimde, bir ton RAM'e sahip bir makineyle bir dakika veya daha fazla sürebilir. IntelliJ yapımcıları pycharm adlı bir python editörü ile çıktılar, ilk çıktığında aldım ve harika. Ama fark ettim ki python için bir IDE'ye ihtiyacım yok, bir metin editörüyle iyiyim. Zaman zaman yapmak zorunda olduğum Java web uygulamaları üzerinde çalışmaya başladığımda, metin düzenleyiciyi kullanmaya çalışıyorum, ancak henüz tam olarak uzmanlaşmadım. Kişisel olarak Java için IDE'ye daha çok ihtiyacım var çünkü bir şeyi karıştırırsam yeniden derlemek ve yeniden konuşlandırmak daha uzun sürüyor, bu da beni yavaşlatıyor.

ORM:

Hibernate'i ORM olarak ilk kullanmaya başladığımda, harika olduğunu düşündüm, sorunları vardı ve mükemmel değildi, ama daha önce yaptığımdan daha iyiydi. Django’nun ORM’iyle bir python projesinde başvuru yapana kadar, ve gözlerimi açan bir ORM’nin çalışması gerektiği için mutluydum. Bu projeden sonra kış uykusuna döndüm ve kendimi hayal kırıklığına uğrattım ve Django'nun ORM'sine geri dönmek için can atıyordum. Bir başka büyük piton ORM, Django'nun ORM'sine benzeyen fakat biraz farklı olan bir sqlalchemy'dir. ROR’un ORM’iyle sınırlı bir deneyime sahibim, fakat hatırladığım kadarıyla da oldukça iyiydi.

Şablonlar:

Java'daki web şablonlama sistemleri o kadar iyi değil ve sanırım hepsini denedim (fayans, freemarker, hız vb.). Birçoğu sadece temel işlevsellik sunar ve çalışmak için acı vericidir. Python tarafında iki favorim Django şablonları ve Jinja2, şablon motorda ihtiyacım olan her şeye sahipler ve kullanımı gerçekten çok kolay.


10
Birçok konuda seninleyim ama bazılarıyla ilgilen. Derleme / test döngüsü : Eclipse'in dinamik web modülünü ve / veya JRebel'i kullanın ve bitti; harika. Ağırlık : JBoss AS 7 oldukça hafif ve hızlı. EE istemiyorsanız, zar zor bile olsa Tomcat veya Jetty kullanabilirsiniz. Test : Arquillian, HERHANGİ bir dilde kullandığım en iyi test aracıdır, ancak kullanılabilir olması için yeterince olgunlaştı. Bağımlılık cehennemi : Sadece Maven kullanın; JAva'nın standart ve zorunlu bir parçası olmalıdır.
Craig Ringer

Yukarıdakilerin hepsinin "piller dahil değildir" sorununa neden olduğunu ve bunun çok büyük bir sorun olduğunu unutmayın. Java EE, uygulamanızı oluşturmak için kendi çerçevenizi oluşturmanız gereken bir alt çerçevedir. Çok verimsiz. Her araç aynı zamanda korkunç bir sorun yaratır ve JSF2, geliştirici verimliliğini tamamen ortadan kaldıran bir araçtır.
Craig Ringer

2
Ayrıca kritik bir noktayı kaçırdığınızı düşünüyorum: Öğrenme eğrisi ve böcekler işleri gerçekten yavaşlatıyor.
Craig Ringer

@CraigRinger Tutulmanın dinamik web modülünü veya JRebel'i kullanmadım, bu yüzden haklısınız, gitmiş olabilir.
Ken Cochrane

2
IntelliJ'den hoşlandıysanız, PyCharm'i deneyin - aynı çekirdeğe dayalı.
Tamlyn

94

Başlatan Ups parlak istiyorum. Parlaklık ne olursa olsun: RoR, Groovy, Grails, PHP ile OOP, Foobar, Wibble, Narf, vb.

Kurumsal istikrarlı, güvenilir ve ölçeklenebilir istiyor: Java ve .NET bu faturaya uyuyor (doğru yapıldığında).

Güncel iş: Finansal Hizmetler. Platform: ColdFusion (aslında bir Java Etiket Kütüphanesi) ve Java.

Önceki konserler:

  1. Eğitim Test Hizmetleri - ColdFusion
  2. Yüksek Riskli Sigorta - ColdFusion ve Java
  3. 401k - ColdFusion ve Java
  4. Seyahat Etme - Java w / dahili ColdFusion uygulamaları
  5. Menkul Değerler - ColdFusion (Java öncesi sürüm)

Bunların hepsi yüksek hacimli, yüksek güvenlikli sitelerdir. Bu şirketlerin hiçbirinde hiç kimse PHP'yi düşünmedi, bazıları RoR'a baktı ve çok fazla konu gördü. 401k şirketinin, yetenekli geliştiricilere sahip bir .NET uygulamasını çalıştıran bir kardeş şirketi vardı, uygulama her hafta çökmeye devam etti. Sonunda onu Java'ya dönüştürdüler ve istikrar kazandılar.

Java'ya bakan tek kişi, onunla ilgili gerçek veya hiç tecrübesi olmayan ya da kötü uygulamalara karışmış ve şimdi utangaç olanlardır. Parlak olanları görüyorlar ve bütün havalı çocuklar kullanıyorsa, neden ben olmasın?


23
"401k şirketin, yetkin geliştiricilere sahip bir .NET uygulamasını çalıştıran bir kardeş şirketi vardı, uygulama her hafta çökmeye devam etti. Sonunda onu Java'ya dönüştürdü ve kararlılık kazandı." Lol :), tam tersini duydum.
Den

12
Tabii ki var. Web uygulamaları için kod yazmaktan daha fazlası var, sunucularınızı nasıl ayarlayacağınızı, optimal SQL yazmayı vb. Bu şirketin 2 tane .NET yazılımı vardı ve gerçek bir sunucu yöneticisi yoktu. Birlikte olduğum şirketi satın alan şirket de anlaşmada bu uygulamayı aldı. Onlar büyük bir Java dükkanıydı ve bu nedenle istikrarı sağlamak için daha fazla kaynağa sahiplerdi.
Adrian J. Moreno

48
Bana bu cümleyi sebep ve sonuç olarak yazdığın için utanç verici görünüyor. Java'ya dönüştür = istikrar kazancı? Hepimiz biliyoruz nedeni bu değil. Ayrıca, tüm bu ColdFusion deneyimi için özür dilerim;)
Ürdün

3
Çok adil olun, yatırımcılar yılın lezzetini görmek isterler. Ancak hala kişisel olarak, yüksek kaliteli Java geliştiricilerini bulmak kolay olmayan kısıtlamalarla prototip geliştirme için daha kötü bir seçenek düşünemiyorum.
Erik Reppen

9
Bulunması kolay olmayan çok yüksek kaliteli Java geliştiricileri - Gerçekten.
luis.espinal

73

FrustratedWithFormsDesigner'ın cevabına bir ek : Sorunuzun daha küçük sitelere daha fazla hedef aldığını tahmin ettiğimden, birçok insan için göz önünde bulundurmanız gereken önemli bir husus var: Hosting PHP için her yerde ama Java veya ASP siteleri için daha zor. Ancak bu, bu dillerin bir kusuru değildir.


Bence bu değişmiş olsa da, artık ücretsiz olarak GAE'de Java web uygulamalarını barındırabilirsiniz.
Mahmoud Hossam,

Java barındırma için +1. Her ne kadar ASP.Net'i bulmak zor olmasa da ucuz. Paylaşılan ASP.Net hosting için ayda 8 $ ödüyorum. Öte yandan, Java'da bir site kurmayı denemek istedim ve Java çalıştıran bir paylaşılan ana bilgisayar bulamadım ve bir VPS kullanmak zorunda olmak bir öğrenme projesi için beni ilgilendirmiyor.
Jetti,

9
Bunun için +1. PHP için bir sunucuda birçok siteyi barındırmak Java için olduğundan çok daha kolaydır ve buna ek olarak PHP için ucuz web barındırma çözümleri bulmak çok daha kolaydır.
Jonas

Haklısın @Mark, düzeltildi.
sebastiangeiger


70

Java kesinlikle edilir Modern web uygulama geliştirme için kullandı. Özellikle web uygulama spektrumunun biraz daha büyük / daha karmaşık / ölçeklenebilir sonuna ulaştığınızda.

Modern, üretken araçlar ve çerçeveler ile ilgileniyorsanız, şunlara bir göz atın:

Ancak, JVM platformundaki en modern web geliştirme programının, doğrudan Java kullanmak yerine yeni JVM dillerinden birinde yapılması muhtemel olduğunu düşünüyorum , Java ile temel kütüphaneler ve arka uç altyapısı açısından omurgayı sağladı. Groovy ( Grails ), Scala ( Kaldır ve Oynat ), JRuby ( Raylarda JRuby ) ve Clojure ( Noir , Ring / Enlive + çok sayıda özel çerçeve) adında çok az sayıda web geliştirme var.

JVM'nin yeni dil alanında gerçekleşen tüm yeniliklerle, şahsen Java'nın sonunda "sunucu tarafı programlamanın kurucusu" olacağından şüpheleniyorum.


Vaadin, intranet ve büyük kurumsal uygulamalar oluşturmak için harika bir araçtır. Sanırım bir başlangıç ​​için uygun değil. Nasıl göründüğünü benimsemediğin sürece, çünkü onu değiştirmek çok zor.
naugtur

7
Kabul; Java EE 6, JSF2'yi bıraktığınızda ve aklı başında ve üretken bir şey kullandığınızda mükemmeldir. Öğrenme eğrisi yine de çok büyük .
Craig Ringer

1
Modern Java web çerçeveleri listenize, Tapestry5'i ( tapestry.apache.org ) ekleyebilirsiniz .
Neeme Praks

@CraigRinger JSF kolaydır.
Yorumunuz

@jwenting Eh, üç yıl oldu , bu yüzden belgeleme ve dış araçlar konusunda o zamandan bu yana biraz gelişti. Onunla çalışırken EE 6 yığını üzerinde Glassfish 3 ve AS 7'yi destekliyorsa korkunç, moreso sürünürdü .
Craig Ringer

41

Google, Amazon veya LinkedIn modern midir?

Java, modern web uygulamaları için kullanılır. Kurumun karşısına bakarsanız, web uygulamaları için en yoğun kullanılan dildir (dahili).

Bu, Java'nın bir dönemden geçtiğini, web geliştirme standartlarının herkese her şey olmaya çalıştığını söyledi (tartışmasız hala yapıyorlardı). "Kendini tekrar etme", Java web geliştirme sürecinin xml cehennemine ve uzun süren döngüsüne verilen bir cevaptı. Sonuç olarak, Java (EJB, Struts, JSF, vb.) Tüm yeni paradigmaların üstesinden gelmeye çalıştığı şey olarak ortaya çıktı.

Java, dil ayrıntılı. Bu bir profesyonel ve bir aleyhte (bakım için harika, dev için berbat). Kodlama zamanını büyük ölçüde azaltabilen (özellikler, olaylar, kapanışlar, jeneratörler, liste kavramaları, vb.) Henüz Java ile yapmayan bir dizi modern dil özelliği vardır. Dolayısıyla, daha modern bir dilden gelince sinir bozucu olabilir. Bununla birlikte, olgun bir dile C # 'nın girdiği fareler yuvası olmadan ekleme yapmak zor.

Modern web geliştirmede kullanılan birçok dil dinamik olarak yazılmıştır. Bu, kodu yazıldığı gibi dinamik olarak yeniden yükleyebilen bir takım oluşturmayı sağlar (statik bir dilde başarmak daha zordur - jrebel). Web geliştirme kendini hızlı yinelemelere borç verdiğinden, dinamik yeniden yükleme çok büyük bir kazançtır. Yeşil alan projelerinde gelişim döngüsünü önemli ölçüde azaltır ve UI ve UX'i doğru almayı kolaylaştırır (tabiatla deneme ve yanılma).

Statik dillerin de kendi yerleri vardır. Karmaşık, yıllarca çalışması gereken, sorunsuz ölçeklendirilmesi, çok hızlı olması ve tamamen hatasız olması için arka uç mantığı için statik olarak yazılmış diller (Java veya hatta C) tercih edilir.

Ek olarak, geliştirici sayımı / devirleri büyüdükçe ve ürünler olgunlaştıkça, böcek uçlarındaki havai fişeklere neden olan iyi niyetli kişilerin olasılığını artırır. İyi tasarlanmış bir Java projesinin (bu php vampirlere yönelik arayüzler, desenler ve kutsal sular :) zorladığı titizlik ve disiplin) uzun vadeli risklerin azaltılmasına yardımcı olur. Bu, ünite testi ile de sağlanabilir, ancak statik kontrolden (ve bulucu ve klan gibi statik analizörlerden) elde edilen güvenlik ağı, el yazısı testlerle çoğaltılması zor olan yerleşik bir kod kapsamı düzeyi sunar. Beni yanlış anlamayın, birim testler ve fonksiyonel testler olmalı, ancak gerçek organizasyonlar asla% 100 kapsama elde edemezler. Kontrol ettikleri şey için, statik analizörler yapar.

Bu nedenle, bağımsız olarak geliştirilen kod bölümleri arasında karmaşık bir işbirliğinin olduğu büyük projelerde (kod boyutundan daha büyük olarak tanımlandığı gibi), Java gibi diller hala tercih edilmektedir. Örnekler, finansal brokerler (ameritrade), finansal borsalar (nasdaq, nyse, .net başarısızlığından sonra belki londra), çevrimiçi bankacılık (neredeyse hepsi), e-posta (google), açık artırma (ebay) gibi büyük / karmaşık web uygulamalarını içerir. , vb.

Performans ve ölçek perspektifinden bakıldığında hiçbir şey, web uygulamaları için ölçeklenebilirlik ve performansın birleşiminden (facebook'un uygulama bölümlemesini nasıl saydığınıza bağlı olarak) Java platformunun üzerine çıkamaz. Örneğin Twitter, başarısız balinayı denize geri koymak için Scala'daki Ruby altyapısının büyük bir kısmını Java VM'de yeniden yazmak zorunda kaldı. Başka büyük örnekler de duydum, ama şu anda beni harap ediyorlar.

Ayrıca güvenliği göz önünde bulundurmaya değer. Java tarayıcı eklentileri güvenlik açıklarındaki adil paylarına maruz kalsalar da, java platformunun kendisi oluşturulan en güvenli platformlardan biridir. Java web uygulamaları çok güvenli olma ününe sahiptir. Kodlama uygulamaları, kütüphaneleri ve mimarisi, sql enjeksiyonu veya tampon taşması gibi saldırıları mümkün kılan uzun cesareti kırılmış hatalara sahiptir. Diğer web platformları (raylar) iyi bir güvenlik ününe sahipken, hiçbiri Java'yı geçemez.

Alt satırda, çoğu web uygulamaları teknik olarak basittir. Basit bir şekilde, Java genellikle çok fazla abartılıyor (tıpkı eski günlerde olduğu gibi C de yazıyorduk :)). Bununla birlikte, webapp karmaşıksa (arka uç veya başka şekilde) veya 100'den fazla geliştiriciye sahip olması bekleniyorsa, Java'nın yenilmesi zordur.

-

Kişisel bir notta Grails'i çok kullanırım çünkü bana her iki dünyanın da en iyisini verir (aynı şey Ruby dünyasında daha popüler hale geldiğini duyduğum JRuby'nin söyleyebileceği söylenebilir).

BTW - PHP'nin yükselişini gerçekten şaşırtıcı buluyorum. Bir dil olarak PHP, okunabilirlik ve perl ile VB sonuçlarının kalitesindeki kaba eşdeğerdir. Korkunç uygulamaları teşvik eder, sürdürülmesi imkansızdır, 3. parti kütüphaneleri beklendiği gibi nadiren çalışır ve Larry Wall'ı duvarda kaldıracak bir sözdizimine sahiptir. Akla getirebileceğim tek açıklama, kendisini artan bir öğrenmeye (VB gibi) borç vermesidir. Başka bir deyişle, programlama / yönetim hakkında çok az şey bilerek yararlı bir şey başarabilir ve bilginizi bir anda küçük bir yığın olarak genişletebilirsiniz. Evlat edinme bakış açısıyla bunun için söylenecek çok şey var. Bununla birlikte, şirket / mfg dünyasında "programcılar" tarafından yazılmış milyarlarca VB uygulamasından birini desteklemek veya değiştirmek zorunda olan herkes için, Muhtemelen kafanı sallıyor ve emekliliğini planlıyorsun. :)


3
"C # 'nin hale geldiği fareler yuva" noktasında detaylandırmaya özen gösterir misiniz?
Xåppl''-I0llwlg'I -

1
'' Kendini tekrar etme '' dediğinizden emin değilim, xml cehennemi ve uzun süredir Java web geliştirme çevrimleriydi. ' DRY, çoğu zaman Java dışındaki dilleri kullanan Çevik toplulukta bir kavram olarak ortaya çıktı.
Jules

38

Son zamanlarda, yeni Spring Data projesi tarafından gerçekten heyecanlanan bir Java'yla tanıştım, çünkü DB'nize giden temel CRUD erişimini elde etmek için ne kadar az kod gerekiyor.

Birkaç komutla Rails'i (yalnızca db erişimi değil, görünümleri ve denetleyicileri) kullanarak bir CRUD uygulaması oluşturabilirim.

(Başımın üstünde: yeni proje, varlık başına 1 iskele komutu, veritabanını geçirmek için 1 komut, sunucuyu başlatmak için 1 komut.)

Dil ile ilgisi yok, her şey araçlarla ilgili. Ve dinamik dillerin, birçok kod kodunu kaldıran araçlara ve çerçevelere sahip olma eğiliminde oldukları görülüyor. (Bizim için kazan oluşturan güçlü IDE eksikliğimizi telafi etmek için.)

Ayrıca dinamik dillerin bu tür araçları ve çerçeveleri yazmayı çok daha kolay hale getirme eğiliminde olduğunu hissediyorum. Padrino ya da Rails (Ruby Web Framework) kodunu "Spring Roo" deyip kodlayabileceğimden çok daha kolay bir şekilde alabilirim. Bu Ruby'yi Java'yı bildiğimden çok daha iyi tanıdığım gerçeğinden kaynaklanıyor olabilir.


24
Şahsen ben dinamik dilleri sevmiyorum. Statik diller, IDE'mde tüm yazım hatalarını hızlıca görebildiğim ve yeniden düzenleme araçlarını kullandığımda beni daha üretken kılıyor. Play Framework'e bir göz atmalısınız, bu Ruby on Rails'den ilham alan ve sizi Java ile üretken yapan bir Java web çerçevesidir.
Jonas

4
Raylar gibi güçlü bir çerçeve de, eğer bir şey kötü uygulanırsa o zaman çoğu insan onu başka bir şeyle değiştiremez, çünkü o bileşen çerçeveyle çok sıkıdır. Java için, Hazırda Bekletme modunu beğenmezsem, örneğin Cayenne veya JPA gibi başka bir şey kullanabilirim.
Coyote21

2
Django ile savaşan biri olarak, şunu söylememe izin ver: Coyote21 kesinlikle haklı. Temel CRUD’u 5 dakikada başlatabilir, ancak iş mantığı eklemeye başladığınız an (bu kayıt güncellendiğinde, bu tabloya bir kayıt eklenmeli ve ...) CRUD’ya sorun yaşarsınız. .
Asthasr

Rails'e girip Java'ya ihtiyacınız varsa Seam Forge'a bakın. Dikkat edin, çalışmak için korkunç olan JSF2'yi kullanıyor, ancak Forge kendi kendine oldukça iyi.
Craig Ringer

dakikalar içinde Roo kullanarak Java CRUD uygulamaları inşa edebilirsiniz, (hala tam olarak değil Java, ama JVM) Grails ile aynı şey ... gerçi gittiği 1.0 jeneratörler / iskele, acaba etmişti oyna
Eran Medan

24

Java son yıllarda "kurumsal" olarak konumlandırılmıştır. Hangi bir başlangıçta ihtiyaç duyulanın yelpazesinin diğer tarafında. Web uygulaması geliştirmede 4 şeye ihtiyacınız var - ağrısız veritabanı erişimi, harika string manipülasyonu, sözdizimi şekeri ve uygulamanızın gerektirdiği küçük değişiklikleri yapmak için hızlı yinelemeli işlem.

Performans, ölçeklenebilirlik ve kararlılık öncelik listesinde biraz daha düşük.

Ayrıca Java kodlanması çok unununca bir dildir. Sadece dün bir switch ifadesinde string kullanmak için devrim niteliğinde bir yetenek elde etti. Ve javascript çok çılgınca bir dildir, bu yüzden ön uçunuzu geliştirdikten sonra javaya döndüğünüzde çok kısıtlı hissedersiniz.

Bu yüzden sanırım bu web startup'larının java'dan kaçınmasının sebepleri.


12
ağrısız db erişimi? Bahar JDBC veya Hazırda Beklet harika çalışıyor. Büyük dize manipülasyonu? Dize işleminin herhangi bir projede% 5'ten fazla olduğunu sanmayın. Sözdizimi şekeri? Bununla ne demek istiyorsun? Hızlı yinelemeli süreç? Java'da var (Eclipse içindeki Tomcat ağrısızdır). Java unfun? Eksik olan tek şey özlü anonim sınıfları / lambdas / etc. Diğer dillerdeki "eğlenceli" özellikler şaşırtma ve işleri daha az netleştirme eğilimindedir. Geçişli dizeler ... evet, bunun berbat olduğunu itiraf etmeliyim (ancak, çoğu zaman, enums kullanmanız gerekir).
alex

4
@alex: Syntax sugarJava, DSL için pratikte kullanılamaz, örneğin, Play'in config ve rotaları dosyası Java dosyası değildir, yabancı bir sözdiziminde django's settings.py ve urls.py'den daha az şey yapar; liste kavrama yok; önemli veri türleri (örneğin, haritalar, listeler) varsayılan olarak alınmaz; aptal bir dosya başına bir sınıf gerçekten yoluna giriyor; ve Java API'leri gereksiz yere ayrıntılı olma eğilimindedir. Ayrıca, GET / POST parametresinden aldığınız dizeler arasında geçiş yaparken enums'leri kullanamazsınız.
Yalan Ryan

4
@alex İlginç. Generikleri her yerde C # ile kullanma eğilimindeyim - dışarıdan baksam da, bu muhtemelen lamdaların artan işlevselliklerinden kaynaklanıyor - Böylece IRepository<T>bir tane alabilirim IQueryable<T> Where(Expression<Func<T, Boolean> Expression). Acaba Java'da lambda kazandığında daha popüler hale gelip gelmeyeceklerini merak ediyorum. Muhtemelen bir rahatlama bölgesi olayıdır ama Java sadece kendini çok iyi hisseder - ve sanki 2 parçanın birbirine uymayacağına dair hiçbir garanti vermeden 50 farklı araba türü üretecek kadar parça kullandım.
Temel

3
İki kişinin Eclipse’in içindeki Tomat’ın ağrısız olduğunu ve Java’nın geliştirilmesini verimli yaptığını iddia ettiklerini sanmıyorum. Her geliştirme döngüsünü çok daha hızlı hale getirdiğini biliyorum, ancak sürekli olarak yenileme, yeniden oluşturma, tomcat temizleme, yeniden dağıtma, yeniden başlatma ve Eclipse'i yeniden başlatma ve önceki adımları tekrarlama gibi günlük bakım gerektirir. Arabamın bu kadar bakıma ihtiyacı olursa, asla çalışmam.
Brandon

1
@Brandon bundan ikinciyi alacağım. Hiçbir zaman, bir zamanlar Node ya da Python / Django'daki config sorunu ile mücadele etmedim. RoR ile sabrımı kaybediyorum. Ant / Mvn / İlkbahar / Hazırda Bekletme / tutulma bağımlılığı bağımlı Java kod temeli kodumuz bile olmadan uyanık bir kabus.
Erik Reppen

18

Şu anda oldukça az sayıda "Java'dan nefret ediyorum" Geliştiricileri olan bir şirkette çalışıyorum. Beni de şaşırttı. Java ile kullanılabilen teknolojilerin tüm tehlikelerinden kesinlikle nefret ediyorum. Bu karar almayı çok zorlaştırıyor. Onun gibi Çok fazla seçeneğiniz olduğunda seçim şansınız yok. Sizin için işe yarayan çerçeveyi bulmak için 100'lü çerçevelerle zaman harcamanız gerekiyor. Standart Servelt mimarisi, çoğu uygulama için karmaşıklığı beklemektedir. Bu Ruby, Django ve benzeri şeyler için geçerli değil. Dilden çok, tek bir çerçeveden daha fazlasıdır.

Geliştiricilerden duyduğum en büyük şikayetler

  1. Sözdizimi çok uzun. Sadece bir şeyler yazdırmak için System.out.print yazmamız gerekiyor. Gerçekten basit bir VI benzeri editör kullanamaz ve birkaç saat içinde çalışan bir kod yazamazsınız.
  2. Zayıf test çerçeveleri. Test çerçeveleri Java ve Ruby'de çok benzer olsa da, Ruby test için kolayca kullanılabilir bir şey yaparak bir adım öne çıkıyor. Bu, özellikle uygulamanızda DB kullanıyorsanız geçerlidir. Web çerçevelerinin çoğu bile test etmeyi düşünmüyor.
  3. Şablonlar bir acıdır. Nispeten basit bir dili Erişte Çorbası haline getirir.
  4. Hiç hoş değil. Java uygulamalarının çoğu, geliştiricilere çok iyi gitmeyen Bürokrasi ile ilişkili büyük şirketlerde yazılmıştır. İnsanlar Java’yı düşündüklerinde Google’ı düşünmezler. Google == Python. Ayrıca Y günlerinde X yaptığını gösteren hiçbir kitap çıkmadan çok şey yapmalı.
  5. Derlemeyi sevmiyorum. Çoğu geliştirici için derleme on yıl eski bir olgudur. 80'li yıllarda C ile anlamlıydı ancak mordern bilgisayarlar çok daha fazlasını yapabilir. Derlenmiş dillerde kod yazmazlar. Java, web uygulamaları yazmak için derlenen ve kullanılan çok az dilden biridir.
  6. Çok fazla Oops Konsepti var. Geliştiriciler sessizce Oops alanını benimsemiş olsalar bile. Tam olarak sevmiyorlar. Her sınıfın tek bir şeyi yapmasıyla 10 sınıflı bir uygulama yazdığınızda hoşlanmıyorlar. 100'lerce dosyayı açmanızı ve 100'lerce sınıf arasında, bazen de çerçevelerle etkileşimi hayal etmenizi sağlar. Tüm programlama aktivitesini bir angarya yapar. Bu, çoğu dil için geçerli olabilir, ancak Java Geliştiricilerinin bir sınıfın yaptıklarına çok dikkat ettiğini gördüm. Sık sık 100'lerce sınıftan oluşan bir kod içeren Java Geliştiricileri. Bu pek çok açıdan iyidir ancak java geliştiricileri ondan nefret etmemektedir.

Bu yüzden hepsi Java'da projenin başlangıcında dik bir eğri uygular, bu da işlenemeyecek kadar para anlamına gelir. Buna, her biri farklı şekillerde düşünen ve tüm toplumu gerçekten önemsemeyen hiç kimsenin java’ya bağlı olmadığı büyük bir topluluk ekleyin. Ayrıca, toplumun yürüttüğü görüşmeleri ve konferansları tüm harika yeni şeyleri gösteren görmüyorlar. Yeni harika kitaplar yok. Görünüşe göre Java azalır çünkü birkaç yıl önce çok fazla farklı sorunu çözmek için kullanılıyordu.


(2) harikaları JBoss Arquillian ( arquillian.org ) tarafından ele alınmıştır . Geri kalanların çoğu Java sorunundan çok bir JSF2 sorunudur. En büyük sorunlar IMO, öğrenme eğrisi ve çerçevelerin aşırı derecede sıkıcı olduğunu öğreniyor, ancak JSF2'den kaçınırsanız iyi yapabilirsiniz.
Craig Ringer

5
OOP'u seviyorum. Ayrıca OOP'yi de biliyorum, bu yüzden Java devs'nin büyük çoğunluğunun çok fazla bir şey yaptığını kabul etmiyorum. Bir sınıf yazabilirsiniz, ancak kodunuz hala karışık bir spagetti karmaşasıysa, gerçekte yaptığınız tek şey, en iyi basit fonksiyonlar veya yapılar olabilir.
Erik,

2
"İnsanlar Java'yı düşündüklerinde Google'ı düşünmezler." ... Google’ı düşündüğümde kesinlikle Android’i ve onların bir Java VM olan Dalvik VM’lerini düşünüyorum. Ayrıca GWT (Java'dan otomatik JavaScript oluşturma) gibi harika şeyler düşünüyorum. Java’da "yüksek" bir şirket varsa, Google’dır. Apple veya Microsoft'tan çok daha fazlası. Verilen Oracle ve IBM, Java ile Google’dan bile daha fazla ilişkili ancak yine de: Java VM’inde Java uygulamaları çalıştıran milyarlarca Android cihazı, çok güçlü bir Google / Java bağlantısı kurmadan düşünülmesi zor bir şey.
Cedric Martin

Bu yorumlarda JSF2'nin @CraigRinger formuna yönelik bir çok nefret. :-) Seni rahatsız eden ne? Başlamak için karmaşık buldum, ama bir kez gittiğimde onu seviyorum . Elbette, ondan önce Spring kullanıyordum, bu yüzden başka bir şey bir iyileşme gibi görünecek ... :-)
Brian Knoblauch

1
Java'daki bir OOP Geliştiricisiyim ve geliştiriciler için OOP'un avantajlarını abartmıyorum. Evet, geliştirirken biraz daha fazla zaman alır, ancak düşük hata oranı, okunabilir ve kodunu korumak daha kolaydır. Unutmamak gerekir ki, düzgün bir şekilde yapılan OOP ile birim testinin kolaylaştığı söylenebilir.
IntelliData

14

Java web geliştirme yapmak için gereken çerçeveler oldukça fazla öğrenme eğrisine sahiptir, genellikle ihtiyaç duyduğunuz şey için fazla mazeret taşırlar ve işleri yürütmek için gereken dolaylı işlemlerin çoğu ... çalışmak için acı vericidir.

Spring / Java geliştirmesi yapan bir şirkette çalışıyordum ve en iyi çerçeveyi hantal buldum. Spring'in çerçevesi hakkında söyleyecek çok hoş şeyim yok, ancak Struts'u geliştiren bir arkadaşım vardı ve Struts'un daha da kötü olduğunu düşünüyordu. Web çerçevesi, masaüstü uygulamaları veya mobil (örneğin: android) uygulamaları yapmak gibi bir şey değildir ve gerçekten kavraması biraz zaman alan (ancak, kesinlikle, size çok fazla güç ve yetenek verir) çok fazla soyut fikirleri vardır. Bir profesyonel ve bir kurumsal sınıf uygulaması gibi gerçekten karmaşık bir şey yapıyorum). Java veya mobil cihazlar için programlama seviyorum, ancak web uygulamaları için java? Çok değil.

Ruby / Rails'de kişisel olarak herhangi bir program yapmadım, ancak Struts'u kullanan arkadaşım Ruby web programcılığını yapıyor ve Java web programcılığında yapılması zor olan şeylerin başarılması için çok daha az kod ve karmaşıklık gerektirdiğini kanıtlıyor Yakut. Farklı sözdizimi ve dil kurallarında kesinlikle bir öğrenme eğrisi var, ancak prototip uygulamaları için, istenen sonucu elde etmek için ne kadar kod gerektiğine dair avantajları var. Diğerlerinin de belirttiği gibi, ölçeklenebilirlik de dikkate alınması gereken bir konudur ve daha olgun uygulamaların daha fazla kalça dilinde sık görülmemesinin nedenlerinden biri.


Çerçeve aşımı için +1. Delirmek, bahar j2ee maven karınca kış uykusuna yatkın, tüm zamanınızı xml config yazarak geçirirsiniz.
Richard,

1
Çerçeve için +1. Yalnızca orijinal çerçeveler P ** nin Zayıf (JSP, STRUTS) girişimlerini yapmakla kalmadı, artık RoR kadar iyi çalışanlardan birini seçmemek için yaklaşık otuz kişiyiz.
James Anderson

Bu sadece çerçeveler değil. Mantıklı olmayan şeylere müstehcen uyumluluk seviyeleri. Çok fazla özellik göstermek, yanlış yaptığınız anlamına gelir. Bir vanilyalı alıcıyı ve alıcıyı sadece anlamsız bir yöntem çağrısı ekleyen ve hiçbir şeyi değiştirmeyen bir tokatlayıcı koymak, henüz hiçbir Java dev, böyle bir nesnenin özelliklerini sarkmayacak, çünkü topluluk zaten yaptıklarından daha yanlış olduğunu destekliyor. Fakat cidden, kod yerine XML yerine ... 5 dakikadan daha uzun sürdü?
Erik Reppen

14

Maliyetler ve eğilimler söz konusudur. Web 2.0 Startup, paradan daha fazla yeteneğe sahip 30 yaş altı bir vizyon sahibi tarafından yaratılıyor (elbette genelleştiriyorum ama "ortalama" olarak göreceğiniz şey bu). Aşina olduğu bir dili kullanacak çünkü programlamayı yapıyor (birkaç arkadaşla birlikte). Muhtemelen kendi kendini eğiten bir programcı.

Java bir işletme ortamı olarak hedeflenmiştir (Java ile dili, çerçeveyi ve standartları kastediyorum). Dünyanın IBM’in, Oracles’in ve BEA’larının şirket satmak istediği bir sürü pahalı araç var.

Java konusunda uzman olma adımları karmaşık ve / veya pahalıdır. Manzara değişiyor biliyorum ama çok geç değil mi?

Başlangıçta kazanımlar arttıkça çekişme büyüme gelir. Yetenekli geliştiricileri işe almak zordur. Çoğu "altı haftada programcı olun" programları Java'yı (veya .NET'i) öğretir ve pazar "altı hafta programcıları" ile doyurulur (garip bir şekilde yeterince geliştiricilerin, altı yılın bilgisini gösteren 7 yıllık deneyime sahip olduğunu söyleyerek devam ettiğini gördüm. hafta programcısı). Ana akım olmayan "enterprisey" olmayan bir ortam kullanılması, altı haftalık programcılar için doğal bir filtre olabilir. Bir iş gereksinimi dışında bir Ruby veya Scala öğrenmek için kendini adamak ve kişisel yatırım yapmak gerekir. Bu benim için bir aday potansiyelinin en büyük göstergesi .

Bilgi tecrübe ile gelir, ancak kendini adamış / tutkulu bir programcı bu adanmışlık / tutkusu olmayan birinden daha hızlı (ortalama) bilgi edinecektir. Tıpkı gitar çalmayı seven bir çocuk gibi, babası ona yaptırdığı için ders alan bir çocuktan daha hızlı olacak.


Bence bu gerçekten iyi bir nokta +1
sfrj

1
Paragrafla aynı fikirde değilim: O büyük olasılıkla kendi kendini yetiştiren bir programcı. Bugünlerde bu doğru değil, bugünlerde 30'lu yılların çoğu programı yetkili programcılar ve en az bir dereceye sahipler.
Coyote21

1
??? Prototipik web başlangıcını çiziyorum. Yetkin olmaları hakkında hiçbir şey söylemedim. Aynı anda hem kendinden hem de yetenekli olabilirsin. Neye katıldığına emin değilim.
Michael Brown

1
Bu benim cevabımdı. Java hemen hemen herhangi bir yetkili geliştiricinin onu alıp kullanabilmesi için tasarlanmamış tek güncel web teknolojisidir. Cevabınızın ikinci kısmı, Paul Graham'ın The Python Pardox'ta
user16764

14

Java çok karmaşık. Bir ton PHP işi yapıyorum ve çoğu durumda daha kolay ve daha hızlı. Bir sunucuya sadece SSH'yi açmak, php dosyasını açmak, değişiklikleri kaydetmek ve yapılması çok iyi bir şey. Çalıştığım birkaç Java uygulaması, en basit değişiklik için her zaman yeniden başlatmayı gerektirdi. (her zaman bunun neyle delirmiş olduğumun durum olduğunu söylemiyorum). Ayrıca PHP hosting ucuz ve hazır.

Ayrıca, en azından PHP ile sahip olduğunuzun, benden hoşlanan 14-15 yıl önce statik HTML ile başlayan bir çok geliştirici olduğunu düşünüyorum. İşler ilerledikçe sitelerimize PHP eklemeye başladık çünkü kolay, basit ve uygun fiyatlı oldu. Yıllar geçtikçe dil büyüdü ve genişledi, yetenekleri mütevazi başlangıçlarının ötesine geçti ve şimdi sandığım, aslında pek fazla şey olmadığını düşündüğüm şey olmak için çok çalışıyor.

Birçok PHP devs kapak tarafında ben Java biliyorum bu dev aşırı karmaşık 800lb goril, neredeyse bakkal aşağı sürücü ve bir somun ekmek almak için 18 tekerlekli yarı kamyon dışarı almak gibi.

Java'yı öğrenmeye çalıştım, ilk izlenimim çok uzun solgun ve karpal tünel uyandırıcıydı. Buna ek olarak, başlaması, muhtemelen bir Java gazisi için kolay görünen pek çok soruyla beni terk etti. Açık DJD veya Sun? Tomcat veya Glassfish veya? Ayrıca, Java kitabına her giriş, komut satırı için kod yazmanıza başlar. Bence bugünlerde çoğu insan bu erteleme şenliğini buldu.


3
PHP'nin 9000'in üzerinde yerleşik yöntemine göre daha fazla seçenek ve biraz daha fazla karmaşıklık alacağım.
Kaleb Brasee

1
PHP kurulumu çok kolaydır.
Barfieldmv

9
fakat sadece iyi kod yazmayı çok zorlaştırır ... kurulumu kolay, başlatması kolay, daha az sıkıcı bir dil seçmek için kullandığınız kriterler olmamalıdır. İyi programlama disiplini, sabrı ve çabayı gerektirir ... seçerken bunlara sahip değilseniz, bu kötü bir işaret ...
alex

İkisi de kokmadıkça ancak biri diğerine göre ayarlanan bir PITA'dır.
Erik,

12

Ekibim ve ben şu anda Java 6 + Stripes'te bir greenfield web uygulaması geliştiriyoruz. Geçen yıl içerisinde Java 6 + Stapler (Hudson / Jenkins ün Kohsuke Kawaguchi tarafından geliştirilen biraz bilinmeyen bir web çerçevesi) kullanarak Java 6 + Stapler kullanarak başka bir yeşil alan web uygulaması üzerinde de çalıştım.

Java kesinlikle modern web geliştirme için kullanılır. Elbette Ruby ya da diğer dinamik dillerin "seksi" çekiciliğine sahip değil, ancak bir proje ölçeklenmeye başladığında dinamik dillerin iyi bir şey olduğuna ikna olmaktan çok uzaktayım.

Modern Java uygulama sunucuları performans açısından ASP.NET ile oldukça rekabetçi ve her ikisi de bildiğim herhangi bir dinamik dil VM'sinden daha hızlı siparişler.

Beni yanlış anlama ... Java'nın her zaman en iyi seçenek olduğunu söylemiyorum (uzaktan değil!) - ama her zaman yanlış ya da "modası geçmiş" bir seçim değil.


1
"Daha hızlı" ile aynı fikirde değilim. Teoride onlar olmalı ama orada bazı büyük php siteleri var ve performans problemleriyle ilgili neredeyse tüm anekdotlar MySQql veya diğer temel veritabanlarıyla ilgilidir. Öte yandan, neredeyse her J2EE uygulaması, performans bile kabul edilebilir olmadan önce gerekli kapsamlı ayarlarla temas kurdum.
James Anderson

1
@James: Belli belirsiz fıkralardan başka bir şey var mı? En iyi 10 web sitesi ya yönetilen platformlarda çalışıyor (Java’da Amazon, Scala IIRC’de Twitter, Java ve C ++’ın özel arka yüzünde Google) ya da özel olarak tasarlanmış bir altyapıya sahipler (Facebook ve Wikipedia PHP kullanıyorlar, ancak Her ikisi de hız için büyük miktarlarda özel yerel kod var). Java, ölçütlerde düzenli olarak dinamik dillerden daha iyi performans gösterir. Java zealot değilim, ancak performans Java'nın sorunu değil.
Daniel Pryden

Java'nın kendisiyle "C kadar hızlı değil, her şeyden daha hızlı" performans sorunu yoktur. Bununla birlikte, J2EE, artı çerçeveler, ORM, artı bağımlılık enjeksiyonu ve fazladan fazla tasarımın gerçekleştirilmemesi neredeyse garantilidir; Gizli tıkanıklıklar ve öngörülmeyen etkileşimler için çok fazla potansiyel var
James Anderson

1
@Basic: Amacın nedir? Herhangi bir dil için çok sayıda kırık kitaplık ve çerçeve vardır. Evet, pek çok güvenilir ve güncel belge var - ama bu pek de sıra dışı. Tersine, Java için bazı harika kütüphaneler, çerçeveler ve araçlar var. Her uygulama için uçtan uca bir çerçeve olması gerektiğini ciddiye mi alıyorsun?
Daniel Pryden

1
@Basic: Neye göre geriye doğru? Bu cevabı ilk yazdığımdan bu yana geçen bir buçuk yılda, Google’a geçtim ve şu anda Google’da çalışıyorum ve Java’nın Google’daki web uygulaması geliştirme için çok yoğun kullanıldığını temin ederim. Tabii ki, Google’ın ihtiyaçları diğer birçok şirketin gereksinimlerinden çok farklıdır, ancak Java, doğru kitaplıkları ve çerçeveleri kullandığınızda tamamen farklı bir canavardır - Google’ın açık kaynak kodlu bazı şeylerini inceleyin (Guava, Guice, GWT, Protokol Tamponları, vb.)
Daniel Pryden

12
  1. Java öğrenmek için PHP / Python / Ruby'den daha karmaşıktır
  2. Java ekosistemi çok karmaşık, çok büyük ve yeni başlayanlar için oldukça kafa karıştırıcı
  3. Java ile ilgili olumsuz itibarı olan tarihsel olarak birçok kötü çerçeve vardır, zaman kaybetmekten kaçınmak için hangi çerçeveleri kullanmanız gerektiğini bilmek zorundasınız.
  4. Java oluşturma araçları karmaşıktır (maven ve karınca)
  5. Java'nın kullanımı kolay bir modül sistemi yoktur (OSGI çok karmaşıktır)
  6. Eclipse gibi Java IDE'nin şaşırtıcı özelliklere sahip çok güçlü olmasına rağmen, çok fazla deneyim olmadan etkili web geliştirme için yapılandırılması zor.
  7. Sunucu olarak Tomcat veya Jetty dışında bir şey kullanıyorsanız, WebSphere / WebLogic / JBOSS'ın uzun başlangıç ​​zamanlarında hüsrana uğrayacaksınız.
  8. Java EE, dağıtılmış işlemler gibi birçok kişinin sahip olmadığı sorunları çözer.

Mesleki gelişime giren yeni bir geliştirici, Java'yı bir büyüklük sırası ile raylardan, pitondan veya php'den daha zor bulacaktır, böylece öğrenmesi kolay olanla devam ederler.

Tüm bunları söyledikten sonra, başlangıç ​​için Java kullanmaya karar verdim, çünkü düzgün bir şekilde yapılandırılmış bir Java Geliştirme ortamı çalışmak için çok üretken.

  1. 10 saniyeden az başlama zamanı
  2. Düzgün bir şekilde düzenlenmiş tutulma çalışma alanı, tüm çerçeveler düzenlenmiş ve yapılandırılmış
  3. Kütüphanelerin iyi seçimi (Bahar, Bahar MVC, Bahar Sosyal, Bahar Güvenliği, JPA, Hazırda Bekletme, Hız, vb.)
  4. SSD'li hızlı geliştirici makineler
  5. Orielly Safari aboneliği

8
Yine de açık olalım. Java dilini öğrenmek zor değildir. Bir PITA olan eksikliklerini gidermek için Java ile birlikte çalışarak yaratılan tüm saçmalık katmanlarıdır (ayrıntısızlık, seni ve takım arkadaşlarının tüm sıyrıklar kadar esnek olmaları, seni aldıkları kitapların saçma miktarı vb. öğrenmek.
Erik,

2
@ErikReppen Çok doğru. Bir Java projesi üzerinde çalışmak zorundayım ancak .Net'te bir geçmişe sahibim. Dil ve sözdizimi, anlamaya başladığım her şey kadar kolaydır. Bu beni deli etmeye zorlayan ayrıntı. 1 satırda kullandıklarım şimdi 5-10 ve (çoğu zaman) bir XML yapılandırma dosyası düzenlemesi alıyor. Saatlerce okumaya çalışmadan, bir iş için “doğru” çerçevenin seçilmesinin bir kabus olduğunu - ve senaryonuzun ileriye dönük bir vaka olarak kabul edildiğini, bundan önce desteklenmediğini ve sevmediğinizi söylemekten bahsetmeyin. yeniden yaz. Vaktimi büyük problemleri çözmek için harcamak istiyorum
Temel

"Java daha karmaşıktır" - PHP'nin parametre sıralamasını hatırlayan var strposin_array? Ve PHP'nin XML DOM arayüzü saçma (onları almak için dizgilere nitelik atıyor?). OSGi kesinlikle mükemmel ve dilden bağımsız.
jevon,

@jevon: PHP dökümanları çok iyi ve IDE'm yine de bana hatırlatmaya hevesli. Ayrıca, SimpleXML.
DanMan

12

Yaklaşık 5 yıl önce, bana ve bir meslektaşıma bazı iç projeler için bir programlama görevi verildi. Komut ayrıştırma gerektiren basit bir görev.

Her şeyi yaklaşık 80 satır java kodunda buldum ve meslektaşım bir hafta sürdü, yaklaşık 20 java dersi ve çok daha fazla java kodu satırını yapmak için. Söylemeye gerek yok, onun kodu seçildi.

Bu beni meraklandırdı. Her yerde, karmaşıklık takdir edildi. (En büyük yazılım ürünleri şirketlerinden birinde çalışıyordum.) Java, seçim aracıydı ve tasarım desenleri kodlamanın yoluydu.

Şimdi, basitliği reddeden zihniyet mi yoksa sadece kibir mi? Ben her zaman sağduyu hakim olmalı diye düşündüm. Bir işletme veya basit bir web uygulaması olsun, temel kullanım durumları aynıdır. Doğru ve doğrulanabilir olmalı.

Java'yı artık birkaç nedenden dolayı kullanmıyorum. Ancak faktörlerden biri - karmaşıklık, yazılım geliştirmeye gelince, bir ton java devindeki hakim zihniyettir.

Dinamik dilleri ölçeklendirme gelince, JVM onlarca yıllık araştırmanın sonucudur. Ruby için de aynı şeyler oluyor.

Scala bulduğum dillerden biri, son derece akıllı ve pratik. Oyna! Scala ile orada web / kurumsal uygulama geliştirme için herhangi bir mükemmel.

Ruby ve Rails'in yeni başlayanlar için yeni ve parlak bir şey olduğu gibi, sağlam bir Rails geliştiricisini işe almak oldukça zor. Bu aslında herhangi bir başlangıç ​​için bir engeldir, oysa java dev'in bolluğu daha fazla ticari anlam ifade etmelidir.


Java hayranı değilim ama atıfta bulunduğunuz o "karmaşıklık" soyutlama olmuş olabilir. Soyutlama, hem test hem de bakım kolaylığı için (çok ölçülü kullanıldığında) çok faydalıdır. Kodunu karşılaştıramadan kesin olarak söylemesi zor
Temel

11

Son bir röportajda , google plus için teknik bir lider olan Joseph Snarr, uygulamanın arka uç için Java Servlet'i ve ön uçta JavaScript'i nasıl kullandığını açıkladı.

Bu nedenle sorunuzu yanıtlamak için Java hala çok modern web geliştirme için kullanılmaktadır. Sadece son zamanlarda çok fazla baskı yapan yeni başlayanlar için değil.

Yeni başlayanların çoğunun başka teknolojiler kullanmasının sebebi, daha seksi olmaları ve daha açık bir kaynağa sahip olmalarının ardında olmasının nedeni.


4
Yeni başlayanlar başka teknolojiler kullanıyor çünkü şimdi halletmek istiyorlar. Daha sonra değil. Ve şimdi 3 kişi gibi 30 kişi değil 3 kişi tarafından
yapılmaya başladılar

Bir kişiden alıntı yapmak yalnızca görüşlerini ve seçimlerini sağlayabilir, ancak seçtiği şeyin doğru karar olduğunu / doğruladığını doğrulamaz.
DivKis01

9

Web geliştirme ve Java’dan bahsettiğinizden beri, birçok kişi Java Applet’leri bir web tarayıcısında kullanmanın başlangıçta sadece bu konuda değil, aynı zamanda uygulamalar için "sanal alan" ın tam olarak geliştirilmediğini ve güvenlik sorunları olduğunu unutmaya meyillidir. Java Uygulamalarının tarayıcıda çalışabilmesi ve yerel makine verilerine erişebilmesi (müşteri tarafı güvenlik sorunu). Tabii ki Java arka uç ve bağımsız uygulamalarda sağlamdı, ancak Java'yı Java uygulamalarıyla (tarayıcıda çalışarak) ilişkilendirmenin, Java hakkında bir web geliştirme bileşeni olarak algılanmasını berbat ettiğini düşünüyorum. Bundan hiç kurtulduklarını sanmıyorum.


9
Kesinlikle hayır! Aslında Java sunucu tarafında dünyada baskın bir dildir. Apletler on yıl önce belki sönmüş.
Chiron

5
Flash Applets olmaya çalıştığını yaptı. Hızlı başlatma, hızlı indirme, düşük hafıza alanı.

4
Java ile Javascript arasında ayrım yapamayan birçok insan tanıyorum. Tamamen ilgisiz olsalar bile. Java'ya kötü bir isim veren başka bir şey bu.
Kibbee

5
@Kibbee ... ya da Javascript'e kötü bir isim verir :)
Matthew Schinckel

9

Soru, "Java neden yeni başlayanlar veya küçük projeler için kullanılmıyor?" Olmalı. Java kesinlikle "modern Web uygulamaları" için kullanılıyor. Google’da, Java birçok servis için arka uçta, kapak derlenmiş JS veya GWT ise ön uç için kullanılır. Sorun, hıza göre ölçeklerden biri. Startup'ların minimum uygun ürüne ulaşması gerekiyor. Bunlar genellikle 1-3 mühendisden oluşan küçük ekiplerdir ve performans ya da sürdürülebilirlik açısından yineleme hızına değer verir. Ölçeklenebilirlik sorunlarına veya takım kodu kodu bakım sorunlarına karşı koşmak, "yaşamak istediğiniz" bir sorundur, yani, bu aşamaya geldiğinizde, ilk uygulamanızın müşterileri alma konusunda ilk çabalarınızda size yardımcı olduğunu gösteren bir işarettir veya yatırım. Bu noktada uygulamayı yeniden yazmayı göze alabilirsiniz.

Google gibi bir şirket, kullanıcıların kaybedebileceği bir şey için ölçeklendirme uygulayarak zamanlarını boşa harcamış olsalar bile, ölçeklendirmeyi büyütmek için bir şeyler inşa etme lüksünü karşılayabilirler.

En azından, benim fikrim, pek çok "havalı", "kalça", "modern" şirketin, yineleme hızının ve sadeliğin en büyük gereksinimler olduğu küçük ekiplerle küçük uygulamalar oluşturması.


1
Kaynağınız, başlangıçta Java kullanmadığını belirten kaynak nerede? Lütfen varsayımınızı bazı gerçeklerle destekleyin.
Walter

7

Java'daki geleneksel web uygulamaları, iyi yapılandırılmış olsalar da, "hızla gelişen" den çok uzaktır. Her ne kadar yalnızca bir tam web uygulaması (Java / Tomcat / Struts) yazmış olsam da, son derece seçiciydi, hata ayıklaması beklenenden uzun sürdü ve iş mantığı katmanını uygularken genellikle acı vericiydi. Java’nın potansiyel savunmasında, Java’da yazdığım tek web uygulamasıydı (Java’daki sistemler düzeyinde uygulamaları programlamaya alışkınım) ve ikinci kez biraz daha hızlı bir şekilde başka bir web uygulaması yazabileceğime inanıyorum.

Ayrıca PHP ve C # ile uygulamalar yazdım ve daha iyi çalışıyorlar, Java'dan çok daha affediyorlar. Bundan başka, Ruby on Rails, Robbie'nin dediği gibi hızlı CRUD veritabanlarına kolay erişim sağlayan hızlı uygulama geliştirme için özel olarak yazılmıştır. Sorun, kendi başınıza geliştireceğiniz web sitelerinin çoğunun, Java'nın sunduğu özelleştirme düzeyine (ve gerçekleştirmenizi gerektirmeyen) gereksinim duymamasıdır. Ek olarak, her DB bağlantı nesnesinin elle yazılması gerekir ve şablonlanması kolay değildir. Özellikle Java 7'nin yeni dinamik dil desteği özelliklerinden yararlananlardan biri hakkında daha iyi bir çerçeve olabilir , ancak araştırmayı henüz yapmadım.


3
Play Framework'e bir göz atmalısınız, bu sizi Java ile üretken kılan ve Ruby on Rails'ten ilham alan bir Java web çerçevesidir.
Jonas

2
@Jonas, tüm bunları tam olarak açıklayan iyi bir blog yazısı yazmayı düşünün.

@Jonas, Thorbjorn’un söylediklerini söyledi! Tam bir okuma veririm. :)
Brian

@ Thorbjørn: Blogum yok. Kısacası: Play Framework ile sadece Java kaynak kodunuzu kaydedin ve ardından web tarayıcısını güncelleyin. Kod, Eclipse derleyicisini kullanarak otomatik olarak sunucu tarafında derlenir. JPA veritabanı erişimi için kullanılır. İşte bunun hakkında bir makale Oyna! Çerçeve Kullanılabilirliği
Jonas

2
@ Thorbjørn & Brian: Oyun çerçeve web sitesinin ön sayfasındaki videoyu izleyin, çok güzel bir şekilde söyleyeceğimi açıklıyor.
Bjarke Freund-Hansen

7

Basit cevap: Verimliliği temel alan öğrenme eğrisi.

RoR gibi Framework tabanlı sistemler "sihri" diline / sözdizimine koyma eğilimindedir. Temel RoR sözdiziminizi yükseltmek ve bir uygulama geliştirmek ve gitmek çok kolaydır.

Java önce bir dildi ve araçlar ve çerçeveler sonradan ortaya çıktı. Yani önce Java'yı öğrenmelisin, sonra Spring'i, Grails'i ya da süper IDE'nizi ya da her neyse. Ruby'nin favori örneği, ayarlayıcılar ve alıcılar gerektirmez. Gerçek şu ki, Java IDE'leri de manuel kodlamadan kurtuldu ... ama hala kaynağınızda. Bu yaklaşımın yararı, çerçevenin altında, tüm Java geliştiricilerin birlikte çalışabileceği bir dil olduğu yönündedir.

Bu avantaj, zamanın özün olduğu küçük girişimler için şüphelidir. Genellikle, kutu dışı bir çerçeveyle yapamayacakları çok az şey yapıyorlar. Böylece kendi RAD sistemlerini alabilirler ve ertesi gün bir uygulamanın yayınlanmasını sağlayabilirler.

Ancak, Facebook ve Twitter’a bakarsanız, genişlediklerinde, kutu çerçevelerinin dışına çıkamayacak şeyleri buldular ve daha düşük seviyeli teknolojiler kullanmak zorunda kaldılar.

Çerçeve geliştiricilerin daha hızlı bir şeyler yapabilmeleri için sahip oldukları bu kutsal savaş sahtedir, ihtiyaç duydukları şeyleri daha basit ve daha az öğrenme eğrisi ile yapabilirler. Ve bir çok şey için, bu "yeterince iyi" dir. Sorun için doğru olanı kullanın.


6

"Modern web uygulaması geliştirme" yi nasıl tanımladığınıza bağlıdır. Başlangıçta, hızlı geri dönüşlü web sitelerinde konuşuyorsanız, bu amaç için tasarlanmış dilleri ve çerçeveleri düşünmeniz gerekir. Kararlı, ölçeklenebilir, kurumsal düzeyde web geliştirme arıyorsanız, bu idealleri destekleyen dilleri ve çerçeveleri arayın. Kitabımda, bunlar çok farklı iki amaç. RoR, Groovy, vb., Birincisi için iyidir ve Java, ikincisi için genel olarak daha uygundur.


6

Google App Engine, Java'yı destekler, böylece tüm web uygulamanızı Java'da, IDE ve dağıtım arabirimi olarak Eclipse kullanarak, makul şekilde belgelenmiş bir Google API ile yazabilirsiniz - bu yüzden kullanılmasın veya kullanılmasın kullanılabilir.


5

Çalıştığım başlangıçta API'mızı uygulamak için Java ve JRuby'yi kullanmayı seçtik çünkü birbirlerini tamamlıyorlar.

Altyapı, süreç dağıtımı ve iletişimler için Java'nın sağlamlığından yararlanıyoruz, oysa API uç noktalarının gerçek uygulaması için tüm çağrılar JSON'yu içerdiğinden ve gevşek bir şekilde yazılmış bir sunumu (JSON) kullanarak gevşek bir şekilde manipüle etmeyi çok daha mantıklı kılarken JRuby'yi seçtik tür dili (Ruby).

JRuby sınıflarımızdan birinin bir tıkanıklık haline geldiğini görürsek, onu doğrudan Java'da yeniden uygularız (temel olarak satır-satır çeviri). Bu, oldukça fazla hesaplama yapılması gereken sınıflarda oldukça sık olabilir ve bu bağlamda JRuby bir prototip dili gibi davranır.

Kendi dinamik sınıf yükleyicimizi uyguladık, bu sayede Java sınıflarını sunucuyu yeniden başlatmadan değiştirebiliyoruz ve seçimden çok memnun kaldık. Bu nedenle, "her seferinde derlenip yeniden başlatmanız gerekir" argümanı fazla ağırlık taşımaz.

Anahtar, tüm Java EE öğelerini önlemek - büyük, hantal ve anti-agile.


5

Hala Java'nın birçok web geliştirmesinde kullanıldığını hissediyorum. Ancak, genellikle daha az açık olan ve daha sonra biraz daha fazla yeni teknolojilere ilgi duyan ve kendi işlerini tanıtan yeni girişimlerden daha az açık olan, daha çok işletme odaklı, temelde teknoloji temelli olmayan büyük şirket türündeki gelişmelere dayanıyor. . Bu nedenle, çok sayıda kurumsal web sitesinde kullanılsa bile, muhtemelen hiçbir zaman bilemeyeceksiniz, çünkü teknoloji yığınları hakkında herkese açık bir şekilde anlatmayacaklar.

Tüm orijinal soruları yorumlayarak ...

Dilin zayıflığı mı? Python veya Ruby gibi diğer dillerle karşılaştırıldığında, Java ayrıntılı ve benzer şeyler yapmak için daha fazla koda ihtiyaç duyma eğilimindedir. Ancak bu sadece dilin yetenekleri değil, aynı zamanda onu çevreleyen topluluk ve bu araçları kullanan türden geliştiricilerdir. Bu yüzden Python, Ruby, PHP, vb. Modüllerin ve araçların çoğu açık kaynaklıdır ve bulmak, Java dünyasında olduğundan daha kolaydır. Örneğin, Ruby topluluğu gerçekten web geliştirmeye yöneliktir, bu yüzden Ruby'yi kullanabilen her geliştirici bir web projesi için problemler ve mevcut araçlar hakkında bilgi sahibi olur. Java geliştiricileri için, raporlama sistemleri gibi diğer sistemlerde çalışmış olması zorunlu değildir. Tabii ki, herhangi bir iyi geliştirici yetişecek,

Java'nın haksız bir klişesi mi çünkü çok uzun zaman oldu (eski teknolojilerle haksız yere ilgiliydi ve "modern" yetenekleriyle tanınmıyor)? Java gerçekten o kadar eski değil ve dürüst olmak gerekirse, büyük ölçüde gelişti. Yaklaşık 10 yıl önce havalı, ilgili platformdu. Ancak o zamandan beri, Ruby on Rails gibi, aklında daha yeni problemler olan yeni platformlar var. Java'nın ana sektörü esas olarak kurumsal dünyaydı, farklı problemlerle, yani dışında yeni projeler arayan insanlar farklı araçlar arıyorlardı. Ayrıca, Java tasarımının çok platformlu olmasının temel avantajı, bugün olduğu gibi bugün için geçerli değil.

Java geliştiricilerinin negatif klişeleri çok mu güçlü? (Java artık sadece "havalı" değil) İçinde de bazı gerçekler var. Java hala bir iş bulmak için öğrenilecek dildir. Bu yüzden, umursamıyorsanız, fakat sadece para kazanmak için bir şeyler öğrenmek istiyorsanız, biraz Java öğrenmeyi bırakıp, bir daha gelişmeyi umursamamanız gerekir. Yine, algı ve görünürlük hakkında çok şey var. Bilgilerini paylaşmadan kodlayan tonlarca büyük Java geliştiricisi var, blog yazarlığı yapan ve açık kaynak kodlu işbirliği yapan, belki de iyi olmayan pek çok PHP geliştiricisi var. Bu, PHP geliştiricilerinin Java geliştiricilerinden daha iyi olduğunu düşünür, çünkü onlar hakkında belirli geri bildirimleriniz vardır.

Diğer dillerde yazılmış uygulamalar daha hızlı oluşturuyor, bakımı daha kolay ve daha iyi performans gösteriyor mu? Yapmaları daha hızlı olduklarını söyleyebilirim. PHP, Python veya Ruby gibi dillerin ilkeleri, sürekli değişebilen bir yazılım oluşturmak için onları oldukça iyi yapar. Dinamik yazma, bir arayüzü değiştirmeyi kolaylaştırır. Java'da iyi tanımlanmış bir arayüze sahip olmak önemlidir, bu da arayüzlerin daha kararlı (ve değiştirilmesi zor) yol açar. Bu, yeni bir başlangıçta çok önemlidir; asıl sorun, para bitmeden bir ürün elde etmektir. Performans konusunda, “Java Ruby'den daha hızlıdır.” Veya “MongoDB web ölçeğinden daha hızlıdır” gibi gerekli performansı elde etmek için ihtiyaçların yanlış anlaşılması ve sihirli hileler kullanılmaya çalışılması çok kolaydır .

Java sadece yeni bir dile adapte olmak için çok yavaş olan büyük şirketler tarafından mı kullanılıyor? Kesinlikle, şirkette zaten mevcut bir Java geliştiricileri ekibine sahip olmak, aynı dili yeni projeler için kullanmaya devam etmeyi kolaylaştırıyor. Bu, özellikle şirketin çekirdeği teknoloji değilse, "güvenli bahis" olarak algılanır. Ancak, yine de, Java SADECE büyük şirketler için kullanılmaz, hala harika şeyler için Java kullanan birçok başlangıç ​​var (Örneğin, FightMyMonster veya Swrve , Java'yı yoğun olarak kullanıyor), ancak başlangıçta genel eğilimin olduğunu söyleyebilirim. sahne başka dilleri kullanmaktır. Bu, aynı zamanda çoğu insanın "dostça" ve "eğlenceli" olarak algılanan Ruby, Python veya PHP ile çalışmaktan daha heyecanlı olacağı için insanları edinmenin bir yoludur.


5

Bu doğrudur, fakat Java ve ekosisteminden dolayı değildir. Java'yı kullanırken büyük karışıklıklar ve ağır abominasyonlar oluşturma eğiliminde olan insanlar yüzünden.

Hızlı şeyler yapmanıza izin veren yeterli çerçeve (spring-mvc, grails, play, etc.) vardır. İnsanların sistemlerini altüst ettikleri gerçeği, insanların Java ekosistemiyle çalıştıklarında edindikleri bilgi birikiminin artmasıyla ilgili bir sorundur - çok daha fazla şey biliyorsunuz ve onları hazır bulunduruyorsunuz (her şey için araçlar var) ve "her şey benziyor bir çivi ".

Eğer "hacky" iseniz, Java ile diğer dillerle aynı şekilde yapabilirsiniz, ve işte şunu gösteren bir çalışma:

49 Programcının Çalışması: Statik tip sistemin gelişim süresi üzerinde etkisi yoktu ... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf


3

Daha önce söylenenlere biraz eklemek için, birçoğunun hiçbir şeyden (tam anlamıyla) işlevsel bir web uygulamasına ne kadar hızlı gidebileceğinizle ilgili olduğunu düşünüyorum.

Bugün sahip olduğunuz tek şey bir fikir ise, web uygulamanızı yazmak için şimdi bulunduğunuz yerden gitmek, bir barındırma sağlayıcısı veya kendi altyapınızı (EC2 görüntüsü gibi) seçip seçmediğiniz düşmek kadar kolaydır. Java'yı deneyimlerime göre seçmek genellikle daha fazla iş ve çoğu zaman da daha pahalı.

Ek olarak, eğer Linux ve PHP / Python / Ruby ile giderseniz, araçlar ve platform birbirlerini desteklemek için ücretsiz ve tasarlanmıştır. Java ile bazen iki dünya (OS ve Java) bazen birbiriyle uyum içinde çalışıyor gibi görünmüyor.


Öğrenme eğrisi kesinlikle dikeydir. İlk birkaç WEEKS'i sadece kısaltmanın ne olduğunu, standartların uygulamalarıyla nasıl ilişkili olduğunu, her şeyin nasıl katmanlaştığını vb. Düşünerek harcayacaksınız. Ardından önümüzdeki birkaç hafta hangi kütüphaneleri ve çerçeveleri kullanacağınızı bulmaya çalışacaksınız. Sonra önümüzdeki birkaç hafta içlerinde böcek rapor ...
Craig Ringer

3

Öyle olmadığını kim söylüyor?

Bahar MVC + Bahar Verileri JPA veya Mongo + Thymeleaf, kahve çekiciliğine JS transpiling için hazırlanmak için + coffee-maven-plugin.


Sana tamamen katılıyorum +1
Arshad Ali

3

Birçoğu, Java ve web uygulaması geliştirmeyi, büyük mavi ve kırmızı şirketlerden gelen canavarca J2EE uygulama sunucuları ile birlikte, temel "Merhaba Dünya" çevrimiçi olmadan önce haftalarca süren çalışmalara eşlik eden J2EE'nin korkularıyla ilişkilendirebilir.

Doğru, son JEE spesifikasyonları ve uygulamaları daha hafiftir, ancak kısa dönemli hızlı bir gelişim projesi için böyle bir şey önermeden önce hala üç kat daha düşünüyorum.

Bu hala Java'da web uygulama geliştirmenin standartlara dayalı bir yoludur. Birçoğu diğer cevaplarda belirtilen alternatifler, yapılacak çok fazla seçenekle daha karışık ve kafa karıştırıcı bir tablo ortaya koyuyor.

Diğer diller bu çokluk yerine tek bir anahtar teslim çözümü göstermektedir. Bu, bu seçimi kızartmak için daha önemli balıklarınız olduğunda daha uygun görünmesini sağlar.


Java EE 6 "hafif" olabilir (JSF2 hariç) ancak yine de inanılmaz derecede büyük bir öğrenme eğrisi, karmaşık özelliklerin dev bir yığını ve son derece karmaşık bir katmanlı sistemdir. Hafif belki ama basit değil.
Craig Ringer

2

Sanırım düşündüğünüzden çok daha fazla kullanılıyor - kullanım su hattının hemen altında. Kalın, süslü java servislerinin etrafındaki ray sarıcıları üzerinde birçok yakut vardır. Özellikle büyük verilere yaklaşan herhangi bir şeyle uğraşmaya başladığınızda. . .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.