Conference for DevOps, Software Architects and Engineers. Register until August, 22!
×Закрыть

Можно ли претендовать на C++ Junior’а с такими знаниями, как в моем проекте?

Уважаемые специалисты, подскажите пожалуйста могу ли я претендовать на должность Junior C++ с такими знаниями, как в моем проекте:
github.com/Bigstorm20008/CrazyTank3

Я учусь самостоятельно, поэтому подсказать и оценить некому.
Заранее спасибо.

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

Ребят, похоже на вброс, вы обратили внимание сколько топиккастеру лет???

Имхо, чувак явно Миддл. Смысл себя позиционировать как джун с таким кодом??

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

Блин, не увидел что ты с Николаева, там возможно другая коньюктура на рынке

Да у нас тут вообще только Senior C++ берут, с новичками не хотят заморачиваться)

Ты бы еще в селе Кукуево С++ искал. Вариант у тебя один понаехать в Киевы, Львовы или на крайняк Харьковы.

))Да вот пытался в Одессу понаехать. Они были против)))

У тебя таких попыток еще 20-30 будет, пока собеседования научишься проходить.

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

да нет)) я слышал, что устроиться довольно тяжело.... Вот сейчас прочувствую)))

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

Если рассматриваете переезд,укажите в резюме готовность к релокейту в том же djinni.com, либо на Линкедине.

Да к переезду готов) Спасибо, укажу, я просто недавно начал использовать эти сервисы для поиска работы. Еще не успел все заполнить как следует.

Почитайте на djinni рекомендации,как джунам заполнять профиль+нормально указывать в пожеланиях к работодателю ,например,помощь в релокейте итд. Успехов)

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

Хотя мне кажется, что если я смог таких результатов добиться самостоятельно, то смогу добиться гораздо большего, если будет наставник и будет на кого равнятся)

то смогу добиться гораздо большего, если будет наставник и будет на кого равнятся

С си/"плюсами" всё зависит от конкретного проекта. Есть проекты, где «плюсы» не пользуют вообще. В других проектах пользуют урезанную версию плюсов (98 стандарта), без исключений, стл, буста, с кучей ограничений по темплитам, итп. В иных проектах используют лишь новейшие стандарты, с бустом, итп.
В общем, куда попадёшь...

Ну насколько я понял, сейчас многие возвращаются к плюсам. Да и сам язык продолжает развиваться. Ну и после плюсов легче выучить другие) Я параллельно читал про C++/CLI. Он вроде достаточно сильно похож на C#. Правда пока не пробовал писать на нем особо. К C++ сильно прикипел. Люблю сложности)))

C++/CLI

Не рекомендую смысла никакого нет. При наличии C# смысл сразу заниматься последним он «прямо ближе» к .NET.

Ну это я вроде понял, просто в ознакомительных целя пробегал главы по С++/CLI

Айвор Хортон — Visual C++ 2010. Полный курс (Программистам от программистов) — 2011

сейчас многие возвращаются к плюсам.

Нет. Просто в конкретных проектах свои ограничения, в том числе и по языкам и их вариациям.

Не нужен тебе наставник. Просто устраивайся на работы и набивай руку и стаж.

Надо тренироваться решать задачи на бумажке)

Зачем на бумажке, есть же топкодер, хакерранк и ко. Там и соревнования на время проведут, и рейтинг посчитают.

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

Прохождение собеседований — отдельный навык и не сильно связанный с работой и твоими навыками и знаниями.
Собеседования — это такой танец токующих на току.

Трішки переглянув код. Зараз до джунів дуже великі вимоги. На трейні спокійно взяв би з таким проектом. А на джуна потрібно було ще пройти співбесіду.

Напишу свої зауваження.

1. Замість складної конструкції:
std::vector<Direction> checkedDirections; checkedDirections.reserve(directionCount); checkedDirections.push_back(direction_);
Можна простіше
std::vector<Direction> checkedDirections = { direction_ };

2. В одному і тому ж файлі то є this-> для доступу до локальних членів, то ні. Вибрати один стиль.

