ฉันจะศึกษาวิทยาศาสตร์คอมพิวเตอร์ด้วยตนเองได้อย่างไร [ปิด]


46

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

การค้นหาแหล่งข้อมูลต่าง ๆ บนอินเทอร์เน็ตเป็นเรื่องง่ายมีหลักสูตรMIT เปิดหลักสูตรและมีหลักสูตร Coursera จาก Stanford และมหาวิทยาลัยอื่น ๆ มีแหล่งข้อมูลเปิดอื่น ๆ มากมายกระจายอยู่ทั่วอินเทอร์เน็ตและหนังสือดี ๆ ที่แนะนำซ้ำ ๆ

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

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

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

สิ่งที่ฉันจะรักคือการสร้างรายการที่ฉันสามารถติดตามได้เช่นเดียวกับคนบ้า ๆ บอ ๆ

SUBJECTS                                                        DONE

Introduction to Computer Science                                  *
Introduction to Algorithms                                        *
Discrete Mathematics                   
Adv. Discrete Mathematics
Data structures                                                   *
Adv. Algorithms
...

อย่างที่คุณเห็นชัดเจนฉันมีความคิดเล็ก ๆ น้อย ๆ เกี่ยวกับวิชาเฉพาะทางวิทยาศาสตร์คอมพิวเตอร์ที่ประกอบด้วย

มันจะเป็นประโยชน์อย่างมหาศาลแม้ว่าบางคนชี้ให้เห็นหลักสูตรที่จำเป็นจาก MIT Course Ware (+ วิชาที่ไม่มีใน MIT OCW) ตามลำดับที่แนะนำ

ฉันจะแสดงรายการโพสต์ที่ฉันได้อ่านไปแล้ว (และฉันไม่ได้สิ่งที่ฉันกำลังมองหาอยู่ที่นั่น)

https://softwareengineering.stackexchange.com/questions/49557/computer-science-curriculum-for-non-cs-major - คำตอบยอดนิยมบอกว่ามันไม่คุ้มค่าที่จะเรียน cse

https://softwareengineering.stackexchange.com/questions/110345/how-can-a-self-taught-programmer-learn-more-more-about-computer-science - ชี้ไปที่ MIT OCW

https://softwareengineering.stackexchange.com/questions/49167/studying-computer-science-what-am-i-getting-myself-into

https://softwareengineering.stackexchange.com/questions/19912/overview-of-computer-science-programming


สิ้นเชิง? ทุกทฤษฎีสนุกด้วยหรือไม่

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

2
โปรดทราบว่ามี "เกาะ" บางประเภทในหลักสูตรที่สิ่งต่าง ๆ อยู่ด้วยกัน เช่นคุณไม่ค่อยต้องการแคลคูลัสแลมบ์ดาในทฤษฎีกราฟ นอกจากนี้ให้พิจารณาด้วยว่าอาจเป็นเรื่องดีถ้ามีพี่เลี้ยงอยู่ - คุณอาศัยอยู่ใกล้กับสถาบันการศึกษาที่เหมาะสมหรือไม่?

ตามความเป็นจริงฉันทำและเป็นมิตรกับ profs แต่ฉันไม่สามารถ bug พวกเขาตลอดเวลา พวกเขามีส่วนในความรู้มากมายที่ฉันมีในตอนแรก
Optimus

3
ในกรณีนี้คุณอาจสามารถเลือกหลักสูตรหนึ่งหรือสองวิชา - ซึ่งจะช่วยให้คุณสามารถบั๊ก profs ได้ตลอดเวลา

คำตอบ:


24

ฉันเห็นเนื้อหาหลักสูตรจาก MIT และมันก็แย่มาก พวกเขามีสื่อการสอนที่ต้องการ VC5 กลุ่มตัวแปรทั่วโลกโดยปริยายผ่านสีเป็น "สีน้ำเงิน" แทนที่จะเป็น ARGB 32 บิตนับเป็น 4 เท่า [0,1] ลอยตัวสิ่งนั้น ฉันจะไม่เชื่อถือหลักสูตรหรือรหัสเพียงเพราะมาจากมหาวิทยาลัยชื่อดัง

การศึกษาระดับปริญญา CS ของฉัน (จากมหาวิทยาลัยที่ติดอันดับท็อป 10 ในสหราชอาณาจักรสำหรับ CS) ประกอบด้วย:

