С++; Дескоптные приложения или веб или операционные приложения?
приветствую! уже 1,5 года изучаю с++, алгоритмы и структуры данных. Достиг, как по мне +нормального уровня и хотелось бы уже перейти к написанию программ, которые могут применяться в реальной жизни. Начал практиковать qt, но как я понимаю написание дескоптных приложений на плюсах - такое. Тогда хочу попробовать разработку ПО, cофтов, драйверов и тд. Что можете посоветовать по изучении этой темы?
PS в основном я специализируюсь на вебе и можно ли на с++ что нибудь в нем писать? в интернете видел только людей якобы "мазохистов", которые пытались так делать
Дополнительно:
Тогда хочу попробовать разработку ПО, cофтов, драйверов и тд
А разве десктопные приложения - это не ПО?
И что такое "софты"?
И почему ты считаешь, что десктопные приложения на C++ не пишутся? C++/Qt - наоборот одно из самых востребованных направлений на C++.
Если хочется драйвера, то тебе нужен WDK:
https://learn.microsoft.com/en-us/windows-hardware...
На Linux драйвера на C++ не пишутся - там долгое время только Си был, а сейчас ещё и Rust.
Веб на C++ можно писать, но это и правда мазохизм (говорю как человек, который видел веб на C++)
Но если очень хочется, то есть:
1. emscripten для wasm, если хочешь на фронте что-то делать
2. Несколько фреймворков для бэка: яндексовский userver, Drogon из топа techempower, libhttpserver, POCO, да и ещё целая куча разных (кажется их даже больше, чем для какого-нибудь nodejs)
- Кстати, как куратор тега веб разработки, на чем пишется веб бекенд обычно (языки, фреймворки) и, в частности, highload.
- Dmitrii, на разном. Highload - это скорее про подход, чем про конкретный язык.
- Dmitrii, зависит от задач и что считать highload, например на го в каждой вакансии сейчас пишут про то, что проекту нужен брокер т.к. у них "highload", но по сути им хватает дефолтных решений, а брокер вообще хз зачем им. Как вам ответили выше, то сильно зависит от задачи, т.к. бывают задачи которые хорошо масштабируются и в целом можно писать не очень производительный код, но использовать больше серверов и в целом система будет highload. И в целом вопрос некорректный, т.к. с одной стороны некоторые языки типа c++ считаются очень производительными by design, но по факту большинство не умеет использовать их производительность. Например есть сайт где тестируется производительность фреймворков, но в реальности это не совсем объективная штука, т.к. там рассматриваются довольно простые случаи и часто используются не совсем оптимимальные подходы. Например для го используются fasthttp(который может использоваться для higload), но при этом для сереализации json используется дефолтный маршалер, который относительно медленный, поэтому к таким тестам всегда стоит с настороженностью подходить.
- calculator212,
проекту нужен брокер т.к. у них "highload", но по сути им хватает дефолтных решений, а брокер вообще хз зачем им
Хз где такое пишут, но брокеры сообщений часто нужны не из-за хайлоада, а из-за гарантий доставки/порядка при обработке каких-то событий или потоков данных.
- Василий Банников,
Хз где такое пишут,
ну когда я смотрю вакансии на го, почему-то теперь каждый хочет это внедрить, хотя брокер по моему не всегда нужен.
но брокеры сообщений часто нужны не из-за хайлоада, а из-за гарантий доставки/порядка
Ну для хайлода согласен, что он не всегда нужен. Но и если нагрузка на сервер 100-200rps ценность брокера тоже немного сомнительная (на мой взгляд).
- calculator212, лучше на конкретном примере рассматривать всё-таки, ибо можно придумать контрпример, где и с 10k rps в архитектуре просто не нужен брокер сообщений (+ не надо опускать слово "сообщений"), и наоборот в сервисе, в котором событие происходит дай бог раз в минуту - полезно иметь персистентную очередь.
- Василий Банников, я понимаю, что highload больше про подход, мне скорее был интересен ваш опыт, если таковой есть.
- Dmitrii, да просто не говнокодить, замерять производительность, следить за метриками.
По ситуации добавлять больше инстансов, профилировать узкие места.
Понимать, откуда берётся нагрузка.
Например мы хайлоад на Rust пишем
На С++ вы можете реализовать весьма и весьма многое.
Например, различные графических приложений с использованием SDL, SFML, raylib, QT, imgui и др. (и это лишь самое известные библиотеки/фрейворки).
Для веба есть oatpp, crow, fastcgi. (довольно большое число сайтов использует nginx, который написан даже не на С++, а на С.)
Работа с видео: ffmpeg, gstreamer, opencv.
Если есть желание разобраться с ОС и драйверами, то тут вам дорога в API самих ОС (основа которых тоже зачастую на С писалась). Зачастую драйвера пишут на С/С++ (как и прошивки для различных IoT устройств, которые иногда и нуждаются в драйверах).
Ответы:
PS в основном я специализируюсь на вебе и можно ли на с++ что нибудь в нем писать?
Если речь про бек, то да можно. Часто используют boost/asio или просто asio, есть еще что-то от яндекса. Есть проекты и попроще, где всё в одном хидере лежит.
в интернете видел только людей якобы "мазохистов", которые пытались так делать
Суть в том, что если сравнивать с другими языками, то код писать действительно намного сложнее, честно говоря я хз где кроме яндекса используют c++ для бекнда в качестве основного языка. Если вы потестите ряд решений для бекнда на c++, то вы не получите какой-то улучшенной производительности, а сложности с использованием языка никуда не денутся. И кроме того, часть базовых вещей вам придется реализовывать самостоятельно, что не очень радует.
- то есть лучше не пробовать, тк есть php, js, ну или только из интереса?
- calculator212 разве только Яндекс использует С++ для веб бека? судя по первым запросам в гугле, С++ для бека используется во всех топовых компаниях. Тем более, не уверен, что все то легаси с нулевых/десятых годов (aka core) переписано на современные языки для большинства сервисов.
- Dmitrii,
разве только Яндекс использует С++ для веб бека
Я имел ввиду, что не используют как основной язык для разработки, но возможно используют для оптимизации узких мест или в определенных сферах типа трейдинга.
Тем более, не уверен, что все то легаси с нулевых/десятых
Вроде легаси как раз больше на пхп/перле/питоне/яве. В целом если сейчас чекнуть вакансии то бекенда там не так много, но возможно я ошибаюсь и чего-то не знаю.
- Harlen,
то есть лучше не пробовать, тк есть php, js, ну или только из интереса?
Ну тут только вам решать, но как я понял у вас нет опыта работы ни в беке, ни в c++, поэтому затея на мой взгляд труднореализуемая, т.к. для бека есть много других языков python/node/php/java/go, которые популярнее чем c++(для бека). С беком на c++ есть еще такая проблема, что особо обучабщих материалов нет. У меня первый язык тоже был c++, потом перешел на го и на c++ писать бек надеюсь никогда не буду.
Начал практиковать qt, но как я понимаю написание дескоптных приложений на плюсах - такое. Тогда хочу попробовать разработку ПО, cофтов, драйверов и тд. Что можете посоветовать по изучении этой темы?
Что значит "такое"? Сложно, долго, неудобно?
Так да, программирование это не тяп-ляп и готово, это долго, скучно, неудобно.
Что такое разработка ПО и софтов по-вашему? Или десктопные приложения это не ПО и не софт? А что тогда?
Есть подозрение, что нормального уровня вы далеко не достигли, если создать десктопное приложение вызывает такие проблемы.
Стандартная задача начинающего - написать свой калькулятор, это как раз простой пример простого десктопного приложения. Или десктопной игрушки.
- не, я не совсем корректно выразился, проблем то не возникает, я про то, что можно на чем то другом писать более эффективно и производительно. каждый язык же где то плох, а где то хорош
- Не понятно как можно специализироваться в С++ и в вебе одновременно, ибо да, С++ не очень для веба.
С другой стороны есть ощущение, что у вас нет никакого вменяемого уровня
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Выбор между C++, десктопными приложениями, веб-приложениями и операционными приложениями зависит от конкретной задачи, которую вы планируете решить, а также от ваших навыков и опыта в разработке.
Если вы заинтересованы в создании быстрых и эффективных приложений, работающих на уровне операционной системы, то C++ может быть хорошим выбором. C++ обеспечивает высокую производительность и позволяет управлять памятью непосредственно, что особенно важно для разработки операционных приложений.
Десктопные приложения также часто разрабатываются на C++, особенно если требуется работа с низкоуровневым оборудованием или высокая производительность. Однако существуют и другие языки программирования, такие как Java или C#, которые также хорошо подходят для разработки десктопных приложений.
Веб-приложения, с другой стороны, обычно разрабатываются с использованием языков программирования, таких как JavaScript, PHP, Python или Ruby. Веб-приложения работают в браузере и позволяют пользователям взаимодействовать с сервером через интернет.
Операционные приложения, такие как драйверы или системное программное обеспечение, часто требуют знаний низкоуровневого программирования и работы с аппаратным обеспечением. C++ является одним из основных языков программирования для разработки операционных приложений.
Итак, чтобы определить, какой путь выбрать, вам следует учитывать требования вашего проекта, ваш опыт и навыки в различных языках программирования, а также возможности и цели вашего приложения.