Как я должен выучить C?
Я заинтересован в изучении C. Я читал K & R, и я даже сделал несколько простых работ по расширению C на R и Python. Какая полезная идея для проекта сделать что-то более существенное с C? Какие-нибудь хорошие онлайн-ресурсы, похожие на Dive Into Python? В частности, ресурсы ориентированы на программистов, которые уже знают новые языки, которые пытаются изучать C (в которых упоминаются такие вещи, как "Запрашивать массив для его длины - это нонсенс в C, вы ленивый Pythonista").
Мой фон:
Математика / статистика, повседневное программирование на Python, R, главным образом вокруг обработки естественного языка, алгоритмов и тому подобного.
8 ответов
Несколько лет назад мой друг задал мне тот же вопрос: "Как я могу выучить C?" Я сказал ему, чтобы написать драйвер устройства.
Вообразите мое удивление, когда он фактически сделал это.
У меня есть аналогичный фон для вас. Я использую Python для анализа математики и данных в своих исследованиях, а также для веб-программирования. Разница в том, что я выучил C первым, еще в 90-х.
Если вы можете написать C-расширения для Python, то я бы сказал, что у вас есть достаточно хороший способ понять, для чего C хорош. На мой взгляд, C сегодня лучше всего подходит для двух вещей:
- Написание программного обеспечения низкого уровня, которое взаимодействует с оборудованием.
- Написание кода, который выполняет повторяющиеся, утомительные, ресурсоемкие процессы (математика, синтаксический анализ XML и т. Д.)... возможно, как расширение для языка более высокого уровня.
Конечно, многие высокоуровневые приложения также написаны на C, особенно под Linux, который я обнаружил, но в значительной степени они на самом деле не написаны на "голых" C K&R или в стандартной библиотеке. Скорее, они используют фреймворки, такие как Glib, или wxWindows, или Apache Portable Runtime, или другие, которые все используют некоторую объектно-ориентированную структуру или соглашения и часто абстрагируют некоторые основные детали управления памятью C.
Поэтому я думаю, что использование ваших навыков C в современной языковой среде программирования - это в основном работа на низком уровне или знакомство с одной из этих высокоуровневых сред. Мне лично очень нравятся библиотеки Glib и GTK, так как они используют очень динамическую объектно-ориентированную модель (во многом как Python), не мешая вам использовать низкоуровневые функции C.
Несколько не по теме, но так как вы упоминаете, что ваш опыт работы в Math and Stats, вы должны попробовать свои силы в Project Euler. Есть более 200 математических / статистических задач, доступных для решения. Кроме того, как только вы придете к решению, вы можете просмотреть проблемный форум, чтобы увидеть, как другие решили то же самое решение. Очень удобно для того, чтобы увидеть, как другие решают проблему... и весело загружать!
Вы можете написать переводчика для простого языка. Используйте flex/bison. Сделать это многопоточным и т. Д. Это весело и имеет тенденцию много упражнять указатели. Я написал что-то подобное для школьного проекта: простой язык на основе стека с двумя разными сборщиками мусора, TwoSpace и параллельной версией. Это было весело. И выполнимо в качестве первой в мире программы, которая больше, чем "Здравствуй, мир"!
Изучите изучение C трудным путем, это бесплатная электронная книга, которая проведет вас через множество примеров кода на C и упражнений, чтобы вы могли учиться.
Найдите или определите проблему в своей повседневной работе и заставьте себя решить ее, используя C вместо Python. Это заставит вас изучать язык, сохраняя при этом проблему, подходящую для того, что вы обычно делаете.