Что учить параллельно C++?

Добрый вечер ДОУ!

Изучаю программирование на C++. Думаю над тем чтоб изучить что то дополнительно.
Какая именно сфера разработки займет для параллельного обучения меньше времени и в ней возможно будут полезны навыки в C++.

Заранее спасибо!

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

прежде всего: не буду советовать, что учить *вместо* С++ — это можно обсудить отдельно. пока же будем считать, что у вас были на то причины, и не нам их оспаривать. итак. главное: С/С++ — это целый мир, со своими инструментами, библиотеками и пр. Что бы вы ни учили в дополнение, на первых порах будет проще оставаться в рамках одной экосистемы. Отсюда сразу вывод, что пока учить *не* нужно: другие большие экосистемы (прежде всего Java и C#, в меньшей степени — Objective-C), и языки, с ними связаные (Scala, Clojure, Kotlin, F#, Swift, etc.). далее. если вы уже пишете на С++, то многие вещи сами вас найдут: хочешь-не хочешь, а придется въехать в git, make, boost, posix, threads, и многое другое. поэтому инструментарий и библиотеки тоже не буду советовать. а вот что вам реально пригодится *в дополнение* к С++, так это небольшой скриптовый язык — скажем, на случай, если вдруг нужно как-то хитро перелопатить кучу файлов на диске, обработать данные и построить график или сделать маленький веб сервис. to get things done, как говорится. тут я бы советовал серьезно посмотреть в сторону двух вещей: 1) unix shell scripting + utilities (bash, sed, awk, grep, find, etc.) и 2) полноценного скриптового языка (python, perl, ruby, или даже R или php). я лично настоятельно рекомендую питон: он достаточно прост, универсален, идет с кучей библиотек и фреймворков на все случаи жизни, и хорошо вяжется с С/С++. имно, владение этими тремя вещами (С++, shell scripting, python) уже делает из вас полноценного универсального девелопера. а там уже сами разберетесь, куда расти дальше.

имно, владение этими тремя вещами (С++, shell scripting, python) уже делает из вас полноценного универсального девелопера. а там уже сами разберетесь, куда расти дальше.

Блин, владею всем вышеописанным, и никак не разберусь что же дальше :)

Учи java вакансий полно, на С++ не трать время его очень сложно изучить.

Судя по теме поиска работы в соседней ветке, самые ищущие работу — это именно специалисты Java.

На hh количество вакансий по java 5400, по С++ 3000, теперь очевидно где больше шансов найти работу.

Только нужно учитывать еще количество специалистов там и там. Специалистов по Java раз в 10 больше (условно), чем по С++, а количество вакансий по Java, грубо говоря, в 2 раза больше, чем по С++. Получается, что разработчику С++ найти работу в 5 раз больше шансов, чем такому же специалисту по Java.

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

Очень сложно изучать то, что неинтересно. И наоборот. Если человеку интересно учить C++ — он разберётся, благо хороших материалов в интернете предостаточно.

А «учи джаву вместо плюсов» — забавный старый мем, но не более.

давно не сталкивался с плюсами, но как по мне реальнее всего направление Android NDK. Игры и мультимедиа. Эффекты, графика и такое прочее.

А меня интересует чистый Си, если кто-то вплотную с ним работает, тотгле вы его применяете и куда вообще соваться с поиском работы по столь низкоуровневому языку?

FFMpeg, для мультимедиа, написан на чистом С. Если его и используют с плюсами, только плюсы идут, как обвертка к нему. Часть OpenCV идет на С.
Может системное программирование?

я використовую «С» для мікроконтроллерів для роботи і для хоббі.

я в курсе, но вот ка до разработчика полноценного дорасти?

у глобал лоджика есть курсы, с которых они потом на работу набирают

Точно! Я за глобаллоджиковские курсы забыл. Слушай Катерину. Она фигни не посоветует. ))
Попробуй вот сюда попасть в следующий набор: dou.ua/forums/topic/17125

