หนังสือ“ โครงสร้างและการตีความโปรแกรมคอมพิวเตอร์” เป็นหนังสือที่ดีสำหรับโปรแกรมเมอร์ Java หรือไม่? [ปิด]


14

นี่อาจเป็นอัตนัยและมีแนวโน้มที่จะถูกปิด แต่ฉันก็ยังต้องการที่จะรู้ว่ามันมีประโยชน์จริงๆที่จะอ่านโครงสร้างและการตีความของโปรแกรมคอมพิวเตอร์

โครงสร้างและการตีความโปรแกรมคอมพิวเตอร์

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


32
สำหรับผู้เริ่มต้นอย่าพยายามวางตำแหน่งตัวเองเป็น "โปรแกรมเมอร์ java" หรือเป็น "โปรแกรมเมอร์ภาษาอะไรก็ได้" มันเป็นจุดจบ เป็นเพียงโปรแกรมเมอร์แทน จากนั้น SICP จะมีประโยชน์อย่างยิ่ง อาจเป็นประโยชน์มากที่สุดการอ่านออกมี
SK-logic

3
มันยากมากนั่นคือเหตุผลที่คุณอ่านมัน
Jonathan Henson

4
เริ่มที่บทที่หนึ่งไปทีละหน้าทำงานตัวอย่างทั้งหมดไม่คืบหน้าจนกว่าคุณจะเข้าใจแต่ละหน้าและตัวอย่างแต่ละตัวอย่าง คีย์คำตอบออนไลน์
Jonathan Henson

2
@ JonathanHenson และเมื่อคุณถึงจุดสิ้นสุดให้หยุด
jk

3
ใช่คุณต้องเรียนรู้ Scheme อย่างไรก็ตามหนึ่งในเหตุผลที่หนังสือใช้ Scheme คือคุณสามารถเรียนรู้ทั้งหมดของ Scheme ในเวลาประมาณหนึ่งวันถ้าคุณไม่เคยตั้งโปรแกรมมาก่อนหรือประมาณ 10 นาทีถ้าคุณมี ท้ายที่สุด SICP เป็นหนังสือสำหรับผู้เริ่มต้นที่สมบูรณ์มันจะไม่มีความรู้ในการเขียนโปรแกรม แต่อย่างใด
Jörg W Mittag

คำตอบ:


23

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

Joel Spolsky 2005 เขียนบทความเกี่ยวกับ Java และ SICP ที่น่าสนใจสำหรับคุณ:

http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html


+1 คำตอบที่ดีที่สุดเท่าที่จะเป็นไปได้สำหรับคำถามคำแนะนำเกี่ยวกับหนังสือ
Joshua Drake

13

ฉันคิดว่าโครงสร้างและการตีความของโปรแกรมคอมพิวเตอร์เป็นหนังสือที่ดีในการอ่าน อย่างไรก็ตามมีปัญหาสองสามข้อกับมัน

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

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

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

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



@Eden: CTM ดีมากฉันเห็นด้วย ฉันไม่คิดว่ามันเป็นหนังสือสำหรับสอนการเขียนโปรแกรม แต่อย่าง SICP, HtDP และ Concrete Abstractions แต่แน่นอนว่ามันเป็นของ "หนังสือที่ทำให้คุณเป็นโปรแกรมเมอร์ที่ดีกว่า"!
Jörg W Mittag

5

จากความเข้าใจของฉันSICPมันเน้นในด้านการเขียนโปรแกรมเชิงหน้าที่รวมถึงการเขียนโปรแกรมแบบเรียกซ้ำและการแนะนำ CS ที่แข็งแกร่งซึ่งเป็นเรื่องยากที่จะเข้าใจโปรแกรมเมอร์คนใหม่ ประเด็นก็คือมันถูกเตรียมและสั่งการสำหรับ MIT และจำเป็นต้องมีพื้นฐานที่ดีในสาขาวิศวกรรมคณิตศาสตร์ฟิสิกส์ก็จำเป็นต้องใช้เพื่อหาหนังสือเล่มนี้ที่มีประโยชน์

