LINUX.ORG.RU
ФорумJob

портфолио для Junior C++

 


1

3

Всем привет.

Хочу посоветоваться с вами насчет своих репозиториев на github.

Достаточно ли этого для junior или этого мало?

Буду рад любой критике, подсказкам,унижениям. https://github.com/Pasha09



Последнее исправление: Pasha09 (всего исправлений: 1)
Ответ на: комментарий от DELIRIUM

у меня только на одном проекте мало коммитов, т.к я его писал еще до того, как научился пользоваться git.

Pasha09
() автор топика
Ответ на: комментарий от Twissel

Нет.) Просто Pasha уже было занято и я просто добавил 09.

Pasha09
() автор топика

Нафиг ты сюда это запостил? Сейчас местные тролли отобьют у тебя всякую охоту заниматься программированием. ЛОР в этом плане абсолютно бесполезен.

meliafaro ★★★★★
()

Поглазел пару минут. Вот что в голову пришло (не обращай внимания на невежливые формы изложения)

1. Добавить в Readme.md общее описание того, что код вообще делает и зачем он написан (просто для учобы или он реально может быть полезен для чего-то).

2. Если проект имеет что-то интересное (или полезное) то написать и про это («здесь-то решил попробовать такой-то алгоритм сортировки, и превозмог дефолтный из stl на 5%», например)

3. Не вижу лицензий.

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

5. .pro.user так же, как и 4.

QMediaPlayer *mPlayer;

...

mPlayer= new QMediaPlayer(this);

6. Тут (и не только тут)надо было не поскупиться на умный указатель, в данном случае наверное std::unique_ptr

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

Этого должно хватить на денёк-другой раздумий.

На джуниора вряд ли хватит, хотя я без понятия насчёт современного ойти.

jeuta ★★★★
()
Последнее исправление: jeuta (всего исправлений: 2)

Как писать сообщения к коммитам читать здесь.

*.sdf, *.suo, *.exe, *.pro.user нафиг выкинуть из репозитория (.gitignore). *.dll тоже странно выглядит.

Здесь и в подобных местах можно было бы умный указатель использовать.

dataManagementListView::getInstance()->checkIndex(index)==false

Не надо так делать, лучше:

!dataManagementListView::getInstance()->checkIndex(index)

xaizek ★★★★★
()
Ответ на: комментарий от Pasha09

Лицензия на код и софт. Странно не знать о лицензиях на ПО с открытыми исходниками на форуме о свободном ядре ОС :)

Посмотре ещё минутку:

//get size
int* Cube::Size() {
	int *arrayXY = new int[2];
	arrayXY[0] = mPosXYpoints[7];
	arrayXY[1] = mPosXYpoints[3];
	return arrayXY;
} 

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

Я всё пока

jeuta ★★★★
()
Ответ на: комментарий от jeuta

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

Буду переделывать.

Pasha09
() автор топика

Возможно я сейчас раскрою вам секрет Полишинеля, но на портфолио очень редко кто смотрит.

Тем более у джуна.

trex6 ★★★★★
()
Ответ на: комментарий от trex6

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

Pasha09
() автор топика
Ответ на: комментарий от jeuta

mPlayer= new QMediaPlayer(this);
Тут (и не только тут)надо было не поскупиться на умный указатель, в данном случае наверное std::unique_ptr

В данном случае это необязательно, в Qt есть что-то вроде GC. Здесь, когда будет удалён объект, this которого был передан в конструктор, mPlayer так же будет удалён.

// Код в репозиториях не смотрел.


int* Cube::Size() {
	int *arrayXY = new int[2];
	arrayXY[0] = mPosXYpoints[7];
	arrayXY[1] = mPosXYpoints[3];
	return arrayXY;
}
inline QSize Cube::Size() const
  { return QSize(mPosXYpoints[7], mPosXYpoints[3]); }

Pasha09, вторая часть для тебя

XMs ★★★★★
()
Последнее исправление: XMs (всего исправлений: 2)
Ответ на: комментарий от XMs

Спасибо, интересно. А если я не буду использовать qt, то из stl есть возможность как-то заменить QSize или необходимо только через структуры передавать по значению?

Pasha09
() автор топика
Ответ на: комментарий от Pasha09

Ещё глянул немного.

Вот такие функции слишком большие, как по мне. Каждый case самодостаточен.

direction, «case 1». Есть же перечисления, в C++11+ «enum class». mPosition тоже на перечисление похоже.

К виртуальным методам override можно приписывать (некоторые предпочитают ещё и virtual опускать при этом).

using namespace std; в заголовке

Не надо так! Оно же попадает всюду, где этот файл включён.

xaizek ★★★★★
()
Ответ на: комментарий от Pasha09

p/s как здесь редактировать сообщение?

Внизу появляется [Править], но для этого может звезда нужна.

xaizek ★★★★★
()
Ответ на: комментарий от Pasha09

