- คอร์ส "Mathematics for Computer Science" ของ MIT OpenCourseWare มอบพื้นฐานทางคณิตศาสตร์ที่จำเป็นสำหรับวิทยาการคอมพิวเตอร์และวิศวกรรมซอฟต์แวร์
- ครอบคลุม คอมบิเนทอริกส์, ทฤษฎีกราฟ, คณิตศาสตร์ไม่ต่อเนื่อง และหัวข้ออื่น ๆ โดยมุ่งเน้นการเสริมความสามารถในการแก้ปัญหาด้านวิทยาการคอมพิวเตอร์
- เอกสารประกอบการสอนมีให้ครบทั้ง โน้ตการบรรยาย, แบบฝึกหัด, เฉลย ซึ่งช่วยการเรียนรู้เชิงปฏิบัติได้มาก
- คอร์สนี้สามารถนำไปประยุกต์ใช้ได้ทั้งในงานจริงและงานวิจัย เช่น การออกแบบอัลกอริทึม, ทฤษฎีการคำนวณ, การตรวจสอบความถูกต้องของข้อผิดพลาด
- เปิดให้เรียนฟรี ทุกคนเข้าถึงได้ และอ้างอิงตามหลักสูตรมาตรฐานของ MIT
ภาพรวมคอร์ส
- "Mathematics for Computer Science" ของ MIT OpenCourseWare เป็นคอร์สคณิตศาสตร์แกนหลักสำหรับนักศึกษา วิทยาการคอมพิวเตอร์และวิศวกรรมไฟฟ้า
- เนื้อหาสำคัญประกอบด้วย คอมบิเนทอริกส์, ทฤษฎีกราฟ, โครงสร้างไม่ต่อเนื่อง, ความน่าจะเป็น และเป็นพื้นฐานสำหรับ ตรรกะของโปรแกรม กับ การวิเคราะห์อัลกอริทึม
หัวข้อการเรียนรู้หลัก
- คณิตศาสตร์ไม่ต่อเนื่อง: เน้นโครงสร้างคณิตศาสตร์พื้นฐานของโปรแกรม เช่น ตัวเลข ฟังก์ชัน เซต และตรรกะ
- คอมบิเนทอริกส์และความน่าจะเป็น: ช่วยให้เข้าใจ ประสิทธิภาพ, ความสุ่ม, การกระจายของข้อมูล ของอัลกอริทึม
- ทฤษฎีกราฟ: มีบทบาทสำคัญต่อโครงสร้างข้อมูลและการสร้างแบบจำลองเครือข่าย รวมถึงการค้นหาเส้นทางและโจทย์การหาค่าเหมาะที่สุด
- การพิสูจน์ความถูกต้องของอัลกอริทึม: ใช้การให้เหตุผลเชิงตรรกะและอุปนัยทางคณิตศาสตร์เพื่อรับประกันความเสถียรของโปรแกรม
สื่อการเรียน
- โน้ตการบรรยาย: จัดทำอย่างเป็นระบบ โดยเน้นคำอธิบายทฤษฎีและตัวอย่าง
- แบบฝึกหัด: มีโจทย์หลายระดับความยากในแต่ละหน่วย เพื่อเพิ่มความสามารถในการประยุกต์ใช้แนวคิด
- เฉลย: มีคำอธิบายเพื่อให้ตรวจสอบผลลัพธ์ได้หลังจากลองแก้ปัญหาด้วยตนเอง
การประยุกต์ใช้และคุณค่า
- วางรากฐานสำคัญให้กับสาขา วิทยาการคอมพิวเตอร์, การออกแบบระบบ, ปัญญาประดิษฐ์, วิศวกรรมซอฟต์แวร์
- ด้วยการ เข้าถึงได้ฟรี จึงเปิดโอกาสการเรียนรู้อย่างกว้างขวางให้กับทั้งผู้ที่กำลังเตรียมตัวเป็นนักพัฒนา วิศวกรในสายงาน และนักวิจัย
- จัดทำตาม หลักสูตรมาตรฐานของ MIT จึงมอบประสบการณ์การเรียนรู้ในระดับสากล
หมายเหตุเพิ่มเติม
- เมื่อต้องใช้งานเว็บไซต์ภายนอก เงื่อนไขการใช้งานและไลเซนส์ ของเว็บไซต์นั้นอาจแตกต่างจาก MIT OCW
- MIT OCW ไม่รับผิดชอบ ต่อเนื้อหาบนเว็บไซต์ภายนอก
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
น่าทึ่งมากที่ทุกคนสามารถเรียนวิชาจากมหาวิทยาลัยระดับโลกได้ฟรี โดยเฉพาะคอร์สคณิตศาสตร์เชิงลึกยาว 31 ชั่วโมงแบบนี้ แต่ซีรีส์บรรยายยาว ๆ ก็มักเรียนให้จบได้ยากเสมอ เลยชอบไปหาวิดีโอสั้นที่อธิบายแต่แนวคิดเร็ว ๆ ซึ่งพอเป็นแบบนั้นความลึกก็มักไม่พอ และสุดท้ายก็มักเลิกกลางทาง ดูเหมือนว่าแรงจูงใจจากการลงทะเบียนเรียนในมหาวิทยาลัยจริงจะสำคัญมาก อยากรู้ว่ามีใครเคยเรียนคอร์สแบบนี้คนเดียวจนจบจริงไหม และรักษาความสม่ำเสมอกับวินัยของตัวเองอย่างไร สำหรับแพลตฟอร์มคอร์สอย่าง Coursera, KhanAcademy ฯลฯ อย่างน้อยก็มีเส้นตายมาคอยบังคับบ้าง เลยช่วยให้มีแรงจูงใจมากขึ้น ดูเหมือนผมจะคุ้นกับการเรียนแบบยึด deadline เป็นหลัก ถ้าใครสมาธิสั้นเลยมองหาคอร์สสั้น ๆ อยู่เหมือนกัน (แม้อาจลึกไม่พอ) ขอแนะนำ เพลย์ลิสต์ YouTube ของ Professor Dave Explains
ผมชอบคณิตศาสตร์ เรียนจนจบปริญญาเอก และถือว่าควบคุมตัวเองได้ดีพอสมควร แต่ช่วงแรกก็ยังรู้สึกว่าการเรียนจากวิดีโออย่างเดียวไม่ง่ายเลย รู้สึกว่าต้องมีความรู้พื้นฐานถึงระดับหนึ่งก่อน จึงจะเรียนแบบขับเคลื่อนตัวเองผ่านวิดีโอได้ ปัจจัยสำคัญคือการเข้าร่วมโปรแกรมร่วมกับเพื่อน ๆ และที่สำคัญที่สุดคือการมีเมนเทอร์ที่มีประสบการณ์ ผมคิดว่ายากมากที่จะไปถึงขั้นเรียนคณิตศาสตร์ด้วยตัวเองได้จริงโดยไม่มีเมนเทอร์ ต้องมีใครสักคนคอยแก้ข้อผิดพลาดและชี้ทางให้ เปรียบได้กับครูสอนเปียโน อีกอย่างที่สำคัญคือการลงทุนเวลา ถ้าอยากเข้าใจ linear algebra, analysis, calculus ฯลฯ อย่างคล่องจริง ๆ ต้องทุ่มเวลาอย่างน้อยสัปดาห์ละ 10 ชั่วโมงเป็นเวลาหนึ่งปี ถ้าลงเวลาแค่ 2 ชั่วโมงก็จะเหลือเพียงความเข้าใจผิวเผินที่ไม่ลึกพอ
สำหรับคำถามที่ว่าแรงจูงใจมาจากการลงทะเบียนมหาวิทยาลัยจริงหรือไม่ ผมคิดว่าในกรณีส่วนใหญ่ปัจจัยคือค่าตอบแทนที่สูงขึ้นหลังเรียนจบ ต่างจากนักศึกษา MIT จริง ๆ การเรียนออนไลน์อย่างเดียวไม่ได้พาคุณเข้าใกล้ปริญญา MIT เลย แรงจูงใจจึงอ่อนกว่า ถ้าคุณคุ้นกับการเรียนแบบมี deadline ก็อาจตั้งบทลงโทษให้ตัวเอง หรือให้สัญญากับใครสักคนว่า ถ้าทำไม่จบจะต้องจ่ายค่าเสียหาย อะไรทำนองนั้น ผมเองก็เคยเรียนคอร์สหรืออ่านหนังสือจนจบด้วยตัวเองจริง ๆ แรงจูงใจของผมคือความอยากรู้อยากเห็นล้วน ๆ และผมไม่ชอบความรู้สึกที่ต้องยอมรับว่าไม่รู้ หรือทำเหมือนรู้ทั้งที่จริงไม่รู้
ตอนเรียนมหาวิทยาลัย ช่วงเวลาที่ได้เรียนวิชา CS ขั้นสูงกับอาจารย์และเพื่อนร่วมชั้นเป็นช่วงที่สนุกที่สุดในชีวิต หลังเรียนจบแล้วก็ต้องวุ่นกับงาน และตอนนี้ไม่มีทั้งการตรวจการบ้าน สอบ หรือช่วงถามตอบกับอาจารย์ ทำให้การเรียนความรู้ใหม่ยากขึ้นมาก กำลังคิดว่าจะลงเรียนมหาวิทยาลัยออนไลน์เอาสนุก ๆ แต่สงสัยว่ามีโปรแกรมที่ออนไลน์ ราคาไม่แพง เปิดวิชา CS/ML ขั้นสูง และมีปฏิสัมพันธ์กับอาจารย์ได้จริง ๆ ไหม ถ้ามีข้อเสนอแนะจะขอบคุณมาก
คอร์สนี้ช่วยโปรเจกต์ปัจจุบันของผมมาก (ตัวพรีวิวเวอร์ G-code และระบบ 3D modeling สำหรับ OpenPythonSCAD) แหล่งเสริมที่แนะนำคือ SICP(Structure and Interpretation of Computer Programs), Euclid's Elements online, Motion Mountain, รวมถึง LibriVox, Project Gutenberg ฯลฯ ตอนเด็ก ๆ ก็มีความทรงจำเรื่องการหาหนังสือมาอ่านผ่านช่องทางต่าง ๆ ทั้งชั้นหนังสือเล็ก ๆ ในชนบท หอหนังสือในเรือนจำ และห้างในเมืองที่อยู่ห่างออกไป 26 ไมล์
ตอนตามเรียนคอร์สนี้ ผมรู้สึกว่าตัวเองยังขาดการฝึกฝนและแบบฝึกหัดทางคณิตศาสตร์ เลยยากที่จะจบหนึ่งเลกเชอร์รวดเดียว ผมต้องไปหาเว็บอื่นช่วยอธิบายเพื่อปูพื้น และแบ่งฟังหนึ่งเลกเชอร์ออกเป็นหลายวัน (หรือหลายสัปดาห์) สิ่งสำคัญคือการปรับความคาดหวัง ต้องยอมใช้เวลาคิดอยู่กับจุดที่ติด หรือรอให้คุ้นเคยขึ้นเองตามธรรมชาติ ผมจดสั้น ๆ ไว้ในไฟล์โน้ตหรือบนกระดาษว่าอะไรเข้าใจแล้ว อะไรยังไม่เข้าใจ แล้วทำต่อเนื่องไปหลายเดือน สุดท้ายจะมีช่วงหนึ่งที่เริ่มมองเห็นทางเอง
รายการหัวข้อบรรยายดูได้ที่ หน้า MIT OCW และมีเลกเชอร์โน้ตให้ที่นี่ ผมยังไม่คุ้นกับทั้งคอร์สมากนัก แต่คาบสุดท้ายอย่าง 'Large Deviations' มีอะไรที่แปลกดี ส่วนตัวผมชอบเลกเชอร์ 'State machines' เพราะแทนที่จะใช้ตัวอย่างตัวแปรบูลีน กลับใช้กรณีที่เข้าใจง่ายกว่าอย่างปริศนา 15-puzzle และอธิบายแนวคิดเรื่อง invariant ได้ดี ตำราเรียน (PDF) อยู่ที่นี่ และโจทย์จริงก็ค่อนข้างใช้ได้จริง เช่น แทนที่จะเป็น Boolean algebra แบบแห้ง ๆ ก็พูดถึงการทำให้เงื่อนไขตอน file system ถูกล็อกเป็นสูตรอย่างเป็นทางการ
เลกเชอร์ 'Large Deviations' เป็นหัวข้อที่น่าสนใจ แต่ในเลกเชอร์โน้ตกลับไม่ได้ให้คำนิยามของ large deviations โดยตรง มีตัวอย่างของขอบเขต Chernoff (exponential) สำหรับผลรวมของตัวแปรสุ่ม IID อยู่ แต่ไม่ได้เรียกมันว่า large deviations ตรง ๆ เลย น่าเสียดายนิดหน่อย ขอบเขตแบบนี้เจอบ่อยใน computer science โดยเฉพาะใน learning theory ยุคหลัง ๆ
แต่ละหน่วยดูเหมือนจะค่อนข้างอิสระต่อกัน เลยสงสัยว่าสามารถเรียนเรียงลำดับไหนก็ได้หรือไม่ เพราะอย่าง Set theory ก็ดูเป็นพื้นฐานทางคณิตศาสตร์ เลยถามไว้เพื่อความแน่ใจ
มีใครเคยเปลี่ยนสายอาชีพด้วย OpenCourseware ไหม ผมคิดว่ายุค MOOC ในความเป็นจริงไม่ได้เป็นอย่างที่ประชาสัมพันธ์กันนัก แต่น่าจะเหมาะกับคนที่มีการศึกษาสูงอยู่แล้ว เป็นคนเรียนรู้ด้วยตัวเอง หรือเรียนเป็นงานอดิเรกมากกว่า ไม่ได้จะตำหนินะ เพราะตัวผมเองก็กำลังหาเวลาว่างระหว่างงานกับงานบ้านมาเรียน quantum computing อยู่เหมือนกัน แต่ถ้าเรียนแบบนี้ก็ดูเหมือนจะต้องใช้เวลาอีกหลายสิบปีกว่าจะตามทัน
ผมรู้สึกขัด ๆ กับชื่อคอร์สอย่าง 'Mathematics for Computer Science' นิดหน่อย เพราะเดิมทีผมมองว่า computer science เป็นแขนงหนึ่งของคณิตศาสตร์อยู่แล้ว
ในทางทฤษฎีก็เห็นด้วย แต่ในอุตสาหกรรมจริง ความต้องการ software engineer มีมากกว่านักคณิตศาสตร์มาก และแทบไม่มีใครเข้ามาเริ่มเรียน CS เพราะสนใจคณิตศาสตร์เป็นหลัก ดังนั้นหลักสูตร CS จึงออกไปทางปฏิบัติมากกว่า เน้นเรื่องที่ใช้เข้าบริษัท big tech ได้ เช่น algorithm หลัก ๆ, data structure, การเขียน Python ฯลฯ
ต่อให้ทุกแขนงย่อยของคณิตศาสตร์มีชื่อคอร์สในรูปแบบ 'Mathematics for [สาขาย่อย]' ก็ไม่ได้แปลกอะไร ผมเองไม่เคยเป็นคนตั้งชื่อคอร์ส แต่ในแง่เนื้อหาก็คล้ายกับวิชา 'Intro to' อื่น ๆ มาก
ผมวางแผนจะ formalize คอร์สนี้ด้วย Lean ยังไม่รู้ว่าจะยากแค่ไหน แต่ถ้าใครสนใจก็มาร่วมกันได้ที่ github repository
งานนี้เข้ากับเป้าหมายของ CSLib initiative มากด้วย ตอนนี้มีลิงก์ที่เกี่ยวข้องแค่ โพสต์ LinkedIn นี้
อยากรู้ว่าจะได้อะไรจากการทำงานนี้บ้าง
น่าจะมีหนังสือเฉลย/แนวทางทำโจทย์ให้ด้วย ผมไม่แน่ใจว่าจะตรวจคำตอบตัวเองอย่างไร
วิดีโอเลกเชอร์ดูได้ที่ MIT OCW, YouTube playlist
ผมสงสัยว่าจะหาเฉลย/วิธีทำโจทย์ของคอร์สนี้ได้จากที่ไหน
หัวข้อบรรยายดูน่าสนใจ แต่ผมคิดว่าสำหรับ software engineer ทั่วไป เนื้อหาที่จำเป็นจริง ๆ มีไม่มาก ตอนเริ่มเขียนโปรแกรมใหม่ ๆ ผมเพิ่งตระหนักว่าเนื้อหาคณิตศาสตร์ที่ใช้จริงในงานประจำวันมีน้อยอย่างน่าประหลาด แน่นอนว่าคอร์ส MIT แบบนี้ทำมาเพื่อ computer scientist มากกว่า software engineer ซึ่งในมหาวิทยาลัยอเมริกันมักแยกสองอย่างนี้ค่อนข้างชัด
ถ้าคุณแตะงานด้านฟิสิกส์หรือ robotics แม้แต่นิดเดียว คำพูดแบบนั้นใช้ไม่ได้เลย เพราะถ้าไม่มีคณิตศาสตร์ก็แทบจะเข้าใจอะไรไม่ได้
ผมเคยทำงานเป็น software engineer ทั้งตอนที่มีพื้นฐานคณิตศาสตร์และไม่มีพื้นฐานคณิตศาสตร์ ซึ่งความสามารถในการสร้างคุณูปการและประสิทธิผลต่างกันโดยสิ้นเชิง
หัวข้อแรกคือ 'Predicates, Sets, and Proofs' และผมเองก็ใช้ predicate กับ set บ่อยมากในการเขียนโปรแกรมทั่วไป
ต่อให้ผมไม่ใช้ ก็ไม่ได้แปลว่าคนอื่นไม่ใช้ software engineering จะเกิดขึ้นไม่ได้เลยถ้าไม่มี computer science
ถึงจะไม่จำเป็นต้องรู้ทุกอย่างในระดับลึก แต่ผมคิดว่าความเข้าใจเชิงแนวคิดเป็นสิ่งจำเป็นต่อการเขียนโปรแกรมที่ถูกต้องตามสเปก มนุษย์อาจแก้โจทย์ algorithm แบบ ad-hoc ได้โดยสัญชาตญาณ แต่คณิตศาสตร์ช่วยให้ความคิดมีโครงสร้างและความเคร่งครัด ทำให้เราจัดระบบปัญหาและเปลี่ยนกระบวนการแก้ให้เป็นเชิงกลได้ อย่างน้อยถ้ารู้ set theory, logic, relational algebra ก็จะเข้าใจความเชื่อมโยงระหว่างการเขียนโปรแกรมกับคณิตศาสตร์ได้ดีขึ้นมาก หนังสือที่แนะนำคือ Introductory Logic and Sets for Computer Scientists (โดย Nimal Nissanke) และ Understanding Formal Methods (โดย Jean-Francois Monin)
เดี๋ยวก่อน... CS เดิมทีก็คือปริญญาด้านคณิตศาสตร์อยู่แล้ว ชื่อนี้ให้ความรู้สึกเหมือนคณิตศาสตร์สำหรับคณิตศาสตร์