2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Дональд Кнут. Искусство программирования
Сообщение25.01.2014, 11:01 


26/12/11
87
Здравствуйте.
Хотелось бы немного поговорить об этой книге со знающими людьми.
Сразу приношу извинения, если создал тему не в том разделе.

Сабжевая книга в обсуждениях в Сети практически однозначно позиционируется как "каждый программист обязан прочитать". Одновременно с этим книга требует весьма серьёзной математической базы.
Поискав в Сети обсуждения сабжа, я увидел странную картину. У меня возникло впечатление, что эту книгу все рекомендуют, но почти никто её не читал. Очень мало людей говорят "Я прочитал полностью". В лучшем случае читали частично, использовали отдельные алгоритмы, кто-то не читал вовсе. Разумеется, я говорю о программистах. На этой почве нередко разгораются споры в духе "Кто не читал Кнута - не программист, пшел вон из профессии", "Не читавшие Кнута становятся быдлокодерами", ну и так далее.
Кстати, заранее прошу участников воздержаться от подобных высказываний, ибо тема не об этом.

Итак, к обсуждению я предлагаю два вопроса.
1. Действительно ли книга является must read для программистов?
Или можно обойтись чем-то попроще, например, Вирт + Кормен.

2. Учитывая, что для прочтения Кнута требуется математическая подготовка.
По каким книгам лучше подтягивать уровень этой подготовки? Помимо "Конкретной математики" самого Кнута.
Математика весьма обширная дисциплина, поэтому вопрос ставлю именно в контексте изучения трудов Кнута. (кстати, в обсуждениях также говорят, что для чтения Кнута нужно подтянуть математику, но никто не даёт рекомендаций по литературе).

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

По высшей математике как-то не было особых рекомендаций касаемо литературы.
Имеется издание Шипачева "Высшая математика". Однако помню, что в процессе учёбы данная книга помогла не очень - отдельные вещи, которые мы изучали, в ней просто отсутствуют.
По теории вероятностей была рекомендована книга Гмурмана.
Посмотрев, соответствующие темы данного форума, я не увидел данных книг среди рекомендуемых. Они настолько плохи?

Да, поскольку Вам неизвестен мой уровень математической подготовки и я не знаю, как выразить его внятно, предлагаю рекомендации по литературе давать для программиста-первокурсника.

Прошу высказываться.

 Профиль  
                  
 
 Re: Дональд Кнут. Искусство программирования
Сообщение25.01.2014, 18:20 
Заслуженный участник


15/05/05
3445
USA
Я читал только интересующие меня темы в 1-3 томах (списки и деревья; генераторы ПСЧ и их тестирование; числовые системы с симметричной базой; методы внешней сортировки).

Итак IMHO:

О существовании "Искусства программирования" желательно знать каждому программисту. Но не думаю, что каждый должен читать Кнута, тем более целиком. Читать нужно только то, что интересно или требуется по работе/учебе.

fflatx в сообщении #818964 писал(а):
1. Действительно ли книга является must read для программистов?
Или можно обойтись чем-то попроще, например, Вирт + Кормен.
Я бы назвал этот многотомник "must know about".
Из предисловия к 1-му тому:
Цитата:
одна из целей данной книги - предоставить читателю правильное математическое обоснование предмета изложения.
Если Вас не интересует обоснование алгоритмов, то значительную часть текста Вам читать не обязательно.
Между прочим, многие программисты обходятся и без "Вирт + Кормен".

fflatx в сообщении #818964 писал(а):
2. Учитывая, что для прочтения Кнута требуется математическая подготовка.
По каким книгам лучше подтягивать уровень этой подготовки?
Вот что об этом пишет сам Кнут в предисловии к 1-му тому:
Цитата:
Теперь несколько слов о математическом содержании данного многотомного издания. Материал излагается так, что он вполне доступен даже лицам со средним образованием; более сложные фрагменты они смогут просмотреть или просто опустить.
И это при том, что программы по математике в американских школах проще, чем в российских.
fflatx в сообщении #818964 писал(а):
(кстати, в обсуждениях также говорят, что для чтения Кнута нужно подтянуть математику, но никто не даёт рекомендаций по литературе).
Думаю, требуется общая математическая культура. Например, не просто знать формулу бинома Ньютона, но и уметь быстро (в уме) раскрывать скобки.

 Профиль  
                  
 
 Re: Дональд Кнут. Искусство программирования
