Помогите выбрать язык программирования

Пробовал много разных языков, из всей той кучи понравились C, C++, C# и Java. Больше всего C++ и C#, но пока остановился на плюсах. Постоянно мучает вопрос подходящий ли язык я выбрал.

Интересует разработка чего нибудь, связанная с обработкой данных, сетями, управлением, ИИ, железом контроллеры всякие(но врядли у нас такое востребовано). Игрушки не интересны, мобильные приложения тоже не интересны, web интересен если только серверная часть(дизайн не мой конек). На данный момент учусь в институте на программиста. Знания по английскому и математике очень слабые, исправляю и первое и второе, но вряд-ли получится стать крутым математиком, есть некоторые знания в области электроники. Выезжать врядли куда то буду, поэтому интересует что здесь будет востребовано. Какой язык, какие технологии, какая сфера? Какой язык вы бы посоветовали вторым, дополнительным?

Что почитать по тому языку и технологиям которые вы посоветуете?

И если можно аргументируйте свой совет.

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

я записал видео в котором разобрал, чем отличаются языки программирования.
youtu.be/TSy3eMisB8s

Пишите комментарии, как улучшить видео!

всем спасибо за советы, остановился на Си и урезанном варианте С++, взял старт на программировании микроконтроллеров

Старт будет очень долгим, мучительным, и без английского никуда.

Спустя полтора года?)

Может я ошибаюсь, но просмотрев разные рейтинги ЯП, вакансии, где можно пройти стажировку, интернатуру, то пришел к следующему выводу Java, С++. Java в рейтингах держит первое место на протяжении многих лет, на джуна вакансии есть, правда мало, есть интернатура.
С++ мне кажется был, есть и будет. Много вариантов интернатуры и стажировки, вакансий примерно как в Java.
C# нравится но это майкрософт, а у них 7 пятниц на неделю и что будет дальше с ним не знаю, Java наверное в этом плане стабильна.

Что скажете по этому поводу? Java норм выбор в моем случае?
Какой минимальный элементарный набор технологий должен знать начинающий Java разработчик(сети, серверная часть, предприятие) и С++ разработчик(десктоп, что то низкоуровневое)?

Как раз стабильнее С #, хотя и 7 пятниц на неделе. За этой платформой мега корпорация. За джавой кто? Oracle? Они не первый год по слухам грозятся перестать разрабатывать джаву. Им это не интересно. За Spring кто? Pivotal Software? За Hibernate- JBoss? За Maven- Sonatype?
А у майков все в пределах единой экосистемы, хотя и не без сложностей.

Хоть не фанат яви — но забули такі компанії як IBM , Google, RedHat...

Я писал -не о тех, кто используют джаву, а о тех кто разрабатывает ее куски и ее инфраструктуру.
Это разные компании.

IBM досить таки jdk розробляє, як і остальні компанії OpenJDK та супутні бібліотеки класів.
В старі часи їх jdk навіть було досить популярне як альтернатива сановському. Ще окремо розробляла BEA Systems но їх варіант поглинутий ораклом. Та й гугл в останніх версіях андроїда на стандартну jdk переходить...

Я вам не том, я не о том, что компании неизвестные, а о том, что они разные, не все в одних руках..jdk- это хорошо, а фреймворки? В Микрософте все в одних руках..Это и плюс, и минус, но в плане единой экосистемы- все таки плюс.

ну так те що в різних руках то й добре — кожен займається своїм... А то ось були в руках Мікрософта Visual FoxPro, Silverlight ...

У С/С++ очень обширная область, и нельзя сказать, что именно надо. Да и часто берут без соответствующего опыта, за мозги.

Что надо на 80% вакансий:
— multithreading
— design patterns
— optimizations
— algorithms (спрашивать будут везде, но на практике очень редко надо)

На 60%:
— networking
— linux
— STL
— C++11/14/17
— embedded (low RAM/ROM/CPU/no STL)

На 40%:
— gamedev
— QT
— Boost
— linux kernel (device drivers)
— hardware
— SQL
— backend
— assembler
— build systems (makefiles, cmake)

На 20%:
— DSP
— Video streaming/processing/codecs
— Machine learning
— Computer vision

Основные направления (каждое со своими скиллами):
* embedded — networking — linux
* backend — high-load — SQL
* computer vision — video processing
* desktop — windows
* embedded — automotive — multimedia — linux — QT
* gamedev — high load

