Эта статья, как и мой предыдущий пост, не похожа на то, что обычно публикуют на Хабре. Здесь не объясняется никаких новых или старых концепций, я не рассказываю что такое ООП и функциональное программирование, сложного кода почти нет. Я хочу пригласить вас к дискуссии стоит ли начинать программировать с языка Scala.

Меня иногда просят научить программированию или помочь с поиском подходящего курса. Я хорошо понимаю недостатки и сложности со скалой, но думаю, что Scala 3 — подходящий язык, для того чтобы начать обучение с него, если правильно составить курс. Вся языковая мощь и сложность, конечно, не нужны начинающему программисту, но ему и незачем о них знать. На скале можно писать вполне простой и понятный код, постепенно наращивая инструментарий.

Я согласен с теми комментаторами, кто считает что для этого нужен толковый преподаватель. Это безусловно. Или талантливый преподаватель, который разбирается в предмете, или хорошая книжка, или толковый курс просто необходимы. Иначе есть риск захлебнуться, так и не научившись плавать.

Archeage7.6 Гайд по пакам фактории. Заработок для каждого. Тонкости, маршруты, оборудование.

И тем не менее я считаю, что Scala — это язык будущего.

Лестница в логотипе отсылает к институту EPFL в Лозанне. Там придумали этот язык

Если коротко, то Scala — это возможность научиться функциональному программированию на безопасном языке, у которого есть большое будущее

Умный компилятор

У скалы один из самых умных и сложных компиляторов. Это приводит к медленным билдам (особенно в первых версиях языка), и за это скалу хейтят. Но зато мы можем отдать компилятору очень много работы по анализу кода, проверке его на безопасность и отсутствие ошибок, что очень важно для программиста. Эта сложность — на стороне разработчика, в том числе и начинающего, которому компилятор очень помогает и облегчает работу.

Скала — это единственный язык, где я пишу код, и он сразу работает без утомительной отладки. Конечно, так происходит не всегда, но с джавой, джаваскриптом, си, паскалем и бейсиком так не происходило никогда. Я люблю говорить, что джава — это язык для компилятора, а скала — это язык для программиста.

JVM-экосистема

Как известно, Джеймс Гослинг, создатель языка джава, считает самой лучшей ее частью джава-машину. Действительно, много инженеров потратило десятки человеко-лет на разработку виртуальной машины и достигли скоростей, в некоторых случаях превышающих Си++. Вот исследование производительности JVM в мобильных устройствах, в нем чаще побеждает нативный код на Си, но в одном случае победила JVM: Java vs C app performance.

На Android 6 AArch64 JVM победила Си в математических вычислениях, хотя и проиграла во всех других видах

Java Memory Model (Модель памяти для многопоточных вычислений) — это зрелая, непротиворечивая, проверенная многими годами промышленного программирования парадигма, которая при правильном использовании гарантирует достаточный уровень абстракции и безопасности. Благодаря этому возможны удобные конструкции для параллельного программирования, доступные даже начинающим.

Кроме того, на джаве написаны миллионы строк кода, которые вы можете использовать из скалы или без проблем в нее транслировать.

Кстати, Джеймсу Гослингу скала тоже нравится.

Но в этом всем есть и минусы. Как мы знаем, высокоуровневые абстракции протекают, и для того чтобы программировать на скале, важно знать как устроена виртуальная машина джава, и учитывать ее особенности. Например, такие как Type Erasure. Это довольно серьезный минус, но плюсы от использования JVM его перевешивают.

Эволюция vs революция

В экосистеме скалы приняты довольно слабые гарантии обратной совместимости по сравнению с джавой. С одной стороны, это приводит к тому, что разработчикам постоянно приходится поддерживать свой код в форме при переходе на новую версию языка или библиотек. Кроме того, разработчикам библиотек приходится прибегать к кросс-компиляции для того чтобы обеспечить несколько версий скомпилированных библиотек, подходящих для нескольких версий языка. Это, безусловно, минус.

Но с другой стороны такой подход обеспечивает быстрое и динамичное развитие языка, которое не может себе позволить джава. Именно поэтому я думаю что будущее — за скалой.

К тому же, в Scala 3 появилось типизированное абстрактное синтаксическое дерево компилятора TASTY, которое позволит взаимодейстWowать классам, собранным разными версиями компилятора. Разумеется, начинающим программистам нет нужды разбираться в этом.

