Có một ngày hết hạn cho đánh giá tốt, nhưng sách cũ về lập trình? [đóng cửa]


51

Sau khi đọc một câu hỏi về sách mọi lập trình viên nên đọc , tôi tự hỏi liệu những điều sau đây có nên bị coi là lỗi thời không:

Tất cả những cuốn sách này có vẻ rất cũ. Không có sự khác biệt giữa điện toán hiện đại và những gì hiện tại khi những cuốn sách đó được viết?

Ví dụ, giáo viên 61 tuổi của tôi giải thích mọi thứ rất độc đáo nhưng quên mất việc tính đến tất cả những gì đã được thực hiện giữa khi ông bắt đầu dạy 25 năm trước và bây giờ.

Điều đó có đúng như vậy đối với những cuốn sách đó không? Không có cuốn sách hiện đại nào dạy các nguyên tắc và công nghệ gần với thực tiễn hiện nay hơn? Hay bạn coi chúng là hữu ích và có liên quan ngay cả ngày hôm nay?


9
Sẽ đáng để bạn dành thời gian để xem xét lý do tại sao tất cả các tựa sách được liệt kê lần đầu tiên được xuất bản ít nhất 12 năm trước, nhưng vẫn còn giá trị cho đến ngày nay. Bốn trong số năm đã được cập nhật kể từ phiên bản đầu tiên của họ, nhưng thời gian trung bình giữa các phiên bản là 10,4 năm.
Caleb

83
Nguyên tắc lập trình cơ bản không thay đổi chỉ vì có một ngôn ngữ hoặc khuôn khổ "hương vị của tuần" mới.
Robert Harvey

26
Mong đợi một sinh viên tốt nghiệp khoa học máy tính thô để xây dựng một hệ thống phần mềm phức tạp cũng giống như mong đợi một sinh viên tốt nghiệp kỹ thuật dân dụng thô thiết kế một cây cầu treo, điều đó đơn giản là không nên xảy ra. Trường học không dạy cho bạn mọi thứ bạn cần biết bằng một cú sút xa, nó sẽ dạy bạn cách học cách trở thành một kỹ sư phần mềm tuyệt vời, và những cuốn sách này có nhiều điều để nói như cách đây hàng thập kỷ - nó đã kết thúc 16 năm kể từ khi ấn bản kỷ niệm 20 năm của Người đàn ông huyền thoại được xuất bản, và nó cũng có liên quan như ngày hôm nay như bản gốc là vào năm 1975.
Mark Booth

10
những cuốn sách này là vô tận; nhưng lập trình viên chỉ giới hạn bản thân trong những cuốn sách này và những người sẽ bỏ qua những thứ mới hơn, sẽ thực sự lỗi thời
gnat

4
Bạn đang cầu xin câu hỏi: nếu những cuốn sách hay, thì chúng không bị lỗi thời.
quant_dev

Câu trả lời:


92

Những cuốn sách này là về các nguyên tắc phát triển. Những nguyên tắc này, về bản chất, là bất khả tri ngôn ngữ, và đối với một số thậm chí cả mô thức bất khả tri (OOP, lập trình chức năng, ngôn ngữ mệnh lệnh).

Họ giải thích lý thuyết và những cách tốt để phát triển bởi vì, cuối cùng, phần mềm luôn là về việc lấy dữ liệu, xử lý nó, sau đó xuất lại nó. Facebook, Twitter, 3D, quy trình kế toán hàng loạt, quản lý giao thông đường sắt, phóng tên lửa, v.v.

Những cuốn sách nói về một ngôn ngữ, như "How to learn XXXXX in YY days", trong đó XXXXX là một ngôn ngữ và YY là một con số cuối cùng (và đôi khi thực sự rất nhanh) sẽ trở nên lỗi thời, bởi vì, về bản chất, chúng là về những thứ tiến hóa hoặc bị thay thế và trở thành lỗi thời

Code Complete , bởi Steve McConnell tuyệt vời, có lẽ là cuốn sách khiến tôi nhận ra điều này. Và Lập trình viên thực dụng đã thay đổi hoàn toàn tầm nhìn mà tôi có về phát triển phần mềm. Bằng cách đọc những cuốn sách như vậy, bạn nhận ra rằng 95% vấn đề bạn gặp phải hàng ngày đã được giải quyết và 95% chúng ta vẫn đang phát minh lại bánh xe.

Cái gọi là "Đám mây" không phải là tương lai của phát triển phần mềm, đó là cách sử dụng phần mềm được phát triển.

