LINUX.ORG.RU

С чего начать изучение C?


1

0

Здравствуйте. Простите если не туда написал.

Хочется потихонечку начать изучать программирование. Долго думал с чего же начать, остановился на С и Scheme. Сейчас хочу попытаться разобраться с С. Подскажите хороший самоучитель. Сам, конечно, искал, много нашёл, но хотелось бы спросить профессионалов )

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

Спасибо заранее.

★★★★

Пожалуйста, начни с K&R.

Sphinx ★★☆☆
()

Традиционно рекомендуют книгу Кернигана и Ритчи. Но кроме K&R ещё есть комменты в стиле С++, инлайн функции, _Bool и проч. вещи из стандарта C99. Но я перед С обязательно попрограммировал бы что-нибудь на асме. По крайней мере, надо понимать, как работает процессор на уровне машинных инструкций, что происходит со стеком во время выполнения программы, activation record, основы работы линкера. Это всё технические аспекты, но они очень важны при программировании.

seiken ★★★★★
()

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

А как дополнение можно и Кернигана-Ричи почитать, там всё есть, врядли найдешь у кого-то более простое и понятное изложение.

Dblmok
()

Отвечу сразу, по одному заголовку:

Керниган и Ритчи "Язык программирования С".

anonymous
()

Недавно сам задавал этот вопрос. Хотя и традиционно рекомендуют К&Р, советую сначала взять Prata, C primer plus 5 edition(в торрентах легко найти). Все сложные темы, а именно работа с указателями, расшифровка сишных определений типов и другие тонкости у него изложены просто и понятно. K&R можно использовать как дополнение к нему.

Но на этом все только начинается. Дальше уже стоит брать книжку по программированию под Linux/Unix и учить библиотеки и применение всего что ты возьмешь из базовых книжек. Вот тогда ты уже сможешь реально применять Си.

anonymous
()
Ответ на: комментарий от klalafuda

>> Фигассе. Раскроешь тему?

> спросишь - раскрою

Я уже спросил.

> звиняйте, на днях - хлопот много :-/

Понимаю. Пиво, спинка кеты %)

tailgunner ★★★★★
()
Ответ на: комментарий от imp

>Программирование не изучать, испортит мозг.

Компьютер не включать, испортит мозг.

anonymous
()
Ответ на: комментарий от GreyDoom

черпать информацию из libastral'а..

а вообще берешь "хорошие" сырцы и пошел штудировать. иначе никак

anonymous
()
Ответ на: комментарий от GreyDoom

автор не раскрыл тему о том , для чего ему зание с
это ему нужно для какой-то конкретной задачи или просто потому что тру ?
классический язык программирования с находится в довольно специфической нише , и в основном связан с системными делами
если автор собрался зарабатывать на нем хлеб , то сразу скажу , что он копает не в ту сторону :-)

что касается книг - то начинать можно и нужно именно в данном порядке :

1. The C programming Language
Авторы - Brian W. Kernighan and Dennis M. Ritchie.
2. Data Structures Demystified
Авторы - Jim Keogh and Ken Davidson
3. "Memory Management: Algorithms and Implementation in C/C++"
Автор - Bill Blunden
4. C++ FAQs, Second Edition
Авторы - Marshall Cline, Greg Lomow, Mike Girou
5. C++ Templates: The Complete Guide
Авторы - David Vandevoorde, Nicolai M. Josuttis
6. C++ : Generic Programming and Design Patterns Applied
Автор - Andrei Alexandrescu

kto_tama ★★★★★
()
Ответ на: комментарий от anonymous

> решил, что будешь изучать C и Scheme, то начни с чтения SICP, а уже потом K&R.

ИМХО, ровно наоборот. А начать нужно вообще с процессорных архитектур :) Так сказать, снизу вверх.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Гм, почему ты так настаиваешь на этом? Вряд ли это будет моим способом заработка. Учить хочу не потому, что тру, а потому что чувствую иногда необходимость в этом. А почему именно такой выбор - наверное, тут сказалась специфика ЛОРа и моего дистрибутива. Вот мне и непонятно - действительно ли так нужно недавнему ГСМу изучать процессорные архитектуры? Снизу ыыерх - это тру, конечно, но оправдано ли? Химию, к примеру не так изучают ) Вернее, мы не так учили.