Scala 3

Благодаря более слабым гарантиям обратной совместимости, разработчики языка получили возможность пересмотреть его основы, включая синтаксис.

Первоначальным посылом к созданию скалы было сделать язык промышленного уровня, на котором будет приятно программировать. Это действительно был большой шаг вперед.

Но некоторые решения, принятые более 15 лет назад, были неверными и приводили к неочевидному, либо многословному коду. И сейчас создатели языка делают его действительно лучше. После этих изменений шансы скалы в качестве первого языка программирования заметно вырастают.

Я уже пару лет с нетерпением жду его выхода и мечтаю начать писать на нём. Вот сжатый рассказ Мартина Одерски про новую версию языка: Countdown to Scala 3 by Martin Odersky. Для опытных разработчиков — интересная статья Annoying things in Scala 2 that’ll be (mostly) gone in Scala 3

DOT

Dependent Object Types — это теоретические основы языка Scala 3, разработанные его основателем Мартином Одерски. Мало какой язык может похвастать математически точным исчислением, лежащем в его основе.

Читайте также:  Как делать навесы в Архейдж

Мартин Одерски

Согласитесь, приятно учить язык с таким бэкграундом, хотя начинающим программистам знать о нём не обязательно.

Выразительность и лаконичность

То, что я больше всего люблю в языке — это его сжатость и лаконичность. Я ненавижу длиннейшие конструкции джавы, в которых приходится сложно и многословно объяснять компилятору простые вещи. Моя любимая шутка про джаву — что это такой язык, в котором уан-лайнер занимает около 30 строк. Так вот, в скале уан-лайнер — это уан-лайнер.

Я думаю, что это качество важно не только для опытных разработчиков, но и для тех кто только изучает язык. Думаю, выразительность — это та причина, по которой так популярны динамические и скриптовые языки. Уверен, скала способна с ними в этом поспорить. И даже сама послужить отличным скриптовым языком.

Конечно, лаконичность не должна наносить ущерб читаемости кода. Таких неудачных примеров в программировании полно, вспомним регулярные выражения, паттерн-матчинг и парсер-комбинаторы. Понятно, что для написания библиотек важно понимать сложные концепции и знать много умных слов. Но для того, чтобы ими пользоваться и писать простой код, всего этого знать не надо. Минимальный уровень скалы, который подойдет начинающим, очень простой.

Вот мой любимый пример для библиотечного кода на скале. Конечно, он не предназначен для начинающих разработчиков:

class Stack[+A] < def push[B >: A](elem: B): Stack[B] = new Stack[B] < override def top: B = elem override def pop: Stack[B] = Stack.this override def toString = s»$elem $» > def top: A = sys.error(«no element on stack») def pop: Stack[A] = sys.error(«no element on stack») override def toString = «» > object VariancesTest extends App

В новой версии языка даже есть возможность писать намного меньше фигурных скобок, если есть желание. Это будет выглядеть примерно так:

enum IndentWidth: case Run(ch: Char, n: Int) case Conc(l: IndentWidth, r: Run) def that match case Run(ch2, n2) => n1 this that match case Conc(l2, r2) => l1 == l2 r1 false def < (that: IndentWidth): Boolean = this val kind = ch match case ‘ ‘ => «space» case ‘t’ => «tab» case _ => s»‘$ch’-character» val suffix = if n == 1 then «» else «s» s»$n $kind$suffix» case Conc(l, r) => s»$l, $r» object IndentWidth: private inline val MaxCached = 40 private val spaces = IArray.tabulate(MaxCached + 1)(new Run(‘ ‘, _)) private val tabs = IArray.tabulate(MaxCached + 1)(new Run(‘t’, _)) def Run(ch: Char, n: Int): Run = if n

Статическая типизация

По-моему это самое важное, что должно быть в первом языке программирования. Программисту важно понимать, что не стоит складывать яблоки с апельсинами.

Именно по этой причине на мой взгляд не стоит начинать обучение с Питона, Руби, Джаваскрипта, Си и Си++. Динамическая типизация — это верный способ выстрелить себе в ногу.

Другое дело, что статическая типизация неудобна, неочевидна и требует дополнительного бойлер-плейта. Скала вполне успешно позволяет избавиться от этих недостатков в простых программах.