Đừng rơi vào cái bẫy của những từ thông dụng cường điệu / nhảm nhí, hãy tập trung vào cách bạn có thể cải thiện các kỹ năng thủ công phần mềm của mình.

Tập trung vào việc học hỏi từ những gì mà những linh hồn xuất sắc khác đã phát minh và học hỏi trước chúng ta, bởi vì đó là cách duy nhất để trở thành một nhà phát triển thành công.


6
Nghệ sĩ giỏi sao chép nghệ sĩ vĩ đại ăn cắp
hafichuk

16
... tàu nghệ sĩ thực sự. :-)
kindall

9
Tuy nhiên, cho dù chúng tôi nói bao nhiêu lần, mọi người vẫn tin rằng họ chỉ cần javascript trong 12 ngày.
Spencer Rathbun

2
Nghệ sĩ giỏi sao chép, nghệ sĩ tuyệt vời sao chép VÀ giữ mã sạch! (Tôi đã có quá nhiều vấn đề đau đầu ở trường khi làm việc với những đứa trẻ khác, những người đã làm xáo trộn dự án vì chúng sao chép từ mọi thứ và mọi người ...)
HTDutchy

@SpencerRathbun hơn nữa (IMHO), Javascript là cách dễ hiểu hơn so với các ngôn ngữ khác, như PHP. Tuy nhiên, có một bazillion "Learn Javascript in 15 seconds"và chỉ một nửa bazillion"Learn PHP on 17 secsonds"
Clement Herreman

80

Tất cả những cuốn sách đó dường như rất, rất, rất cũ. "

Tâm lý học-Lập trình máy tính (1971) - Với số lượng lập trình viên gấp hàng triệu lần so với năm 1970, tâm lý học về cách họ thiết kế chương trình và những sai lầm họ mắc phải và cách tránh chúng là quan trọng hơn bao giờ hết.

Công cụ phần mềm (1976) - Với web là tập hợp các tác phẩm khung, tiện ích, tập lệnh và plugin - các ý tưởng trong Công cụ phần mềm chưa bao giờ phù hợp hơn.

EDIT: Để giải quyết câu hỏi chung về - những cuốn sách lập trình cũ có liên quan không?

Các nguyên tắc chung của công nghệ phần mềm đã không thay đổi nhiều, có các công nghệ mới OO, TDD, v.v. Nhưng nhìn chung, người dùng và các vấn đề không thay đổi - và nghĩ về cách phân chia một vấn đề cũng giống như bây giờ luôn luôn là.

Những cuốn sách cũ này thường được viết bởi các chuyên gia trong lĩnh vực này. Nhiều cuốn sách lập trình hiện đại nhằm mục đích đưa ra một ngưỡng cửa 2000 trang cho từ thông dụng mới nhất trong khi nó vẫn còn hiện hành.

Sách về ngôn ngữ và công nghệ không còn được sử dụng có lẽ không liên quan - không có hướng dẫn sử dụng trình biên dịch Vax trong danh sách. Nhưng 'C' vẫn được sử dụng rất nhiều và 'Ngôn ngữ lập trình C' không chỉ là cuốn sách hay nhất về 'C', đây là mô hình về cách viết một hướng dẫn súc tích và tham khảo ngôn ngữ của bạn.

Có thuật toán mới? Đúng. Nhưng tất cả các thuật toán cũ vẫn có liên quan và hầu hết các thuật toán mới đều nằm trong các khu vực tối nghĩa mà bạn khó có thể đáp ứng. Không ai đã đưa ra một loại tốt hơn hoặc FFT gần đây. Mặc dù những người khác đã cố gắng giải thích chúng tốt hơn, không có lý do gì mà sách Thuật toán năm nay tốt hơn CLRS.

ps. IWhatsit mới tuyệt vời của bạn chạy BSD, được phát triển vào năm 1977. Bây giờ bạn trẻ ra khỏi bãi cỏ của tôi!


28

Tất cả những cuốn sách dường như rất, rất, rất cũ. Bạn có nghĩ rằng có một sự khác biệt giữa ngày nay và khi những cuốn sách đó được viết không?

IMHO không có gì ngạc nhiên khi những cuốn sách rất hay vẫn phổ biến trong nhiều thập kỷ - điều đó cho thấy chúng tốt như thế nào. Nhưng tôi nghĩ tôi có thể nói cho bạn điều gì đó cho từng ứng cử viên mà bạn đã liệt kê:

Code complete: 2nd edition = may, 2004

