Scala sẽ là một lựa chọn tốt thay vì Java?


11

Chúng tôi sẽ bắt đầu một dự án mới liên quan đến việc đào tạo tất cả các nhà phát triển .net trong Java (khung / hệ thống ECO, v.v.). Chúng tôi có rất nhiều mã được viết bằng C # và dường như tất cả những điều này sẽ bị lãng phí vì chúng tôi phải viết lại tất cả bằng Java. Vấn đề tôi thấy là năm đầu tiên hoặc lâu hơn (có lẽ là 2 năm) chúng tôi sẽ không có gì để cung cấp vì chúng tôi sẽ dành phần lớn thời gian để tái tạo những gì chúng tôi có trước đây nhưng bây giờ là Java.

Vì nhóm của chúng tôi được phân phối ở các văn phòng khác nhau trên khắp thế giới và chúng tôi có một số lượng lớn các nhà phát triển java (20 đến 30) và 10 nhà phát triển sử dụng .net, chúng tôi muốn có được tất cả các nhà phát triển sử dụng cùng một ngôn ngữ / nền tảng để chúng tôi có thể bắt đầu tái sử dụng các thành phần / mô-đun. Vì vậy, tôi có thể hiểu quan điểm quản lý.

Hôm qua tôi đã tình cờ gặp Scala và tự hỏi liệu có nên sử dụng nó với sản phẩm hiện tại (được viết bằng C #) và sau đó ít nhất chúng ta sẽ có một sản phẩm hoạt động trong một năm. Cũng trong một năm, chúng tôi có các mô-đun có thể được sử dụng trong thế giới Java trong khi chúng tôi di chuyển các phần khác của sản phẩm.

Scala sẽ là lựa chọn tốt hơn Java khi xem xét những gì chúng ta đang cố gắng đạt được?


2
Viết lại mọi thứ bằng ngôn ngữ khác? Và 2 năm không có gì để giao? Nghe có vẻ là một quyết định quản lý tồi tệ và giống như bạn có thể cần một công việc mới trong nửa năm;)
zvrba

Vâng, điều đó đã được xem xét. Không chắc chắn nơi tôi nên bắt đầu tìm kiếm bây giờ và bám vào C # :)
JD01

1
Điều đó có vẻ như bạn sắp làm một việc bạn không bao giờ nên làm
back2dos

Câu trả lời:


15

Một số điểm cần xem xét:

  • Scala là một ngôn ngữ tuyệt vời - nhưng điều đáng chú ý là nó cũng là một ngôn ngữ khá thách thức để học và sử dụng chính xác. Không chỉ ý kiến ​​của tôi - ngay cả các chuyên gia Scala có kinh nghiệm cũng nói như vậy . Tùy thuộc vào mức độ kỹ năng trong nhóm của bạn, nó có thể phù hợp nhất như một công cụ dành cho các nhà phát triển có kinh nghiệm / chuyên gia nhất của bạn
  • Java và C # khá giống nhau theo nhiều cách - sẽ không mất nhiều thời gian để các nhà phát triển được đào tạo một cách chuyển đổi (cú pháp tương tự nhau, chủ yếu chỉ là trường hợp tìm hiểu các yêu cầu của từng thư viện và hiểu về các thư viện khác nhau, thường có chức năng tương tự nhưng được đóng gói khác nhau và / hoặc có tên khác nhau). Cá nhân tôi đã chuyển từ Java sang C # và quay lại Java một lần nữa mà không gặp khó khăn gì.
  • Điều đáng chú ý là tất cả các ngôn ngữ JVM (Java và Scala, nhưng cả JRuby và Clojure, v.v.) đều rất tương thích - chúng chia sẻ cùng một nền tảng JVM cơ bản và có thể chia sẻ mã / thư viện rất dễ dàng.

Với tất cả những điều này, bạn có thể muốn phòng ngừa các vụ cá cược của mình và thực hiện chiến lược Java / Scala hỗn hợp - tức là di chuyển sang nền tảng JVM và tập trung ban đầu vào Java, nhưng hãy mở tùy chọn sử dụng Scala khi các nhà phát triển của bạn cảm thấy thoải mái và / hoặc nó phù hợp với vấn đề trong tầm tay.

