มีวันหมดอายุสำหรับการยกย่องอย่างดี แต่หนังสือเก่าเกี่ยวกับการเขียนโปรแกรม? [ปิด]


51

หลังจากอ่านคำถามเกี่ยวกับหนังสือที่โปรแกรมเมอร์ทุกคนควรอ่านฉันสงสัยว่าสิ่งต่อไปนี้ควรได้รับการพิจารณาว่าล้าสมัยหรือไม่:

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

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

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


9
มันจะคุ้มค่ากับเวลาของคุณที่จะต้องพิจารณาว่าทำไมชื่อเรื่องทั้งหมดที่ถูกตีพิมพ์เป็นครั้งแรกอย่างน้อย 12 ปีที่ผ่านมา แต่ยังคงมีคุณค่าในวันนี้ สี่ในห้าได้รับการอัปเดตตั้งแต่รุ่นแรก แต่เวลาเฉลี่ยระหว่างรุ่นคือ 10.4 ปี
Caleb

83
หลักการการเขียนโปรแกรมพื้นฐานไม่เปลี่ยนแปลงเพียงเพราะมีภาษาหรือกรอบการทำงานใหม่ ๆ
Robert Harvey

26
การคาดหวังว่าบัณฑิตด้านวิทยาศาสตร์คอมพิวเตอร์ดิบจะสร้างระบบซอฟต์แวร์ที่ซับซ้อนก็เหมือนกับการคาดหวังว่าบัณฑิตบัณฑิตด้านวิศวกรรมโยธาแบบดิบจะเป็นสะพานแขวน แต่ก็ไม่ควรเกิดขึ้น โรงเรียนไม่ได้สอนทุกสิ่งที่คุณจำเป็นต้องรู้ในระยะเวลานานมันควรสอนคุณถึงวิธีการเรียนรู้วิธีการเป็นวิศวกรซอฟต์แวร์ที่ยอดเยี่ยมและหนังสือเก่า ๆเหล่านี้ต้องพูดมากเหมือนตอนที่พวกเขาทำเมื่อหลายสิบปีก่อน 16 ปีนับตั้งแต่การตีพิมพ์ The Mythical Man-Month ฉบับครบรอบ 20 ปีและมันก็มีความเกี่ยวข้องเหมือนวันนี้ในปี 1975
Mark Booth

10
หนังสือเหล่านี้ไม่มีเวลา แต่โปรแกรมเมอร์ที่จะ จำกัด ตัวเองเฉพาะกับหนังสือเหล่านี้และผู้ที่จะไม่สนใจสิ่งใหม่ ๆ จะล้าสมัยแน่นอน
ริ้น

4
คุณกำลังขอทานคำถาม: หากหนังสือดีแสดงว่าไม่ได้ล้าสมัย
quant_dev

คำตอบ:


92

หนังสือเหล่านี้เกี่ยวกับหลักการของการพัฒนา หลักการเหล่านี้คือโดยธรรมชาติภาษาที่ไม่เชื่อเรื่องพระเจ้าและสำหรับบางคนแม้แต่กระบวนทัศน์ที่ไม่เชื่อเรื่องพระเจ้า (OOP, การเขียนโปรแกรมการทำงาน, ภาษาที่จำเป็น)

พวกเขาอธิบายทฤษฎีและวิธีการพัฒนาที่ดีเพราะในท้ายที่สุดซอฟต์แวร์มักจะเกี่ยวกับการรับข้อมูลประมวลผลแล้วส่งกลับออกมา Facebook, Twitter, 3D, กระบวนการแบทช์ของการบัญชี, การจัดการจราจรทางรถไฟ, การเปิดตัวจรวดเป็นต้น

หนังสือที่เกี่ยวกับภาษาเช่น "How to learn XXXXX in YY days"ที่ XXXXX เป็นภาษาและ YY เป็นตัวเลขที่ในที่สุด (และบางครั้งจริง ๆ อย่างรวดเร็ว) จะล้าสมัยเพราะโดยธรรมชาติพวกเขาเป็นเรื่องเกี่ยวกับสิ่งที่วิวัฒนาการหรือถูกแทนที่และกลายเป็น เก่า.