3. Definition пустих конструкторів і деструкторів в cpp файлах не потрібні. Краще використати = default;. Навіть більше, якщо деструктор не віртуальний, то навіть не треба його оголошувати.

4. Потрібно користуватись статичними аналізаторами коду: Cppcheck, ReSharper C++, clang тощо. Наприклад, змінна bool directionFound = false; в EnemyTank.cpp не використовується і її можна спокійно видалити.

5. Не потрібно перевіряти змінну на nullptr перед її видаленням.
Замість
if (input_ != nullptr) { delete input_; input_ = nullptr; }
можна спокійно писати
delete input_; input_ = nullptr;
А краще взагалі не використовувати голі вказівники. Лише smart.

6. Англійська неідеальна. Можна поставити spell checker плагіни і перевіряти код. «foundedObject» — «foundObject».

7. Для релізів exe файлів в GitHub є окрема фіча «Releases».

8. Назви комітів у Git повинні бути осмисленими. Коміти — це найкраща історія та документація проекту.

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

послушать критику

...и критику на критику :)

5 замечание особенно хорошее. Более 20 лет на С++ пишу и всё одна периодически грешу этим.
Хотя и вреда и пользы от такой проверки 0. Но мне кажется, что современные компиляторы при включении оптимизации выкинут её за бессмысленностью.

но ведь если попытаться удалить нулевой указатель — вылетит ошибка?

Нет не вылетит delete и delete[] безопасные к нулевым указателям.

И хорошо, что напомнил новичку. Важно ему не путать delete и delete[].

Нет. Это корректное поведение delete.

в книжка вроде написано всегда проверять, правда там if(input_){ do somesing()) как-то так

Зависит от ресурса. delete для NULL корректен всегда. А вот для мусора вызвать delete получишь «системное исключение» — в винде одно в линухе другое.

«Це знають ще у яслах малі діти, що лучше перебдіть, ніж недобдіти» ©

Відразу кидається в очі if (isReadyToFire() == true) { ... }. Пишуть же простіше if (isReadyToFire()) { ... }.

нет
мало того: if (true == isReadyToFire())

Пічалька тоді, якщо так прийнято на проекті.

печалька, если НЕ принято
код должен быть читаемым
код должен быть фулпруф

Можливо, геймдев-проекти не писав.
Скажу, що в clang і кількох відомих open source проектах, які читав, такого коду не зустрічав.

Так хіба в C прийнято, тому що там немає bool.

Дядя шутит никто так не пишет.

Так хіба в C прийнято, тому що там немає bool.

Но чисто теоретически таки да есть проекты в который свой BOOL и чисто технически он может и не быть TRUE = 1 FALSE = 0 ну или вот такие конструкции:

if (True(_something_)) { ...

А вообще это показывает практику кривости проекта и значит там кроме этих «кастомных условий» будет ещё вагон и маленькая тележка «палок говна велосипедов и костылей». Причём не только в коде. Я проверял. ))

Дядя шутит никто так не пишет

дядя ни разу не шутит

Пишут

if (true == _something_) { ...

? а ну ок но тут уже словами классика «а каждый больной больной по своему» (к) (тм)

думал, не нужно обьяснять причины этого, но, видимо, ошибся

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

Какая причина этого была у вас?

С точки зрения переносимости (portability) полезно. А если переносимость пофиг — зачем заморачиваться с с/с++ ?

С точки зрения переносимости джава рулит! ))

ЗЫ: а почему с точки зрения переносимости полезно?

Ни хрена она не рулит. С HiDPI до сих пор не разобрались. В каждом проекте на жабе свое уникальное решение для оного.

Да вы батенька тролль знатный! ))

Так правду ж пишу. В одних продуктах на жабе сами разрабы научились HiDPI корректно поддерживать (таких единицы в мире), в других шаманство предлагают (таких чуть больше, чем первых), в третьих до сих пор не научились (этих процентов 90) и только исправив их код, шрифты нормальные увидишь.
Для кучи языков гуевая часть или либы умеют HiDPI, а в жабе все еще в начале 2000-х многие

