fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Как выучить

Определяющее руководство и список книг на языке Си

Определяющее руководство и список книг на языке Си

Ответы на этот вопрос – дело рук сообщества. Отредактируйте существующие ответы, чтобы улучшить это сообщение. В настоящее время здесь не принимаются новые ответы или взаимодействия.

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

Си – сложный язык программирования, который трудно освоить на ходу, читая онлайн-учебники. Лучшим способом изучения языка часто является полная книга, и поиск хорошей книги – это первый шаг. Важно избегать плохо написанных книг и, что еще важнее, книг, содержащих серьезные технические ошибки.

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

Не стесняйтесь обсуждать выбор книг, качество, заголовки, аннотации, уровень мастерства и все остальное, что вы считаете неправильным. Книги, которые будут признаны удовлетворительными здешним сообществом C, останутся в списке; остальные будут регулярно удаляться.

Для книг, на которые есть рецензии Ассоциации пользователей Си и Си++ (ACCU), ссылка на эти рецензии должна быть добавлена вместе с книгой.

  • Другие ресурсы, связанные с Си, в вики ctag
  • Аналогичный список для С++: The Definitive C++ Book Guide and List

Этот вопрос обсуждался на Мета в рамках ревизии удаленных вопросов 2018 года. Было принято решение оставить его не удаленным и активно поддерживать.

Если вы новичок в C, имейте в виду, что современный C – это ANSI C, и все, что предшествует этому стандарту (1989), может быть дико устаревшим. Ориентируйтесь на середину 90-х или позже.

@Dhaivat Я думаю, что нет, будьте осторожны, прыгая на волне K&R. K&R не рассматривает ни хороший дизайн программы, ни хорошую практику программирования, в основном потому, что он был написан до того, как кто-то узнал, что такое хорошая практика программирования. В ней не упоминается, какие части языка Си являются лишними или даже опасными. Книга правильно указана как справочное пособие, она не должна использоваться для преподавания/обучения современному программированию.

1 Ответ 1

Внимание!

Это список случайных книг разного качества. По мнению некоторых людей (с некоторыми обоснованиями), это больше не список рекомендуемых книг. Некоторые из перечисленных книг содержат вопиюще неверные утверждения или учат неправильным/вредным практикам. Люди, знающие о таких книгах, могут отредактировать этот ответ, чтобы помочь улучшить его. См. раздел “Список книг по методике С пошел вразнос. Что с этим делать?”, а также Удалённый аудит вопросов 2018.

Справочник (все уровни)

Язык программирования C (2-е издание) – Брайан В. Керниган и Деннис М. Ричи (1988). Все еще хорошее, краткое, но полное введение в язык программирования C (C90, а не C99 или более поздние версии), написанное изобретателем языка C. Однако за последние 25 лет язык изменился и развился хороший стиль C, и есть части книги, которые показывают свой возраст.

C: A Reference Manual (5-е издание) – Сэмюэл П. Харбисон и Гай Р. Стил (2002). Отличный справочник по языку C, до C99 включительно. Это не учебник и, вероятно, не подходит для начинающих. Она отлично подойдет, если вам нужно написать компилятор для C, как это пришлось делать авторам, когда они начинали.

C Pocket Reference (O’Reilly) – Питер Принц и Улла Кирх-Принц (2002).

The comp.lang.c FAQ – Стив Саммит. Веб-сайт с ответами на многие вопросы о языке Си.

Различные версии стандартов языка Си можно найти здесь. Существует онлайновая версия проекта стандарта C11.

Новый стандарт Си – аннотированный справочник (Free PDF) – Дерек М. Джонс (2009). Под “новым стандартом” подразумевается старый стандарт C99, а не C11.

Начинающим

Программирование на C (4-е издание) – Стивен Кочан (2014). Хорошее общее введение и учебник.

Книга по C – Эл Келли/Ира Пол (1998).

Книга по C (бесплатно онлайн) – Майк Банахан, Деклан Брэди и Марк Доран (1991).

C: как программировать (8-е издание) – Пол Дейтел и Харви М. Дейтел (2015). Много хороших советов и лучших практик для начинающих. Индекс очень хорош и служит достойным справочником (только не полностью исчерпывающим и очень поверхностным).

