Какие языки программирования выбрать для решения следующих задач?
Добрый день.
Я JavaScript программист, но для расширения кругозора хочется выучить еще один язык программирования, который решает следующие задачи, и поможет решить следующее:
1. Кроссплатформенность: возможность написать приложение под Windows, Mac, Android, iOS, другое..
2. Возможность работать с железом (не знаю как это называется): программирование "роботов", работа с сенсорами, другое..
3. Возможность изучить новые архитектурные паттерны на практике
4. Увидеть максимально много новых для меня синтаксических конструкций
5. Возможность участия в мероприятиях (хакатоны, соревнования)
Возможно, описано не максимально точно, потому что мне довольно трудно описать что я хочу.
Основная мысль в голове, что именно я жду от языка: новый полезный опыт, и возможность написать что-то полезное для общества.
Потенциальные задачи:
1. Работа с потоками видео
2. Создания интерфейсов, которые будут "проброшены" в браузер (использование внешнего API из браузера)
3. Программирование мини-роботов (для интереса)
4. Создание десктопных (мини-программы для решение узких задач) и мобильных приложений (игры)
Пока ничего интересного кроме этого не нашел:
1. C#
2. C++
4. Go
5. Erlang
6. D
7. Python
8. Delphi
9. Java
Я плохо знаком с этими языками программирования (почти незнаком), но в мыслях стоит выбор между:
1. C#
2. Go
Пожалуйста, подскажите что выбрать (не ограничиваясь любым из этих списков). Очень надеюсь на квалифицированный совет от специалистов в любой из этих сред программирования.
C# никак не соответствует вашему требованию №1 Кроссплатформенность: возможность написать приложение под Windows, Mac, Android, iOS, другое..
Он ТОЛЬКО под Windows.
RomanYakimchuk: Ваши задачи охватывают слишком широкий круг, с которым ни один язык не справится. Например работа с железом и датчиками - это сугубо ассемблер конкретного железа и чипов. Но если вы уверены, что все ваше железо будет поставляться уже с готовыми драйверами и библиотеками для например питона, то можно и на питоне.
Работа с потоками видео - если вы под этим подразумеваете перехват, сжатие, кодирование видео - матан/Си++.
Но ни ассемблер ни С++ не являются хорошими кросс-платформенными языками, особенно при таких резких скачках как Виндовс и Андроид, хотя бы из-за реализации файловой системы и прав доступа.
Посмотрите brainfuck и java. Первый для хакатонов и незнакомых ранее конструкций, второй - охватит максимальное количество ваших трелбований
C++ примерно в той же степени кроссплатформенный язык, как и Java, на самом деле. Java работает там, где реализована VM. С++ - там, куда портированы библиотеки.
На практике в прикладном программировании С++ оказывается более кроссплатформенным. У меня, например, есть программа под Windows/Linux, 80% кода которой используются в ее Android/iOS версии. Остальное - интерфейс, который на десктопе и планшете в любом случае разный (в моем случае - сильно разный, поэтому и занимает аж 20% кода программы).
Я пытаюсь найти язык являющийся компромисным решением между временем необходимым на его изучение, и задачами, которые я могу решить с его помощью.
С++ это отличный вариант для решения всех из моих задач, но его изучение займет слишком много времени. Боюсь превратиться в бородатого человека без личной жизни :) Шутка, конечно :)
В общем, правильно боитесь. Уверенное знание С++ без нескольких лет серьезной в нем работы - практически невозможно. То есть знать вы его, конечно, можете и через пару месяцев чтения учебника, а вот уметь пользоваться - нет.
Все чаще встечается Python в связке с C++. Наиболее яркий(разпиаренный) пример World of Tanks.
Хотя в некоторых случаях можно обойтись только Python. По кросплатформености он наверно самый распространенный сейчас.