Hej.
Mam takie pytanie. Jak to jest z tą Scalą i Kotlinem na backendzie? Bo gdy przeglądam oferty pracy to Scala siedzi głównie w big data. A Kotlin występuje bardziej jako ciekawostka przyrodnicza niż praca. Słyszałem, że gdzieś używa się Scali do backendu, a ile w tym prawdy? PlayFramework i jazda? Kotlin jest jeszcze świeży więc rozumiem jego rzadkie występowanie aczkolwiek interesuje mnie też backend w tym języku. Mamy ku temu jakieś biblioteki/frameworki cokolwiek? Przyznam, że w tym drugim przypadku pytam na ślepo bo pozakilkoma linijkami widzianymi na oczy nic poza tym nie wiem o tym języku, a szukam czegoś nowego chociażby sam dla siebie :-)
W dużym banku, w którym pracuję, co najmniej jedna osoba aktywnie wykorzystuje Kotlin.
Spotkałem się z opinią, że jest łatwiejszy do zrozumienia niż Scala.
Sprawdź oferty np tutaj: https://nofluffjobs.com/backend?criteria=scala
Pracuję w krakowskiej filii HSBC w jedynym (ZTCW) lokalnym zespole Scalowców i prężnie rozwijamy projekt (kontrakty walutowe bez żadnego big data). Komercyjną przygodę ze Scalą zaczynałem w VirtusLabie, bo chętnie przyjmowali (i pewnie dalej są chętni na) Javowców chcących kodzić w Scali.: http://virtuslab.com/career/#jobopenings
Kotlin na backendzie działa normalnie jeśli chodzi np. o Springa. Jest "międzyoperowalność"?? (po ang. interoperability) - po prostu w projekcie Kotlinowym można działać bezpośrednio w Javie jak i w Kotlinie, wymieniać klasy itp. Ograniczeń nie znam, bo za mało w Kotlinie pisałem, żeby na ograniczenia trafić. Sęk w tym, że zrobiony projekt w Kotlinie, ma prawie tyle samo linii kodu jak ten napisany w Javie. Oszczędza się na modelach i obsłudze wyjątków? To chyba tyle.
Jeśli chodzi o Scalę, to trudno mi napisać cokolwiek, bo sam nawet nie przebrnąłem dobrze przez tutorial. W Scali mnie np. denerwuje ten ichniejszy kompilator. Może kiedyś...
Ogólnie rzecz biorąc: tak, ogłoszenia są i jest ich sporo, Kotlina łatwiej ogarnąć niż Scalę.
Postawienie projektu w Scali to też nie jest jakiś duży problem. Aby zacząć przygodę ze Scalą trzeba:
- zainstalować Javę i dodać ją do PATH
- ściągnąć SBTa z http://www.scala-sbt.org/ , rozpakować i dodać do PATH
- jeśli używamy IDE to ten ma swój kreator tworzenia nowego projektu: http://docs.scala-lang.org/getting-started-intellij-track/getting-started-with-scala-in-intellij.html
- jeśli pracujemy z poziomu linii poleceń to używamy np polecenia
sbt new scala/hello-world.g8
: http://docs.scala-lang.org/getting-started-sbt-track/getting-started-with-scala-and-sbt-on-the-command-line.html - używać SBTa do kompilacji i uruchamiania programu
- jeśli chcemy stworzyć JARka do odpalenia bezpośrednio używając polecenia
java
to są od tego wtyczki do SBTa
Kod Javowy może spokojnie siedzieć obok Scalowego (Javowy w folderze java
, a Scalowy w folderze scala
). Z poziomu Scali można bezproblemowo odnieść się do dowolnego kodu Javowego. Żeby to zadziałało w drugą stronę trzeba przestrzegać pewnych zasad przy pisaniu klas Scalowych do użycia w Javie, ale też się da. Dla przykładu istnieje Javowe API dla Akki (napisane w Scali): https://doc.akka.io/docs/akka/current/index.html?language=java
O, jakieś konkrety. Nie spodziewałem się, że ktoś gdzieś robi backend w Scali. O Kotlinie wiem tylko tyle, że jakiś jeden projekt bankowy się kroi gdzieś w kraju bo pewna Pani szukała ludzi. Stąd i moja ciekawość. Zawsze to jakaś opcja przesiąść się z Javy, której pełno na coś czego niewiele :-)
Scala jako taka nie jest trudna do zrozumienia, problem pojawia się z tym, że jeśli ktoś chce dobrze w niej pisać, to powinien ogarnąć podstawy programowania funkcyjnego, a to już wymaga trochę wysiłku
Ze Scalą jest trochę jak z C++em. Można pisać prosto i czytelnie, ale można też zaszaleć i napisać coś co samo w sobie będzie wyzwaniem do zrozumienia (vide monad typeclasses a'la scalaz). Różnica jest jednak taka, że pisząc w Scali jest się wielokrotnie bardziej produktywnym niż pisząc w C++ie.
W wielu miejscach gdzie jest Spring Boot ludzie przechodza na Kotlina.. A Scale zostawilbym dla Big Data.
Od Springa 5 i Spring Boota 2 Kotlin jest traktowany trochę lepiej przez Pivotala (z tego co kojarzę niektóre zespoły u nich w tym piszą), co nie oznacza że nie można go używać w starszych wersjach. Lżejsze stosy pewnie mają jeszcze mniej problemów. Zresztą powoli nawet Gradle wprowadza kotlina w DSLu, chociaż dokumentacja do tego nie istnieje zupełnie (tylko kilka przykładów, a przejście z Grooviego na Kotlina nie jest najmilsze)