Nghệ thuật lập trình máy tính - Đọc hay không đọc? [đóng cửa]


63

Có rất nhiều sách về lập trình ngoài kia, và có vẻ như Code Complete nằm ở đầu danh sách "những cuốn sách lập trình phải đọc" của hầu hết mọi người, nhưng còn về Nghệ thuật lập trình máy tính của Donald Knuth thì sao? Tôi là một người bận rộn, giữa công việc và một gia đình trẻ, tôi không có nhiều thời gian rảnh, vì vậy tôi phải kén chọn cách sử dụng nó.

Tôi đang tự hỏi - có ai ở đây đọc 'TAOCP' không? Nếu vậy, có đáng để dành thời gian để đọc hoặc một số cuốn sách khác hoặc nhiều chương trình bên lề như các dự án thú cưng hoặc đóng góp cho nguồn mở sẽ sử dụng tốt hơn thời gian của tôi về phát triển chuyên nghiệp?

TUYÊN BỐ TỪ CHỐI - Đối với những người chơi áo phông "Knuth là nhà của tôi", đừng hiểu nhầm tôi - Tôi muốn đọc nó, nhưng tôi chỉ tự hỏi liệu nó có nên ở đầu danh sách ưu tiên của tôi hay không nếu cái gì khác nên đến trước


Tôi muốn đọc nó, nhưng nó đắt như địa ngục, vì vậy tôi sẽ nhận được nó khi tôi hoàn thành uni và bắt đầu kiếm tiền. Ngoài ra, tôi cần một kệ sách lớn.
gablin

Tôi đã làm nó đến trang 3 và tai chó. Bán bộ trên Amazon 6 tháng sau.
kirk.burleson

Câu trả lời:


72

TAOCP là một tài liệu tham khảo vô giá để hiểu cách cấu trúc dữ liệu và thuật toán mà chúng ta sử dụng hàng ngày và lý do công việc, nhưng việc đọc nó để che đậy sẽ là một khoản đầu tư phi thường của thời gian của bạn.

Là một người đàn ông gia đình khác, dành thời gian với con của bạn.


34
+1 cho trẻ em - máy tính nổi tiếng là tốt để chờ đợi. Họ có thể chờ đợi những đứa trẻ lớn hơn.

3
+1 cho trẻ em, trong khi bạn có thể đọc sách bất cứ lúc nào trong đời, bạn sẽ có thể chơi với đứa trẻ 4 tuổi chỉ trong 1 năm. Và với đứa trẻ 5 tuổi của bạn chỉ 1 năm nữa ...

3
Câu trả lời chính xác. Có rất nhiều thứ sẽ giúp chúng ta lập trình tốt hơn nhưng chúng ta cần thông minh về nơi chúng ta đầu tư thời gian và cũng nhớ rằng có nhiều thứ hơn trong cuộc sống hơn là trở thành một lập trình viên tuyệt vời.
Jon Hopkins

5
Tôi chưa có con và tôi thực sự muốn đọc xong trước khi chết. Tôi không có con à?
chìm

1
@sank bạn đang suy nghĩ như một lập trình viên ... :)
Angelin Nadar

23

Thay thế "bách khoa toàn thư" trong câu hỏi của bạn cho mọi tham chiếu đến TAOCP, và tôi nghĩ rằng câu trả lời nên rõ ràng. Bởi vì trong rất nhiều khía cạnh, đó là những gì TAOCP là.

Có một câu chuyện (có thể là tận thế) về việc Steve Jobs gặp Knuth. Điều đầu tiên Jobs nói với ông là "Rất vui được gặp ông Tiến sĩ Knuth. Tôi đã đọc tất cả các tác phẩm của bạn!". Câu trả lời của Knuth là "Bạn đầy rác rưởi": http://www.folklore.org/StoryView


1
Bách khoa toàn thư có vô số thứ trong đó, hầu hết không thú vị hoặc liên quan đến những người thậm chí có nhiều sở thích. Nội dung của TAOCP ít nhất có liên quan đến bất kỳ nhà phát triển phần mềm nào.
David Thornley

4
Re: câu chuyện Jobs: Đó một câu chuyện về ngày tận thế. Knuth đã nói nhiều như vậy trong buổi nói chuyện về công nghệ Google của Randall Munroe.
greyfade

