Обучение программированию на C (из Python) [закрыто]


22

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

Я программист Python по профессии. Я хотел бы выучить C. Действительно, я пробовал много раз, но я всегда расстраиваюсь. В Python вы пишете несколько строк, и программа творит чудеса. В Си, я не могу сделать что-нибудь полезное.

Кажется, очень сложно даже подключиться к Интернету.

Есть ли у вас какие-либо предложения о том, что я могу сделать, чтобы выучить C? Есть ли хорошие сайты? Какие-нибудь классные проекты?

Благодарность


4
Приятно иметь возможность стоять на гениальных плечах, не так ли? Интерпретатор Python написан на языке C. Теперь вы действительно понимаете, что на самом деле сделали дизайнеры. Это потрясающе.
Пемдас

@Pemdas C обычно используется для создания системных программ.
Searock

Могу ли я порекомендовать начать с чтения содержимого файла и, возможно, выполнить базовое преобразование в другой файл? Пример: взять CSV и разобрать его в файл с разделителями табуляции. Кроме того, вы можете научиться читать информацию заголовка из BMP файла изображения JPEG.
Джошуа Бернс

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

Ответы:


31

Не расстраивайтесь.

Python - это язык программирования высокого уровня. По сравнению с C он может творить чудеса с небольшим количеством кода. Не пытайтесь имитировать результаты Python в C - вы будете быстро разочарованы. Программирование на C требует другого стиля мышления и понимания, потому что, поскольку вы взаимодействуете с компьютером на более интимном уровне. Вот хорошая отправная точка для изучения C:

книги

Интернет материал


1
Можете ли вы предложить программирование упражнение? Что-то полезное желательно. Спасибо.
Хонза Покорный

12

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

Вместо этого взгляните на указатели, массивы, ссылки, структуры в этом C Tutorial . Это поможет вам понять управление памятью и многие функции, которые «приблизят вас к машине».

Если вы можете изучить и понять этот материал, то изучите возможность расширения возможного проекта. Эти понятия фундаментальны для любого настоящего профессионального программирования на языке C.

Это руководство по поиску указателей также выглядит полезным.


C_Tutorialссылка сломана ...
user3768495

11

Это будет очень сложно подключиться к интернету! Думаю об этом:

  • Ваш компьютер может иметь несколько способов подключения - WLAN, Bluetooth, Ethernet и т. Д. Каждый из них имеет свои собственные настройки, которые вам необходимо установить. Вам повезло, что для них уже есть стандарты и драйверы ... использовать их может быть намного сложнее, чем сейчас.

  • IP-адреса могут быть IPv4 или IPv6, и вы должны уметь обрабатывать оба.

  • Там могут быть или не быть прокси, настроенные для системы.

  • Вы должны поддерживать FTP, HTTP или другой протокол.

  • Возможно, вам придется использовать коммутируемый доступ, поэтому вам нужно указать телефонную книгу с паролями и номерами телефонов, если вы еще не подключены. То же самое с именами / паролями WLAN.

  • Возможно, вам придется работать с куки.

  • Система может кэшировать некоторые данные, так что вы хотите использовать кеш или нет?

и этот список можно продолжать и продолжать.

Поэтому тот факт, что это легко сделать с помощью Python, обязательно означает, что многие из них скрыты от вас (или их трудно установить), поэтому вы торгуете простотой за власть. Библиотека C противоположна: она обладает всеми необходимыми возможностями (вы можете легко выполнять системные вызовы), но не имеет никаких настроек по умолчанию (или, по сути, никаких функций для подключения к Интернету).

Вместо того, чтобы думать о C как о скучном, думайте о нем как о сильном. Но в любом случае, не пытайтесь подключиться к Интернету с этим - это чертовски сложно сделать. Вместо этого, начать обучение , как использовать библиотеку для более основных задач (например , файл I / O), узнать о том , как указатели и массивы действительно работают, и когда вы узнаете все те, а затем попытаться решать большие проекты. Вы также оцените Python больше. :)


Редактировать :

Я лично предлагаю, если у вас есть свободное время, сначала изучите C #. Как только вы освоитесь с ним, начните изучать unsafeключевое слово и как использовать указатели и выполнять маршалинг в C #. У вас все еще будет действительно большая библиотека для работы, как с Python, но вы сможете сделать много вещей, которые вы можете сделать в C. Затем перейдите к вызову системных API-интерфейсов вручную (например, InternetOpen ) и изучите как заставить их работать. У вас все еще будет большая гибкость, но вы получите отличное представление о концепциях более низкого уровня. После того как вы сделали это, то начните изучать C - тогда вы обнаружите, что это будет очень просто, и вы увидите (C? понимаете?) преимущества и недостатки языков высокого и низкого уровня, и вы сможете чтобы найти тот, который соответствует вашим потребностям.

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


8

Не читайте код ядра, когда вы изучаете C. Он полон уловок, чтобы выжать из него все до последней части производительности. Некоторые из них очень нестандартные. Это сведет тебя с ума.

Вместо этого взгляните на несколько небольших проектов с высоким качеством кода:

  • Lua - Если вам не интересны языки программирования, вы можете пропустить этот. Иначе, это действительно красивый код, и удивительно видеть, как много они достигают с таким небольшим (что, кажется, вас расстраивает, так как вы пришли из Python).
  • ZeroMQ - я люблю этот проект. Это легкая, сверхбыстрая очередь сообщений. Опять качественные вещи.
  • DarkHttpd - 2700-строчный веб-сервер на языке C. Охватывает несколько забавных тем, таких как программирование сокетов, анализ и работа с протоколами.

0

Одна из целей языка более высокого уровня - скрывать сложные вещи. Если вы хотите выучить язык «более низкого» уровня и не хотите начинать с действительно сложных вещей (которые раньше были в основном скрыты от вас); попробуйте начать с более простых обучающих проектов, сортировки массива чисел или изменения строки символов, или чего-то подобного ...

Легче подняться на крутой холм, делая маленькие шаги.



-3

Сначала изучите грамматику C, а затем используйте ее для написания структуры данных и алгоритма. Конечно, вы можете читать ядро ​​Linux как свой эксперт c языком.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.