Học Scala, cảm thấy nản lòng [đóng cửa]


9

Tôi đến từ nền tảng Java và đang cố gắng học Scala. Hiện tại tôi cảm thấy khá choáng ngợp, dường như có rất nhiều thứ để học với Scala, rất nhiều cách khác nhau để làm điều tương tự.

Tôi đã tự hỏi nếu có ai có lời khuyên về việc bắt đầu từ đâu, và mất bao lâu để họ cảm thấy có khả năng hợp lý trong ngôn ngữ?

Ngay cả những điều nhỏ nhặt như để hiểu vòng lặp có vẻ thực sự mạnh mẽ nhưng đó chỉ là một phần cú pháp khác mà bạn cần nhớ!


Scala là một ngôn ngữ phức tạp, vì vậy đừng cảm thấy nản lòng! Thông thường tôi là một lập trình viên Haskell khá có năng lực và tôi nghĩ Scala phức tạp hơn nhiều :) Cách tốt nhất tôi tìm thấy để học bất cứ điều gì, là xen kẽ giữa một cuốn sách và một dự án. Đối với Scala, tôi muốn đề xuất một trình biên dịch và sách cầu thang nhưng cho riêng họ
Daniel Gratzer

Cảm ơn sự động viên! Cuốn sách cầu thang là gì?
jcm

đề nghị đọc: bắt đầu từ đâu?
gnat

Tôi đã thử Scala vài năm trước từ góc độ Java và không thực sự hiểu nó. Gần đây, tôi bắt đầu một khóa học tại coursera.org về lập trình chức năng ở Scala. Đó là một cách tiếp cận đủ khác biệt mà nền Java của tôi không thể thực hiện được. Thay vào đó, tôi đang học cách suy nghĩ trong các cấu trúc dữ liệu bất biến, lý luận về thuật toán, lý thuyết tập hợp, lý thuyết loại và tất cả những thứ thú vị khác mà tôi không được thực hành trong một công việc thực tế. Đừng lo lắng; vẫn có sự hữu dụng thực sự của Scala trong thế giới thực.
BobDalgleish

2
Scala là một hệ sinh thái mới lớn để phát triển (ngôn ngữ cốt lõi không lớn lắm - chủ yếu là các thư viện và khái niệm). Nếu bạn kết thúc nông cạn mọi thứ trong một lúc, và chọn một khái niệm tại một thời điểm, mọi thứ sẽ thực sự bắt đầu kết hợp với nhau. Những thứ trông giống như cú pháp đặc biệt được nấu chín thường sẽ biến thành một số loại chung chung hơn của những thứ có thể được trừu tượng hóa trên toàn bộ ngôn ngữ. Nhưng nó chắc chắn cần một số chơi và đọc để tìm ra những thứ đó là gì.
KChaloux

Câu trả lời:


11

Tôi đã từng ở nơi bạn đang ở và gần như đã bỏ cuộc một vài lần. Mặc dù không có nghĩa là một nhà phát triển Scala chuyên nghiệp, tôi cảm thấy bây giờ tôi đã nắm vững ngôn ngữ - chắc chắn đủ để nó đã đầu độc triệt để mối quan hệ của tôi với Java.

Điều đầu tiên tôi làm là dành một vài tuần để chơi xung quanh, đọc các blog khác nhau và giới thiệu về ngôn ngữ. Đó là một sai lầm, tôi đã không học (hoặc ít nhất là hiểu) nhiều điều hữu ích và cảm thấy hoàn toàn nằm ngoài tầm sâu của tôi.

Điều thứ hai là dành một chút thời gian để giải quyết vấn đề đơn giản về mặt kỹ thuật nhưng buộc tôi phải tự mình khám phá các khía cạnh cụ thể của cú pháp Scala:

Mặc dù điều này không biến tôi thành một chuyên gia chỉ sau một đêm, nhưng nó đã cho tôi đủ quen thuộc với ngôn ngữ mà nó không còn cảm thấy không thể nữa.

Với sự tự tin đó, cuối cùng tôi đã làm được điều mà tôi nên bắt đầu với: lấy Lập trình trong Scala của Martin Oderky, và cố gắng đọc toàn bộ một chương mỗi vài ngày. Đó là một cuốn sách được viết tốt và toàn diện, và nếu bạn đã có một nền tảng lập trình âm thanh, không nên tỏ ra quá nản chí. Không cần phải làm cho lần đọc đầu tiên của bạn quá đau đớn: bỏ qua các phần được đánh dấu là tùy chọn, đảm bảo bạn hiểu các khái niệm nhưng không bị sa lầy vào các chi tiết (đặc biệt, tôi cảm thấy rằng các chương trên bộ sưu tập là quá mức cần thiết và có thể lướt qua). Biết rằng một khái niệm tồn tại và nơi để đọc một lời giải thích toàn diện về cách thức hoạt động của nó là một sự trợ giúp to lớn.