Trên thực tế, phiên bản đầu tiên của "Code hoàn thành" là từ năm 1993, vì vậy phiên bản này thực sự là một "tác phẩm kinh điển". Đó là về phong cách mã hóa cơ bản, sử dụng các ví dụ áp dụng cho hầu hết mọi ngôn ngữ lập trình của họ C, chứa các ngôn ngữ phổ biến nhất hiện nay (C / C ++ / Java / C # / Objective-C / D / ...). Vì vậy, có, cuốn sách này được cập nhật.

Introduction to algorithms (Cormen, Leiserson, Rivest, Stein)

Chà, tôi thực sự đã không đọc cuốn sách đó (sách giáo khoa thuật toán của tôi là từ "Sedgewick"), nhưng học thuật toán và xây dựng thuật toán thực sự là ngôn ngữ bất khả tri. Tất nhiên, nghề này đang bị đánh giá thấp trong những năm qua vì bạn tìm thấy nhiều thuật toán cơ bản hiện nay trong các thư viện tiêu chuẩn, nhưng IMHO mỗi lập trình viên chuyên nghiệp nên có một số kiến ​​thức cơ bản trong lĩnh vực này.

The Pragmatic Programmer

Đây là một cuốn sách rất hay về lập trình như một nghề thủ công. Ngôn ngữ bất khả tri và rất, rất cập nhật, miễn là lập trình được thực hiện bởi các lập trình viên như một tác vụ thủ công, sử dụng trình soạn thảo văn bản, IDE, kiểm soát phiên bản, v.v.

Structure and Interpretation of Computer Programs: = September 1, 1996

Đây là sở thích cá nhân của tôi, mặc dù (hoặc có lẽ bởi vì) cuốn sách sử dụng Lược đồ để dạy cho bạn sự khác biệt giữa các mô hình lập trình khác nhau. Tôi không biết bất kỳ cuốn sách nào khác tập trung mạnh mẽ vào việc xây dựng trừu tượng. Và xây dựng sự trừu tượng là một khả năng quan trọng tạo nên sự khác biệt giữa một lập trình viên tầm thường và một lập trình viên hàng đầu - điều đó đã không thay đổi trong những thập kỷ qua, vì vậy thực sự, cuốn sách này là vô tận. Hơn nữa, ngôn ngữ chức năng và các yếu tố ngôn ngữ đã trở nên phổ biến gần đây, vì vậy IMHO các ý tưởng được trình bày trong cuốn sách này đã có sự phục hưng.

The C Programming Language

Chà, cuốn sách này có thể không quá vượt thời gian như bốn cuốn kia. Nhưng vì C là một thứ gì đó giống như "mẹ" của tất cả những ngôn ngữ phổ biến mà tôi đã liệt kê ở trên, nên đọc cuốn sách này cũng có thể là một ý tưởng hay - tôi không nghĩ có một số sách "C" hiện đại thực sự tốt hơn. Và nếu bạn phải lập trình bảo trì mã C ++, được viết bởi một người hiểu rõ hơn về C ++, thì cuốn sách này là phải.

Cuối cùng, bạn đã yêu cầu những cuốn sách đưa nhiều "thực tế hiện tại" vào tài khoản, mà không quá cụ thể về công nghệ. Vậy "thực tế hiện tại" là gì và điều gì đã thay đổi ở phía "phi công nghệ"? Dưới đây là một số điểm từ thập kỷ trước, mà không nói rằng danh sách này đã hoàn thành hoặc có các ưu tiên đúng đắn.

  1. Tồn tại nhiều mã kế thừa (đặc biệt là nhiều mã kế thừa hơn không chỉ trong Fortran và Cobol, mà còn trong C ++ và Java).
  2. Kiểm tra đơn vị và TDD đã trở nên yêu thích hơn.
  3. Có nhiều mã nguồn mở hơn có sẵn.
  4. OO đã nhận được ngày càng nhiều nhà phê bình

(Tôi không liệt kê ở đây bất cứ điều gì về phát triển Ứng dụng hoặc Web, vì tôi nghĩ công nghệ này cụ thể).

Có những cuốn sách hay cho chủ đề 1 và 2, đặc biệt là "Clean Code" , từ năm 2008 và "Làm việc hiệu quả với mã kế thừa" từ năm 2004. Có lẽ đó là một số trong những cuốn sách "mới hơn" mà bạn đang tìm kiếm?


5
Ngôn ngữ lập trình C vô tận. Một cuốn sách chưng cất như vậy là rất hiếm. Tôi đã đọc lại nó cho ... Tôi không biết, tôi đã mất số đếm (tôi đọc nó lần đầu tiên khi tôi 13 tuổi) và tôi vẫn đánh giá cao nó. Thay vào đó, tôi đánh giá cao nó nhiều hơn bây giờ.
Francesco

3
Tôi sẽ thêm số 5 vào danh sách của bạn: tính toán song song. Không hẳn là một ý tưởng mới , nhưng ngày nay nó đang được thực hiện ở quy mô chưa từng có, điều này dẫn đến một số vấn đề mới. Nhưng tất cả những điều này vẫn được xây dựng trên cùng một nền tảng như những thứ cũ và tôi có cảm giác rằng OP vẫn không thực sự hiểu những nền tảng đó.
Mike Baranczak

2
@Mike: Tôi đồng ý, điện toán song song đang ngày càng được chú ý hơn trong thập kỷ qua, tôi đã bỏ lỡ điều đó khi tôi viết câu trả lời của mình.
Doc Brown

2
@Doc Brown Quan điểm của bạn về tính phi thời gian của văn học do bạn đã truy cập 1885, 1955, 1985 và 2015 trong vòng vài ngày theo quan điểm của riêng bạn?
Kalamane

13

Trong số những người bạn đã đề cập "Hoàn tất mã", "Lập trình viên thực dụng" và "SICP" đã nằm trong danh sách đọc khuyến nghị của tôi cho tất cả các nhà phát triển mới bắt đầu ở đây tại công ty của tôi và muốn đạt đến cấp cao hơn.

Chúng không bị lỗi thời bởi một cú sút xa vì khoa học cơ bản trong Khoa học máy tính đã không thay đổi.


10

Tôi chưa đọc tất cả những cuốn sách đó, nhưng tôi sở hữu Code Complete và Lập trình viên thực dụng. Những cuốn sách này là xa bị lỗi thời. Họ có thể có một vài đoạn hơi thô nhưng hầu hết nội dung vẫn còn liên quan đến ngày hôm nay.

Sự tiến bộ trong Khoa học và Lập trình Máy tính là một quá trình tiến hóa . Trừu tượng mới đang được giới thiệu trên đầu trang cũ nhưng những điều mới này không cần thiết làm cho cái cũ trở nên lỗi thời.

Một sự tương tự ... Cho dù bạn đang nghiên cứu để trở thành một bác sĩ phẫu thuật chấn thương hay bác sĩ phẫu thuật chuyên về ghép tim, bạn vẫn cần biết cơ thể con người hoạt động như thế nào, hóa học tế bào, hệ thống cơ quan, làm thế nào để mở ngực và làm thế nào để nhanh chóng cầm máu nếu nó xảy ra, v.v ... Chỉ vì họ đã phát minh ra thiết bị nội soi và các kỹ thuật ít xâm lấn hơn, điều đó không có nghĩa là bạn không thích học những điều cơ bản. Nó chỉ có nghĩa là bạn phải tìm hiểu thêm.


yeah Giải phẫu của Grey (cuốn sách thực sự không phải là chương trình truyền hình) được viết vào năm 1918 và sinh viên y khoa vẫn sử dụng nó.
HLGEM

7

"Đám mây" không phải là một yếu tố. "Đám mây" thực sự cũ hơn nhiều so với hầu hết các cuốn sách bạn liệt kê. hầu hết những cuốn sách nói về các nguyên tắc cốt lõi, chúng không thực sự thay đổi thường xuyên. Các khung và thư viện luôn thay đổi, nhưng cách bạn cấu trúc mã của mình sẽ không thay đổi nhiều. Tương tự, một con trỏ vẫn là một con trỏ, nó không bắt đầu làm những việc khác nhau chỉ vì. Cuốn sách cụ thể về ngôn ngữ duy nhất bạn liệt kê là về C, trong trường hợp cuốn sách cũ đó hữu ích hơn nhiều so với bất kỳ cuốn sách mới nào, bởi vì nó có thể được viết gần với khoảng thời gian mà bất kỳ mã C nào bạn sẽ làm việc được phát triển.


6

Danh sách bạn trích dẫn, không có họ không lỗi thời. Một cuốn sách chỉ lỗi thời khi chủ đề đã thay đổi đủ để chúng không hữu ích. Bản chất của lập trình và ngôn ngữ C đều thay đổi rất ít kể từ khi xuất bản


6

Một trong những điều bạn cần nhận ra là tồn tại những nguyên tắc cơ bản vượt thời gian và những triển khai có xu hướng đến và đi.

Các nguyên tắc cơ bản về cơ bản là tất cả các lý thuyết nhàm chán mà Khoa học Máy tính có xu hướng dành nhiều thời gian cho nó, và điều đó vẫn có giá trị ngay cả khi thế giới thay đổi xung quanh nó. Đây như trái ngược với những câu như "Làm thế nào để sử dụng trong môi trường Windows Win32s 3.11", mà rất cũ và lỗi thời.

Để đặt mọi thứ trong quan điểm - văn bản kinh điển trên hình học là hai nghìn năm. Hầu hết toán học được dạy đến cấp đại học ít nhất 300 tuổi. Lý do duy nhất sách CS không cũ hơn là vì lĩnh vực này vẫn còn mới.


Mệnh đề 1 của Euclid 1 của cuốn sách 1 không thể được chứng minh từ các định nghĩa, tiên đề và định đề được cung cấp. Nó không phải là một lựa chọn tốt để học hỏi từ ngày nay, và sau khi giảm cân có thể được coi là lỗi thời.
David Thornley

1
@DavidThornley nếu Euclids Elements không phải là văn bản chính tắc trên hình học, là gì?

6

Một số cuốn sách là vô tận bởi vì chúng thảo luận về những ý tưởng rất cơ bản cho thực tiễn phát triển phần mềm, chúng sẽ luôn được áp dụng.

Lấy ví dụ Tháng người đàn ông thần thoại , khi tôi đọc cuốn sách này, tôi đã quên rằng nó được viết vào năm 1975. Khi anh ấy đọc các tài liệu tham khảo không thường xuyên về Hệ thống IBM 360, nó luôn làm tôi bối rối vì đó là nội dung duy nhất có niên đại sách. Mọi thứ khác áp dụng ở đây và bây giờ. Tôi vẫn giữ bản sao Kiến trúc ứng dụng doanh nghiệp của Martin Fowler , hiện 9 tuổi nhưng một lần nữa vượt thời gian và vẫn có thể áp dụng cho công việc tôi làm ngày hôm nay.

Cuốn sách yêu thích của tôi ngay bây giờ là Mô hình màu Java của Peter Coad với UML (1999) mặc dù tôi là nhà phát triển C # và tránh UML, bởi vì các kỹ thuật và khái niệm giúp tôi trở thành một lập trình viên giỏi hơn.

Chúng tôi sẽ học hỏi tốt từ thế hệ nhà phát triển đầu tiên bởi vì họ đã bước đi ngay bây giờ và sự khôn ngoan kiếm được của họ có thể giúp chúng tôi bắt đầu những gì chúng tôi đang làm / học ngày hôm nay.


MMM - Tôi thích phần về nhóm liên tục sửa lỗi nhưng số lượng lỗi không đổi :)
JoelFan

