По семейным обстоятельствам мне жаль отменять свое выступление и выступление на Open West в этом году. Open West — отличная конференция со 100% открытым исходным кодом! Я очень скучал по тому, что меня там не было — это разумное мероприятие для ИТ-специалистов (поскольку Open Source — разумный выбор :)

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

Speaker Intro
Джон имеет несколько инженерных степеней в ведущих учебных заведениях, а его докторская степень посвящена экспертным системам и системам поддержки принятия решений с использованием ИИ. интеллектуальное программное обеспечение. Он был адъюнкт-профессором, преподавал C++ и алгоритмы. Джон является судьей чемпионата по программам FIRST и VEX Robotics. Сейчас он пишет несколько информационных бюллетеней по интеллектуальным технологиям и создает новую некоммерческую организацию для создания бесплатного открытого онлайн-обучения технологиям и технических соревнований, направленных на обучение молодых людей робототехнике и программированию в регионах мира с ограниченными ресурсами (также называемых бедными). , особенно в Южной Америке, где он проводит около полугода. Если кто-то хочет принять участие, пожалуйста, свяжитесь с нами — нам нужна помощь!

Ладно, давайте приступим.

— — — — — — — — — — — — — — — — — — — — — —
Поиск нового стека
* Скорость (для ИИ)< br /> * Простота программирования (для студентов)
* Бесплатный открытый исходный код

Нашему новому техническому учебному сайту требовался хороший стек программного обеспечения для веб-сайта, задач роботов и обучающей платформы. Ruby Sinatra была опорой в наших веб-компаниях, но все сообщество Ruby просто не было там для ИИ и робототехники (странно, поскольку Япония является мировым лидером в области роботов!). Итак, мы рассмотрели другие варианты, которые привели к этому разговору. Идея здесь состоит в том, чтобы дать обзор некоторых новых популярных языков с нашим небольшим опытом — тесты и детальное сравнение функций оставлены другим.

— — — — — — — — — — — — — — — — — — — — —
Старые компилируемые языки
* C, C++, D, Rust, Qt
* Быстрый
* Сложный, трудный для изучения

Эти языки существуют уже давно, проверены и являются основой многих технологий. Ну, может быть, Rust не такой уж и устаревший, но он в той же степени близок к металлическому семейству. Я преподавал C++ второкурсникам колледжа — им было тяжело, особенно управление памятью. И профессионалам тоже тяжело. С хуже. Сложно и легко иметь ошибки. Поскольку они сложные, это менее продуктивно — и сложно для мира MVP. Конечно, очень сложно для младших школьников. Есть причина, по которой большая часть сообщества разработчиков перешла на языки сценариев. Мы несколько впечатлены Robot C, но он является проприетарным. Нет FOSS == Нет Спасибо.

— — — — — — — — — — — — — — — — — — — — —
Преимущества компиляции
* Небольшой размер двоичного файла (обычно)
* Простота распространения
* Повышенная защита от несанкционированного доступа
* Быстрота

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

— — — — — — — — — — — — — — — — — — — — —
Проблемы с устаревшими компилируемыми языками
* Трудно выучить
* Трудно программировать/отлаживать
* Трудно быть продуктивным (MVP)

В целом верно, но особенно для младших школьников

— — — — — — — — — — — — — — — — — — — — — -
Hello Scripting Languages
* Ruby
* Python * Java

Эти языки гораздо легче изучать и программировать. Множество руководств, книг и т. д. Можно написать рабочий код за считанные минуты. Черт возьми, даже несколько профессоров CS смогли выучить и научить этому! О да, я оставил все, что связано с MS — MS НЕ FOSS, но это разговор/блог для другого дня.

— — — — — — — — — — — — — — — — — — — — — —
Как насчет Python
* Slow
* GIL< br /> * Версия Mess
* Белое пространство Любовь или ненависть