Một cách khác để đọc cuốn sách là tham dự lớp Coursera - nó ít toàn diện hơn, nhưng bao gồm hầu hết các điểm quan trọng và được chia thành các đơn vị logic, có thể quản lý được. Mặt khác, tôi không biết liệu có thể truy cập vào các bài học sau khi lớp học hoàn thành hay không và tôi cũng thấy rằng tôi đã ít tham gia hơn khi lắng nghe ai đó (ngay cả một người rõ ràng thông minh và hiểu biết như Martin Ordesky) khi đọc một cuốn sách.

Một vấn đề khác với Scala là lượng từ vựng bạn có để sử dụng - thông số theo tên? để hiểu? Khép kín? Nếu bạn cảm thấy choáng ngợp vì điều này, tôi thấy rằng một hỗn hợp tốt của Scala Glossary và các tìm kiếm tràn ngăn xếp được nhắm mục tiêu đã giúp tôi rất nhiều (tìm kiếm câu trả lời của Daniel Sobral và Travis Brown). Trên thực tế, tôi đã đi xa đến mức tạo ra một bộ bài Anki với bảng chú giải, và cảm thấy đó là một sự trợ giúp lớn.

Cuối cùng, điều này có lẽ là hiển nhiên, nhưng mã, mã, mã. Tìm một dự án phụ mà bạn có thể làm việc, ngay cả khi đó là một việc nhỏ. Những gì tôi đã làm là viết một trình thu thập thông tin rất đơn giản của Amazon sẽ gửi cho tôi một tweet bất cứ khi nào một tác giả mà tôi quan tâm để phát hành một cuốn sách mới. Mất nhiều thời gian hơn nó có thể nên có, nhưng đây là khi tôi yêu ngôn ngữ này.

Nếu bạn đã đi xa đến thế, có lẽ bạn sẽ không cần thêm trợ giúp, nhưng một gợi ý hay, một khi bạn đã nắm bắt được ngôn ngữ, là tìm hiểu sâu hơn về các khái niệm cơ bản. Bạn đã quen thuộc với OOP, hãy thử đọc chương trình chức năng - tôi có thể nói chắc chắn rằng nó sẽ thổi bay tâm trí của bạn. Lập trình chức năng trong Scala sẽ sớm được phát hành (ish), nhưng phiên bản truy cập sớm đã rất xuất sắc. Một câu trả lời khác cho thấy Lập trình hàm cho các nhà phát triển Java , điều mà tôi không quen thuộc nhưng có xu hướng tin là tốt (khi nào một cuốn sách O'Reilly không có giá trị ít nhất là lướt qua?).

Tôi hy vọng điều này đã không trở nên quá dài và rõ ràng, và thành thật chúc bạn những điều tốt đẹp nhất. Scala có lỗi của nó, nhưng đó là một ngôn ngữ tuyệt vời và sẽ đưa bộ não của bạn đi theo những hướng bạn chưa từng biết tồn tại. Và tôi sẽ tìm kiếm "Học Haskell, cảm thấy nản lòng" trong một năm :)


3

Scala là một cách nghĩ rất khác với Java, vì vậy đừng nản lòng! Có lẽ tôi nên bắt đầu với Lập trình hàm cho các nhà phát triển Java để bạn có thể đi vào lối suy nghĩ chức năng.

Có một nhóm người dùng Java và / hoặc Scala gần đó không? Học ngôn ngữ mới với đồng nghiệp luôn dễ dàng hơn.

Chúc may mắn và tiếp tục kiên trì với nó!.


Ngoài ra, tôi khuyên bạn nên xem qua Scala Framework hoặc Toolkits liên quan đến các lĩnh vực bạn quan tâm. Theo kinh nghiệm của tôi có một dự án bạn thích làm việc làm cho mọi thứ dễ dàng hơn. Ví dụ, hãy xem Nâng hoặc Chơi Khung khi bạn tham gia vào Phát triển Web hoặc Akka nếu các ứng dụng Đồng thời hoặc Phân tán là sở thích của bạn.
juwi
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.