5

Các nguyên tắc cốt lõi của phần mềm đã không thay đổi trong 20 năm qua. Một ngăn xếp, một cái cây và một danh sách được liên kết vẫn hoạt động giống như lúc trước. "XOR" vẫn có nghĩa tương tự. Một byte vẫn có 8 bit.

Bạn có nghiêm túc đề xuất rằng "phát triển đa nền tảng" là một ý tưởng mới không? Tại sao bạn nghĩ C được phát minh?

"Đám mây" là một từ thông dụng tiếp thị. Nó từng có nghĩa là một cái gì đó đặc biệt, nhưng nó đã được gỡ rối thông qua việc sử dụng quá mức. Ngày nay, bất cứ khi nào bạn có thứ gì đó nói chuyện với một máy chủ từ xa qua mạng, các nhà tiếp thị đều dán nhãn "đám mây" trên đó. Vì vậy, thực sự không có điểm nào để nói về nó, bởi vì đó là một từ vô nghĩa.

Tôi không biết giáo sư 61 tuổi của bạn, vì vậy tôi không thể bảo đảm cho ông ấy. Mặt khác, bạn rõ ràng không thông minh như bạn nghĩ. Nghe giáo sư, có thể bạn sẽ học được điều gì đó.


"Bạn không được già đi bằng cách không ngốc. Rất nhiều người đàn ông trẻ tuổi khôn ngoan, họ đã chết như một bà mẹ." - Richard Pryor


