2010-11-20 26 views
40

Tôi là một fan hâm mộ lớn của Scala về mặt thẩm mỹ, và của rất nhiều công việc khái niệm đưa vào những thứ như hệ thống đánh máy và thư viện của nó.Có phải là một lập trình viên scala có thẩm quyền yêu cầu bạn phải là một lập trình java có thẩm quyền?

Tuy nhiên, như tôi đã bắt đầu mày mò với Scala (và thấy một số đồng nghiệp của tôi tinker với nó) tôi thấy mình phải đào cho càng nhiều kiến ​​thức Java (đặc biệt là trong cách của thư viện).

này trình bày cho tôi với một vài vấn đề:

  • Có bao giờ là một lập trình viên Java, tôi không quen thuộc hay thoải mái với các thư viện chuẩn Java, hoặc bổ sung các thư viện phổ biến (như Apache Commons).
  • Google-fu của tôi trong quả cầu Java yếu. Thật khó để biết những gì để tìm kiếm - một vấn đề càng trầm trọng bởi số lượng lớn các hướng dẫn java không liên quan hoặc thô sơ cho những người mới lập trình.

Tại thời điểm này, tôi không chắc liệu tôi có nên cắn viên đạn hay không và thử tìm chuyến đi nhanh nhất và toàn diện nhất thông qua Java để bắt kịp 20 năm phát triển Java hoặc tiếp tục cố gắng tăng dần kiến ​​thức của mình khi tôi lang thang quanh scala.

Bất kỳ sự khôn ngoan nào mà đầu scala giữa chúng tôi có thể cung cấp sẽ được đánh giá cao.

P.S. Tôi không nghi ngờ gì về khả năng tự làm quen với cú pháp Scala, và tôi hoàn toàn thoải mái và hài lòng với lập trình hàm và các mô hình trong cộng đồng Scala. Nhưng năng lực của một lập trình viên không chỉ dựa trên khả năng tự dạy cho bản thân, mà còn là khả năng học hỏi, và áp dụng các công cụ và kỹ năng từ những người khác.

+5

* Không *, tôi sẽ tưởng tượng người ta có thể tìm hiểu/sử dụng/viết Scala mà không cần chạm vào Java chút nào, nhưng ... có những điều tôi có thể nghĩ tại sao nó sẽ hay hơn "biết" Java: 1) Cách tạo các đối tượng "có thể sử dụng" từ Java (nếu cần) 2) Tận dụng lợi thế của API Java mà không có giao diện hoặc thay thế Scala cụ thể (nhưng một javadoc sẽ giúp bạn vượt qua điều này) 3) Các chi tiết tốt hơn của JVM như ngữ nghĩa khóa 4) Mặc dù nó trở nên ít hơn, làm thế nào để làm việc với các công cụ "Java Ecosystem" như Ant/Maven/etc. - vì vậy ** chỉ cần làm điều đó đã **: p http://scala-lang.org liệt kê một số ấn phẩm. –

+0

Nó chắc chắn sẽ giúp bạn. –

+1

Lần đầu tiên tôi đọc một bài đăng trên SO với các từ tiếng Anh lớn. :) –

Trả lời

26

Bạn nên thực hiện phương pháp tiếp cận lazy để học Java. Tìm hiểu nó khi bạn cần.

Theo tôi, phần lớn kiến ​​thức Java cũ đã lỗi thời, phần lớn các hướng dẫn mới là không cần thiết. Bạn chắc chắn không muốn làm phiền bản thân với ví dụ cổ của Java Collections. Nhiều khung công tác dựa trên Java có thể được bỏ qua một cách an toàn. Và ngăn xếp JavaEE nặng có thể được bỏ qua một cách an toàn cho đến khi bạn buộc phải sử dụng một phần của nó.

