image

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

Я работаю программистом четыре года. Начал с С#, разрабатывая игры, затем перешел на Python и машинное обучение. Потом учил JavaScript и TypeScript для фронтенда. Следующим этапом стала разработка мобильных приложений, так что я занялся Ionic, React и React Native. Заинтересовался бэкендом, начал работать с Go. Чуть позже к списку моих языков и фреймворков добавились Dart, Java и PHP — все три потребовались во время моей работы в Facebook.

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

Skillbox рекомендует: Двухлетний практический курс «Я — веб-разработчик PRO».

Напоминаем: для всех читателей «Хабра» — скидка 10 000 рублей при записи на любой курс Skillbox по промокоду «Хабр».



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

Решение первой проблемы


Приведу простой пример. Несколько месяцев назад я выбирал Bluetooth-наушники. Остановился на AirPods. Я опробовал множество других, но эти показались мне максимально удобными. Проблема была в том, что я использовал их одновременно с Windows-ноутбуком и Android-телефоном. И если оба гаджета находились рядом, то наушники подключались к телефону, но не к ноутбуку. Поэтому приходилось отключать их вручную и подключать снова. Каждый день.

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

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

Следующий этап — Node.js. Я смог найти JavaScript-библиотеку, которая дала возможность контролировать функции Bluetooth на моем компьютере. Выполнив этот скрипт на Node.js, я добился того, что нужно.
// App.js
const device = new bluetooth.DeviceINQ();
 
const airpodsAddress = "18:81:0E:B2:6B:A6"
const airpodsName = "Akshat's Airpods";
 
device.findSerialPortChannel(airpodsAddress, function (channel) {
 
    // make bluetooth connect to remote device
    bluetooth.connect(airpodsAddress, channel, function (err, connection) {
        if (err) return console.error(err);
 
        console.log('YAY! Airpods Connected');
 
        // Don't need a communication stream between the two
        // so let's just exit the stream. 
        setTimeout(() => process.exit(0), 5000);
        
    });
});

ОК, но теперь мне понадобилась кнопка на экране, которая запускала бы выполнение скрипта. В итоге я решил разместить ее на панели задач Windows, чтобы та всегда была доступна. Я сделал еще один скрипт, который, как мне казалось, должен был помочь выполнить эту задачу. Но нет, пришлось обратиться к Golang. Он дал возможность создать исполняемый файл, который, в свою очередь, выполнял ранее созданный на Node.js скрипт.
/ main.go
package main
 
import (
"fmt"
"os/exec"
)
 