Сообщение25.01.2014, 20:34 
Аватара пользователя


31/10/08
1244
Сам я имею высшее образование по специальности "инженер-математик".
Читал Кнута целиком. Да для чтения нужно владеть математикой на серьёзном уровне. Книжка написана математиком для Математиков. Программистам не рекомендую читать, есть книги куда полезнее.
Кнута можно заменить:
В порядке возрастания сложности.
1)
Название: "Основы программирования"
Автор: С. Окулов
Название: "Программирование в алгоритмах"
Автор: С. Окулов
2)
Название: "Алгоритмы. Построение и анализ." Издание 2-е
Автор: Томас Кормен, Чарльз Лейзерсон, Рональд Ривест, Клиффорд Штайн

По поводу второго вопроса.
Берём читаем если не понятно то ищем книги из нужной темы. Если в них не понятно, то ищем то, что в них не понятно.

Есть неплохая серия книг "Математика в техническом университете" (МГТУ им Баумана).
Только в ней надо привыкнуть к обозначениям.

-- Сб янв 25, 2014 21:40:54 --

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

 Профиль  
                  
 
 Re: Дональд Кнут. Искусство программирования
Сообщение25.01.2014, 21:49 


26/12/11
87
Yuri Gendelman в сообщении #819071 писал(а):
Я читал только интересующие меня темы в 1-3 томах
Вот в этом, видимо, моя проблема. Я не привык читать выборочно. По крайней мере, незнакомую книгу. Всегда есть риск пропустить что-то важное.

Yuri Gendelman в сообщении #819071 писал(а):
Если Вас не интересует обоснование алгоритмов, то значительную часть текста Вам читать не обязательно.
На этот вопрос я не могу ответить однозначно.
На данном этапе есть потребность восполнить пробелы в знаниях, в том числе и касательно алгоритмов. Заинтересует ли меня математическое обоснование - зависит от алгоритма. Иногда оно нужно для более глубокого понимания.

Yuri Gendelman в сообщении #819071 писал(а):
Теперь несколько слов о математическом содержании данного многотомного издания. Материал излагается так, что он вполне доступен даже лицам со средним образованием;
У меня не возникло такого впечатления, если честно. Тут бы я с Кнутом поспорил. Хотя не могу сказать, что я совсем уж тупой и безмозглый и математика для меня - китайская грамота. Это было бы неправдой. Однако, вынужден признать, что многое подзабылось со временем.

Yuri Gendelman в сообщении #819071 писал(а):
более сложные фрагменты они смогут просмотреть или просто опустить.
Да. Вот этого я как раз и не умею. Когда приходится так делать, у меня всегда остаётся ощущение, что я чего-то не усвоил. Ощущение недосказанности. Это, конечно, не касается справочников и энциклопедий. Но если книги Кнута рассчитаны на частичное усвоение, то есть можно пропустить что-то без ущерба, тогда дело другое.



Pavia в сообщении #819123 писал(а):
Читал Кнута целиком. Да для чтения нужно владеть математикой на серьёзном уровне. Книжка написана математиком для Математиков. Программистам не рекомендую читать, есть книги куда полезнее.
Интересное и несколько неожиданное мнение. Выходит, название книги вводит в заблуждение?

Вы, наверно, один из немногих, кто прочитал эту книгу полностью.
В том смысле, что число людей, рекомендующих эту книгу (среди программистов) гораздо превосходит число людей, её прочитавших. То есть те, кто рекомендуют, сами не читали.
Недаром есть шутка: Программисты делятся на две категории: те, кто не читал Кнута и те, кто врёт, что читал.

Pavia в сообщении #819123 писал(а):
Кнута можно заменить
...
За рекомендацию спасибо, возьму на заметку.
Кстати, Кормен всё-таки присутствует. Значит, я не ошибся.

