• Имеет ли смысл начинать с Си?

    @asd111
    Знать Си и ассемблер в любом случае не будет лишним.
    Ответ написан
    Комментировать
  • Имеет ли смысл начинать с Си?

    @spotifi
    Изучать следует начинать с языка со статической типизаций.

    В частости С подходит по этому критерию.
    Плюс в изучении С - много литературы и пр. информации.
    Минусы - будете не только язык изучать, а еще и со стандартами и их разной кривости реализациями бороться. То, что работает в реализации Clang на Linux не будет работать в реализации MSVC на Windows и в реализации GCC на FreeBSD. Оно вам надо?
    Плюс в С легко отстрелить себе ногу.
    Плюс реальная польза от Си - это только в слабых микроконтроллерах (мощные модели вполне способны и целые операционные системы запуска), да в написании операционных систем. В других областях или давно перешли или переходят на другие языки.

    Я бы предложил Go.

    Статическая типизация.
    Мощь и простота в одном флаконе.
    Жесткий стандарт - разные версии на разных ОС комилируются запросто.

    Скриптовые динамические языки - PHP, JavaScript, Python, Ruby, Perl, Lua - плохо для начинающего. Прививает нехорошее отношение к переменным.

    Rust, D, Java, Dart - слишком много концепций, не будете знать на чем сосредоточить внимание.

    Haskell, Erlang - функциональные концепции, далеко оторванные от массового программирования, которое в большинстве своем императивное.
    Ответ написан
    108 комментариев
  • Стоит ли изучать СИ?

    @res2001
    Developer, ex-admin
    Вопрос используется ли вообще язык СИ где то в проектах?

    Странный вопрос. Возьмите любой проект где требуется скорость/низкое потребление памяти там будет Си.
    Список популярных репозиториев на Си на гитхабе за последний месяц: https://github.com/trending/c?since=monthly
    Ответ написан
    Комментировать
  • С чего начять новичку в СИ?

    Griboks
    @Griboks
    Я советую начать со спецификации, например ANSI C.
    Ответ написан
    Комментировать
  • С чего начять новичку в СИ?

    @res2001
    Developer, ex-admin
    1.Си достаточно не большой и простой язык программирования. Возьмите любой учебник для начинающих. Изучите язык, порешайте задачи оттуда.
    Поймите все про Си строки. Все достаточно просто, но почему то у многих с этим проблемы в начале.
    Поймите тонкие моменты языка (это важно для системного программиста и для "железячника", да и просто для хорошего программиста): указатели, арифметика указателей, динамическое выделение памяти.

    2. Потом надо погрузиться в программирование для той ОС, которую планируете использовать. Обычно это линукс. Учитывая ваши интересы (системное программирование, железо), то тут можно порекомендовать следующие книги:
    - https://www.ozon.ru/product/linux-api-ischerpyvayu... - это для user space. Эта книга больше справочник по Linux API. Если у вас хорошо с английским то эту книгу может заменить встроенная справка линукс (man).
    - https://www.ozon.ru/product/yadro-linux-opisanie-p... - это kernel space (драйвера)

    3. Параллельно с первыми двумя пунктами есть смысл читать что-нибудь по алгоритмам. Например Кормена: https://www.ozon.ru/product/algoritmy-postroenie-i...

    4. После того как будете уверены в своих знаниях Си и Linux, можете выбирать платформу с которой вы хотите работать (железку) и начинать реализовывать свои задачи. По ходу дела возникнет куча вопросов. Большая часть из них может быть решена с помощью чтения TRM (Technical Reference Manual, предоставляется производителем железа/процессора). TRMы обычно оочень большие просто так их читать без конкретной цели смысла нет.
    Ответ написан
    1 комментарий
  • С чего начять новичку в СИ?

    includedlibrary
    @includedlibrary
    Си можно начать изучать с книги "Язык программирования Си" Кернигана и Ритчи. Или с "Head First C" (я начинал с неё). Потом можно почитать про новые фичи стандарта c11.
    Если вы хотите низкоуровневым программированием заниматься, то для начала нужно прочитать "Архитектура Компьютера" Таненбаума. Ещё есть очень хорошая книга "Цифровая схемотехника и архитектура компьютера" от Сары и Дэвида Харрис.
    Потом читать спецификации на железки, под которые вы хотите писать код.
    Ответ написан
    1 комментарий
  • Пишут ли сейчас на чистом Си?

    kashamalasha
    @kashamalasha
    Все микроконтроллеры программируются на ANSI C
    Ответ написан
    Комментировать
  • Пишут ли сейчас на чистом Си?

    @ruGuardian
    Огромное количество кода пишется на Си в области встроенного ПО систем реального времени для авиации, космоса и в целом для армии и транспорта. Это целый мир, который в интернете почти не заметен, если специально не интересоваться. В целом, Си необходим, если:
    1) вам интересно низкоуровневое программирование - здесь на Си будут писать, когда вы на пенсию выйдете. Любая новая железка, новый проц - это сперва работа на низком уровне, и только потом - API, использование прикладниками и проч.. А новые железки будут всегда.
    2) вам интересны ОС и *nix в частности - аналогично. Никто ядро Линукса на Rust переписывать не будет.
    3) вам интересно ПО систем реального времени - будет актуально ещё лет 25 минимум. Реалтаймщики даже С++ в полном объеме не используют - любой конструктор с выделением памяти может разрушить детерминизм по времени исполнения. Для ПО от реакции которого в строго заданное время зависит жизнь людей - это непозволительно.
    Вот те области для Си программиста, весьма почетные и профит соответствующий (и в деньгах, и в инженерном профессионализме).
    Ответ написан
    Комментировать
  • Что писать на C в начале и конце пути?

    @pfg21
    ex-турист
    к примеру писать копии GNU утилит.
    сначал пишешь сам - потом смотришь GNU код и разбираешься а накуя столько обвязки засунуто.
    Ответ написан
    Комментировать
  • Что писать на C в начале и конце пути?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    на Си не обязательно писать сложные проекты.
    Напишите на Си несклько консольных утилит.
    Например программа для вывода текстового файла на экран, вывода списка содержимого каталога.
    Затем что-то посложнее типа date с подстановочными символами, QR encoder, архиватор, да что угодно.

    А идеи для проектов подкидывать нет смысла, никто ж не знает что вам лично интересно настолько, чтобы заставить сделать проект и довести его до рабочего варианта.
    Ответ написан
    Комментировать
  • Что писать на C в начале и конце пути?

    15432
    @15432
    Системный программист ^_^
    Я писал архиватор, http прокси, обработчик изображений, обработчик образов прошивок... небольшие GUI приложения с всеми плюшками, но размером в 5-10 КБ... написать можно что угодно
    Ответ написан
    Комментировать
  • Как получать данные из процесса или как взламывать игры?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    2) Как либо вытаскивать значения прямиком из оперативной памяти. Это является возможным? Если да, то подскажите в каком направлении копать и что читать. Я предполагаю что 'Cheat Engine' может помочь мне, но я не уверен что мне с ним делать.


    Cheat Engine в принципе поможет, но для этого вам нужно провести реверс инженеринг майнкрафта, чтобы понять как именно в памяти хранятся данные об окружающем мире, координатах вашего персонажа. В этом плане вместо cheat engine используют отладчики, используют различные варианты внедрения в процесс для добавления функций.

    Попробуйте для начала написать игру типа крестики нолики, а потом ее самостоятельно взломать.
    Просто посмотреть память и попробовать найти нужные значения может быть и не очень сложно. А вот "автоматизировать", то есть написать бота будет гораздо сложнее.

    Ну и да, базовое понимание ассемблера, как процесс хранит данные в памяти - поможет.
    Ответ написан
    Комментировать
  • Как создать свой тип данных в языке Си?

    @MaM
    Стандартный механизм определения нового тип в языке C, struct some{ ... }, union some{ ... }, enum some {...}. Подробней лучше почитать в стандарте или на https://en.cppreference.com/. Так же объявление типа указатель на объект типа type - type* type_name; или указатель, на указатель объекта типа type - type*** type_name; и т.д. , указатель на функцию void(func*)(int, int), массив объектов тип type some[num], (как с массивами так и с указателями возможны различные измерения типа массив массивов т.е. двумерный) однако с указателями на функции, а в обшем и преобразовании имени к указателю и преобразованию массивов к указателям и тд следует относится внимательно. Вообшем случае такие тонкости уже уровень для серьезного написания дров или осей, так что советую запастись стандартом так же система типов серьезно отличается от таковой в с++ (просто заранее предупреждаю). Так же, typedef struct {...} some полезная идеома языка си для создания алиса типа на анонимную структуру ( да есть анонимные структуры и другие типы данных), часто полезны в сочетании с расшерением гцц для вложенных функций для использования в scope in place. Для более глубокого понимания еше могут быть полезны битовые поля, часто в месте с выравниванием используюся для каламбуров типизации в сериализаторах и реализации псевдонаследования, каноническим примером могут служить сокеты беркли. Забыл упомянуть некоторые модификаторы типов такие как long long и тд тоже по сути используют зарезервированный фундаментальный тип https://stackoverflow.com/questions/35401017/is-lo... .
    Ответ написан
    Комментировать
  • Из-за чего могут появляться белые прямоугольники в шахматном порядке на мониторе?

    @ProFfeSsoRr
    Сис.админ по Linux
    иногда тоже наблюдал похожие явления, но больше в играх (при пиковой нагрузке), и всё скидывал на слабую встройку.

    Эм, нормально функционирующий комп не дает артефактов, какая разница, "слабая" видеокарта или нет. Раз со встроенной это тоже было - значит проблема в проце или памяти. Есть возможность с кем-нибудь из друзей махнутся оперативкой на день-другой, чтобы проверить, не она ли виновата?
    Ответ написан
    1 комментарий
  • Создать "пакет" и отправить?

    @res2001
    Developer, ex-admin
    Добавлю свои пять копеек:
    Мало собрать и отправить пакет. Пакет должен кто-нибудь получить на принимающей стороне. Если принимающая сторона неготова принять ваш пакет, то он будет просто отброшен.
    Чтобы принять пакет на принимающей стороне должен работать "сервер" и слушать "порт". Например в вебе браузер это клиент (сторона отправляющая запросы), когда вы вводите в адресную строку браузера имя сайта, то на этот сайт отправляется запрос. Сайт в простейшем случае - это компьютер, расположенный где-то в интернете. На нем запущен веб-сервер, который принимает запросы от клиентов. Если веб-сервер остановить, то сайт перестанет отвечать на запросы даже если сам компьютер будет работать.
    Команда ping не требует для своей работы сервера, т.к. функционал сервера встроен непосредственно в стек протоколов tcp/ip и система сама отвечает (если трафик pingа не блокируется фаерволом).

    Не понятно, почему вы зациклились на отправке пакетов роутеру? Когда отправляете пакет, то указываете адрес назначения пакета, а протокол сам решает как конкретно будет отправлен ваш пакет. Даже если это адрес yandex.ru и вы не знаете где он фактически находится, то TCP/IP + DNS разберутся с этим сами.

    Обычно роутеры поддерживают управление через web, ssh, telnet (что-то из списка может быть выключено или не поддерживаться на данной модели). Используя клиенты для этих протоколов вы можете отправлять команды роутеру. Например ssh - это удаленная командная строка, выполняться команды будут на роутере, а вы будете видеть результат выполнения. Для web клиентом может быть не только браузер, но и curl или wget или ваша собственная программа.
    Ответ написан
    Комментировать
  • Создать "пакет" и отправить?

    Griboks
    @Griboks
    Поддерживаю остальных, что вы ничего не понимаете в этом деле, даже основ.
    Но, если вам всё-таки для чего-то надо создать и отправить пакет, то введите в консоли
    ping x
    где x - адрес роутера.
    Ответ написан
    Комментировать
  • Создать "пакет" и отправить?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Начните с простого. С уровня работы web-приложений. Для "ручного" формирования запросов можно использовать fidder. Им можно создать любой GET/POST запрос как буд-то вы браузер:
    https://learn.javascript.ru/fiddler

    5c42345644014256709126.png


    5c4234c377887127017536.png
    Ответ написан
    Комментировать
  • Создать "пакет" и отправить?

    Jump
    @Jump
    Системный администратор со стажем.
    Пакет - это же не набор каких то текстовых файлов разных расширений и упакованный в файл другого расширения. Или?
    Пакет это некоторый объем упакованной информации, имеющий размер, адрес и еще некоторых характеристики.

    По поводу всего остального - найдите в яндексе описание модели OSI и учите до полного понимания.
    Без понимания модели вы так и будете задавать бессмысленные вопросы.
    Ответ написан
    3 комментария
  • Программирование для Android на С/С++?

    profesor08
    @profesor08
    Не прибегая к коду Java не выйдет. Android NDK позволит писать на С++ только некоторые части приложения, например библиотеки. Там прям на главной странице написано: The Android NDK is a toolset that lets you implement parts of your app using native-code languages such as C and C++. For certain types of apps, this can help you reuse code libraries written in those languages.
    Ответ написан
    1 комментарий
  • Как грамотно объяснить заказчику ( Python VS Java )?

    mekegi
    @mekegi
    > Заказчик не определился ещё на чём он хочет реализовать проект
    Скажите ему чтобы приходил когда определится. И если выбор его падет на java, который вам не знаком, отправьте его поискать других исполнителей.
    В чем вообще проблема? Если ваших доводов ему недостаточно, то и дальнейшее сотрудничество будет проходить в таком же русле. Вам оно надо?
    Лучше откажитесь от него и поищите другие проекты.
    Ответ написан
    Комментировать