я в курсе, но вот ка до разработчика полноценного дорасти?

в першу чергу це все має подобатись, інакше в подальших кроках нема змісту.

Якщо хочете розробляти під Linux, робіть акцент на С та стандартну бібліотеку (malloc, strncpy, memset та інші)

Якщо хочете працювати з мікроконтроллерами , крім С потрібно добре орієнтуватись в електроніці, особливо в цифровій.

Купляєте кіт для розробки, можна розпочати з AVR (ні в жодному разі не використовуйте Arduino, це шлях в нікуди). Далі переходите на ARM, вибравши потрібний мікрокотроллер (PSoC, STM32, TI TivaC).

із MOOC рекомендую наступні, вони цікаві та дають практичні навики (для їх проходження потрібні кіти, крім останнього курсу):

www.edx.org/...​-world-utaustinx-ut-6-10x
www.edx.org/...​-multi-utaustinx-ut-6-20x
www.edx.org/...​taustinx-ut-rtbn-12-01x-0

www.coursera.org/...​oduction-embedded-systems

якщо цікавить PSoC, тут кілька практичних уроків: embedded.co.ua/category/psoc

в загальному що таке PSoC: dou.ua/forums/topic/17973

також рекомендую підписатись на цю групу: www.facebook.com/lampa.kpi/?fref=ts
Там дуже багато різних навчальних матеріалів. Якщо Ви живете в Києві, можете зайти до них і безплатно попрацювати на їхньому обладнанні.

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

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

— Разработка для микроконтроллеров.
— Драйвера и модули ядра для Linux.

Ну а в целом все ядро линукса на сях написано. Так что если хочется системщины....

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

Прям вообще-вообще ничего не можешь? Даже хелловорлд?
Начни с простых вещей, попроходи на курсере курсы, которые тебе приглянутся. Если линукс не пугает, можешь вот в этом поучаствовать: eudyptula-challenge.org
Опыт нарабатывается всего одним путем — методичным деланием. Представь что ты на велосипеде учишся ездить. Или на коньках.

OS — Линух. Языки: Пайтон (Перл как вариант для мазохистов); HTML-XML-CSS; ангельский. Если на близкую перспективу, стоит также посмотреть в Джаву и-или С# . Если остается свободное время, то библиотеки: boost, QT (без них можно жить, но они довольно популярны у работодателей). Технологии — всё :8)

Все дуже просто, дивитесь вакансії на плюсах, тільки на ДОУ зараз 106 вакансій, переглядаєте їх, обираєте, які вам до смаку і дивитесь, що там вимагають окрім базового С++ і вчите.

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

Я понял, спасибо! а можете подсказать пожалуйста, если не сложно, какой язык(и) программирования учить дополнительно

Где душа прикипит или судьба выбросит. Я вот, например, несколько лет сидел на разработке плагинов для браузеров. Там обработка веб страниц осуществлялась на JS, а само ядро было на плюсах. Сейчас перешел на мультимедиа. Сам проект на плюсах в Визуал студии, а вот графический интерфейс пользователя был на MFC очень убогий. Сейчас переделываю его на шарпе. Есть и на плюсах библиотеки, но они стоят денег или требуют другую среду разработки (н-р, QT). Да и не хочется, что-то левое тащить в Студию.
ИМХО, Джава Скрипт c HTML, поддержку веба сейчас много проектов требуют. О джаве и так ясно, куча проектов, да и Андроид на джаве. Шарп, наверное, если будешь работать с Визуал Студией. SQL, какой-нибудь. И.т.д.
Короче, выбери область, которая нравится, посмотри вакансии для нее, там и определишься. А там придется еще учить теорию и фреймворки для работы в ней

конечно же, многопоточность

Параллельно не помешает поискать где его применить.

сложно сказать.
если бы вы надумали работу работать с использованием С++, то речь была бы об области применения: embedded(я не уверен, может, С++ там не используется, а только С?), че-то банковское или игры. Везде разные дополнительные навыки нужны.
А если только учеба, могу только придумать подтягивать знание либ(от структурных вещей типа Boost/STD и до UI: QT или GTK+) плюс алгоритмизаци. Также можно углубиться в системное программирование.

