The Art of Computer Programming - หากต้องการอ่านหรือไม่อ่าน [ปิด]


63

มีหนังสือมากมายเกี่ยวกับการเขียนโปรแกรมออกมาและดูเหมือนว่า Code Complete นั้นค่อนข้างจะอยู่ในอันดับต้น ๆ ของรายการส่วนใหญ่ของคนที่ "ต้องอ่านหนังสือโปรแกรมมิง" แต่สิ่งที่เกี่ยวกับศิลปะการเขียนโปรแกรมคอมพิวเตอร์โดย Donald Knuth? ฉันเป็นคนไม่ว่างระหว่างทำงานกับครอบครัวเล็กฉันไม่มีเวลาว่างดังนั้นฉันจึงต้องพิถีพิถันในการใช้งาน

ฉันสงสัยว่า - มีใครที่นี่อ่าน 'TAOCP' หรือไม่ ถ้าเป็นเช่นนั้นมันคุ้มค่าที่จะใช้เวลาในการอ่านหรือจะเขียนหนังสืออื่น ๆ หรือการเขียนโปรแกรมด้านอื่น ๆ เช่นโครงการสัตว์เลี้ยงหรือการมีส่วนร่วมในโอเพนซอร์สเป็นการใช้เวลาของฉันให้ดีขึ้น

การปฏิเสธความรับผิด - สำหรับผู้ที่เล่นกีฬาเสื้อยืด "Knuth is homeboy ของฉัน" อย่าเข้าใจฉันผิด - ฉันต้องการอ่าน แต่ฉันแค่สงสัยว่าควรจะอยู่ด้านบนสุดของรายการลำดับความสำคัญของฉันหรือ ถ้าอย่างอื่นควรมาก่อน


ฉันต้องการอ่านมัน แต่มันแพงเหมือนนรกดังนั้นฉันจะได้รับเมื่อฉันทำเสร็จแล้วและเริ่มได้รับเงิน นอกจากนี้ฉันต้องการชั้นวางหนังสือขนาดใหญ่
gablin

ฉันทำไปที่หน้า 3 และสุนัขหูมัน ขายชุดใน Amazon 6 เดือนต่อมา
kirk.burleson

คำตอบ:


72

TAOCP เป็นข้อมูลอ้างอิงที่ประเมินค่าไม่ได้อย่างเต็มที่สำหรับการทำความเข้าใจว่าโครงสร้างข้อมูลและอัลกอริทึมที่เราใช้ในการทำงานทุกวันและทำไมงาน แต่การอ่านเพื่อให้ครอบคลุมจะเป็นการลงทุนที่ไม่ธรรมดาสำหรับเวลาของคุณ

ในฐานะที่เป็นครอบครัวหนึ่งไปยังอีกคนหนึ่งใช้เวลากับลูก ๆ ของคุณ


34
+1 สำหรับเด็ก ๆ - คอมพิวเตอร์มีชื่อเสียงดีในการรอคอย พวกเขาสามารถรอให้เด็กโตขึ้น

3
+1 สำหรับเด็ก ๆ ในขณะที่คุณสามารถอ่านหนังสือได้ตลอดเวลาของชีวิตคุณจะสามารถเล่นกับเด็กอายุ 4 ขวบเพียง 1 ปี และด้วยลูกอายุ 5 ขวบของคุณเพียงแค่ 1 ปีด้วย ...

3
คำตอบที่ดี มีหลายสิ่งหลายอย่างที่จะทำให้เราโปรแกรมเมอร์ดีขึ้น แต่เราต้องฉลาดเกี่ยวกับเวลาที่เราลงทุนและจำได้ว่ามีชีวิตมากกว่าการเป็นโปรแกรมเมอร์ที่ยอดเยี่ยม
Jon Hopkins

5
ฉันยังไม่มีลูกและฉันอยากอ่านให้จบก่อนที่ฉันจะตาย ฉันจะไม่มีลูกหรอ?
ทรุด

1
@sank คุณกำลังคิดว่าเป็นโปรแกรมเมอร์ ... :)
Angelin Nadar

23

แทน "สารานุกรม" ในคำถามของคุณสำหรับการอ้างอิงถึง TAOCP ทุกครั้งและฉันคิดว่าคำตอบควรชัดเจน เพราะด้วยความเคารพอย่างมากนั่นคือสิ่งที่ TAOCP เป็น

