Tôi là một sinh viên CS, và thành thật mà nói, tôi không hiểu sách của Knuth [đã đóng]


52

Tôi tình cờ nhận được câu nói này của Bill Gates: "Bạn chắc chắn nên gửi cho tôi một bản lý lịch nếu bạn có thể đọc toàn bộ." Ông đang nói về cuốn sách Nghệ thuật lập trình . Vì vậy, tôi đã khá tò mò và muốn đọc tất cả. Nhưng thành thật mà nói, tôi không hiểu điều đó.

Tôi thực sự không trí tuệ. Vì vậy, đây sẽ là lý do tại sao tôi không thể hiểu nó, nhưng tôi rất muốn học. Tôi hiện đang đọc Tập 1 về các thuật toán cơ bản. Có cuốn sách nào thân thiện với người mới / người chậm như tôi, điều này sẽ giúp xây dựng kiến ​​thức của tôi để tôi có thể đọc sách của Knuth một cách dễ dàng trong tương lai không?


Humm hãy nói rằng tôi sẽ hiểu nó (và tôi cũng đoán vậy), nhưng sẽ mất rất nhiều thời gian và ngày nay có những cuốn sách dễ dàng hơn ..
Nils

22
Chúng có thể khó đọc, và có thể có những cuốn sách dễ hơn, nhưng dù sao bạn cũng nên đọc chúng. Cho đến nay tôi mới chỉ đọc được cuốn sách đầu tiên và tôi không hiểu mọi thứ trong đó! nhưng nó cũng có giá trị nó. Khoa học máy tính là khó . Bạn càng sớm nhận ra rằng bạn không đủ thông minh để hiểu nó, bạn càng sớm có thể bắt đầu học cách học nó.
Michael K

2
Họ nghiêng về toán học cho các lập trình viên toán-y. CS đã phát triển trong những năm gần đây và có rất nhiều lĩnh vực có lợi không phải là toán học. Bạn muốn phát triển theo hướng nào? Nếu đó là thuật toán và như vậy, có lẽ chúng rất tốt, nếu đó là các lĩnh vực khác, chúng sẽ mở rộng chân trời của bạn, nhưng cũng giống như đọc một cuốn sách về một số chủ đề sinh học. Vì vậy, tùy thuộc vào khu vực của bạn, họ có thể ở bất cứ đâu, từ nhiệm vụ quan trọng đến gần như vô dụng.
Coder

1
Từ khi nào các lập trình viên coi Bill Gates có thẩm quyền?
Giorgio

2
Coursera có 6 khóa học miễn phí về Thuật toán (Thuật toán Phần 1 và 2, Thiết kế và Phân tích Thuật toán Phần 1 và 2, và Phần kết hợp Phân tích Phần 1 và 2).
Anthony

Câu trả lời:


39

Ngay cả tôi cũng nghĩ cuốn sách của Knuth hơi tiên tiến và khó hiểu. Những cuốn sách này chắc chắn là dành cho các nhà thuật toán cấp độ nghiên cứu IMHO.

Vậy có cuốn sách nào thân thiện với người mới / người chậm như tôi không?

Giới thiệu về Thuật toán bằng CLRS đơn giản hơn nhiều.

CHỈNH SỬA :

Tuy nhiên, nếu bạn muốn đọc cuốn sách của Knuth, trước tiên bạn nên trải qua Toán học cụ thể . Knuth muốn học sinh của mình nhận thức được phần toán học cơ bản của phân tích thuật toán.


5
Hướng dẫn thiết kế thuật toán thậm chí còn dễ dàng hơn / dễ tiếp cận hơn - gần như là thú vị để đọc
Martin Beckett

Giới thiệu về thuật toán là một cuốn sách tuyệt vời. Chúng tôi đã sử dụng nó cho khóa học thuật toán CSE đầu tiên của chúng tôi và tôi thích nó. Mặc dù tôi phải nói rằng tôi đã dành nhiều lần lặp đi lặp lại qua các ví dụ tương tự để thực sự nói rằng tôi hiểu chúng.
Chris

4
@SidCool: Có phiên bản thứ 3 của CLRS với hàng tá phần mới.
Bill Lizard

10
Sách của Knuth là Chiến tranh & Hòa bình của lập trình. Chúng là tốt, nhưng chủ yếu được sử dụng để làm cho giá sách trông ấn tượng.
Gaurav

6
"Ngay cả tôi cũng nghĩ cuốn sách của Knuth hơi tiên tiến"? khiêm tốn eh :)
thỉnh thoảng

57