Nhiều mẫu phổ biến trong Java đơn giản hơn nhiều trong Scala, với các mẫu trước đây được gánh nặng với nhiều mã soạn sẵn. Logic lõi nên luôn luôn được thực hiện trong Scala. Tôi tin rằng bạn có thể thực hiện hầu hết công việc của mình trực tiếp trong Scala và chỉ cần nhúng xuống Java khi xây dựng những thứ như Swing hoặc tích hợp với Spring, v.v.

Về việc chọn và sử dụng thư viện Java, hướng dẫn cá nhân của tôi là:

  1. Nếu mùa xuân có thể làm điều đó, sử dụng Spring
  2. Nếu mùa xuân là quá nặng, sử dụng những gì Spring sử dụng.
  3. Nếu mùa xuân không thể làm điều đó, rà soát các dự án github
  4. Nếu không có gì trên github, rà soát các dự án Apache
  5. Nếu không có gì từ Apache là, rà soát SourceForge (t).
  6. Cuối cùng, Google ngẫu nhiên hoặc tự mình xây dựng nó.

Đó là một chút tounge-in-má, nhưng là ấn tượng tôi nhận được về sự trưởng thành và ổn định của thư viện bên thứ ba sau khi đã thực hiện Java trong 12 năm qua.

+8

Tôi không chắc chắn lý do tại sao bạn tô màu 'Bộ sưu tập' của Java là" cũ ". Chúng là cấu trúc dữ liệu cơ bản và vẫn đang được cập nhật khi cần thiết (không nên thường xuyên). 'Vector' và' Stack' otoh có thể được gọi là lỗi thời. – erjiang

+2

Tại sao tìm kiếm github trước? Tôi sẽ tìm kiếm Apache đầu tiên kể từ khi họ đã được các "ông bố" của xây dựng thư viện/dự án trong java. Nhiều thư viện bao gồm ít nhất là 1 thư viện Apache. –

+1

@TEG đủ công bằng! Nó chỉ là ý kiến ​​của tôi. @erijiang Tôi gọi chúng là lỗi thời bởi vì chúng chỉ có một phần nhỏ các tiện ích của bộ sưu tập của Scala. Trong thực tế, đối với tôi, lập trình với các bộ sưu tập của Scala là mô hình mới tuyệt vời đối với tôi (và đối với nhiều người khác nữa, tôi nghi ngờ). – Synesso

8

Nó phụ thuộc hoàn toàn vào định nghĩa của bạn về "Lập trình viên Java có thẩm quyền".

Hiểu biết tốt về mô hình bộ nhớ Java và các chiến lược thu gom rác sẽ giúp ích. Như sẽ trải nghiệm với một loạt các thư viện phần thứ ba.

Mặt khác ... nếu bạn được truyền tải sâu vào tiêm phụ thuộc getter/setter được sử dụng bởi các thư viện như Spring, thì bạn sẽ phải bỏ qua rất nhiều thói quen xấu trước khi bạn có thể đối phó đúng với bất biến - trường hợp này, trước khi tiếp xúc với Java có thể sẽ cản trở bạn trong việc học Scala.

13

Nếu bạn muốn học tiếng Tây Ban Nha, hãy bắt đầu học tiếng Tây Ban Nha, không phải tiếng Latin. Tương tự cho ngôn ngữ lập trình. Có hai điều từ Java rất hữu ích để biết:

Điều đầu tiên là API. Nhưng bạn chỉ cần một tổng quan chung về những gì tồn tại. Ngay cả những lập trình viên Java thời gian dài cũng không biết tất cả các chi tiết. Và việc tìm đúng API hoặc lib cho một vấn đề thường dễ dàng, vì Java rất phổ biến và thậm chí với Google Fu yếu, bạn không nên gặp bất kỳ vấn đề gì. Điều thứ hai bạn cần biết là một số nguyên tắc và hạn chế cơ bản của Java và JVM (bao gồm cách xây dựng và chạy), giúp bạn hiểu một số vấn đề và quyết định thiết kế của Scala. Một ví dụ điển hình sẽ là "loại tẩy xoá": Nếu bạn không hiểu giới hạn này của Generics của Java, bạn sẽ gặp vấn đề khi sử dụng Generics trong Scala.