2
"Mặt khác, bạn rõ ràng không thông minh như bạn nghĩ". Nếu tôi nghĩ rằng tôi đã thông minh, tôi sẽ không bao giờ hỏi một câu hỏi như vậy.
Olivier Pons

4

Dưới đây là một số sách rất cũ và lỗi thời:

  • Nghệ thuật lập trình máy tính, tập. 1-3 bởi D. Knuth. Chúng được xuất bản từ năm 1968 đến 1981! Chúng tôi không sử dụng ống chân không nữa, mọi người! Tất cả mọi thứ trong những cuốn sách này là khập khiễng. Đâu là cuộc thảo luận về Python và Ruby?

  • Máy tính và tính hấp dẫn: Hướng dẫn về lý thuyết hoàn thiện NP của MR Garey và DS Johnson, 1979. Siêu khập khiễng! Tất cả những vấn đề này đã được giải quyết ngay bây giờ, có lẽ.

Nếu một cuốn sách không được viết trong ba năm qua tập trung vào Python, thì nó không đáng để đọc.


Nói một cách công bằng, có ít nhất một trường hợp để sử dụng trình biên dịch mã TAoCP cho mã giả của nó có nghĩa là các sách thuật toán hiện đại sử dụng mã giả gần hơn với các ngôn ngữ hiện đại hơn sẽ hữu ích hơn cho 90% chúng ta không viết cho nhúng hệ thống.
Peter Taylor

