Java vs. C++ junior

Я на 4м курсе, первые два курса пинал, последний год изучал CS (читал книги про архитектуру, операционки, компиляторы, немного инженерию и алгоритмы). И вот настало время поиска работы, и я не знаю что мне делать. Неделю уже просматриваю возможности и не могу определиться с языком, который буду детально изучать. Хотелось бы вступить в связь с С++ (из-за большего контроля и более интересным задачам), но на рынке джунам не очень рады. В тоже время в епаме до 25 октября набор на курсы по джаве с перспективой попасть на стажировку (а там уже никак иначе как веб, которым, мне кажется, заниматься будет скучнее). Я побежал читать Шилдта Java: The Complete Reference не забывая сомневаться о выборе. Мне осталось 8 месяцев универа, уже к маю желательно бы начать где-нибудь стажироваться. И у меня вопрос: стоит ли мне полностью отдаться C++ с риском никуда не устроиться или же лучше пройтись по безопасной java-дорожке.

👍ПодобаєтьсяСподобалось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

Если выбирать между C++ и Java, то нужно учитывать то, что первый язык — мощный, интересный, весьма приятный в повседневном использовании, его в принципе достаточно одного, чтобы проходить собеседования: не нужно знать целый ворох технологий и т.п. (а какие технологии?), каждый проект, можно сказать — индивидуален, он весьма не прост, но требует постоянного самосовершенствования и изучения, хотя и дарит гибкость в выборе проекта, как ни странно. Второй же язык — всё с точностью наоборот, на два порядка проще в изучении, но тянет за собой тучу нудной энтерпрайзщины, как плюс — также Джава обычно несколько более оплачиваема (за тоску видимо).
Это говорю я, как человек, хлебавший их оба, сочетавший бывало даже оба на одном проекте, начавший с Java, и ушедший в C++. Сейчас за уши не оттянешь.
Бери плюсы, в них больше плюсов, чем поговаривают, и уж тем более больше, чем в названии. Но это будет долгий и, хотя и интересный, но тяжёлый путь.
C++ также сейчас на пике своего развития, а Java,
имхо, что-то стала сдавать сильно в последнее время.

тоже java пробовал (правда в составе Qt Jambi когда оно ещё было живо), потом перешёл на C++. Намного приятней иметь на выходе бинарь без привязки к каким-то виртуалкам. Но и свои минусы есть даже за вычетом платформозависимости, сложность например.

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

Rust rulez

плюсы уже все

це вже ентерпрайз як джава

плюсы уже все

Багато років чую «плюси всьо» але шось вони ще не «всьо»

ща раст рулить начинает

Расту вже 9 років, а так рулить, що на доу аж 1 вакансія по ньому. Цю мову хоч хтось юзає поза межами Мозілли?

на доу аж 1 вакансія

а на доу, то це все міняє, цепепе рулез на доу

Не розумію натяку, пропонуєш на OLX пошукати?

C++ также сейчас на пике своего развития

Из С++ собираются new выбросить и это можно назвать пиком развития?

і як тоді розміщати дані в кучі?

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

шутка це «С++2Х без вказівників»

Интересно почитать про C++ без new.
Поделитесь ссылкой, если не затруднит.
Даже если это фейк. Слабо вообще верится.

Слабо вообще верится.

Если не превоапрельская шутка...

www.modernescpp.com/index.php/no-new-new

Так это ж та самая первоапрельская шутка, что выше упомянута. И таки да, там «обещают» сырые указатели выпилить. Очень граммотно составлена и на нескольких ресурсах под разными соусами растиражирована в своё время перед первым апреля.
Но плюсовика сложно обвести, джуна разве что. Суть-то Плюсов в «обратной совместимости» с Сями.

Коментар порушує правила спільноти і видалений модераторами.

А конструктор как вызывать? Опять же placement new. Ещё варианты?

а що конструктор тільки при new та все, а як тоді на стеці об"єкти створюються?

Разговор, мне показалось, был о том, мол, как данные на куче выделять и инициализировать. Тут действительно комбо из *alloc + placement new / free + ~dtor работают.
Может я что-то упускаю? Как тогда данные на куче создавать?
(смарт-поинтеры и контейнеры, чур, не в счёт)

