Scala Java yerine iyi bir seçim olur mu?


11

Java'daki tüm .net geliştiricilerinin (çerçeveler / ECO sistemi vb.) Eğitimini içeren yeni bir projeye başlayacağız. C # ile yazılmış bir sürü kodumuz var ve tüm bunları Java'ya yeniden yazmak zorunda kaldığımız için bunların hepsi boşa gidecek gibi görünüyor. Gördüğüm sorun, ilk yıl kadar (muhtemelen 2 yıl) teslim edecek hiçbir şeyimiz olmayacak, çünkü çoğu zaman daha önce ama şimdi Java'da olanları çoğaltarak harcayacağız.

Ekibimiz dünyanın farklı ofislerinde dağıtıldığından ve .net kullanan çok sayıda java geliştiricimiz (20 ila 30) ve 10 geliştiricimiz olduğundan, tüm geliştiricileri aynı dili / platformu kullanarak elde etmek istiyoruz. bileşenleri / modülleri yeniden kullanın. Böylece yönetimin bakış açısını anlayabiliyorum.

Dün Scala'ya rastladım ve bunu mevcut ürünle (C # ile yazılmış) kullanmanın daha iyi olup olmayacağını merak ettim ve en azından bir yıl içinde çalışan bir ürünümüz olacak. Ayrıca bir yıl içinde, Java dünyasında kullanılabilecek modüllere sahibiz, bununla birlikte ürünün diğer kısımlarını da taşıyoruz.

Scala, elde etmeye çalıştığımız şey göz önüne alındığında Java'dan daha iyi bir seçim olur mu?


2
Her şeyi başka bir dilde yeniden mi yazıyorsunuz? Ve teslim edilecek hiçbir şey olmadan 2 yıl? Korkunç bir yönetim kararı gibi geliyor ve yarım yıl içinde yeni bir işe ihtiyacınız olabilir;)
zvrba

Evet, bu düşünülmüştü. Şimdi bakmaya ve C # :) 'ye sadık
kalmamdan

Yanıtlar:


15

Dikkate alınması gereken bazı noktalar:

  • Scala harika bir dildir - ancak doğru bir şekilde öğrenmek ve kullanmak oldukça zor bir dildir. Sadece benim düşüncem değil, deneyimli Scala uzmanları bile bunu söylüyor . Ekibinizdeki beceri düzeyine bağlı olarak, muhtemelen en deneyimli / uzman geliştiricileriniz için bir araç olarak en uygunudur
  • Java ve C # birçok yönden oldukça benzerdir - birinde eğitilmiş geliştiricilerin hareket etmesi uzun sürmez (sözdizimi benzerdir, çoğunlukla sadece her birinin tuhaflıklarını öğrenmek ve farklı kütüphaneleri anlamak, genellikle benzer işlevselliğe sahip ancak farklı şekilde paketlenmiş ve / veya farklı adlara sahip olan). Şahsen Java'dan C # 'a geçtim ve herhangi bir zorluk yaşamadan tekrar Java'ya döndüm.
  • Ayrıca tüm JVM dillerinin (Java ve Scala, ancak JRuby ve Clojure vb.) Çok uyumlu olduğunu da belirtmek gerekir - aynı temel JVM platformunu paylaşırlar ve kod / kütüphaneleri kolayca paylaşabilirler.

Tüm bunlar göz önüne alındığında, bahislerinizi korumak ve karışık bir Java / Scala stratejisine gitmek isteyebilirsiniz - yani JVM platformuna geçiş yapın ve başlangıçta Java'ya odaklanın, ancak geliştiricileriniz rahat ve / veya olduğunda Scala kullanma seçeneğini açık tutun eldeki soruna uyuyor.

Yönetim açısından bakıldığında, bunun birçok avantajı vardır:

  • Tüm kütüphaneleri paylaşmaya devam edebilirsiniz, böylece yatırımlarınız güvende olur
  • Daha az deneyimli geliştiriciler C # -> Java oldukça hızlı transfer edebilecektir
  • Daha deneyimli geliştiricileriniz Scala'nın gelişmiş özelliklerinden tam olarak yararlanabilir
  • Tüm araçlar uyumludur / paylaşılabilir (derleme sistemleri, IDE'ler, dağıtım araçları vb.)
  • JVM'deki çok geniş açık kaynaklı kütüphane ekosistemine ücretsiz erişim elde edersiniz (platformlar arası taşınabilirliğin yanı sıra, JVM platformunda olmanın en iyi nedeni budur)
  • Geliştiricileriniz, becerileri / eldeki görev göz önüne alındığında onları en verimli hale getiren dili kullanabilirler (bazı durumlarda Java, diğerlerinde Scala, belki de gelecekte Clojure gibi diğer diller)

Dezavantajı, hala destekleyecek iki ana dilinizin olmasıdır. Ama muhtemelen aslında zaten ikiden çok daha fazlasına sahipsiniz (kabuk komut dosyaları? Etki alanına özgü XML biçimleri? Yapılandırma dosyaları? Kural motorları? HTML? Javascript?).


Bilgi için teşekkürler. Sadece en iyi yolun ne olduğunu bulmaya çalışıyorum ve bazı mükemmel bilgiler verdiniz. Şu anda iyi bir OO geliştiricimiz var, ancak fonksiyonel programlamaya aşina olmayan kimse var.
JD01

1
Yardımcı olduğuma sevindim! Scala'nın daha çok paradigma / OOP tabanlı bir dil olduğunun farkında olmakta fayda var. Scala'da kesinlikle FP yapabilirken, odakta daha net bir şekilde işlevsel olan diller istiyorsanız, Haskell veya Clojure muhtemelen işarete daha yakındır.
mikera

Kodun yeniden kullanımına gelince, ilk günden itibaren Clojure veya Scala kullandıysam veya karışık bir stratejide söylediğin gibi, hem .net hem de Java'da Clojure / Scala kodunu tekrar kullanabilir miyim? Bunun yönetim için iyi bir satış noktası olup olmadığını merak ediyorum. Bu şekilde yine de bir ürün çıkartabiliriz (yeni özelliklere sahip eski ürün) ve ayrıca clojure / scala modüllerinin kodunu yeniden kullanarak Java'da mevcut kodu yeniden yazma yolunda olabiliriz. Buradaki düşüncelerimi düzeltiyor muyum yoksa bu başka problemler yaratıyor mu?
JD01

1
İsterseniz Clojure / Scala işlevselliğini bir web hizmeti veya REST arabirimi olarak gösterebilirsiniz. Bu, doğrudan bir kütüphane inşa etmekten biraz daha yüksek bir yüktür (işlevselliği Java / başka bir JVM dilinden çağırmak istiyorsanız en iyi seçenek olurdu), ancak kodu istediğiniz herhangi bir istemciden arama esnekliği verecektir. Net, Java, Ruby, vb.)
mikera 21:11

