Czy Scala byłaby dobrym wyborem zamiast Javy?

11

Rozpoczniemy nowy projekt, który obejmie szkolenie wszystkich programistów .net w Javie (frameworki / system ECO itp.). Mamy dużo kodu napisanego w języku C # i wydaje się, że wszystko to zostanie zmarnowane, ponieważ musimy ponownie napisać to wszystko w Javie. Problem, jaki widzę, polega na tym, że w pierwszym roku (prawdopodobnie 2 lata) nie będziemy mieli nic do dostarczenia, ponieważ spędzimy większość czasu na odtwarzaniu tego, co mieliśmy wcześniej, ale teraz w Javie.

Ponieważ nasz zespół jest rozproszony w różnych biurach na całym świecie i mamy dużą liczbę programistów Java (od 20 do 30) oraz 10 programistów korzystających z .net, chcemy, aby wszyscy programiści korzystali z tego samego języka / platformy, abyśmy mogli zacząć ponownie użyć komponentów / modułów. Więc mogę zrozumieć punkt widzenia kierownictwa.

Wczoraj natknąłem się na Scalę i zastanawiałem się, czy lepiej byłoby użyć tego z obecnym produktem (który jest napisany w C #), a wtedy przynajmniej będziemy mieć działający produkt za rok. Również za rok mamy moduły, których można używać w świecie Java, podczas gdy migrujemy inne części produktu.

Czy Scala byłaby lepszym wyborem niż Java, biorąc pod uwagę to, co próbujemy osiągnąć?

JD01
źródło
2
Przepisujesz wszystko w innym języku? A 2 lata bez niczego? Brzmi jak okropna decyzja kierownictwa i jakbyś potrzebował nowej pracy za pół roku;)
zvrba
Tak, to zostało wzięte pod uwagę. Nie jestem pewien, gdzie powinienem zacząć szukać i trzymać się C # :)
JD01,
1
To brzmi, jakbyś chciał zrobić coś, czego nigdy nie powinieneś robić
back2dos,

Odpowiedzi:

15

Kilka punktów do rozważenia:

  • Scala jest świetnym językiem - ale warto zauważyć, że jest to również dość trudny język do nauki i prawidłowego używania. Nie tylko moja opinia - tak twierdzą nawet doświadczeni eksperci Scali . W zależności od poziomu umiejętności w zespole prawdopodobnie najlepiej nadaje się jako narzędzie dla najbardziej doświadczonych / doświadczonych programistów
  • Java i C # są dość podobne pod wieloma względami - nie zajmie to dużo czasu, aby programiści przeszkoleni w jednym z nich się poruszali (składnia jest podobna, głównie jest to tylko przypadek poznania dziwactwa każdego z nich i zrozumienia różnych bibliotek, które często mają podobną funkcjonalność, ale są pakowane inaczej i / lub mają różne nazwy). Osobiście przeszedłem z Javy na C # i wróciłem ponownie do Javy bez żadnych trudności.
  • Warto również zauważyć, że wszystkie języki JVM (Java i Scala, ale także JRuby i Clojure itp.) Są bardzo kompatybilne - mają tę samą podstawową platformę JVM i mogą bardzo łatwo udostępniać kod / biblioteki.

Biorąc to wszystko pod uwagę, możesz chcieć zabezpieczyć swoje zakłady i wybrać mieszaną strategię Java / Scala - tj. Migrować na platformę JVM i początkowo skupić się na Javie, ale pozostaw opcję korzystania ze Scala, gdy Twoi programiści są komfortowi i / lub pasuje do aktualnego problemu.

Z punktu widzenia zarządzania ma to wiele zalet:

  • Nadal możesz udostępniać wszystkie biblioteki, aby Twoje inwestycje były bezpieczne
  • Mniej doświadczeni deweloperzy będą w stanie szybko przenieść C # -> Java
  • Twoi bardziej doświadczeni deweloperzy mogą w pełni korzystać z zaawansowanych funkcji Scali
  • Wszystkie narzędzia są kompatybilne / mogą być udostępniane (systemy kompilacji, środowiska IDE, narzędzia wdrażania itp.)
  • Otrzymujesz bezpłatny dostęp do bardzo szerokiego ekosystemu bibliotek JVM o otwartym kodzie źródłowym (oprócz przenośności między platformami jest to prawdopodobnie najlepszy powód do korzystania z platformy JVM)
  • Twoi programiści mogą używać języka, który sprawia, że ​​są najbardziej produktywni, biorąc pod uwagę ich umiejętności / zadania (Java w niektórych przypadkach, Scala w innych, może inne języki, takie jak Clojure w przyszłości)

Minusem jest to, że nadal masz dwa podstawowe języki do obsługi. Ale prawdopodobnie masz już wiele więcej niż tylko dwa (skrypty powłoki? Formaty XML specyficzne dla domeny? Pliki konfiguracyjne? Mechanizmy reguł? HTML? JavaScript?), Więc możesz argumentować, że tak naprawdę to nie jest wielka sprawa.