Code Completeโดย Steve McConnell สุดยอดเยี่ยมอาจเป็นหนังสือที่ทำให้ฉันตระหนักถึงสิ่งนี้ และPragmatic Programmerเปลี่ยนวิสัยทัศน์ของฉันในการพัฒนาซอฟต์แวร์ทั้งหมด เมื่ออ่านหนังสือเหล่านี้คุณรู้ว่า 95% ของปัญหาที่คุณเผชิญอยู่ทุกวันได้รับการแก้ไขแล้วและ 95% ของเรายังคงกลับมาใช้ใหม่ได้

สิ่งที่เรียกว่า "คลาวด์" ไม่ใช่อนาคตของการพัฒนาซอฟต์แวร์ แต่เป็นวิธีการใช้ซอฟต์แวร์ที่พัฒนาแล้ว

อย่าตกอยู่ในกับดักของคำศัพท์ hype / พล่ามมุ่งเน้นไปที่วิธีการที่คุณสามารถพัฒนาทักษะช่างฝีมือซอฟต์แวร์ของคุณ

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


6
ศิลปินที่ดีคัดลอกศิลปินที่ยอดเยี่ยมขโมย
hafichuk

16
... ศิลปินที่แท้จริงจัดส่ง :-)
kindall

9
ผู้คนยังเชื่อว่าพวกเขาแค่ต้องการจาวาสคริปต์ใน 12 วัน
Spencer Rathbun

2
คัดลอกศิลปินที่ดีคัดลอกศิลปินที่ดีและรักษาโค้ดให้สะอาด (ฉันมีอาการปวดหัวมากมายที่โรงเรียนทำงานกับเด็กคนอื่น ๆ ที่ทำเรื่องยุ่งเพราะพวกเขาคัดลอกมาจากทุกสิ่งและทุกคน ... )
HTDutchy

@SpencerRathbun ยิ่งกว่านั้น (IMHO), จาวาสคริปต์เป็นวิธีการบริโภครำมากกว่าภาษาอื่น ๆ เช่น PHP ถึงกระนั้นมี"Learn Javascript in 15 seconds""Learn PHP on 17 secsonds"
พันล้าน

80

หนังสือเหล่านั้นดูเหมือนจะเก่ามาก ๆ "

จิตวิทยา - การเขียนโปรแกรมคอมพิวเตอร์ (1971) - ด้วยโปรแกรมเมอร์เป็นล้านเท่าในปี 1970 จิตวิทยาของการออกแบบโปรแกรมและสิ่งที่ผิดพลาดที่พวกเขาทำและวิธีการหลีกเลี่ยงพวกเขาสำคัญกว่าที่เคย

เครื่องมือซอฟต์แวร์ (1976) - เมื่อเว็บเป็นกลุ่มของงานเฟรมสาธารณูปโภคสคริปต์และปลั๊กอิน - ความคิดในเครื่องมือซอฟต์แวร์ไม่เคยเกี่ยวข้องกันมากขึ้น

แก้ไข: เพื่อตอบคำถามทั่วไปของ - หนังสือเก่าที่เกี่ยวข้องกับการเขียนโปรแกรมหรือไม่

หลักการทั่วไปของวิศวกรรมซอฟต์แวร์นั้นไม่ได้เปลี่ยนแปลงอะไรมากมายมีเทคโนโลยีใหม่ OO, TDD เป็นต้น แต่โดยทั่วไปผู้ใช้และปัญหายังไม่เปลี่ยน - และการคิดเกี่ยวกับการแบ่งปัญหาเป็นสิ่งเดียวกัน เคยเป็น

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

หนังสือเกี่ยวกับภาษาและเทคโนโลยีที่ไม่ได้ใช้งานแล้วอาจไม่เกี่ยวข้อง - ไม่มีคู่มือแอสเซมเบลอร์ Vax อยู่ในรายการ แต่ 'C' ยังคงถูกใช้อย่างมากและ 'The programming programming C' ไม่เพียง แต่เป็นหนังสือที่ดีที่สุดใน 'C' มันเป็นรูปแบบของวิธีการเขียนบทแนะนำที่กระชับและอ้างอิงถึงภาษาของคุณ

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

PS iWhatsit ใหม่ที่ยอดเยี่ยมของคุณรัน BSD ซึ่งพัฒนาขึ้นในปี 1977 ตอนนี้เด็ก ๆ ก็พาคุณออกจากสนามหญ้าของฉัน!


28

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

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

Code complete: 2nd edition = may, 2004