Суть саме в тому, що нефіг створювати на кучі не у смартпоінтерах, або контейнерах.

Доводилось мне работать над поисковым движком. Я там такие структуры таких вложенностей видывал.
А как один и тот же объект в несколько контейнеров поместить?
(чур, про shared и intrusive поинтеры не писать, там накладные расходы, как минимум по памяти, а то и атомарные счётчики, и да, я в курсе про кольцевые shared’ы, но... не надо нам Java лепить, где уши ключевых синтаксических сущностей из стандартной либы торчат, ибо не аккуратненько)

P.S. Под кольцевыми shared’ами я имел в виду не циклическую проблему ссылки поинтеров на самих себя, а стратегию реализации таких поинтеров, где вместо счётчика ссылок используется кольцо указателей, список иными словами, в котором нет накладных расходов по производительности и памяти (ну почти), зато есть проблема синхронизации в многопоточном окружении...

Та мабуть ніяк. І як вам new допоможе в цьому? Поінтер пхайте і моліться, щоб він не протух. Індекс/ітератор у контейнері власнику ще можна пхати (але він не далеко від поінтера по безпеці пішов).
Це не те, щоб ніколи нізащо правило і якраз для контейнерів самописних той випадок, коли дуже може бути, що воно треба. Але загалом — нефіг.

А що там, стекпоінтер смикнули, конструктор викликали. Приймайте)

Можно пример кода, пожалуйста?

Молодой человек,
это разве Плюсы?
Знали бы, что я на перфоленте могу — целую машину Тьюринга...

Нуу коменатор вище правильно почав, через супер-пупер хаки так можна викликати конструктор де завгодно без new:

1. Створити функцію де об’єкт буде створюватись на стеку, ніде її не викликати. Можливо ще треба вимкнути всі оптимізації через #pragma optimize щоб нічого потрібного не повидалялось компілятором.
2. Написати купу платформозалежного коду для пошуку констуктора в нашій функції (це виклик call 0xE8 але знову ж таки не завжди гарантія, може бути і jmp або взагалі заінлайнитись, тому і треба вимикати оптимізації для цієї функції)
3. Маємо адресу конструктора, викликаємо malloc, викликаємо конструктор за адресою, першим параметром передаємо з malloc вказівник. (знову ж таки купа платформозалежного коду).

В результаті має вийти шось таке:

class A;
void foo()
{
A a;
}
auto ctor_addr = find_ctor(foo);
auto ctor = reinterpret_cast< A*(__thiscall*)(void*) >(ctor_addr);
auto ptr = malloc(sizeof(A));
auto objA = ctor(ptr);

На практиці таке рідко юзають і шукають конструктор по всій програмі за сигнатурою.

Вы такое не показывайте массам, ибо убивают.
А вообще, в мире Windows, я и не такое щупал.
Дописка:
Хотя не факт

Під GCC майже так само все працює

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

Конструктор зовём напрямую, для глобальных/статических переменных и для стековых объектов. Для объектов на куче — либо обычный new, либо placement new.
Припоминаю, что деструктор можно хаком в лямбду обернуть, но конструктор — увы. Ссылку на него никак не получить в текущих версиях языка.
Сам удивляюсь, почему конструкторы/деструкторы поименнованные, типа ClassName/~ClassName, а не, например, constructor/destructor. В последнем случае можно было бы обойтись всякими malloc’ами и шаблонной магией.

что первый язык — мощный, интересный, весьма приятный

мусье знає толк в збоченнях

Увы, но доля правды в этом есть.
P.S. Приятным он становится с мидл+ левела.

C++ — не для слабых духом.
Будь готов учиться всегда: и через год, и через пять, и через пятнадцать. ВСЕГДА.

Будь готов учиться всегда: и через год, и через пять, и через пятнадцать. ВСЕГДА.

Вот поэтому разработка на С++ теряет смысл и области применения.