Библиотеки Python позволяют легко делать практически все. Но это медленно. И сообщество действительно облажалось с версионированием — это чертовски беспорядок. А то, что учебники тратят страницы на настройку виртуальной среды перед кодированием Hello World, просто глупо. И тогда есть белое пространство. Завершение функции правильным количеством пробелов ??

— — — — — — — — — — — — — — — — — — — — — —
Как насчет Java
* Подробно
* Сложно связать

И лично мы хотим держаться подальше от всего, что запятнано Oracle. Google должен был это знать (конечно, java сделала свою работу для Android, чтобы доминировать на рынке телефонов и побить штаны у Windows Phone….)

— — — — — — — — — — — — — — — — — — — — — —
Как насчет Ruby
* Slow
* GIL< br /> * Trapped in Rails Lovefest
* Sci Ruby = No Love

Ruby — отличный язык для обучения и продуктивной работы. Но все сообщество увлечено Rails. Например, изменения в драйвере PG db работают для Rails, но часто не для Sinatra. Угадайте, что дети, использующие сценарии Rails, не заинтересованы или не способны к программированию в области науки о данных. И даже с грядущими улучшениями скорости Ruby 3x3 он все еще, вероятно, слишком медленный для вещей Tensor Flow AI. Но может быть — определенно кажется, что прогресс в правильном направлении с потоками и т. д.

"Ruby работает не медленно, Active Record работает медленно"

Аминь. Забыл, где я это читал. Да, мы заметили это, когда впервые использовали Rails где-то в 2000 году. Но будущее Ruby как лидера в науке о данных ИИ сомнительно, если сообщество не сможет избавиться от зависимости от ORM.

— — — — — — — — — — — — — — — — — — — — — —
Используйте лучшее из обоих миров
* Easy Scripting Language
* Скомпилировано для скорости

— — — — — — — — — — — — — — — — — — — — — — —

Новые компилируемые языки сценариев
* Crystal
* Nim
* Go
* Svelte / Deno
* Julia

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

— — — — — — — — — — — — — — — — — — — — — —
Кристалл
* «Гладкий как рубин, быстрый как C» < br /> * Совместимость с Ruby на 90–95 %
* Быстро работает!
* Есть фреймворки
* Достаточное количество библиотек (осколков) и их количество растет
* Статическая связь отсутствует

Нам очень нравится Кристалл. Настоящим рубистам (а не детям, использующим сценарии Rails) несложно использовать вместо Ruby. Вроде довольно стабильно. Скомпилированные программы работают намного быстрее, чем в Ruby. Он по-прежнему медленно компилируется, но, похоже, с новыми версиями ситуация улучшается (мы просто хотим, чтобы они сосредоточились на этом, а не опускались в кроличью нору поддержки Windows). Kemal — это хороший простой фреймворк, такой как Sinatra, со встроенными веб-сокетами, а осколки упрощают подключение к данным. Нужно преобразовать драгоценный камень Stripe в осколок — любой студент колледжа хочет внести хороший вклад в создание резюме? Одной из недостающих функций является статическое связывание, поэтому требуется библиотека времени выполнения.

— — — — — — — — — — — — — — — — — — — — — —
Go Language
* Быстро работает
* Супер быстро Компиляция
* Множество бесплатных библиотек
* Очень активное сообщество
* Вроде простого программирования на C
* К сожалению, продукт Google