4
"Câu chuyện" tuy nhiên làm tôi mỉm cười. :)
MetalMikester

Tôi có thể chứng thực sự hài hước của Tiến sĩ Knuth. Tôi đã gửi một email đến địa chỉ được công bố của mình. Tôi ngạc nhiên khi anh trả lời. Phản hồi của anh ấy là một bản sao cứng được đánh dấu trong email của tôi, anh ấy đã lịch sự bảo tôi đọc phần còn lại của phần này trong TAOCP. Chữ ký email của tôi là về từ Missouri (cho tôi xem), mà anh ấy đã nhận xét về một chính trị gia MO ngu ngốc. Sau đó, ông kết luận bằng cách nói: "Đùa thôi, đừng đổ lỗi cho tôi vì Thống đốc Schwarzenegger".
dbasnett

21

Không, nó không nên ở đầu danh sách ưu tiên của bạn. Tôi đã có một bộ đầy đủ và tôi KHÔNG đọc toàn bộ. Tôi đã sử dụng nó (cho đến nay) như một tài liệu tham khảo tốt về một số vấn đề nhất định (ví dụ như nó là vô giá đối với sự hiểu biết của tôi về tính ngẫu nhiên và thử nghiệm các trình tạo ngẫu nhiên). Bất cứ khi nào một chủ đề CS xuất hiện mà tôi không thực sự xử lý tốt, tôi có xu hướng lấy một chút TAOCP có liên quan như một bước tốt trong sự hiểu biết của tôi.

Nếu bạn quyết định đọc nó, sẽ tiếp thêm sức mạnh cho bạn và tôi chắc chắn khuyên bạn nên dùng nó trong những phần nhỏ. Đừng ngại bỏ qua và nhìn vào bất cứ điều gì thú vị nhất trước tiên.


1
Anh nói trúng phóc.
kirk.burleson

9

TOACP là một bài đọc thiết yếu - tại một số điểm. Tùy thuộc vào những gì bạn làm hàng ngày, nó có thể không phải là khẩn cấp nhất của bạn.

Đó là một trong những cuốn sách (tốt, bộ sưu tập sách) rất tốt để đọc sớm trong sự nghiệp của bạn bởi vì nó thực sự mang đến cho bạn những hiểu biết tốt mà bạn thường không có được cho đến sau này, nhưng nó không cần thiết để tồn tại cho đến khi bạn tốt nghiệp phần đó về sự nghiệp của bạn, nơi bạn không chỉ viết mã, bạn chọn hộp công cụ. Đây là điểm mà bạn thực sự muốn nghiên cứu các thuật toán, hy vọng đã hiểu thiết kế ngôn ngữ một chút và có hiểu biết rất rộng về những công cụ, ngôn ngữ và hệ thống nào hiện có, và cách mỗi người phù hợp với hệ sinh thái của những thứ bạn có thể vẽ cho một dự án cụ thể.

Nói cách khác: đó là học hình ảnh lớn, vì vậy nếu bạn bị ám ảnh như tôi đọc nó bây giờ, nếu bạn không, bạn có thể tắt nó cho đến khi bạn bắt đầu khao khát bước lên thang và trở thành một anh chàng hình ảnh lớn.


6

Gần đây đã thực hiện nhiệm vụ này, tôi có thể nói rằng cách anh ấy viết rất thú vị và các vấn đề được dán nhãn (theo độ khó) rất thông minh. Lấy tập đầu tiên và đọc chương 1 và 2 và xem bạn thích nó như thế nào.


6

TAOCP là một công việc tuyệt vời, nhưng đọc nó sẽ là một khoản đầu tư thời gian khủng khiếp cho một nhà phát triển phần mềm thực hành. Nếu bạn làm điều đó, bạn sẽ phải hy sinh vài năm (đó là mất bao lâu) ngân sách tự cải thiện chuyên nghiệp của bạn để học quá nhiều về quá ít.

Tôi muốn giới thiệu để làm việc thông qua một hoặc một vài cuốn sách ít "tối thượng" về thuật toán, yêu thích của tôi trong lĩnh vực này là Hướng dẫn thiết kế thuật toán của Steven S. Skiena

Sau đó, nếu bạn cảm thấy rằng bạn cần / muốn di chuyển nhiều hơn đến Knuth.

