Я прочитал язык программирования C, куда мне идти отсюда? - PullRequest
3 голосов
/ 03 декабря 2009

Я прочитал «Язык программирования C», что мне теперь делать? Есть ли что-то важное в Си, которое пропущено в книге? Особенно интересует сторона разработки для Linux, так что я должен узнать что-то важное о C в Linux? (Я уже знаю некоторые основы).

Прошу прощения, если этот вопрос кажется немного общим, но я немного растерялся относительно того, что учить дальше.

Ответы [ 11 ]

15 голосов
/ 03 декабря 2009

Делай книжные упражнения! Чтение слишком мало.

6 голосов
/ 03 декабря 2009

Я бы начал с того, что на самом деле программировал что-то следующее. Project Euler имеет много проблем, которые помогут вам лучше понять язык. Оттуда вы можете перейти к программированию на C для Linux, но обязательно сначала изучите основы C.

5 голосов
/ 03 декабря 2009

Вт. Книги Ричарда Стивенса - это следующее место, если вы заинтересованы в разработке для Linux (они посвящены общей разработке под UNIX, но все это в значительной степени применимо к Linux).

Начните с Расширенное программирование в среде UNIX .

2 голосов
/ 03 декабря 2009

Если вы хотите глубоко погрузиться во взлом Linux, прочитайте уже упоминавшееся «Расширенное программирование в среде UNIX». Но IMO эта книга потребовала некоторого опыта, прежде чем читать ее.

Я предлагаю несколько книг о средствах программирования (используемых в Linux, но не только), таких как svn, diff, система упаковки:

2 голосов
/ 03 декабря 2009

Знание C - это круто. Как насчет изучения другого аспекта, чем просто язык / синтаксис?

Меня поражают две вещи:

  • Программирование сокетов. Написать основной чат клиент / сервер. Или небольшая программа для передачи файлов
  • Multi-программирование. Либо с процессами (fork(), и т. Д. - и это будет хорошо соответствовать сокетам), либо
  • Pthreads. Изучите многопоточное программирование и узнайте, что отличает его от процессов для параллельного выполнения задач.

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

2 голосов
/ 03 декабря 2009

Во многих ответах упоминается о программировании, и я бы начал с этого, если вы этого не сделаете.

Я бы также порекомендовал читать качественный код. Прочитайте, скажем, реализацию bzip2 . Не беспокойтесь о том, что не поняли все на первом проходе. Есть много мелочей, идиом, ... которые можно уловить, даже не читая о алгоритме, который реализуется заранее (кстати, алгоритм тоже интересен).

Если вы заинтересованы в верификации программы, взгляните на ACSL , язык спецификации для написания (и проверки) контрактов для функций на Си.

1 голос
/ 03 декабря 2009
0 голосов
/ 03 декабря 2009

Чтение о программировании - это полезный способ для начала, но то, что вы читаете, не начнет собираться вместе в этом «Ага! момент, пока вы не начнете делать некоторое программирование. Найдите задачу, которую вам нужно решить, написав программу (даже если эта задача уже была решена много раз), и напишите программу для ее выполнения. Программа не должна состоять из красивого или эффективного кода, и результат не должен быть привлекательным. Чем больше вы делаете какого-либо программирования, тем лучше вы получите и тем лучше будут ваши программы.

0 голосов
/ 03 декабря 2009

В дополнение к выполнению упражнений в K & R, я бы начал с дублирования набора часто используемых команд linux. Это полезно по двум основным причинам.

  1. Существуют команды Linux / Unix всех уровней сложности. Вы можете начать с простых и двигаться дальше по мере увеличения вашего навыка.

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

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

0 голосов
/ 03 декабря 2009

Понимание программирования на Unix / Linux

Эта книга действительно хороша. Он в основном охватывает все специфические для ОС вещи (специфичные для Unix и Linux), которые не охватываются спецификацией C.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...