ООП

Объектно-ориентированное программирование — это самая популярная парадигма, без которой не обходится ни один современный язык программирования.

В скале эта парадигма изначально присуща языку, в отличии от Питона, Си/Си++ и в каком-то смысле джаваскрипта. Разумеется, сейчас у этих языков с ООП полный порядок.

Функциональное программирование

Функциональное программирование — это многообещающая тенденция. Скале она присуща в не меньшей степени чем ООП, и они взаимно обогащают друг друга благодаря этому языку. Рискну предположить, что скала — первый язык промышленного уровня с такими свойствами. Сейчас за ним подтягивается Котлин и другие более новые языки.

Начинающим разработчикам стоит узнать про функциональное программирование подробнее, этот подход позволяет писать гибкий, надежный и хорошо масштабируемый код. Вот несколько хабропостов о нём:

  • Почему вы должны думать о функциональном программировании?
  • Почему разработчики влюбляются в функциональное программирование?
  • Почему функциональное программирование такое сложное?

Иммутабельность

Вообще-то это свойство функционального программирования. Мне кажется очень важным прививать умение пользоваться неизменяемыми структурами данных с самого начала. Это позволит в будущем создавать безопасный многопоточный код. И не только многопоточный.

Расширяемость

Как известно, название языка изначально преподносилось как аббревиатура Scalable Language. Особенности языка позволяют писать гибкие и красивые DSL, удобные даже для не-программистов, вкладывать абстракции друг в друга, создавать очень удобные библиотеки и простые скрипты.

Часто этот инструмент обращается против пользователей библиотек, повышая порог входа в их API. Но в умелых руках такая гибкость может обратиться в большое благо. Опытные разработчики могу создавать на Scala простое и удобное API, тем самым заметно облегчая жизнь начинающим программистам.

Мощь

В целом язык скала предоставляет большое количество мощных инструментов, и обратная сторона этого — высокий порог входа, особенно в отсутствии хорошего курса, учебника, или наставника.

Читайте также:  Архейдж аукцион как отменить ставку

Но думаю, что с хорошим наставником или туториалом вполне можно начинать изучать программирование с языка скала и получать правильные привычки статической типизации, функционального программирования и иммутабельных структур данных.

Источник: https://prwatech.in/blog/apache-spark/introduction-to-scala-programming-language/

Рынок вакансий

Конечно, вакансий для скала-программистов значительно меньше, чем для джава-программистов. Но зато Scala выше оплачивается.

https://insights.stackoverflow.com/survey/2019

Вот вам картинка про области применения скалы:

Источник: https://prwatech.in/blog/apache-spark/introduction-to-scala-programming-language/

Мои первые книжки

Самая лучшая книжка про скалу, которую я читал — Scala by Example Мартина Одерски, написанная уже 10 лет назад. Прежде чем начинать сейчас читать книгу по скале, очень рекомендую убедиться что она обновлена до версии Scala 3.

А любимый курс — это Functional Programming in Scala, я проходил его в самой первой версии, с тех пор он, конечно, успел измениться. Первые уроки этого курса основываются все на той же Scala by Example. Сейчас команда курса работает над его обновлением.

Если вы хотите поиграть скалой или дотти, не устанавливая IDE — добро пожаловать в Scastie.

Пример кода

Много примеров короткого кода на скале можно найти вот в этом обсуждении: Samples of Scala and Java code where Scala code looks simpler/has fewer lines? Вот один из них:

Scala

object Main extends App

Java 8

import java.util.*; class Main < public static void main(String[] args) < Listkeywords = Arrays.asList(«Apple», «Ananas», «Mango», «Banana», «Beer»); Map result = keywords.stream().sorted().collect(Collectors.groupingBy(it -> it.charAt(0))); System.out.println(result); > >

Java 7

import java.util.*; class Main < public static void main(String[] args) < Listkeywords = Arrays.asList(«Apple», «Ananas», «Mango», «Banana», «Beer»); Map result = new HashMap(); for(String k : keywords) < char firstChar = k.charAt(0); if(!result.containsKey(firstChar)) < result.put(firstChar, new ArrayList()); > result.get(firstChar).add(k); > for(List list : result.values()) < Collections.sort(list); >System.out.println(result); > >

Поступь прогресса