func main() {
output, err := exec.Command("npm", "start").CombinedOutput()
 
if err != nil {
fmt.Println(err.Error())
}
fmt.Println(string(output))

Все получилось. Я сделал ярлык для десктопа и переместил его на панель задач. Все OK, все работает.



Мне подумалось, что на C# я бы тоже смог решить эту задачу. Но очень не хотелось устанавливать Visual Studio и IDE.

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

Так зачем еще учить другие языки?


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

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

Еще одна причина, которая, как мне кажется, может побудить изучать другие языки, — WASM. Web Assembly даст возможность запускать язык, который вам нужен, в браузере.

Если вы — JavaScript- или Python-программист, стоит освоить низкоуровневые языки. Вы можете начать с С++ или С, но я бы советовал Golang. Он позволяет получить все скоростные возможности С++ без проблем, характерных для семейства С.

Если вы работаете с низкоуровневыми языками, то попробуйте JavaScript или Python. Оба весьма востребованы и распространены. Оба можно использовать в связке с низкоуровневыми языками. Можно писать модули С++ для Node.js и Python.

Поделитесь собственным опытом в комментариях: какие языки вы знаете, какие планируете изучить и почему?
Skillbox рекомендует:

Комментарии (33)


  1. APXEOLOG
    08.01.2019 14:30
    +4

    ОК, но теперь мне понадобилась кнопка на экране, которая запускала бы выполнение скрипта. В итоге я решил разместить ее на панели задач Windows, чтобы та всегда была доступна. Я сделал еще один скрипт, который, как мне казалось, должен был помочь выполнить эту задачу. Но нет, пришлось обратиться к Golang. Он дал возможность создать исполняемый файл, который, в свою очередь, выполнял ранее созданный на Node.js скрипт.

    Интересно, неужели обычного bat-ника не хватило


    1. Koneru
      08.01.2019 14:48
      +6

      Нет, нужно же больше ключевых слов, обычный батник это не интересно, а вот Golang звучит хайпово.

      P.s. Мне нравится Go, но в данном случае это избыточно.


      1. Eagle_NN
        09.01.2019 13:29

        На Go есть библиотеки позволяющие работать с BT.
        При выполнении программы чисто на Go не будет никаких окон терминала и диких, на мой взгляд, задержек которые есть в вашей реализации. Node.js тут явно лишний.
        Вообще, если уж говорить про скоп технологий, то данный выбор показывает скорее уровень студента, нежели зрелого программиста.

        P.S. И я за то чтобы изучать много разных языков программирования, по крайней мере на уровне понимания их возможностей.


        1. Koneru
          11.01.2019 00:13

          Раз на то пошло, есть возможность создать исполняемый файл из файла скрипта.

          P.s

          никаких окон терминала
          Не могу сказать точно, но при запуске собранного Go приложения как раз таки открывается окно терминала и я не уверен что можно скрывать его.


          1. Eagle_NN
            11.01.2019 03:27

            Да, в Go есть возможность запускать не в режиме терминала, а в режиме GUI. И не отрисовывать окно.
            Node.js в любом случае тормозит, т.к. для исполнения надо интерпретатор запускать. Исполнение может быть и не дольше, а запуск в любом случае дольше будет.


  1. Matisumi
    08.01.2019 14:58
    +10

    Программист, который работает программистом всего 4 года, уже дает советы как лучше и правильно? Который пишет общение с bluetooth-железкой на JavaScript + Node.js? Ну, мне тут больше нечего сказать…


    1. index0h
      08.01.2019 14:59

      Потому, что может (с)


    1. Sirion
      08.01.2019 16:39
      +1

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


    1. rinaty
      09.01.2019 13:47

      После прочтения возникли ровно те же мысли про 4 года


  1. geher
    08.01.2019 15:08

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


  1. Suvitruf
    08.01.2019 15:19
    +2

    Мне подумалось, что на C# я бы тоже смог решить эту задачу. Но очень не хотелось устанавливать Visual Studio и IDE.
    Поэтому установил node.js и Go. А ещё странно от C# разработчика слышать, что у него не установлена VS.


    1. masai
      08.01.2019 16:37

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


    1. Nagg
      08.01.2019 19:18

      dotnet new console
      vi Program.cs (а лучше вскод)
      dotnet run

      Ох уж эти стереотипы про IDE, vs, винду в дотнете


      1. Suvitruf
        08.01.2019 20:01

        Стереотип? Я пока для C# проектов ничего лучше VS не встречал.


        1. Nagg
          08.01.2019 20:03

          Стереотип в смысле что VS (как и винда в целом) обязательна чтобы писать на шарпе скрипты (нет).


        1. timiskhakov
          08.01.2019 23:38

          Смотрели на Rider?


          1. Naglec
            10.01.2019 02:12

            и чем же он лучше?


            1. timiskhakov
              10.01.2019 17:37

              Не утверждаю, что лучше. Пользуюсь им на OS X и в общем-то доволен, но на этой платформе выбирать особо не приходится.


  1. maxzh83
    08.01.2019 17:39
    +2

    Еще одна причина, которая, как мне кажется, может побудить изучать другие языки, — WASM. Web Assembly даст возможность запускать язык, который вам нужен, в браузере.

    Ровно наоборот, WASM потенциально дает возможность знать хорошо свой любимый язык и запускать проекты на нем в браузере, не изучая JavaScript.
    А вообще, очевидно зачем нужно изучать больше языков — просто кто-то зарабатывает на курсах по обучению этим самым языкам.


  1. Sinatr
    08.01.2019 18:02
    +1

    сегодня публикуем для вас статью разработчика Акшата Гири
    А кто это? Или все равно, главное что-то по теме опубликовать, чтобы просто разместить рекламу внизу?

    Чем Гири (или Акшат, не уверен, где имя) знаменит? Зарегался месяц назад, написал статью… программирует от силы четыри года… ни эксперт… ничего не добился… и нате вам, читайте материал «как надо».


  1. anfield343
    08.01.2019 18:32
    +1

    4 года опыта, [Реклама] ну поработал в фейсбуке (ну типа круто для него), «выучил» 100500 языков, говорит мало, буду исчо изучать. [Реклама]. Конец статьи. И зачем такое?


  1. Xalium
    08.01.2019 19:04
    +2

    Почему вам нужно учить больше языков программирования

    как можно больше языков можно максимум изучить поверхностно, но никак не изучить. Время не резиновое.


  1. Zet_Roy
    08.01.2019 21:44

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


  1. Hazactam
    09.01.2019 00:49

    Кому-то 'повезет' нанять себе такого человека, как автора статьи :) Node.js вместо встроенного vbs/bat?


    1. AlePil
      09.01.2019 01:35

      Фейсбуку вроде как уже повезло)


      1. Hazactam
        09.01.2019 15:59

        Ага. Погоня за модой в технологиях может закончится убытками.


      1. dimm_ddr
        11.01.2019 15:58

        Судя по фейсбуку им уже много-много раз повезло такого человека нанять.


    1. roscomtheend
      09.01.2019 10:25

      А разве нельзя ткнуть на иконку и подключить? У него же тоже просто ссылка.


  1. index0h
    09.01.2019 10:32
    +1

    Нашел автора статьи на linkedin, надеюсь не ошибся. Он работает 16 месяцев программистом, из них 7 в FB.


    В принципе все становится на свои места [sarcasm]:


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

    [/sarcasm]


  1. potan
    09.01.2019 19:14
    +2

    Учить разные языки, конечно, очень полезно. Но лучше (полезнее и интереснее) выбирать языки, которые существенно друг от друга отличаются. Если выучить Idris, Prolog, Lisp, Forth, Rholang, Erlang, упомянутые в статье покажутся незначительно отличающимися вариациями одного языка.


    1. vassabi
      10.01.2019 02:35

      подтверждаю. Из вашего списка не писал на идрисе и роланге, но зато из функциональных есть в копилке опыт с хаскелем.
      После пролога, лиспа (схемы\кложы\рэкета и проч), и эрланга с хаскелем — вопрос: «писать ли на Java или С#», это больше вопрос библиотек и окружения, чем вопрос языка. Сейчас вот перешел на питон, когда пишу небольшие переносимые утилитки (т.е. вместо шелл скриптов или батников), а раньше любил это делать на перле (сейчас только однострочники на нем — обычно возможностей грепа мне не хватает).
      А уж если приходить в уже стартованный кем-то проект (на любом императивном языке), и начинать дописывать функциональности\покрывать тестами\расширять интерфейсы — то там неделя на раскачку и чтение исходников, после чего можно писать код в продакшен.
      Схема мышления-то — одна и та же.


  1. Modis
    09.01.2019 23:22

    Я пишу на C# давно. Несколько лет ради удовольствия (вообще ничего не изучая, а тупо по примерам с форумов) и последние 1,5 года уже официально работая программистом. И я до сих пор понимаю, что нихрена толком не знаю. При этом я работаю в узкой специализации прикладного программирования под САПР. Так вот вопрос — ну и зачем мне тратить время, которого нет, на поверхностное изучение других языков? Чтобы в голове была ещё большая каша?)


  1. kuftachev
    11.01.2019 02:38

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


    А вообще, конечно, если человек пишет, например, на Delphi и понимает, что если лешится работы, то на расстоянии 500 км шансов на работу нет, то конечно пора учит что-то новое.


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


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