Như bạn có thể thấy, những điều bạn thực sự cần biết là có giới hạn. Mọi thứ khác có thể được chọn trên đường.

+0

Trớ trêu thay, tôi học tiếng Latinh ở trường trung học, vì vậy có lẽ đó không phải là sự tương tự tốt nhất, trong đó tôi nghĩ rằng việc biết tiếng Latin đã giúp ích cho cuộc sống của tôi theo nhiều cách khác nhau. ;) Điều đó nói rằng, tôi đã được thuyết phục rằng tôi chỉ nên tiếp tục cày về phía trước trong Scala thay vì đi vòng qua Java. Tôi vẫn tò mò những gì mọi người nghĩ là cần thiết để biết từ Java. (Tôi sẽ tra cứu kiểu xóa) Cảm ơn :) – knowtheory

8

Có rất nhiều dân gian đến scala và clojure từ ruby ​​/ python, lisp/chương trình, C#, những người cần để chọn lên trên:

nguyên thủy, autoboxing tùy chọn khởi động

JVM, làm thế nào hotspot công trình , 32 so với 64 bit, sử dụng openJDK?

điểm chuẩn, lược tả, cách đọc stacktraces;

hàng loạt kiểm tra libs cho mọi nhu cầu có thể hiểu được.

java.util.concurrent

Gọi API Swing; Classpath; Maven, kiến; Hudson, giao diện

namespace/gói/bố trí thư mục, và tất cả những thứ khác tự động bởi:

IntelliJ, NetBean, hoặc che khuất


http://news.ycombinator.com/item?id=1508609

http://www.mired.org/home/mwm/papers/simple-clojure.html

+ UseConcMarkSweepGC -XX: + CMSIncrementalMode -XX :, EscapeAnalysis, v.v. http://groups.google.com/group/clojure/browse_frm/thread/c8f69037b26e2856#

nén oops, http://blog.juma.me.uk/2009/10/26/new-jvm-options-and-scala-iteration-performance/

http://blog.headius.com/2009/01/my-favorite-hotspot-jvm-flags.html

http://groups.google.com/group/jvm-languages/topics

Java for Clojure users

Learning Clojure - What should I know about Java and more

http://copperthoughts.com/p/clojurists-guide-to-java/

+2

Ah, điều này rất hữu ích. Vì vậy, tại sao tôi nên biết java.util.concurrent trên libs diễn viên của scala? Kiến thức về JVM là thứ mà tôi đang cố gắng chọn, và tất cả các tùy chọn khởi động và phép thuật classpath. Cuối cùng, tôi hoàn toàn bị dị ứng với các IDE phức tạp. Nếu tôi không thể tìm ra những gì nó làm bằng cách tải nó lên trong một REPL và poking nó với một cây gậy, hoặc viết các bài kiểm tra script cô lập, tôi nhận được quan tâm. – knowtheory

+1

@knowtheory, tôi nghĩ rằng nếu bạn đang làm việc trên các ứng dụng nhắn tin hoặc luồng, bạn nên giao tiếp trong các diễn viên scala và akka, j.u.c, STM trong các quy trình clojure và haskell, erlang và zeroMQ. Và cách khung công tác C#/F # đang phát triển (mà tôi không biết nhiều về nó) Và node.js, chỉ dành cho heckuvit. –

+0

@knowtheory: IDE không yêu cầu bạn sử dụng bất kỳ tính năng nào, chỉ những tính năng bạn hiểu/thích. Đối với IDEA, ít nhất, bạn có thể phải rejigger heap và permgen (lên, rõ ràng) và có thể lật đến 32-bit JVM để có được nó để chạy lớn repo giống như thang máy, nhưng nó hoạt động khá tốt. Và có rất nhiều blog và danh sách hoạt động: http://www.delicious.com/tag/scala+intellij; http://dir.gmane.org/gmane.comp.lang.scala.tools –

Các vấn đề liên quan