Какой минимальный элементарный набор технологий должен знать начинающий Java разработчик(сети, серверная часть, предприятие) и С++ разработчик(десктоп, что то низкоуровневое)?

Java — это смотря на кого хочешь. если на мобильного разраба, то знать основные тонкости программирования под андроид (API, Android Studio, etc), если кровавый энтерпрайз — то там уже что-то свое (с андроидной джавой скорее всего никак не связанное).

С++ — если в геймдев, то наверное надо знать что-то из разряда Vulcan, OpenGL, DirectX, Unreal Engine, и т.п.? если десктоп — то какое-нибудь Qt (или GTK или др. GUI) или что-то вроде того.

C# нравится но это майкрософт, а у них 7 пятниц на неделю и что будет дальше с ним не знаю

а что там с ним будет? — .NET Core, Unity 3D, ASP.NET, Xamarin — вроде как никуда исчезать не собираются. а по-моему даже наоборот.

Java норм выбор в моем случае?

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

Я б начинала с Python.

А почему не Руби советуете?) Для веба рельсы лучше, имхо- больше функционала, больше гемов на все случаи жизни. Девопсы используют и тот и тот язык. Или в расчете, что с Питоном потом можно еще и уйти в ML или Data Science? Больше выбора путей)

Поэтому мне и интересно услышать мнение тимлида по руби он рейльс, почему она советует питон, как первый язык. Это похожие языки, но руби изящнее, имхо.
Из-за отступов что ли?)

Специфичные знания, это какие?

Язык не имеет значения, имеет значение — задача. Machine learning — python(tensorflow, numpy, ... , theano). BigData — Java, Scala, .... Performance sensitive (Image Processing, 3D, ....else) — C++. Платформозависимое .... платформо-независимое... если с математикой плохо, то тут нужно что-то высокоуровневое наверное. Мировая практика давно ушла от языка, используют то что более гибкое и мощное (как интсрумент) для поставленой задачи.

Тенденции такие: GUI на Электроне, для веба ПХП и джаваскрипт, а для серверсайда — Java.

PS. а контейнеры на Go.

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

javascript — 100% будет востребован, в т.ч. и здесь.

Ну или любой язык, компилируемый в джаваскрипт (TypeScript или Elm например).

какие технологии, какая сфера?

ну джаваскрипт счас везде суют — и в серверную часть (node.js), и в десктоп (electron, nw.js) и в мобайл (react native / native script, phonegap/cordova), и даже во всякий эмбедед (например, www.espruino.com ) и интернет вещей (например, iotjs.net).

Что почитать по тому языку и технологиям которые вы посоветуете?

Marijn Haverbeke «Выразительный JavaScript» (Eloquent java script).

Ну а если

web интересен если только серверная часть(дизайн не мой конек).

в том смысле, что не хочется касаться джаваскрипта, то

Либо Python, на котором можно писать почти под все что угодно, за исключением браузера (хотя и там есть трансляторы из питона в джаваскрипт) и мобайла (хотя и там есть пара фреймворков типа kivy, на которых вполне можно под мобилки что-то ваять на питоне),
либо (внезапно) какую-нить функциональщину (OCaml, common lisp/clojure, Erlang/Elixir, Haskell, F# и все такое), ибо функциональщина по-моему потихоньку стоновится все более востребованной, и если ты шаришь, то какая-то контора, которая использует такой язык (фейсбук например, где насколько знаю OCaml юзают), рано или позно тебя с руками и ногами оторвет. :)

то какая-то контора, которая использует такой язык (фейсбук например, где насколько знаю OCaml юзают), рано или позно тебя с руками и ногами оторв

Тут вопрос о том, -рано ли поздно?
А кущать хочицо

>>Интересует разработка чего нибудь, связанная с обработкой данных, сетями, управлением,
ИИ, ..., web интересен если только серверная часть
Python же! А английский — привыкни его слушать/читать/проговаривать каждый день — и со временем прийдет.

Каждый свое болото хвалит) Если не воротит от веба, то берите PHP/JS. С поиском роботы или интересных проектов, проблем не будет.

Значит или ты не лягушка, или С++ не болото :)

После таких слов выбор очевиден, C++ :)

Выбрала С++, интерес к девушкам не уменьшился, не ври :D

Шо ж тебя мой гендер так волнует?

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

гетеросексуальная девушка

ну хер его знает, как ты это так понял :D

Гетеросексуáльность (от греч. έτερος — другой + лат. sexus — пол) — эмоциональное, романтическое (платоническое), эротическое (чувственное) либо половое влечение к лицам противоположного пола.

