Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

Рынок разработки ПО, языки программирования.

Рынок разработки ПО, языки программирования.

Обзорно для гумманитариев

Avatar for Yuri Khrustalev

Yuri Khrustalev

October 21, 2017
Tweet

More Decks by Yuri Khrustalev

Other Decks in Programming

Transcript

  1. Структура доклада • Люди • Технологии, и как их выбирают,

    почему так много языков • Компании, биржи, и другие места работы • Перспективы • С чего начать новичку • Прерывайте меня в любое время • Содержит спорные и неподтвержденные высказывания • Транслирует мой, ограниченный монитором, взгляд на вещи
  2. Представлюсь • Полиглот • Практикую ситуативную и авральную разработку •

    Борюсь с техническим долгом • Много лет работаю удаленно и всем вокруг это рекомендую
  3. Рынок ИТ • Очень много работы • Широкий выбор способов

    самовыражения • Это просто интересное хобби • Конструктор виртуальной реальности • Все еще нет профсоюзов ◦ пролетариат нового времени • Возможно, единственная отрасль в будущем
  4. Кто разрабатывает ПО • Правительства и гос. структуры • ИТ

    гиганты • Большие бизнесы • Аутсорсинговые компании • Продуктовые компании • Научные учреждения • Отдельные люди • Искусственный интеллект
  5. Коллектив • Мужской, много миллениалов. • Завышенные ожидания по зарплатам.

    • Проблемы коммуникации людей даже одного пола. • Повсеместная прокрастинация и нежелание работать. • Потеря большого количества времени на изучение технологий, с которыми вряд ли будут работать даже в среднесрочной перспективе. • Культ успешности и достижений в виртуальном пространстве. Андрей Аксенов - Прекращаем писать код https://youtu.be/AiH4nOEnCIE
  6. Возраст • ~ 27 лет • Старикам тут не место

    • Сеньерами становятся в 23 года https://insights.stackoverflow.com/survey/2017
  7. Роли и направления деятельности • Менеджеры • Проектировщики • Разработчики

    • Дизайнеры • Тестировщики • Аналитики • Администраторы • Эксплуатация • Мобильная разработка • Встраиваемая разработка • Отказоустойчивость и масштабируемость • Защита данных • Мониторинг • Обработка данных
  8. Ареал обитания • https://github.com/ • https://stackoverflow.com • Чаты https://telegram.org/ (месенджер)

    • Сообщества https://slack.com/ • Facebook • Тематические форумы и прочии локальные ресурсы • LinkedIn - одноклассники мира ИТ (негативная окраска)
  9. ПО в общем смысле • Мобильные устройства • Браузерные приложения

    • Веб приложения • Прикладная разработка • Игры • Аудио/видео - стриминговые сервисы • Автоматизация процессов • Хранилища данных • Виртуализация и распределенные вычисления • Операционные системы • Искусственный интеллект • Распознавание образов • Обработка больших массивов данных
  10. • Википедия насчитывает ~700 ◦ https://en.wikipedia.org/wiki/List_of_programming_languages • ~50 очень распространенных

    • Большей частью англоязычные • Обычному программисту достаточно знать 5-10 языков • Многие языки похожи и являются родственными • Язык выражается через текст, самый обычный текст • Записать похожа на математические формулы Языки программирования (ЯП)
  11. Выбор ЯП • Область применения • Количество денег в проекте

    • Правила компании ◦ одобренные технологии • Платформа • Видение СТО/СЕО и других офицеров • Регион присутствия • Кодовая база • Исторические причины ◦ необоснованный выбор Евгения Рыжков об agile https://youtu.be/FMvRab1wMS8
  12. Способы разделения ЯП • Сборка исполняемого файла • Парадигма •

    Система типов • Платформа • Управление памятью • Стандартная библиотека • Мета программирование • Вендор • Синтаксис • Производительность • Понятность • И многие другие факторы
  13. • Запускаем интерпретатор с указанием где лежит исходный текст >

    python /path/to/program.py C, C++, Java, Go • Собираем машинный код 100101001011... из исходных текстов • Запускаем полученный бинарный файл > /path/to/program Python, ruby, php, javascript Компилируемые vs интерпретируемые
  14. Динамические языки (скриптовые) • Веб разработка • Системная разработка •

    Высокая скорость разработки • Низкий порог входа • Простота использования • Доступны из коробки на *nix системах • Бекэнды для вебсайтов • Научные исследования • Инфраструктурные задачи ◦ Управление облаками • Автоматизированные системы тестирования • DSL языки
  15. php • ~90% интернет сайтов • Очень низкий порог вхождения

    • Считается примером плохого дизайна • Изначально препроцессор html страниц • Википедия • Госуслуги • Facebook • VK
  16. python • Системный язык • Выразительный язык • Google, Dropbox,

    Amazon • Youtube • Machine learning • Map reduce • 2 версии • Добрая часть системных утилит написана на нем • Использует пробелы для форматирования
  17. ruby • Самый медленный AST из всех • Веб ориентированный

    • Системно ориентированный • Одну вещь можно написать N способами • Поддерживает все парадигмы программирования • из Японии
  18. DSL • Настройка и конфигурирование ресурсов ◦ Ansible, Chef, Puppet

    ◦ HCL ◦ Homebrew • Тестирование ◦ Gherkin • Написаны на python, ruby
  19. Парадигма ЯП Процедурная C, Python, Shell Объектно - ориентированная Java,

    C#, Ruby, Python, PHP Функциональная Lisp, Scala, Haskell, Liscript
  20. Платформа • Браузер • Мобильные ОС • Кросс-платформенные платформы сами

    стали платформами • Облака https://imgs.xkcd.com/comics/standards.png
  21. Браузер • Internet Explorer ◦ Edge • Chrome (новый IE)

    ◦ Opera ◦ Yandex ◦ Amigo • Firefox • Safari ◦ KDE • ECMA script ◦ ECMA5 - видео ◦ ECMA6 - DRM? • HTML - язык разметки ◦ html5 • CSS - язык стилей
  22. Браузер • ~ 400 языков http://bit.ly/2xTWIn3 • Google: Angular •

    Facebook: React • Microsoft: TypeScript • Квазинезависимые: ◦ Vue ◦ clojurejs ◦ coffescript ◦ elm • Ограниченная производительность • Мало функциональных возможностей • Бесконечная самореализация разработчика • Обслуживание действий клиента
  23. nodejs • Chrome запущенный на сервере • Код на javascript

    для обработки запросов • Встраиваемый язык в базы данных • Хороший пример технологии, которая не на своем месте • Море ненужных пакетов
  24. IOS • Apple • Objective C • C++ • Swift

    • Всегда актуальные версии ОС Безальтернативное решение
  25. Android • Google dalvik vm (Sun jvm) • Java •

    Kotlin • C++ (native SDK) • Фрагментация версий операционной системы • Миллиарды китайских нонейм устройств • Сложность доступа к Vendor SDK
  26. JVM • Sun -> Oracle • Java (классика) • Scala

    (немецкий вариант) • Kotlin (русский вариант) • Groovy (заброшенный вариант) • Clojure (функциональный) • Ceylon (от RedHat) • JRyby • Jython • Высокая производительность ◦ Быстрее всех нагружает процессор и потребляет всю память • Кросплатформенность которую мы заслужили ◦ Linux, Windows, OSX • Синоним энтерпрайза ◦ Выбор банков на санации
  27. java vs scala • ООП • Производительность • Легко найти

    персонал • Наибольшее количество библиотек • Лаконичнее, чем java • Может использовать все библиотеки java • Долгое время компиляции “Waiting for the build” ( also known as “Scala programmer waits for project to build”) Juan Manuel Blanes, 1875 / 78
  28. • JetBrains, сделано в РФ ◦ в команде есть человек

    из Воронежа • Официальный язык разработки под Android • Поддержка системного программирования • Лаконичность форм • Менее опасный, чем java • Лучший редактор JetBrains IDE • Самый быстрорастущий язык по популярности в 2016 kotlin
  29. .net • Microsoft • .NET Framework • Windows • Нет

    поддержки linux ◦ Mono не считается • Поддержка основными облачными провайдерами • Все стоит денег • C# (Java от MS) • F# • VBasic/ASP
  30. C vs C++ • Надстройка над assembler • Язык ОС

    (linux, bsd) • 45лет, недавно получил новую спецификацию • Все еще нет обычных структур данных • Ручное управление памятью • Встраиваемые системы • Надстройка над С • Выбор ИТ гигантов для написания всего • Прародитель java, на нем написан компилятор java • Имеет структуры данных
  31. go • Очень простой язык от Google • Поддержка асинхронности

    • Продвинутые средства разработки • Поощряет дублирование кода • Очень любят в Китае “Go programmer claims he doesn’t need generics” Painting, Oil on Canvas Arles: January, 1889
  32. Другие языки • Shell - язык оболочки командной строки •

    Lisp - язык со скобками • Erlang - асинхронность • Haskell - функциональный • Clojure - работа с данными • Elixir - Erlang + Ruby • Nim - Haskell + Python • Elm - Haskell + Javascript • TypeScript - Javascript, только лучше • Lua - язык связки объектов C • R - математика • SQL - язык запросов реляционных баз данных • Liscript - функциональный язык из Воронежа Андрей Иванов - Liscript https://youtu.be/H1J5xVFDns0
  33. Синтаксис • Лаконичность форм • Выразительность кода • Удобство чтения

    • Пунктуация • Простые к пониманию языки ◦ Python, Go, Erlang, Javascript, Elixir, Clojure • Среднии ◦ Java, Ruby, C, Rust • Сложные ◦ C++, Scala, PHP, VBasic
  34. Управление памятью Ручное (С, С++) • Утечки памяти • Высокий

    уровень сложности кода Без сборщика мусора (Rust) • Сложность компиляции • Высокий уровень входа Сборщик мусора (Java, Go, Python) • Компилятор сам решает когда чистить память • Нет возможности делать системы реального времени • Паузы в работе программы
  35. Асинхронность • Наличие такой возможности ◦ GIL • Утилизация CPU

    • Доступ к памяти • Безопасность и надежность • Проблема 10k соединений на один веб сервер • Процессы, потоки, зеленые потоки • Не умеют: скриптовые ◦ python, php, ruby, perl • Умеют: ◦ c++, c, java • Умеют лучше: ◦ erlang, scala, clojure, haskell, go
  36. Производительность • Очень быстрые: C, C++ • Быстрые: Rust, Java,

    Go, Scala • Среднии: PHP, Python, Javascript (nodejs) • Медленные: Ruby • Средней производительности чаще всего достаточно • Эффективное использование нивелирует скорость • Динамические языки и AST • Стоимость хостинга • Квалификация сотрудников
  37. Вендор • Насколько хорошо поддерживается язык • Как быстро исправляются

    ошибки в стандартной библиотеке, компиляторе, интерпретаторе • Документация • Наличие обратной связи • Уровень открытости • Кто принимает решение о дальнейшей судьбе и развитии • Частота выхода обновлений • Развитие нового функционала • Обратная совместимость
  38. Совместимость • Java - образец обратной совместимости • PHP4, PHP7

    - разные языки • Go - утилиты для обновления кода • С++ стандарты • Реализации интерпретаторов • Python 2 vs 3 • Ruby 1.8 vs 2 • Javascript ECMA 5 vs 6
  39. Управление зависимостями • Ruby - gems • Python - pip

    • Javascript - npm • Java - maven • PHP - composer • Haskell - cabal • C/C++ - ничего дельного • Лицензии использования • Количество vs качество • Надежность источников
  40. Частота обновлений • Обновления стандартных библиотек • Обновления спецификаций •

    Исправление багов • Ежедневные обновления: chrome v8 • Ежемесячное исправление багов: Java, Python • Обновления раз в полугодие: Go, Ruby • Ежегодные обновления: браузеры Safari, Edge • Смена стандартов С/С++ раз в декаду
  41. Открытость сообщества • Публичный репозиторий ◦ gihub.com • Принимают исправления

    • Естественный язык основных разработчиков • Наличие плана развития • Открытость стандартов • Возможность влиять на принятие решений ◦ хотя бы за деньги
  42. Популярность • Python, Java, C -> Go • Java <->

    C++ • PHP -> Java • Java -> PHP, Python • Objective-C -> Swift https://erikbern.com/2017/03/15/the-eigenvector-of-why-we-moved-from-language-x-to-language-y.html
  43. ИТ гиганты • Производят технологии • Platform as a Service

    • Создают операционные системы • Поддерживают облачные среды • C/С++, Java, C# • Python, Go • Javascript • Perl, SQL • Nodejs
  44. Продуктовые компании • Software as a Service • Упор на

    мобильные платформы • Выбирают технологию под себя • Делают упор на техническую реализацию ◦ Java, Python, Go, C++, C# ◦ Clojure, Scala, Erlang, Haskell ◦ Swift, Objective-C ◦ Javascript
  45. Малые и средние предприятия • Биржи фрилансеров • Широкий спектр

    технологий • Смещение в сторону динамических языков • Упор на мобильную разработку • Веб разработка • Максимальное использование платформ • PHP, Python, Ruby, Javascript • Swift, Java, Kotlin • Java, C#
  46. Перспективы • Рынок будет только расти • Работы будет все

    больше • Больше узких специальностей • Снижение порога вхождения ◦ Нас заменят роботами ◦ Упрощения языков • Упрощение экосистем • Рефакторинг • Новые языки ◦ от создателей языков • Развитие инфраструктуры как кода • Мета-системы для мета-систем
  47. Перспективы • Открытые (еще не закрытые) протоколы обмена данными ◦

    OAuth2 GQL ◦ Социальные профили • Открытые стандарты ◦ Браузер как толстый клиент • Интернет вещей • DRM и прочий копирайт • Шифрование • Сегментация интернета ◦ China firewall ◦ Цинзура • Тотальная слежка • Переход Windows на Linux ядро ◦ запомните этот твит
  48. С чего начать свой путь в ИТ Требования • Английский,

    в индии он государственный • Не поздно начать в 15 лет • Python/Go/Javascript не сложнее программы по-русскому языку за 5 класс Действия • Практикантские программы • Вакансий больше, чем вы можете себе представить • Вокруг все еще одни самоучки • Заметное число людей 30+, приходящих в ИТ
  49. Спасибо Разработка — это счастье! Что значит запускать негде? Дал

    бог код на руби, даст и облако для деплоя. * Играет New Dawn Fades - Joy Devision Веб разработкой нужно заниматься пока молодой, потом поздно будет. Что значит не хочешь в опенсорс контрибьютить? В опенсорс контрибьютить все хотят, не придумывай! А ты почему гитхаб профиль не заводишь? Часики-то тикают.