จริงๆแล้วรุ่นแรกของ "Code complete" นั้นมาจากปี 1993 ดังนั้นอันนี้จึงเป็น "classic" จริงๆ มันเป็นรูปแบบการเขียนโปรแกรมพื้นฐานเกี่ยวกับการใช้ตัวอย่างที่ใช้กับเกือบทุกภาษาการเขียนโปรแกรมของตระกูล C ซึ่งมีภาษาที่นิยมมากที่สุดในปัจจุบัน (C / C ++ / Java / C # / Objective-C / D / ... ) ใช่แล้วหนังสือเล่มนี้เป็นเล่มล่าสุด

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

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

The Pragmatic Programmer

หนังสือเล่มนี้เป็นหนังสือที่ดีมากเกี่ยวกับการเขียนโปรแกรมเป็นงานฝีมือ ผู้ไม่เชื่อเรื่องภาษาและทันสมัยมากตราบใดที่การเขียนโปรแกรมดำเนินการโดยโปรแกรมเมอร์เป็นงานที่ต้องทำด้วยตนเองโดยใช้โปรแกรมแก้ไขข้อความ IDEs การควบคุมเวอร์ชัน ฯลฯ

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

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

The C Programming Language

หนังสือเล่มนี้อาจไม่มีเวลาเหมือนอย่างที่สี่ แต่เนื่องจาก C เป็นเหมือน "แม่" ของภาษายอดนิยมทั้งหมดที่ฉันระบุไว้ข้างต้นอาจเป็นความคิดที่ดีที่จะอ่านหนังสือเล่มนี้ - ฉันไม่คิดว่าจะมีหนังสือ "C" ที่ทันสมัยซึ่งดีกว่าจริง ๆ และถ้าคุณต้องทำการเขียนโปรแกรมการบำรุงรักษาของรหัส C ++ ซึ่งเขียนโดยคนที่รู้ C ดีกว่า C ++ หนังสือเล่มนี้เป็นสิ่งจำเป็น

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

  1. มีรหัสดั้งเดิมมากขึ้น (โดยเฉพาะอย่างยิ่งรหัสดั้งเดิมไม่เพียง แต่ใน Fortran และ Cobol แต่ยังอยู่ใน C ++ และ Java)
  2. การทดสอบหน่วยและ TDD เป็นที่ชื่นชอบมากขึ้น
  3. มีโค้ดโอเพนซอร์ซอีกมากมายให้เลือกใช้
  4. OO ได้รับการวิจารณ์มากขึ้นเรื่อย ๆ

(ฉันไม่ได้แสดงรายการที่นี่เกี่ยวกับการพัฒนาเว็บหรือแอพเพราะฉันคิดว่าเทคโนโลยีนี้เฉพาะ)

มีหนังสือดี ๆ สำหรับหัวข้อ 1 และ 2 โดยเฉพาะ"Clean Code"ซึ่งมาจาก 2008 และ"ทำงานอย่างมีประสิทธิภาพด้วยรหัสดั้งเดิม"จากปี 2004 บางทีหนังสือ "ใหม่กว่า" ที่คุณกำลังมองหาอยู่คืออะไร?


5
ภาษา C Programming เป็นอมตะ หนังสือกลั่นนั้นหายาก ฉันอ่านมันซ้ำอีกครั้งสำหรับ ... ฉันไม่รู้ฉันแพ้การนับ (ฉันอ่านมันเป็นครั้งแรกเมื่อฉันอายุ 13 ปี) และฉันยังคงชื่นชมมัน แต่ฉันซาบซึ้งมากตอนนี้
ฟรานเชสโก

3
ฉันจะเพิ่ม # 5 ในรายการของคุณ: การคำนวณแบบขนาน ไม่ใช่ความคิดใหม่ ๆอย่างแน่นอนแต่ทุกวันนี้มันกำลังเกิดขึ้นอย่างไม่เคยปรากฏมาก่อนซึ่งทำให้เกิดปัญหาใหม่ขึ้นมา แต่ทั้งหมดนี้ยังคงสร้างอยู่บนรากฐานเดียวกันกับสิ่งเก่าและฉันก็รู้สึกว่า OP ยังไม่เข้าใจรากฐานเหล่านั้นจริงๆ
Mike Baranczak

2
@ ไมค์: ฉันเห็นด้วยการคำนวณแบบขนานได้รับความสนใจมากขึ้นเรื่อย ๆ ในทศวรรษที่ผ่านมาฉันพลาดไปเมื่อฉันเขียนคำตอบ
Doc Brown

2
@Doc Brown มุมมองของคุณต่อความเป็นอมตะของวรรณกรรมเนื่องจากคุณเคยไปที่ 1885, 1955, 1985 และ 2015 ภายในเวลาไม่กี่วันจากมุมมองของคุณเอง?
Kalamane

13

ในบรรดาที่คุณพูดถึง "รหัสเสร็จสมบูรณ์", "โปรแกรมเมอร์เชิงปฏิบัติ" และ "SICP" อยู่ในรายการอ่านที่ฉันแนะนำสำหรับนักพัฒนาใหม่ทั้งหมดที่เริ่มต้นที่ บริษัท ของฉันและต้องการที่จะได้รับในระดับที่สูงขึ้น

พวกมันไม่ล้าสมัยเพราะวิทยาศาสตร์พื้นฐานในวิทยาการคอมพิวเตอร์ไม่ได้เปลี่ยนไป


10

ฉันยังไม่ได้อ่านหนังสือทั้งหมด แต่ฉันทำ Code Complete และ The Pragmatic Programmer หนังสือเหล่านี้อยู่ไกลจากความล้าสมัย พวกเขาอาจมีสองสามย่อหน้าที่เป็นสนิมเล็กน้อย แต่เนื้อหาส่วนใหญ่ยังคงเกี่ยวข้องในวันนี้

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

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


กายวิภาคของ Yeah Gray (หนังสือจริงไม่ใช่รายการโทรทัศน์) ถูกเขียนขึ้นในปี 1918 และนักเรียนแพทย์ยังคงใช้มัน
HLGEM

7

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


6

รายการที่คุณยกมาไม่มีพวกเขาไม่ล้าสมัย หนังสือล้าสมัยเมื่อหัวเรื่องเปลี่ยนไปมากพอที่จะไม่เป็นประโยชน์ ธรรมชาติของการเขียนโปรแกรมและภาษา C มีการเปลี่ยนแปลงน้อยมากตั้งแต่การตีพิมพ์


6

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

หลักการพื้นฐานเป็นทฤษฎีที่น่าเบื่อทั้งหมดที่วิทยาการคอมพิวเตอร์มีแนวโน้มที่จะใช้เวลามากและมันก็ยังคงใช้ได้แม้ว่าโลกจะเปลี่ยนไป นี้เมื่อเทียบกับสิ่งที่ชอบ "วิธีการใช้ Win32s ภายใต้ Windows 3.11" ซึ่งเป็นมากเก่าและล้าสมัย

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


ข้อเสนอของ Euclid 1 ในเล่ม 1 ไม่สามารถพิสูจน์ได้จากคำจำกัดความความจริงและสัจพจน์ที่ให้มา มันไม่ได้เป็นทางเลือกที่ดีในการเรียนรู้จากทุกวันนี้และหลังจากพันปีก็ถือว่าล้าสมัยแล้ว
David Thornley

1
@DavidThornley ถ้า Euclids Elements ไม่ใช่ข้อความบัญญัติในเรขาคณิตนั่นคืออะไร?

6

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

ยกตัวอย่างเช่นMythical Man Monthเมื่อฉันอ่านหนังสือเล่มนี้ฉันลืมไปว่ามันถูกเขียนขึ้นในปี 1975 เมื่อเขาโรยในการอ้างอิงเป็นครั้งคราวเกี่ยวกับ IBM System 360 มันมักจะเหยียดฉันเพราะนั่นเป็นเนื้อหาเดียวที่ หนังสือ ทุกอย่างอื่นที่ใช้ที่นี่และตอนนี้ ฉันยังคงเก็บสำเนาของรูปแบบสถาปัตยกรรมแอปพลิเคชันองค์กรของ Martin Fowler ตอนนี้อายุ 9 ปี แต่ไม่มีกาลเวลาอีกต่อไปและยังคงใช้กับงานที่ฉันทำในวันนี้

ตอนนี้หนังสือเล่มโปรดของฉันคือJava Modeling in Color กับ UML (1999) ของ Peter Coad แม้ว่าฉันจะเป็นนักพัฒนา C # และเลี่ยง UML เพราะเทคนิคและแนวคิดทำให้ฉันเป็น coder ที่ดีขึ้น

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


MMM - ผมชอบส่วนที่เกี่ยวกับทีมอย่างต่อเนื่องแก้ไขข้อบกพร่อง แต่จำนวนของข้อบกพร่องอยู่ :) คง
JoelFan