Từ góc độ quản lý, điều này có rất nhiều lợi thế:

  • Bạn vẫn có thể chia sẻ tất cả các thư viện để khoản đầu tư của bạn được an toàn
  • Các nhà phát triển ít kinh nghiệm của bạn sẽ có thể chuyển C # -> Java khá nhanh chóng
  • Các nhà phát triển giàu kinh nghiệm hơn của bạn có thể tận dụng tối đa các tính năng nâng cao trong Scala
  • Tất cả các công cụ đều tương thích / có thể được chia sẻ (xây dựng hệ thống, IDE, công cụ triển khai, v.v.)
  • Bạn có quyền truy cập miễn phí vào hệ sinh thái các thư viện mã nguồn mở rất rộng trên JVM (bên cạnh tính di động đa nền tảng, đây được cho là lý do tốt nhất để có trên nền tảng JVM)
  • Các nhà phát triển của bạn có thể sử dụng ngôn ngữ giúp họ làm việc hiệu quả nhất nhờ các kỹ năng / nhiệm vụ sẵn có (Java trong một số trường hợp, Scala trong các ngôn ngữ khác, có thể là các ngôn ngữ khác như Clojure trong tương lai)

Nhược điểm là bạn vẫn có hai ngôn ngữ chính để hỗ trợ. Nhưng có lẽ bạn thực sự có nhiều hơn chỉ hai (tập lệnh shell? Định dạng XML cụ thể của miền? Tệp cấu hình? Quy tắc công cụ? HTML? Javascript?) Để bạn có thể tranh luận rằng đó thực sự không phải là vấn đề lớn.


Cảm ơn vì thông tin. Tôi chỉ đang cố gắng tìm hiểu đâu là cách tốt nhất phía trước và bạn đã đưa ra một số thông tin tuyệt vời. Hiện tại chúng tôi có một số nhà phát triển OO giỏi nhưng không ai quen thuộc với lập trình chức năng.
JD01

1
Rất vui được giúp đỡ! Thật đáng để biết rằng Scala là một ngôn ngữ dựa trên nhiều mô hình / OOP. Mặc dù bạn chắc chắn có thể thực hiện FP trong Scala, nhưng nếu bạn muốn các ngôn ngữ có chức năng rõ ràng hơn trong tiêu điểm thì Haskell hoặc Clojure có lẽ gần với nhãn hiệu hơn.
mikera

Đối với việc tái sử dụng mã, nếu tôi đã sử dụng Clojure hoặc Scala từ ngày đầu tiên hoặc thậm chí như bạn đã nói trong một chiến lược hỗn hợp, tôi có thể sử dụng lại mã Clojure / Scala trong cả .net và Java không? Tôi tự hỏi nếu đây là một điểm bán hàng tốt cho quản lý. Bằng cách này, chúng ta vẫn có thể đưa ra một sản phẩm (sản phẩm cũ có các tính năng mới) và cũng đang trên đường viết lại mã hiện có trong Java với việc sử dụng lại mã của các mô-đun clojure / scala. Tôi có đúng trong suy nghĩ của tôi ở đây hay điều này mở ra những vấn đề khác?
JD01

1
Bạn có thể hiển thị chức năng Clojure / Scala dưới dạng dịch vụ web hoặc giao diện REST nếu bạn thích. Đó là chi phí cao hơn một chút so với việc trực tiếp xây dựng thư viện (sẽ là tùy chọn tốt nhất nếu bạn muốn gọi chức năng từ Java / ngôn ngữ JVM khác) nhưng chắc chắn sẽ linh hoạt gọi mã từ bất kỳ ứng dụng khách nào bạn thích (. Net, Java, Ruby, v.v.)
mikera

Cảm ơn Mike. Tôi nghĩ rằng đường dẫn tái sử dụng mã ít nhất sẽ cho quản lý thấy rằng việc viết lại hoàn toàn là không cần thiết với tùy chọn Scala / Clojure. Tôi không muốn chúng tôi kết thúc như Netscape :). Quay lại việc xây dựng một thư viện, tôi có thể không sử dụng nó trong .net và java mà không có các dịch vụ web không?
JD01