А если я не буду использовать qt, то из stl есть возможность как-то заменить QSize?

Делаешь свой класс/структуру и используешь, в QSize никакой магии нет. Просто два инта (для QSizeF — два qreal (float на армах и double на всех остальных)), конструкторы для удобства, вот и всё.


или необходимо только через структуры передавать по значению? /

Не понял вопроса. QSize — по сути, и есть готовая структура (класс, но тут не важно) для работы с размерами двумерных объектов. Точно так же, как QPoint — для работы с координатами точек, например

XMs ★★★★★
()
Ответ на: комментарий от xaizek

Насчет перечислении понял, спасибо.

Я использовал

using namespace std


потому что я хотел использовать только стандартную библиотеку в этом проекте. Я так понимаю, лучшей практикой считается отходить от using namespace. Буду иметь это в виду.  
Pasha09
() автор топика
Ответ на: комментарий от XMs

Да, не сообразил. Все теперь понятно, спасибо.

Pasha09
() автор топика
Ответ на: комментарий от Pasha09

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

потому что я хотел использовать только стандартную библиотеку в этом проекте.

Её элементы все в принципе привыкли видеть с префиксом std::, даже в Qt можно пространства имён включить и там тоже так будет, они просто исторически без них.

xaizek ★★★★★
()

Debug, Release, exe, pdb - правильно, коммить всё. А то вдруг мало будет. Это не junior, а только lamer.

rupert ★★★★★
()
Ответ на: комментарий от Pasha09

научился пользоваться git

Я бы так уверенно не стал выражаться.

rupert ★★★★★
()

Ещё одно замечание (полез-таки в код):

Space: rotate I did not use STL.

Что это значит?

XMs ★★★★★
()
Ответ на: комментарий от XMs

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

XMs ★★★★★
()
Ответ на: комментарий от Pasha09

или необходимо только через структуры передавать по значению?

Можешь через кортеж передать, а потом дописать в резюме «знаю C++17»

SR_team ★★★★★
()

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

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

Upd. Про хеллоуворлды - справедливо для джуна. Ибо знаю я одного типа у которого хеллоуворлды уровня потокового транспорто-независимого http парсера :)

pon4ik ★★★★★
()
Последнее исправление: pon4ik (всего исправлений: 2)
Ответ на: комментарий от XMs

Магические числа x и y определяют положение фигуры при старте. Если я правильно понял, то мне необходимо создать переменные для этих цифр, да?

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

Спасибо за замечание.

Pasha09
() автор топика

Когда мы набирали стажеров себе в команду мы таки смотрели на код. Вещи которые нам были важны (в порядке убывания):
1. Сколько у человека вообще проектов и коммитов. Если в CV написано «я страшно люблю прогать, и делаю это все свободное время», а в гитхабе полтора коммита, то значит где-то явное палево.
2. Умеет ли человек пользоваться гитом. Коммит-сообщения, правильный игнор, в идеале - ветки и мерджи.
3. Пишет ли человек грамотные жавадоки (мы смотрели джавистов), насколько оформление аккуратное.
4. Качество уже непосредственно самого кода.

morse ★★★★★
()
Ответ на: комментарий от Pasha09

Ещё понял, что ни я ни кто другой не вспомнил про тесты. Их, кажется, вообще нет. В тетрисе можно было бы проверить повороты фигур, их уничтожение, например.

xaizek ★★★★★
()
Ответ на: комментарий от Pasha09

Магические числа x и y определяют положение фигуры при старте

X и y — это не магические числа, тут всё понятно, за что они отвечают (к слову, в конструкторе их у тебя и нет). А вот что такое 5, 16, 17, 21, 23 и 24 — совершенно неясно. Предполагаю, что 21 и 23 — размеры поля, но остальное вообще ничего не говорит. Выполни декомпозицию, выдели отдельные объекты и создай для них свои классы — код станет в разы понятнее

XMs ★★★★★
()
Последнее исправление: XMs (всего исправлений: 1)
Ответ на: комментарий от XMs

Ой, я в конструктор другого класса посмотрел.

В конструкторе tetris я рисую границы(выделяя область), где будут падать фигуры и где будут показываться будущие фигуры. Перед обработкой конструктора Tetris я определяю размер окна консоли в конструкторе Frame.

В общем, я понял что там тоже надо переписать.

Pasha09
() автор топика

Задачки на LeetCode лучше порешай, а потом уже в прожекты.

snizovtsev ★★★★★
()

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

a1batross ★★★★★
()

Кстати, если хочется написать что-то потенциально полезное, вброшу идею: десктопный аналог compiler explorer. Его конечно можно и локально поднять, но оно всё равно будет в браузере, т.е. через жопу. Отдельное приложение могло бы позволять редактировать код во внешней программе (там на странице «продвинутый» редактор, который всё ломает) и использовать локальные #include без проблем, например.

xaizek ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.