스칼라는 Java 대신 좋은 선택입니까?


11

Java의 모든 .net 개발자 (frameworks / ECO 시스템 등)를 교육하는 새로운 프로젝트를 시작할 것입니다. 우리는 C #으로 작성된 많은 코드를 가지고 있으며 Java로 다시 작성해야 하므로이 모든 것이 낭비되는 것처럼 보입니다. 내가 본 문제는 첫해 정도 (아마도 2 년) 우리가 지금까지 그러나 지금은 Java로했던 것을 재생하는 데 대부분의 시간을 할애 할 때 우리가 제공 할 것이 없다는 것입니다.

우리 팀은 전 세계의 다른 사무실에 분산되어 있으며 많은 Java 개발자 (20 ~ 30)와 .net을 사용하는 10 명의 개발자가 있으므로 모든 개발자가 동일한 언어 / 플랫폼을 사용하도록하여 구성 요소 / 모듈을 재사용하십시오. 경영진의 관점을 이해할 수 있습니다.

어제 스칼라를 발견 한 후 현재 제품 (C #으로 작성)에이 제품을 사용하는 것이 더 좋은지 궁금한 경우 적어도 1 년 안에 작동하는 제품을 갖게됩니다. 또한 1 년 안에 제품의 다른 부분을 마이그레이션하는 동안 Java 세계에서 사용할 수있는 모듈이 있습니다.

우리가 달성하려는 것을 고려할 때 Scala가 Java보다 더 나은 선택입니까?


2
다른 언어로 모든 것을 다시 작성 하시겠습니까? 그리고 2 년 동안 아무 것도 제공하지 않습니까? 끔찍한 경영 의사 결정 등과 같은 소리는 반년에서 새 작업을해야 할 수도 있습니다)
zvrba

예, 그것은 고려되었습니다. 내가 지금 어디에서보고 시작
해야할지 모르겠고

답변:


15

고려해야 할 사항 :

  • 스칼라는 훌륭한 언어입니다. 그러나 올바르게 배우고 사용하는 것은 매우 어려운 언어입니다. 내 의견 경험이 풍부한 스칼라 전문가들도 그렇게 말합니다 . 팀의 기술 수준에 따라 아마도 가장 숙련 된 / 전문가 개발자를위한 도구로 가장 적합 할 것입니다
  • Java와 C #은 여러면에서 매우 유사합니다. 하나의 교육을받은 개발자가 이동하는 데 시간이 오래 걸리지 않습니다 (구문은 유사합니다. 각각의 단점을 배우고 다른 라이브러리에 대한 이해를 얻는 경우 일뿐입니다). 종종 유사한 기능을 갖지만 다르게 포장되거나 다른 이름을 갖습니다). 개인적으로 Java에서 C #으로, 다시 Java로 어려움없이 전환했습니다.
  • 또한 모든 JVM 언어 (Java 및 Scala, JRuby 및 Clojure 등)는 매우 호환 가능합니다. 동일한 기본 JVM 플랫폼을 공유하며 코드 / 라이브러리를 매우 쉽게 공유 할 수 있습니다.

이 모든 것을 감안할 때, 당신은 내기를 헤지하고 혼합 Java / Scala 전략 , 즉 JVM 플랫폼으로 마이그레이션하고 처음에는 Java에 초점을 맞추고 싶지만 개발자가 편안하고 /하거나 Scala를 사용할 수있는 옵션을 열어 두어야합니다. 그것은 당면한 문제에 맞습니다.

관리 관점에서 이것은 많은 장점이 있습니다.

  • 여전히 모든 라이브러리를 공유 할 수 있으므로 투자가 안전합니다
  • 경험이 적은 개발자는 C #-> Java를 매우 빠르게 전송할 수 있습니다.
  • 숙련 된 개발자는 Scala의 고급 기능을 최대한 활용할 수 있습니다
  • 모든 도구는 호환 가능 / 공유 가능 (빌드 시스템, IDE, 배포 도구 등)
  • JVM에서 라이브러리의 매우 광범위한 오픈 소스 에코 시스템에 무료로 액세스 할 수 있습니다 (플랫폼 간 이식성과 함께 이것이 JVM 플랫폼에있는 가장 좋은 이유 임)
  • 개발자는 자신의 기술 / 수행 과제에 따라 생산성을 극대화 할 수있는 언어를 사용할 수 있습니다 (일부 경우 Java, 다른 경우 스칼라, 향후 Clojure와 같은 다른 언어)

단점은 여전히 ​​지원할 두 가지 기본 언어가 있다는 것입니다. 그러나 실제로는 이미 두 개 이상 (쉘 스크립트, 도메인 별 XML 형식, 구성 파일, 규칙 엔진, HTML, Javascript 등)이 많기 때문에 실제로 그렇게 큰 문제는 아니라고 주장 할 수 있습니다.


정보 주셔서 감사합니다. 나는 최선의 방법이 무엇인지 찾으려고 노력하고 있으며 훌륭한 정보를 제공했습니다. 현재 우리는 좋은 OO 개발자가 있지만 기능적 프로그래밍에 익숙한 사람은 없습니다.
JD01

1
기쁘다! Scala는 다중 패러다임 / OOP 기반 언어에 가깝습니다. 스칼라에서 FP를 확실히 수행 할 수 있지만,보다 명확하게 초점을 맞춘 언어를 원한다면 Haskell 또는 Clojure가 아마도 마크에 더 가깝습니다.
mikera

