Scala đã sẵn sàng cho thời gian chính? [đóng cửa]


22

Bây giờ tôi đã thực hiện một vài điều nhỏ nhặt với Scala (mà tôi yêu thích "xin chào thế giới" và các ứng dụng bị chiếm đoạt!) Tôi còn băn khoăn .. một phần về sự trưởng thành của các công cụ hỗ trợ phát triển và một phần về khả năng ứng dụng chung. Các bộ công cụ đã sẵn sàng? Scala có thích hợp để sử dụng cho các ứng dụng doanh nghiệp / doanh nghiệp không? "Bạn" sẽ sử dụng nó trong một dự án không tầm thường?

Một số mối quan tâm của tôi (có thể không có cơ sở) sẽ là:

  • IDE và bộ công cụ có phong phú như những gì chúng ta phải phát triển các ứng dụng .net và java (nhật thực cho Scala dường như bị giới hạn so với nhật thực cho java) không?
  • các bộ công cụ xây dựng / CI / thử nghiệm có thể đối phó hiệu quả với Scala không?
  • làm thế nào duy trì được mã ngắn gọn có thể được (khuyến khích?) được viết bằng ngôn ngữ?
  • Có thể tìm nhà phát triển có kinh nghiệm Scala không?
  • Có đủ khối lượng quan trọng để nhận trợ giúp thông qua tài liệu tham khảo trực tuyến và sách không chỉ là "giới thiệu" về ngôn ngữ không?

Vì vậy, điểm mấu chốt - là hệ sinh thái đủ trưởng thành để sử dụng bây giờ, hay tốt hơn là chờ đợi để xem nó phát triển như thế nào?

EDIT: giả sử "không tầm thường" là một dự án 10-20 năm, nhiều nhà phát triển, nhiều năm phát triển.


7
Nếu bạn phải hỏi ... :)
Scott Whitlock

Có rất nhiều không gian giữa không tầm thường và doanh nghiệp. Tôi không chắc bạn quan tâm đến một dự án lớn đến mức nào.
Eric Wilson

Điểm tuyệt vời @FarmBoy, cập nhật.
jayraynet

@Scott Witlock: yeah, bạn có thể đúng =)
jayraynet

Scala aint Pythonic, nhưng Clojure là. Đủ nói.
Công việc

Câu trả lời:


22

Mặc dù sự thật là Scala đã được sử dụng trong tự nhiên tại The Guardian và tại Twitter, nhưng có một mối quan tâm cơ bản.

Phần lớn sự phổ biến của Java xuất phát từ thực tế là nó tương đối dễ đọc và duy trì. Scala có một vấn đề ở đây vì nó có thể được viết theo nhiều phong cách khác nhau. Phong cách OO và phong cách chức năng là sự phân chia rõ ràng ở đây, nhưng nó phức tạp hơn khi bạn nói về 3 cấp độ của Scala .

Bạn cần đảm bảo rằng nhóm của bạn và bất kỳ nhân viên mới tiềm năng nào đều có thể theo cùng một phong cách và phong cách đó đủ đơn giản để bạn thực sự có thể thuê các nhà phát triển có thể hiệu quả (không phải ai cũng có thể thuê 2% hàng đầu) .

Hỗ trợ công cụ cũng chưa hoàn toàn ở đó, mặc dù tôi hy vọng khoảng cách này sẽ được đóng lại khá nhanh. Bạn cũng có thể nhận được hỗ trợ cho ngăn xếp Scala đầy đủ từ đám đông TypeSafe . Tôi nghĩ Scala sẽ tạo ra vị trí thích hợp của mình, nhưng cho đến khi các cấp độ thực sự được tích hợp vào ngôn ngữ / trình biên dịch / bất cứ điều gì, tôi thấy một sự đau đầu về bảo trì đến với các đội sau 1-2 năm năng suất phấn khích ban đầu.

Xem câu trả lời liên quan này để biết thêm chi tiết.


vấn đề này xảy ra trong các ngôn ngữ đa mô hình khác hay nó cụ thể hơn về Scala?
DPM

2
Cụ thể hơn về Scala vì chủ yếu là một số tính năng ngôn ngữ được thêm vào không được tích hợp liền mạch với một số tính năng ngôn ngữ khác, một trong những lý do cho danh tiếng "Chìm bếp" của nó.
Martijn Verburg

12

Scala hiện đang được sử dụng bởi Twitter và The Gaurdian, vì vậy nó chắc chắn đã sẵn sàng cho các ứng dụng không tầm thường.

Các lập trình viên Scala sẽ rất có động lực, và có khả năng rất tốt. Chọn một ngôn ngữ mới là một cách tuyệt vời để thu hút nhân tài.

Tất nhiên, các lập trình viên Scala thường sẽ không có kinh nghiệm về Scala chuyên nghiệp và có thể có một số thành ngữ mà họ sử dụng. Một số người có thể phấn đấu cho sự thuần khiết giống như Haskell, trong khi những người khác có thể xem nó là Java với các bao đóng. Vì vậy, có lẽ sẽ mất một thời gian để phát triển các tiêu chuẩn và quy ước mã hóa nhất quán.