Для кучи языков гуевая часть или либы умеют HiDPI, а в жабе все еще в начале 2000-х многие

Если честно я не слышал чтобы «для кучи языков» вообще GUI были а джава так она же ж для суровых корпоративных приложений какой ещё там HiDPI? Там где HiDPI там GUI на айфонах ))

Только куча спецов успела наделать профессионально софта на Жабе, наслушавшись сказок про ее кроссплатформенность.

На уровне без сторонних либ С уделывает все языки по кроссплатформенности.

потому, что легко написать (something = true) (защита от дурака)
и ясно-понятно (в т.ч и компилятору), что something это булеан

я думал, что это настолько очевидные вещи, не требующие какойто дополнительной аргументации

я думал, что это настолько очевидные вещи, не требующие какойто дополнительной аргументации

)) в том-то и дело что я понимаю что вы не понимаете о чём вообще речь но конкретно здесь ну ок имеет смысл писать:

if (true == _something_) { ...

Вопрос зачем вообще писать (true == ...)?

И тогда и продолжение следоватально везде где только есть true/false следует писать так же? В частности надо полагать то же самое следует делать в частях логического выражения:

if (true == (_something_1_) && true == (_something_2_) && ...) { ...

А также при возврате параметров при передаче параметров и при присваивании / инициализации:

...
bool is_something = true == _something_;
DoSomethingElse(true == is_something);
return true == is_something;

Или это уже не обязательно? Если не обязательно то почему в одном случае следует писать а в других случаях нет?

Вступлю немножко в ваш спор)
вроде как так правильно из того code style что я читал...
bool isSomething = какое-то условие;
if(isSomething == true){
делаем что-то
}
else{
делаем что-то другое
}

Не пиши так. Это индусский стиль.
Но для отладки я часто юзаю такой трюк bool do_somethink = false
if (do_somethink)
{
ля-ля-ля
}
Это часто удобнее, чем #ifdef.

Хотя если порыть в интернете, то вроде и так и так пишут...

Вопрос зачем вообще писать (true == ...)?

читабельность
я об этом почти неделю назад сказал: dou.ua/...​rums/topic/24705/#1397290
но нет, же надо ткнуть лицом. ну ок
и кто тут чего не понимает?
2топикстартер: вам, конечно, выбирать, как и что писать. лично я ник чему не принуждаю. свою точку зрения и аргументы я привел
детский лепет, типа «так никто не пишет» оставим для баталий в форумах типа ру.ос.кмп

читабельность

ок принято именно про это я и сказал:

А вообще это показывает практику кривости проекта и значит там кроме этих «кастомных условий» будет ещё вагон и маленькая тележка «палок говна велосипедов и костылей». Причём не только в коде. Я проверял. ))
Так хіба в C прийнято, тому що там немає bool.

Там есть _Bool

Там — это где? В каком стандарте и в каких хидерах какого компилятора?

В 99 стандарте добавили.
Для всех остальных — #include <stdbool.h>

Вижуалстудия до 2012й не умела C99, его реализовали только для поддержки C++11 (который базируется на C99)

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

Так цих code style є 100500 в C++. Як прийнято в команді або проекті, так і краще писати.

Внешне код выглядит аккуратно. Пользоваться С++ в общем умеешь.
Так что позиция джун-мидл-сеньор определяется только твоим стажем работы и твоей «наглостью».
А вот твой действительный уровень часто связан еще с предметной областью и опытом в ней.

Ну и хочу тебя поддержать. Твой джуниорский код приятнее, чем сеньорский в tensorflow от гугла. Про OpenCV и не говорю, там еще тот ужас (такого наворотили, что не могут уже поддерживать С интерфейс).
Читать твой легче.

Спасибо, за Ваши отзывы и советы) Очень приятно)

чем сеньорский в tensorflow от гугла. Про OpenCV и не говорю

Есть мнение что там пишут «типа знающие си/си++» (к) (тм) но «не программисты» ))

ЗЫ: я проверял. ))