Teşekkürler Mike. Kod yeniden kullanma yolu en azından yönetimine Scala / Clojure seçeneği ile tam bir yeniden yazma gerekli olmadığını düşünüyorum. Sonunda Netscape gibi olmamızı istemiyorum :). Bir kütüphane oluşturmaya geri döndüğümde, web hizmetleri olmadan .net ve java'da kullanamaz mıydım?
JD01

15

Üçüncü bir seçenek ekleyeceğim. Kuruluşunuzdaki herhangi biri C # ve Java modülleriniz arasındaki birlikte çalışmayı inceledi mi? C # işlevselliğini nasıl açığa çıkarıyorsunuz? SOAP veya RESTFul web hizmetleri bir seçenek midir?

2 yıllık bir yeniden yazma, bir organizasyon için ölüm kalıbı olabilir (sadece Netscape'e sorun). Bununla birlikte, mevcut kod birbirleriyle güzel bir şekilde oynatılırken kademeli bir geçişin potansiyel olarak daha az iş etkisi vardır.


3

C # 'ı Scala'ya yeniden yazmak, Java'ya yeniden yazmak kadar zor olacaktır. Hangi dilin "daha iyi" olduğu konusunda, bu nokta tartışmalıdır, her dilin kendi artı ve eksi noktaları vardır.

Kod tabanınızın ne kadar büyük olduğunu bilmiyorum ama 30 geliştirici için 2 yıl basit bir yeniden yazma için büyük görünüyor. C # 'ı bildiğinizde Java almak kolaydır. Rahat etmem bir iki günümü aldı.

Benim tavsiyem, yönetimin yoluna girmesine izin vermek ve becerilerinizi genişletmek için ödeme almanın tadını çıkarmak olacaktır.


Yeni ürün üzerinde sadece yaklaşık 10 geliştirici çalışacak. Sadece Scala ile gitmenin avantaj ve dezavantajlarını bulmaya çalışıyorum.
JD01

1
Size meydan okuyan bir cevap vermek için projenizin veya Scala'nın özellikleri hakkında yeterince bilgim yok. Ancak bana öyle geliyor ki, kimsenin bilmediği üçüncü bir dili tanıtmak meseleleri zorlaştırıyor.
Tom Squires

Haklı olabilirsin. Bunu bir yıl içinde bir ürün almak açısından düşünüyordum, aynı zamanda .net ve java'da kodu tekrar kullanabiliyordum. Puanlarınız iyi not edildi :)
JD01

1

Ben daha kolay seçenek Java geliştiricileri C # öğrenmek için almak olacağını düşünüyorum. Her iki dil de birçok yönden çok benzer ve bir java geliştiricisinin C # alması uzun zaman almaz. C # öğrenen birçok java geliştiricisi ile çalıştım ve genellikle sorunsuz bir geçiş. Bir süre takılı kalabilecekleri alan WebForms programlama modelidir. Java geliştiricileri MVC paradigmasına daha iyi uyum sağlar. Bu şekilde, yeni özellikler geliştirmeye başlamadan önce bir yıl beklemenize gerek yoktur. Scala ile ilgili olarak, yeni bir dil öğrenmeye çalışan 30 geliştiricinin tümüyle yeni bir sorun getireceğinden korkuyorum.


Java ile yazılmış çok fazla ürün var, bu yüzden onları C # öğrenmelerini sağlamak zor olurdu. Scala ile umuyordum, yeni ürüne sahip olduktan sonra java geliştiricileri kütüphaneleri Scala öğrenmeye ihtiyaç duymadan olduğu gibi kullanabilirler.
JD01

2
Mevcut .Net kodunuzu, java geliştiricilerinin Java'daki tüm yeni özellikleri çağırabileceği ve geliştirebileceği hizmetler olarak göstermeniz uygun olmaz.
Sriram

Bu geçmişte önerilmişti ama .net'ten uzaklaşmamıza karar verildi.
JD01

Vaov! Sonra basit tutmak ve java kodu yeniden yazmak. Bence Scala yönetilmesi için bir karmaşıklık daha getirecek ve yönetime zor bir satış olacak.
Sriram
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.