mikera
źródło
Dzięki za informację. Próbuję tylko dowiedzieć się, co jest najlepszym rozwiązaniem, a ty udzieliłeś doskonałych informacji. W tej chwili mamy dobrych programistów OO, ale nikt nie zna programowania funkcjonalnego.
JD01,
1
Miło, że mogłem pomóc! Warto wiedzieć, że Scala jest bardziej językiem opartym na wielu paradygmatach / OOP. Chociaż na pewno możesz robić FP w Scali, jeśli chcesz, aby języki, które są bardziej funkcjonalne w centrum uwagi, Haskell lub Clojure są prawdopodobnie bliżej znaku.
mikera
Jeśli chodzi o ponowne użycie kodu, jeśli używałbym Clojure lub Scali od pierwszego dnia, a nawet jak powiedziałeś w strategii mieszanej, czy mógłbym ponownie użyć kodu Clojure / Scala zarówno w .net, jak i Javie? Zastanawiam się, czy jest to dobry punkt sprzedaży dla kierownictwa. W ten sposób nadal możemy wydostać produkt (stary produkt z nowymi funkcjami) i być na drodze do ponownego napisania istniejącego kodu w Javie z ponownym użyciem kodu modułów clojure / scala. Czy mam rację tutaj, czy to otwiera inne problemy?
JD01,
1
Możesz udostępnić funkcjonalność Clojure / Scala jako usługę internetową lub interfejs REST, jeśli chcesz. Jest to nieco wyższy narzut niż bezpośrednie budowanie biblioteki (co byłoby najlepszą opcją, jeśli chcesz wywołać funkcjonalność z Java / innego języka JVM), ale z pewnością dałoby elastyczność wywoływania kodu z dowolnego klienta, który ci się podobał (. Net, Java, Ruby itp.)
mikera
Dzięki Mike. Myślę, że ścieżka ponownego użycia kodu przynajmniej pokazałaby zarządowi, że pełne ponowne zapisanie nie jest konieczne w przypadku opcji Scala / Clojure. Nie chcę, żebyśmy skończyli jak Netscape :). Wracając do budowania biblioteki, czy mógłbym po prostu nie używać jej w .net i java bez usług sieciowych?
JD01,
15

Dodam trzecią opcję. Czy ktoś w twojej organizacji patrzył na interop między twoim C # i modułami Java? Jak udostępniasz funkcjonalność C #? Czy usługi sieciowe SOAP lub RESTFul są opcją?

Dwuletnie ponowne pisanie może być zabójstwem dla organizacji (wystarczy zapytać Netscape). Jednak stopniowa migracja, podczas gdy istniejący kod ładnie ze sobą współgra, ma potencjalnie mniejszy wpływ na biznes.

Martijn Verburg
źródło
3

Przepisanie C # na Scalę będzie tak samo trudne jak przepisanie na Javę. Co do tego, który język jest „lepszy”, ten punkt jest dyskusyjny, każdy język ma swoje własne plusy i minusy.

Nie wiem, jak duża jest twoja baza kodu, ale 2 lata dla 30 programistów wydają się ogromne dla zwykłego przepisania. Pobieranie Java, gdy wiesz, że C # jest łatwe. Zajęło mi dzień lub dwa, żeby się z tym pogodzić.

Moją radą byłoby pozwolić, aby zarządzanie zaczęło działać i cieszyć się faktem, że zarabiasz na rozwijaniu swojego zestawu umiejętności.

Tom Squires
źródło
Tylko około 10 programistów będzie pracować nad nowym produktem. Próbuję tylko dowiedzieć się, jakie byłyby zalety i wady korzystania ze Scali.
JD01,
1
Nie wiem wystarczająco dużo o szczegółach twojego projektu lub Scali, aby dać ci wyzywającą odpowiedź. Wydaje mi się jednak, że wprowadzenie trzeciego języka, którego nikt nie zna, skomplikowałoby sprawy.
Tom Squires,
Możesz mieć rację. Myślałem o tym w kategoriach wypuszczenia produktu za jakiś rok, a jednocześnie mogłem ponownie wykorzystać kod w .net i java. Twoje punkty są dobrze zanotowane :)
JD01
1

Myślę, że łatwiejszą opcją byłoby skłonienie programistów Java do nauki języka C #. Oba języki są bardzo podobne pod wieloma względami i nie zajmuje dużo czasu programistom Java do pobrania C #. Pracowałem z wieloma programistami Java, którzy nauczyli się języka C # i zwykle jest to płynne przejście. Jedynym obszarem, w którym mogą utknąć na chwilę, jest model programowania WebForms. Programiści Java lepiej dostosowują się do paradygmatu MVC. W ten sposób nie musisz czekać przez rok, zanim zaczniesz opracowywać nowe funkcje. Jeśli chodzi o Scalę, obawiam się, że wprowadzi to zupełnie nowy problem ze wszystkimi 30 programistami próbującymi nauczyć się nowego języka.

Sriram
źródło
Jest tak wiele produktów napisanych w Javie, więc uzyskanie ich do nauki C # byłoby trudne. Miałem nadzieję, że dzięki Scali, gdy będziemy mieli nowy produkt, programiści Java będą mogli korzystać z bibliotek bez konieczności nauki Scali.
JD01,
2
Czy nie byłoby w porządku, gdybyś ujawnił swój istniejący kod .Net jako usługi, które programiści Java mogą wywoływać i rozwijać wszystkie nowe funkcje w Javie.
Sriram
To było sugerowane w przeszłości, ale zdecydowano, że odejdziemy od .net.
JD01,
Łał! Potem uprościłbym to i przepisał kod w Javie. Myślę, że Scala wprowadziłaby jeszcze jedną złożoność do zarządzania i byłaby trudna do sprzedania dla kierownictwa.
Sriram