5

หลักการสำคัญของซอฟต์แวร์ไม่ได้เปลี่ยนแปลงในช่วง 20 ปีที่ผ่านมา สแต็คต้นไม้และรายการที่เชื่อมโยงยังคงทำงานเหมือนเดิม "XOR" ยังคงหมายถึงสิ่งเดียวกัน ไบต์ยังคงมี 8 บิต

คุณกำลังแนะนำอย่างจริงจังว่า "การพัฒนาหลายแพลตฟอร์ม" เป็นแนวคิดใหม่หรือไม่? ทำไมคุณถึงคิดว่า C ถูกประดิษฐ์ขึ้นมา?

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

ฉันไม่รู้จักอาจารย์อายุ 61 ปีของคุณดังนั้นฉันจึงไม่สามารถรับรองเขาได้ ในทางกลับกันคุณจะไม่ฉลาดเท่าที่คุณคิด ฟังอาจารย์เป็นไปได้ที่คุณจะได้เรียนรู้บางสิ่งบางอย่าง


"คุณไม่ต้องแก่ตัวด้วยการไม่เป็นคนโง่นักปราชญ์หนุ่มสาวจำนวนมากพวกเขาตายในฐานะผู้เป็นแม่ - Richard Pryor


2
"คุณตรงกันข้ามไม่ชัดเจนเท่าที่คุณคิดว่าคุณเป็น" ถ้าฉันคิดว่าฉันเป็นที่สมาร์ทฉันจะไม่ได้ถามคำถามดังกล่าว
Olivier Pons