Их понять можно. В голову всё не влазит. Я вот тоже кучу всего и не запоминаю, а у гугла спрашиваю по С++.

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

За Гугл болеешь? Мой пост был к тому, что даже у так называемых сеньоров код бывает еще то дерьмо, у ТС же код читать можно.

вы только в стл не заглядывайте

Это не буст, в стл еще более ни менее прилично.

Дмитрий, если GameDev интересен, в Одесском офисе Nordcurrent открыта вакансия Junior C++ developer можете направить информацию о себе на почту: jobs-ua@nordcurrent.com

Здравствуйте, Ольга. Извините, что не ответил вчера. Возил ребенка в аквапарк). Конечно меня интересует gamedev. Игры я очень люблю, хотя их программирование считается наиболее сложным. Да и то, что Вы находитесь в Одессе мне идеально подходит. Только вот не нашел описания вакансии. Актуально еще?

Дмитрий, добрый день! Описание вакансии тут www.work.ua/jobs/3270230/
Если предложение интересно, жду Ваше резюме и могу направить Вам ТЗ )

Ольга Диунова
HR менеджер Nordcurrent Odessa
+38 066 998 69 90
skype: Nordcurrent Odessa
jobs-ua@nordcurrent.com
www.nordcurrent.com

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

Looked into some files. Imo, seems Ok for the first job in C++.

I would recommend:
- Learning more about data structures and algorithms, e.g. this is a good specialization — www.coursera.org/...​ata-structures-algorithms
- Learning Linux. Udemy has a lot of courses or of course YouTube. At least basic commands: find, grep, etc
- Learning Python, e.g. could be useful for system component tests but not only
- Reading www.amazon.com/...​ays-Improve/dp/1491903996 and similar ones
- Also this guy has got good videos about C++ www.youtube.com/...​anTheProgrammer/playlists
- Being willing to relocate

Also:

1. Add tests, e.g. use github.com/google/googletest and github.com/google/googlemock . To merge new functionality to a project, tests are a must-have
2. new GameController — use std::unique_ptr
3. std::cout << “Could not set control handler” << std::endl; — use std::cerr for such prints
4. BOOL and TRUE — inventing new bool type or it’s from some lib?
5. WorldObserver — virtual destructor is missing in abstract class
6. WorldObserver::WorldObserver() {} — could be replaced just by WorldObserver() = default
7. std::vector> vectorOfEntities ; ... void addEntity(const std::shared_ptr& gameObject); — why is std::shraed_ptr passed by reference and previously by value? And probably smart pointer is not needed at all and simply creating objects on stack and returning const reference would suffice; std::vector> seems overkill
8. World::~World() { actor_.reset(); vectorOfEntities_.clear(); } — dctor of those objects will do that job, and you can just make it = default;
9. objects::GameObject* const findEntityAtPoint — I would replace pointer by smart pointer or better reference
10. class World : public ObservableWorld — It seems that World is more general but you are inheriting from more specific world, I would change names
11. [&](const std::shared_ptr gameObject) — if you have too long lambda, from C++14 you can use auto for params
12. findObjectInRectbyId implementation in World.cpp seems too large, another function could be extracted
13. std::vector> createWall — factories should return std::unique_ptr. It can be converted to std::shared_ptr but not vice versa
14. return std::move(wall); — std::move here is not needed
15. namespace objects ? Sounds like namespace everything
16. should not methods in StatesConstans be static?
17. static std::shared_ptr getInstance(); — I’d return const reference and std::shared_ptr is overkill; we have got static there
18. explicit Point(const int& xPos, const int& yPos) — pass by value, passing int by value will be faster than passing int by reference; copy of 4 bytes outperforms going to the reference variable and then dereferencing it to get its value
19. You apply std::move to Point but you also define dctor for Point and not move ctors — i.stack.imgur.com/Zz2yJ.png
20. Use CMake or something similar

Ого!!! Спасибо огромное. Какая большая работа была проделана Вами, еще и с объяснениями и ссылками.

Переехать конечно готов, у меня в городе ловить нечего(

Блин спасибо еще раз) Столько полезных замечаний) Некоторые ошибки прямо совсем глупые)