Nhiều công cụ Java sẽ hoạt động tốt, mặc dù IntelliJ Idea có thể sẽ đáng để đầu tư hơn Eclipse.

Nhìn chung, nó có thể là một lựa chọn tốt nếu bạn có quyền kiểm soát dự án. Nếu đây là một phần của một công ty bảo hiểm lớn, bạn có thể gặp phải các vấn đề nếu có các hướng dẫn kiến ​​trúc như: 'Tất cả các dự án sẽ được Maven xây dựng và triển khai trong WebSphere.' (Tôi không có lý do để nghĩ rằng quy tắc cụ thể này sẽ là một vấn đề, nhưng sự phổ biến của các quy tắc đó có thể khiến bạn vấp ngã vào một lúc nào đó.)


Twitter làm gì với Scala?
Anto


10
Tôi sẽ không tin các quyết định kỹ thuật của twitter là bằng chứng cho sự trưởng thành và mạnh mẽ.
bụi đỏ

6

Ấn tượng của tôi là, phần lớn hệ sinh thái đi kèm với các ngôn ngữ "thông thường" (như Java) được dự định để bù đắp cho sự vụng về của chúng.

Câu hỏi không phải là, có bao nhiêu công cụ cho một ngôn ngữ nhất định (Scala), nhưng liệu các công cụ hiện có cho ngôn ngữ đó có tốt hơn các công cụ hiện có cho ngôn ngữ tham chiếu (Java) hay không. Bởi vì 100 công cụ tầm thường sẽ không cung cấp cho bạn, những gì một công cụ tốt có thể cung cấp cho bạn. Và một điều bạn không nên quên là, chính ngôn ngữ là một phần của những công cụ đó.

Sự suy giảm của ngôn ngữ

  • tỷ lệ nghịch với số lượng và mức độ nghiêm trọng của các lỗi bạn tạo ra với nó, đó là lý do tại sao Java rất giỏi trong việc tạo ra các lỗi và bạn cần rất nhiều công cụ để tránh và theo dõi chúng
  • tỷ lệ thuận với năng suất của bạn, đó là lý do tại sao Java rất dài dòng và bạn cần rất nhiều trình tạo mã và các công cụ tương tự

Ví dụ, tôi đã từng đọc một bài đăng trên blog khủng khiếp của một anh chàng Ruby, người cho rằng việc gõ tĩnh là vô nghĩa, bởi vì các bài kiểm tra của bạn sẽ bao gồm loại an toàn. Điều này rõ ràng đến từ một người nào đó, người chưa làm việc với một hệ thống kiểu tĩnh biểu cảm. Giả sử tôi có thể đại diện cho tất cả các mối quan hệ loại trong ngữ nghĩa ngôn ngữ và không có nhiều việc phải làm (và không phải vì hầu hết các ngôn ngữ hiện đại đều hỗ trợ suy luận kiểu), tôi nhận được tất cả điều này miễn phí.

Để thúc đẩy một ý nghĩ tiến lên một chút: Các thử nghiệm đơn vị đảm bảo, rằng một đơn vị hoạt động như được chỉ định hoặc để viết lại nó, thử nghiệm đơn vị là các thông số kỹ thuật có thể chạy được. Tuy nhiên, thông qua lập trình khai báo, bản thân các đơn vị là các thông số kỹ thuật có thể chạy được. Một lần nữa, bạn nhận được một cái gì đó miễn phí.

Điều tôi đang cố gắng nói là, bạn không nên đánh giá thấp những tính năng ngôn ngữ có thể làm cho bạn. Và trừ khi bạn thực sự thử chúng trong lĩnh vực này, bạn sẽ không bao giờ hiểu được.

Vì vậy, để trở lại câu hỏi ban đầu: Các công cụ hiện có cho Scala có tốt hơn cho Java không? Khó nói. Phụ thuộc vào những gì bạn muốn làm. Tôi nghĩ rằng tất cả chúng ta đều đồng ý rằng ngôn ngữ tốt hơn đáng kể, bây giờ câu hỏi là, bạn sẽ tìm thấy một hệ sinh thái tốt như thế nào trong lĩnh vực kinh doanh của bạn.
Đối với web, Nâng thực sự là một lựa chọn chắc chắn để đi cùng. Không biết về máy tính để bàn hoặc điện thoại di động.


5

giả sử "không tầm thường" là một dự án 10-20 nhà phát triển, nhiều năm phát hành.

Đó là rất nhiều rủi ro. Các phần thưởng sẽ phải có giá trị nó. Trong thế giới của các ứng dụng kinh doanh doanh nghiệp và dự án quy mô vừa và lớn, việc chấp nhận rủi ro thường bị hạn chế. Hay đúng hơn là đã có đủ rủi ro để đối phó với ... Khả năng dự đoán là quan trọng hơn.