Đồng thời bạn có thể mua một hoặc một số lượng TAOCP, xem qua để hiểu Knuth bao gồm những khu vực nào và giữ nó trong thư viện của bạn trong trường hợp bạn thực sự sẽ cần một số thông tin từ nó hàng ngày công việc. Dự đoán có học thức của tôi là bạn sẽ không và đó là một lý do khác tại sao tôi không khuyên bạn nên đọc. Nhưng nếu bạn sẽ thấy mình tham khảo nó đủ thường xuyên, thì bạn sẽ biết rằng nó cũng đáng để bạn dành thời gian để đọc nó để che.


6

Công việc tinh thần của Knuth là tài liệu tham khảo phổ biến nhất mà các lập trình viên dự định đọc hoặc đọc xong. Một ngày nào đó.


2
Nó giống như "Lược sử thời gian" của Hawking dành cho các lập trình viên.
Jon Hopkins

1
Bit tôi đã đọc ABHIT. Bức xạ Hawking có vẻ kỳ lạ với tôi. Một lỗ đen co lại vì một số thứ khác rơi vào nó? Tôi nhận được sự bảo tồn của khối lượng và hai nửa của mỗi cặp ảo-có thể không bao giờ gặp nhau để phá hủy, nhưng ý tưởng vẫn chỉ là kỳ dị.
Steve314

@ Steve314: Điều thậm chí còn tồi tệ hơn là những lỗ đen rất nhỏ phát nổ dữ dội. Về mặt lý thuyết.
Steven A. Lowe

2
ABHOT là ngắn và dành cho công chúng. TAOCP không phải là những thứ đó.
Sean McMillan

3

+10 về nhận xét gia đình / trẻ em. Tôi cố gắng và làm hầu hết việc đọc trong khi chịu đựng trên các chuyến bay mắt đỏ cho khách hàng.

Nhưng ... vâng, rất đáng để đọc. Không có lý do để đọc tuyến tính, thay vào đó đọc lướt qua và chọn một vài chủ đề quan tâm.


3

Tôi chắc chắn trong trại của những người cảm thấy rằng mọi nhà phát triển nên đầu tư vào việc lấy sách vào một lúc nào đó (và giờ trở nên dễ dàng hơn khi có vẻ như họ đang được in lại trên bìa mềm ) nhưng trên cùng một mã thông báo, tôi sẽ cũng khó có thể tin rằng ai đó sẽ ngồi xuống và đọc tất cả từ trang bìa này sang trang bìa khác.

Cách tiếp cận tốt nhất với họ - nếu bạn không đi làm nơi bạn có thời gian rảnh để ngồi và đọc - là đọc đủ để biết nơi tìm thấy những thứ trong đó và sau đó đọc một chương đầy đủ khi bạn thấy mình sử dụng chúng làm sách tham khảo cho một vấn đề nhất định. Với Google và Stack Overflow, việc tiếp cận với sách tham khảo là không phổ biến, nhưng trong một số trường hợp, bạn có thể thấy rằng các cuốn sách cung cấp một số thông tin chi tiết mà bạn sẽ phải gửi thêm thời gian tìm kiếm trên internet.


1
Đọc một chương đầy đủ? Đó là khoảng một nửa khối lượng, và họ không phải là khối lượng nhỏ. Tôi nghĩ bạn có thể có nghĩa là một đơn vị văn bản nhỏ hơn.
David Thornley

3

Đừng quên rằng lúc đầu, Knuth muốn viết một cái gì đó về cách viết trình biên dịch.

Bạn có thể nhận được rất nhiều thông tin trên mạng với wikipedia chẳng hạn, nhưng nếu bạn không phải là một nhà nghiên cứu nào đó, chỉ cần đọc tóm tắt, bạn sẽ nhận được sự hài lòng.

Bạn vẫn có thể có được cuốn sách đầu tiên để bạn có thể đọc nó khi bạn cảm thấy buồn chán ...


2

Có lẽ điều quan trọng hơn là bạn làm những vấn đề đó trong cuốn sách hơn là bạn chỉ đọc nó. Điều đó sẽ đòi hỏi rất nhiều thời gian.