Hãy chắc chắn đọc tất cả các trích dẫn của Gates bao gồm điều này:

"Tôi đã mất kỷ luật đáng kinh ngạc, và vài tháng, tôi đã đọc nó. Tôi đã nghiên cứu 20 trang, cất nó đi trong một tuần và quay lại thêm 20 trang nữa. giúp họ hiểu rằng thế giới sâu sắc và phức tạp. "

Chúng không phải là những cuốn sách dễ dàng và chúng không có ý định. Hãy nhớ rằng một trong những mục tiêu của Knuth là mang lại sự chặt chẽ về toán học cho khoa học máy tính . Thật tuyệt nếu bạn muốn chứng minh điều gì đó về một thuật toán, nhưng không tuyệt vời nếu bạn chỉ muốn biết nó hoạt động như thế nào.

Michael Dorfman có một vài mẹo hay để đọc những cuốn sách trong câu trả lời của anh ấy cho câu hỏi (hiện đã bị xóa) trên Stackoverflow về những gì tôi có thể nhận được từ việc đọc nhiều? . Nếu bạn không có đại diện 10k, bạn vẫn có thể xem câu hỏi và câu trả lời của anh ấy trên máy quay ngược .

Bạn sẽ nhận được gì từ việc đọc nhiều? Một nền tảng tuyệt vời trong Khoa học Máy tính. Bạn sẽ hiểu cách máy tính hoạt động, từ các cổng logic trở lên thông qua trình biên dịch. Bạn sẽ nghĩ về các vấn đề mà bạn chưa bao giờ thực sự biết là các vấn đề (ví dụ, cách nhanh nhất để nhân lên là gì?) Và xem các kết nối thuật toán giữa những thứ mà bạn không bao giờ nghĩ là có liên quan (ví dụ như lòng sông, RNA và dấu ngoặc đơn lồng nhau).

Tôi hoàn toàn không đồng ý với những người nói rằng "xây dựng phần mềm thay vì đọc về xây dựng phần mềm" - có một sự khác biệt giữa các ngành Kỹ thuật phần mềm và Khoa học máy tính. TAOCP là về sau.

Nếu bạn chưa bắt đầu, tôi có một vài khuyến nghị.

Đầu tiên, bạn có thể muốn bắt đầu với Tập 4. Đó là một số tài liệu thú vị, rất cập nhật và khiếu hài hước của Knuth tỏa sáng. Ngoài ra, có các video có sẵn (trên trang web Stanford SPCD hoặc Stanford iTunes) nơi Knuth thảo luận về các phần khác nhau. Những video này rất được khuyến khích. Fascicles 0, 1, 2, 3 và 4 của Tập 4 có sẵn dưới dạng bìa mềm riêng biệt. Cùng với nhau, tài liệu V4 được xuất bản lớn hơn bất kỳ 3 tập đầu tiên nào, nhưng được cắt thành các món ăn có kích cỡ cắn. (Tôi tự hỏi liệu Tập 1-3 có vẻ ít đáng sợ hơn với mọi người nếu mỗi tập được xuất bản ở dạng bìa mềm một chương ...)

Tùy thuộc vào nền tảng toán học của bạn, tôi khuyên bạn nên đọc lướt Chương 1 lần đầu tiên và quay lại khi cần. Trên thực tế, có lẽ bạn sẽ muốn đọc từng phần (ít nhất) hai lần - nhanh chóng ngay lần đầu tiên, chỉ để có được trực giác và ý chính của các lập luận, sau đó từ từ, cẩn thận, hiểu từng bước.

Hãy chắc chắn đọc Tập 1, Fascicle 1 trên MMIX thay vì các phần cũ trên MIX. MMIX tốt hơn theo nhiều cách, và bạn nên chuyển đổi MIX trong văn bản thành MMIX khi bạn đi cùng hơn là cố gắng đi theo cả hai thế giới.

Một nguyên tắc chung: đừng bỏ qua các bài tập. Có rất nhiều tài liệu hay trong các câu hỏi (và câu trả lời). Làm nhiều bài tập nhất có thể; nhưng đọc tất cả (và đọc câu trả lời, một khi bạn đã xử lý vấn đề hoặc quyết định cho nó vượt qua).

Cuối cùng, nếu bạn thực sự bắt lỗi: đọc chỉ mục. Rất nhiều câu chuyện cười lớn ẩn giấu ở đó.

Đương nhiên, StackOverflow sẽ là một nơi tốt để đăng các câu hỏi cụ thể trên văn bản, nếu chúng sẽ xảy ra ....