4

นี่คือหนังสือที่เก่าและล้าสมัยมากขึ้น:

  • ศิลปะแห่งการเขียนโปรแกรมคอมพิวเตอร์ฉบับ 1-3 โดย D. Knuth สิ่งเหล่านี้ถูกเผยแพร่ระหว่างปี 1968 และ 1981! เราไม่ได้ใช้หลอดสุญญากาศอีกต่อไปผู้คน! ทุกอย่างในหนังสือเหล่านี้เป็นง่อย การอภิปรายเกี่ยวกับ Python และ Ruby อยู่ที่ไหน

  • คอมพิวเตอร์และ Intractability: คำแนะนำเกี่ยวกับทฤษฎี NP-ครบถ้วนสมบูรณ์โดย MR Garey และ DS Johnson, 1979. อ่อนแอมาก! ปัญหาทั้งหมดเหล่านี้ได้รับการแก้ไขแล้วในตอนนี้อาจจะ

หากหนังสือไม่ได้เขียนในช่วงสามปีที่ผ่านมาโดยเน้นที่ Python แสดงว่ามันไม่คุ้มค่าที่จะอ่าน


ในความเป็นธรรมมีอย่างน้อยกรณีที่การใช้แอสเซมเบลอร์ของ TAoCP นั้นใช้ pseudocode หมายความว่าหนังสืออัลกอริทึมที่ทันสมัยซึ่งใช้ pseudocode ใกล้เคียงกับภาษาที่ทันสมัยกว่ามีประโยชน์มากกว่า 90% ของพวกเราที่ไม่ได้เขียนเพื่อฝัง ระบบ
Peter Taylor

-1: ทุกสองหรือสามสัปดาห์ฉันเห็นคนที่ขออัลกอริทึมจัดการบางสิ่งหรืออย่างอื่นที่ Knuth ได้อธิบายไว้ในรายละเอียดที่เหลือเชื่อ เพื่อความสนุก: ตั้งชื่ออัลกอริธึมการเรียงลำดับหนึ่งที่ใหม่กว่า 1981 ต้องการตอบการเรียงแบบขนานหรือไม่ Knuth มีหน้าเกี่ยวกับการเรียงลำดับข้อมูลแบบขนาน คุณอาจถูกต้องเกี่ยวกับหนังสือ Python แต่มีความแตกต่างอย่างมากระหว่างหนังสือ "Flavour of the Week" และหนังสืองานฝีมือวิศวกรรม
sarnold