например сейчас после работы изучаю «С++17 STL cookbook, Galowitz J.», советую кстати, ничего лишнего в ней.
Но постоянное обучение требуется не только если подсел на c++, но и для других технологий. Где-то больше, где-то меньше, зависит от темпов её развития.

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

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

Ще зауважте, що співвідношення жаба жун/жун вакансія більше, ніж для С++. І наче у рази.

С С++ можно легко перейти на Java, а вот обратное не верно.

Часто наблюдал обратное.
Вроде вырвиглазного snake_case стиля и «аля-деструкторов» в finalize у вчерашних c++ синиоров.

В java таких моментов раз-два и обчёлся да и относится оно скорее не к умению программировать, а к знанию того что и когда надо применять, что можно запомнить максимум за месяц. А вот с умением работать с памятью/ресурсами/структурами/алгоритмами за месяц не научишься. Я уже молчу про подводне камни С++.

В java таких моментов раз-два и обчёлся

В java FAQ по одним женерикам занимает 400 страниц.

Я уже молчу про подводне камни С++.

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

можно легко перейти

не 400, а 350. Причем большинство из всего этого добра, это разжёвывание одного и того же под разными углами, не более того. Если взять по плюсам какой-то момент и начать его так же разжёвывать... там я думаю побольше страниц будет.
И опять таки, главное отличие это в том что С++ понятийно шире чем Java.

Смотря что ты больше любишь, деньги или секс. Если первое то Java , если второе то C++

перших 5 років збочений секс задармо, причому не ти, а тебе

Пайтон это уже БДСМ 😂

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

Я б не сказал, мол, идиомы — и всё.
en.m.wikibooks.org/wiki/More_C++_Idioms
И это только ещё двадцатилетней давности идиомы, сейчас — поновее подоспели...

по опыту работы как с западными заказчиками (ок скорее американскими но европейцы насколько я слышал и доходило тоже примерно так) в «оттуда» по крайней мере половина реальных кодеров это такие себе «универсалы» т.е. пишут одинаково и на си++ и на джава то что они пишут «одинаково средне» и скорее в духе «программист на фортран может писать на любом языке как на фортран» (к) (тм) это уже другая история

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

В целом полагаю что задачи на плюсах будут интереснее чем на Java или .Net. Потому что в основном это crud разного рода и прикручивание кешей/очередей.

та примерно одинаково только круды кеши очереди разного рода разные но суть примерно одна ))

Материалайз делает курсы по C++. Можешь пробовать мониторить или написать поинтересоваться.

Сейчас конечно готовься к набору на курсы... Кстати совсем не факт что тебя наберут то. А там посмотришь. По-моему с работой для Джавистов заметно попроще...

На С++ проекти та задачі будуть цікавіші, але так — складніше буде і в технічному плані, і в плані пошуку роботи для джуна. Java — більший ринок і потенційно більза ЗП, але трохи нуднувато. Як на мене — поки молодий (нема дружини, дітей, іпотеки) треба робити те, що цікаво. Зі зміною життєвих обставин можна розглядати перехід у менш цікаві, але більш прибуткові сфери.

Не было бы в Украине проблем с образованием, этот вопрос даже не стоял бы.

На тех же плюсах в вузах могли бы не лабы с практическими работами пихать который год подряд, а каких-нибудь роботов или даже беспилотные модели автомобилей делать, затянуло бы не только лишь всех. А выпускники могли бы потом скинуться на полномасштабное авто для вуза, для следующих версий беспилотников.
На Udacity как минимум два курса по self-driving car, на Udemy как минимум один.

И тут факультеты механиков, электриков и прочих инженеров были бы в деле. Даже какие-нибудь гуманитарии могли бы быть подключенными.

Вместо этого студенты нихера не понимают: «Что я такое? Зачем я здесь? Какова моя цель?».

А выпускники могли бы потом скинуться на полномасштабное авто для вуза, для следующих версий беспилотников.

Зачем. Убер нормально себе тренирует селф-драйвинг на модельках, а студикам надо авто?

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

Можно на чем угодно, но потом выпускники будут плавать на боевых задачах.

Тренировать нейронку на игре — одно, а «от и до» собрать авто с нужной начинкой и затем уже обучать — совсем другое.