Юношей уже не надо, я слишком стара, мужчин, пожалуйста)

Женились бы, наплодили бы детишек, я бы их утром в садик, сама на работу, а ты дома пивко попивал бы, а я потом их забрала, покормила, уроки сделала, ужин тебе приготовила, за свежим пивком в магаз сбегала, ах, ЛЯПОТААААА

бальзама

Підтримаю. Угорський Унікум.... мммм... смачно.

Зато бесплатный менторинг по С++ и распознаванию образов)

Эх, будь я не женат и помоложе — не отстал бы от тебя

А ислам не спасет отца русской демократии? Сразу три свободных слота, женись себе дальше... :)

А можно моим мнением поинтересоваться, пожалуйста? :D

Не-не, это я про условие, как грицца, необходимое, но недостаточное. Чисто «техническое» решение чисто «технической» проблемы :)

Я отвечаю тебе на сообщения, а ты их правишь и дописываешь потом телеги!) так нечестно

Ну ещё и ты туда?? И так каждый раз, когда Витя пишет, страдаю. Это просто как серпом по моим несуществующим яйцам. Теперь вообще буду ночами рыдать в подушку и чувствовать себя неполноценной :(

Блин, только что вернулась от одной из доучанок) так что теперь даже не знаю

Надеюсь, вы хорошо провели время :)

Лучше всех, как всегда)

:) пускай всегда так и будет :)

Девушка в С++ — это пугает и в тоже время восщищает.

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

Вы как-то неприлично прямо к С# идти хотите. Поколение ваших родителей шло примерно так: VB, Pascal, Delphy, C++, ASP, PHP, Perl, ColdFusion, JavaScript, T(PL)-QSL, Java, а уже потом — C#.
Если серьезно, Вам щас напишут «английский» и алгоритмический.
Потому что это пережевывалось миллион раз, а Вы потом еще раз пять язык и технологии поменяете. Не в языке дело. А в подходе и том, в каких компаниях Вы будете работать.

Слишком большой список пожеланий для варианта выбора одного языка)).

Haskell уже советовали?

Боюсь автор не присядит со штангой=)

Go -> C -> C# -> C++ -> Java Будешь знать все эти языки, будешь зарабатывать суммы с 6 нулями в год

Достаточно знать только названия? (шутка)

ну если речь о гривнах, то да

а почему после С идет С#, а не С++

Ведь в статьях для новичков пишут, что шарп — это аналогия на тему Java от MS. И после одного проще осваивать второй

Вы знаете идеально какой-то из этих языков? А кого-то, кто идеально знает?

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

English => C#/JS/Go

Бери Go. Вон JetBrains вже IDE навіть доробляє для цього чуда (там навіть конкурс на назву IDE проводиться)

Для начинающих C++ не подходит.
1. Вначале нужно искать проекты, и на старте те что ты найдешь можно реализовать гораздо быстрее с помощью других языков (Delphi, Python, и прочие).
2. Если это не компания со своими технологиями то в основном люди будут готовы заплатить за решение а не за используемый язык.
3. Чтоб реализовать этот язык в полной мере нужно обращать внимание на эго низкоуровневость, а там и математика и написания драйверов.

Java
1. Очень хорош, но здесь либо в компании где у каждого своя задача, или ты сам, клиент, сервер, иногда дизайн. (Android)
2. Можно программировать различное оборудование, важна точность.
3. Java (Spring Boot) — создание веб приложений. (распространено за рубежом).
4. Возможность публикации приложений на Google Play (Android, хорошо для тебя и твоих идей).
5. Переходить к нему лучше не сразу.

Обрати внимание на JavaScript:
1. Google apps script — идеально для собственных експериментов и решения задач автоматизации, упрощеное общения с сервисами Google позволит решить множество тематических задач (язык JavaScript с вставками от Google).
2. Расширения к браузеру (язык JavaScript и вставки браузеров вместе с декларированной структурой проекта).
3. Помимо клиентской части обьединяет в себе серверную часть в виде различных Фреймворков.
4. С ним можно писать под Android.
5. Возможность публикации в интернет магазине.

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

Delphi

10 лет как мертв

математика и написания драйверов.

Драйвера на С пишут, а не на С++. И математика разве что в игрострое.

Ни разу не слышал, чтобы в ядре линукса была поддержка С++.
И да, ООП на С вполне себе нормально работает. И да, под 20М строк кода того самого ядра линукса — С + асм. И да, там ООП.

