От переводчика: сегодня публикуем для вас статью разработчика Акшата Гири, который делится своими соображениями, почему стоит изучать все новые и новые языки программирования.
Я работаю программистом четыре года. Начал с С#, разрабатывая игры, затем перешел на 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 рекомендует:
- Практический курс «Мобильный разработчик PRO»
- Онлайн-курс «Профессия веб-разработчик»
- Онлайн-курс «Профессия Frontend-разработчик».
Комментарии (33)
Matisumi
08.01.2019 14:58+10Программист, который работает программистом всего 4 года, уже дает советы как лучше и правильно? Который пишет общение с bluetooth-железкой на JavaScript + Node.js? Ну, мне тут больше нечего сказать…
Sirion
08.01.2019 16:39+1Именно такие больше всего и любят давать советы. Те, кто опытнее, уже менее уверены в том, как лучше и правильно.
geher
08.01.2019 15:08Учить необязательно. Изучение языка программирования — это длительный процесс, отнимающий много времени.
Знакомиться с языком? Почему бы и не ознакомиться. В случае чего это облегчит выбор и переход на другой язык при необходимости и немного сократит время на его изучение.
Suvitruf
08.01.2019 15:19+2Мне подумалось, что на C# я бы тоже смог решить эту задачу. Но очень не хотелось устанавливать Visual Studio и IDE.
Поэтому установил node.js и Go. А ещё странно от C# разработчика слышать, что у него не установлена VS.masai
08.01.2019 16:37К тому же разную мелочь можно и без студии писать, консольный компилятор вместе с .NET идёт.
Nagg
08.01.2019 19:18dotnet new console vi Program.cs (а лучше вскод) dotnet run
Ох уж эти стереотипы про IDE, vs, винду в дотнете
Suvitruf
08.01.2019 20:01Стереотип? Я пока для C# проектов ничего лучше VS не встречал.
Nagg
08.01.2019 20:03Стереотип в смысле что VS (как и винда в целом) обязательна чтобы писать на шарпе скрипты (нет).
timiskhakov
08.01.2019 23:38Смотрели на Rider?
Naglec
10.01.2019 02:12и чем же он лучше?
timiskhakov
10.01.2019 17:37Не утверждаю, что лучше. Пользуюсь им на OS X и в общем-то доволен, но на этой платформе выбирать особо не приходится.
maxzh83
08.01.2019 17:39+2Еще одна причина, которая, как мне кажется, может побудить изучать другие языки, — WASM. Web Assembly даст возможность запускать язык, который вам нужен, в браузере.
Ровно наоборот, WASM потенциально дает возможность знать хорошо свой любимый язык и запускать проекты на нем в браузере, не изучая JavaScript.
А вообще, очевидно зачем нужно изучать больше языков — просто кто-то зарабатывает на курсах по обучению этим самым языкам.
Sinatr
08.01.2019 18:02+1сегодня публикуем для вас статью разработчика Акшата Гири
А кто это? Или все равно, главное что-то по теме опубликовать, чтобы просто разместить рекламу внизу?
Чем Гири (или Акшат, не уверен, где имя) знаменит? Зарегался месяц назад, написал статью… программирует от силы четыри года… ни эксперт… ничего не добился… и нате вам, читайте материал «как надо».
anfield343
08.01.2019 18:32+14 года опыта, [Реклама] ну поработал в фейсбуке (ну типа круто для него), «выучил» 100500 языков, говорит мало, буду исчо изучать. [Реклама]. Конец статьи. И зачем такое?
Xalium
08.01.2019 19:04+2Почему вам нужно учить больше языков программирования
как можно больше языков можно максимум изучить поверхностно, но никак не изучить. Время не резиновое.
Zet_Roy
08.01.2019 21:44После того как я по выжигаю глаза кодом на работе мне больше ничего не хочется.
Hazactam
09.01.2019 00:49Кому-то 'повезет' нанять себе такого человека, как автора статьи :) Node.js вместо встроенного vbs/bat?
roscomtheend
09.01.2019 10:25А разве нельзя ткнуть на иконку и подключить? У него же тоже просто ссылка.
index0h
09.01.2019 10:32+1Нашел автора статьи на linkedin, надеюсь не ошибся. Он работает 16 месяцев программистом, из них 7 в FB.
В принципе все становится на свои места [sarcasm]:
- опытный инженер
- подбор инструментов под задачу
- отсутствие маркетингового булшита
- статья действительно полезна
[/sarcasm]
potan
09.01.2019 19:14+2Учить разные языки, конечно, очень полезно. Но лучше (полезнее и интереснее) выбирать языки, которые существенно друг от друга отличаются. Если выучить Idris, Prolog, Lisp, Forth, Rholang, Erlang, упомянутые в статье покажутся незначительно отличающимися вариациями одного языка.
vassabi
10.01.2019 02:35подтверждаю. Из вашего списка не писал на идрисе и роланге, но зато из функциональных есть в копилке опыт с хаскелем.
После пролога, лиспа (схемы\кложы\рэкета и проч), и эрланга с хаскелем — вопрос: «писать ли на Java или С#», это больше вопрос библиотек и окружения, чем вопрос языка. Сейчас вот перешел на питон, когда пишу небольшие переносимые утилитки (т.е. вместо шелл скриптов или батников), а раньше любил это делать на перле (сейчас только однострочники на нем — обычно возможностей грепа мне не хватает).
А уж если приходить в уже стартованный кем-то проект (на любом императивном языке), и начинать дописывать функциональности\покрывать тестами\расширять интерфейсы — то там неделя на раскачку и чтение исходников, после чего можно писать код в продакшен.
Схема мышления-то — одна и та же.
Modis
09.01.2019 23:22Я пишу на C# давно. Несколько лет ради удовольствия (вообще ничего не изучая, а тупо по примерам с форумов) и последние 1,5 года уже официально работая программистом. И я до сих пор понимаю, что нихрена толком не знаю. При этом я работаю в узкой специализации прикладного программирования под САПР. Так вот вопрос — ну и зачем мне тратить время, которого нет, на поверхностное изучение других языков? Чтобы в голове была ещё большая каша?)
kuftachev
11.01.2019 02:38Тут все просто учить много языков нужно для того, чтобы курсы не закрылись.
А вообще, конечно, если человек пишет, например, на Delphi и понимает, что если лешится работы, то на расстоянии 500 км шансов на работу нет, то конечно пора учит что-то новое.
Во всех остальных случаях лучше изучать как работает компьютер, начиная от железа, заканчивая рантаймом среды под которой пишите, изучать предметную область для которой пишите.
Но на курсах такому не научат, там расскажут основы языка, которые можно освоить за неделю, поэтому нужно учить много языков, и обязательно на курсах.
APXEOLOG
Интересно, неужели обычного bat-ника не хватило
Koneru
Нет, нужно же больше ключевых слов, обычный батник это не интересно, а вот Golang звучит хайпово.
P.s. Мне нравится Go, но в данном случае это избыточно.
Eagle_NN
На Go есть библиотеки позволяющие работать с BT.
При выполнении программы чисто на Go не будет никаких окон терминала и диких, на мой взгляд, задержек которые есть в вашей реализации. Node.js тут явно лишний.
Вообще, если уж говорить про скоп технологий, то данный выбор показывает скорее уровень студента, нежели зрелого программиста.
P.S. И я за то чтобы изучать много разных языков программирования, по крайней мере на уровне понимания их возможностей.
Koneru
Раз на то пошло, есть возможность создать исполняемый файл из файла скрипта.
Не могу сказать точно, но при запуске собранного Go приложения как раз таки открывается окно терминала и я не уверен что можно скрывать его.P.s
Eagle_NN
Да, в Go есть возможность запускать не в режиме терминала, а в режиме GUI. И не отрисовывать окно.
Node.js в любом случае тормозит, т.к. для исполнения надо интерпретатор запускать. Исполнение может быть и не дольше, а запуск в любом случае дольше будет.