Bir profesyonel Java programcı olarak, anlamaya çalışıyorum - neden Java?
Günümüz web girişimlerinden nispeten küçük bir yüzdesinin Java (Java'nın genel popülaritesine kıyasla)) kullandığını belirten bir eğilim fark ettim. Bu genellikle "Ben nefret Java bir tutkuyla." gibi bir yanıt aldım. Ama kimse gerçekten kesin bir cevap veremiyor gibi görünüyor.
Aynı web başlangıç topluluğunun Java geliştiricilerine - olumsuz veya yaratıcı değil, eski olduklarını ima ettiğini) olumsuz duyduklarını da duydum.
Sonuç olarak, temelde neyi kaçırdığımı öğrenmek için Ruby/Rails'i almak için zaman harcadım. Ancak, öncelikle göreceli deneyim düzeylerim nedeniyle, "Java kullanıyorsanız, bunu çok daha hızlı yapabilirim" diye kendi kendime düşünmeye yardımcı olamıyorum.
Ama aynı zamanda Java'dan kritik "eksik" bir şey görmediğim için, aynı uygulamayı oluşturmamı engelledim.
Bu da beni sorularıma getiriyor:
Java modern web uygulamalarında neden kullanılmıyor?
Dilin zayıflığı mı?
Java] uzun zamandan beri haksız bir klişe mi?
Negatif stereotip Java geliştiriciler çok güçlü mü? (Java artık "havalı" değil)
Diğer dillerde yazılmış uygulamaların oluşturulması gerçekten daha hızlı, bakımı daha kolay mı ve daha iyi performans gösteriyor mu?
Java sadece yeni bir dile uyum sağlamak için çok yavaş olan büyük şirketler tarafından mı kullanılıyor?
Günümüz girişimlerinin mümkün olan en kısa sürede pazara girmesi gerekiyor. Java web uygulamalarını yayınlamak için yaklaşık altı ay harcamalarına gerek yoktur.
Örneğin Twitter, Rails/Ruby kullanılarak oluşturuldu, ancak ölçeklenemez hale geldiğinde JVM'ye taşındılar.
Geliştirme sürecinin verimli olmadığından bahsetmiyoruz: code -> derleme -> dağıtma (Rails/Django/Grails) gibi çerçevelerdeyken: test sunucusunu çalıştırın -> kod -> bir şeyler değiştirin ve neler olduğunu görün.
İyi haber şu ki JRebel kod değişikliklerini anında görmenizi sağlar.
Deneyimlerime göre, Java küçük uygulamalar için aşırıdır. Bir veritabanı tablosu olan basit bir blog, örneğin, blog girişlerini tutan basit bir blog çok daha basit bir şeyle yapılabilir.
Genelde Java çok daha büyük web uygulamalarında (düşünmek bankalar ve sigorta şirketleri) diğer sistemlerle (ana bilgisayar arka uçları ve veritabanları ve akran web- hizmetler arka plan toplu işleme sistemleri ... 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 fazladır.
4 yıldan fazla bir süre önce python'a geçmeden önce Java web uygulamalarını 10 yıl boyunca programladım. python kullanarak çok daha üretken olduğumu hissediyorum ve daha kısa sürede daha fazlasını yapabilirim ve dürüst olmak gerekirse, python'da geliştiğimde çok daha mutluyum. Kişisel deneyimime dayanarak python 'un Java' dan daha iyi olduğunu düşündüğüm nedenlerden bazıları şunlardır, milajınız çok olabilir.
Java'da web uygulamalarını ilk kez programlamaya başladığımda, Struts çıktı ve harika değildi, ancak mevcut en iyi şeydi. Bir dizi destek uygulaması ve birkaç diğer çerçevede yol boyunca oluşturdum. Ne zaman yeni bir çerçeve ortaya çıktı (Goblen, Wicket, GWT, şerit, grails, AppFuse, Play, RichFaces, Bahar, vb), denemek ve daha iyi olup olmadığını görmek ve çoğu zaman sadece biraz daha iyi olduğunu görmek ve bazen hiç de iyi değil. Oyun çerçevesinin doğru yönde atılmış bir adım olduğunu söylemeliyim.
Java 'nın en sinir bozucu kısımlarından biri, kullandığınız kütüphanelerin çoğunun Java içine dahil edilmemiş olmasıydı, Apache müşterileri gibi yerlerden tonlarca 3. parti kütüphanesi eklemeniz gerekti. Başka bir büyük kütüphaneyle hazırda bekletme gibi bir şey kullanırsanız, hazırda bekletme işleminin bir kavanozun bir sürümüne ve başka bir şeyin başka bir sürüme ihtiyaç duyduğu Jar bağımlılığı cehennemine girersiniz. 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 ihtiyacınız var ve bu sadece projenize daha fazla bağımlılık getiriyor, bu da projelerin çok büyük olmasına neden oluyor. En basit web uygulamaları için 100MB + savaş dosyalarım vardı.
Bazı nedenlerden dolayı, Java'da aynı şeyi yapmanın çok fazla farklı yolu var gibi görünüyor. Wikipedia'ya göre Java için 38'in üzerinde farklı web çerçevesi vardır ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) ve 23 farklı ORM ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software#Java ) birkaç örnek vermek gerekirse. Diğer dillere bakarsanız daha makul bir sayıları vardır. Bazı insanlar çok sayıda seçeneğe sahip olmanın iyi bir şey olduğunu düşünüyor, ancak geliştirici topluluğunda çok fazla boşa harcanmasına yol açmıyor, herkes aynı tekerleği yeniden keşfediyor ve dilinize yeni bir kişi iseniz seçim için çok fazla seçenek.
Java web uygulamaları gerçekten ağırdır ve çalışması için çok fazla kaynak gerektirir. Özellikle hafızaya açlar. Herhangi bir yazılım parçası gibi, kaynak ayak izlerini azaltmak için ayarlanabilirler, ancak diğer dillerle karşılaştırıldığında, kutudan çıktıkları kurulum korkunçtur. Geçmişimde weblogic, websphere, Jboss, Tomcat ve iskeleyi kullandım. İlk üçünü sadece EJB'leri kullanmaya zorlandığımda kullandım, ancak EJB'leri kullanmasanız bile, büyük uygulama sunucularıydı ve bazen yapılandırılması ve düzgün bir şekilde çalışması zor. Tomcat ve Jetty'nin kurulumu çok daha iyi ve kolaydır, ancak yine de kaynak domuzlarıdır.
Kendi sunucunuzu çalıştırmıyorsanız, Java uygulamalarınız için makul bir fiyata paylaşılan barındırma bulmak çok zordur. Bunun ana nedeni, Java uygulamalarının diğer dillerle karşılaştırıldığında çok daha fazla bellek gerektirmesidir, bu nedenle paylaşılan bir barındırma sağlayıcısının değerli RAM bir Java sitesini çalıştırarak harcaması mantıklı değildir, Ne zaman aynı yerde 5 php siteleri çalıştırabilirsiniz. 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.
Java'da gelişirken, kendimi python'da yapabileceğimden çok daha yavaş buldum. Bir değişiklik yapmam, derlemem, yeniden konuşlandırmam ve sonra test etmem gerekir ve bu yinelemeli süreci yavaşlatır. Bunu daha hızlı yapmanın yolları olduğunu biliyorum, ama en iyisinde bile, python'da yapabileceğimden çok daha yavaş hissettim.
Ayrıca python aynı şeyi yapmak için çok daha az boilerplate kodu, bu yüzden de kodu geliştirmek için daha az zaman harcamak.
Java sadece bir çok parça üzerinde tasarlanmış hissediyor, API'lerin ve arayüzlerin çoğu yapmak istediğiniz şey için karmaşık bir yol. Ve herkes ve erkek kardeşleri bir Java mimar olduklarını düşünüyor ve bu da kullanımı ve geliştirilmesi zor olan büyük karmaşık sistemlerle sonuçlanıyor.
Java'da gelişirken, IDE'ye sıkışmış hissettim, onsuz kayboldum. IntelliJ piyasadaki en iyi IDE'lerdir ve python için böyle bir şey olmadığı için python 'a geçmek zordu. Yani bir IDE yerine, sadece normal bir metin editörü olan metin arkadaşı kullandım. İlk başta zordu, ancak sadece bir metin editörü olduğu için gerçekten hızlı ve duyarlı bir uygulamadır. Tüm projemi birkaç saniye içinde açabilirim, bir projeyi IDE 'de açmak istediğimde, bir ton veya daha fazla RAM içeren bir makineyle bir dakika veya daha fazla sürebilir. IntelliJ'in yapımcıları pycharm adlı bir python editörüyle çıktılar, ilk çıktığında satın aldım ve harika. Ama anladığım kadarıyla python için IDE 'a ihtiyacım yok, bir metin editörü ile iyiyim. Zaman zaman yapmak zorunda olduğum Java web uygulamaları üzerinde çalışmaya geri döndüğümde, metin düzenleyiciyi kullanmaya çalışıyorum, ancak henüz tam olarak uzmanlaşmadım. IDE için kişisel olarak Java daha fazlasına ihtiyacım var çünkü bir şeyi karıştırırsam, yeniden derlemem ve yeniden konuşlandırmam daha uzun sürer, bu da beni yavaşlatır.
Hibernate'i bir ORM olarak kullanmaya başladığımda, harika olduğunu, problemlerinin olduğunu ve mükemmel olmadığını düşündüm, ancak daha önce yaptığımdan daha iyiydi. python projesinde Django'nun ORM'si ile bir başvuru yapana kadar bu durumdan memnun kaldım ve bu gözlerimi açtı, bir ORM'nin bu şekilde çalışması gerekiyordu. Bu projeden sonra hazırda bekletmeye geri döndüm ve hayal kırıklığına uğradım ve Django'nun ORM'sine geri dönmek için özlem duydum. Bir başka büyük python ORM, Django'nun ORM'sine benzer, ancak biraz farklı olan sqlalchemy'dir. ROR'un ORM'si ile sınırlı deneyimim var, ancak hatırladığım kadarıyla da oldukça iyiydi.
Java web şablonlama sistemleri o kadar iyi değil ve ben hepsini denedim düşünüyorum (fayans, freemarker, hız, vb). Çoğu sadece temel işlevsellik sunar ve çalışmak için bir acıdır. Python tarafında, iki favorim Django şablonları ve Jinja2, şablonlama motorunda ihtiyaç duyduğum her şeye sahipler ve kullanımı gerçekten çok kolay.
Başlangıç Ups parlak olsun istiyorum. Parlak ne olursa olsun: RoR, Groovy, Grails, OOP.
Kurumsal, istikrarlı, güvenilir ve ölçeklenebilir istiyor: Java ve .NET bu faturaya uyuyor (doğru yapıldığında).
Şu anki konser: Finansal Hizmetler. Platform: ColdFusion (aslında bir Java Etiket Kitaplığı) ve Java.
Önceki konserler:
Bunların hepsi yüksek hacimli, yüksek güvenlikli sitelerdir. Bu şirketlerden hiç kimse hiç PHP düşünmedi, bazıları RoR'ye baktı ve çok fazla sorun görmedi. 401k şirket, yetkili geliştiricilerle bir .NET uygulaması çalıştıran bir kardeş şirkete sahipti, uygulama her hafta çökmeye devam etti. Sonunda onu Java) haline getirdiler ve istikrar kazandılar.
Java) konusuna bakan tek kişi, onunla hiç veya çok az gerçek deneyimi olan veya kötü uygulamalarla uğraşan ve şimdi silah utangaç olanlardır. havalı çocuklar kullanıyor, neden ben değil?
FrustratedWithFormsDesigner's yanıtına ek olarak: Sorunuzun daha küçük sitelere yönelik daha fazla hedef olduğunu tahmin ettiğimden, birçok insan için dikkate almanız gereken önemli bir yönü var: Barındırma PHP için her yerde bulunur ancak Java veya ASP siteler) Ancak bu, bu dillerin bir kusuru değildir.
Java kesinlikle is modern web uygulama geliştirme için kullanılır. Özellikle web uygulama spektrumunun çok daha büyük/daha karmaşık/ölçeklenebilir sonuna ulaştığınızda.
Modern, üretken araçlar ve çerçevelerle ilgileniyorsanız şunlara göz atın:
Ama sanırım JVM platformundaki en modern web geliştirme doğrudan Java ile _ kullanmak yerine yeni JVM dillerinden birinde yapılacaktır.Java sadece temel kütüphaneler ve arka uç altyapısı açısından omurgayı sağlamak. Groovy ( Grails ), Scala ( Lift ve Play ), JRuby ( Raylar üzerinde JRuby ) ve Clojure ( Noir , Ring/Enlive + çok sayıda özel çerçeve) ancak birkaç tane.
Tüm yenilikler yeni JVM dil alanında gerçekleşirken, kişisel olarak Java'nin "sunucu tarafı programlamanın kurucusu" olacağından şüpheleniyorum.
Google, Amazon veya LinkedIn modern sayılır mı?
Java, modern web uygulamaları için kullanılır. Kuruluşa bakarsanız, web uygulamaları (dahili) için en yoğun kullanılan dildir.
Bununla birlikte, Java, web geliştirme standartlarının herkes için her şey olmaya çalıştığı bir dönemden geçti (tartışmasız hala yapıyor). "Kendinizi tekrar etmeyin", xml cehennemine ve Java web geliştirmenin uzun oluşturma döngülerine bir yanıttı. Sonuç olarak, Java (EJB, Struts, JSF, vb.) Tüm yeni paradigmaların üstesinden gelmeye çalıştığı bir şey haline geldi.
Java, dil ayrıntılı. Bu bir profesyonel ve bir con (bakım için harika, dev için berbat). Henüz kodlama süresini önemli ölçüde azaltabilen Java haline getirmemiş bir dizi modern dil özelliği vardır (özellikler, olaylar, kapanışlar, jeneratörler, liste kavraması, vb.). Bu nedenle, daha modern bir dilden gelmek sinir bozucu olabilir. Bununla birlikte, C #'nin sıçan yuvası haline gelmeden olgun bir dile eklemek zordur.
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 araçlara olanak tanır (bu, statik bir dilde başarılması daha zordur - jrebel). Web geliştirme hızlı yinelemelere katkıda bulunduğundan, dinamik yeniden yükleme büyük bir kazançtır. Greenfield projelerindeki geliştirme döngüsünü önemli ölçüde azaltır ve UI ve UX'i doğru hale getirmeyi kolaylaştırır (doğadan deneme ve hata).
Statik dillerin de yeri var. Karmaşık, yıllarca çalışmalı, sorunsuz ölçeklenmeli, çok hızlı olmalı ve tamamen hatasız olmalı, statik olarak yazılan diller (Java veya hatta C gibi) tercih edilir.
Buna ek olarak, geliştirici sayısı/cirosu büyüdükçe ve ürünler olgunlaştıkça, hataların fırlatılmasına neden olan iyi niyetli insanlar olma olasılığı artar. İyi tasarlanmış bir Java projesinin (bu php vampirler için arayüzler, desenler ve kutsal su :) uyguladığı titizlik ve disiplin, uzun vadeli riski azaltmaya yardımcı olur. Bu, ünite testi ile de gerçekleştirilebilirken, statik kontrolden (ve findbugs ve clang gibi statik analizörler) elde edilen güvenlik ağı, el yazısı testlerle çoğaltılması zor olan yerleşik bir kod kapsamı düzeyi sağlar. Beni yanlış anlamayın, birim testler ve fonksiyonel testler olmalı, ancak gerçek organizasyonlar asla% 100 kapsama ulaşamaz. Kontrol ettikleri şey için statik analizörler yapar.
Bu nedenle, bağımsız olarak geliştirilen kod parçaları arasında karmaşık bir birlikte çalışmanın olduğu büyük projelerde (kod boyutundan daha fazla takım boyutuna göre tanımlandığı gibi), Java gibi diller hala tercih edilmektedir. Örnekler arasında finansal brokerler (ameritrade), finansal borsalar (nasdaq, nyse, .net hatası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ı yer alır. , vb.
Performans ve ölçek perspektifinden bakıldığında, hiçbir şey Java platformunu, web uygulamaları için ölçeklenebilirlik ve performans kombinasyonu (facebook'un uygulama bölümlemesini nasıl saydığınıza bağlı olarak) üstlenmez. Örneğin Twitter, başarısızlığı koymak için Ruby altyapısının büyük bölümünü Scala üzerinde Java VM üzerinde yeniden yazmak zorunda kaldı. balina denize geri döndü. Diğer büyük örnekleri duydum, ama şu anda beni kaçırıyorlar.
Ayrıca güvenliği göz önünde bulundurmaya değer. Java tarayıcı eklentileri güvenlik açıklarından adil pay alırken, Java platformunun kendisi oluşturulan daha güvenli platformlardan biridir. Java web uygulamalarının çok güvenli olduğu bilinir. Kodlama uygulamaları, kütüphaneler ve mimaride, sql enjeksiyonu veya tampon taşmaları gibi saldırıları mümkün kılan, uzun zamandır cesaret kırılmış hataları var. Diğer web platformları (Rails) iyi bir güvenlik itibarına sahipken, hiçbiri Java'yı geçmez.
Sonuç olarak, çoğu web uygulaması teknik olarak basittir. Basit olarak, Java sık sık aşırıdır (tıpkı C :) 'de yazdığımız eski günlerde olduğu gibi). Bununla birlikte, webapp karmaşıksa (arka uç veya başka bir şekilde) veya 100'den fazla geliştiriciye sahip olması bekleniyorsa, Java'yi yenmek zordur.
-
Kişisel bir notta, Grails'i çok kullanıyorum çünkü bana her iki dünyanın da en iyisini veriyor (aynı duyduğum JRuby, Ruby dünyasında giderek daha popüler hale geliyor).
BTW - PHP artışını gerçekten şaşırtıcı buluyorum. PHP bir dil olarak okunabilirlikte Perl ve sonuçların kalitesinde VB ile kabaca eşdeğerdir. Korkunç uygulamaları teşvik eder, sürdürülmesi imkansızdır, 3. parti kütüphaneler nadiren beklendiği gibi çalışır ve Larry Wall'u yukarı çekecek bir sözdizimine sahiptir ... iyi ... bir duvar. Gelebileceğim tek açıklama, artımlı öğrenmeye (VB gibi) katkıda bulunduğudur. Başka bir deyişle, programlama/yönetim hakkında çok az şey bilerek faydalı bir şey başarabilir ve bilginizi her seferinde küçük bir yığın halinde genişletebilirsiniz. Bunun benimsenme perspektifinden söylenecek çok şey var. Ancak, kurumsal/mfg dünyasında "programcılar" tarafından yazılan milyarlarca VB uygulamadan birini desteklemek veya değiştirmek zorunda olan herkes için muhtemelen başınızı sallıyorsunuz ve emekliliğinizi planlıyorsunuz. :)
Son zamanlarda, DB'nize temel CRUD erişimi elde etmek için ne kadar az kod gerektiğinden, yeni Spring Data projesi tarafından gerçekten heyecanlanan bir Java adamla) tanıştım.
Birkaç komutla Rails (sadece db erişimi değil, görünümler ve denetleyiciler) kullanarak bir CRUD app oluşturabilirim.
(Başımın üstünden: yeni proje, varlık başına 1 iskele komutu, veritabanını taşımak için 1 komut, sunucuyu başlatmak için 1 komut.)
Dil ile ilgisi yok, her şey araçlarla ilgili. Ve dinamik diller, çok sayıda kazan plakasını kaldıran araçlara ve çerçevelere sahip olma eğilimindedir. (Bizim için ortak levha üreten güçlü IDE'lerin eksikliğini telafi etmek.)
Ayrıca dinamik dillerin bu tür araçları ve çerçeveleri yazmayı çok daha kolay hale getirdiğini hissediyorum. Ben, Padrino ya da Rails (Ruby web frameworks)) kodunu söyleyebilirim, Spring Roo için kodu söyleyebileceğimden çok daha kolay. Ruby Java bildiğimden çok daha iyi olsa da.
Java son yıllarda "kurumsal" olarak konumlandırıldı. Bir girişimin neye ihtiyacı olduğu spektrumunun diğer tarafında. Web uygulaması geliştirmede 4 şeye ihtiyacınız vardır - ağrısız veritabanı erişimi, harika dize manipülasyonu, sözdizimi şekeri ve uygulamanızın gerektirdiği çok sayıda küçük değişikliği yapmak için hızlı yinelemeli süreç.
Performans, ölçeklenebilirlik ve kararlılık öncelik listesinde biraz daha düşüktür.
Ayrıca Java kodlamak için çok tanımayan bir dildir. Sadece bir switch deyiminde dize kullanma devrimci yeteneğe sahipti. Ve javascript çok hacker bir dildir, bu yüzden ön ucunuzu geliştirdikten sonra Java'ya dönersiniz.
Bu webstartups Java önlemek nedenleri olduğunu varsayalım.
Şu anda birkaç "Java'dan nefret ediyorum" geliştiricisi olan bir şirkette çalışıyorum. Beni de sersemletirdi. Java ile kullanılabilen teknolojilerin tüm birikimlerinden kesinlikle nefret ediyorum. Bu, karar almayı çok zorlaştırır. Onun gibi Çok fazla seçeneğiniz olduğunda başka seçeneğiniz yok. Sizin için çalışan çerçeveyi gerçekten bulmak için 100'lük çerçevelerle zaman harcamanız gerekiyor. Standart Servelt mimarisi çoğu uygulama için karmaşıktır. Ruby, Django ve diğer şeyler) durum böyle değildir. Bunlar dilden ziyade tek bir çerçevedir.
Geliştiricilerden duyduğum en büyük şikayetler
Sonuçta Java projenin başlangıcında dik bir eğri uygular, bu da işlenecek çok fazla para demektir. Buna Java'ya bağlı büyük bir topluluk ekleyin, her biri farklı şekillerde düşünün ve tüm toplumu gerçekten mızraklayacak kimse yok.Ayrıca topluluğun tüm harika yeni şeyleri gösteren görüşmeler ve konferanslar görmüyorlar. Yeni harika kitaplar yok. Java çünkü birkaç yıl önce çok farklı problemleri çözmek için kullanıldı.
Java web geliştirme için öğrenme çerçeveleri biraz öğrenme eğrisine sahiptir, genellikle ihtiyacınız olan şey için aşırıya kaçarlar ve işleri yapmak için gereken dolaylılığın çoğu sadece ... acı verici ...birlikte çalışmak.
İlkbahar/Java geliştirme yapan bir şirkette çalışıyordum ve en iyi çerçeveyi buldum. İlkbaharın çerçevesi hakkında söylenecek çok hoş bir şeyim yok, ancak Struts gelişimini yapan 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 kavramak için biraz zaman alan çok soyut fikirlere sahiptir (ancak, kesinlikle, eğer size çok fazla güç ve yetenek verir) bir profesyonel ve kurumsal düzeyde bir uygulama gibi gerçekten karmaşık bir şey yapıyor). Programlamayı seviyorum Java, ama Java?) Çok fazla değil.
Ruby/Rails'te kişisel olarak herhangi bir programlama yapmadım, ancak Struts yapan arkadaşım şimdi Ruby web programlama yapıyor ve Java web programlama Ruby'de elde etmek için çok daha az kod ve karmaşıklık gerektirir. Kesinlikle farklı sözdizimi ve dil kurallarında bir öğrenme eğrisi vardır, ancak uygulamaları prototiplemek için ne kadar kod gerektiği konusunda avantajları vardır. Diğerlerinin de belirttiği gibi, ölçeklenebilirlik de göz önünde bulundurulması gereken bir konudur ve daha olgun uygulamaların daha fazla dilde sık görülmemesinin nedenlerinden biri.
Maliyetler ve eğilimler söz konusudur. Web 2.0 Startup, paradan daha fazla yeteneğe sahip 30 yaşın altındaki bir Vizyoner tarafından oluşturulur (elbette genelleştiriyorum, ancak "ortalama olarak" göreceğiniz şey budur). Aşina olduğu bir dili kullanacak çünkü programlamayı yapıyor (belki birkaç arkadaşla birlikte). Büyük olasılıkla kendi kendini yetiştirmiş bir programcıdır.
Java, kurumsal bir ortam olarak hedeflenmiştir (Java ile, dili, çerçeveyi ve standartları kastediyorum). IBM'in, Oracles'ın ve dünyanın BEA'larının işletmeleri satmak istediği bir sürü pahalı araç var.
Java) ile yetkin hale gelmek için adımlar karmaşık ve/veya pahalıdır.Peyzajın orada değiştiğini biliyorum ama çok az mı geç?
Başlangıç kazandıktan sonra çekiş büyür. Yetenekli geliştiricileri işe almak zordur. Çoğu "altı haftada programcı" programları öğretir Java (veya .NET) ve piyasa "altı haftalık programcılar" ile doyuruldu (garip bir şekilde geliştiriciler 7 yıl diyerek altı haftalık bir programcının bilgisini gösteren deneyim). Ana akım olmayan "girişimci" bir ortam kullanmak, altı haftalık programcılar için doğal bir filtre olabilir. = Ruby veya Scala bir iş gereksinimi dışında. Bu benim için potansiyel bir aday için en büyük göstergedir.
Bilgi deneyim ile gelir, ancak özel/tutkulu bir programcı, bu özveri/tutku olmayan birinden daha hızlı (ortalama olarak) bilgi kazanacaktır. Tıpkı gitar çalmayı seven bir çocuğun, dersini alan bir çocuktan daha hızlı hale gelmesi gibi, çünkü babası onu yaptı.
Java çok karmaşık. Bir ton PHP iş yapıyorum ve çoğu durumda daha kolay ve hızlı. Sadece bir sunucuya bir SSP açmak SSH yeteneği değişiklikleri kaydetmek ve yapılabilir yapmak harika. Üzerinde çalıştığım birkaç Java uygulama, en basit değişiklik için her zaman yeniden başlatma gerektirdi. (sadece delt ne olduğunu her zaman böyle demiyorum). Ek olarak PHP hosting ucuz ve kolayca ulaşılabilir.
Ayrıca en azından PHP ile sahip olduklarınızı 14/15 yıl önce statik HTML ile başladığım birçok geliştirici olduğunu düşünüyorum. İşler ilerledikçe kolay, basit ve uygun fiyatlı olduğu için sitelerimize PHP eklemeye başladık. Yıllar geçtikçe dil büyüdü ve yeteneklerini mütevazi başlangıçlarının çok ötesine genişletti ve şimdi gerçekten değil bir çok şey olduğunu düşündüğüm şey olmak için çok çalışıyor.
Flip tarafında çoğu PHP devs biliyorum Java Bu dev aşırı 800lb goril gibi neredeyse bakkal aşağı götürmek ve almak için 18 tekerlekli yarı kamyon almak gibi somun ekmek.
Java'yı, çok uzun soluklu ve karpal tünel indükleyici olduğu ilk izlenimlerimi öğrenmeye çalıştım. Buna ek olarak beni bir Java gazisi için kolay görünüyor bir sürü soru bıraktı. OpenJDK mı, Sun mı? Tomcat veya Glassfish veya? Artı Java book her giriş komut satırı için kod yazmaya başlar gibi görünüyor. Bugünlerde çoğu insanın erteleme festivali olduğunu düşünüyorum.
Ekibim ve ben şu anda Java 6 + Stripes] 'de bir greenfield web uygulaması geliştiriyoruz. Geçen yıl içinde Java 6 + Zımba (Hudson/Jenkins şöhretinden Kohsuke Kawaguchi tarafından geliştirilen biraz bilinmeyen bir web çerçevesi).
Java kesinlikle modern web geliştirme için kullanılır. Kesinlikle Ruby veya diğer dinamik dillerin "seksi" cazibesine 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 çok rekabetçidir ve her ikisi de herhangi bir dinamik dilden daha hızlı büyüklük sıralarıdır VM Biliyorum.
Beni yanlış anlamayın ... Java her zaman en iyi seçimdir (uzaktan değil!) - demiyorum ama ikisi de her zaman yanlış veya "modası geçmiş" bir seçim.
Profesyonel geliştirmeye giren yeni bir geliştirici = Java Rails, python veya php'den daha zor bir Büyüklük Düzeni bulabilir ve böylece öğrenmesi kolay olan şeylerle devam ederler.
Yukarıdakilerin hepsini söyledikten sonra, Java) kullanmaya karar verdim çünkü düzgün yapılandırılmış Java Geliştirme ortamı çok çalışmak için üretken. Düzgün yapılandırılmış demek istiyorum.
Yaklaşık 5 yıl önce, ben ve bir meslektaşım bazı iç projeler için programlama görevi aldık. Komut ayrıştırma gerektiren basit bir görev.
Her şeyi yaklaşık 80 satır Java kodunda buldum ve meslektaşım bir hafta, yaklaşık 20 Java sınıf ve çok daha fazla Java kodu aldı aynısını yapmak. Söylemeye gerek yok, 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 kalıpları kodlamanın yoluydu.
Şimdi, sadeliği reddeden zihniyet veya sadece kibir midir? Her zaman sağduyunun geçerli olması gerektiğini düşündüm. İster kurumsal ister basit bir web uygulaması olsun, temel kullanım durumları aynıdır. Doğru ve doğrulanabilir olmalıdır.
Artık birkaç nedenden ötürü Java kullanmıyorum. Ancak faktörlerden biri - karmaşıklık, yazılım geliştirme söz konusu olduğunda bir ton Java devs'de hakim zihniyettir.
Dinamik dilleri ölçeklendirmeye gelince, JVM onlarca yıllık araştırmanın sonucudur. Ruby vb. İçin de aynı şeyler oluyor.
Scala, bulduğum son derece akıllı ve pratik bir dildir. Oyna! Scala ile web/kurumsal uygulama geliştirme için olduğu kadar mükemmeldir.
Ruby ve Rails, yeni başlayanlar için parlak yeni bir şey olduğunda, sağlam bir Rails geliştiricisi kiralamak son derece zordur. Bu aslında herhangi bir başlangıç için bir engeldir, oysa Java devs bolluğu daha fazla iş anlamında olmalıdır.
yakın zamanda yapılan bir röportaj ile, google plus için bir teknik lider olan Joseph Snarr, uygulamanın Java Arka uç için sunucu uygulamaları ve ön uçtaki JavaScript'i nasıl kullandığını açıkladı).
Sorunuzu cevaplamak için Java hala çok modern web geliştirme için kullanılıyor. Sadece son zamanlarda çok fazla baskı yapan yeni başlayanlar için değil.
Bence bir çok girişimin diğer teknolojileri kullanmasının sebebi, daha seksi olmaları ve daha açık bir şekilde açık kaynaklara sahip olmalarıdır.
Soru "Java yeni başlayanlar tarafından veya küçük projeler için neden kullanılmıyor?" Olmalıdır. Java "modern Web uygulamaları" için kesinlikle kullanılmaz. Google'da , Java birçok hizmet için arka uçta kullanılır ve kapatma derlenmiş JS veya GWT ön uç için kullanılır. Sorun hız vs ölçeğinden biridir. Genellikle 1-3 mühendisden oluşan küçük ekiplerdir ve performans veya sürdürülebilirlik üzerinde yineleme hızına değer verirler. Ölçeklenebilirlik sorunlarına veya ekip kodu kodu bakım sorunlarına karşı koşmak, "sahip olmak istediğiniz" bir sorundur, yani bu aşamaya geldiğinde, ilk uygulamanızın müşteri veya yatırım almanın ilk kamburluğu üzerinde size yardımcı olduğunu gösteren bir işarettir.
Google gibi bir şirket, kullanıcı kazanamayacağı bir şey için ölçeklendirme uygulamak için zaman harcamasına rağmen, kaybı önleyebilecekleri için, ölçeklendirmek için bir şeyler inşa etme lüksünü karşılayabilir.
En azından, bence, birçok "havalı", "kalça", "modern" şirket, yineleme hızının ve sadeliğin en büyük gereksinimler olduğu küçük ekiplerle küçük uygulamalar geliştiriyor.
Web geliştirme ve Java'dan bahsettiğinizden beri, birçok kişi başlangıçta Java kullanmanın unutulma eğilimindedir. Bir web tarayıcısındaki uygulamaların sadece bunu değil, uygulamaların "sanal alanının" tam olarak geliştirildi ve Java ile ilgili güvenlik sorunları oluştu Appletler tarayıcıda çalışabiliyor ve yerel makine verilerine erişebiliyor (istemci tarafı güvenlik sorunu olarak da biliniyor). Elbette Java arka uç ve tek başına uygulamalarda sağlamdı, ancak Java ile dili Java uygulamalarıyla (tarayıcıda çalıştır) ilişkilendirmeyi düşünüyorum web geliştirme bileşeni olarak Java ile ilgili bazı algılamalar. Bundan hiç kurtulduğunu sanmıyorum.
Basit cevap: verimliliği temel alan öğrenme eğrisi.
RoR gibi çerçeve tabanlı sistemler, "büyüyü" dile/sözdizimine koyma eğilimindedir. Temel RoR sözdiziminizi artırmak ve bir uygulamayı çalıştırmak çok kolaydır.
Java ilk önce bir dildi ve araçlar ve çerçeveler daha sonra ortaya çıktı. Yani Java ve sonra Bahar, Grails, ya da süper IDE ya da her neyse öğrenmelisiniz. Ruby'nin favori örneği ayarlayıcılar ve alıcılar gerektirmez. Gerçek şu ki, Java IDE'ler de manuel kodlamadan kurtuldular ... ama hala kaynağınızda. Bu yaklaşımın yararı, çerçevenin altında, tutarlı bir dil olması. tüm Java geliştiriciler ile çalışabilir.
Bu fayda, zamanın önemli olduğu küçük girişimler için şüphelidir. Genellikle, kutudan çıkmış bir çerçeveyle yapamayacakları çok az şey yapıyorlar. Böylece RAD seçim sistemlerini alabilirler ve ertesi gün bir uygulama yayınlayabilirler.
Ancak Facebook ve Twitter'a bakarsanız, genişledikçe, kutu dışı çerçevelerle ele alınamayan şeyler buldular ve bu nedenle daha düşük seviyeli teknolojiler kullanmak zorunda kaldılar.
Çerçeve geliştiricilerin daha hızlı bir şey yapabildikleri bu kutsal savaş sahte, ihtiyaç duyduklarının çoğunu 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.
Java üzerindeki geleneksel web uygulamaları, iyi yapılandırılmış olmalarına rağmen, "hızlı bir şekilde geliştirilmiş" olmaktan çok uzaktır. Şimdiye kadar sadece bir tam web uygulaması (Java/Tomcat/Struts) yazmış olmama rağmen, son derece seçiciydi, hata ayıklaması beklenenden daha uzun sürdü ve iş mantığı katmanını uygularken genellikle acı vericiydi. Java'nın potansiyel savunmasında, Java'de yazdığım tek web uygulamasıydı (Java'daki sistem düzeyindeki uygulamaları programlamaya alışkım da) ve başka bir web uygulamasını biraz daha hızlı yazabileceğime inanıyorum ikinci kez.
Bunu söyledikten sonra, PHP ve C # 'da uygulamalar yazdım ve sadece daha iyi çalışıyorlar ve Java'dan çok daha bağışlayıcılar. Bundan da fazlası, Robbie'nin dediği gibi veritabanlarına kolay CRUD erişimine izin veren hızlı uygulama geliştirme için Ruby üzerindeki Rails yazılmıştır. Sorun, kendi başınıza geliştireceğiniz web sitelerinin çoğunun Java tarafından sunulan (ve gerçekleştirmenizi gerektirdiği) özelleştirme düzeyine ihtiyaç duymamasıdır. Ayrıca, her DB bağlantı nesnesinin elle yazılması gerekir ve şablon oluşturmak o kadar kolay değildir. Çevresinde daha iyi bir çerçeve olabilir, özellikle Java 7'nin yeni dinamik dil desteği özellikleri avantajlarından yararlanan bir çerçeve olabilir, ancak henüz araştırmayı yapmadım.
Google App Engine, Java'yı destekler, böylece Eclipse'yi IDE ve dağıtım arayüzü olarak makul bir şekilde belgelenmiş bir Google API ile kullanarak tüm web uygulamanızı Java'da yazabilirsiniz - böylece söylemem. kullanılmaz veya kullanılamaz.
"Modern web uygulaması geliştirme" yi nasıl tanımladığınıza bağlıdır. Başlangıç, hızlı geri dönüş web siteleri hakkında konuşuyorsanız, bu amaç için tasarlanmış dilleri ve çerçeveleri dikkate almanız gerekir. İstikrarlı, ölçeklenebilir, kurumsal düzeyde web geliştirme arıyorsanız, bu idealleri destekleyen dilleri ve çerçeveleri ararsınız. Kitabımda, bunlar çok farklı iki hedef. RoR, Groovy vb. Birincisi için iyidir ve Java genel olarak ikincisi için daha uygundur.
Çalıştığım başlangıçta, birbirimizi tamamladıkları için API'mızı uygulamak için hem Java ve JRuby 'yi kullanmayı seçtik.
Altyapı, süreç dağıtımı ve iletişim için Java'nın sağlamlığından yararlanırken, tüm aramalar JSON içerdiğinden ve gevşek bir şekilde temsil edilen bir temsili (JSON) gevşek bir şekilde kullanmak çok daha mantıklı olduğu için API uç noktalarının gerçek uygulaması için JRuby'yi seçtik tipi dil (Ruby).
JRuby sınıflarımızdan birinin bir darboğaz haline geldiğini görürsek, doğrudan Java (temelde satır satır çeviri) içinde yeniden uygularız. çok fazla hesaplama yapmalı ve bu bağlamda JRuby bir prototip dili gibi davranıyor.
Kendi dinamik sınıf yükleyicimizi uyguladık, yani Java sınıfları sunucuyu yeniden başlatmadan anında değiştirebiliriz ve seçimden çok memnunuz. Bu nedenle "derlemeniz ve her seferinde yeniden başlat "argümanı fazla ağırlık taşımaz.
Anahtar, tüm Java EE şeylerinden kaçınmaktır - büyük ve hantal ve çeviktir.
Hala Java bir çok web geliştirmede kullanılıyor gibi hissediyorum. Ama genellikle daha iş odaklı-no-teknoloji-büyük şirket tür gelişmeler, hangi hangi genellikle biraz çekiş ve kendi çalışmalarını tanıtmak zorunda yeni girişimler daha az açık olduğu gibi, teknoloji ile daha fazla ilgilenen Bu yüzden, birçok kurumsal web sitesinde kullanılan bile, muhtemelen asla bilemezsiniz, çünkü teknoloji yığınlarını herkese açık bir şekilde anlatma umurunda değil.
Bütün orijinal soruları yorumlayarak ...
Bu bir dil zayıflığı mı? Python veya Ruby, Java ayrıntılıdır ve benzer şeyler yapmak için daha fazla koda ihtiyaç duyar, ancak bu sadece dilin yetenekleri değil, onu çevreleyen topluluk ve bu araçları kullanan geliştiricilerdir. Python, Ruby, PHP, vb.'de açık kaynak kodludur ve bulmak, Java dünyasında olduğundan daha kolaydır, çünkü bu daha çok hizmet vermeye (ve ücretlendirmeye) odaklanmıştır. Örneğin, = Ruby topluluk gerçekten web geliştirmeye yönelik olduğundan, Ruby) bir web projesi için mevcut olan sorunlar ve araçlar hakkında bilgi sahibi olacak her geliştirici. Java geliştiriciler için, raporlama sistemleri gibi başka tür sistemler üzerinde çalışmış olabilirler) doğru olmayabilir. Elbette, iyi bir geliştirici yetişir, ancak ortalama = Java geliştirici l konusunda daha az endişeli yeni teknolojiler ve yeni diller kazanmak.
Java 'nın haksız bir klişesi mi, çünkü çok uzun zamandır var (eski teknolojileri ile haksız bir şekilde ilişkilendirildi ve " modern "yetenekler)? Java gerçekten o kadar eski değil ve adil olmak, büyük ölçüde iyileşti. Yaklaşık 10 yıldır harika, alakalı bir platformdu. Ama o zamandan beri, Ruby Rails. gibi) gibi yeni sorunları göz önünde bulunduran yeni platformlar var. Java dünya, farklı sorunları ile, bu yüzden dışında yeni projeler arayan insanlar farklı araçlar arıyor.Ayrıca, Java tasarım, çoklu platform olarak), bugünkü kadar önemli değil önceydi.
Java geliştiricilerin negatif klişesi çok mu güçlü?) (Java artık "cool" değil) İçinde bazı gerçekler var. Java hala "bir iş bulmayı" öğrenmek için kullanılan dildir. Yani, umursamıyorsanız, ama sadece para kazanmak için bir şeyler öğrenmek istiyorsanız, biraz öğrenme = Java ve geliştirmek için bir daha asla umursamıyorum. Yine, algı ve görünürlük hakkında çok şey var. = Java bilgilerini paylaşmadan kodlama yaparken, bloglar yazıp açık kaynakta işbirliği yapan birçok PHP geliştirici, belki de iyi değil). PHP geliştiriciler Java olanlardan daha iyidir, çünkü onlar hakkında belirli geri bildirimleriniz vardır.
Diğer dillerde yazılmış uygulamaların oluşturulması gerçekten daha hızlı, bakımı daha kolay ve daha iyi performans gösteriyor mu? Daha hızlı oluşturulduğunu söyleyebilirim. PHP, Python veya Ruby) gibi dillerin ilkeleri, sürekli değişebilen yazılımlar oluşturmak için onları oldukça iyi hale getirir. Java iyi tanımlanmış bir arayüze sahip olmak önemlidir, bu da daha kararlı (ve değiştirilmesi zor) arayüzlere yol açar.Bu yeni bir başlangıçta çok önemlidir, bu da ana sorun daha önce bir ürün elde etmektir. Performans hakkında, "Java Ruby'den daha hızlıdır. Dönemi" gibi gerekli performansı elde etmek için ihtiyaçları yanlış anlamak ve sihirli numaralar kullanmaya çalışmak çok kolaydır. "MongoDB web ölçeğidir". Gerçeklik bundan daha zordur.
Java sadece yeni bir dile uyum sağlamak için çok yavaş olan büyük şirketler tarafından mı kullanılıyor? Kesinlikle, zaten bir mevcut şirket Java şirkette geliştiriciler, yeni projeler için aynı dili kullanmaya devam etmeyi kolaylaştırır.Bu, özellikle şirketin çekirdeği teknoloji değilse, “güvenli bahis” olarak algılanır. Ancak, yine de, Java SADECE büyük şirketlerde kullanılmıyor, hala Java gibi harika şeyler kullanan birçok başlangıç var (Örneğin, - FightMyMonster veya Swrve Java geniş kapsamlı) kullanır, ancak başlangıç sahnesindeki genel eğilimin diğer dilleri kullanmak olduğunu söyleyebilirim. çoğu insanın Java ile çalışmaktan daha "arkadaşça" ve "eğlenceli" diller olarak algılanan Ruby, Python veya PHP) ile çalışmak daha heyecan verici olacağı için insanları elde etmenin bir yoludur.
Bu doğrudur, ancak Java ve ekosistemi nedeniyle değil. Java kullanıldığında büyük karışıklıklar ve ağır iğrençlikler yaratma eğilimindedir).
İşleri hızlı bir şekilde oluşturmanıza izin veren yeterli sayıda çerçeve (spring-mvc, grails, play, vb.) Vardır. İnsanların sistemlerini geliştirmesi, insanların Java ekosistemiyle çalıştıklarında elde ettikleri artan bilgi ile birlikte gelen bir sorundur) - çok daha fazla şey biliyorsunuz ve bunları elinizde bulunduruyorsunuz (araçlar var her şey için) ve "her şey çivi gibi görünür".
Eğer "hacky" iseniz, Java diğer dillerde olduğu gibi) hemen hemen aynı şeyi yapabilirsiniz ve işte bunu gösteren bir çalışma:
49 programcının çalışması: statik tip sisteminin geliştirme süresi üzerinde hiçbir etkisi yoktu ... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf
Daha önce söylenenlere biraz eklemek için, birçoğunun hiçbir şeyden (kelimenin 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 bir fikir varsa, şu anda bulunduğunuz yerden web uygulamanızı yazmaya gitmek, bir barındırma sağlayıcısı veya kendi altyapınızı (EC2 görüntüsü gibi) seçmenizden düşmek kadar kolaydır. Deneyimime göre Java'yı seçmek genellikle daha fazla iştir ve çoğu zaman daha pahalıdır.
Ayrıca, Linux ve PHP/Python/Ruby ile giderseniz, araçlar ve platform ücretsizdir ve birbirlerini destekleyecek şekilde tasarlanmıştır. Java ile, bazen iki dünya (OS ve Java) bazen birbirleriyle uyum içinde çalışmıyor gibi görünüyor.
Kim demedi?
Bahar MVC + Bahar Verileri JPA veya Mongo + Thymeleaf templating + Kahve-maven-eklentisi için Kahve JS transpiling ve gitmek için iyi.
Birçoğu Java ve web uygulaması geliştirmeyi, büyük mavi ve kırmızı şirketlerden korkunç J2EE uygulama sunucularıyla birlikte gelen temel "Merhaba Dünya" çevrimiçi olmadan önce haftalarca eşit çalışma yapan J2EE'nin dehşetiyle ilişkilendirebilir. .
Doğru, son JEE spesifikasyonları ve uygulamaları daha hafiftir, ancak kısa döngü hızlı bir geliştirme projesi için böyle bir şey önermeden önce üç kez düşünürdüm.
Bu hala Java'da web uygulaması geliştirme yapmanın standartlara dayalı yoludur. Birçoğu diğer cevaplarda bahsedilen alternatifler, yapmak için çok fazla seçenek içeren daha karışık ve kafa karıştırıcı bir resim sunuyor.
Diğer diller, bu çokluk yerine tek bir anahtar teslim çözümü tasvir eder. Bu, kızartmak için daha önemli balıklarınız olduğunda bu seçimin daha uygun görünmesini sağlar.
Düşündüğünüzden çok daha fazla kullanıldığını düşünüyorum - kullanım su hattının hemen altında. Çok sayıda Ruby on Rails kalın, süslü Java hizmetleri etrafında Rails). Özellikle de herhangi bir şeyle uğraşmaya başladığınızda büyük verilere yaklaşıyor.
Java güzeldi, Java güzel ve Java gelecekte güzel olacak. Bir web uygulaması geliştiriyorum. Java kullanma.
Java ile ilgili temel sorun, uygulama sonuçlarını görmek için 7-10 kişilik orta büyüklükte bir takıma ihtiyaç duymasıdır. Arka uç geliştiricileri, ORM'den Uygulama çerçevesine ve sunum katmanına kadar uygulama mimarisi bilgisine sahip olmalıdır. Masadaki geliştiriciler için çok fazla seçenek var ve bu soruları gündeme getiriyor, bir ORM kullanmak iyi bir fikir mi? Hangi ORM çerçevesi kullanılacak? Hangi uygulama çerçevesi kullanılacak? Ön uç nasıl uygulanır? Bütün bunlar geliştiricileri mücadele eder ve geliştiricilerin aşina olmadığı bir çerçeveyle bu teknolojiyi seçmeleri için kombinasyonları son kullanıcıdan sonsuz hale getirir. Aynı şey IDE eklentileri; çok fazla seçenek varsa, bir eklentinin bu sürümünün IDE ve benzeri sürümlerle çalışıp çalışmadığını yüklemek, yapılandırmak ve test etmek için çok zaman harcanır. Son şey ev sahipliği yapıyor; birçok gelişmiş Java Uygulamalar halka açılmıyor çünkü Java web uygulaması için uygun bir web barındırma yok, ayda 80 $ için bir VPS almak çok fazla geliştirici için bir seçenek değil ve çoğu uygulamanın birden fazla VPS'ye ihtiyacı vardır.
Web uygulamaları oluşturmak için çok fazla Java kullanıyorum. * dil itsel * f söz konusu olduğunda, sadece bir (ama büyük) sorun buluyorum - çok satırlı destek eksikliği. Bu, salt Java kodunda yazdırmayı/şablonlamayı çok okunmaz hale getirir).
Ama asıl sorun iyi web çerçeveleri eksikliği. Birçok çözümle çalıştım ve hiçbiri iyi ve hatta tatmin edici olamazdı.
Çoğu aslında XML programlama. JSF tonlarca XML üretirsiniz ve etiketleri metin alanlarının en üstüne yeniden düzenlemek gibi genel bir özelliği değiştirmek isterseniz, birden fazla yerde aynı değişikliği yapıyor. Evet, içeriğiniz var, ancak bunları PHP'nin içerdiği içeriklerle karşılaştırın ...
Ayrıca, yeni JSF, yıllar önce JavaScript çerçeveleri tarafından bilinen "ekstra" özellikler içerir ...
ZK , Java kodunda web öğelerinin oluşturulmasına izin verdiğinden, değişiklikleri kolaylaştırır ( OOP doğru - devralma vb.) kullanırsınız, ancak bu Java kodu sunucu tarafında yürütülür, bu da büyük bir performans sorunudur - her tıklama bir paketin sunucuya gönderilmesine neden olur.
Şey, GWT birlikte çalıştığım en iyi web çerçevesi. Web tasarımında nesne programlamaya izin verir. Ekrandaki her öğe Java nesnesi ile temsil edilir, bu size tam esneklik sağlar, ancak ... Derleme süresi çok uzundur ve oluşturulan Javascript, GWT olmadığı için optimal olmaktan uzaktır. JavaScript olanaklarını tam olarak kullanmamak (en azından kullandığım sürümde yansıma desteği yok ve HashMap'in ölümcül uygulaması).
Velocity gibi şablonlar kullanabilirsiniz, ancak yukarıdaki gibi, bunlar PHP gibi diller tarafından verilen cazip olasılıkların fakir bir sürümüdür.
Yani, Java'ya karşı bir nefret değil, ancak PHP, Python vb.
Java ile ilgili sorun, bu dilin okulda öğrenilmesidir, bu yüzden yeni programcılar tarafından en çok bilinen dildir.Bu yüzden kendinizi kitleden ayırmak istiyorsanız, yeni bir şey öğrenmeniz gerekir. dil, Java herkesin dilidir.
İkinci neden, bir web uygulaması oluşturmak istediğinizde okulda veya büyük şirketlerde, öğretmenler veya halihazırda mevcut olan kişilerin size Java) bu uygulamayı daha hızlı oluşturmanıza yardımcı olacak çerçeveler vermesidir. Ama aslında, bu şekilde web uygulamanızı gerçekten web'i (HTTP, HTML, CSS, Javascript, vb ...) anlamadan inşa edersiniz.Bu eğilim RoR veya Python gibi diğer dillerde daha az görülür, bu dilleri kullanan geliştiriciler Web'i daha iyi anlamak.
Bu nedenle, modern web uygulamaları oluşturmak isteyen statup'lar, iyi web geliştiricileri çekmek için RoR, PHP veya Python) kullanmayı tercih ederler. bir programlama dili.
Eğer "modern" derken popüler demek istiyorsan (çoğu basın yayınını alırken) bunun nedeni Java kullanılmaz) çok basittir - çünkü tüm "havalı çocuklar" Ruby (veya Python veya Clojure veya Scala veya bu günlerde “havalı” olan her şey).
Bunun daha derin bir anlamı var, Ruby veya Python “modern” web uygulamalarını yazmak için kullanan bu insanlar genellikle gerçekten harika yenilikçiler). zaman ve beyin gücünden tasarruf ederken can sıkıcı problemleri basit ve etkili bir şekilde çözmeyi seviyorum.Bazıları bunların iyi programcıların nitelikleri olduğunu söyleyebilir.
Bu insanlar genellikle büyük şirketlerin nadiren yaptıkları projeler etrafında en fazla baskı yaratırlar. Çok fazla açık kaynak yaparak veya blog yazarak ya da her neyse.
Bu nedenle, bu insanların problemleri çözmenin daha basit/daha küçük/daha hızlı/daha yalın yollarının sunulduğu dinamik diller dünyasına çekilmesi anlaşılması kolaydır. Ne yazık ki, aynı insanlar büyük Java geliştiriciler, olgun ve terk Java bandwagon çünkü rahatsız edici ve zor (onlar için) kullanmak ve aynı sorunları çözmek.
MVC framework X ile basit bir web uygulaması oluşturuyorsanız, Rails/Django'da sadece 100 satır kod yazmanız/düzenlemeniz gerekir ve bunun aksine Java aynı şey - bunun neden sinir bozucu görünebileceği çok açık.
İfadenizle ilgili olarak "Java'dan kritik" eksik "bir şey görmedim ve aynı uygulamayı oluşturmamı engelledim." Soru şu: Rails/Django/Whatever'da aynı miktarda deneyime sahip olsaydınız ... bu iki uygulama nasıl olur Java ve Java olmayanlar birbirleriyle karşılaştırır, zaman ve çaba harcar ve bulabileceğiniz diğer tüm metrikler.
İlginç bir cevap, drupal'ı kuran Dries Buytaert tarafından verilir. Doktorası Java ile ilgili olmasına rağmen, drupal için php'yi seçti ve bunu yapmaktan pişman olmadı. Burada (ve bazı yorumlarında) okuyabilirsiniz: http://buytaert.net/why-php-and-not-Java
Java'da Drupal yazıldıysa kritik kitle elde etmek çok zor olurdu.