5
เห็นได้ชัดว่าบางเครื่องตรวจจับถากถางจะแตก ...
DaveE

1
<Sarcasm> "ความคิดเห็น" </Sarcasm>
NWS

1
ฉันคิดว่าคำตอบนี้จะช่วยให้เป็นจุดที่ดียิ่งขึ้นหากกล่าวถึงThe Art of Computer Programming Volume 4A ซึ่งตีพิมพ์ในปี 2011 และเล่มที่ 5 ซึ่งวางแผนไว้สำหรับปี 2020!
Mark Booth

3

หนังสือเหล่านั้นไม่ล้าสมัยหนังสือเหล่านั้นเป็นหนังสือคลาสสิก

ที่จะพูดKaplansky " ใช้เวลาทุกวันเรียนรู้สิ่งใหม่ที่มี disjoint จากปัญหาที่คุณกำลังทำงานอยู่ในปัจจุบัน (จำไว้ว่า disjointness อาจจะชั่วคราว) และอ่านโท . "


3

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

ในขณะที่ภาษาการเขียนโปรแกรมที่พวกเขาใช้อาจหลุดพ้นจากสมัยนิยมทฤษฎีที่อยู่เบื้องหลังภาษาการเขียนโปรแกรมยังคงเป็นจริงในปัจจุบัน หนังสือเหล่านี้ส่วนใหญ่ทำให้เป็นจุดที่ครอบคลุมพื้นฐานได้เป็นอย่างดีและพื้นฐานก็ไม่ได้เปลี่ยนแปลงอะไรมากมาย


2
ภาษาการเขียนโปรแกรมที่ใช้เป็นส่วนใหญ่ 'C' - พวกเขาอาจหลุดพ้นจากสมัยนิยม แต่มีการใช้งานเพิ่มขึ้นอย่างหนาแน่น
Martin Beckett

3
คุณควรอ่าน SICP ก็อาจจะเปิดตาของคุณเกี่ยวกับที่มาจาก LINQ :)
Joris Timmermans

1

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


1

ชิ้นส่วนย่อยบางส่วนล้าสมัยในหนังสือเหล่านั้นทั้งหมด แต่ 99% ยังดีอยู่

อัลกอริทึมหนังสือจะอายุช้าลง อัลกอริทึมเป็นคณิตศาสตร์และคณิตศาสตร์ไม่เปลี่ยนแปลงอย่างรวดเร็ว ตรวจสอบว่ามียังคงวิจัยในขั้นตอนวิธีการใหม่ที่ดีกว่าในบางกรณี (เช่นอัลกอริทึม Furer ของ (2007) Schönhage-Strassenสำหรับการคูณตัวเลขยาว 40000+ หลักด้วยกัน) แต่แนะนำที่คุณต้องการที่จะเรียนรู้พื้นฐาน (แบ่งและพิชิต / Dynamic Programming / Linear Programming / ฯลฯ ) เพื่อให้คุณสามารถเรียนรู้ที่จะคิดอย่างสมเหตุสมผลเกี่ยวกับอัลกอริทึม

การเรียนรู้มาตรฐาน C จาก K&R ยังคงเป็นแหล่งที่ดีที่สุด แม้ว่าฉันไม่แน่ใจว่าฉันจะไว้วางใจส่วนของพวกเขาเกี่ยวกับวิธีการตั้งค่าสภาพแวดล้อมของคุณ

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

บางส่วนของ Code Complete หรือ Pragmatic Programmer นั้นมีความเกี่ยวข้องน้อยกว่าโดยเฉพาะถ้าคุณกำลังเขียนโปรแกรมในภาษาที่ใหม่กว่า (เช่น python / ruby ​​/ C ++ 11) เนื่องจากมักจะเน้นวิธีทำบางอย่างใน C หรือให้คำแนะนำที่ดีที่สุด เครื่องมือที่มีอยู่ในเวลา (เช่น CVS / RCS สำหรับการควบคุมเวอร์ชันมากกว่าเครื่องมือที่ทันสมัยเช่น git / bzr / hg / svn) แต่ก็ยังดีที่จะคิดเกี่ยวกับวิธีการควบคุมเวอร์ชันเป็นสิ่งที่จำเป็นและวิธีการที่จะต้องราบรื่นและจัดทำเอกสารด้วยตนเองและผ่านตรรกะของเหตุผลว่าทำไมมันจึงเป็นสิ่งจำเป็นอย่างยิ่ง

