Nauka Scali, uczucie zniechęcenia [zamknięte]

9

Pochodzę ze środowiska Java i próbuję nauczyć się Scali. W tej chwili czuję się bardzo przytłoczony, wydaje się, że ze Scalą jest o wiele więcej do nauczenia, tak wiele różnych sposobów robienia tego samego.

Zastanawiałem się, czy ktokolwiek ma jakąś radę, od czego zacząć i ile czasu zajęło im poczucie odpowiedniej znajomości języka?

Nawet drobne rzeczy, takie jak interpretacja pętli, wydają się naprawdę potężne, ale to tylko kolejny element składni, o którym musisz pamiętać!

jcm
źródło
W większości przypadków Scala jest złożonym językiem, więc nie zniechęcaj się! Anegdotycznie jestem dość kompetentnym programistą Haskell i pomyślałem, że Scala jest o wiele bardziej złożona :) Najlepszym sposobem, w jaki udało mi się dowiedzieć czegoś, jest na przemian książka i projekt. Scali sugerowałbym kompilator i książki na temat schodów, ale każdemu z nich
Daniel Gratzer
Dzięki za zachętę! Co to jest książka na schody?
jcm
zalecana lektura: od czego zacząć?
komara
Próbowałem Scali kilka lat temu z perspektywy Java i tak naprawdę nie dostałem. Ostatnio zacząłem kurs na coursera.org na temat programowania funkcjonalnego w Scali. Jest to drastycznie inne podejście, które nie przeszkodziło mojemu środowisku Java. Zamiast tego uczę się (ponownie) myśleć w niezmiennych strukturach danych, logując się na temat algorytmów, teorii mnogości, teorii typów i wszystkich innych fajnych rzeczy, których nie ćwiczę w prawdziwej pracy. Nie martw się; nadal istnieje prawdziwa przydatność Scali w prawdziwym świecie.
BobDalgleish
2
Scala to duży nowy ekosystem do pobrania (sam język podstawowy nie jest tak duży - to głównie biblioteki i koncepcje). Jeśli przez jakiś czas będziesz trzymać płytszy koniec rzeczy i wybierzesz jedną koncepcję na raz, rzeczy naprawdę zaczną się łączyć. Rzeczy, które wyglądają jak dziwacznie ugotowane w specjalnej składni, zwykle kończą się na bardziej ogólnej kategorii rzeczy, które można wyodrębnić w całym języku. Ale zdecydowanie potrzeba trochę zabawy i czytania, aby dowiedzieć się, co to takiego.
KChaloux

Odpowiedzi:

11

Byłem tam, gdzie jesteś i prawie się poddałem kilka razy. Chociaż w żadnym razie nie jestem ekspertem w dziedzinie programowania Scala, czuję, że teraz dobrze rozumiem ten język - z pewnością wystarczający, aby całkowicie zatruł mój związek z Javą.

Pierwszą rzeczą, którą zrobiłem, było spędzenie kilku tygodni na zabawie, czytaniu różnych blogów i wprowadzaniu do języka. To był błąd, nie nauczyłem się (a przynajmniej nie zrozumiałem) wiele pożytecznych rzeczy i czułem się całkowicie poza moimi głębinami.

Drugą rzeczą było poświęcenie czasu na wypracowanie problemu, który był technicznie prosty, ale zmusił mnie do samodzielnego zbadania określonych aspektów składni Scali:

Chociaż nie uczyniło mnie to z dnia na dzień ekspertem, wystarczająco dobrze znałem język, że nie było już tak niemożliwe.

Z tym wzrostem pewności siebie w końcu zrobiłem to, co powinienem był zacząć: zdobądź programowanie w Scali autorstwa Martina Oderskiego i staraj się czytać cały rozdział co kilka dni. Jest to dobrze napisana i kompleksowa książka, a jeśli masz już solidne doświadczenie programistyczne, nie powinna być zbyt zniechęcająca. Nie ma potrzeby, aby pierwsze czytanie było zbyt bolesne: pomiń części oznaczone jako opcjonalne, upewnij się, że rozumiesz pojęcia, ale nie zagłębiaj się w szczegóły (w szczególności uważam, że rozdziały dotyczące kolekcji są przesadzone i mogą być odtłuszczone). Wiedza o tym, że istnieje koncepcja i gdzie można przeczytać wyczerpujące wyjaśnienie jej działania, jest ogromną pomocą.