Đối với các tài nguyên khác, tôi đã thấy rằng việc duyệt các giáo trình của các trường khoa học máy tính được đánh giá cao là hữu ích. Ví dụ, sách giáo khoa cho các lớp thuật toán bắt đầu:


Liên kết đến SO đã bị hỏng, nhưng tôi đã tìm thấy một bài đăng mà tôi tưởng tượng là tương tự: stackoverflow.com/questions/1022167/
Kẻ

+1 cho bài đăng gốc trên Way Back Machine và danh sách sách từ các trường đại học đó
Anthony

+1 để đề xuất bắt đầu với Tập 4, Fascicles 0, 1, 2, 3 và 4 và cũng để đọc về MMIX thay vì MIX. Kết quả là, tôi sẽ bắt đầu với Volumn 1, Fascicle 1, vì nó bao gồm MMIX.
Shaun Luttin

Là một lập trình viên Java / c, tôi cảm thấy <Phân tích cấu trúc dữ liệu và thuật toán trong Java> rất dễ hiểu và khá thực tế.
Eric Wang

29

Knuth là tác giả khoa học máy tính được kính trọng nhất, trích dẫn, nói về và rất được kính trọng trong lịch sử. Những cuốn sách của ông tô điểm cho giá sách của tất cả các nhà phát triển phần mềm nghiêm túc, và được nhắc đến với cùng một mức độ tôn trọng mà mọi người dành cho Kinh thánh và Nghệ thuật chiến tranh.

Tôi thậm chí đã nghe nói rằng một số người thực sự đã đọc một phần các cuốn sách của Knuth.

Hầu hết mọi người chỉ có ý định .

Cá nhân tôi đang tiết kiệm cho họ nghỉ hưu


22
Đó là lý do tại sao các bản sao được sử dụng cũng có giá trị hơn bản sao mới!
Martin Beckett

13
Nếu bạn hiểu Nghệ thuật chiến tranh, bạn sẽ nhận ra rằng bạn chỉ cần khiến mọi người nghĩ rằng bạn hiểu Knuth khi bạn không, và ngược lại là bạn không hiểu Knuth khi bạn làm. Nếu không, bạn không. Và nếu bạn hiểu cuốn 5 của Sách Năm chiếc nhẫn, bạn thậm chí sẽ không cần nói về Knuth. Và nếu bạn đã đọc Nghệ thuật lập trình Unix của ESR và hiểu về công án, bạn thậm chí sẽ không cần Knuth, bởi vì bạn sẽ vượt qua rào cản về sự phức tạp.
Christopher Mahan

20

Sách của Knuth đã thay đổi lĩnh vực thuật toán mãi mãi. Chính anh ta đã nói rằng "2 trang trong cuốn sách của tôi là toàn bộ công việc của ai đó" và những cuốn sách của anh ta rất khó đọc. Cuốn sách chứa tài liệu cô đọng từ nhiều năm làm việc trong Khoa học máy tính.

Bạn không nên cảm thấy tồi tệ nếu bạn không thể hiểu nó.

Như Prasoon đã nói, CLRS là một cuốn sách đơn giản hơn để đọc.

Bạn cũng có Thuật toán của Rajasekaran, Sahni et al rất dễ hiểu.


Thật tuyệt vời khi nghe .. tôi nghĩ tôi là người duy nhất gặp khó khăn khi đọc cuốn sách này .. cảm ơn bạn rất nhiều
Rho

7
@Raymond Ho: Tôi không nghĩ có ai thực sự thích đọc sách của Knuth. Tôi biết ít nhất một người có chúng trên giá sách chỉ với mục đích làm cho chiếc kệ trông thật ấn tượng.
Thất vọngWithFormsDesigner

12

Khi tôi mới tốt nghiệp, tôi đã chọn ba tập TAOCP đầu tiên như một món quà tốt nghiệp cho bản thân mình và cố gắng đọc chúng xuyên suốt. Không bao giờ quản lý nó. Những ngày này tôi đã thực hiện được khoảng 1/3 trong ba tập đầu tiên (được cho là không theo thứ tự cụ thể nào). Tài liệu chắc chắn rất dày đặc, nhưng có ba lời khuyên tôi đã học được rất nhiều.

Đầu tiên, đừng cố đọc từ bìa này sang bìa khác. TAOCP thực sự là một công việc tham khảo nhiều như mọi thứ và tôi thấy tốt nhất là đọc một phần khi nó liên quan đến vấn đề bạn đang cố gắng giải quyết. Giống như nhiều thứ trên thế giới, hiểu các giải pháp dễ dàng hơn nhiều khi bạn gặp phải vấn đề mà họ đang cố gắng giải quyết.