หรือคำแนะนำของ PP เทียบกับ IDE สำหรับตัวแก้ไข unix พื้นฐาน + เครื่องมือ unix - อย่าบอกว่าคุณไม่ควรเรียนรู้วิธีใช้ find / awk / locate / grep / sed แต่ IDE ที่ดีมักจะประหยัดเวลาได้มาก เช่น emacs สามารถทำการเน้นไวยากรณ์หรือการเติมโค้ดอย่างง่าย แต่บอกว่า IDE ที่ดีจะบอกเคล็ดลับเครื่องมือด้วยการประกาศฟังก์ชั่นเมื่อคุณพิมพ์หรือวิเคราะห์รหัสและทำเครื่องหมายตัวแปรที่ไม่ได้ใช้ทำให้ง่ายต่อการยุบส่วนของรหัส ฯลฯ


1

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

ใช่แล้วและใช่

นั่นไม่ได้ทำให้หนังสือเหล่านั้นล้าสมัย "คอมพิวเตอร์สมัยใหม่" เป็นคำที่กว้างมาก อย่างไรก็ตามมันมีการเขียนโปรแกรม C ดังนั้น "ภาษาการเขียนโปรแกรม C" จึงยังคงเป็นหนังสือที่เกี่ยวข้อง มันมีอัลกอริทึมดังนั้น "รู้เบื้องต้นเกี่ยวกับอัลกอริทึม" จึงยังคงเป็นหนังสือที่เกี่ยวข้อง เป็นต้นไปเรื่อย ๆ

ความสำคัญในปัจจุบันควรเน้นการพัฒนาหลายแพลตฟอร์ม (ดูโทรศัพท์) เปลี่ยนสิ่งที่เราเรียนรู้ในวันนี้

แอพส่วนใหญ่ใน App Store (เพื่อใช้แพลตฟอร์มมือถือยอดนิยมเป็นตัวอย่าง) เขียนใน Objective C ซึ่งเป็นภาษาจากช่วงต้นยุค 80 ซึ่งเป็นชุดของซีดังนั้นอีกครั้ง C ยังคงเกี่ยวข้อง

คุณคิดว่า "คลาวด์" เป็นแฟชั่นหรืออนาคตหรือไม่?

มันเป็นของขวัญของเรา

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

แต่นั่นหมายความว่าอย่างไร

มีหลายภาษา, APIs, กรอบงาน, แพลตฟอร์ม, เครื่องมือ, กลยุทธ์การทำงานร่วมกัน ฯลฯ สำหรับโรงเรียนที่จะเตรียมคุณให้พร้อมสำหรับงานที่เฉพาะเจาะจง โรงเรียนสามารถวางรากฐานได้เท่านั้นทำให้คุณมีรูปแบบการทำงานขั้นพื้นฐานเกี่ยวกับวิธีการทำงานของเครื่องเกี่ยวกับอัลกอริธึมโครงสร้างข้อมูลการสร้างรหัสกลยุทธ์การสลายตัวเครื่องมือบางอย่าง ฯลฯ

"นักพัฒนาที่แท้จริง" ไม่ใช่คนที่รู้ทุกอย่างมันเป็นคนที่มีความสามารถสำหรับงานประเภทนี้ซึ่งมีรากฐานในด้านทฤษฎีและการปฏิบัติและผู้รู้วิธีการเรียนรู้เพราะการศึกษาของคุณไม่มีที่สิ้นสุด


1
+1 สำหรับความคิดเห็น 'วิธีการเรียนรู้' - นั่นเป็นสิ่งที่วิทยาลัยต้องการไม่ใช่การฝึกอบรมการหางาน
DaveE

1

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

นี่คือสองเซ็นต์ของฉัน - ไม่ใช่ของจริงฉันได้เรียนรู้จากเซนต์อควีนาสและจากอริสโตเติลต่อหน้าเขา

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

กลไกของคอมพิวเตอร์ไม่ได้เปลี่ยนไปตั้งแต่ von-neumann ในทำนองเดียวกันรายละเอียดที่คุณต้องเรียนรู้ที่จะเป็นโปรแกรมเมอร์ที่ดีจะเหมือนกันจนกว่าโมเดล von-neumann จะล้าสมัย แอสเซมบลีเป็นภาษาของคอมพิวเตอร์ ... เรียนรู้ไม่มีข้อแก้ตัว