Pavia в сообщении #819123 писал(а):
По поводу второго вопроса.
Берём читаем если не понятно то ищем книги из нужной темы. Если в них не понятно, то ищем то, что в них не понятно.
Так, собственно, поэтому я здесь. Я же заглянул в раздел с рекомендуемой литературой. Глаза разбегаются. Проблема как раз в том, как сделать выбор и не ошибиться. Я вот упомянул книги Шипачева и Гмурмана. В разделе с литературой они отсутствуют. Означает ли это, что это не слишком хорошие книги и их чтение - пустая трата времени? Я понимаю, что все книги в раздел не впихнёшь. Но будь они лучшими из лучших, я думаю, они бы удостоились упоминания.
Кстати, если выскажете мнение по поводу этих двух авторов, буду признателен.

Pavia в сообщении #819123 писал(а):
Есть неплохая серия книг "Математика в техническом университете" (МГТУ им Баумана).

Спасибо, возьму на заметку.

Pavia в сообщении #819123 писал(а):
Если вы решите заняться наукой
Это вряд ли. Время и возможности упущены. Я уже не так молод, как могло показаться. В своё время у меня возникло желание двинуться в этом направлении и поступить в аспирантуру, но я вовремя остановился. Я понял, что не потяну и решил не подставлять людей и не подставляться самому. А сейчас уже поздно.

Однако, думаю, подтянуть математику всё-таки будет не вредно.
Поясню, зачем мне это нужно.
Сейчас у меня возник стимул устранить пробелы в знаниях (хотя бы некоторые).
Прочитать то, что собирался, да не прочёл. Подтянуть то, что усвоил недостаточно. И т.д.
Одним словом, дать работу мозгам, чтобы не засохли. :)


Что ж, спасибо за ответы.
Будем трудиться.

 Профиль  
                  
 
 Re: Дональд Кнут. Искусство программирования
Сообщение26.01.2014, 05:16 
Заслуженный участник


15/05/05
3445
USA
fflatx в сообщении #819143 писал(а):
Я не привык читать выборочно. По крайней мере, незнакомую книгу. Всегда есть риск пропустить что-то важное.
Это зависит от цели чтения.
Для меня И.П. - справочник. Когда мне нужно было реализовать внешнюю сортировку то я читал главу 5, пропустив главы 3 и 4. А когда для "монтекарлы" понадобился надежный генератор ПСЧ, то я вернулся к главе 3.
IMHO читать И.П. целиком нужно, если Ваша цель - не практическое программирование, а компьютерные науки.

fflatx в сообщении #819143 писал(а):
Yuri Gendelman в сообщении #819071 писал(а):
Теперь несколько слов о математическом содержании данного многотомного издания. Материал излагается так, что он вполне доступен даже лицам со средним образованием;
У меня не возникло такого впечатления, если честно. Тут бы я с Кнутом поспорил.
Конечно это зависит от уровня мат.подготовки.
Посмотрите обзор требуемой математики в параграфе 1.2. Основное отличие от стандартной ВТУЗовской программы - дискретая математика, особенно комбинаторика.
Вот списочек (от простого к сложному):
- Виленкин Н.Я. Популярная комбинаторика
- Н.Я.Виленкин. Индукция. Комбинаторика. Пособие для учителей
- Виленкин Н.Я. Комбинаторика
- В.Липский. Комбинаторика для программистов
- Ф.А.Новиков. Дискретная математика для программистов
- В.Н.Сачков. Введение в комбинаторные методы дискретной математики

fflatx в сообщении #819143 писал(а):
Yuri Gendelman в сообщении #819071 писал(а):
более сложные фрагменты они смогут просмотреть или просто опустить.
Но если книги Кнута рассчитаны на частичное усвоение.
Но это же он, Кнут, написал, что "можно опустить". Цитата выше из него.

 Профиль  
                  
 
 Re: Дональд Кнут. Искусство программирования
Сообщение26.01.2014, 07:01 


24/05/09

2054
fflatx в сообщении #819143 писал(а):
Хотя не могу сказать, что я совсем уж тупой и безмозглый и математика для меня - китайская грамота. Это было бы неправдой. Однако, вынужден признать, что многое подзабылось со временем.

А почему "Искусство программирования"? Вы, по прошествии некоторого времени, решили стать программистом?

 Профиль  
                  
 
 Re: Дональд Кнут. Искусство программирования
Сообщение26.01.2014, 09:50 


26/12/11
87
Yuri Gendelman в сообщении #819203 писал(а):
Но это же он, Кнут, написал, что "можно опустить". Цитата выше из него.