-1: mỗi tuần hoặc hai tuần tôi thấy ai đó yêu cầu một thuật toán để xử lý một cái gì đó hoặc cái khác mà Knuth đã mô tả chi tiết đáng kinh ngạc. Chỉ để cho vui: Đặt tên cho một thuật toán sắp xếp mới hơn 1981. Bạn muốn trả lời một loại sắp xếp song song? Knuth có các trang về sắp xếp dữ liệu song song. Bạn có thể đúng về những cuốn sách Python nhưng có một sự khác biệt rất lớn giữa sách "Hương vị của tuần" và sách kỹ thuật thủ công.
sarnold

5
Rõ ràng một số máy dò châm biếm đã bị hỏng ...
DaveE

1
<Sarcasm> "Bình luận" </ Sarcasm>
NWS

1
Tôi nghĩ rằng câu trả lời này sẽ làm cho nó trở nên tốt hơn nếu nó bao gồm đề cập đến Nghệ thuật lập trình máy tính Tập 4A, được xuất bản năm 2011 và Tập 5, được lên kế hoạch cho năm 2020!
Đánh dấu gian hàng

3

Những cuốn sách đó không lỗi thời, những cuốn sách đó là kinh điển.

Để trích dẫn Kaplansky , "hãy dành một chút thời gian mỗi ngày để học một cái gì đó mới, không liên quan đến vấn đề mà bạn hiện đang làm việc (hãy nhớ rằng sự rời rạc có thể là tạm thời) và đọc các bậc thầy . "


3

Tôi biết ý của bạn là gì, khi chúng tôi có những tiến bộ (LINQ nghĩ đến) rằng thay đổi khả năng đọc và sử dụng mã, nhưng đơn giản vì những cuốn sách này đã cũ, không có nghĩa là chúng không cung cấp những bài học tuyệt vời cho người đọc.

Mặc dù các ngôn ngữ lập trình mà họ sử dụng có thể không còn thịnh hành, nhưng lý thuyết đằng sau các ngôn ngữ lập trình vẫn còn đúng cho đến ngày nay. Hầu hết những cuốn sách này làm cho nó trở thành một điểm để bao quát rất cơ bản và những điều cơ bản không thay đổi nhiều.


2
Các ngôn ngữ lập trình họ sử dụng chủ yếu là 'C' - chúng có thể không còn thịnh hành, nhưng đã được sử dụng ồ ạt.
Martin Beckett

3
Bạn nên đọc SICP, nó có thể mở mắt về việc LINQ đến từ đâu :)
Joris Timmermans

1

Ngành khoa học máy tính vẫn còn rất trẻ. Những cuốn sách được viết cách đây 30 năm tôi cho rằng vẫn còn giá trị và cần thiết cho sự hiểu biết hoàn toàn. Khái niệm trừu tượng đôi khi mất một lúc để tiêu hóa.


1

Một số phần nhỏ đã lỗi thời trong tất cả những cuốn sách đó, nhưng 99% vẫn rất tuyệt.

Sách thuật toán sẽ già đi từ từ. Thuật toán là toán học và toán học không thay đổi nhanh chóng. Chắc chắn, vẫn còn nghiên cứu các thuật toán mới vượt trội trong một số trường hợp nhất định (ví dụ: thuật toán của Furer (2007) Schonhage-Strassen để nhân các số dài hơn 40000 chữ số với nhau), nhưng phần giới thiệu bạn cần tìm hiểu những điều cơ bản (phân chia và chinh phục / Lập trình động / Lập trình tuyến tính / vv) để bạn có thể học cách suy nghĩ hợp lý về các thuật toán.