На прощанье — шутка Кея Хорстмана «The March of Progress»

1980: C

printf(«%10.2f», x);

1988: C++

cout

1996: Java

java.text.NumberFormat formatter = java.text.NumberFormat.getNumberInstance(); formatter.setMinimumFractionDigits(2); formatter.setMaximumFractionDigits(2); String s = formatter.format(x); for (int i = s.length(); i < 10; i++) System.out.print(‘ ‘); System.out.print(s);

2004: Java

System.out.printf(«%10.2f», x);

2008: Scala and Groovy

printf(«%10.2f», x)

2012: Scala 2.10

println(f»$x%10.2f»)

На этом я рискну опубликовать этот пост, но по-прежнему планирую его дописывать по результатам обсуждения с вами.

  • изучение программирования
  • tutorial

Источник: habr.com

Archeage как же это скала

Исследование Сальфимара в ArcheAge

Опубликовано: 27 июня 2016

  • Восточный материк
  • Западный материк
  • Изначальный материк
  • Морские острова

Список достижений (карта) на территории Сальфимара для получения достижения «Картограф Сальфимара» (с 1 по 9) и «Картограф Сальфимара II» (с 10 по 19) в ArcheAge:

  1. Найти жерло вулкана
  2. Найти самую высокую точку дымящегося вулкана
  3. Найти вторую по высоте точку вулкана
  4. Найти одинокий пик
  5. Найти глубокую щель в склоне вулкана
  6. Забраться на вершину статуи Нуи
  7. Осмотреть гигантскую статую со всех сторон
  8. Осмотреть полузатопленные скалы и гроты
  9. Осмотреть замшелую природную арку
  10. Найти узкий проход среди скал
  11. Осмотреть укромные уголки бухты
  12. Найти причал контрабандистов
  13. Забраться на гигантский перистый папоротник
  14. Осмотреть подводную расселину
  15. Осмотреть северный берег лабиринта черных скал
  16. Осмотреть западную часть лабиринта черных скал
  17. Осмотреть северные арки лабиринта черных скал
  18. Осмотреть северные пещеры лабиринта черных скал
  19. Найти самую северную точку лабиринта

Карта исследований Сальфимара в ArcheAge

Найти жерло вулкана

Вы бесстрашно бросились в самое жерло дымящегося вулкана!

Жерло вулкана в Сальфимаре ArcheAge (карта)

Примечание: необходимо забраться на вершину лавы. Там же, на территории неподалеку, можно получить достижение «Спуститься в кратер вулкана» из серии «Исследование Нуимара».

Найти жерло вулкана в Сальфимаре Архейдж

Найти самую высокую точку дымящегося вулкана

Вы нашли самую высокую точку дымящегося вулкана!

Cамая высокая точка дымящегося вулкана в ArcheAge (карта)

Примечание: на эти точки довольно легко попасть с помощью глайдеров с Кракена/Дракона.

Найти самую высокую точку дымящегося вулкана

Найти вторую по высоте точку вулкана

Вы нашли вторую по высоте точку дымящегося вулкана. Отличное достижение!

Найти вторую по высоте точку вулкана в ArcheAge (карта)

Вторая по высоте точка вулкана в Архейдж

Найти одинокий пик

Вы нашли одинокий пик, с которого открывается отличный вид на дымящийся вулкан!

Одинокий пик в Сальфимаре ArcheAge (карта)Найти одинокий пик в Сальфимаре Архейдж

Найти глубокую щель в склоне вулкана

Вы обнаружили глубокую узкую щель, уходящую вертикально вниз.

Найти глубокую щель в склоне вулкана в ArcheAge (карта)

Глубокая щель в склоне вулкана

Забраться на вершину статуи Нуи

Вы забрались на самую вершину одной из статуй Нуи в лабиринте черных скал!

Вершина статуи Нуи в Сальфимаре ArcheAge (карта)Забраться на вершину статуи Нуи в Сальфимаре Архейдж

Осмотреть гигантскую статую со всех сторон

Вы осмотрели гигантскую статую Нуи в лабиринте черных скал со всех сторон!

Гигантская статуя в Сальфимаре ArcheAge (карта)Осмотреть гигантскую статую со всех сторон в Сальфимаре Архейдж

Осмотреть полузатопленные скалы и гроты