Tôi nghi ngờ rằng việc áp dụng sẽ làm việc theo cách đó.

Có nhiều khả năng bắt đầu như một số ít người làm việc ở một phần có rủi ro như POC, các thành phần không quan trọng, thử nghiệm hoặc các phần mà vấn đề dường như được Scala giải quyết tốt hơn nhiều so với các lựa chọn thay thế (có thể nếu có gì đó liên quan diễn viên chẳng hạn) ... Sau đó, khi các công cụ trưởng thành, cộng đồng phát triển, bí quyết phát triển trong công ty, thì nó có thể mở rộng.


5

Bằng cách tận dụng thời gian chạy Java, Scala chắc chắn đã sẵn sàng cho thời gian chính. Nếu bạn có thể triển khai một ứng dụng Scala, một khi mã byte được tạo, nó sẽ luôn hoạt động với phiên bản cụ thể của thời gian chạy Java. Thư viện dựa trên Scala sẽ hoạt động như mọi thư viện bên thứ ba Java khác mà bạn quen thuộc.

Về mặt IDE, công cụ xây dựng và mọi thứ khác, Scala không có cùng mức độ phổ biến như Java có. Vì vậy, bạn không có nhiều khung dựa trên Scala hoặc các công cụ dựa trên Scala. Điều đó có nhiều điều để nói với sự phổ biến của Java hơn là với sự phổ biến ngày càng tăng của Scala. Scala có các công cụ chức năng bao gồm Scala IDE và sbt, công cụ xây dựng. Nhưng chúng không phức tạp như một số công cụ trợ giúp thuần Java khác ngoài kia.


4

Điểm hái anh đào từ @huynhjl và @FarmBoy:

  • Tìm kiếm một số lượng lớn các lập trình viên Scala có kinh nghiệm có thể khó khăn.

  • Giáo điều "thực hành tốt nhất" cho Scala vẫn đang phát triển (*).

  • Hướng dẫn phong cách, quy ước, vv vẫn đang phát triển (*).

  • Hỗ trợ công cụ vẫn đang phát triển (*).

Kết hợp những điều này lại với nhau, có thể một câu hỏi tốt hơn để bạn hỏi (chính mình / bản thân) là liệu tổ chức của bạn đã sẵn sàng sử dụng Scala trong một dự án "không tầm thường" chưa? Bạn có những người có thể đối phó với việc thực hiện một dự án lớn với rất nhiều thứ "vẫn đang phát triển" không? Ngược lại, sẽ tốt hơn nếu làm một dự án nhỏ hơn trước?

(* Trên thực tế, hầu hết các ngôn ngữ vẫn đang phát triển theo một hoặc nhiều khía cạnh này. Vấn đề ở đây là tốc độ thay đổi / thông lượng ... và liệu nhóm của bạn có thể đối phó với nó hay không.)


1
'Số lượng đủ lớn' của các nhà phát triển Scala sẽ nhỏ hơn rất nhiều so với 'số lượng đủ lớn' của các nhà phát triển Java.
kevin cline


0

Tôi không bao giờ hiểu sự khác biệt giữa enterprisenon enterprisecác chương trình.

Tôi sử dụng các chương trình rất giống như ở nhà. Tôi sẽ không sử dụng một chương trình tầm thường trong thời gian rảnh rỗi - tại sao tôi phải làm thế?

Một chương trình không chuyên nghiệp là gì? Tôi đã thấy các ứng dụng kém được sử dụng, bởi vì người dùng không biết rõ hơn, vì các vấn đề tương thích hoặc người dùng từ chối nói một cái gì đó mới.

Nhưng đó là vấn đề của phần mềm lỗi thời và mục tiêu, nhà phát triển đã nghĩ đến - không phải về ngôn ngữ, chương trình được viết. Nếu bạn bắt đầu nghĩ, ngôn ngữ nào được viết bằng chương trình, nó đã kết thúc: thất bại.

Enterprise-application là một thuật ngữ marekting, không hữu ích cho các cuộc thảo luận nghiêm túc.

Và khách hàng nào biết ngôn ngữ nào bạn đã thực hiện công việc của mình? Đôi khi họ quan tâm, đôi khi họ không.

Bạn có thể có những câu hỏi liên quan đến sự trưởng thành của ngôn ngữ - nhưng bạn không thể trả lời câu hỏi cho tất cả các loại doanh nghiệp và tất cả các ứng dụng.


1
Doanh nghiệp không chỉ là một thuật ngữ tiếp thị ... Về cơ bản, điều đó có nghĩa là công ty chúng tôi sẽ mua công cụ này sẽ tồn tại ít nhất là với chúng tôi và có các nguồn lực để sao lưu . Bạn có thể thay thế tổ chức nguồn mở cho công ty ở trên .... Cuối cùng, có một sự khác biệt lớn giữa việc chọn ngôn ngữ chủ yếu do một người điều khiển, so với một nhóm nhỏ so với nền tảng nguồn mở khổng lồ so với công nghệ Fortune 100 Công ty.
bụi đỏ
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.