GreyDoom ★★★★
() автор топика
Ответ на: комментарий от kto_tama

Спасибо огромное за список. Буду учить потихонечку. )

А знание именно с не принципиально. Принципиально знание "хоть чего нибудь" для решения своих редко возникающих проблем. Если я сильно ошибаюсь, на ваш взгляд, поправьте и аргументируйте, если не сложно. )

GreyDoom ★★★★
() автор топика
Ответ на: комментарий от GreyDoom

> Гм, почему ты так настаиваешь на этом?

Настаиваю? Да упаси ТНБ.

> Вряд ли это будет моим способом заработка. Учить хочу не потому, что тру, а потому что чувствую иногда необходимость в этом.

Тогда тебе лучше учить что-нибудь вроде Питона, ИМХО.

> А почему именно такой выбор - наверное, тут сказалась специфика ЛОРа и моего дистрибутива

Не знаю насчет твоего дистра, но на ЛОРе SICP и Си обычно поминаются в топиках, где идет речь об обучении профессиональных прогеров. Книги, которые тебе посоветовал kto_tama - тоже из этого разряда.

> Снизу ыыерх - это тру, конечно, но оправдано ли? Химию, к примеру не так изучают )

Ну почему же, теорию электролитической диссоциации вы разве не проходили? С нее начинался курс химии старших классов советской школы :) Так же и Си - перед его изучением полезно знать какую-нибудь "среднестатистическую" процессорную архитектуру, двоичную арифметику, представление данных и прочие полезные вещи.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Так же и Си - перед его изучением полезно знать какую-нибудь "среднестатистическую" процессорную архитектуру, двоичную арифметику, представление данных и прочие полезные вещи.

А вот об этом какую литературу почитать? Что такое "среднестатистическая" процессорная архитектура? Ведь если я изучу, например, ассемблер х86, то я буду знать только ассемблер х86...

Извините, что вмешиваюсь, тоже хочу стать Ъ С-кодером :)

anonymous
()
Ответ на: комментарий от anonymous

>> Так же и Си - перед его изучением полезно знать какую-нибудь "среднестатистическую" процессорную архитектуру, двоичную арифметику, представление данных и прочие полезные вещи.

> А вот об этом какую литературу почитать?

Конкретных книг посоветовать не могу (я давно не студент), но любой учебник по ассемблеру любой распространенной архитектуры (x86, ARM, MIPS, PowerPC) содержит вводные главы, объясняющие, как представляются данные в памяти, какие узлы содержит процессор, режимы адресации, назначение регистров и прочее. Ты должен примерно представлять, в какие команды компилируется твой Си-код при отсуствии оптимизации.

> Что такое "среднестатистическая" процессорная архитектура?

Это значит 1) не лезть в дебри типа регистровых окон, управления виртуальной памятью, вещей вроде SSE/Altivec, конкретного формата команд; 2) не использовать выморочные архитектуры типа микроконтроллерных или VM.

> хочу стать Ъ С-кодером :)

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

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>> кернигана-ричи *не* читать. испортит мозг.

>Фигассе. Раскроешь тему?

Тут и раскрывать нечего. K&R не учат _программировать_, они исключительно учат _языку_. О чем абсолютно честно предупреждают еще в предисловии.

ЗЫ. Сам наступил на эту грабли - пошел по пути васик, асм, С, С++.

LamerOk ★★★★★
()
Ответ на: комментарий от tailgunner

>>> Так же и Си - перед его изучением полезно знать какую-нибудь "среднестатистическую" процессорную архитектуру, двоичную арифметику, представление данных и прочие полезные вещи.

>> А вот об этом какую литературу почитать?

>Конкретных книг посоветовать не могу

Н. Вирт. Систематическое программирование. Введение.

Начинать нужнее и полезнее всего с него. И не надо бояться упоминаемых в тексте перфокарт ))

LamerOk ★★★★★
()
Ответ на: комментарий от GreyDoom

> А знание именно с не принципиально. Принципиально знание "хоть чего нибудь" для решения своих редко возникающих проблем.

Учи Java! ;) Или Python.

naryl ★★★★★
()
Ответ на: комментарий от tailgunner