Вы осмотрели полузатопленные скалы и гроты в бухте Сальфимара!

Полузатопленные скалы и грот в Сальфимаре ArcheAge (карта)Осмотреть полузатопленные скалы и гроты в Сальфимаре Архейдж

Осмотреть замшелую природную арку

Вы осмотрели замшелую природную арку в бухте Сальфимара!

Замшелая природная арка в Сальфимаре ArcheAge (карта)Осмотреть замшелую природную арку в Сальфимаре Архейдж

Найти узкий проход среди скал

Вы обнаружили узкий проход среди скал, образующих берег Сальфимара.

Узкий проход среди скал в Сальфимаре ArcheAge (карта)

Примечание: необходимо доплыть до дна и, проникнув за текстуру, всплыть наверх. Вероятнее всего, точка получения достижения является ошибочной, что возможно исправят в каком-либо из будущих обновлений.

Найти узкий проход среди скал в Сальфимаре АрхейджУзкий проход в Сальфимаре Архейдж

Осмотреть укромные уголки бухты

Вы осмотрели самые укромные уголки бухты Сальфимара, но не нашли тайников.

Укромные уголки бухты в Сальфимаре ArcheAge (карта)Осмотреть укромные уголки бухты в Сальфимаре Архейдж

Найти причал контрабандистов

Вы нашли деревянный причал. Судя по всему, его построили контрабандисты.

Причал контрабандистов в Сальфимаре ArcheAge (карта)Найти причал контрабандистов в Сальфимаре Архейдж

Забраться на гигантский перистый папоротник

Вы забрались на верхушку гигантского перистого папоротника — настоящего патриарха растительного мира Сальфимара!

Гигантский перистый папоротник в Сальфимаре ArcheAge (карта)Забраться на гигантский перистый папоротник в Сальфимаре Архейдж

Осмотреть подводную расселину

Вы осмотрели подводную расселину у берегов Сальфимара!

Подводная расселина в Сальфимаре ArcheAge (карта)Осмотреть подводную расселину в Сальфимаре Архейдж

Осмотреть северный берег лабиринта черных скал

Вы осмотрели северный берег лабиринта черных скал!

Северный берег лабиринта черных скал в Сальфимаре ArcheAge (карта)Осмотреть северный берег лабиринта черных скал в Сальфимаре Архейдж

Осмотреть западную часть лабиринта черных скал

Вы осмотрели западную часть лабиринта черных скал!

Западная часть лабиринта черных скал в Сальфимаре ArcheAge (карта)Осмотреть западную часть лабиринта черных скал в Сальфимаре Архейдж

Осмотреть северные арки лабиринта черных скал

Вы осмотрели северные арки лабиринта черных скал!

Северные арки лабиринта черных скал в Сальфимаре ArcheAge (карта)

Примечание: необходимо упасть вниз в указанном направлении или спланировать с глайдером.

Читайте также:  Квест северные земли Архейдж прохождение

Осмотреть северные арки лабиринта черных скал в Сальфимаре Архейдж

Осмотреть северные пещеры лабиринта черных скал

Вы осмотрели северные пещеры лабиринта черных скал!

Северные пещеры лабиринта черных скал в Сальфимаре ArcheAge (карта)Осмотреть северные пещеры лабиринта черных скал в Сальфимаре Архейдж

Найти самую северную точку лабиринта

Вы нашли самую северную точку лабиринта черных скал!

Самая северная точка лабиринта в Сальфимаре ArcheAge (карта)

Примечание: на этом же холме (с другой стороны) можно получить достижение «Покорить утес между Сангемаром и Сальфимаром» из серии «Исследование Сангемара».

Источник: archeageon.ru

Древняя скала, словно разрезанная лазером и другие загадочные достопримечательности в пустыне Саудовской Аравии

Получайте на почту один раз в сутки одну самую читаемую статью. Присоединяйтесь к нам в Facebook и ВКонтакте.

Отписаться можно в любой момент.

На территории Саудовской Аравии, в восьми часах езды от ее столицы, есть таинственное скальное образование под названием Аль-Наслаа. Этот гигантский валун высотой девять метров, а шириной – около восьми до сих пор овеян ореолом загадочности и вызывает споры между любителями мистики и учеными. Ведь он будто бы разрезан на две части невероятно острой пилой! Таинственности глыбе из песчаника, разделенной надвое, добавляют наскальные рисунки-петроглифы, которыми покрыта часть поверхности. И это лишь одна из загадочных достопримечательностей Саудовской Аравии.