Go действительно хороший язык. Мы быстро смогли создать работающий веб-сайт и были поражены компиляцией практически в реальном времени (иногда продолжали перекомпилировать, так как это было так быстро, что мы не осознавали, что она скомпилирована. Полагается на использование структур. Сообщество больше похоже на программиста — спросите о фреймворках и ожидайте ответа типа "не нужны никакие вонючие фреймворки". И они правы. Если бы Google не контролировал их, мы бы, вероятно, использовали GO сейчас. Но у Google плохая репутация компании, которая внезапно меняет направление или даже отказывается от проектов. Можете ли вы сказать Angular 1 -> 2 -> 4000, как угодно.Даже языковая стратегия Google: GO — Dart?… Также нам не нравится отслеживание Google (будь то для рекламодателей или правительства: NSA/CIA/NRO — Alphabet — Get It ( : — сейчас мы удаляем все, что можем, от Google. Google уже регулярно блокирует нашу почту Gmail, заявляя, что Linux / Thunderbird вызывает подозрения у компании, выступающей за Typescript (MS EEE). Мы думаем, что подозрительной является Google. ТАК НЕ ИДИТЕ.

— — — — — — — — — — — — — — — — — — — — — —
Язык Nim
* Аналогичные соглашения / пробелы в Python
* Быстро
* Имеет Jester Sinatra Like Framework
* Имеет Arraymancer NumPy вроде
* Компилируется в C, C++ или Javascript
* Имеет Nim Book

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

— — — — — — — — — — — — — — — — — — — — — —
Svelte
* Быстро
* Компилируется в C или JS
* Скомпилированный Javascript
* Комбинирует JS с обычным CSS
* Замена React

Это действительно интересный подход к программированию на Javascript. Очень новый с небольшим сообществом. Никаких дурацких JS CSS-соглашений React — только обычный CSS. Создает шаблоны «все в одном», похожие на Vue.

— — — — — — — — — — — — — — — — — — — — — —
Deno
* Just Off The Presses
* By Райан Даль — создатель NodeJS
* Преемник Express?

Только что видел презентацию Райана об этом. Похоже на Svelte — больше ничего не знаю. Что-то, на что следует обратить внимание.

— — — — — — — — — — — — — — — — — — — — — —
Юлия
* направлена ​​на науку о данных
* получение приятно следовать
* синтаксис не такой простой, как у Python, но, возможно, не такой сложный

Julia, вероятно, не язык для создания веб-сайтов, но это язык для науки о данных. И, возможно, игровые. И он относительно новый — пока он был портирован на Raspberry Pi в 2017 году, в последнее время не видел статей о приложениях с ним. Вероятно, это лучший выбор для робототехники, чем Python — по крайней мере, сильная альтернатива.

— — — — — — — — — — — — — — — — — — — — — —
Игнорируйте троллей
* «В ожидании версии 1.0»
* «Требуется версия для Windows»
* «Требуется ORM»
* «Ожидание готовности к производству»

Не обращайте внимания на бездельников или платных зазывал — просто попробуйте один или несколько из этих языков! Ну, по крайней мере, на небольшом проекте. Забудьте о версиях. Мы используем Inkscape уже 15 лет, и он по-прежнему имеет версию 0,9x. Да и кому вообще нужна винда. Настоящие программисты или центры обработки данных не используют Windows, не так ли? Надеюсь, что нет — это как гонщик Формулы-1, полагающийся на шины KMart. Мы, конечно же, не наймем никого, кто решит использовать Windows. И если вам так необходим ORM, то, возможно, эти хорошие языки программирования не для вас.

— — — — — — — — — — — — — — — — — — — — — —
Post Mortem
Мы решили пойти ва-банк с Javascript и NodeJS , особенно с async/await, что делает программирование более понятным (особенно для студентов). Скорости быстрые. Есть модуль JS tensorflow. Существует хорошая поддержка недорогих плат Raspberry Pi, Arduino и Beagle. Mongodb предоставляет простой интерфейс данных с собственным драйвером узла (мы любим Postgresql, но драйверы и документация для NodeJS просто отстой — мы потеряли слишком много времени, возясь с ними. Так что на данный момент Node и Mongo, к лучшему или к худшему. Мы присматривают за Svelte и Deno — в этом может быть большой прорыв. Нам бы только хотелось, чтобы в Crystal было больше поддержки ИИ и науки о данных — он хорошо подходит для этого, так что, может быть, со временем. И, может быть, если GO отделится от Google…

Ах да, и никакого Github при покупке MS — будем полагаться на Gitlab и Gitea! Разработчики FOSS поступили бы разумно, если бы сделали то же самое — не сомневайтесь в этом, но обсудим это в другой раз.

Вот и все. Надеюсь, это было полезно.