По поводу химии - сначала учат как, зная валентность элементов, расставлять коэффициенты в формулах, а только потом, через год-два (не помню уже) проходим электроотрицательность, электронные облака итп. По крайней мере нас учили так. Учились по [РГ]удзитису-Фельдману. Советскому, естессно.

>Питона

Да, я думал об этом. Но есть какое-то субъективное ощущение.. неполноценности, что ли. В смысле уверен, что если осилю С, то 100% осилю и питон/перл, а обратное, ИМХО, неверно. Просто хочется выучить что-то хорошее, как бы иронично не звучало - олдскульное, т.е., как было отмечено, поуичиться скорее программированию, чем конкретному языку. Создалось ощущение, что это проще сделать изучая С/Scheme/Лисп (я понимаю, что объединение не совсем корректно), чем вышеназванные языки.

GreyDoom ★★★★
() автор топика
Ответ на: комментарий от GreyDoom

> >Питона

> Да, я думал об этом. Но есть какое-то субъективное ощущение.. неполноценности, что ли.

Начни с руби. Он прост, входной порог - только умение думать. Синтаксис достаточно естественный. Очень хорошая и полная документация на базовые классы. Вместе с тем, есть базовый набор необходимых струтур "искаропки". Начни с Programming Ruby (The Pragmatic Programmer's Guide). Единственный минус - почти все на английском, хотя перевод то ли этой книги, то ли док к руби на русский я где-то видел в инете.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

>>> кернигана-ричи *не* читать. испортит мозг.

>> Фигассе. Раскроешь тему?

> Тут и раскрывать нечего. K&R не учат _программировать_, они исключительно учат _языку_

И что? Как обучение языку _портит_ мозг, т.е. где активная вредность?

tailgunner ★★★★★
()
Ответ на: комментарий от GreyDoom

> С/Scheme/Лисп (я понимаю, что объединение не совсем корректно)

Оно корректно, но это программа обучения профессионалов. ИМХО, если у тебя нет желания стать таким, отдача от связки Си/Схема не стоит усилий. ЕМНИП, в том же МИТ Си и Схема оставлена только для CS и SE, EE перевели на Питон.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Как обучение языку _портит_ мозг, т.е. где активная вредность?

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

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

2. Нет понимания, что K&R - это практически абстрактный мета-язык, и в любой внешней библиотеке будет свой собственный набор типов.

LamerOk ★★★★★
()

>Хочется потихонечку начать изучать программирование. Долго думал с чего же начать, остановился на С и Scheme. Сейчас хочу попытаться разобраться с С. Подскажите хороший самоучитель. Сам, конечно, искал, много нашёл, но хотелось бы спросить профессионалов )

Если хочеш изучить программирование, то(сюрприз) тебе нужно читать учебники по программированию. K&R2 - замечательная книга по языку С. Но если ты не можеш отреверсить строку или посортировать масив, то что ты будеш на С писать? Тут уже тебе правельно сказали, читай SICP, потом что-то по алгоритмам. А потом уже будеж всякие С и Питоны учить.

Sidrian
()
Ответ на: комментарий от kto_tama

Топикстартер вроде как хочет изучить С. А вы ему собираетесь голову морочить компайл-тайм факториалами на крестах...

Sidrian
()

Гм, простите, а нет ли у кого SICP на русском? Шибко уж неохота на англ читать (

GreyDoom ★★★★
() автор топика
Ответ на: комментарий от GreyDoom

> Гм, простите, а нет ли у кого SICP на русском? Шибко уж неохота на англ читать (

В флейме "Фраза о Лиспе" давали ссылки. И не только там, поищи по сайту.

tailgunner ★★★★★
()
Ответ на: комментарий от GreyDoom

>Гм, простите, а нет ли у кого SICP на русском? Шибко уж неохота на англ читать (

Лучше пересильте себя. Быть програмистом не зная английского тяжко...

Sidrian
()
Ответ на: комментарий от anonymous

Спасибо. 100 лет по янлексу не искал ) На гугл перешёл )

GreyDoom ★★★★
() автор топика

> кернигана-ричи *не* читать. испортит мозг.

> C не изучать. испортит мозг.

> Программирование не изучать, испортит мозг.

> Компьютер не включать, испортит мозг.

На LOR не сидеть, испортит мозг.

Nihilist
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.