Написать-то он написал. Только вот критерий очень уж расплывчатый, что-то вроде - "если Вам что-то сложно для восприятия, можете пропустить".
А вот это "мне сложно" - у каждого своё. Так можно и суть "пропустить". И останется вода.
Тогда какой смысл читать?
Например. Вот есть сложный момент, но он не слишком важный, его можно пропустить без ущерба для сути, а вот другой, тоже сложный момент, но его пропускать ни в коем случае нельзя, надо остановиться и разобраться, он важен для дальнейшего прочтения.
Вот где эта грань? Что можно пропускать, а что нельзя?
Очевидно, она у каждого своя. А рекомендация общая для всех. Вот в этом и проблема.

Насколько я успел поковырять Кнута, вижу, очень трудный язык у него. Ну не умеет он излагать материал. Не в обиду ему будь сказано. Хотя, возможно, это влияние перевода?
Может быть, но вряд ли. Объем книги, кстати, косвенно свидетельствует об этом.
Сестра таланта всё-таки краткость, а тут, похоже, человек "растекается мыслью по древу".
Талантливый учёный - не то же самое, что талантливый лектор.
Важно умение доступно изложить свои мысли другому человеку. Вот этого ему не хватает.
Таково моё ИМХО.

Alexu007 в сообщении #819216 писал(а):
А почему "Искусство программирования"? Вы, по прошествии некоторого времени, решили стать программистом?
Простите, Вы тему-то читали? Я всю трудовую жизнь программист.
Но вот Кнута не читал. Грешен, каюсь.
Просто задачи передо мной ставились разные и математическое обоснование особенно не требовалось.

А сейчас я делаю шаг назад и добиваю отдельные моменты, которым не было уделено должного внимания во время учёбы. Например, книги, которые были рекомендованы к прочтению, но не прочитаны. Для чего мне это? Ну, вот надо. Возникла такая внутренняя потребность. Если хотите, считайте это возрастным кризисом.

-- 26.01.2014, 10:58 --

Yuri Gendelman в сообщении #819203 писал(а):
Вот списочек (от простого к сложному):
- Виленкин Н.Я. Популярная комбинаторика
- Н.Я.Виленкин. Индукция. Комбинаторика. Пособие для учителей
- Виленкин Н.Я. Комбинаторика
- В.Липский. Комбинаторика для программистов
- Ф.А.Новиков. Дискретная математика для программистов
- В.Н.Сачков. Введение в комбинаторные методы дискретной математики


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

 Профиль  
                  
 
 Re: Дональд Кнут. Искусство программирования
Сообщение26.01.2014, 13:59 
Аватара пользователя


28/01/12
467
Не так давно мне порекомендовали книгу:
Джон Бентли "Жемчужины программирования".
Цитата:
Описание: Эта книга написана для программистов. Хороший программист должен знать все, что написано до него, только тогда он будет писать хорошие программы. Главы этой книги посвящены наиболее привлекательному аспекту профессии программиста: жемчужинам программирования, рождающимся за пределами работы, в области фантазии и творчества. В них рассматриваются: постановка задач, теория алгоритмов, структуры данных, вопросы повышения эффективности кода, а также верификация и тестирование программ.

Просто, понятно и главное потрясающие примеры.
Я смело рекомендую вам.

PS. Что до Кнута, каюсь, читал только отрывочно.

 Профиль  
                  
 
 Re: Дональд Кнут. Искусство программирования
Сообщение26.01.2014, 17:34 
Заслуженный участник


15/05/05
3445
USA
fflatx в сообщении #819232 писал(а):
Из перечисленного я читал Новикова...
Да, по-моему были 3 издания Новикова.
А мне очень нравится книга В.Липского "Комбинаторика для программистов".

 Профиль  
                  
 
 Re: Дональд Кнут. Искусство программирования
Сообщение26.01.2014, 18:24 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
fflatx в сообщении #819232 писал(а):
Из перечисленного я читал Новикова.
И похоже, мне с ней не повезло: точно помню, что в продаже видел два варианта этой книги (или может, два издания?) с разным количеством страниц, причём существенно разным. Но мне удалось купить ту, которая тоньше, с меньшим количеством страниц. И она мне показалась какой-то урезанной. Постоянно было такое ощущение.
Yuri Gendelman в сообщении #819320 писал(а):
Да, по-моему были 3 издания Новикова.
Последнее на сегодняшний день издание — четвёртое, выпущенное в 2011. Книга теперь называется «Дискретная математика для магистров и бакалавров».

 Профиль  
                  
 
 Re: Дональд Кнут. Искусство программирования