ฉันจะแนะนำชุดหนังสือที่ดีซึ่งแต่ละคนมุ่งเน้นไปที่แง่มุมต่าง ๆ ของวิศวกรรมซอฟต์แวร์:

  • รหัสสมบูรณ์ 2 - มุ่งเน้นไปที่กระบวนการวิศวกรรมซอฟต์แวร์
  • รหัสสะอาด - มุ่งเน้นไปที่การเข้ารหัสในขนาดเล็ก วิธีเขียนคลาสและฟังก์ชัน
  • Pragmatic Programmer - มุ่งเน้นไปที่การทำงานภายในทีมงานผลิตซอฟต์แวร์

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

  1. ทำอย่างไรจึงจะเป็นโปรแกรมเมอร์ที่มีหนังสือง่าย ๆ 10 เล่ม
  2. หนังสือที่ดีที่สุดสำหรับโปรแกรมเมอร์มือใหม่

โปรดอย่าลังเลที่จะเพิ่มเข้าไปในรายการเนื่องจากมันไม่เหมาะอย่างยิ่ง :)

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


7
ฉันเห็นด้วยกับข้อเสนอแนะในบริบท (โดยนัย) - แต่คำตอบของคุณจะดียิ่งขึ้นถ้ามันพูดถึงสิ่งที่คุณไม่ชอบ (หรือชอบ) เกี่ยวกับ SICP
Joris Timmermans

4
การเปรียบเทียบแอปเปิ้ลและส้ม - หนังสือทุกเล่มที่คุณพูดถึงเป็นหนังสือที่ยอดเยี่ยมเกี่ยวกับวิศวกรรมซอฟต์แวร์ SICP เป็นวิทยาศาสตร์คอมพิวเตอร์มากกว่า - การเขียนโปรแกรมคอมพิวเตอร์เป็นแนวคิด
เนท

1
คำตอบนี้ให้ความรู้สึกเหมือนคำตอบสำหรับคำถามในรายการเรื่องรออ่านที่แนะนำ ซึ่งฉันไม่เชื่อว่าเหมาะสมกับเป้าหมายของไซต์ Stack Exchange: meta.stackexchange.com/questions/113678/…
Joshua Drake

@ เนทมันไม่ได้เป็นแอปเปิ้ลและส้มเพื่อเปรียบเทียบมันเป็นเรื่องของ CS แม้ว่าหนังสือแต่ละเล่มจะแบ่งปันหัวข้อทั่วไป
Yusubov

2
@MadKeithV ฉันเห็นด้วยกับความคิดเห็นของคุณ ฉันใช้ความคิดของฉันใน SICP ในบรรทัดแรก
Yusubov

4

ฉันจะออกไปข้างนอกที่นี่แล้วพูดว่า - อาจจะไม่เหมาะสำหรับคนส่วนใหญ่ - ภาษาใดก็ตาม

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

มีหนังสืออื่น ๆ เกี่ยวกับวิศวกรรมซอฟต์แวร์ที่คุณสามารถอ่านได้ในเวลานั้นซึ่งมีค่ามากกว่านี้หรือไม่? มีภาษาอื่นที่คุณสามารถเรียนรู้ได้ในเวลานั้นหรือไม่?

แก้ไขเพียงเพื่อขยายเพียงเล็กน้อย:
วิศวกรรมซอฟต์แวร์เป็นวิศวกรรมทุกอย่างเกี่ยวกับการปรับให้เหมาะสม งานของคุณคือเพิ่มพูนความรู้ในเวลาและงบประมาณที่กำหนด
SICP เป็นการแนะนำระดับสูงในการเขียนโปรแกรมผ่านภาษาที่ใช้งานได้ เหตุผลที่ใช้ภาษาที่ใช้งานได้นั้นเป็นเรื่องง่ายที่จะอธิบายแนวคิดทางคณิตศาสตร์จำนวนมากของการเขียนโปรแกรมในภาษาที่ใช้งานได้ดีกว่าในขั้นตอนการดำเนินการและอ่านง่ายกว่าตรรกะที่เป็นทางการ

