Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Выбор языка программирования
Александр Чистяков
Clear Technology Group
Несколько слов о себе
Александр Чистяков, ClearTech Выбор языка программирования 2 / 75
• C{E,T}O @ Clear Technology Group
• Преподаватель @ avalon.ru
• Researcher @ ISST Lab, ITMO
• Координатор встречDevOps-инженеров в Петербурге
• Пишу код
О чем это доклад?
Александр Чистяков, ClearTech Выбор языка программирования 3 / 75
• Я отвечу в самом конце
Что такое «DevOps»?
Александр Чистяков, ClearTech Выбор языка программирования 4 / 75
• Отличный вопрос для собеседования!
Что такое «DevOps»?
Александр Чистяков, ClearTech Выбор языка программирования 5 / 75
• Отличный вопрос для собеседования!
• Термин из прошлого десятилетия
Что такое «DevOps»?
Александр Чистяков, ClearTech Выбор языка программирования 6 / 75
• Отличный вопрос для собеседования!
• Термин из прошлого десятилетия
• Набор практик
Что такое «DevOps»?
Александр Чистяков, ClearTech Выбор языка программирования 7 / 75
• Отличный вопрос для собеседования!
• Термин из прошлого десятилетия
• Набор практик
• CAMS
CAMS
Александр Чистяков, ClearTech Выбор языка программирования 8 / 75
C - CultureРаз-раз и высший класс!
CAMS
Александр Чистяков, ClearTech Выбор языка программирования 9 / 75
A - AutomationHumans need not apply
CAMS
Александр Чистяков, ClearTech Выбор языка программирования 10 / 75
M - MeasurementЗапомните этот прибор!
CAMS
Александр Чистяков, ClearTech Выбор языка программирования 11 / 75
S - SharingInformation must be free!
CAMS(R)
Александр Чистяков, ClearTech Выбор языка программирования 12 / 75
R - Repeatability (плачет в углу)https://www.opennet.ru/opennews/art.shtml?num=46338
Repeatability
Александр Чистяков, ClearTech Выбор языка программирования 13 / 75
Docker(на самом деле - нет)
Repeatability
Александр Чистяков, ClearTech Выбор языка программирования 14 / 75
Nixpkgs(Nixpkgs + Docker)!
• Два варианта
• https://goo.gl/6uxL0M
• https://goo.gl/wkduPv
• Типичный случай аксиомы Эскобара
Немного истории
Александр Чистяков, ClearTech Выбор языка программирования 15 / 75
Что изображено на картинке?(Поговорим о реальном старье)
Немного истории
Александр Чистяков, ClearTech Выбор языка программирования 16 / 75
Носитель информации 30 лет назад(Емкость примерно 200 килобайт)
ALGOL-60 и далее
Александр Чистяков, ClearTech Выбор языка программирования 17 / 75
Структурное ипроцедурноепрограммирование
Корень всех зол (нет, не goto)
Александр Чистяков, ClearTech Выбор языка программирования 18 / 75
Как C-программистпод DSP пишет на C#?В C# нет goto, но это не беда!
Зачем нужно OOP?
Александр Чистяков, ClearTech Выбор языка программирования 19 / 75
• Инкапсуляция, наследование,полиморфизм!
• Пенсия Гради Буча
Зачем на самом деле OOP?
Александр Чистяков, ClearTech Выбор языка программирования 20 / 75
• Инкапсуляция, наследование,полиморфизм!
• Пенсия Гради Буча
• Кошелек Миллера (спасибо ГригориюПетрову)
• Закон Деметры
• SOLID
SOLID
Александр Чистяков, ClearTech Выбор языка программирования 21 / 75
• Single responsibility principle
SOLID
Александр Чистяков, ClearTech Выбор языка программирования 22 / 75
• Single responsibility principle
• Open/closed principle
SOLID
Александр Чистяков, ClearTech Выбор языка программирования 23 / 75
• Single responsibility principle
• Open/closed principle
• Liskov substitution principle
SOLID
Александр Чистяков, ClearTech Выбор языка программирования 24 / 75
• Single responsibility principle
• Open/closed principle
• Liskov substitution principle
• Interface segregation principle
SOLID
Александр Чистяков, ClearTech Выбор языка программирования 25 / 75
• Single responsibility principle
• Open/closed principle
• Liskov substitution principle
• Interface segregation principle
• Dependency inversion principle
Что-то пошло не так
Александр Чистяков, ClearTech Выбор языка программирования 26 / 75
Objects have failed* (OOPSLA 2002)* на самом деле нет
2002+15
Александр Чистяков, ClearTech Выбор языка программирования 27 / 75
Python - lingua franca индустрииВ Python есть всё
В Python есть всё
Александр Чистяков, ClearTech Выбор языка программирования 28 / 75
Зачем тогда что-то еще?
Отнять и поделить
Александр Чистяков, ClearTech Выбор языка программирования 29 / 75
Почему не декриминализуют легкиенаркотики?
Хороший Язык Будущего
Александр Чистяков, ClearTech Выбор языка программирования 30 / 75
• Строгая типизация (PHP и JS - плохие)
Хороший Язык Будущего
Александр Чистяков, ClearTech Выбор языка программирования 31 / 75
• Строгая типизация (PHP и JS - плохие)
• (Опциональная) статическаятипизация
Опциональная типизация
Александр Чистяков, ClearTech Выбор языка программирования 32 / 75
• PHP: type declarations, 5.0 => 7.0
• Python: type hints, PEP-484
• Python: mypy
Статические анализаторы
Александр Чистяков, ClearTech Выбор языка программирования 33 / 75
• mypy - статический анализатор кода
Статические анализаторы
Александр Чистяков, ClearTech Выбор языка программирования 34 / 75
• mypy - статический анализатор кода
• статический анализатор работает дозапуска программы
Статические анализаторы
Александр Чистяков, ClearTech Выбор языка программирования 35 / 75
• mypy - статический анализатор кода
• статический анализатор работает дозапуска программы
• статический анализатор обобщаетидею статической типизации
Анализаторы разных языков
Александр Чистяков, ClearTech Выбор языка программирования 36 / 75
• Ruby: RuboCop
• Perl: Perl::Critic
• Python: Coala, Pylama, mypy
• PHP: PHPLint, PHP Mess Detector
Static Analysis Symposium
Александр Чистяков, ClearTech Выбор языка программирования 37 / 75
• Научная конференция
• Проходила уже 23 раза
• 23 сборника статей примерно по 400страниц
Хороший Язык Будущего
Александр Чистяков, ClearTech Выбор языка программирования 38 / 75
• Строгая типизация (PHP и JS - плохие)
• (Опциональная) статическаятипизация
• Package/vendoring manager
Package managers
Александр Чистяков, ClearTech Выбор языка программирования 39 / 75
• PHP: Composer
• Python: pip
• Perl: cpanminus
• Ruby: bundler
Хороший Язык Будущего
Александр Чистяков, ClearTech Выбор языка программирования 40 / 75
• Строгая типизация (PHP и JS - плохие)
• (Опциональная) статическаятипизация
• Package/vendoring manager
Хороший Язык Будущего
Александр Чистяков, ClearTech Выбор языка программирования 41 / 75
• Строгая типизация (PHP и JS - плохие)
• (Опциональная) статическаятипизация
• Package/vendoring manager
• Метапрограммирование
Хороший Язык Будущего
Александр Чистяков, ClearTech Выбор языка программирования 42 / 75
• Строгая типизация (PHP и JS - плохие)
• (Опциональная) статическаятипизация
• Package/vendoring manager
• Метапрограммирование
• Иммутабельность
Иммутабельность
Александр Чистяков, ClearTech Выбор языка программирования 43 / 75
Доклад Боба Ипполито в 2014-мверен и в 2017-м
Хороший Язык Будущего
Александр Чистяков, ClearTech Выбор языка программирования 44 / 75
• Строгая типизация (PHP и JS - плохие)
• (Опциональная) статическаятипизация
• Package/vendoring manager
• Метапрограммирование
• Иммутабельность
• Null-safety
Метапрограммирование
Александр Чистяков, ClearTech Выбор языка программирования 45 / 75
• Было в C - #ifdef
Метапрограммирование
Александр Чистяков, ClearTech Выбор языка программирования 46 / 75
• Было в C - #ifdef
• Было в Java - аннотации
Метапрограммирование
Александр Чистяков, ClearTech Выбор языка программирования 47 / 75
• Было в C - #ifdef
• Было в Java - аннотации
• Было в LISP - макросы
Сферический в вакууме
Александр Чистяков, ClearTech Выбор языка программирования 48 / 75
• Языку нужна среда исполнения
Сферический в вакууме
Александр Чистяков, ClearTech Выбор языка программирования 49 / 75
• Языку нужна среда исполнения
• JVM
Сферический в вакууме
Александр Чистяков, ClearTech Выбор языка программирования 50 / 75
• Языку нужна среда исполнения
• JVM
• V8
Сферический в вакууме
Александр Чистяков, ClearTech Выбор языка программирования 51 / 75
• Языку нужна среда исполнения
• JVM
• V8
• BEAM
Сферический в вакууме
Александр Чистяков, ClearTech Выбор языка программирования 52 / 75
• Языку нужна среда исполнения
• JVM
• V8
• BEAM
• Golang runtime (not a VM, but...)
A quest for my next PL
Александр Чистяков, ClearTech Выбор языка программирования 53 / 75
https://goo.gl/MS1UfB
Буду гиперполиглотом
Александр Чистяков, ClearTech Выбор языка программирования 54 / 75
http://hyperpolyglot.org
Почему не Golang?
Александр Чистяков, ClearTech Выбор языка программирования 55 / 75
• Очень простой: 25 ключевых слов
Почему не Golang?
Александр Чистяков, ClearTech Выбор языка программирования 56 / 75
• Очень простой: 25 ключевых слов
• Нет метапрограммирования
Почему не Golang?
Александр Чистяков, ClearTech Выбор языка программирования 57 / 75
• Очень простой: 25 ключевых слов
• Нет метапрограммирования
• Нет иммутабельности
Почему не Golang?
Александр Чистяков, ClearTech Выбор языка программирования 58 / 75
• Очень простой: 25 ключевых слов
• Нет метапрограммирования
• Нет иммутабельности
• Нет null-safety
Почему не Golang?
Александр Чистяков, ClearTech Выбор языка программирования 59 / 75
• Очень простой: 25 ключевых слов
• Нет метапрограммирования
• Нет иммутабельности
• Нет null-safety
• Из Golang легко сделать Python
Почему не Golang?
Александр Чистяков, ClearTech Выбор языка программирования 60 / 75
• Очень простой: 25 ключевых слов
• Нет метапрограммирования
• Нет иммутабельности
• Нет null-safety
• Из Golang легко сделать Python
• С вендорингом какая-то боль
Что реально успел?
Александр Чистяков, ClearTech Выбор языка программирования 61 / 75
• Clojure: dynamic, strong
• Elixir: dynamic, strong
• Nim: static, strong, null-unsafe
• Rust: static, strong, null-safe
Как ощущения?
Александр Чистяков, ClearTech Выбор языка программирования 62 / 75
Use libraries, not frameworks!
• Clojure: dynamic, strong
• Elixir: dynamic, strong
• Nim: static, strong, null-unsafe
• Rust: static, strong, null-safe
Use libraries, not frameworks!
Александр Чистяков, ClearTech Выбор языка программирования 63 / 75
• Везде генерируется scaffolding
• Везде есть порт Sinatra
• Везде есть ORM tool
Use libraries, not frameworks!
Александр Чистяков, ClearTech Выбор языка программирования 64 / 75
Есть опасность написать свой фреймворк
Чего еще нет в Python?
Александр Чистяков, ClearTech Выбор языка программирования 65 / 75
Скорости!
Что насчет скорости?
Александр Чистяков, ClearTech Выбор языка программирования 66 / 75
Динамические языки
• JIT compilers
Что насчет скорости?
Александр Чистяков, ClearTech Выбор языка программирования 67 / 75
Динамические языки
• JIT compilers
• GraalVM
Что насчет скорости?
Александр Чистяков, ClearTech Выбор языка программирования 68 / 75
Динамические языки
• JIT compilers
• GraalVM
• Truffle framework
Что насчет скорости?
Александр Чистяков, ClearTech Выбор языка программирования 69 / 75
Статически типизированные языки
• Zero-cost abstractions
Haskell
Александр Чистяков, ClearTech Выбор языка программирования 70 / 75
Как открыть ВАЗ 2101 без ключа?(Гораздо легче, чем пройти курс по Haskell*)
Героическое фэнтези
Александр Чистяков, ClearTech Выбор языка программирования 71 / 75
Типичный состав команды
• Лоховатый главный герой (спотенциалом)
• Дева в беде (муза героя)
• Болтливый друг героя (безпотенциала)
• Воительница
Мужские роли играю я
Александр Чистяков, ClearTech Выбор языка программирования 72 / 75
Выводы
Александр Чистяков, ClearTech Выбор языка программирования 73 / 75
• DevOps - из прошлого десятилетия
• LISP - из 1958-го года
• Я не знаю, что будет дальше
• Я не знаю, какой язык лучший
• Поэтому писать надо на всем
• «Hо не пиши на Коболе, если можешьэтого избежать»
Вопросы, пожалуйста?
Александр Чистяков, ClearTech Выбор языка программирования 74 / 75
• ...?
• ...?
• ...?
That’s all, folks!
Александр Чистяков, ClearTech Выбор языка программирования 75 / 75
• https://telegram.me/lhommequipleure