ปีแรก:

  1. OOP - พื้นฐานสุดยอด
  2. ระบบคอมพิวเตอร์ - สิ่งที่ต้องการตัวแทนจำนวนเต็มไบนารี
  3. ทฤษฎีฐานข้อมูลเชิงสัมพันธ์ขั้นพื้นฐาน
  4. คณิตศาสตร์สำหรับเรขาคณิต 2D และ 3D อย่างง่าย
  5. HTML / JS- สิ่งเล็กน้อยสำหรับผู้เริ่มต้นสมบูรณ์
  6. PHP เล็ก ๆ ไม่แพ้กัน
  7. การเขียนโปรแกรมฟังก์ชั่นตาด

ปีที่สอง:

  1. ปัญหาทางกฎหมายในการคำนวณเช่นกฎหมายที่หมุนเวียนรอบการปกป้องข้อมูลผู้ใช้
  2. ภาษาการเขียนโปรแกรม - ลำดับชั้นของ Chomsky และ lexing ถูกครอบคลุม
  3. ระบบปฏิบัติการเครือข่ายและอินเทอร์เน็ตส่วนใหญ่จะเป็นหน่วยความจำเสมือนและเพจจิ้ง IP สแต็ค
  4. คอมพิวเตอร์กราฟิก 2 มิติส่วนใหญ่พิสูจน์ทฤษฎีบทของคณิตศาสตร์พื้นฐาน
  5. AI - คำอธิบายพื้นฐานของเครือข่ายประสาทระบบความเชื่อแบบเบย์ ฯลฯ
  6. การวิเคราะห์ความต้องการ - ภาพรวมโดยย่อของ UML ข้อกำหนดการทำงาน / ไม่ทำงาน
  7. โครงการของทีม

ปีที่สาม:

  1. การวิเคราะห์อัลกอริทึม - ทฤษฎีความซับซ้อนส่วนใหญ่
  2. การใช้งานการเขียนโปรแกรมภาษา - LL / LR เทคนิคการแยกวิเคราะห์ CFG และสิ่งต่าง ๆ
  3. การจัดการโครงการซอฟต์แวร์ - ดูที่รุ่น Waterfall / Agile
  4. International Computing- Unicode และความสนุกในการแปลภาษาอื่น ๆ
  5. AI ขั้นสูง - ไม่รู้ด้วยความจริงใจและฉันได้ทำการทดสอบในไม่ช้า
  6. คอมพิวเตอร์กราฟิก 3D ส่วนใหญ่อีกครั้งเพียงพิสูจน์ทฤษฎีบทสำหรับการฝึกอบรมการหมุนและเช่น
  7. ระบบที่ใช้ระบบตัวแทน - ส่วนใหญ่เกี่ยวกับการสื่อสารแบบอะซิงโครนัสเข้าถึงการตัดสินใจของกลุ่ม ฯลฯ
  8. แอปพลิเคชั่นไมโครโปรเซสเซอร์ - การประมวลผลสัญญาณดิจิตอล
  9. Robotics- ครอบคลุมเนื้อหาต่าง ๆ เช่นการมองเห็นคอมพิวเตอร์และการตัดสินใจของหุ่นยนต์ในระดับสูง

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

สิ่งที่ควรค่าแก่การทำมีความสำคัญ:

  1. OOP- แล้วอีกสักครู่แล้วก็อีกมาก
  2. ฟังก์ชั่นการเขียนโปรแกรม - ยังมีอีกมากมาย พยายามเลือกภาษาเช่น C ++ หรือ C # ที่คุณไม่ต้องเรียนรู้ไวยากรณ์และเครื่องมืออีกครั้งเพื่อครอบคลุมทั้งสองสไตล์
  3. ส่วนหน่วยความจำเสมือนของระบบปฏิบัติการนั้นดีที่ควรรู้เช่นเดียวกับโหมดเคอร์เนลและโหมดผู้ใช้ ข้ามการแบ่งส่วนและสแต็ค IP
  4. การวิเคราะห์ความต้องการ - ต้องเป็นประโยชน์สำหรับโครงการใด ๆ
  5. การวิเคราะห์อัลกอริทึม - การรู้ว่าความซับซ้อนของอัลกอริทึมคืออะไรลดขนาดได้อย่างไรและความซับซ้อนของการดำเนินงานทั่วไปมีความสำคัญอย่างไร
  6. รูปแบบการจัดการโครงการซอฟต์แวร์ - ร้านค้าจำนวนมากทำแบบ Agile และแบบเก่า ๆ ยังคงทำแบบจำลองลักษณะน้ำตก
  7. คอมพิวเตอร์สากล - Unicode เป็นสิ่งจำเป็น