มีเรื่องราวเกี่ยวกับการพบกันของ Steve Jobs Knuth สิ่งแรกที่จ็อบพูดกับเขาคือ "มีความยินดีที่ได้พบคุณดร. Knuth ฉันได้อ่านผลงานทั้งหมดของคุณแล้ว!" คำตอบของ Knuth คือ "คุณเต็มอิ่ม": http://www.folklore.org/StoryView.py?project=Macintosh&story=Close_Encounters_of_the_Steve_Kind.txt


1
สารานุกรมมีสิ่งต่าง ๆ มากมายในนั้นส่วนใหญ่ไม่ใช่ทั้งหมดที่น่าสนใจหรือเกี่ยวข้องกับคนที่มีความสนใจในวงกว้าง เนื้อหาของ TAOCP อย่างน้อยเกี่ยวข้องกับนักพัฒนาซอฟต์แวร์ใด ๆ
David Thornley

4
Re: เรื่องงาน: มันเป็นเรื่องราวที่ไม่มีหลักฐาน Knuth กล่าวมากในการพูดคุยด้านเทคโนโลยีของ Google ของ Randall Munroe
greyfade

4
"เรื่อง" ยังทำให้ฉันยิ้มได้ :)
MetalMikester

ฉันสามารถยืนยันอารมณ์ขันของ Dr. Knuth ได้ ฉันส่งอีเมลไปยังที่อยู่ที่เผยแพร่ของเขา ฉันประหลาดใจที่เขาตอบ การตอบสนองของเขาเป็นสำเนาที่ชัดเจนของอีเมลของฉันเขาบอกให้ฉันอ่านส่วนที่เหลือใน TAOCP อย่างสุภาพ ลายเซ็นอีเมลของฉันเกี่ยวกับการมาจาก Missouri (แสดงให้ฉัน) ซึ่งเขาได้กล่าวเกี่ยวกับนักการเมือง MO ที่โง่เขลา จากนั้นเขาก็สรุปโดยพูดว่า "แค่ล้อเล่นอย่าโทษฉันเพราะรัฐบาลชวาร์เซเน็กเกอร์"
dbasnett

21

ไม่ไม่ควรอยู่ด้านบนของรายการลำดับความสำคัญของคุณ ฉันได้รับชุดเต็มและฉันไม่ได้อ่านทุกสิ่ง ฉันใช้มัน (จนถึงตอนนี้) เป็นข้อมูลอ้างอิงที่ดีเกี่ยวกับปัญหาบางอย่าง (มันมีค่ามากในความเข้าใจของฉันเกี่ยวกับการสุ่มและการทดสอบเครื่องกำเนิดไฟฟ้าแบบสุ่มเป็นต้น) เมื่อใดก็ตามที่หัวข้อ CS เกิดขึ้นที่ฉันไม่มีความสามารถที่ดีจริงๆฉันมักจะหยิบ TAOCP ที่เกี่ยวข้องมาเป็นขั้นตอนที่ดีในการทำความเข้าใจ

หากคุณตัดสินใจที่จะอ่านมันมีพลังมากขึ้นสำหรับคุณและฉันขอแนะนำให้ใช้มันเป็นชิ้นเล็ก ๆ อย่ากลัวที่จะข้ามไปดูสิ่งที่น่าสนใจที่สุดก่อน


1
คุณโดนเล็บที่หัว
kirk.burleson

9

TOACP เป็นสิ่งจำเป็นในการอ่าน ขึ้นอยู่กับสิ่งที่คุณทำทุกวันมันอาจไม่ใช่สิ่งที่เร่งด่วนที่สุดของคุณ

เป็นหนึ่งในหนังสือเหล่านั้น (รวมถึงคอลเลกชันของหนังสือ) ที่ดีในการอ่าน แต่เนิ่นๆในอาชีพการงานของคุณเพราะมันช่วยให้คุณมีความรู้ความเข้าใจที่ดีตามปกติคุณจะไม่ไปจนถึงภายหลัง แต่มันไม่จำเป็นต่อการเอาชีวิตรอด ในอาชีพของคุณโดยที่คุณไม่ต้องเขียนโค้ดคุณเลือกกล่องเครื่องมือ นี่คือจุดที่คุณต้องการศึกษาอัลกอริธึมหวังว่าจะเข้าใจการออกแบบภาษามาบ้างแล้วและมีความเข้าใจอย่างกว้างขวางเกี่ยวกับเครื่องมือภาษาและระบบที่มีอยู่และสิ่งที่แต่ละคนเหมาะสมกับระบบนิเวศของสิ่งที่คุณสามารถทำได้ วาดบนสำหรับโครงการเฉพาะ