Tiếp theo, sơ đồ đó ở phía trước của cuốn sách, nó không chỉ là một chút hài hước mà thực sự là một mẹo khá hữu ích. Đọc các phần bạn đang làm việc lặp đi lặp lại, bắt đầu trước tiên chỉ bằng các khái niệm bao quát và sau đó nhẹ nhàng đi sâu hơn vào toán học.

Cuối cùng, giữ một số giấy cũ lỗi thời và một cây bút chì tiện dụng để làm việc thông qua các thuật toán như chúng được mô tả, và giải quyết một vài vấn đề dễ dàng. Nó đi một chặng đường dài để giúp thực thi lại những gì bạn đang đọc.


10

Đừng lo lắng, hầu hết mọi người không hiểu Nghệ thuật lập trình máy tính (TAOCP). Vì vậy, đừng nghĩ bản thân là người chậm chạp hoặc người mới vì không hiểu biết - bạn cũng giống như 99,99% khác trong chúng ta không hiểu điều đó.

Bạn khá tham vọng nếu bạn muốn đạt đến cấp độ mà bạn có thể đọc TAOCP một cách dễ dàng . Bản thân tôi chỉ đọc lướt qua những cuốn sách trước khi cất chúng đi. Có lẽ chỉ có một số ít người trên hành tinh này hiểu TAOCP.

Kiểm tra bài: Các lập trình viên Sách không thực sự đọc bởi Bill the Lizard.

rất nhiều cuốn sách khác được liệt kê ở đó khá dễ đọc , dễ hiểu và bạn có thể hưởng lợi ngay lập tức .

Cá nhân tôi thích:


8

Tôi vấp phải câu nói này của Bill Gates: "Bạn chắc chắn nên gửi cho tôi một bản lý lịch nếu bạn có thể đọc toàn bộ." Anh ấy đang nói về cuốn sách Nghệ thuật lập trình .. Vì vậy, tôi khá tò mò và muốn đọc tất cả nhưng thành thật mà nói, tôi không hiểu gì cả .. I'm really not that highly intellectual being.. Vì vậy, đây là lý do tại sao tôi không thể hiểu nó , nhưng tôi rất muốn học .. Tôi hiện đang đọc tập 1 về thuật toán cơ bản .. Vậy có cuốn sách nào thân thiện với người mới / những người chậm chạp như tôi không? Vì vậy, tôi có thể xây dựng bản thân và hy vọng trong tương lai tôi có thể đọc sách của Knuth một cách thoải mái ..

nếu bạn xác định chính mình như vậy not a highly intellectual beingthì bạn đang đặt ra cho mình những kỳ vọng thấp. Bạn phải phá vỡ tâm lý đó nếu bạn muốn làm điều gì đó xứng đáng với rắc rối. Không có nghi ngờ gì trong tâm trí của bạn rằng bạn có thể đạt được một cái gì đó. Ngoài ra, đạt được nó không có nghĩa là bạn sẽ đạt được nó một cách dễ dàng.

Những điều đáng theo đuổi là những điều khó khăn ... và đó không phải là một sáo ngữ. Trong phần mềm, kỹ thuật, trong cuộc sống nói chung, nếu bạn muốn đạt được điều gì đó, bạn phải tìm kiếm những thứ khó, những thứ mọi người tránh và không giải quyết cho mẫu số chung thấp nhất của mọi thứ.

Đầu tiên, không rõ nền CS của bạn là gì. Cuốn sách của Knuth đòi hỏi một mức độ trưởng thành. Rất ít người có bằng CS có thể vượt qua nó một cách dễ dàng. Tôi không mong đợi một sinh viên CS vừa hoàn thành khóa học đầu tiên về thuật toán để thực sự có thể trải qua dù chỉ một cuốn sách của Knuth. Sự trưởng thành cần thiết để có được nó chỉ là không có, và điều đó không liên quan gì đến năng lực tinh thần của học sinh.

Bạn cần phải có các thuật toán cơ bản của bạn lạnh và rõ ràng, và bạn cần phải có một lượng lập trình (công việc và / hoặc học thuật) hợp lý trong vành đai của mình - ít nhất là 40 tín chỉ về lập trình. Bạn cũng cần phải có toán học CS của bạn trên nền tảng vững chắc.

Bạn không thể tiến xa mà không nắm bắt được toán học rời rạc (và có thể là lý thuyết tính toán.)

Không phải là bạn sẽ cần kiến ​​thức đó để giải quyết các vấn đề của Knuth, nhưng bạn cần có sự trưởng thành để có thể trải qua loại tài liệu đó.