สิ่งที่ควรค่าแก่การเลือกทำ:

  1. การเขียนโปรแกรมภาษา - ลำดับชั้นของ Chomsky เครื่องมือของ lexing และการแยกวิเคราะห์ ข้ามทฤษฎีที่อยู่เบื้องหลัง LL หรือ LR parsers - LR parser สามารถยอมรับ CFG ที่ไม่เหมือนใครและไม่สามารถทำได้จริงเอกสารของตัวแยกวิเคราะห์ของคุณจะบอกคุณเกี่ยวกับเรื่องนี้
  2. กราฟิก 3 มิติ ฉันไม่ได้หมายความว่า "พิสูจน์ว่านี่เป็นสูตรการวนรอบการหมุน" ทำให้เสียเวลา แต่ฉันหมายถึงจริง "นี่คือจุดยอด" หรือ GPGPU สนุกสนุกน่าสนใจและแตกต่าง
  3. บางสิ่งที่ AI เป็นเหมือนเขตข้อมูลที่มีศักยภาพและการทำเส้นทาง

สิ่งที่จำเป็น แต่ฉันไม่ได้ครอบคลุม:

  1. เห็นพ้องต้องกัน - อย่างน้อยต้องรู้พื้นฐานสำหรับทุกคนในปี 2012

ส่วนที่เหลือเป็นการเสียเวลาอย่างสมบูรณ์ น่าเสียดายที่คะแนนเก้าส่วนใหญ่ที่ฉันรู้แล้วหรือรับชิ้นส่วนที่มีประโยชน์อื่น ๆ หากคุณอ่านเกี่ยวกับสิ่งต่าง ๆ เช่นปัญหา FizzBuzzมันจะเห็นได้อย่างรวดเร็วว่าคุณไม่จำเป็นต้องรู้ทุกอย่างที่อยู่บนบรรจุภัณฑ์ - ซึ่งโชคดีเนื่องจากปริญญาของฉันและวัสดุมากมายที่ฉันเคยเห็นออนไลน์ สำหรับองศาอื่น ๆ ไม่ได้สอนอะไรมากมายเลย


3
@ ThorbjørnRavnAndersen: ทฤษฎีเป็นเครื่องมือในการเขียนโค้ดไม่มีอะไรเพิ่มเติม ทฤษฎีไม่มีค่าอะไรถ้าคุณไม่สามารถใช้มันเพื่อสร้างรหัสที่ดีกว่า
DeadMG

3
@Optimus: ทฤษฎีส่วนใหญ่ไม่สามารถช่วยคุณสร้างรหัสได้ดีขึ้น
DeadMG

3
ทฤษฎีเป็นรากฐานที่จะรู้ว่าสามารถเขียนโค้ดได้และอะไรไม่ได้

17
มีคำแนะนำที่ดีมากในโพสต์นี้ แต่คุณก็ดื้อรั้นเกินไปเกี่ยวกับการประกาศบางฟิลด์ว่าเสียเวลา วันนี้มีงานเขียนโปรแกรมที่หลากหลายและสิ่งที่เสียเวลาสำหรับงานหนึ่งอาจจำเป็นสำหรับงานอื่น แทนที่จะเพียงแค่ละทิ้งบางสิ่งบางอย่างไปเป็นการเสียเวลามันจะเป็นประโยชน์ในการอธิบายการพัฒนาที่คุณมีส่วนร่วม
Charles E. Grant

4
ฉันได้ทำการสัมภาษณ์จำนวนมากในช่วงไม่กี่ปีที่ผ่านมาและดูเหมือนว่าช่องว่างที่ใหญ่ที่สุดในทุกวันนี้ในวิทยาลัยคือการสอนโครงสร้างข้อมูลและอัลกอริทึม ช่องว่างที่ใหญ่เป็นอันดับสองคือการทำความเข้าใจวิธีการใช้เครื่องมือภายใน ในความคิดของฉันการใช้เครื่องมือเฉพาะอย่างในชั้นเรียนเสียเวลา มีจุดไม่มากในการรู้ไวยากรณ์ C ++ ถ้าคุณไม่สามารถอธิบายได้ว่าเมื่อใดควรใช้ตารางแฮชและเมื่อใดที่จะใช้ทรี
Gort the Robot