กล่าวอีกนัยหนึ่ง: มันเป็นการเรียนรู้ภาพใหญ่ดังนั้นหากคุณกำลังหมกมุ่นอยู่กับฉันอ่านตอนนี้ถ้าคุณไม่มันก็โอเคที่จะนำมันออกไปจนกว่าคุณจะเริ่มโหยหาที่จะย้ายขึ้นบันไดและกลายเป็นคนภาพใหญ่


6

เมื่อเร็ว ๆ นี้ฉันได้ทำภารกิจนี้อย่างมากฉันสามารถพูดได้ว่าวิธีที่เขาเขียนนั้นสนุกมากและมีปัญหาในการติดฉลาก (ตามความยากลำบาก) อย่างเหมาะเจาะ รับเล่มแรกและอ่านบทที่ 1 และ 2 และดูว่าคุณชอบมันอย่างไร


6

TAOCP เป็นงานที่ยอดเยี่ยม แต่การอ่านมันเป็นการลงทุนครั้งยิ่งใหญ่สำหรับนักพัฒนาซอฟต์แวร์ที่ฝึกหัด หากคุณทำเช่นนั้นคุณจะเสียสละสองสามปี (นั่นเป็นระยะเวลาที่ต้องใช้ในการพัฒนาตนเอง) ของงบประมาณของคุณเพื่อเรียนรู้มากเกินไปเกี่ยวกับเรื่องที่น้อยเกินไป

ฉันอยากจะแนะนำให้ทำงานกับหนังสือ "ขั้นสูงสุด" น้อยที่สุดเกี่ยวกับอัลกอริทึมที่ฉันโปรดปรานในบริเวณนี้คือคู่มือการออกแบบอัลกอริทึมโดย Steven S. Skiena

ถ้าคุณรู้สึกว่าคุณต้องการ / ต้องการย้ายไปที่ Knuth ให้มากขึ้น

ในเวลาเดียวกันคุณสามารถซื้อ TAOCP หนึ่งเล่มหรือหลายเล่มลองมองผ่านเพื่อทำความเข้าใจว่า Knuth ครอบคลุมเนื้อหาใดบ้างและเก็บไว้ในห้องสมุดของคุณในกรณีที่คุณต้องการข้อมูลจากในแต่ละวัน งาน. การเดาที่มีการศึกษาของฉันคือคุณจะไม่ทำและนั่นเป็นอีกสาเหตุหนึ่งที่ฉันไม่แนะนำให้ลองอ่าน แต่ถ้าคุณจะพบว่าตัวเองอ้างอิงบ่อยพอคุณก็จะรู้ว่ามันคุ้มค่ากับเวลาที่จะอ่านมันเพื่อให้ครอบคลุม


6

งานน้ำเชื้อของ Knuth คือการอ้างอิงที่ได้รับความนิยมมากที่สุดที่โปรแกรมเมอร์ตั้งใจจะอ่านหรืออ่านจนจบ สักวันหนึ่ง


2
มันเหมือนกับ Hawkey's "A Brief History of Time" สำหรับโปรแกรมเมอร์
Jon Hopkins

1
Bit ผมไม่อ่าน ABHIT รังสีฮอว์คิงดูเหมือนจะแปลกสำหรับฉัน หลุมดำหดตัวลงเพราะมีบางสิ่งตกอยู่ในนั้นอีกหรือไม่ ฉันได้รับการอนุรักษ์ของมวลและสิ่งที่สองครึ่งของแต่ละคู่เสมือนไม่สามารถตอบสนองต่อการทำลาย แต่ความคิดยังคงเป็นเพียงนอกลู่นอกทาง
Steve314

@ Steve314: สิ่งที่ยิ่งกว่าคือหลุมดำขนาดเล็กมากที่ระเบิดอย่างรุนแรง ตามหลักวิชา
Steven A. Lowe