Если бы они включили С++, был бы тяжелый выбор, какие фичи использовать. Каждая фича кроме голых классов вызывает оверхед, минимум — потому что ее начинают юзать где надо и где не надо, максимум — еще и в рантайме тормозит или размер бинаря увеличивает. К тому же, с фичами плюсы в разы медленнее компилятся, чем С.
Ну и неясно, как бы оно все легло на голое железо. Рантайм у плюсов с фичами большой и сложный, а у С его можно вообще убрать, похоже, если без библиотеки.

В кернеле нет нормального маллока. Там вообще нет стандартной библиотеки.
Маллок — зло, так как выделяет объекты по рандомному адресу, что убивает скорость доступа. И еще ему нужно откуда выделять, и тут начинается взаимная блокировка потоков. А в ядре и так весело. Обертку делают — модуль, у которого просишь создать объект, хранит список всех живых объектов. То есть, создаешь не через маллок/фри, а XXX_CreateY()/XXX_DestroyY(struct Y*). А вообще — маллоки — зло, надо юзать статические буфера где возможно.

Даже у С с классами есть конструкторы, которые часто делают лишнее — не всегда надо инициализировать все поля, а раз уж есть конструктор — то ты его поюзаешь, и он все будет инициализировать. Еще один оверхед.

Если бы они же то же самое писали на С++ — или не смогли бы дописать и отладить, или его никто бы не смог прочесть. Асинхронное программирование — почти всегда ужас на стейт машинах. Глобальные переменные заменились бы членами синглтона, а толку?

В кернеле нет нормального маллока.

ЛОЛШТО?
www.kernel.org/...​rnel-api/API-kmalloc.html

ну вот, нестандартная функция с кучей флагов.

lol што? с каких пор кмаллок нестандартная функция?
а чтобы писать драйвера на плюсах надо в точности знать что будет на выходе конкретного компилятора, плюс таки оверхед

Да кмаллок дурной же, у него разное поведение в зависимости от объёма запрашиваемой памяти, да и ограничения по размеру существенные. Тогда уже на vmalloc() использовать.

это не значит, что он нестандартный

Даже у С с классами есть конструкторы, которые часто делают лишнее — не всегда надо инициализировать все поля, а раз уж есть конструктор — то ты его поюзаешь, и он все будет инициализировать. Еще один оверхед.

Нет, это не так. Если в классе есть поле типа int (или ещё какого-то тривиального типа, который по умолчанию себя не инициализирует) и ты явно не пишешь код для его инициализации — конструктор его не тронет, так и оставит мусором. Никакого оверхеда. А если все поля класса такие — конструктор будет пустым и оптимизатор с лёгкостью выбросит все его вызовы.

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

что ты будешь делать?

Буду менять архитектуру приложения

Ну это уже вопросы к тому, кто изначально писал этот класс. Почему он решил написать его так, зная, что он пишет код для какого-нибудь драйвера, где каждый лишний mov недопустим.
Здесь уже проблема не языка, а его использования в контексте текущего проекта.

Конкретно эту проблему можно решить несложным рефакторингом, типа такого:
ideone.com/IynX9F

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

Например:
godbolt.org/g/DgGimg
В первом случае компилятор оставит mov 42, т.к. он не может быть уверен, что следующий вызов unknown_actions не зависит от этого.
А во втором случае всё лежит на поверхности, и лишнее присваивание будет выброшено. Я буду очень удивлён, если мне кто-то покажет мало-мальски современный компилятор, не способный выполнить данную оптимизацию при таких обстоятельствах.
Да и первый случай тоже может быть соптимизирован — но уже на этапе линковки, если линкер увидит тело функции unknown_actions и сможет понять, что выполняемые ею действия никак не будут задеты выбрасыванием этой инициализации.

Эх и хорош был бы упрощенный вариант С++ типа С с классами пусть и без виртуальности.

Так а кто тебе мешает? не используй RTTI, STL, boost и будет тебе счастье. Опциями для компилятора можно вообще затюнить С++ компилятор, чтобы был похож на С.

Вон в Mesa3D так и используют интеловский GLSL компилятор, написанный на С с классами ну и немного темплейтов.

Современные тенденции таковы, что больше поощряется написание userspace драйверов. А там можно вертеть как угодно.

Можно где-то об этом почитать? А то как раз подобное может светить на следующем проекте (поддержка USB-камер с высоким сжатием видео). Пока нет требований, но вроде стандартный драйвер умеет только mjpg. Типа просто читать пакеты из USB через libusb и самому начинку парсить?