5

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


ฉันกำลังมองหามัน แต่ฉันพบว่าข้อกำหนดของพวกเขาค่อนข้างสั้น และรายการหลักสูตรยาว ๆ อยู่ที่ไหน?
Optimus

1
web.mit.edu/catalog/degre.engin.ch6.html เป็นรายการใหญ่ CS หมายถึง 6.3
stonemetal

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

1
ตอนนี้ฉันกำลังทำ EECS ที่ Berkeley หากโปรแกรม MIT EECS มีโครงสร้างเช่นเดียวกับ Berkeley คุณจะไม่ได้รับคำแนะนำมากนัก: เรามีช่วงแนะนำสั้น ๆ และจากนั้นก็จะทำสิ่งที่คุณต้องการตามลำดับที่คุณต้องการตราบใดที่คุณมีจำนวนขั้นต่ำ หลักสูตร ฉันคิดว่ามันยอดเยี่ยม แต่มันอาจจะไม่ช่วยให้คุณรู้ว่าต้องเรียนหลักสูตรไหน: ฉันต้องตัดสินใจด้วยตัวเอง (ฉันได้รับความช่วยเหลือจากอาจารย์ที่ปรึกษาของฉัน แต่โดยบังเอิญคำแนะนำของเขาก็คือการสัมมนาระดับบัณฑิตศึกษาของเขา :))
Tikhon Jelvis

@TikhonJelvis มันง่ายกว่าที่จะเลือกสิ่งที่คุณต้องการเรียนรู้และสิ่งที่คุณจะไม่เมื่อคุณมีความคิดเกี่ยวกับขอบเขตของสนามและสิ่งที่ขอบเขตอย่างน้อยควรจะครอบคลุม ฉันเป็นผู้สำเร็จการศึกษาวิศวกรรมโยธามีความคิดเพียงเล็กน้อยเกี่ยวกับสิ่งที่เกิดขึ้นในสาขาวิทยาศาสตร์คอมพิวเตอร์และ Engg Field
Optimus

5

ลองคำแนะนำหลักสูตรวิทยาการคอมพิวเตอร์ปี 2001 จาก ACM / IEEE ลิงก์ที่นี่: http://www.acm.org/education/curricula-recommendations

พร้อมกับการอัปเดต CS 2008

หน้า 17 ของปี 2001 รายงานมีแผนภูมิที่มีประโยชน์ซึ่งขีดเส้นใต้ความรู้ "แกนกลาง" ทั้งหมดและยังคงมีรายชื่อวิชาเลือก

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

คุณสามารถค้นหาหลักสูตรที่ต้องการได้จากเว็บไซต์แผนก CS สำหรับโรงเรียนใด ๆ และพวกเขาควรเป็นรุ่นนี้


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

สำหรับคนขี้เกียจรายการนั้นประกอบด้วย: ขั้นตอนวิธีการเขียนโปรแกรมโครงสร้างแบบไม่ต่อเนื่อง (PF) และความซับซ้อน (AL) สถาปัตยกรรมและองค์กร (AR) ระบบปฏิบัติการ (AR) ภาษาโปรแกรมคอมพิวเตอร์ (Cent) Net-Centric Computing (NC) ภาษามนุษย์คอมพิวเตอร์ ปฏิสัมพันธ์ (HC) กราฟิกและระบบประมวลผลภาพ (GV) ระบบอัจฉริยะ (IS) การจัดการข้อมูล (IM) ปัญหาทางสังคมและวิชาชีพ (SP) วิศวกรรมซอฟต์แวร์ (SE) วิทยาศาสตร์การคำนวณและวิธีเชิงตัวเลข (CN)
ดาเมียนโรช

-4

ถ้าฉันทำได้ฉันอยากจะแนะนำให้เข้าร่วมgithub.comเป็นส่วนหนึ่งของกระบวนการเรียนรู้ของคุณ

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

และแน่นอนคุณจะคุ้นเคยกับคอมไพล์ซึ่งดีกว่าทั้งหมด


5
-1: แม้ว่าจะมีค่า แต่นั่นก็ไม่ได้ทำให้เขาเห็นแง่มุมทางทฤษฎีทางวิทยาศาสตร์คอมพิวเตอร์ที่เขาจำเป็นต้องรู้
Ken Bloom

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