И тут факультеты механиков, электриков и прочих инженеров были бы в деле. Даже какие-нибудь гуманитарии могли бы быть подключенными.

На боевой задаче:
Дано: создать небольшой завод по переработке отходов.
Наш «обучатель нейронок по ГТА», которого, вроде как, учили на инженера: «я умею тока в игрухах делать „вжжжж“».

Таких примитивов лично встречал.
Например, считает в фотографии понятие «выдержка» чем-то вроде выдержки вина или сыра. Про нейросети лучше не спрашивать даже, понимание ниже плинтуса. А учился на инженера.

Ясно. Зараз би сіплюсплюснику заводи створювати.

Напомню, я начал с СО и вузов.

В вузах все еще готовят универсалов.
Только техническая база часто раскрадена, а на теоретическую забивают болт, до сих пор пихая в учебную программу давно устаревшие ЯП, например.

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

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

Авто — как пример системного подхода, в котором применяется широкий спектр инженерных дисциплин.
Не учить же в вузах созданию авто по "гаражам"/"магазинам" из игры «Need for Speed»?

В вузе, условно говоря, должна даваться база под написание своего компилятора или трехмерного движка. Иначе вуз нахер не нужен. Работать с готовыми можно научиться и на каких-нибудь курсах за несколько месяцев.
Это как разница — собрать авто или просто уметь водить.

И еще, раз у нас тут эпоха клипового мышления: речь про вузы.

imo, на начальном этапе имеет смысл налегать на фундаментальные знания (CS, ML, etc), и не имеет смысла налегать на прикладные (языки и фреймворки).
Для джунов важна обучаемость и хорошая база. То, что вы книжку по java/c++ прочитаете — не особо кого-то впечатлит.

якщо задача гарантовано знайти роботу, то джаваскріпт і нода.

trends.google.com/...​07sbkfb,/m/0jgqg,/m/01t6b

и более интересным задачам

Дуже сумнівне твердження.

Монтана с Южной Дакотой прям последние оплоты С/С++

Краще зайти через Java, а С++ можна вчити. Коли будеш мати 1-2-3 роки досвіду, свічнутися на С++ без втрати буде доволі нескладно, якщо не закинути С++. Але на С++ реально робити малувато))

ага, а потім писати на С++ в стилі жаби

краще так, ніж ніяк, якщо С++ прям дуже подобається))

Хотелось бы вступить в связь с С++

Цікаво 🤔

цікаво, чи спитали у С++ згоди

І головне щоб були не молодші C++03 (старше 16 років)

Типичный случай, интересно, но хочу быстрей начать рубить бабло. Я не парился и учил С++, потому что было интересно. Да, с поиском работы было сложновато, но её нашёл, и нет никаких проблем. Было бы желание этим заниматься.

Java и только Java. Можно еще JavaScript. Ruby на любителя

Потому, что Microsoft сдаёт позиции. С рынка мобильных устройств вылетела полностью, при том что технически WP была довольно хороша.

Но на десктопе она в лидерах. Плюс платформа нет сейчас активно развивается в сторону кроссплатформенность.

Рынок с десктопным железом отходит на второй план. Разработка под WinRT и WinStore не сильно интересна. Еслиб MS не пилила свои продукты в сторону кроссплатформенности, то разговаривать вообще было бы не о чем. Не удержала занятые 10 лет назад позиции.

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

Так и есть, даже виндовс-кернел отдали в организацию которая занимается ажуром. А сам виндовс в девайс и експириенс.

Ну не совсем так, не совсем по остаточному принципу, ДиЕ это тоже один из китов на которых Майкрософт стоит в том числе и в плане выручки но сам по себе виндовс это только один винтик в этом ДиЕ. Это далеко не основной продукт.

Основное их направление разработки сейчас — облака.

И какова их рыночная доля во впаривании своих услуг? 90% как у венды раньше?

Это... макрософт тут давеча телефончик на андроиде призентовала складывающийся

Это прорыв, я считаю.

Потому, что Microsoft сдаёт позиции

Просто таки котиться у прірву: www.nasdaq.com/...​rket-activity/stocks/msft !

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