Одна из небольших флеймотем в 2019 году — стоит ли читать [Brian Kernighan, Dennis Ritchie. The C Programming Language. 2ed. Prentice Hall, 1988]. Кратко я однажды написал так:

Книга-реликвия. Много лет она и была стандартом языка C, она же и была локомотивом языка первые лет десять, получив имя K&R, дав имя и тому олдовому стилю: K&R C.

Последние лет 20 часто возникают споры о том, стоит ли её читать. Язык очень изменился, гайды другие, литературы хорошей тоже полно. Студент открывает K&R, послушно осваивает пару сотен страниц, закрывает и спрашивает «нафига я это читал».

Ответ простой: для образования. Оно не всегда явно и прямо практично. K&R представляет собою образец эталонной технической литературы, эта книга задала не только язык, но и структуру учебников по программированию на годы вперёд.

В конце концов, однажды вы напишете строчку кода и вас торкнет: блин, вот теми же словами ту же строчку написали K&R 50 лет назад. Связь поколений вот же перед глазами. Мы буквально стоим на плечах титанов, а не просто так.

Это простой и короткий ответ с одной из позиций — с позиции культурной эрудиции разработчика. А простой и короткий ответ с позиции практики и обучения такой: если у вас нет особых на то причин, читать K&R не стоит.


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

Ну т.е. это, поймите правильно, я люблю C, уважаю K&R, их книгу впервые читал ещё школотой в издании 1992 года от «Финансы и статистика», купив на книжном развале за гроши, и вообще я дочь офицера, всё не так однозначно, но блин, чёт как-то всё-таки давайте отделять ностальгию по мокрой воде от практических нужд подрастающих октябрят.


Во-первых, язык C изменился. Да, я в курсе, что есть диды и преддиды, считающие, что это не так, но первый же «hello, world» (стр. 6) у вас давно выдаст ворнинг при компиляции, что кагбэ номикае. А если вы откроете какой-нибудь ISO/IEC 9899:201x на стр. xiii (Foreword 6), список изменений занимает две с половиной страницы и далеко не все из этих изменений являются мелочью или неважным на первых этапах обучения элементом.

Во-вторых, изменился toolchain. Да, в текучке привыкаешь раз в N лет мигрировать с утилиты на утилиту, но эй, мы про учебник же. Садится боец, учит набор ABC, закрывает книгу и тут же выкидывает ABC из головы, т.к. уже лет N используется XYZ. Компиляция, сборка, тесты, отладка, документирование, IDE, всё такое. В сумме с первым пунктом… ну полистайте хотя бы содержание [Ben Klemens. 21st Century C: C Tips from the New School. O’Reilly Media, 2012], книга и про это тоже.

В-третьих, «The C Programming Language» не является полноценным учебником. Это краткий вольно написанный справочник языка. Тем, кто забыл, напомню: содержательная часть (от «Chapter 2. Types, Operators, and Expressions» до «Chapter 8. The UNIX System Interface» исключительно) содержится всего на 134 страницах. Для сравнения вот объём, написанный с учебной целью по теме указателей:

  • [Robert Traister. Mastering C Pointers. Academic Press, 1990] — 182 страницы.
  • [Kenneth Reek. Pointers on C. Pearson, 1997] — 640 страниц.
  • [Richard Reese. Understanding and Using C Pointers. O’Reilly Media, 2013] — 226 страниц.

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

В-четвёртых, хорошо, K&R были по очевидной причине единственными, кто написал книгу по C в 1978 году. Хорошо, в 1988 году они же выпустили, так сказать, вторую единственную (на самом деле уже нет). Но с тех пор появились и другие книги, другие авторы. Сам постоянно выкарабкиваюсь из ловушки: о, я однажды читал одну книгу, она мне помогла, сейчас её посоветую. Только вот читал я её потому, что других книг не было под рукой. Всё чаще начинает казаться, что K&R советуют в том числе и по этой причине. Ну типа да, в 1990-х нам не были доступны:

  • [Al Kelley, Ira Pohl. A Book on C. Benjamin-Cummings, 1984].
  • [Peter Darnell, Philip Margolis. Software Engineering in C. Springer, 1990].
  • [Donald Alcock. Illustrating C. Cambridge University Press, 1992].
  • [Gary Bronson, Stephen Menconi. A First Book of ANSI C. West Group, 1992].
  • [Gary Bronson. C for Engineers and Scientists. Thomson Learning, 1993].
  • и другие.

Это вот условно известные учебники. Так-то их больше, конечно, а уж в XXI веке целую полку собрать можно. Но нет, эстафета K&R продолжается. Магия книги от авторов языка.


В сумме… Если человек хочет научиться делать хотя бы микропроекты на современном C, а вы предлагаете почитать K&R 1988 года, вы что-то делаете не то. Как минимум, если считаете, что таким образом в 2019 году предлагаете хороший учебник по C. И даже если требуется именно C89, как видите по списку выше, K&R отнюдь не ультимативный выбор.