• Не могу найти работу в gamedev (unity) в своем городе. Как быть?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Тут вариант только один -- переезд в Мск/Спб. А работу уж найти будет довольно просто. Можете искать удалённо, можете на месте. На месте как всегда проще. Можно ещё, как вариант, попытаться найти удалённую работу с последующим переездом. Правда это реже удаётся.

    У меня была ситуация почти как у вас. Я переехал в Спб в итоге, а потом и из России уехал. Очень советую защитить кандидатскую, если есть такая возможность, и это не займёт больше стандартных трёх лет сумарно. Наличие степени реально помогает получить работу на зарубежного заказчика из России или же сразу работу за границей. Помимо этого, положительно сказывается на переговорах о зарплате.
    Разумеется, знания больше котируются, чем степень. Но ещё одно преимущество не помешает.
    Ответ написан
    5 комментариев
  • Статическая сборка qt вместе с libcurl?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Вам надо линковать статическую версию libcurl в ваш проект, но не в Qt. При сборке Qt нет никаких флагов для указания libcurl.
    К слову, в Qt уже есть все средства работы сетью, т.ч. вам не нужен libcurl по факту.
    Ответ написан
  • Где теряю память?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    где не доучил матчасть?

    В части работы с памятью: выделение и очиска памяти, стек и куча, различие между массивом и одним элементом, время жизни объектов.
    Например, вы читаете данные в элемент, который представляет собой один символ, выделенный на стеке. Вам же нужен буфер достаточно размера, лучше всего выделенный динамически, т.к. вы его потом собираетесь хранить в какой-то структуре данных.
    Рекоменду вдумчиво прочитать K&R и выполнить все примеры. Это очень маленькая книжка, которая закроет все ваши пробелы в плане языка С.
    Ответ написан
    Комментировать
  • Актуальность python в СПБ?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Да на начинающих разработчиков всегда сильно меньше вакансий, чем на средних. Дело в том, что мало кто хочет вас обучать, ведь первые полгода-год вы убыточны (разве что у вас есть потом перспектива принести компании прибыль). Исключение -- это аутсорсер, который продаст вас как старшего разработчика.

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

    К слову, Junior -- это разработчик уже с опытом, который либо в институте активно посещал летние стажировки и/или контриьбютил в открыте проекты, или же имеет хотя бы год опыта. Совсем без опыта, но с некоторыми знаниями, -- это trainee (стажёр). К сожалению, в России/Украине/Беларуси и т.п. этого не особо понимают как сами разработчики, так и работодатели.
    Ответ написан
    2 комментария
  • С какими сложными случаями отладки вы сталкивались?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Пока не удалили отвечу:
    1) Любые "плавающие" баги, т.е. те, которые могут воспроизводиться или нет псевдослучайным образом, да ещё иногда и только на одной платформе. Бывает очень сложно или даже порой почти невозможно выявить закономерность и понять причину, в особенности, если это не регрессия.
    2) Баги, которые стабильно воспроизводятся у клиентов, и зависят от внешних факторов, например, окружения или подключенные устройства. На правку этого можно потерять очень много времени.
    3) Отладка любой достаточно сложной и долгоживущей многопоточной системы.

    Больше к C++
    1) Memory corruption
    2) UB на определённых компиляторах и архитектурах

    Остальное обычно не так интересно отлаживать.
    Ответ написан
    Комментировать
  • Как парсить html страничку на с++?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Что у вас конкретно не получается? Вроде бы в документации есть всё:
    1) Установка
    2) Пример использования
    Ответ написан
    Комментировать
  • Правильный ли результат?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Всё правильно. Это называется экспоненциальная запись.

    Если вам не нравится такой формат вывода, то можете использовать std::fixed:
    std::cout << "Result: " << std::fixed << res;

    Предугадывая следующий вопрос, точность можно регулировать с помощью std::setprecision(n).
    Ответ написан
    Комментировать
  • Не пойму в чём ошибка в коде?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    А пробовали ли вы свой код отлаживать?
    Поставьте брейк поинт на ту логику, которая должна вызываться. Посмотрите, тригеринтся ли он. Если нет, разберитесь почему. Если да, то смотрите почему логика не работает. Ну и по шагам программу отлаживайте.

    Это не какой-то общий вопрос у вас. Это частный случай, который просто надо отлаживать. Не уверен, что кто-то хочет делать это за вас.
    Ответ написан
    4 комментария
  • Изучение C++ учебник/курс?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    А это в большей степени индивидуально. Пользуйтесь тем, что больше нравится.
    Книги или курсы дают базу. Чтобы хорошо научиться пользоваться инструментом, нужно его применять на практике. Работать над своим проектом одному, а лучше в группе, или присоединиться к открытому проекту -- это отличный вариант для изучения зыков программирования и разработки ПО в целом.
    Ответ написан
    Комментировать
  • Стоит ли переходить на std:: или же лучше остаться на using namespace std?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Основная проблема -- это возможные конфликты имён, в особенности, если вы прописываете использование нескольких пространств имён таким образом. Помимо этого, есть риск получить очень много вариантов различных конструкций в списке автодополнения IDE. Сам по себе std -- это очень короткий идентификатор, поэтому опускать его нет особого смысла.

    PS
    Ко всему прочему, никогда не пишите "using namespace" в заголовочных файлах. За исключением случаев, когда вы действительно понимаете что делаете.
    Ответ написан
    Комментировать
  • Почему из функции возвращается временный объект?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Там будет не временный объект, а тот же самый объект, что вы создали внутри функции. Даже копирования не будет. Хотя, у вас тут объект срезаться может поэтому ещё вопрос. Почитайте про RVO/NRVO.
    Я немного поправил ваше решение:
    Foo get_foo(const char *msg)
    {
        return Foo_2(msg);
    }

    Так будет лучше.

    Но! Тут важно понимать, что делать так в реальном коде нельзя, т.к. объект класса Foo_2, при некоторых условиях, срежется до объекта класса Foo. В вашем случае -- это не проблема. Но можно переписать как-то так, например:
    const Foo &get_foo(const char *msg)
    {
        static Foo_2 foo2(msg);
        return foo2;
    }

    Этот код тоже не для всех случаев подходит, т.к. get_foo будет возвращать всегда один и тот же объект с одним и тем же сообщением.
    Ответ написан
    5 комментариев
  • Какую зарплату искать джуну в СПб?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Тысяч на 30-40 можно рассчитывать. Можно было бы и на больше, если бы вы ходили по стажировкам во время учебы. Но еще не поздно пойти на стажировку в какой-нибудь Яндекс или похожую компанию. Все-таки, джун -- это специалист с опытом хотя бы от года, или несколькими стажировками за плечами.
    В целом, вам выше правильно советовали: походите по собеседованиям.
    Ответ написан
    Комментировать
  • Есть ли список "стоп" увлечений для программиста при найме?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    На самом деле, это ваше личное дело, чем вы занимаетесь в свободное время. Вы можете хоть домики из спичек клеить.

    HR в 90% случаев некомпетентны в России. Некоторые людей по гороскопу подбирают. По крайней мере я сужу по своему опыту (а я в России очень много собеседований прошёл) и опыту моих знакомых. В принципе, в том виде, в котором сейчас есть HR -- это рудимент. Ни в коем случае не стоит подстраиваться под HR.

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

    Если вам на основе увлечений отказывают в работе или хотя бы в собеседовании, то это уже дискриминация. В развитых странах это может даже стать поводом для судебного иска. Там правда таких HR ничтожно мало, если вообще есть. Я лично не сталкивался.
    Ответ написан
  • Как получить путь до рабочего стола Linux(ubuntu) или как установить app.desktop на рабочийстол qt(qmake)?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Ну Qt и qmake тут вообще ни при чём. Это вам надо в системе сборки deb пакета делать. Я бы вам сказал, как это сделать в rpm, но вот с deb я вообще не имел дела. Но, почти 100% есть какая-то стандартная переменная окружения или функция.
    Ответ написан
    1 комментарий
  • Где в linux искать библиотеки для GCC?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Можно установить утилиту locate, и искать всё что вашей душе угодно. Можно посмотреть в пакетном менеджере куда и что устанавливается. Но обычно, компилятор видит библиотеки, установленные по дефолту (в места по-умолчанию), вам надо только -l и имя библиотеки добавить во флаги линкера.
    Ответ написан
    Комментировать
  • Почему возникает ошибка линковки в данном случае?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Посмотрите, какой Makefile генерирует qmake. Там могут быть добавлены лишние пути или флаги из spec файла.
    Проверьте, используется ли реально при компиляции и линковке g++, а не, скажем gcc (это можно посмотреть в окне Compile output).
    Проверьте, включён ли файл cstring везде, где это нужно.
    Ответ написан
  • Почему при использовании шаблонов классов выдает ошибку "неразрешенный внешний символ"?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Потому что шаблоны должны быть объявлены и определены в заголовочном файле (по стандарту языка). Перенесите всё из cpp в h и у вас всё заработает.
    Ответ написан
    7 комментариев
  • Как выполнить одну функцию для всех элементов вектора одновременно?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Вам уже написали выше, как это реализовать с помощью стандартной библиотеки (правда пока это ещё не часть стандарта, насколько мне известно).
    В вашем случае, алгоритм будет такой:
    1) Узнать число доступных потоков https://en.cppreference.com/w/cpp/thread/thread/ha...
    2) Развить массив на столько частей, сколько у вас есть потоков
    3) Написать функцию, которая принимает, скажем два итератора на часть массива, которую необходимо обработать, и два итератора на массив с результатами
    4) Создать необходимое количество потоков https://en.cppreference.com/w/cpp/thread/thread/thread (число было получено в пункте 1) и запустить в них функции.
    5) Дождаться результатов завершения: https://en.cppreference.com/w/cpp/thread/thread/join

    Для этого можно использовать и std::async (https://en.cppreference.com/w/cpp/thread/async). Он возвращает std::future (https://en.cppreference.com/w/cpp/thread/future), на этом объекте необходимо будет ждать результатов вычисления.

    Хотелось бы ещё отметить, что возможно не имеет смысла параллелить обработку небольших массивов, это только замедлит программу.
    Ответ написан
    Комментировать
  • Возможно ли за 1 год изучить один ЯП и выйти на работу?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    А адрес сайта вас ни на какие мысли не наводит? Я к тому, что в их интересах подобные истории писать. Любой сайт курсов напишет вам тысячи историй успеха как эта. Хотя это совсем не значит, что подобное невозможно в реальности, равно как и то, что возможно.
    Отвечая на ваш вопрос: да. Но, придётся приложить очень много усилий, и не факт, что получится.
    Ответ написан
    Комментировать
  • Как правильно определить атрибуты при наследовании (c++, ООП)?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Можно сделать например так:
    #include <iostream>
    #include <iomanip>
    #include <memory>
    
    class ISomeInterface
    {
    public:
    	virtual bool isFoo() const noexcept = 0;
    };
    
    class Foo : public ISomeInterface
    {
    public: 
    	bool isFoo() const noexcept override { return true; }
    };
    
    class Bar : public ISomeInterface
    {
    public: 
    	bool isFoo() const noexcept override { return false; }
    };
    
    int main()
    {
    	// Or shared_ptr/make_shared
    	std::unique_ptr<ISomeInterface> foo = std::make_unique<Foo>();
    	std::cout << "Foo is Foo: " << std::boolalpha << foo->isFoo() << std::endl;
    	
    	// Or shared_ptr/make_shared
    	std::unique_ptr<ISomeInterface> bar = std::make_unique<Bar>();
    	std::cout << "Bar is Foo: " << std::boolalpha << bar->isFoo() << std::endl;
    	
    	return 0;
    }

    Ну и в методах не обязательно возвращать просто true/false, там может быть любая другая переменная.
    Ответ написан