Сообщение27.01.2014, 14:14 
Аватара пользователя


22/09/09

1907
Yuri Gendelman в сообщении #819320 писал(а):
А мне очень нравится книга В.Липского "Комбинаторика для программистов".
И мне очень нравится! Отличная книга! Но знаю многих очень опытных программистов, кто про эту книгу знает, имеет ее в своей библиотеке, но "от корки до корки" не читал. Просто они решают иные задачи. И такое можно сказать про многие книги, содержащие углубленный подход к относительно узкой области. Например, у некоторых из упомянутых выше программистов настольной книгой является С. Писсанецки, Технология разреженных матриц. Тоже замечательная книга. Но разве можно сказать про нее "must read"? Прочесть все очень хорошие узкоспециальные книги для программистов жизни не хватит. Поэтому при углубленном изучении стоит руководствоваться своей специализацией.

Обсуждаемый многотомник Кнута имеет своеобразное устройство. С одной стороны, там много узкоспециальных тем, например, использование преобразования Фурье для умножения с многократной точностью. С другой стороны, автор на нетривиальных примерах подробно демонстрирует общие принципы программирования. Школьных знаний математики для того, чтобы разобраться во всех примерах и решить все упражнения, конечно же, недостаточно. Тем более, что есть и упражнения наивысшей сложности, с решением которых автор и сам бы с интересом познакомился (при условии, что это решение правильное). Дело осложняется еще и тем, что листинги написаны на языке гипотетической машины, т.е. приходится еще разбираться и в этом языке. Это язык низкого уровня (всем ли сейчас нужно углубленное знание ассемблера?) Т.о. чтение непростое и стоит ли читать все подряд - большой вопрос. Но вот если появится задача на вычисление миллиона знаков числа $\pi$, то прочесть указанные страницы про умножение нужно обязательно. Т.е. можно использовать и как общеобразовательный учебник, выпуская слишком специальные темы и не решая слишком сложные упражнения, но многие используют как справочник, по узкоспециальным темам. ИМХО для общего образования лучше прочитать книгу: Н.Вирт, Алгоритмы + структуры данных = программы. Ее достоинства: реальный язык высокого уровня для реальных машин, структурный подход к программированию, средних знаний по математике достаточно. А по известности эта книга сравнима с обсуждаемой.

-- Пн янв 27, 2014 14:44:17 --

Pavia в сообщении #819123 писал(а):
Название: "Программирование в алгоритмах"
Автор: С. Окулов
Хорошая книга, но в качестве дополнительной. Доступна даже школьнику.

 Профиль  
                  
 
 Re: Дональд Кнут. Искусство программирования
Сообщение27.01.2014, 16:05 


10/04/12
704
Я пошел по такому пути: бегло просмотрел (+упражнения) и прочитал понравившиеся мне темы. Плюс решение некоторых упражнений. Знать бывает полезно иногда при решении некоторых нетривиальных задач, когда решение не видно сразу. В качестве примера тут мелькал вопрос, ответ на который на 90% находится в TAoCP.

Ну и если приходится решать переборные задачи, то четвертый том обязательно надо просмотреть, имхо.

 Профиль  
                  
 
 Re: Дональд Кнут. Искусство программирования
Сообщение27.01.2014, 16:37 


27/03/06
122
Маськва
fflatx в сообщении #818964 писал(а):
Сабжевая книга в обсуждениях в Сети практически однозначно позиционируется как "каждый программист обязан прочитать".

Пролистать стоит. Читать выборочно, что покажется нужным. Задачки есть хорошие.
fflatx в сообщении #818964 писал(а):
1. Действительно ли книга является must read для программистов?
Или можно обойтись чем-то попроще, например, Вирт + Кормен.

ИМХО, не является. Читать надо не попроще, а более нужное и человеческое. А Кнут, ИМХО, весьма уныл и бестолков чуть менее, чем полностью.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group