Sorry my English is not very well, and i don`t know if you understand russian.
I will try to unswer in English. Thank you for your work was done.
I have got a lot of useful remarks and your explanations. Хотя судя по имени Вы русский знаете)

18. explicit Point(const int& xPos, const int& yPos) — pass by value, passing int by value will be faster than passing int by reference; copy of 4 bytes outperforms going to the reference variable and then dereferencing it to get its value

Это микрооптимизация. Но обычно такое не передают по ссылкам, а по значению — оно в регистр помещается. Но, если у тебя шаблон, то таки ссылка лучше.
Ну и я детально не смотрел, но по ревью выше, почитай еще раз про конструкторы и деструкторы в С++. Похоже в этой части ты пока плывешь.
И не забывай, что половина моментов в этом ревью для новых компиляторов и стандартов. В большой части проектов еще даже на С++11.

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

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

Власне скілл проходження співбесіди(особливо, якщо говорити про розмову англійською), чітко і однозначно відповідати на питання, це, нажаль, те на що мало звертають увагу кандидати, але іноді це відіграє вирішальну роль. Тому я радив би при підготовці окрім C++ core, STL, алгоритмів і структур даних ще підтянути скіл «говоріння».

По коду ничего не скажу — не сишник, но ввали силы в английский. Что такое более менее в твоём понимании я не знаю, но на проекте в 90% случаев ты общаешься с кем-то со стороны заказчика, так что могут быть кейсы, когда возьмут человека на джуна с меньшими знаниями программирования, но с большими знаниями английского

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

На уровне чтения — легко. По-крайней мере много информации я получал на MSDN, а там много всего на английском. Спасибо за совет. Я тоже думаю, что новичку врядли доверят общение с заказчиком. А по поводу компаний к сожалению у нас всегда хотят как минимум 3 в 1( И это не только в IT

Не бери дурного в голову, все у тебя получится

а вот с линуксом опыта нет совсем( только Windows. Есть небольшие знания в RDBMS SqlServer и Transact-Sql. Как раз перед этим проектом занимался, на гите есть

Это не айс. Найди видео курсы lpic-1 и послушай чтобы иметь общее понимание концепций.

Если не полезешь в ядро, но там больше С, чем С++, то за 1-2 недели наберешь нужного опыта.
Просто старайся писать сразу кросплатформенно, а платформозависимые части выносить в отдельный слой (функции, классы-обертки поверх платформозависимого).
Просто поставь рядом с виндой линух и собери свой проект там, полазь в дебаге, поотлаживай и считай, что опыт прикладного (не системного) программиста в линухе у тебя есть.
Для системы сборки кросплатформенной СМаке сейчас неплох.

Перестань это никак не для джуна совет ))

Да ну. По-моему сразу приучает к определенному порядку и мышлению.

Слона надо есть по кусочку (к) (тм)

Но кусочки правильнее отрезать от правильных мест.

helpers::RandomEngine* engineInstance = nullptr;
const auto randomEngine = engineInstance->getInstance();

выглядит странновато, даже с учетом что getInstance static

ну и куча других мелких вопросов, но в целом не плохо

Ох, про Миколаїв хз, а от у Києві чи Львові можна було б.

Да в Николаеве только GlobalLogic, и там С++ не в тренде( Нужно искать в другом городе

Если вы вызываете reserve, то можно сразу на middle :)
P.s. если хотите использовать этот проект в резюме, то добавьте комментарии.

ну это врядли))) хоть бы джуниором где-то взяли)

поверьте, куча сеньоров не понимают, что это такое и зачем.

Хреновые вам встречались сеньоры :(
Там, где я работал (кроме самой первой работы, которая была не в IT-компании), любой джуниор понимал такую базовую вещь.
Другое дело, что иногда люди могли забывать вызвать reserve. Или забИвать, если место явно не перформанс-критикал и уж точно этот резёрв там ни на что не повлияет по факту.
Но знали буквально все.

На миддла можешь претендовать, если знаешь про boost::small_vector (или аналоги) и понимаешь, почему такая вещь в некоторых случаях будет работать заметно быстрее, чем std::vector с резёрвом =^__^=

На миддла можешь претендовать, если знаешь про boost::small_vector (или аналоги) и понимаешь, почему такая вещь в некоторых случаях будет работать заметно быстрее, чем std::vector с резёрвом =^__^=

По моему нескромному опыту такие вещи не только 146% лишние но и более того 146% за такими «миддлами знающими про маленький пипектор» (к) (тм) ещё разгребать и выгребать. Я проверял.

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

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

Нужна фича — используйте. Не нужна — не используйте. Всё просто.
На смолл векторах весь LLVM построен, если что. И в геймдеве они очень популярны.
Там все дураки, один вы умный? Что-то слабо мне в это верится.

Не говоря уже о том, что данная small size оптимизация — вещь куда более глобальная и распространённая, чем какой-то там «пипектор». В той же стандартной библиотеке плюсов на ней строятся как минимум std::string и std::function.

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

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

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

А это и есть реальные проекты там пони не какают бабочками там кого набрали те и срут других нет.

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

Если на ваших проектах такого не было — не значит, что такого нет нигде. «У меня нет машины, следовательно, машин не существует» — логика, сами понимаете, такая себе.

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

А если «что-то не то написал» давно нанятый архитектор?

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

=>

«У меня нет машины, следовательно, машин не существует»

Скучно )) таки уровень как иллюстрация да именно такой как я написал с реальными людями с какими приходится работать.

А если «что-то не то написал» давно нанятый архитектор?

Сейчас мы говорили о «миддлах, знающих про маленький пипектор (к) (тм)», а не о давно нанятых архитекторах.
Если архитектор на проекте творит дичь... Что ж. Всё плохо.

=>

Ноуп, это не «=>». Я никогда не утверждал, что раз я не попадал на проекты с бардаком, значит таковых не существует.

Если архитектор на проекте творит дичь... Что ж. Всё плохо.

Все творят дичь. Так есть. Думать об этом «хорошо или плохо» здоровья не хватит. Я проверял.

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

Фишка здесь в том что «ты утверждал на проекты попадал» с позиции чувака с опытом 3 лет выступая перед чуваков с опытом в 23 лет у которого среди прочего в т.ч. на проектах таких чуваков «с опытом 3 лет и пипектором» в среднем есть больше 1 и соотв. разных и с одной стороны конечно можно накричать можно избить можно уволить но см. п.п. «так есть» и соотв. так или иначе чуваки же ж работают и других нет приходится как-то изворачиваться и прокладываться между «желали странного пипектора» и тем что на проекте буста нет и что внедрение буста это такой супер-мега-вообще чейнж который надо будет протягивать полгода через 8+ «верхних инстанций» а даже если он и есть «маленький пипектор» вполне служит достаточным чейнжем чтобы его «зарубил на ревью» тот самый «архитектор сверху» и с ним нельзя спорить потому что он решает бабло а вот со мной получается можно и таки все эти «с опытом 3 лет и пипектором» таки и спорят что собственно непосредственно прямо сейчас делаешь и ты )) и это тоже среди прочего точно такая же ж реальность реальных проектов см. п.п. «так есть».

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

Я проверял. ))

Все творят дичь.

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

Фишка здесь в том что «ты утверждал на проекты попадал» с позиции чувака с опытом 3 лет выступая перед чуваков с опытом в 23 лет у которого среди прочего в т.ч. на проектах таких чуваков «с опытом 3 лет и пипектором» в среднем есть больше 1 и соотв. разных и с одной стороны конечно можно накричать можно избить можно уволить но см. п.п. «так есть» и соотв. так или иначе чуваки же ж работают и других нет приходится как-то изворачиваться и прокладываться между «желали странного пипектора» и тем что на проекте буста нет и что внедрение буста это такой супер-мега-вообще чейнж который надо будет протягивать полгода через 8+ «верхних инстанций» а даже если он и есть «маленький пипектор» вполне служит достаточным чейнжем чтобы его «зарубил на ревью» тот самый «архитектор сверху» и с ним нельзя спорить потому что он решает бабло а вот со мной получается можно и таки все эти «с опытом 3 лет и пипектором» таки и спорят что собственно непосредственно прямо сейчас делаешь и ты )) и это тоже среди прочего точно такая же ж реальность реальных проектов см. п.п. «так есть».

Эту часть не осилил, сори. Почему ты не используешь запятые и не разделяешь текст на предложения? Это как читать неотформатированный код. Разобраться можно, но не быстро и уж точно не бесплатно.

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

Обобщая твой 23-летний опыт, ага. И экстраполируя его на всех. Я под твои умозаключения не попадаю никак, поэтому меня это и возмутило, когда всех под одну гребёнку без разбору.

Я категорически не согласен, что всё начинается с «маленького пипектора». Если человек знает о таком — ему это только в плюс.
А дичь начинается с некомпетентности нанятого разработчика, который мало того что знает про «пипектор», так ещё и суёт его без спроса куда не надо, и не считает нужным обсуждать такие вещи с коллегами. Тут не его «избыточные» знания виноваты, а его неумение/нежелание работать в команде и/или завышенное ЧСВ.

boost::small_vector

на куче собеседований на синьорию такого не спрашивали нигде))

ну я вроде как пытался писать самодокументированный код

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

Не нужно. Хочешь доку — юзай doxygen.
А ТС разумно было бы в стиле доксиджена комментов в важных местах повесить.

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

Да нормальный код у тебя с большего.
Только разберись еще с make, cmake, doxygen, как инструментами. В работе полезно.

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

при чем тут алгоритмическая сложность? при частых реаллоках основная проблема — фрагментация памяти

Ну а с частым reserve фрагментация лучше не будет (а с редким — не важно). Алгоритмическая сложность при том, что постоянно изменяя размер вектора, реаллокацию c рантайм задержками мы вызываем достаточно редко. То есть не будет реаллока на каждый чих. Обычно на каждое удвоение размера, но не обязательно. А дергая reserve где-то внутри, точно лучше не будет. А снаружи ничего не выигрываем.

Это просто помимо того факта, что это premature optimization, где бы сначала померять.

UPD: www.quora.com/...​-Assume-default-allocator про amortized constant time of push_back.

суть резерв, что его звать нужно один раз за весть лайфтайм аппы. иначе, да, алгоритм преаллокации как правило умнее

один раз за весть лайфтайм аппы

имхо маленькое утрочнение «за весь лайфтайм вектора» потому как если вдруг есть вектор у которого лайфтайм равен всему лайфтайму аппы и который делает reserve(...) то там уже всё криво задумано изначально. Я проверял. ))

Пример того что я так не делаю? А ну ок вот пример того что я так не делаю:

nop

— видите? Я так не делаю.

Dummkopfhysterischeprogrammiererin

шах и мат.

P.s. что и требовалось доказать.

Как долго изучаешь программирование? Как долго C++?

в течении года, полтора по 5-6 часов почти каждый день. Знаю только С++, соответственно программированием столько же занимаюсь

Я бы тебя взял, но вакансий сейчас нет

Не знаю, уже второй месяц на договорах сижу

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

да тут я нарушил правило где выделяешь память там и удаляешь. Хотел переделать и забыл. В функцию приходит обычный указатель, выделенный при помощи new (processEvent) и только после проверки сохраняется в умном указателе

Да я потом досмотрел — регистр переменной иной (вот, кстати, сбивает столку без ИДЕ) ... в принципе все верно вышло, но не логично нифига. Используйте std::shared_ptr, почему нет? В самом классе GameState запретите создание 2х копий (синглтон) и все.
Можно еще создавать сам объект класса вызовом статик метода его, который вернет шаредптр, а конструктор в приват. Таким макаром — вы точно можете отслеживать не создание второй копии из самого класса. Вообще это и есть идея ООП, если класс не хочет 2 копии, вот он и не должен позволят их делать. А внешние (к этому классу внешние) условности только мешают.

Я не копал, как он там у вас называется. Преположил логичное название. Пускай потомок определит, что нужно. Хотя в таком варианте, будет несколько излишне дублировано — в каждом потомке определять создание. Можно было бы завернуть простенький «создаватель» (фабрика) — шаблон, который френд всей этой иерархии (ну и желательно, там же описан рядышком).

Лучше не удалять ручками вообще. И не выделять сырым new без крайней необходимости.

Помимо прочих проблем, вы ещё и жертвуете exception safety с таким подходом: если между вызовом new и заворачиванием указателя в смарт поинтер вылетит эксепшен, память утечёт.

Выделяйте изначально через std::make_unique или std::make_shared (смотря какой смарт поинтер вам нужен) и не парьтесь.

Если шарить владение объектом ни с кем другим не нужно, и нет нужды в weak ссылках на него (способных проверять, жив он ещё или нет) — предпочитайте unique_ptr. Шаред_поинтерами часто злоупотребляют не по делу и переплачивают за неиспользуемые вещи.

Всем спасибо) Буду пробовать искать работу)

Именно. Просто рассылай резюме и займись плотнее английским, он очень часто нужен и не только в варианте читать.

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

Да мне много не надо) Хотя бы ворваться и опыта набраться) Все-таки когда спросить не у кого, намного сложнее. А там уже я смогу проявить себя)

В целом, неплохо, но я бы поработал над:

1. Осмысленностью коммитов (об этом уже написали, но все же): делать коммиты меньше, каждый коммит должен фиксировать одно изменение (максимум — несколько небольших, но связанных между собой), которое можно понять и просмотреть за пару минут.
2. Описанием проекта/комментариями. Если уж выкладываешь проект на github, позаботься о том, чтобы людям не нужно было судорожно тыкать в файлики с исходниками с целью понять, о чем проект. Сделай нормальный README.md: о чем проект, какие нужны зависимости, какая версия компилятора, etc. Если у проекта есть какой-то минимальный GUI (пусть и консольный), вставь в README.md пару скриншотов.
3. Понятной процедурой сборки проекта: напиши Makefile, опиши процесс сборки в README.md.
4. Структурой проекта: распихай сорс файлы по папкам, в идеале на верхнем уровне вообще не должно быть исходников.

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

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

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

Не нужно. Достаточно четко описать процедуру сборки. Примеров на гитхабе полно.

Только не советовал бы ему заморачиваться раньше времени в автотулами. Лучше сразу Смаке — он удобнее и понятнее автотулов.

Конечно можешь, только смысл...

Всмысле нужно еще подтягивать знания?

На C++ на сегодняшний день уже пейсать нечего, последние игры что писались на C++ были года 3 назад, под windows phone. Сейчас Microsoft к сожалению болт забила на мобильный рынок, и даже там акцент принудительно был смещён в сторону дот нета. Что там ещё? Писать ядро нового игрового движка на C++ ты врядли будешь.

Просто вложены силы уже в C++... Не хочется бросать да и нравится мне))) Хочу прийти к логическому окончанию и устроиться на работу)

На C++ на сегодняшний день уже пейсать нечего

омг

омг

Это точно, всем оставшимся разработчикам С++ на сегодняшний день уже за тридцатник как минимум.

поэтому нечего писать? логика...

уже за тридцатник

А вот и не угадал!

git ужасен, учись делать небольшие коммиты и поддерживать чистоту в репозитории (не включать бинарники, локальные файлы конфигураций, ...)

Как можно нормально сделать ревью коммита Release. Showing  193 changed files with 1,285 additions and 583 deletions я не представляю. Думай о тех, кто будет читать твой код.

Чел учился. Это все нормально.

как для евро-джуниора — норм
для украинского джуниора — конечно все плохо. ни тебе ангуляра ни вуй (или как там его еще)

ни тебе ангуляра ни вуй

Во-во, даже спринга завалящего нет :)

Если сомневаешься, значит да.

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

А що, буває такий рівень знань, що не сумніваєшся?

А я всегда сомневаюсь в том, что написал.

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