В embedded C++ вовсю идет. Пример вакансий эмбеддерной конторы ringlabskiev.com/careers

Не для всего железа есть компиляторы С++. И не все фичи С++ нужно тянуть в ембедед.
А так как приплюснутые часто сумашедшие, то часто лучше их ограничивать С.
Хотя мне нравиться больше С++, чем С, но я прекрасно понимаю тех ембедеров, что предпочитают С.

И не все фичи С++ нужно тянуть в ембедед.

На самом деле нужно избавляться от дурацких стереотипов о плюсах

C++ для эмбеда — должен быть таким:

en.wikipedia.org/wiki/Embedded_C+

P.S. Вот правильное отношение:

Apple engineers felt the exceptions, multiple inheritance, templates, and runtime type information features of standard C++ were either insufficient or not efficient enough for use in a high-performance, multithreaded kernel.

С простыми шаблонами и пространствами имен там передернули.

Шаблоны, полагаю, неодобрили — из-за возможной непортабельности + разрастания кода.

Что касается стл — есть реализации и без эксэпшнов. Но в «хардкорном» эмбеде часто, вообще динамическое выделение памяти нежелательно.

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

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

Что касается стл — есть реализации и без эксэпшнов.

Но зачем?

Затем, что эксэпшны это 1) +~10% к размеру бинарника 2) -~10% от быстродействия бинарника 3) проблема с поддержкой у кучи компиляторов
В эмбеде это существенно.

слышал про 1 — до 30%, 2 — не слышал, 3 — не слышал.
в хардкорном event-based от исключений толку примерно 0, поэтому можно отключать.

— быстродействие падает, т.к. для хэндлинга в функции добавляется «пролог», с информацией нужной для разворачивания стэка

— хэндлинг/разворачивание стэка довольно сложная процедура, которая не поддерживается во многих компиляторах для эмбеда, но бывают и реализации с ошибками.
Бывают даже баги в «мэйнстримовых» компиляторах (гугл по «gcc exception bug»)

Интересно, что в pjsip, который, вроде, относительно хорошо портируется, реализовали исключения на С через longjmp

— быстродействие падает, т.к. для хэндлинга в функции добавляется «пролог», с информацией нужной для разворачивания стэка

Нет, наоборот растет. Инфа о стеке складывается в отдельную секцию данных, и используется только при возникновении эксепшена, в отличии от лесенок if (foo() != OK) { return ERROR; } где вот эти проверки тормозят

— хэндлинг/разворачивание стэка довольно сложная процедура, которая не поддерживается во многих компиляторах для эмбеда

Пример? Как может нечто называться «компилятор С++» если оно не умеет в стандарт?

Как может нечто называться «компилятор С++» если оно не умеет в стандарт?

Ок, если с лук-ап таблицами — тогда ещё бОльший размер.

А что касается стандарта — его не реализуют полностью даже многие компиляторы для десктопа (включая VC++),. Чего уж говорить о компиляторах для эмбеда.

Ок, если с лук-ап таблицами — тогда ещё бОльший размер.

Наоборот меньше.

Так она складывается даже там, где никто никогда-никогда не собирался ничего бросать, и никаких if’ов нет.

noexcept

никаких if’ов нет

Т.е. вы похардкору решили проигнорить любые ошибки? Тут не в языке/компиляторе проблема

в хардкор евент-бейсд ембеддед есть 3 типа ошибок:
1) ошибки с железом (файловая система, сокеты...) — пора бутнуться
2) закончилась память — пора бутнуться
3) не парсятся входные данные