Head First C – Дэвид Гриффитс и Доун Гриффитс (2012).

Beginning C (5th Edition) – Ivor Horton (2013). Очень хорошее объяснение указателей, с использованием множества небольших, но полных программ.

Sams Teach Yourself C in 21 Days – Bradley L. Jones and Peter Aitken (2002). Очень хороший вводный материал.

C In Easy Steps (5th Edition) – Mike McGrath (2018). Это хорошая книга для изучения и реферирования языка C.

Effective C – Robert C Seacord (2020). Хорошее введение в современный язык C, включая главы о динамическом распределении памяти, о структуре программы, а также об отладке, тестировании и анализе. В книге есть некоторые указания на возможные возможности C2x.

Промежуточный

Современный C – Йенс Густедт (2017 1-е изд.; 2020 2-е изд.). Рассматривает язык C на 5 уровнях (знакомство, знакомство, познание, опыт, амбиции) от начального C до продвинутого C. В книге рассматриваются C11 и C17, включая потоки и атомарный доступ, что делают немногие другие книги. Не все компиляторы распознают эти возможности во всех средах.

C Interfaces and Implementations – David R. Hanson (1997). Предоставляет информацию о том, как определить границу между интерфейсом и реализацией в языке Си общим и многократно используемым способом. Он также демонстрирует этот принцип, применяя его к реализации общих механизмов и структур данных в C, таких как списки, множества, исключения, работа со строками, распределители памяти и многое другое. По сути, Хэнсон взял весь код, который он написал в рамках создания Icon и lcc, и выделил лучшие фрагменты в форме, которую другие люди могут использовать для своих собственных проектов. Это модель хорошего программирования на Си с использованием современных методов проектирования (включая абстракцию данных Лискова), показывающая, как организовать большой проект на Си в виде набора полезных библиотек.

Стандартная библиотека Си – П.Дж. Плаугер (1992). Содержит полный исходный код реализации стандартной библиотеки C89.

Алгоритмы на C – Роберт Седжвик (1997). Дает вам реальное представление о реализации алгоритмов на языке C. Очень понятный и ясный; возможно, вам захочется выбросить все остальные книги по алгоритмам и оставить эту.

– Кеннет Рик (1997).

    C Unleashed – Richard Heathfield, Lawrence Kirby, et al. (2000). Не идеальный вариант, но программистам среднего звена стоит попрактиковаться в решении задач, написанных в этой книге. Это хороший подход, похожий на поваренную книгу, предложенный авторами comp.lang.c.

(Бесплатный PDF) – Аксель-Тобиас Шрайнер (1993). Код становится немного запутанным. Если вам нужен C++, используйте C++. Конечно, он использует только C90.

    Эксперт

Экспертное программирование на C: Deep C Secrets – Peter van der Linden (1994). Много интересной информации и военных историй от команды компиляторов Sun, но местами немного устаревшая.

Продвинутое программирование в среде UNIX – Ричард В. Стивенс и Стивен А. Раго (2013). Полное описание того, как использовать API Unix из кода на C, но не так много о механике кодирования на C.

Uncategorized