Anh ta có tới 4 tập và 5 cuốn sách (dù đó là gì) nên việc hoàn thành các cuốn sách có lẽ tốt hơn một khóa học đại học về các nguyên tắc cơ bản của khoa học máy tính và khiến bạn trở thành lập trình viên giỏi nhất từ ​​trước đến nay.

Vì bạn đã có một gia đình trẻ, như tôi, bạn đã cho tôi một ý tưởng hay ho. Tôi sẽ mua từng cuốn sách một lần và dạy cho trẻ em của bạn.


1
"Vì vậy, hoàn thành các cuốn sách có lẽ sẽ tốt hơn một khóa học đại học" - Tập 1-3 được sử dụng làm sách giáo khoa trong một số khóa học khi tôi có bằng CS, và chúng tôi sẽ dành toàn bộ khóa học chỉ bằng một nửa của một tập ví dụ: "Tập 3 Sắp xếp và Tìm kiếm" được dạy thành hai khóa học riêng biệt.
tcrosley

2
Điểm nhỏ, nhưng ngay bây giờ chỉ có ba tập được xuất bản với tiến độ thứ tư. Các biểu tượng là một bản in trước của những gì sẽ trở thành tập thứ tư. www-cs-facemony.stanford.edu/~uno/taocp.html
rjzii

1

Nếu bạn tò mò, sau đó làm điều đó, nhưng nó mất khá nhiều thời gian để tiêu hóa vì vậy bạn cần phải dành thời gian của bạn.

Bạn có đi lại nơi bạn có thể đọc - điều đó sẽ hoàn hảo.


EDIT: Bạn có thể thấy phần xem trước này của một phần nhỏ của Tập 4 thú vị: http : //www-cs-facemony.stanford.edu/~uno/fasc1a.ps.gz

(lưu ý: phần tái bút nén)


1
Thật không may (trong trường hợp này - RẤT may mắn khác) Tôi làm việc từ xa, vì vậy đó không phải là một lựa chọn.
Zannjaminderson

1

Đó không phải là điều mà hầu hết mọi người sẽ muốn ngồi xuống và đọc bìa, không. Đây là một tài liệu tham khảo vô giá, và chắc chắn sẽ rất tốt để chọn nó, chọn một phần thú vị, đọc qua nó và làm một số bài tập. Nhưng các so sánh bách khoa toàn thư được thực hiện ở trên khá thích hợp ... nó lớn, bao quát và chi tiết. Và một số "bài tập" là những vấn đề nghiên cứu có thể mất nhiều năm để giải quyết.

Nếu bạn chỉ muốn có kiến ​​thức tốt hơn về các thuật toán cấp thấp, có thể tốt hơn là bắt đầu với các cuốn sách của Robert Sedgewick (ví dụ: "Thuật toán trong C", "Thuật toán trong Java", v.v.).


1

Nếu bạn muốn thay đổi thế giới, thì hãy đọc nó. Nếu bạn muốn tìm hiểu các bản hack mới, thì đừng đọc nó.


1

Knuth's TAOCP là một kiệt tác. Nhưng, giống như bất kỳ kiệt tác nào (như "Illiad", "Chiến tranh và Hòa bình" hoặc "Tìm kiếm thời gian đã mất" của Proust), nó không dành cho tất cả mọi người hay giờ.

Cuốn sách được viết rất tốt và nghiên cứu rất tốt. Các vấn đề rất lớn và giải thích về các thuật toán được thực hiện tốt.

Vấn đề lớn của cuốn sách là việc Knuth hiển thị mã cho một ngôn ngữ lắp ráp hư cấu cho một máy tính hư cấu. Tôi hiểu lý do tại sao anh ấy làm điều đó, nhưng thực tế là nó hút.

Tôi khuyên bạn nên sử dụng cuốn sách này như một cuốn kinh thánh. Khi cần, hãy tìm nó. Bạn sẽ tìm thấy câu trả lời. Nó đã xảy ra với tôi hơn một lần!


3
Nó có giúp ích gì không nếu đã sử dụng trình biên dịch thực tế cho IBM360 hoặc PDP8?
Martin Beckett

1
Nó không bao giờ có thể chịu đựng được 50 năm này với ngôn ngữ lắp ráp phi hư cấu. Nó đặt mọi người vào thế bất lợi như nhau!
luser droog
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.