15

Tôi sẽ thêm tùy chọn thứ 3. Có ai trong tổ chức của bạn đã xem xét sự can thiệp giữa các mô-đun C # và Java của bạn chưa? Làm thế nào để bạn tiếp xúc với chức năng C #? Các dịch vụ web SOAP hoặc RESTFul là một tùy chọn?

Viết lại 2 năm có thể là một hồi chuông báo tử cho một tổ chức (chỉ cần hỏi Netscape). Tuy nhiên, việc di chuyển dần dần trong khi mã hiện tại chơi độc đáo với nhau có khả năng tác động kinh doanh ít hơn.


3

Viết lại C # thành Scala sẽ khó như viết lại thành Java. Đối với ngôn ngữ nào là "tốt hơn", điểm đó là tranh luận, mỗi ngôn ngữ có điểm cộng và điểm trừ riêng.

Tôi không biết codebase của bạn lớn như thế nào nhưng 2 năm cho 30 nhà phát triển dường như rất lớn cho việc viết lại đơn giản. Chọn Java khi bạn biết C # rất dễ. Tôi phải mất một hoặc hai ngày để cảm thấy thoải mái với nó.

Lời khuyên của tôi là hãy để quản lý theo cách của họ và tận hưởng thực tế bạn được trả tiền để mở rộng bộ kỹ năng của bạn.


Chỉ có khoảng 10 nhà phát triển sẽ làm việc trên sản phẩm mới. Tôi chỉ đang cố gắng tìm hiểu những ưu và nhược điểm của việc đi với Scala sẽ là gì.
JD01

1
Tôi không biết đủ về các chi tiết cụ thể của dự án hoặc Scala của bạn để cung cấp cho bạn một câu trả lời thách thức. Tuy nhiên, dường như với tôi, việc giới thiệu một ngôn ngữ thứ ba không ai biết sẽ chỉ làm phức tạp vấn đề.
Tom Squires

Bạn có thể đúng. Tôi đã nghĩ về điều đó trong việc đưa ra một sản phẩm trong một năm hoặc lâu hơn trong khi đồng thời có thể sử dụng lại mã trong .net và java. Điểm của bạn được ghi nhận rõ :)
JD01

1

Tôi nghĩ rằng tùy chọn dễ dàng hơn là để các nhà phát triển java học C #. Cả hai ngôn ngữ đều rất giống nhau theo nhiều cách và không mất nhiều thời gian để nhà phát triển java chọn C #. Tôi đã làm việc với nhiều nhà phát triển java, những người đã học C # và đó thường là một quá trình chuyển đổi suôn sẻ. Một lĩnh vực mà họ có thể bị kẹt trong một thời gian là mô hình lập trình WebForms. Các nhà phát triển Java điều chỉnh tốt hơn cho mô hình MVC. Bằng cách này, bạn không cần đợi một năm trước khi bắt đầu phát triển các tính năng mới. Liên quan đến Scala, tôi e rằng sẽ giới thiệu một vấn đề hoàn toàn mới với tất cả 30 nhà phát triển đang cố gắng học một ngôn ngữ mới.


Có rất nhiều sản phẩm được viết bằng Java nên việc cho chúng học C # sẽ rất khó khăn. Tôi đã hy vọng với Scala, một khi chúng ta có sản phẩm mới, các nhà phát triển java có thể sử dụng các thư viện mà không cần phải học Scala.
JD01

2
Sẽ không ổn nếu bạn tiếp xúc với mã .Net hiện tại của mình dưới dạng các dịch vụ mà các nhà phát triển java có thể gọi và phát triển tất cả các tính năng mới trong java.
Sriram

Điều đó đã được đề xuất trong quá khứ nhưng đã được quyết định rằng chúng tôi di chuyển khỏi .net.
JD01

Ồ Sau đó, tôi sẽ giữ cho nó đơn giản và viết lại mã trong java. Tôi nghĩ Scala sẽ giới thiệu một sự phức tạp hơn để quản lý và nó sẽ khó bán cho ban quản lý.
Sriram
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.