Что должен уметь junior C++?
Собственно, вопрос вынесен в заголовок, хочется получить указания от более опытных людей. Понятно, что надо знать синтаксис и базовые конструкции языка (циклы, операторы, функции и т.д.), уметь в ООП, крайне желательно быть знакомым с STL. А что ещё? Нужны ли boost, Qt? SQL? Иногда указывают что-то типа «базовых алгоритмов», это что и в каком объёме? Обязателен ли какой-то стоящий завершённый проект, который новичку не стыдно запостить на github?
О себе: бакалавр по направлению «физика», МГУ, реальные навыки описаны во втором предложении, в принципе во время учёбы пользовался Matlab и могу работать с ним, но почему-то сомневаюсь в его необходимости за пределами университета. Кстати, могут ли возникнуть в будущем затруднения, если остановиться на бакалавре и не получать магистра, или реальный опыт и навыки всегда ценятся выше формальных (надеюсь на это)?
P.S. Если ошибся с форумом и это не для Job, прошу перенести.
P.P.S. Подскажите адекватные среднерыночные деньги, на которые должен рассчитывать в Москве человек, устраивающийся джуном? На HeadHunter в большинстве стартовых вакансий почему-то зарплата не указывается. Я правильно понимаю что адекватно будет 30-40 тысяч?
Hasek ★★
08.08.16 09:19:59 MSK
Базовые алгоритмы—это понимать как работает поиск, сортировка и т.д., возможно в нескольких вариантах. Туда же понимание стандартных контейнеров, как минимум чем отличаются и какова цена операций вставки, удаления, поиска, в идеале—как устроены.
Библиотеки, я думаю, не обязательны.
По деньгам можно раза в два больше, если метить в топовые конторы вроде Google, Facebook, Intel, JetBrains, etc. Проблема только в том, что топовые международные конторы во-первых выводят R&D из России, во-вторых не во всех нужны плюсисты.
staseg ★★★★★
( 08.08.16 09:32:20 MSK )
Последнее исправление: staseg 08.08.16 09:38:08 MSK (всего исправлений: 1)
Подскажите адекватные среднерыночные деньги, на которые должен рассчитывать в Москве человек, устраивающийся джуном?
umren ★★★★★
( 08.08.16 10:35:49 MSK )
тебе щас местные насоветуют. ходи на собеседования и смотри что предлагают.
vvviperrr ★★★★★
( 08.08.16 10:37:07 MSK )
стати, могут ли возникнуть в будущем затруднения, если остановиться на бакалавре и не получать магистра, или реальный опыт и навыки всегда ценятся выше формальных (надеюсь на это)?
даже если будешь заводить трактор, то бакалавра будет достаточно, а так в рашке бакалавр магистр или кандидат наук, всем плевать, важно что ты умеешь на деле
umren ★★★★★
( 08.08.16 10:41:13 MSK )
Подскажите адекватные среднерыночные деньги, на которые должен рассчитывать в Москве человек, устраивающийся джуном?
Ща тебе про стотыщьмильёнов расскажут
sidor ★★
( 08.08.16 11:03:29 MSK )
Джун должен знать и главное помнить все тоже, что и сеньор, но работать при этом за еду. Прописная истина, сэр.
unt1tled ★★★★
( 08.08.16 11:11:35 MSK )
Ответ на: комментарий от staseg 08.08.16 09:32:20 MSK
EXL ★★★★★
( 08.08.16 11:19:47 MSK )
Ответ на: комментарий от EXL 08.08.16 11:19:47 MSK
fluorite ★★★★★
( 08.08.16 11:56:44 MSK )
Ответ на: комментарий от fluorite 08.08.16 11:56:44 MSK
ЛОл! Таки решили свои тормозные поделки с Java на C++ переписать, чтобы работали быстро?
EXL ★★★★★
( 08.08.16 12:01:31 MSK )
Ответ на: комментарий от EXL 08.08.16 12:01:31 MSK
Нам нужен сильный С++ специалист для работы над ядром продуктов dotTrace/dotCover/dotMemory.
stave ★★★★★
( 08.08.16 12:03:17 MSK )
Ответ на: комментарий от EXL 08.08.16 12:01:31 MSK
Таки решили свои тормозные поделки с Java на C++ переписать, чтобы работали быстро?
Гы, как будто подделки типа qt creator, kdevelop, etc работают лучше (притом функционала там сильно меньше)
umren ★★★★★
( 08.08.16 12:06:05 MSK )
Ответ на: комментарий от EXL 08.08.16 12:01:31 MSK
vvviperrr ★★★★★
( 08.08.16 12:06:13 MSK )
Ответ на: комментарий от umren 08.08.16 12:06:05 MSK
Работают они значительно быстрее, при сравнимом общем функционале.
Это неоспоримый факт.
Но тема не об этом, каюсь за оффтоп и сворачиваю беседу на эту тему. Если хочешь продолжить разговор, пиши в личку.
EXL ★★★★★
( 08.08.16 12:10:21 MSK )
Последнее исправление: EXL 08.08.16 12:11:34 MSK (всего исправлений: 1)
Ответ на: комментарий от fluorite 08.08.16 11:56:44 MSK
Джависты на 300к/мес не нужны? Я бы к вам подтянулся через 2 года.
unt1tled ★★★★
( 08.08.16 12:14:23 MSK )
Ответ на: комментарий от unt1tled 08.08.16 12:14:23 MSK
fluorite ★★★★★
( 08.08.16 12:28:44 MSK )
Там про стажера, а не джуна, но ты понял.
Deleted
( 08.08.16 19:04:31 MSK )
Ответ на: комментарий от EXL 08.08.16 12:01:31 MSK
Насколько я знаю, нативного кода у JetBrains если и есть, то очень немного, в отличие от C++/CLI (требуещееся владение C# намекает, что это как раз тот случай).
Тут, очевидно, дело не в языке, а в архитектуре — учитывая, сколько работы та же IDEA выполняет в фоне, понятно, что она на любом языке бы ела довольно много вычислительных ресурсов и тормозила в случае их нехватки.
Softwayer ★★
( 08.08.16 20:30:54 MSK )
Ответ на: комментарий от Softwayer 08.08.16 20:30:54 MSK
Насколько я знаю, нативного кода у JetBrains если и есть, то очень немного,
Нативного у них как минимум интеграция с дебаггерами, они недавно искали человека пилить lldb/gdb-интерфейс в их clion.
Засунь себе свой копрофантазии куда-нибудь подальше.
hateyoufeel ★★★★★
( 08.08.16 23:05:27 MSK )
Э-э-э. кое-как уметь нечто и уметь учить машину этому нечто?
ados ★★★★★
( 08.08.16 23:10:15 MSK )
Ответ на: комментарий от hateyoufeel 08.08.16 23:05:27 MSK
Сорри, это не твои копрофантазии, это суровая реальность 0_o
Мы программируем на С++/СLI, который компилируется в .NET-сборки.
hateyoufeel ★★★★★
( 09.08.16 00:59:41 MSK )
Ответ на: комментарий от Softwayer 08.08.16 20:30:54 MSK
Ну, так многие поделия на java жрут просто как жабы. Особенно раму. Вот пример: YouTrack. Какая-то простая система учёта проектов еле ворочается на 1 гиге оперативе. Jira: валится на гиге только в путь. Их (атласиан) git webserver тоже жрёт на старте под 2 гига, а даёт всё то же, что и https://gogs.io/ При этом gogs отвечает молниеносно и жрёт что-то около 10 Мб оперативки. Вот тебе и java.
На рубях такая же хрень — вся обвязка gitlab’а жрёт под 2 гига, а толку столько же, что и от gogs с 10 мегабайтами.
Так что будущее за go и swift.
menangen ★★★★★
( 09.08.16 02:30:27 MSK )
Ответ на: комментарий от menangen 09.08.16 02:30:27 MSK
Будущее за теми, кто умеет читать документацию про Xmx, как вообще работают различные аллокаторы и зачем JVM выделяет себе столько памяти.
И еще. Go и swift совершенно разные языки. Первый имеет GC, второй нет. Про это тоже почитай.
xpahos ★★★★★
( 09.08.16 03:51:41 MSK )
Последнее исправление: xpahos 09.08.16 03:52:46 MSK (всего исправлений: 1)
Иногда указывают что-то типа «базовых алгоритмов», это что и в каком объёме?
Умение писать fizzbuzz, insertion sort, mergesort, quicksort. Различные деревья с балансировкой и без. Алгоритмы на графах. Строковые алгоритмы. Динамическое программирование. Если ты никогда с этим не сталкивался, то можешь пройти курс Седжвика на курсере, а потом курс основанный на Кормане. Порешай задачки на leetcode, hackerrank, timus, project euler, etc.
Кстати, могут ли возникнуть в будущем затруднения, если остановиться на бакалавре и не получать магистра, или реальный опыт и навыки всегда ценятся выше формальных (надеюсь на это)?
Физика вряд ли тебе пригодится. Можешь пойти в ШАД, если тебе интересен ML.
Я правильно понимаю что адекватно будет 30-40 тысяч?
На данном этапе зарплата не имеет значения. Твоя задача попасть в как можно более крупную компанию. В аутсорсинговой компании скорее всего тебе дадут ачивку «Senior» просто за то, что ты там 5 лет будешь писать говнокод, но реальных навыков ты можешь и не получить. В большой компании вокруг тебя скорее всего будет довольно много крутых разработчиков и ты сможешь узнать много нового просто за обедом.
xpahos ★★★★★
( 09.08.16 04:06:12 MSK )
Ответ на: комментарий от xpahos 09.08.16 03:51:41 MSK
Ага, я тоже могу тебя отослать читать про то, что не язык имеет GC, а его реализация. Ты нашёл разность — теперь найди общее.
menangen ★★★★★
( 09.08.16 04:21:26 MSK )
Ответ на: комментарий от menangen 09.08.16 02:30:27 MSK
Жаль только гуев там буквально нет, сообщество не тянет, а создатели не хотят
поэтому нетормозящей идеи на го мы никогда не увидим
umren ★★★★★
( 09.08.16 09:08:36 MSK )
Ответ на: комментарий от menangen 09.08.16 02:30:27 MSK
Ну, так многие поделия на java жрут просто как жабы. Особенно раму. Вот пример: YouTrack. Какая-то простая система учёта проектов еле ворочается на 1 гиге оперативе. Jira: валится на гиге только в путь. Их (атласиан) git webserver тоже жрёт на старте под 2 гига, а даёт всё то же, что
Бизнес и ничего личного: [сервер 128GB ram](http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR12. ) стоит 40к рублей, или 312 рублей за GB, или 44 минуты рабочего времени разработчика с окладом 90к в месяц.
snizovtsev ★★★★★
( 12.08.16 00:10:08 MSK )
На самом деле нет такого формализованного понятия Junior в С++ и соответственно нету и строгих требований. Каждая контора набирающая юных программистов имеет какой то свой профиль работы и соответственно свои неповторимые требования к кандидатам. Кто то пишет гуёвые проги на Qt, кто то прошивки для всяких встраиваемых устройств. У всех контор требования абсолютно разные. А тебе при этом надо изучать вещи универсальные для С++, основы языка, STL и пр. То что пригодиться в большинстве случаев. Чем лучше ты это изучишь, тем больше шансов попасть в Junior-ы. Пока свободен учись. Можешь поучиться подольше, написать какие то свои небольшие проекты тогда признают и опытным разрабом. Бакалавр ты или магистр значения не имеет, абсолютно никакого. Реальные навыки и только это.
Согласен, (с предыдущим оратором) лучше будет начинать в больших конторах. Но не факт что большие конторы захотят с тобой начинать. Как повезёт.
Matlab и твоя физика могут пригодиться когда станешь опытным программером. Иногда бывают вакансии на написание софта в этих предметных областях. Пока важно найти хоть какую то работу и получить начальный опыт.
Тут на форуме постоянно набирает начинающих сишников NatSys-Lab. Думаю будет очень хорошая позиция для тебя. Они занимаются системным софтом для Linux. Это конечно не C++, а просто C, но очень перспективное направление.
khenty
( 12.08.16 05:54:34 MSK )
Ответ на: комментарий от xpahos 09.08.16 04:06:12 MSK
никому не нужное дерьмо
insertion sort, mergesort, quicksort. Различные деревья с балансировкой и без. Алгоритмы на графах. Строковые алгоритмы. Динамическое программирование. Если ты никогда с этим не сталкивался, то можешь пройти курс Седжвика на курсере, а потом курс основанный на Кормане. Порешай задачки на leetcode, hackerrank, timus, project euler, etc.
всё это дерьмо не нужно на практике ( если ты не практикующий олимпиадник )
по сабжу. джуну C++ необходимо на три с плюсом знать язык ( т.е. как минимум осилить Страуструпа ) и знать азы апи операционки ( т.е. основы работы с памятью, файлами, тредами, процессами ) под которую он решил писать код, т.е. для онтопика это позикс.
peacelove
( 17.08.16 18:11:31 MSK )
Ответ на: никому не нужное дерьмо от peacelove 17.08.16 18:11:31 MSK
всё это дерьмо не нужно на практике ( если ты не практикующий олимпиадник )
Ты либо принимаешь правила и проходишь собеседование в топовую компанию, либо продолжаешь всем доказывать что алгоритмы не нужны и идешь работать в EPAM, Luxoft или в любую другую аутсорсинговую контору. Без знания алгоритмов ты никогда не попадешь в команду разработки очередной крутой распределенной системы для Google/Facebook/etc.
по сабжу. джуну C++ необходимо на три с плюсом знать язык ( т.е. как минимум осилить Страуструпа ) и знать азы апи операционки ( т.е. основы работы с памятью, файлами, тредами, процессами ) под которую он решил писать код, т.е. для онтопика это позикс.
Ахаха, ну да, ну да. А потом у таких спрашивают на собеседовании про виртуальные конструкторы и они начинают нести чушь. Треды и процессы это отдельная огромная часть CS. Lock free, сами блокировки, модель памяти итд итп.
xpahos ★★★★★
( 17.08.16 20:07:34 MSK )
kirk_johnson недавно говорил, что ищет спеца по плюсам. Может он тебя просветит про текущее положение дел на рынке.
Что нужно знать junior программисту ?
Всем добрый день. Я не нашел такой темы поэтому решил создать. Меня интересует такой вопрос: я планирую стать разработчиком игр. интересует направление с логикой. Поэтому хочу спросить вас что Вы посоветуете для изучения. Темы с С ++, математики и я еще слышал Анриал енджен норм движок. что из него посоветуете прежде всего изучить для позиции junior.
Спасибо за ответы.
#1
16:28, 14 июля 2021
>интересует направление с логикой
Дискретную математику
Можешь потренироваться в олимпиадном программировании — начнёшь решать задачи, постепенно выйдешь на нужные темы.
Язык зависит от движка и типов игр. Если планируешь на Unity игры делать, то C# — работу будет проще найти. Если нет, то C++, но будет сложне и предложений работы, скорее всего, будет меньше, но они могут быть круче.
Если прямо хочется логику разрабатывать, то попробуй сделать собственную roguelike игру — они как раз про логику. Если получится, считай ты гарантировано разработчик игр, может даже повыше джуна.
#2
16:58, 14 июля 2021
Ключевой момент, который должен знать юниор-программист, что юниоры никому не нужны. Некому ставить юниорам задачи и контролировать их исполнение, а самому юниору доверять нельзя, на то он и юниор.
Так что, даже если тебя куда возьмут юниором, требовать будут как с сеньора, а платить как юниору. Работу ты скорее всего завалишь, если действительно юниор.
#3
22:53, 14 июля 2021
В о4..ко олимпиадное программирование — это или для детей, или для тех у кого времени вагон. Идёшь на nnmclub.to и вбиваешь в поиске Unreal или Unity или Godot и скачиваешь видеокурс который тебе приглянулся (обычно там внутри минимально необходимый набор: линейная алгебра, шейдеры, конвееры). Потом никому не говоришь, что ты junior. Никому не говоришь, что ты чего-то не знаешь, а заменяешь это фразой «я с этим ещё разбираюсь». И игноришь все кто тебе говорит «у тебя ничего не получится», «ты никому не нужен», «джуны никому не нужны». Таких будет много — их сразу в сад.
Разница между С++ и C# в том, что с С# проще начинать (считается), но потом тебя ждёт ад: как победить garbage collector, как передавать из managed в unmanaged и не задолбаться, как написать игрулю так, чтобы она не сажала батарею мобилы за минуту/не сжирала память компа. С С++ сложнее начинать (считается, я не согласен), но потом больше контроля за происходящим (если это потом будет).
Если ты что-то не понимаешь, то, скорее всего, ты не знаешь зачем это нужно.
По языкам программирования и математикам есть бесплатные курсы на stepik.org
Не читай Борескова — он ч0рт.
Прежде чем что-то делать и или изучать, подумай как это продавать.
Не работай за еду.
Не делай «три в ряд» — выгоришь
Смотри на стиме список рекомендаций. Для самых говёных из списка смотри (на steamspy) сколько они заработали. Это мотивирует.
Если будешь заниматься анрилом, в Epic Game Store раз в месяц раздают набор бесплатных ассетов, модулей и прочих плюшек. Могут пригодиться, когда будешь делать себе порфолио
#4
0:18, 15 июля 2021
oleg_polishuk
Junior какой кодер?
Много принципиально разных специализация — рендер, физика, серверный и т.д. Надо с этим определиться. Например, для геймплея С++ скорее минус, а для рендера маст хев(если вообще не С)
Seva
> Никому не говоришь, что ты чего-то не знаешь, а заменяешь это фразой «я с этим
> ещё разбираюсь».
Зачот! =)
#5
7:18, 15 июля 2021
Seva
> Никому не говоришь, что ты чего-то не знаешь, а заменяешь это фразой «я с этим ещё разбираюсь».
Правильно! Лох — не мамонт, лох не вымрет.
oleg_polishuk, не слушай старпёров, только запудрят мозги всяикими этиками, культурами производства , контролем качества и этой, как его, ответственностью. Путь к усреху настоящего поцона идёт через копипасту со stackoverflow и развод на деньги.
- oleg_polishuk
- Пользователь
#6
8:50, 15 июля 2021
Спасибо за ответы
- Vlad2001_MFS
- Постоялец
#7
10:04, 15 июля 2021
Zab
> Некому ставить юниорам задачи и контролировать их исполнение, а самому юниору
> доверять нельзя, на то он и юниор.
А нафига их ставить? Это какой-то стажёр уже блин. Джун пришёл, тимлид дал ему первую ознакомительную задачу. Джун сделал ее, в процессе разбираясь с организацией работы. Все. Дальше джун сам берет задачи из этого же ютрека и делает их, попутно что-то спрашивая в командном чате. Смысл в таком надзирательстве?
#8
19:07, 15 июля 2021
Tiendil
> Путь к усреху настоящего поцона идёт через копипасту со stackoverflow
Вот я слышал про синдром Менхаузена.
Со стака ни разу не копипастил прям код, хотя соблазн был и код вроде хороший тоже (в той же луа глубокое копирование таблицы), так что скоро скопирую, но по факту постоянно с ним советуюсь, иногда по нескольку раз за час.
Не знаю мб свою роль играет, что меняю ЯПы, фреймворки частенько. Но в принципе даже если бы я все это время прокодил в юнити, то и то бы наверно гуглил. Про анрил даже не заикаюсь там вообще без гуглинга никак.
ЗЫ нафиг я все это написал, будем считать что крик души =)
#9
19:10, 15 июля 2021
Vlad2001_MFS
> Смысл в таком надзирательстве?
сейчас всё равно обычно git, так что код в любом случае посмотрят и всё «фи» выскажут
смысл в том чтобы меньше времени занимала задача у человека
- Vlad2001_MFS
- Постоялец
#10
23:51, 16 июля 2021
#!
> сейчас всё равно обычно git, так что код в любом случае посмотрят и всё «фи»
> выскажут
Ну так код ревью это само собой, без этого никуда.
> смысл в том чтобы меньше времени занимала задача у человека
Так ведь и не будет занимать много времени, так как Джун может непонятности спрашивать у команды.
Я не понимаю именно такого сочетания:
> ставить юниорам задачи и контролировать их исполнение
#11
2:28, 17 июля 2021
от формулировки веет казёнщиной если не армейщиной, но на практике очень хорошо если кто-то, кто знает проект изнутри, построит тебе кратчайший путь и попутно откомментирует разные ляпы которые возникают при реализации
#12
6:39, 17 июля 2021
oleg_polishuk
> Что нужно знать junior программисту ?
С точки зрения HR нужно знать всё (языки программирования от ассемблера до питона, платформы от винды до линукса, желательно на уровне системного программиста и т.д. и т.п.). Но сами HR этого не знают (иначе работали бы программистами) и просто читают заявки тим-лидеров. А те мечтают о чуде. На самом деле джуниору нужно уметь писать программы на C++. Этого достаточно (если мы говорим о джуне-программисте). Пусть он пишет неоптимально, лишь бы мог отлаживать свой код и он бы не падал на старте. Все остальное придет с опытом (года через три). Программирование это на 20% знание (это я учил) и на 80% опыт (это я уже делал). На самом деле все берется задницей. Сидишь, кодишь, запускаешь, оно падает, отлаживаешь, запускаешь опять и так по кругу. Постепенно циклов итерации становится меньше. Писать сразу набело (без ошибок) нереально что бы тебе не втирали. Но чем больше опыта тем меньше уходит времени на поиск багов (они все равно будут).
Но это в идеале. Если тебе просто нужно устроится на первую работу, то сыпь терминами и делай вид что ты профи (тут на форуме половина так делает). HR все равно не проверит. На втором этапе (когда с тимлидером будет митинг) будет сложнее, но иногда наглость и там прокатывает. Но все же желательно сильно не завираться и язык все же знать, хотя бы на базовом уровне.
#13
9:45, 17 июля 2021
Смысл врать то? Работать потом как? В первую же неделю все выяснится и уволят, даже не спросив как зовут.
Впрочем, если не врать, то все равно уволят, когда увидят, что не тянешь. Помнится, проводил собеседование, понравился один паренек, толковым показался. Был готов принять, по результатам разговора, но дал еще задание на дом, перед тем как оформлять. Посмотрев на результаты, схватился за голову. Куда я смотрел? Где тут толковое? Человек понятия не имел, как хранить несколько экземпляров однотипных данных. Вообще не знал, как к этому подступиться, ни о каких массивах, списках и прочих контейнерах даже не слышал. Типа, такой «программист». Среди визардов пытался найти что-то подходящее, не нашел и сидел в растерянности. Удивителен не такой уровень, а что я его с ходу не опознал. Вспомнив процесс собеседования понял, что паренек все время молчал. Очень грамотно молчал, я его молчание за нужные ответы воспринимал 😉
#14
10:08, 17 июля 2021
Zab
> Вспомнив процесс собеседования понял, что паренек все время молчал. Очень
> грамотно молчал, я его молчание за нужные ответы воспринимал 😉
Не в первый раз такое слышу)
Может они гипнотизируют собеседующих?
Кто такой разработчик на C++: чем он занимается и как им стать
C++ — один из самых популярных и известных языков программирования. В рейтинге TIOBE 2023 года он занимает третье место вместе с Python и C. Рассказываем, что особенного в C++ и что нужно знать, чтобы найти работу.
Что такое C++
Основное преимущество C++ — скорость: он работает в среднем в два раза быстрее, чем Java, и в 30 раз быстрее, чем Python. Поэтому в тех областях, где мгновенная реакция — необходимость, альтернативы C++ нет. В автомобильной сфере большинство программного обеспечения написано на C++. На нем же созданы все операционные системы, поисковые движки Яндекса и Google, многие мессенджеры (например Telegram), которые работают с большим объемом информации. Сюда же можно добавить все умные электронные устройства и бытовую технику. Разработчик на C++ — непростая профессия. Язык считается трудным для изучения, а чтобы на нем писать, важно уметь работать с алгоритмами. C++ стоит выбирать тем, кому нравится «железо» и интересно разбираться в том, как устроены компьютеры и электронные устройства. Есть одно точное выражение создателя этого языка, которым можно охарактеризовать программирование на C++: «C позволяет легко выстрелить себе в ногу; с C++ это сделать сложнее, но, когда вы это делаете, вы отстреливаете себе ногу целиком». Можно допустить одну небольшую ошибку, и программа упадет.
IT-специалист с нуля
Наш лучший курс для старта в IT. За 2 месяца вы пробуете себя в девяти разных профессиях: мобильной и веб-разработке, тестировании, аналитике и даже Data Science — выберите подходящую и сразу освойте ее.
Профессия / 8 месяцев
IT-специалист с нуля
Попробуйте 9 профессий за 2 месяца и выберите подходящую вам
4 490 ₽/мес 7 483 ₽/мес
Где используется C++
- ввысоконагруженной разработке — C++ используют для систем, на которые приходится большая нагрузка, а также есть требования к скорости;
- программировании встроенных систем (embedded systems) —микроконтроллеров, беспилотных автомобилей, умных часов, сенсоров и устройств, использующих технологию интернета вещей;
- геймдеве — игровой движок Unreal Engine работает на C++, язык используют и для проектов на других технологиях;
- создании операционных систем — C++ используют как системный язык, например чтобы писать прошивки для разной техники и дорабатывать существующие ОС: Windows, Linux, Mac OS и iOS, Android и др.;
- разработкеприкладногоПО— в браузерах, антивирусах, других сложных программах, где важно хорошее быстродействие и способность выдерживать нагрузку;
- созданииспециализированного ПО — например, в программах для различного оборудования, от софта для серверов до космических систем.
Причина, по которой C++ востребован именно в этих областях, — высокая эффективность. Если нужно написать код, который будет хорошо работать на слабом или узкоспециализированном железе, C++ незаменим. Язык кросс-платформенный, мощный и очень гибкий.
Читайте также Язык программирования C++: разбираемся и пишем простую программу
Особенности разработки на языке C++
При всех достоинствах C++ — сложный язык с высоким порогом входа.
- У C++ более низкий уровень, чем у большинства современных языков. Он все еще считается высокоуровневым, то есть отдаленным от «железа» и близким к человеку, но все же сохраняет возможность, например, напрямую работать с памятью. C++ не настолько уходит в человекопонятную абстракцию, как тот же JavaScript. Он может на довольно глубоком уровне работать с аппаратной частью компьютера. Поэтому важно понимать особенности работы «железа».
- В C++ нет автоматизации сборки мусора и других процессов. Многие вещи, которые в современных языках программирования за разработчика выполняют автоматические процессы, в C++ делаются вручную. Например, та же работа с памятью: в C++ разработчик выделяет память и управляет ей сам, а если ошибется, могут начаться утечки.
- В C++ много специфичных понятий и абстракций. Например, один из самых знаменитых типов данных языка C, перешедший и в C++, — указатель. Переменные этого типа буквально указывают на какое-то значение в памяти компьютера, и работать с ними нужно несколько иначе, чем с привычными переменными.
C++ совмещает преимущества низко- и высокоуровневых языков программирования.
Почему разработчик на C++ — особенный специалист
В большинстве других языков программирования разработчику не нужно знать, как работает техническая «начинка»: для сложных процессов есть библиотеки и уже готовые функции. В C++ программист должен понимать, как все устроено. Именно так он может писать эффективный и быстрый код.
В теории можно работать с C++ как с другими языками и не углубляться в детали, но на практике это бесполезно. Так теряется главный плюс C++ — возможность писать код, оптимизированный под «железо» и потому очень быстрый.
Хороший разработчик на C++ — человек, который, кроме самого языка программирования, разбирается в устройстве компьютера, алгоритмах и структурах данных, а еще умеет их применять. Для работы с языком важны познания в Computer Science: без них эффективные программы писать не получится.
Курс для новичков «IT-специалист
с нуля» – разберемся, какая профессия вам подходит, и поможем вам ее освоить
Чем занимается C++-разработчик
Программисты на C++ создают от корпоративных систем до прошивок для космических спутников.
Это могут быть следующие программы:
- высокотехнологичные, с инновационными функциями, как, например, мощные нейросети;
- специализированные, то есть предназначенные, например, для микроконтроллера или системы на чипе;
- нагруженные, которые работают с большими объемами данных или занимаются интенсивными вычислениями — видеоигры, блокчейн-платформы и пр.
Это не исчерпывающий список. На C++, например, можно написать код для серверов известных сервисов. Музыкальная платформа Spotify использует для серверной части C++: сервис используют миллионы людей по всему миру, а музыка при этом должна проигрываться быстро и без задержек.
Что нужно знать разработчику на C++
Обычно для начала работы достаточно изучить синтаксис языка и работу с основными библиотеками, иметь общее представление об алгоритмах и структурах данных. C++ требует большего погружения и дополнительных знаний:
- алгоритмов. Как эффективнее реализовать то или иное действие, сократить количество вычислений и нагрузку на железо, заставить программу быстро работать — вопросы, с которыми C++-разработчик может сталкиваться часто. Без хорошего понимания алгоритмов не обойтись;
- информатики. Информатика, Computer Science, — это наука о компьютерах и о том, как они устроены. Разработчик на C++ взаимодействует с аппаратурой на более низком уровне, чем программисты на большинстве современных языков. Поэтому ему нужно разбираться в архитектуре компьютера и понимать, как адаптировать код к особенностям разного «железа»;
- математики. Без нее сложно реализовать алгоритмы, особенно в сферах, где многое связано с вычислениями: например в блокчейне или машинном обучении. Иногда разработчику могут пригодиться знания математики на уровне вуза.
Остальное зависит от сферы. Например, если разработчик решит развиваться в области встраиваемых систем, ему надо изучить низкоуровневые технологии: архитектуру систем, язык ассемблера, схемотехнику. Если захочет пойти в машинное обучение или анализ данных — теорию вероятности и математическую статистику.
В каждой сфере есть свои инструменты: в геймдеве это игровые движки, а в разработке десктопных приложений — фреймворки вроде Qt.
Сколько получают программисты на C++
Начинающему разработчику на C++ могут платить меньше, чем программистам на других языках. Но по мере набора опыта доход растет в десятки раз. Средняя зарплата разработчика на C++ в 2023 году — 162 000 рублей в месяц, а медианная — 131 000. Это данные по российским компаниям: в зарубежных оплата выше.
- Новичку готовы платить 40 000–80 000 рублей. Это немного для IT, но в целом соответствует средней зарплате джуна.
- Уже на уровне джуниор+ зарплата вырастает: от 80 000–100 000 рублей в месяц.
- Программисты среднего уровня получают от 100 000 до 200 000 рублей в месяц.
- Ведущие и узкоспециализированные разработчики могут получать от 300 000 рублей.
C++ нужно дольше учиться, и новичку не готовы платить больше, чем другим, — ему надо много узнать. Специалисты с опытом очень ценятся и могут зарабатывать большие деньги, особенно в сферах вроде телекоммуникаций или блокчейна.
Как стать C++-программистом и что для этого изучить
C++ не советуют изучать с нуля как первый язык программирования. Для многих он становится вторым или третьим после более простых языков вроде Python или JavaScript. Человек уже знает больше, лучше разбирается в IT, поэтому ему легче освоить сложную технологию. Но если вы готовы к вызовам, можно изучить C++ и первым языком.
Компьютерные науки. Их желательно освоить еще до знакомства с языком, потому что многое в C++будет сложно понять. Информатика рассказывает, как устроены компьютеры и данные, по какому принципу строится программное обеспечение, знакомит с алгоритмами и основными структурами. Например, тот же тип указателя проще понять, если человек уже знает, как данные хранятся в памяти компьютера.
Синтаксис языка. Синтаксис — это основные команды, типы, особенности работы с языком программирования. Базовые вещи можно освоить и без глубоких знаний в информатике, но чтобы понять больше, нужны дополнительные знания. Поэтому синтаксис C++ стоит изучать одновременно с компьютерными науками и подкреплять изученное на практике.
ООП и функциональное программирование. C++ отличается от C в первую очередь поддержкой объектно-ориентированного программирования. Многие программы пишутся на нем в парадигме ООП, поэтому даже начинающий разработчик должен быть с ней знаком и уметь реализовать принципы на C++. Cтоит побольше узнать про функциональное программирование. С++ нельзя назвать функциональным языком, но уклон в эту парадигму у него есть, и умение с ней работать может оказаться полезным.
Операционные системы и ПО для айтишников. C++ используют для системного программирования или создания программ, оптимизированных под конкретную архитектуру. Поэтому инструментов, которыми пользуется C++-разработчик, очень много: для Windows основной — это Microsoft Visual Studio, для macOS — Xcode IDE. Большой выбор инструментов для разработки на C++ есть в Linux. Например, Qt Creator, который стал очень популярным в последние годы. Вообще инструментов десятки, и выбирать можно любой для своего удобства.
Специализированные навыки. Все уже зависит от выбранной сферы. Например:
- в телекоме нужно разбираться в устройстве коммуникационных сетей, их архитектуре и инфраструктуре, знать, как эффективнее настраивать передачу данных;
- в машинном обучении понадобятся теория вероятности и статистика, умение работать с графиками и понимание теоретической базы ML. Пригодится знание специализированных фреймворков;
- в отрасли встраиваемых систем и низкоуровневого программирования понадобятся ассемблер, хорошее понимание «железа» и желательно навыки схемотехники;
- в разработке ОС нужно хорошо понимать, как устроены конкретная система и ее ядро, как в ней проходят процессы и хранятся данные;
- в геймдеве необходимо уметь работать хотя бы с одним игровым движком, понимать специфические особенности: как отрисовывается графика, рассчитывается физика предметов и так далее. Здесь не помешает знание пространственной геометрии и линейной алгебры.
Отталкивайтесь от навыков, которые перечислены в вакансиях по интересующему направлению. Например, если хотите писать на C++ игры, посмотрите, какие скилы требуют работодатели от новичков в геймдеве.
Если человек приходит в компанию на позицию джуна, то ему нужно знать лишь базовые конструкции языка — многого требовать не будут, так как понимают, что в течение полугода или года он значительно улучшит свои hard-скилы, главное, чтобы было желание.
Софт-скилы разработчика на C++
Для работы с C++ важны софт-скилы:
- аналитическое мышление — чтобы вдумчиво разбираться в сложных конструкциях;
- стремление постоянно учиться — в случае с C++ учиться и правда придется много;
- умение мыслить абстрактно — помогает решать нестандартные задачи;
- усидчивость — в C++ много ручной работы, нужно долго сидеть над задачей и концентрироваться на чем-то одном;
- хорошая память — вы ведь помните, что для работы с C++ нужно много дополнительных знаний?
Софт-скилы можно развить в процессе обучения и работы. Если на старте их не хватает, вы сможете усилить нужные навыки в будущем.
Стоит ли учить C++, если вы новичок
Обычно C++ рекомендуют изучать вторым или третьим языком. Иначе будет сложно погрузиться в структуры данных и устройство памяти компьютера. Но нет ничего невозможного. По C++ много документации, у него обширное сообщество, а основной синтаксис довольно простой; сложность — в необходимых дополнительных знаниях. Освоить C++ с нуля возможно, но понадобится много учиться.
Куда можно вырасти
Перспектив развития в IT-сфере для разработчика достаточно много. Если у человека есть опыт в программировании, то он со временем может перейти на другие позиции:
- project manager контролирует работу команды, общается с заказчиком, следит за сроками и отвечает за конечный результат;
- архитектор занимается построением IT-систем для решения бизнес-задач. Объясняет, как сделать программы правильнее и какие технологии использовать;
- product owner знает все о потребностях клиента и возможностях команды, о том, как их объединить;
- технический писатель занимается пользовательской документацией (FAQ, помощь), документацией внешних API и описанием внутренних систем проекта;
- тестировщик ищет ошибки и возможные сбои в программе, моделирует ситуации, которые могут возникнуть во время использования программ;
- DevOps-инженер умеет все и сразу: совмещает функции разработчика и сисадмина. Знает, какую архитектуру будет иметь приложение, и настроит сервера для его работы.
После C++ изучать другие языки программирования будет намного проще.
Что должен знать Junior C++ программист на данный момент?
Собственно вопрос в заголовке. В интернете ответа не нашел, там в основном про Web-программирование.
P.S. Для уточнения: какие библиотеки, функции, SDK, макросы и т.п.
- Вопрос задан более трёх лет назад
- 20982 просмотра
1 комментарий
Средний 1 комментарий
Евгений Шатунов @MarkusD Куратор тега C++
Junoir C++ developer должен очень хорошо знать язык.
Во-первых — свой родной язык. Девлопер со спичем на форижен сленге мирится со слоу респектом у тиммейтов на ворке. Способность чисто декламировать на родном языке, словами без эмоций пояснять свою точку зрения, приводить (обязательно и только)веские аргументы и (в особенности) понимать чужую речь на родном языке имеет очень большое значение для процесса разработки. А для джуниора — еще более.
Во-вторых — свой язык программирования. Плюсы знать надо на таком уровне, чтобы не задавать простых вопросов. STL надо знать как букварь, это важный момент. Шаблоны и метапрограммирование — хотябы на общем начальном уровне (синтаксис, возможности, правила, type_traits в STL).
3 способа использования слова static знаешь? Почему inline нужен? Что такое константный метод? Почему в деструкторе нельзя вызывать виртуальные методы? А как виртуальный метод все же вызвать, если ну очень хочется? Каким условиям для хеш-функции желательно удовлетворять чтобы эффективно использовать ее в контейнере std::unordered_map? Как правильно мириться с исключениями конструктора? Чем std::deque отличается от std::vector, в каких случаях что эффективнее? Перечислять вопросы можно хоть до второго пришествия.
В третьих — английский язык. Нужно уметь читать документации и доклады, стенографии выступлений и, если понадобится, общаться с сообществом на гитхабе, гиттере, слеке. С ресурсом en.cppreference.com/w нужно не просто подружиться, надо знать что именно там есть все ответы на твои вопросы по языку.
Штука такая, джуниор без знаний языка мало кому нужен, таких на грош с десяток взять можно. Когда с самого старта карьеры ты уже будешь уверенно владеть языком программирования, к тебе и отношение другое будет. И рост у тебя будет быстрее, и знания тебе с самого начала будут по другому предоставлять.
А основная мысль у меня такая: как джуниора, тебя не азам обращения с инструментами должны учить, а сразу передавать тебе наработанную сноровку, алгоритмы, рассказывать про грабли и минные поля.
Решения вопроса 0
Ответы на вопрос 2
Пишу комментарии в комментарии, а не в ответы
Все на свете, причем еще и зависит от рода деятельности. Можно не слишком глубоко, но в общих чертах знать куда идти, в случае чего. Из популярного — STL, WinAPI, COM, Boost, кое-где Qt. Увы, но порог вхождения там высок, да еще и необходимо «затачиваться» на конкретную вакансию. Ибо embedded, системное и прикладное программирование — это разные вещи, которые требуют различных знаний.
Мне кажется, что в этой Спарте нет джуниоров, там сразу хорошие миддлы =)
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
Saboteur @saboteur_kiev Куратор тега C++
software engineer
Junior C++ программист должен лучше уметь искать ответ в интернете.
Вместо того, чтобы искать ответ на блогах и форумах, ищите напрямую вакансии и смотрите требования.
Как вы видите, требования (как и ЗП + условия работы) сильно разнятся от вакансии к вакансии.
Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- C++
- +1 ещё
Как решить проблему с программой на С++?
- 1 подписчик
- 13 часов назад
- 69 просмотров