1 и 2 очевидно исключения не помогут. 3 могут помочь, но код парсера (в идеале) не должен жить в основном потоке, и все сводится к return NULL и отправке пустого сообщения.
Основной поток с логикой приложения (90% кода) ничего не бросает, входные данные валидированы интерфейсными потоками, и любые ошибки в нем являются ошибками написания логики и должны (в идеале) уходить в ассерт. Компилируя с исключениями мы в чем-то себе помогаем в парсерах, которые не являются основной задачей или основным объемом приложения, но при этом затягиваем поддержку исключений в код, в котором их не может быть.

в хардкор евент-бейсд ембеддед

А можно более развернуто, какие ограничения?

1) ошибки с железом (файловая система, сокеты...) — пора бутнуться

Если у вас отваливается (не устанавливается) коннект с сервером, то вы уводите свой девайс в резет? Как-то очень дерзко. Да и с ФС есть варианты.

2) закончилась память — пора бутнуться

Есть варианты на самом деле.

код парсера (в идеале) не должен жить в основном потоке

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

Основной поток с логикой приложения (90% кода) ничего не бросает, входные данные валидированы интерфейсными потоками

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

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

По сети попросили сделать операцию, а прав нету? Та ну нафиг, в ассерт сразу!

А можно более развернуто, какие ограничения?

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

Если у вас отваливается (не устанавливается) коннект с сервером, то вы уводите свой девайс в резет? Как-то очень дерзко. Да и с ФС есть варианты.

А Вы кидаетесь исключениями по таймауту от сервера? И основной поток приложения висит на сокете до таймаута? Чтобы приложение отвечало другим клиентам, надо работать с сокетами асинхронно. И тут уже исключения идут лесом, так как тот, кто отправляет данные в сокет, уже не на стеке.
По памяти — да, есть варианты, может быть. Но лучше один раз в неделю бутающийся девайс, чем постоянно тормозящий с вылетающими по очереди приложениями.

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

Да обычно флеш в эмбеддеде — самый ограниченный ресурс. Многопоточность нужна как минимум для того, чтобы голос в телефонии не рвался во время чтения телефонной книги с флеша и ее индексирования (10 секунд на 5000 записей)

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

Мне лично повезло с хорошей сишной SIP библиотекой, которая сама все делает)

По сети попросили сделать операцию, а прав нету? Та ну нафиг, в ассерт сразу!

Какие права в эмбедеде???

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

Ну ок, хотя возможны варианты.

Да обычно флеш в эмбеддеде — самый ограниченный ресурс.

Точно флеш, а не оперативка? Флеш можно каскадировать, в отличии от оперативы.

Многопоточность нужна как минимум для того, чтобы голос в телефонии не рвался во время чтения телефонной книги с флеша и ее индексирования (10 секунд на 5000 записей)

Почему нельзя сделать это кооперативно, через work-queue какой-нибудь, а саму индексацию разбить на несколько шагов?

Какие права в эмбедеде???

У вас вроде прямой (?) доступ из инета к девайсу возможен или что типа подобного? Неужели у вас нет аутентификации и авторизации?

Точно флеш, а не оперативка? Флеш можно каскадировать, в отличии от оперативы.

Обычно почему-то экономят на флеше. Подробностей не знаю.

Почему нельзя сделать это кооперативно, через work-queue какой-нибудь, а саму индексацию разбить на несколько шагов?

Зачем, если можно сделать нормально. ЮИ тоже под досом в игрушках делали кооперативно, и где этот дос?

У вас вроде прямой (?) доступ из инета к девайсу возможен или что типа подобного? Неужели у вас нет аутентификации и авторизации?

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

слышал про 1 — до 30%,

Пока вы слушали стереотипы, я взял и померял: andriidevel.blogspot.com/...​xception-handling-on.html

1) +~10% к размеру бинарника

Неправда

2) -~10% от быстродействия бинарника

Неправда

3) проблема с поддержкой у кучи компиляторов

Примеры?

Стереотипы-стереотипчики.

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

навыки в C++ самобытны и самодостаточны

... и чиста офигительны :8)

Английский язык

Let me speak from MyClass: ClassSay, ClassHello friends World{
...
}

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