Alternatywą do czytania książki jest uczęszczanie na kurs Coursera - jest ona mniej kompleksowa, ale obejmuje większość kluczowych punktów i jest podzielona na logiczne, łatwe do zarządzania jednostki. Z drugiej strony nie wiem, czy można uzyskać dostęp do lekcji po zakończeniu zajęć, a także odkryłem, że byłem znacznie mniej zaangażowany w słuchanie kogoś (nawet kogoś tak inteligentnego i znającego się na rzeczy jak Martin Ordesky) niż podczas czytania książki.

Innym problemem związanym ze Scalą jest ilość słownictwa, którą musisz przyswoić - parametry według nazwy? do zrozumienia? zamknięcie? Jeśli czujesz się przytłoczony, odkryłem, że dobra mieszanka glosariusza Scala i przeszukiwania ukierunkowanych przepełnień stosu bardzo mi pomogły (poszukaj odpowiedzi Daniela Sobrala i Travisa Browna). Właściwie posunąłem się do stworzenia talii Anki z glosariuszem i uważam, że to była wielka pomoc.

Wreszcie jest to prawdopodobnie oczywiste, ale kod, kod, kod. Znajdź projekt poboczny, nad którym możesz popracować, nawet jeśli jest to coś trywialnego. To, co zrobiłem, to napisanie bardzo prostego robota Amazon, który wysyłałby mi tweeta za każdym razem, gdy autor, którego byłem zainteresowany, wydał nową książkę. Trwało to dłużej niż powinno, ale wtedy zakochałem się w tym języku.

Jeśli dojdziesz tak daleko, prawdopodobnie nie będziesz potrzebować dalszej pomocy, ale dobrym pomysłem, gdy tylko zrozumiesz język, jest głębsze zapoznanie się z podstawowymi pojęciami. Znasz OOP, spróbuj przeczytać o programowaniu funkcjonalnym - mogę powiedzieć z absolutną pewnością, że rozwali to Twój umysł. Programowanie funkcjonalne w Scali powinno wkrótce zostać wydane (ish), ale edycja wczesnego dostępu jest już doskonała. Inna odpowiedź sugeruje programowanie funkcjonalne dla programistów Java , z którym nie jestem zaznajomiony, ale jestem skłonny wierzyć, że jest dobry (kiedy książka O'Reilly nie była warta przynajmniej przejrzenia?).

Mam nadzieję, że nie stało się to zbyt długie i oczywiste, i szczerze życzę wszystkiego najlepszego. Scala ma swoje wady, ale jest to wspaniały język i poprowadzi twój mózg w kierunkach, o których istnieniu nie wiedziałeś. A za rok będę szukać twojego „Uczenia się Haskella, czując się zniechęcony” :)

Nicolas Rinaudo
źródło
3

Scala to zupełnie inny sposób myślenia niż Java, więc nie zniechęcaj się! Prawdopodobnie zacznę od programowania funkcjonalnego dla programistów Java , abyś mógł wejść w funkcjonalny sposób myślenia.

Czy w pobliżu jest grupa użytkowników Java i / lub Scala? Zawsze łatwiej jest nauczyć się nowego języka z kolegą.

Powodzenia i wytrwaj w tym!

Martijn Verburg
źródło
Ponadto polecam przyjrzeć się Scala Frameworks lub zestawom narzędzi dotyczących obszarów, które Cię interesują. Z mojego doświadczenia wynika, że ​​realizacja projektu, który lubisz, ułatwia. Wypróbuj Lift lub Play Framework, na przykład, gdy zajmujesz się tworzeniem stron internetowych lub Akka, jeśli lubisz aplikacje współbieżne lub rozproszone.
juwi