นอกจากนี้ยังมีจำนวนของท่าเช่น "คุณไม่ใช่โปรแกรมเมอร์จริงๆนอกจากคุณจะอ่าน SICP" หรือ Knuth หรือสามารถเขียนโปรแกรมใน Lisp หรือ C หรือแอสเซมเบลอร์ x86 ปกติแล้วจะหักล้างได้ง่าย กล่าวคือ คุณไม่สามารถเป็นโปรแกรมเมอร์ที่แท้จริงได้เว้นแต่คุณจะรู้ว่างานของคันทอร์เกี่ยวกับทฤษฎีเซตและสมการของแมกซ์เวลล์และคุ้นเคยกับการเคลื่อนที่ของรูในเซมิคอนดักเตอร์


มีหนังสือเล่มอื่น ๆ ในรายการความปรารถนาของฉันเช่น Code Complete 2, Clean code, Pragamatic โปรแกรมเมอร์, Refactoring เป็นต้น แต่สิ่งเหล่านี้เพิ่มเติมเกี่ยวกับ java หรืออย่างน้อย OOP centric ไม่เหมือนกับ SICP
ashishjmeshram

5
นั่นเป็นเหตุผลที่ฉันจะอ่านพวกเขาก่อน
Martin Beckett

7
ฉันถกเถียงกันถึง downvoting คำตอบนี้ แต่ตัดสินใจว่ามีเพียงความคิดเห็นที่ดีกว่า: ฉันยอมรับว่า SICP ไม่ใช่การอ่านที่ดีสำหรับคนส่วนใหญ่โดยเฉพาะในช่วงต้น แต่ฉันเชื่อว่านักพัฒนาที่ยอดเยี่ยมควรจะสามารถจัดการกับหนังสือเล่มนี้ได้ อย่างมากจากมัน นักพัฒนาที่ยอดเยี่ยมไม่ใช่ "คนส่วนใหญ่" มันเป็นหนังสือตัวกรองที่ดี
Joris Timmermans

4
ฉันไม่เห็นด้วย (ถึงจุด) - นักพัฒนาที่มี SICP ภายใต้เข็มขัดของเธอยังสามารถเรียนรู้เกี่ยวกับสภาพแวดล้อม Unix และอื่น ๆ ได้ฉันควรจ้างนักพัฒนาที่ไม่มีประสบการณ์แพลตฟอร์ม แต่ SICP และฝึกอบรมพวกเขามากกว่าคนที่ไม่ รับ SICP
Joris Timmermans

1
@MadKeithV - ใช่และด้วยเหตุผลเดียวกันฉันจ้าง Phs / ฟิสิกส์ Phds โดยไม่มีประสบการณ์การเข้ารหัส แต่ถ้าคุณทำงานเต็มเวลาในฐานะโปรแกรมเมอร์และโดยเฉพาะอย่างยิ่งผู้เริ่มต้นมีหนังสือที่เรียบง่ายซึ่งอาจจะดีกว่า (ค่า / เวลา) มากกว่า Knuth หรือ SICP หรืออ่านเอกสารของทัวริง
Martin Beckett

1

คุณวางแผนที่จะเป็น "โปรแกรมเมอร์ JAVA" ตลอดชีวิตของคุณหรือไม่? ถ้าอย่างนั้นคงมีหนังสือให้อ่านดีกว่า ถ้าคุณต้องการที่จะเป็นโปรแกรมเมอร์ที่ดีโดยทั่วไปแล้วมันเป็นการอ่านที่ยอดเยี่ยม นี่คือเหตุผล มีเครื่องมือบางอย่างที่โปรแกรมเมอร์ทุกคนต้องการในกล่องเครื่องมือ หนึ่งคือความรู้อย่างละเอียดเกี่ยวกับโครงสร้างข้อมูลและอัลกอริธึม (ถ้าคุณไม่เชื่อฉันไปสัมภาษณ์ที่ Microsoft, Google, Amazon ฯลฯ ... ) อัลกอริทึมประกอบคือการวิเคราะห์ความซับซ้อนการเรียกซ้ำและความเข้าใจที่ชัดเจนของตัวชี้ไม่ได้ เจ็บ เมื่อพูดถึงการวิเคราะห์อัลกอริทึมกระบวนการแบบเรียกซ้ำและกระบวนทัศน์การทำงานโดยทั่วไปฉันไม่สามารถนึกถึงหนังสือที่ดีกว่าหรือท้าทายกว่า SICP ได้

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