• Каковы рзличия во взаимодействии с железом в системном программировании и создании игровых движков?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если вы имеете в виду написание ОС, исключая написание драйверов, то в обоих случаях взаимодействие с железом никакое. ОС - это набор хитрых алгоритмов для доступа к ресурсам. Игра - по сути то же самое, только подчиняется ОС, у которой власти больше, но обычно ОС предоставляет игре всё, что только можно (кроме системных файлов разве что).

    В системном программировании больше упор на совместимость, баги не допустимы, особенно критические, потому что ставят под удар персональные данные, номера карт и т.д. В геймдеве же упор на скорость, если игра "крутая", как говорится, с переизбытком графики, отдельных объектов и мозгов у npc. Баги считаются нормой (к сожалению) и просто фиксятся по мере накопления жалоб, а порой на них даже забивают.

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

    Если дело касается низкоуровневого программирования, то это по сути означает выполнение несвойственной программисту задачи, потому что тонкости оптимизации лучше перенести в написание драйверов. А в начале своего опуса я специально исключил эту тему. Но иногда приходится, да. Собственно, первые игры по сути были основаны на базе самописных движков, после чего и началась вся движуха с ускорением графики. Но сегодня есть всякие directx opengl vulkan, а над ними куча более сложных игровых движков, так что нет смысла изобретать велосипед.

    Насчёт Си в целом я бы усомнился на самом деле. В наши дни очевидны некоторые недостатки Си и С++. Эти языки будут ещё долго существовать, потому что за ними тянется большой багаж, и нужно много чего старого поддерживать. Главная фича С\С++ - это скорость работы готовой программы. Но нынче новые языки метят в лидеры по простоте, удобству, защищенности и скорости компиляции. И некоторым уже несколько лет. То ли еще будет. Думаю, однажды Си даже в НАСА отдаст пальму первенства другому языку.
    Ответ написан
    4 комментария
  • Какие самые нужные, общие знания в программной инженерии и embedded разработке?

    32bit_me
    @32bit_me
    Программист, встраиваемые системы
    Я занимаюсь эмбеддед-разработкой очень много лет (лет 20 примерно), и если я мог бы выбирать сейчас, я бы выбрал просто программирование. По одной простой причине - больше платят. Раньше я разрабатывал и железо, и схемы, и платы, и вообще делал всё, вплоть до испытаний и документации, но уже много лет я всем этим не занимаюсь, а занимаюсь только кодингом, по той же причине - больше платят.
    В целом, если вы хотите именно в эмбеддинг, начните с микроконтроллеров семейства Stm32, купите недорогую плату Discovery или Nucleo и разбирайтесь. Также необходимо будет знать основы схемотехники. Даже если вы не будете сами разрабатывать схемы, всё равно придётся разбираться с готовыми схемами, и нужно будет полностью понимать, как что работает. Уметь держать паяльник и работать с осциллографом также будет большим плюсом.
    Потом можно будет освоить FPGA и язык Verilog, но это очень на любителя и только при большом желании, потому что с зарплатами тут вообще печаль.
    И да, английский нужен обязательно, без вариантов. Чтение технического текста свободно, быстро и без словаря - в любом случае, разговорный - только для международных компаний или при работе на иностранного заказчика, но это как раз самое вкусное. Так что английский нужен.
    А так, программирование, оно и есть программирование. Языки: С - чаще всего, С++ - иногда, С# и другие - для "верхнего уровня", но тоже не помешают. Алгоритмы могут спросить на собесе, но сильно их заучивать не стоит. Более важен практический опыт, чем теория. Операционные системы - для верхнего уровня - Windows, Linux, для нижнего - различные РТОС или "голое железо". В мощных железках - Linux, так что с ним лучше дружить очень хорошо.
    Ответ написан
    4 комментария
  • Смесь инженера-изобретателя (да, есть такая подгруппа) и программного инженера?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Есть такая вещь как embedded programming. Но я бы ещё посоветовал посмотреть на IoT (internet of the things)
    Ответ написан
    1 комментарий