코드 재사용과 관련하여 처음부터 Clojure 또는 Scala를 사용하거나 혼합 전략에서 말한 것처럼 .net과 Java 모두에서 Clojure / Scala 코드를 재사용 할 수 있습니까? 이것이 경영진에게 좋은 판매 포인트인지 궁금합니다. 이런 식으로 우리는 여전히 제품을 얻을 수 있고 (새로운 기능을 가진 오래된 제품) 클로저 / 스칼라 모듈의 코드 재사용으로 기존 코드를 Java로 다시 작성할 수 있습니다. 내 생각이 맞습니까? 아니면 다른 문제가 있습니까?
JD01

1
원하는 경우 Clojure / Scala 기능을 웹 서비스 또는 REST 인터페이스로 노출 할 수 있습니다. 라이브러리를 직접 빌드하는 것보다 약간 오버 헤드가 높지만 (Java / 다른 JVM 언어에서 기능을 호출하려는 경우 가장 좋은 옵션 임) 확실히 원하는 클라이언트에서 코드를 호출 할 수있는 유연성을 제공합니다 (. Net, Java, Ruby 등)
mikera

고마워 마이크. 코드 재사용 경로는 적어도 Scala / Clojure 옵션을 사용하여 완전한 재 작성이 필요하지 않다는 것을 경영진에게 보여줄 것이라고 생각합니다. 나는 우리가 Netscape처럼 끝나기를 원하지 않습니다 :). 라이브러리 빌드로 돌아가서 웹 서비스없이 .net 및 java에서 라이브러리를 사용할 수 없습니까?
JD01

15

세 번째 옵션을 추가하겠습니다. 조직의 누군가가 C #과 Java 모듈 사이의 상호 운용성을 조사 했습니까? C # 기능을 어떻게 노출합니까? SOAP 또는 RESTFul 웹 서비스는 옵션입니까?

2 년의 재 작성은 조직에있어 죽음의 곤경이 될 수 있습니다 (Netscape에 문의하십시오). 그러나 기존 코드가 서로 훌륭하게 재생되는 동안 점진적으로 마이그레이션하면 비즈니스 영향이 줄어 듭니다.


3

C #을 스칼라로 다시 쓰는 것은 Java로 다시 쓰는 것만 큼 어렵습니다. 어느 언어가 "더 나은"언어인지에 대해서는, 그 점이 무의미하며, 각 언어마다 고유 한 플러스 및 마이너스 포인트가 있습니다.

나는 당신의 코드베이스가 얼마나 큰지 알지 못하지만 30 명의 개발자에게 2 년은 간단한 재 작성으로 거대해 보입니다. C #을 쉽게 알면 Java를 선택하십시오. 그것에 익숙해 지려면 하루나 이틀이 걸렸습니다.

저의 조언은 관리가 길을 가고 기술력을 확장하기 위해 돈을 받고 있다는 사실을 즐기게하는 것입니다.


약 10 명의 개발자 만이이 제품을 연구 할 것입니다. 나는 스칼라와 함께 갈 때의 장단점이 무엇인지 알아 내려고 노력하고 있습니다.
JD01

1
나는 당신에게 확실한 대답을 줄 수있는 프로젝트 또는 스칼라의 특성에 대해 충분히 알지 못합니다. 그러나 아무도 모르는 제 3 언어를 도입하면 문제가 복잡해질 것 같습니다.
Tom Squires

당신이 옳을 수도 있습니다. 나는 1 년 안에 제품을 출시하는 동시에 .net 및 java에서 코드를 재사용 할 수 있다고 생각했습니다. 당신의 요점은 잘 알려져 있습니다 :)
JD01

1

더 쉬운 옵션은 Java 개발자가 C #을 배우도록하는 것입니다. 두 언어는 여러면에서 매우 유사하며 Java 개발자가 C #을 가져 오는 데 오랜 시간이 걸리지 않습니다. 나는 C #을 배운 많은 자바 개발자들과 함께 일해 왔으며 일반적으로 순조로운 전환입니다. 그들이 잠시 동안 막힐 수있는 영역은 WebForms 프로그래밍 모델입니다. Java 개발자는 MVC 패러다임에 더 잘 적응합니다. 이렇게하면 새로운 기능을 개발하기 전에 1 년을 기다릴 필요가 없습니다. 스칼라와 관련하여 30 명의 개발자 모두가 새로운 언어를 배우려고 할 때 완전히 새로운 문제가 생길 까봐 두렵습니다.


Java로 작성된 많은 제품이 있으므로 C #을 배우는 것은 어렵습니다. 스칼라를 기대하고있었습니다. 일단 새 제품을 구입하면 자바 개발자는 스칼라를 배우지 않고도 라이브러리를 그대로 사용할 수 있습니다.
JD01

2
기존의 .Net 코드를 Java 개발자가 Java의 모든 새로운 기능을 호출하고 개발할 수있는 서비스로 노출 한 경우에는 문제가되지 않습니다.
스리 람

그것은 과거에 제안되었지만 우리가 .net에서 멀어 지도록 결정되었습니다.
JD01

와! 그런 다음 간단하게 유지하고 Java로 코드를 다시 작성합니다. 스칼라가 관리해야 할 또 하나의 복잡성을 가져다 줄 것이며 경영진에게 팔리는 것이 아닐까요.
스리 람
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.