С чего начать (самостоятельно) обучение C, или я должен изучить другой язык?

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

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

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

  • Каков наилучший способ научить себя C шаг за шагом, начиная с нулевого уровня?

  • Как моя главная цель - узнать больше фундаментальных основ программирования, является ли C хорошим выбором для этого?

  • Если нет, то какой язык будет?


Резюме:

Прежде всего, спасибо за все замечательные ответы. Это будет очень полезно. Хотя большинство людей, похоже, согласны с тем, что начало с C не является плохим выбором, я также видел, как люди утверждают, что, вероятно, лучше сказать пропустить C и перейти с С++ или даже С#, поскольку эти языки более актуальны.

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

Ответы

Ответ 1

Прочтите Керниган и Ричи "Язык программирования C". Это классика.

Это книга, написанная оригинальными создателями языка. Он короткий, очень читаемый и хорошо написанный.

Ответ 2

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

Я предлагаю вместо этого эту замечательную книгу: C Программирование: современный подход (отказ от ответственности: ссылка amazon)

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

Предостережение: я не приходил в C "для C", я прошел через него по пути к моей конечной цели, Objective-C и Cocoa программирования для настольных приложений на Apple Mac OS X. Если вы действительно хотите очень глубокий knoweldge of C, может не помешать получить обе вышеупомянутые книги и прочитать руководство K & R после прочтения Modern C

Ответ 3

Мой первый шаг в сборе C был копией "языка программирования C" - это простая книга, но сам язык довольно прост.

Ответ 4

Ну, если вы хотите "начать с нуля", я рекомендую обучающую сборку. да сборка. Я узнал 6502, вы можете узнать x86, если хотите, или руки или mips. Найдите эмулятор или прерыватель и прочитайте несколько руководств. Вы точно поймете, как работает ЦП, и код будет иметь больше смысла (например, почему getkeys не обновляется до тех пор, пока вы не сделаете pollkeys и т.д.).

После этого я рекомендую С#, потому что он не такой противный, как c/С++ (в основном я использую С++). Вы поймете, как строка С# может быть представлена ​​в сборке. С# позволяет вам делать больше вещей, которые вы хотите сделать, в отличие от c и С++ (это список вещей, которые мы можем сделать в С++, которые мы сможем сделать в следующем стандарте http://en.wikipedia.org/wiki/C%2B%2B0x, у С# есть несколько из них).

Если вы хотите многому научиться, вы можете попробовать изучать язык, который я рекомендую здесь https://stackoverflow.com/questions/498964/the-difficulty-in-learning-new-languages-by-yourself/578618#578618, который, я думаю, является хорошей идеей после сборки.

Ответ 6

Еще один вариант, если вы хотите изучить основы программирования, - это прочитать Knuth Искусство компьютерного программирования. Это познакомит вас с основами с самого начала. Для дополнительного понимания реализовать алгоритмы самостоятельно в C.

Ответ 7

Существует университетский курс в Университетах Индианы и Пердью по C-программированию. На курсе есть видео-лекции, которые вы можете найти в здесь.

Если вы также заинтересованы в том, чтобы смотреть на С++, есть куча лекций в Проект архива лекций в Интернете под названием "С++ для частиц" Физики ". Вы найдете эти лекции здесь. Лекции проводят Пол Кунц из Стэнфордского университета.

Для более лекций на С++ вы также можете проверить эти лекции из Reconnect Networks.

Ответ 8

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

Ответ 9

Прочтите "Язык программирования C". Напишите короткие упражнения (некоторые из них в книге). Используйте компилятор, например gcc.

Ответ 10

Язык программирования C является хорошей отправной точкой.

Кроме того, C сама по себе является хорошей отправной точкой для изучения основ программирования: вы можете найти программное обеспечение C и разработчиков C почти повсеместно, и многие другие языки берутся на C, такие как С++, С#, Objective-C,...

Ответ 11

После прочтения "языка программирования C", как и многие из предложенных, я бы начал изучать проекты с открытым исходным кодом и учиться на практических примерах. Существует много и нелегко найти правильный, но изучение чтения хорошего кода - лучшая альтернатива для обучения хорошему коду:)

Если у вас есть одно: парное программирование или просто просмотр обоюдного кода - лучший способ узнать.

Ответ 12

1) Язык программирования C K & R 2) Прочтите много исходного кода на C. Поиск кода Google

Вот и все.

Ответ 13

Если вам нужен хороший исходный код для чтения, я могу сердечно предложить Simon Tatham Puzzle Collection (http://www.chiark.greenend.org.uk/~sgtatham/puzzles/, прокрутите вниз до внизу для документации разработчика). Из него вы можете узнать:

  • Как сделать объектно-ориентированное программирование на C (каждая игра в некотором смысле является классом, реализующим интерфейс игры).
  • Как написать переносимый C (скрыть все неподдерживаемые вещи за вашим собственным интерфейсом).
  • Как прокомментировать и документировать свой код.
  • Как программировать GUI в C.
  • Как реализовать структуры данных в C (я помню, что поиск объединения и 2-4 дерева выполняется).

Ответ 14

Я считаю, что ваш нынешний подход неверен. В настоящее время C является подмножеством С++ и не имеет многих концепций современного языка OO. В большинстве случаев он отнесен к устаревшим системам, и большинство новых разработок, которые не привязаны к устаревшему коду, не написаны на C. Лично я начал с С++ (самостоятельно учил) и перешел на С#. Начиная с С++ дает вам все основы, необходимые для понимания ориентации объектов и того, что происходит на низком уровне. Тем не менее, для кого-то, кто только начинает, я бы рекомендовал С# по той простой причине, что его намного легче сойти с земли и начать работать с ним. Кроме того, несколько концепций в С# имеют мало аналогов в мире C и делают программирование более интуитивным (LINQ, lambdas и т.д.). В то время как управление памятью важно (и иногда появляется на С#), это больно управлять и легче не беспокоиться по мере того, как вы запускаете. Чем раньше вы сможете начать интересный проект, тем менее вероятно, что вы должны отказаться.

Ответ 16

Об обучении C

Если вы действительно хотите изучить C, [Kernighan и Ritchie "Язык программирования C" ) (http://en.wikipedia.org/wiki/The_C_Programming_Language_(book)) - это хороший старт.

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

  • Разница между равным оператором (==) и инструкцией назначения (=),
  • Выражение может иметь значение (т.е. a = 1 имеет значение 1),
  • Арифметика указателей,
  • Операции с прямой памятью (т.е. memset(), memcpy()).

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

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

Моя рекомендация

Я бы изучил С#, потому что это современный, хорошо спроектированный (на мой взгляд) объектно-ориентированный язык программирования с хорошей, бесплатной IDE - Visual Studio Express Edition, хорошая поддержка (широкое сообщество, много исходного кода для изучения, множество учебников и примеров). С помощью С# вы можете писать консольное приложение, настольное приложение или веб-приложения, что упрощает изучение, решая широкий круг реальных проблем.

Кроме того, на платформе .NET есть и другие интересные варианты - IronPyton или функциональный F #.

Ответ 17

Пусть C по Yeshvant P Kanitkar