C เป็นภาษาดั้งเดิมของทั้ง Windows และ Unix เรียนรู้หรือค้นหาการค้าใหม่ หากคุณเป็นหนึ่งในคนเหล่านั้นที่ตรงไปยัง JAVA หรือ C # คุณอาจเป็นโปรแกรมเมอร์ที่ดี แต่คุณจะเป็นโปรแกรมเมอร์ที่ดีกว่ามากถ้าคุณจะเรียน C - คาบเรียน

อัลกอริทึมและโครงสร้างข้อมูลเป็นพื้นฐานของโปรแกรมคอมพิวเตอร์เรียนรู้พวกเขา

ทุกสิ่งทุกอย่างเป็นนามธรรมของหลักสำคัญเหล่านี้ Abstractions นั้นยอดเยี่ยมเมื่อใช้อย่างถูกต้อง - อย่างจริงจังฉันใช้ C # สำหรับ 75% ของโครงการทั้งหมดของฉัน อย่างไรก็ตามพวกเขาทำให้คุณงี่เง่าถ้าคุณไม่ใช้เวลาในการทำความเข้าใจวิธีการทำงานและวิธีการทำงานโดยไม่มีพวกเขา คุณจะใช้เวลาไม่ จำกัด ในการทำซอฟต์แวร์เพื่อให้พอดีกับช่องสี่เหลี่ยมสุภาษิตเมื่อมีวิธีการที่ดีกว่ามากและจะมีข้อบกพร่องที่สามารถหลีกเลี่ยงได้ การพัฒนาซอฟต์แวร์เป็นงานฝีมือที่ต้องเข้าใจและในตอนท้ายของวันเครื่องมือไม่ค่อยเปลี่ยนแปลง นั่นคือเหตุผลที่หนังสือเหล่านี้มีความสำคัญมาก

ทั้งหมดนี้เป็นโปรแกรมเมอร์ JAVA และ C # เท่านั้น tsk ฉันจะพนันว่าพวกเขาส่วนใหญ่ไม่เคยเห็นแม้แต่ตอนของ Star Trek!


1

ฉันได้ยินคำพูดจากที่ปรึกษา:

"คำแนะนำที่ดีนั้นมาพร้อมกับเหตุผลว่าทำไมคุณจึงรู้เมื่อไม่มีคำแนะนำที่ดีอีกต่อไป" ดังนั้นในเงื่อนไขของหนังสือหนังสือที่อธิบายว่าทำไมต้องทำ X over Y จะแจ้งให้คุณทราบเมื่อคำแนะนำนั้นไม่ถูกต้องอีกต่อไป A "ทำสิ่งนี้เสมอเพียงทำ" หนังสือเหมือนบางหลักสูตรความผิดพลาดในภาษา X นั้นไม่ค่อยดีนัก

ฉันเห็นหนึ่งเรียกว่า "เรียนรู้ยูนิกซ์ใน 24 ชั่วโมง" ดีหนังสือหนาประมาณ 8 ซม. ฉันสงสัยว่าหลาย ๆ คนสามารถอ่านทุกหน้าได้ใน 24 ชั่วโมง :)

โปรดจำไว้ว่าสิ่งที่ en vogue วันนี้อาจจะเย้ยหยันในวันพรุ่งนี้ ทั้งหมดต่อไปนี้เคยเป็นกระแสหลัก (สมัยนี้เมื่อวาน) แต่ตอนนี้ไม่ได้:

  • ไปที่
  • รายการเดียวทางออกเดียว
  • สัญกรณ์ฮังการี
  • เที่ยวน้ำตก

และมีบางสิ่งที่ครั้งหนึ่งเคยเป็นคำสาปแช่งอย่างสมบูรณ์ แต่ตอนนี้ได้รับการยอมรับ:

  • การเรียกซ้ำเป็นเครื่องมือในการแก้ปัญหา (รุนแรงในช่วงต้น BASIC)
  • การจัดสรรหน่วยความจำขณะใช้งานจริงด้วย malloc / new
  • การใช้ C ++ STL
  • ภาษาที่รวบรวมขยะสำหรับระบบเรียลไทม์

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

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