Trước tiên, chọn một cuốn sách và chỉ một cuốn sách (cuốn sách của CLRS như được đề xuất trước đó) và làm việc từ đầu đến cuối. Khi có thể làm các chương trình thực hiện các thuật toán. Không sử dụng Java hoặc C #, thậm chí không C ++. Đi đến xương trần C và có được cảm giác xây dựng mọi thứ từ phế liệu kim loại xương trần.

Cũng nhận được cuốn sách của Knuth về "Toán học cụ thể" nếu bạn chưa thực hiện một khóa học về lý thuyết toán học và tính toán rời rạc. Sẽ tốt cho bạn để đi qua cuốn sách đó là tốt.

Sau đó giải quyết bách khoa toàn thư của Knuth, một cuốn sách, một chương một lần. Đừng đi đến một chương khác mà không nắm bắt được phần đầu tiên.

Tôi sẽ đề nghị bạn đi qua tập I (thuật toán cơ bản) trước, sau đó đến tập III (tìm kiếm và sắp xếp). Đó nên là mục tiêu trước mắt của bạn. Sau đó, sau đó (nhiều về sau), giải quyết tập IV (Thuật toán kết hợp) và sau đó là Tập II (Thuật toán bán số.)

Đừng cảm thấy tồi tệ nếu bạn không hiểu nó lúc đầu. Tôi đã cố gắng vượt qua tập I và III trong nhiều năm (10 năm nay).

Và bạn cũng không nên đặt quá nhiều trọng lượng vào nó. Đừng làm điều đó để chứng minh điều gì đó với ai đó hoặc chính bạn. Làm điều đó bởi vì bạn có trí tuệ quan tâm đến việc làm như vậy. Bạn có thể thành thạo các thuật toán chỉ bằng cách sử dụng sách của CLRS (hoặc bất kỳ cuốn sách cấp độ tốt nào ngoài đó.)

Hãy thực dụng và cho bản thân nghỉ ngơi. Hãy coi việc đi qua cuốn sách của Knuth như một tham vọng cá nhân lâu dài, chứ không phải là một bằng chứng ngay lập tức rằng bạn là tài liệu CS;)

Có những điều quan trọng khác (khôn ngoan về nghề nghiệp) để tự sát;)


2
Lưu ý: Bạn tham khảo Tập III hai lần và không bao giờ Tập II, đặt tên Tập III hai tên khác nhau.
thay thế

Cảm ơn bạn đã cho tôi biết (+1). Thứ tự tôi muốn nói là như sau: tập I đầu tiên (thuật toán cơ bản), sau đó là tập III (tìm kiếm và sắp xếp), rồi tập IV (thuật toán tổ hợp) và sau đó là tập II (thuật toán bán số.)
luis.espinal

6
+1 Không phải vì mọi thứ khó khăn mà chúng ta không dám; đó là bởi vì chúng tôi không dám rằng họ khó khăn - Seneca
mouviciel

4

Trước khi bắt đầu với Knuth, tôi đã phải vượt qua bốn cuốn sách khác nhau. Hai cuốn sách đầu tiên là các cuốn sách về thuật toán của Sedgewick . Những tổng quan này hầu hết các thuật toán và cấu trúc dữ liệu trong một biểu mẫu được triển khai thực tế, vì vậy bạn có thể thấy chúng là gì và cách chúng hoạt động. Những cuốn sách này có các phiên bản ngôn ngữ khác nhau - tôi đọc những cuốn trong C, nhưng iirc chúng ban đầu được viết bằng Pascal, và có các phiên bản C ++ và Java ngoài kia.

Sau đó, tôi đã nghiên cứu một phần tốt của cuốn sách Cormen về Thuật toán và sử dụng Giới thiệu về Phân tích thuật toán của Sedgewick và Flajolet như là một văn bản miễn phí, vì nó nằm trong mạch của sự chặt chẽ toán học của Knuth hơn là cuốn sách Cormen. Tôi vẫn chưa hoàn thành một trong hai thứ này, chủ yếu là chọn những phần mà tôi cảm thấy cần.

Sau khi đọc chúng và nhận được bằng Toán học, tôi có thể đọc qua một số TAOCP, nhưng nó là một bài đọc khó. Điều đó không có nghĩa là nó không hữu ích. TAOCP là một số hướng dẫn tham khảo thuật toán lớn nhất xung quanh, nhưng nghĩ rằng bạn có thể sử dụng chúng để "hiểu" đầy đủ bất cứ điều gì có vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.