Học tiêu chuẩn C từ K & R vẫn là nguồn tốt nhất; mặc dù tôi không chắc liệu tôi có tin tưởng các phần của họ về cách thiết lập môi trường của bạn không.

SICP là một cuốn sách tuyệt vời và dạy các nền tảng của CS hiện đại thông qua việc dạy ngôn ngữ là một ngôn ngữ tuyệt vời. Tuy nhiên, lisp được cho là không phải là ngôn ngữ hữu ích nhất hiện nay; mặc dù những người khác sẽ cho rằng lisp là vũ khí bí mật của họ và việc học các ngôn ngữ như java hoặc python trước tiên khiến các lập trình viên rất tệ, những người không bao giờ cần phải học cách thực hiện sắp xếp hoặc danh sách liên kết hoặc mảng hoặc ký hiệu big-O và cuối cùng làm những việc rất kém hiệu quả.

Một số Code Complete hoặc Lập trình viên thực dụng ít liên quan hơn, đặc biệt nếu bạn đang lập trình bằng các ngôn ngữ mới hơn (ví dụ: python / ruby ​​/ C ++ 11), vì nó thường tập trung vào cách làm một cái gì đó trong C hoặc đưa ra các giải pháp được đề xuất bằng cách sử dụng tốt nhất các công cụ có sẵn tại thời điểm đó (như CVS / RCS để kiểm soát phiên bản thay vì một công cụ hiện đại như git / bzr / hg / svn). Nhưng vẫn còn tốt để suy nghĩ về cách kiểm soát phiên bản là bắt buộc và làm thế nào nó cần phải liền mạch và tự ghi lại tài liệu và đi qua logic về lý do tại sao nó là phải tuyệt đối.

Hoặc các đề xuất của PP chống lại IDE cho trình soạn thảo unix cơ bản + công cụ unix - không có nghĩa là bạn không nên học cách sử dụng find / awk / định vị / grep / sed, nhưng một IDE tốt thường có thể tiết kiệm rất nhiều thời gian. Ví dụ, emacs có thể làm nổi bật cú pháp hoặc hoàn thành mã đơn giản; nhưng nói rằng một IDE tốt sẽ nói đưa ra các mẹo công cụ với khai báo hàm khi bạn nhập chúng hoặc phân tích mã và đánh dấu các biến không sử dụng, giúp dễ dàng thu gọn các phần của mã, v.v.


1

Không có sự khác biệt giữa điện toán hiện đại và những gì hiện tại khi những cuốn sách đó được viết? Bạn có nghĩ rằng nó thay đổi những gì chúng ta nên học? Chúng ta không nên tính đến sự phát triển của 20 năm qua?

Vâng, vâng, vâng.

Điều đó không làm cho những cuốn sách đó trở nên lỗi thời. "Điện toán hiện đại" là một thuật ngữ cực kỳ rộng. Tuy nhiên, nó bao gồm lập trình C, vì vậy "Ngôn ngữ lập trình C" vẫn là một cuốn sách có liên quan. Nó bao gồm các thuật toán, vì vậy "Giới thiệu về thuật toán" vẫn là một cuốn sách có liên quan. Vv và Vv.

Sự nhấn mạnh hiện tại về phát triển đa nền tảng phát triển (xem phonegap) có thay đổi những gì chúng ta học ngày nay không?

Hầu hết các ứng dụng trên App Store (để sử dụng nền tảng di động phổ biến nhất làm ví dụ) được viết bằng Objective C, một ngôn ngữ từ đầu những năm 80, là siêu ngôn ngữ của C. Vì vậy, một lần nữa, C vẫn có liên quan.

Bạn có nghĩ rằng "đám mây" là mốt nhất thời hay tương lai không?

Đó là món quà của chúng tôi.

Khi sinh viên ra khỏi trường đại học, họ được coi là nhà phát triển thực sự và có thể làm việc ngay lập tức

Nhưng điều đó có nghĩa gì?

Có quá nhiều ngôn ngữ, API, khung, nền tảng, công cụ, chiến lược hợp tác, v.v. để trường chuẩn bị cho bạn một công việc cụ thể . Nhà trường chỉ có thể đặt nền tảng, cung cấp cho bạn một mô hình làm việc cơ bản về cách thức hoạt động của máy, về thuật toán, cấu trúc dữ liệu, xây dựng mã, chiến lược phân rã, một số công cụ, v.v.