Под винду есть целое репо от МС на гитхабе с примерами. Под линух только обрывки попадались

Спасибо. У нас если будет — линух на роутере. Правда, для USB DECT системы как раз все делали в юзер спейсе, так что какой-то опыт есть.

Пока нет требований, но вроде стандартный драйвер умеет только mjpg.

Я писал драйвер под Logitech C920, оно умеет MPEG4. Выложил совсем сырой полуфабрикат тут github.com/llmike/devu-uvc и у меня его сразу купили и заставили закрыть и дописать. (второй проект на гитхабе с такой судьбой, хех).

Типа просто читать пакеты из USB через libusb и самому начинку парсить?

Если не нужны контролы над камерой (а они самые сложные), то хендшейк по UVC спецификации прост, дальше получаешь поток и его парсишь чем-то вроде gstreamer’а. Сейчас линуксовый драйвер умеет отдавать сжатый поток, а gstreamer умеет его извлекать напрямую из UVC драйвера.

Типа просто читать пакеты из USB через libusb и самому начинку парсить?

Да, забыл сказать с libusb каши особой не сваришь, оно нормально не умеет работать с высокоскоростными интерфейсами.

Делфи не более мертв, чем перл -пару вакансий всегда висит. Но новое все есть, и RAD студия и поддержка Линукс и Вин10, ждет своих разработчиков))
www.embarcadero.com/ru/products/delphi

разработка чего нибудь, связанная с обработкой данных, сетями

Это проще и удобнее всего разрабатывать на Go, а не на C++ и прочем. Впрочем, если будут платить именно за разработку на каком-то конкретном языке, то преимущество в данном случае очевидно.

Это типа сконвертить один формат данных в другой?

Да, в этом вся квинтэссенция обработки данных.

Дело в том, что скрипты сильно уступают в производительности C++ и Go, что важно для обработки больших объёмов данных, и работают в 1 поток. C++ сильно уступает Go в скорости реализации многопоточных алгоритмов, и несильно в производительности, так что выбор очевиден. Обработка BigData как правило сводится к тому самому конвертированию форматов данных, структуризации, вытягиванию данных из хаоса, а построение моделей — это уже другие задачи.

Как я обычно выбираю язык:
1. Нахожу проблему, которую нужно решить / проект, который хочу реализовать.
2. Ищу инструменты (фреймворки), которыми лучше воспользоваться, исходя из их популярности, документации и надежности (которые активно поддерживаются и на которые не жалуются из-за уймы багов).
3. Использую язык, который нужен для работы с инструментом.
Не вижу смысла учить язык «чтобы было», и тем более сравнивать разные языки без определенной задачи, которую необходимо решить. Увы, автору не могу подсказать, какой язык лучше выучить.

лучше учить базу: C/C++
остальное все равно отсюда пляшет

Не буду здесь спорить, просто скажу, что не согласен с этим. Можно писать хорошие, быстрые программы (и даже игры) и без умения писать на C++.

net. toje sporit’ ne sobirayus’

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

Абсолютно согласен!

Простой критерий: тебе для себя, для дела, или продавать свою тушку за деньги? Если последнее, как подавляющему большинству — иди за рынком, ищи за что больше платят.

Я бы начал с Brainfuck, а там смотрел

Ну а как такой совет можно еще воспринимать, как не троллинг?))

Постоянно мучает вопрос подходящий ли язык я выбрал

Ты всё правильно сделал, не сомневайся. Только учи сразу последний стандарт (C++17/20)

это чтобы с гарантией не взяли?))

Наоборот. Если автор только сейчас начинает учиться и по собеседованиям будет ходить через пару лет — вполне возможно, что будут спрашивать что-то из C++17. Сейчас по C++11/14 вполне себе спрашивают.
Вот только я бы поспорил, что стоит сразу браться за последние стандарты. И вообще пока до конца не ясно, нужны ли автору плюсы.

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

Питон — ИИ, обработка данных, серврная часть.
С и ядро линукса — сети, железо.
С++ — высокнагруженные серверы (редко), обработка данных (редко), местами железо, местами ИИ.

Учить легче всего Питон или С. Тренироваться быстрее всего на Питоне.

Знаменитая таблица для выбора языка images.techhive.com/...​raphic-100593938-orig.png

Питон — серврная часть.

???

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

Подписаться на комментарии