2
ABHOT สั้นและมีไว้สำหรับคนทั่วไป TAOCP ไม่ใช่สิ่งเหล่านั้น
Sean McMillan

3

+10 ในการแสดงความคิดเห็นในครอบครัว / เด็ก ฉันลองและอ่านหนังสือส่วนใหญ่ในขณะที่ยืนยงตาแดงเที่ยวบินให้กับลูกค้า

แต่ ... ใช่คุ้มค่ากับการอ่าน ไม่มีเหตุผลที่จะอ่านเชิงเส้นแทนที่จะอ่านและเลือกหัวข้อที่น่าสนใจ


3

ฉันมั่นในค่ายของคนที่รู้สึกว่านักพัฒนาทุกคนควรลงทุนเพื่อรับหนังสือในบางจุด (และมันก็ง่ายขึ้นตอนนี้ดูเหมือนว่าพวกเขาจะถูกพิมพ์ซ้ำในหนังสือปกอ่อน ) แต่ในทำนองเดียวกันฉันจะ ก็ยากที่จะเชื่อว่าใครบางคนจะนั่งลงและอ่านพวกเขาทั้งหมดจากหน้าปกไปหน้าปก

วิธีที่ดีที่สุดสำหรับพวกเขา - ถ้าคุณไม่มีการเดินทางไปทำงานที่คุณมีเวลาว่างที่จะนั่งอ่าน - คือการอ่านให้เพียงพอเพื่อให้รู้ว่าจะหาอะไรในพวกเขาและอ่านบทเต็มเมื่อคุณเคย พบว่าตัวเองใช้พวกเขาเป็นหนังสืออ้างอิงสำหรับปัญหาที่กำหนด ด้วย Google และ Stack Overflow ไม่ใช่เรื่องธรรมดาที่จะเข้าถึงหนังสืออ้างอิง แต่ในบางกรณีคุณอาจพบว่าหนังสือมีข้อมูลเชิงลึกที่คุณจะต้องส่งเวลาพิเศษในการค้นหาบนอินเทอร์เน็ต


1
อ่านบทเต็ม? นั่นคือประมาณครึ่งหนึ่งและพวกเขาไม่ใช่เล่มเล็ก ๆ ฉันคิดว่าคุณอาจหมายถึงหน่วยข้อความที่เล็กลง
David Thornley

3

อย่าลืมว่าในตอนแรก Knuth ต้องการเขียนบางอย่างเกี่ยวกับวิธีเขียนคอมไพเลอร์

คุณสามารถรับข้อมูลจำนวนมากบนอินเทอร์เน็ตด้วยวิกิพีเดียตัวอย่างเช่น แต่ถ้าคุณไม่ใช่นักวิจัยบางประเภทเพียงอ่านบทสรุปคุณจะได้รับความพึงพอใจ

คุณยังสามารถได้รับ tome แรกเพื่อให้คุณสามารถอ่านได้เมื่อคุณเบื่อ ...


2

มันอาจสำคัญกว่าที่คุณทำปัญหานั้นในหนังสือมากกว่าที่คุณเพิ่งอ่าน ที่จะต้องใช้เวลามาก

เขาขึ้นอยู่กับความต้องการ 4 เล่มและ 5 fascicles (ไม่ว่าจะเป็นอะไร) ดังนั้นการทำหนังสืออาจจะดีกว่าหลักสูตรมหาวิทยาลัยในพื้นฐานของวิทยาศาสตร์คอมพิวเตอร์และทำให้คุณเป็นโปรแกรมเมอร์ที่ดีที่สุด

เมื่อคุณมีครอบครัวเล็ก ๆ อย่างฉันคุณก็เลยคิดว่าตัวเองสวย ฉันจะซื้อหนังสือทีละครั้งและสอนให้ลูก ๆ ของคุณรู้


1
"ดังนั้นการกรอกหนังสือน่าจะดีกว่าหลักสูตรของมหาวิทยาลัย" - เล่ม 1-3 ถูกใช้เป็นหนังสือเรียนในหลายหลักสูตรเมื่อฉันได้รับปริญญา CS ของฉันและเราจะใช้หลักสูตรทั้งหมดเพียงครึ่งหนึ่งของหนังสือเล่มนี้ เช่น "การเรียงลำดับและการค้นหาเล่ม 3" ถูกสอนเป็นสองหลักสูตรแยกกัน
tcrosley

