Обучение программированию требует ОГРОМНЫХ затрат времени и энергии. Новичкам также сложно понять, с чего начать, потому что есть из чего выбирать. Через мой аккаунт в Instagram меня часто спрашивают:

«Какой язык программирования мне следует изучить?»

Я хотел иметь возможность дать лучший ответ, чем «это зависит от обстоятельств», поэтому с помощью этой серии статей Изучение языка я надеюсь создать ресурс, который поможет людям самим решить, на каком языке им следует потратить свое время на обучение!

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

В этой статье Райан Корнатеану, также известный как @hackersclub, дает обзор C / C ++!

Как долго вы работаете с C / C ++?

На самом деле я работаю с C только последние полтора года. Так что не так уж и долго! Прежде чем проводить более низкоуровневое исследование безопасности, я писал большинство своих инструментов безопасности на Ruby и / или Python.

Что заставило вас выбрать работу с C / C ++?

После работы с Amazon я по-настоящему увлекся идеей реверс-инжиниринга. Так что я взял книгу по x86 Assembly & C и просто начал писать оттуда код компилятора. Я был так очарован внутренней работой ядра и тем, как все работает от ROM до RAM, от ядра до User-Land.

Для чего лучше всего подходит C / C ++? Когда кому-то следует подумать об использовании C / C ++ для своего проекта?

Язык C можно использовать для чего угодно! Скажем, вы хотите создать драйвер, который отправляет информацию о bluetooth на уровень пользователя, используя код IOCTL (управление вводом / выводом), тогда C будет идеальным языком для этого!

Другой - электроника, MCU (микроконтроллеры), такие как Arduino, используют встроенный C для управления оборудованием. Допустим, вы хотите сделать датчик движения, который запускает вызов API каждый раз, когда кто-то проходит мимо вашей двери. Для этого вам потребуется написать код на C, который общается с Arduino, который затем отправляет запросы в вашу сеть.

Если вы знаете и другие языки, как C / C ++ сравнивается с ними?

Каждый язык определенно служит своей цели. Я бы никогда не стал изобретать велосипед из того, что Python уже может делать гораздо проще. Я буду использовать C или C ++, когда это необходимо для труднодоступных поверхностей, недоступных для Python или любого другого статически типизированного языка.

Разница заключается в программном обеспечении, C / C ++ медленно / сложно писать, а также очень подвержен ошибкам. Читаемость имеет первостепенное значение при работе с командами, поэтому ваш код C должен быть очень хорошо документирован. В то время как Python используется для взаимодействия с высокоуровневыми библиотеками производительности гораздо более удобным способом.

Существуют ли какие-либо типы проектов / задач, для которых C / C ++ не подходит?

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

Например, я бы использовал сборку, когда мне нужен был самый нижний уровень доступа к оборудованию у моих ног. В принципе, если вам нужен самый полный контроль над вашим ядром или даже над двоичными файлами пользователя. Я бы сказал почти то же самое для C / C ++: вы потратите так много времени на отладку проблем с памятью и / или буфером, чем на написание высокооптимизированного кода.

Что вам особенно нравится в программировании на C / C ++?

Короче говоря ... Мне очень нравится смотреть, как компилируется код 😆 ... но да, для моей работы в области исследования и разработки вредоносных программ / эксплойтов это действительно пригодится.

Что вас расстраивает при работе с C / C ++? Какие возможные источники боли или разочарования (если таковые имеются!) Должны знать люди, прежде чем они начнут изучать C / C ++?

Отладка кода ужасно раздражает. Бинарные файлы пользовательского уровня не так много, если вы компилируете с флагом отладки, потому что в этом случае вы можете перейти прямо к строке кода, которая вызывает ваши проблемы, не глядя на сборку.

Однако драйверы - это совсем другой мир ... особенно для Windows, потому что для развертывания драйвера требуется в первую очередь много шагов, чтобы получить его на виртуальной машине, и в зависимости от того, что делает ваш драйвер, вам нужно другое приложение для взаимодействия с ним, пока вы выполнение отладки ядра через COM-порт.

Со встроенными системами все не так плохо, если вы подходите к этому с позиции белого ящика. Большинство современных IDE, таких как Keil или IAR Systems, имеют отличные встроенные симуляторы для вашего кода ARM.

Какие инструменты разработчика вы используете при работе с C / C ++? Какие еще инструменты также популярны?

Я много работаю с:

Существует так много инструментов, что я мог бы назвать drop, но эти 7 определенно будут самыми популярными в моей книге.

Какие ресурсы вы бы порекомендовали людям, желающим изучить C / C ++?

Вот некоторые из моих любимых названий книг!

Также этот класс является отличным введением в C ++.

Что еще вы хотите сказать о C / C ++?

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

Языки компиляторов сложны и совсем не дружелюбны, поэтому просто дайте ему время и много попрактикуйтесь.

Большое спасибо, Райан! Где люди могут найти вас в Интернете?

Большое спасибо за чтение! Надеюсь, эта статья оказалась для вас полезной!

Если вы знаете C / C ++ и у вас есть предложения по другим ресурсам, о которых следует знать новичкам, не стесняйтесь оставлять их в комментариях!

Скоро появятся и другие языки!

Вы можете найти меня:

Instagram: @martinsoft

Онлайн: https://martinsoft.net

Я также являюсь соведущим @meetupandcode, регулярной встречи в Лондоне для разработчиков с любым уровнем опыта. "Присоединяйтесь к нам!"