Ответы пользователя по тегу Программирование
  • Какие вопросы задают на собеседование программисту C(Си), не С++?

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

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    По-моему тут уже много таких вопросов. Поиск по сайту пробовали?
    Если пишете что-то кроссплатформенное (win, mac, linux имеется ввиду) и именно десткоп, то тут выбор очевиден - Qt (C++). Для линукса тоже, хотя тут есть альтернативы конечно, но на мой взгляд достаточно убогие. Под винду C#. Под мак swift, objective-c. Т.ч. по языкам: C++/C#/swift.
    Что вам выбрать... Я не знаю. Зайдите на hh.ru посмотрите вакансии в вашем городе, почитайте требования и пр. Посмотрите стажировки в крупных компаниях -- это очень хорошо для новичков.
    Ответ написан
    Комментировать
  • Как работает этот код(побитовые сдвиги)?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Кто-то за вас будет разбираться... серьезно?
    Вот посмотрите да разбиритесь: https://en.wikipedia.org/wiki/Bitwise_operation . Тем более, что вы лучше понимаете что там делается и зачем в плане бизнес-логики.
    Ответ написан
    Комментировать
  • Qt. Как передавать данные между формами?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    На самом деле вам не нужно ничего и никуда передавать, как мне кажется. Т.к. вторая форма используется только для создания новых элементов. Но обо всём по порядку. В приведённом фрагменте кода я вижу несколько архитектурных проблем (если не интересно, можете игнорироваться все, кроме пункта 3):
    1) Вторая форма создаётся каждый раз, когда пользователь кликает на кнопку add_item. Это утечка памяти, т.к. все формы будут удалены только после удаления главного окна, но не ранее. Почему бы не создать форму один раз и просто её не показывать на действие? Создали в классе поле QScopedPointer m_addItemDlg (ну или std::unique_ptr), один раз выделили память в конструкторе и радуетесь жизни.
    2) Это не очень хорошо, что Institution хранится в контейнере QList по значению т.к., скорее всего вы не реализовали семантику перемещения и всё это копируется... Хотя бы по этой причине (и по многим другим) стоит подумать о том, чтобы хранить все элементы как shared_ptr.
    3) Наконец-то мы добрались и до вашего вопроса! В Qt есть отличный механизм слотов и сигналов. В вашем случае идея проста: у главной формы надо реализовать слот onInstitutionAdded а у второй формы дописать сигнал institutionAdded и соединить их в конструкторе главной формы. Когда новый объект создан выслать сигнал из второй формы и в слоте главного окна реализовать добавление в коллецию.
    Если же нужно будет редактировать какой-то итем в коллекции, то его конечно лучше передать просто по ссылке перед тем как показать форму. Ну и в этом случае посмотреть уже в сторону Qt model-view.
    4) Название класса второй формы слишком общее и ни о чем не говорит.
    Ответ написан
    2 комментария
  • Qt. Как сериализовать объекты содержащие коллекции?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Для сереализации в Qt есть специальный класс QDataStream. У классов которые вы хотите сереализовать нужно реализовать два оператора (для чтения и для записи):
    QDataStream &operator<< (QDataStream &out, const T &obj);
    QDataStream &operator>> (QDataStream &in, T &obj);
    
    QFile f("path");
    if (f.open(QIODevice::ReadOnly) { // or WriteOnly, or ReadWrite
       QDataStream s(&f);
       T obj;
       s >> obj; // for write s << obj
    }

    Но у вас в коллециях указатели, т.ч. сереализоваться будут адреса, а не сами объекты. Эту проблему нужно как-то решить, т.е. если у вас QList<Institution> lst, то можно просто написатьs << lstдля сереализации, а если указатель, то нет, возможно написать соотвествующий оператор для указателя -- это решение.

    А еще возможно стоит присмотреться к JSON (с пятой версии поддержка входит в стандартную библиотеку Qt) если нужно именно сохранять в файлы, потом читать и иметь возможность поправить руками.

    PS код писал просто по памяти, поэтому может не скомпилироваться :) Но примерно дела обстоят так.
    PPS и лучше используйте какие-нибудь умные указатели вроде QSharedPointer, boost::shared_ptr или std::shared_ptr (с C++11)... Голые указатели уже моветон.
    Ответ написан
    1 комментарий
  • Когда ооп быстрее процедурного?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Вообще вопрос довольно странный. Не знаю как там дела с PHP, но про C++ я бы сказал: профилировщик в руки, релизный билд и смотрите. Да и потом, насколько быстрее, критична ли производительность, что в приоритете -- производительность или поддержка и расширяемость... ? Обычно весь код и не требует оптимизации по скорости работы, только некоторые места (которые иногда хоть на ассемблере перепиши, а в силу особенности алгоритмов большей скорости не получишь).
    Ответ написан
  • Хорошие книги по Computer Science?

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

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Зависит от:
    1) Ваших целей.
    2) Типа вопроса.

    Если вы хотите развиваться как профессионал и вопросы у вас пока -1го уровня, то вам надо искать самостоятельно, пробовать, экспериментировать и т.п. И в крайнем случае спросить.
    Если вопрос технический и сложный, то есть другой ресурс *без школьников, которым лень гуглить и яндекс рекламы*, который здесь нельзя называть, хотя запорожец BMW не конкурент, но все равно нельзя. Но это пока что не ваш случай, как я понимаю.
    Ответ написан
    Комментировать
  • Можете посоветовать несколько книг по алгоритмам на С++?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Роберт Седжвик.

    PS
    Пользуйтесь гуглом и поиском по сайту. Вопрос уже 100500 раз задавали.
    Ответ написан
    1 комментарий
  • Вызов функции с аргументами?

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

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Чарльз Петцольд. Код. (если найдёте в бумажном варианте)
    Именно с этой книги и нужно начинать, а не с HTML/JS/PHP.
    Ответ написан
    Комментировать
  • Как создавать качественый код в 3-4-5 раз быстрей?

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

    Остальное (скорость набора, IDE, снипеты и т.д.) уже вопрос удобства. Всё это конечно здорово облегчает жизнь, но далеко не так важно.
    Ответ написан
    Комментировать
  • Есть ли какая-нибудь классическая литература про работу с памятью, на примере языка Си или С++?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Вот это: rus-linux.net/lib.php?name=/MyLDP/hard/memory/memo... (примеры там есть на C, если верно помню).
    А потом любой учебник по C++ или K&R по C.
    Ответ написан
    Комментировать
  • Где найти эти Ваши "основы программирования"?

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

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Первый раз попробовал писать на C на курсах по программированию в 9ом классе. Потом на первом курсе института купил книгу Солтер, Клеппер "C++ для профессионалов" (лучше с неё не начинать конечно)... После того, как освоил C++ на достаточном уровне, взялся за Qt, потом за boost (уже чисто по работе). Было и есть много разных книг (легко гуглится и ищется по тому же тостеру), статей, личных проектов и т.п.
    Что касается алгоритма... Читаешь, пробуешь пример, пробуешь в каком-нибудь проекте. Добавить-то больше нечего. Практика == успешное изучение. Ну и забывать про знания в смежных областях не стоит. Операционные системы, работа памяти, проектирование и т.п. Мало просто знать синтаксис языка, нужно уметь решать какие-то задачи практической направленности.
    Ответ написан
    Комментировать
  • Каков необходимый минимум знаний для junior'а/стажера (с++) и где найти работу студенту?

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

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    В вашем случае больше подойдёт агрегация. И, в качестве совета: всегда старайтесь рассматривать агрегацию как альтернативу множественного наследования. Почитайте что-нибудь хорошее по ООП (найдите в сети, есть 100500 ответов на вопрос "что почитать по теме ...").

    А каноны ООП -- это нечно мифическое. Есть базовый набор принципов и рекомендаций, а остальное -- опыт и знания. Никогда не будет так как в школе: вот это отлично и так надо делать, а вот это плохо и так делать не надо.

    Если очень коротко:
    Интерфейс следуют рассматривать как описание набора похожих по смыслу действий, которые можно произвести с экземпляром класса. Например мы можем постучать по всему, реализует интерфейс IKnockable, и в контексте использования данного интерфейса нам не важны остальные характеристики объекта. Постучать, допустим можно по дереву, а можно и по голове.
    Понятие наследование от базового класса включает в себя наследование описательных и поведенческих характеристик. Допустим есть класс виджетов, которые умеют себя рисовать, реагировать на команды и прочее. Пусть от виджета наследуется класс MainWindow или класс Dialog. Эти классы умеют себя рисовать как и виджет, имеют свойства прозрачности (допустим) и прочие, однако содержат что-то новое элементы управления по умолчанию, предопределённые свойства модальности иное поведение и пр.
    Конечно неплохо было бы учесть некоторые принципы SOLID, но вопрос не про это...
    Ответ написан
    4 комментария
  • Что нужно знать, чтобы устроиться c++ программистом?

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

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Уже где-то лет 12 провожу почти каждый день, включая выходные и исключая отпуск, за компьютером в среднем часов по 8-10, чаще больше. Причем, сначала это были компьютеры с выпуклыми мониторами и дополнительной защитой поверх монитора... Зрение до сих пор 100%. Ходил проверялся месяца 4 назад, сказали что всё ок.

    Я считаю, что зрение в больше степени зависит от генетики. Я бы порекомендовал использовать хороший монитор. Мне, например нравятся мониторы Dell UltraSharp c IPS (уже можно и AH-IPS) и диагональю 27 дюймов. Да и вообще на здоровье влияет ещё и организация рабочего места. Одно дело работать в помещении с плохой освещённостью, неудобным столом и креслом, на компьютере с маленьким TN-монитором, плохим железом и неудобной клавиатурой... и совсем другое дело когда есть нормальные условия для работы. Конечно нормальные условия есть далеко не везде, но это другой вопрос.
    Ответ написан
    Комментировать
  • Как число 12345 сделать строкой в QT?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Скорре всего никак, т.к. QT -- это скорее всего QuickTime, но никак не Qt.
    Ответ написан