2
จุดเล็ก ๆ น้อย ๆ แต่ตอนนี้มีเพียงสามเล่มที่ตีพิมพ์ที่มีความคืบหน้าที่สี่ fascicles คือการพิมพ์ล่วงหน้าของสิ่งที่จะกลายเป็นเล่มที่สี่ www-cs-faculty.stanford.edu/~uno/taocp.html
rjzii

1

หากคุณอยากรู้อยากเห็นให้ทำ แต่ใช้เวลาพอสมควรในการย่อยดังนั้นคุณต้องใช้เวลา

คุณมีทริปที่คุณสามารถอ่านได้หรือไม่


แก้ไข: คุณอาจพบตัวอย่างเล็ก ๆ ของ Volume 4 ที่น่าสนใจ: http://www-cs-faculty.stanford.edu/~uno/fasc1a.ps.gz

(หมายเหตุ: บีบอัดคำลงท้าย)


1
น่าเสียดาย (ในกรณีนี้ - โชคดีมาก) ฉันสื่อสารทางไกล, นั่นไม่ใช่ตัวเลือก
Zannjaminderson

1

ไม่ใช่สิ่งที่คนส่วนใหญ่ต้องการที่จะนั่งลงและอ่าน cover-to-cover, no. มันเป็นข้อมูลอ้างอิงที่มีค่าอย่างไม่น่าเชื่อและเป็นเรื่องดีที่จะหยิบมันขึ้นมาเลือกหัวข้อที่น่าสนใจอ่านมันและทำแบบฝึกหัด แต่การเปรียบเทียบสารานุกรมที่ทำไว้ข้างต้นค่อนข้างฉลาด ... มันใหญ่กว้างขวางและมีรายละเอียด และบางส่วนของ "แบบฝึกหัด" เป็นปัญหาการวิจัยที่อาจต้องใช้เวลาหลายปีกว่าจะได้แก้ปัญหา

หากคุณต้องการความรู้ขั้นสูงเกี่ยวกับอัลกอริธึมที่ต่ำกว่ามันอาจเป็นการดีกว่าถ้าคุณเริ่มต้นด้วยหนังสือ Robert Sedgewick (เช่น "อัลกอริทึมใน C" "อัลกอริทึมใน Java" เป็นต้น)


1

หากคุณต้องการเปลี่ยนโลกจากนั้นอ่านมัน หากคุณต้องการเรียนรู้แฮ็กใหม่อย่าอ่านมัน


1

TAOCP ของ Knuth เป็นผลงานชิ้นเอก แต่เช่นเดียวกับผลงานชิ้นเอกใด ๆ (เช่น "Illiad", "War and Peace" หรือ Proust's "In Search of Lost Time") ไม่ใช่สำหรับทุกคนหรือทุกช่วงเวลา

หนังสือเล่มนี้เขียนได้ดีมากและได้รับการวิจัยเป็นอย่างดี ปัญหานั้นดีมากและคำอธิบายของอัลกอริทึมนั้นทำได้ดีมาก

ปัญหาที่ยอดเยี่ยมของหนังสือเล่มนี้คือความจริงที่ว่า Knuth แสดงรหัสสำหรับภาษาชุดประกอบสำหรับคอมพิวเตอร์สวม ฉันเข้าใจว่าทำไมเขาถึงทำ แต่ความจริงแล้วมันแย่มาก

ฉันแนะนำให้ใช้หนังสือเล่มนี้เป็นคัมภีร์ไบเบิล เมื่อต้องการให้มองหามัน คุณจะพบคำตอบ มันเกิดขึ้นกับฉันมากกว่าหนึ่งครั้ง!


3
มันจะช่วยได้หรือไม่ถ้าเคยใช้แอสเซมเบลอร์จริงสำหรับ IBM360 หรือ PDP8
Martin Beckett

1
มันไม่สามารถทนได้ใน 50 ปีนี้ด้วยภาษาแอสเซมบลีที่ไม่ใช่ตัวละคร มันทำให้ทุกคนเสียเปรียบเท่ากัน!
luser droog
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.