Кто это сделал?

По одной версии, суперкамень Аль-Наслаа много лет назад был подарен человечеству посланниками внеземных цивилизаций, ведь при взгляде со стороны разрез у него настолько ровный, что кажется, будто он сделал лазером.

Согласно второй невероятной гипотезе, камень стоит здесь со времен древних высокоразвитых культур, которые сущестWowали в этом месте много тысячелетий назад, а потом исчезли.

Третья версия более прозаичная – камень разделили наши предки с помощью древней лучковой пилы (плотницкого столярного инструмента) и воды, а использовали его для религиозных обрядов.

Один из самых таинственных объектов Саудовской Аравии.

Один из самых таинственных объектов Саудовской Аравии.

Впрочем, у многих западных ученых есть более простое объяснение: валун разделился на половинки в результате капризов природы, а именно – выветривания. По словам геолога Черри Льюис из Бристольского университета, суть этого процесса в том, что сначала в скальную трещину попадает вода, а затем, при понижении температуры, она замерзает, расширяется и, соответственно, увеличивает размеры отверстия.

Две половинки скалы.

Две половинки скалы.

Между тем есть даже скептики, считающие, что разрезанный на части валун ни что иное как новодел и сделан для привлечения туристов.

Рисунок на камне.

Рисунок на камне.

Старше, чем пирамиды

В Саудовской Аравии специалисты обнаружили более сотни сооружений из камня и пришли к выводу, что эти объекты – одни из самых древних на нашей планете. Они даже старше Египетских пирамид!

Объекты сооружены из камней, нагромождённых друг на друга.
Увидели их благодаря съемке, проведенной из космоса. Эти строения, называемые мустатилами, представляют собой невысокие стены, похожие на забор, однако совсем непохоже, чтобы их построили с оборонительной целью (уж слишком низкие).

Странные объекты.

Странные объекты.

Нанести на карту расположение некоторых из этих объектов, помимо спутниковых снимков, помогли данные Google Earth. Многие мустатилы выглядят с высоты как узкие прямоугольники.

Таинственные мустатилы.

Таинственные мустатилы.

Поскольку никаких других следов древних культур на месте обнаружения объектов замечено не было, возраст их ученые определили с помощью углеродного анализа. Он показал, что мустатилам более семи тысяч лет!

Узор на поверхности одного из таких объектов.

Узор на поверхности одного из таких объектов.

Загадочный город Мадаин Салех

Величественный город Мадаин Салех, расположенный в северной части Саудовской Аравии, появился еще в доисламский период, когда здесь сущестWowало Набатейское государство. Через это поселение в те времена проходил один из самых важных торговых путей. Древний комплекс включает жилые здания, храмы для богослужений и кладбища.

Даже по фрагментам видно, насколько великолепен и высокоразвит был древний город.

Даже по фрагментам видно, насколько великолепен и высокоразвит был древний город.

Среди останков древнего высокоразвитого города можно выделить гробницу Каср аль-Фарид. Это словосочетание переводится как «одинокий замок». Сооружение было построено (а точнее, вырезано из камня) в 1 веке н.э., причем фасадную часть гробницы древние строители так и не доделали. В том же столетии Набатея добровольно вошла в состав Римской империи, а веком позже некогда величественное государство перестало сущестWowать.

Загадки Саудовской Аравии.

Загадки Саудовской Аравии.

Кстати города Набатеи (вернее, то, что от них осталось) – в списке объектов Всемирного наследия ЮНЕСКО.

Кстати, вышеперечисленные объекты — не единственные достопримечательности, имеющие загадочное происхождение. На пустынных просторах Саудовской Аравии встречаются и древние пирамидки разных размеров и форм, и странные каменные «порталы», и много других таинственных сюрпризов, оставленных предками. Отгадать их происхождение и предназначение учёным ещё предстоит.

Кстати, рядом с Саудовской Аравией, в Йемене, не меньше загадочных объектов и древних шедевров арабского мира. Предлагаем совершить Путешествие по столице Йемена .

Текст: Анна Белова

Понравилась статья? Тогда поддержи нас, жми:

Источник: kulturologia.ru