"Nhà phát triển thực sự" không phải là người biết tất cả mọi thứ, đó là người có năng lực cho loại công việc này, người có nền tảng về lý thuyết và thực hành và là người biết cách học , bởi vì giáo dục của bạn không bao giờ kết thúc.


1
+1 cho nhận xét 'cách học' - đó là những gì đại học dành cho, không phải đào tạo nghề.
DaveE

1

Ok, vì vậy tôi sẽ đưa ra một câu trả lời mang tính lý thuyết hơn nhiều. Tôi đồng ý với tất cả các bạn đã trả lời, khá rõ ràng theo quan điểm của tôi, những cuốn sách này là nền tảng của những gì chúng tôi làm lập trình viên và tất cả các khung mới này được xây dựng trên cùng một cột trụ cũ.

Đây là hai xu của tôi-- không thực sự là của tôi, tôi đã học được từ St. Aquinas và từ Aristotle trước anh ấy.

An abstraction is useless to someone who doesn't understand the particulars.

Các cơ chế của một máy tính đã không thay đổi kể từ von-neumann. Tương tự, các chi tiết bạn cần học để trở thành một lập trình viên tuyệt vời sẽ giống nhau cho đến khi mô hình von-neumann bị lỗi thời. Hội, là ngôn ngữ của máy tính ... học nó, không có lý do.

C là ngôn ngữ bản địa của cả Windows và Unix. Tìm hiểu nó hoặc tìm một giao dịch mới. Nếu bạn là một trong những người đã đi thẳng đến JAVA hoặc C #, bạn có thể là một lập trình viên giỏi, nhưng bạn sẽ là một lập trình viên giỏi hơn nhiều nếu bạn học C-- period.

Thuật toán và cấu trúc dữ liệu là nền tảng của các chương trình máy tính, tìm hiểu chúng.

Tất cả mọi thứ khác là một sự trừu tượng của các ngành rất cốt lõi. Trừu tượng là tuyệt vời khi được sử dụng đúng cách - nghiêm túc, tôi sử dụng C # cho 75% tất cả các dự án của tôi. Tuy nhiên, chúng làm cho bạn trở nên ngu ngốc nếu bạn không dành thời gian để hiểu cách chúng hoạt động và cách hoạt động mà không có chúng. Bạn sẽ dành thời gian vô tận để tạo ra phần mềm để phù hợp với lỗ vuông tục ngữ khi có những cách tiếp cận tốt hơn nhiều và sẽ có những lỗi có thể tránh được. Phát triển phần mềm là một nghề thủ công phải được làm chủ và vào cuối ngày, các công cụ hiếm khi thay đổi. Đó là lý do tại sao những cuốn sách này rất quan trọng.

Tất cả những lập trình viên chỉ có JAVA và C #, tsk, tôi cá là hầu hết trong số họ thậm chí chưa từng xem một tập nào của Star Trek!


1

Tôi nghe một câu nói từ một người cố vấn:

"Lời khuyên tốt đi kèm với một lý do tại sao để bạn biết khi đó không còn là lời khuyên tốt nữa." Vì vậy, trong các điều khoản của cuốn sách, một cuốn sách giải thích lý do tại sao làm X trên Y sẽ cho bạn biết khi lời khuyên đó không còn hiệu lực. Một cuốn sách "luôn luôn làm điều này, chỉ cần làm điều đó" giống như một số khóa học sụp đổ trong ngôn ngữ X là không tốt.

Tôi thấy một cái gọi là "học unix trong 24 giờ", cuốn sách dày khoảng 8cm, tôi nghi ngờ nhiều người thậm chí có thể đọc mọi trang trong 24 giờ :)

Hãy nhớ rằng những gì đang thịnh hành hôm nay có thể bị chế giễu vào ngày mai. Tất cả những điều sau đây từng được coi là chính thống (en vogue ngày hôm qua) nhưng bây giờ thì không:

  • Đi đến
  • Lối vào đơn
  • Ký hiệu Hungary
  • Cách tiếp cận thác nước

Và có một vài điều đã từng hoàn toàn vô cảm nhưng giờ được chấp nhận:

  • Đệ quy như một công cụ để giải quyết vấn đề (triệt để trong những ngày BASIC đầu tiên)
  • Phân bổ bộ nhớ trong thời gian chạy với malloc / new
  • Sử dụng C ++ STL
  • Rác thu thập ngôn ngữ cho các hệ thống thời gian thực

Biết lý do tại sao và bạn sẽ biết khi nào các giả định cũ đã được thay thế bằng một thực tế mới, và lời khuyên cũng vậy.

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.