Essential C (бесплатный PDF) – Ник Парланте (2003). Обратите внимание, что в этом документе в некоторых местах описывается язык C90 (например, при обсуждении // комментариев и размещения объявлений переменных в произвольных местах кода), поэтому к нему следует относиться с некоторой осторожностью.

Часто задаваемые вопросы по программированию на языке Си: Часто задаваемые вопросы – Стив Саммит (1995). Это книга с сайта, указанного ранее. В ней не рассматривается C99 или более поздние стандарты.

C in a Nutshell – Peter Prinz and Tony Crawford (2005). Отличная книга, если вам нужен справочник по C99.

Функциональный C – Питер Хартел и Хенк Мюллер (1997). Учит современным методам, которые неоценимы для низкоуровневого программирования, с учетом параллелизма и модульности.

Практика программирования – Брайан В. Керниган и Роб Пайк (1999). Очень хорошая книга для сопровождения K&R. В ней также используются C++ и Java.

C Traps and Pitfalls by A. Koenig (1989). Очень хорошая книга, но стиль языка C предшествует стандартному C, что делает ее менее рекомендуемой в наши дни.

Некоторые выступают за исключение книги “Ловушки и подводные камни” из этого списка, потому что она заманила некоторых людей в ловушку ошибок; другие продолжают выступать за ее включение. Возможно, ее следует рассматривать как “экспертную” книгу, поскольку для понимания того, что изменилось с момента ее публикации, требуются умеренно обширные знания языка Си.

MISRA-C – промышленный стандарт, опубликованный и поддерживаемый Ассоциацией надежности программного обеспечения автомобильной промышленности. Охватывает C89 и C99.

Хотя это не книга как таковая, многие программисты рекомендуют прочитать и внедрить как можно больше из нее. MISRA-C изначально задумывался как руководство для критически важных приложений, но он применим к любой области применения, где желателен стабильный, свободный от ошибок Си-код (кто не хочет меньше ошибок?). MISRA-C становится стандартом де-факто во всей индустрии встраиваемых систем и приобретает все большую популярность даже в других отраслях программирования. Существует (по крайней мере) три публикации стандарта (1998, 2004 и текущая версия от

Обратите внимание, что некоторые требования правил MISRA подходят не для каждого контекста. Например, директива 4.12 гласит: “Динамическое распределение памяти не должно использоваться”. Это уместно во встроенных системах, для которых разработаны правила MISRA, но не везде. (Компиляторы, например, обычно используют динамическое распределение памяти для таких вещей, как таблицы символов, и обойтись без динамического распределения памяти было бы сложно, если не абсурдно).

Архивные списки рецензируемых ACCU книг по Beginner’s C (116 наименований) за 2007 год и Advanced C (76 наименований) за 2008 год. Большинство из них, похоже, больше нет на основном сайте, и вы не можете просматривать их по темам.

Предупреждения

На сайте ISO 9899 Wiki, который формально не связан с ISO или стандартом C, но содержит информацию о стандарте C (хотя он приветствует выпуск ISO 9899:2011 и не упоминает выпуск ISO 9899:2018), есть список книг и учебников, с которыми следует быть осторожными.

Опасайтесь книг, написанных Гербертом Шилдтом. В частности, вам следует держаться подальше от книги C: The Complete Reference (4-е издание, 2000), известной в некоторых кругах как C: The Complete Nonsense.

Также не стоит использовать книгу Let Us C (16 th Edition, 2017) Яшванта Канеткара. Многие считают ее устаревшей книгой, в которой преподается Turbo C и содержится много устаревшего, вводящего в заблуждение и неправильного материала. Например, на странице 137 обсуждается ожидаемый вывод printf(“%d %d %d

“, a, ++a, a++) и не классифицируется как неопределенное поведение, как должно быть. Кроме того, он последовательно пропагандирует непортативные и баговые практики кодирования, такие как использование gets , %[

]s в scanf , хранение возвращаемого значения getchar в переменной типа char или использование fflush на stdin .

Learn C The Hard Way (2015) by Zed Shaw. Книга с неоднозначными отзывами. Критика этой книги Тима Хентенаара:

Если суммировать мои взгляды, которые изложены ниже, то автор излагает материал в сильно упрощенном и вводящем в заблуждение виде, весь корпус представляет собой переплетенный беспорядок, а некоторые мнения и анализы, которые он предлагает, просто откровенно неверны. Я пытался взглянуть на эту книгу глазами новичка, но, к сожалению, я предвзят многолетним опытом написания кода на C. Для меня очевидно, что либо автор плохо понимает C, либо он намеренно упрощает до такой степени, что фактически вводит читателя в заблуждение (намеренно или иным образом).“Learn C The Hard Way” – это не та книга, которую я мог бы рекомендовать тому, кто одновременно учится программировать и изучает Си. Если вы уже являетесь грамотным программистом на каком-то другом языке, то она представляет собой интересную и необычную экспозицию по Си, хотя у меня есть сомнения по поводу некоторых частей книги.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *