ก่อนอื่น: ฉันเป็นนักคณิตศาสตร์ - เป็นมืออาชีพ (ที่ฉันได้รับเงินสำหรับการทำคณิตศาสตร์) ฉันไม่ใช่โปรแกรมเมอร์ ฉันจะเขียนโปรแกรมบางอย่าง แต่แน่นอนมากเกี่ยวกับความหลากหลายของลัทธิ Cargo (ดูความคิดเห็นแรกไปที่https://tex.stackexchange.com/q/451/86และการตอบสนองของฉัน) และไม่มีการเรียงลำดับใดที่จะนำฉันมาที่นี่ ไซต์ (จริง ๆ แล้วฉันลงทะเบียนที่นี่เพื่อโพสต์คำตอบนี้หลังจากเห็นลิงก์ในห้องสนทนา TeX)
สรุปคำตอบของฉันคือคณิตศาสตร์คือการเขียนโปรแกรม
เมื่อเร็ว ๆ นี้ฉันต้องสอนหลักสูตรคณิตศาสตร์ให้กับนักเรียนที่ไม่ใช่กลุ่มคณิตศาสตร์ พวกเขาเป็นส่วนการเขียนโปรแกรม ฉันคิดว่ามันยอดเยี่ยมมาก! ในที่สุดฉันจะสามารถสอนคณิตศาสตร์ให้กับผู้ที่เข้าใจแนวคิดพื้นฐานแล้วและมีเครื่องมือพื้นฐานสำหรับการทำคณิตศาสตร์อยู่แล้ว ฉันรู้สึกผิดหวังอย่างไม่น่าเชื่อเมื่อฉันถามว่ามีกี่คนที่เขียนโปรแกรมจริง ๆ และได้รับคำตอบระหว่าง 0 ถึง 1
ก่อนที่ฉันจะไปฉันควรอธิบายบางสิ่ง มีส่วนของคณิตศาสตร์ที่เกี่ยวข้องโดยตรงกับการเขียนโปรแกรมและเกี่ยวข้องกับการประเมินอัลกอริธึมและการจำแนกภาษาและสิ่งที่คล้ายกัน ฉันไม่ได้พูดถึงสิ่งเหล่านั้น นอกจากนี้ยังมีโปรแกรมที่พยายามแปลคณิตศาสตร์ทั้งหมดเป็นภาษาทางการที่คอมพิวเตอร์สามารถประเมินได้ นี่เป็นสิ่งที่ฉันกำลังพูดถึงอยู่นิดหน่อย แต่ถึงกระนั้นการมุ่งเน้นไปที่สิ่งนั้นจะทำให้ฉันพลาดส่วนสำคัญของสิ่งที่ฉันกำลังพูด คณิตศาสตร์ที่ฉันทำและการเขียนโปรแกรมที่ฉันทำนั้นแทบจะไม่เกี่ยวข้องกับหัวข้อทั้งหมด การเชื่อมต่อระหว่างพวกเขาอยู่ในระดับที่แตกต่างกัน
ที่ฉันต้องการเริ่มต้นด้วยความคิดเห็นในคำถามหลัก:
ถ้านั่นคือการทำคณิตศาสตร์แล้วกิจกรรมของมนุษย์ทั้งหมดเป็นรูปแบบของคณิตศาสตร์ หากเป็นเช่นนั้นคำว่าคณิตศาสตร์ไม่มีความหมายที่มีประโยชน์เพราะไม่สามารถใช้แยกแยะกิจกรรมหนึ่งจากกิจกรรมอื่นได้
ใช่นั่นคือการทำคณิตศาสตร์ แต่ "maths" ยังคงเป็นคำที่มีประโยชน์เพราะในขณะที่เพลงพูดว่า "มันไม่ใช่สิ่งที่คุณทำมันเป็นวิธีที่คุณทำ" ฉันจะบอกว่าฉันทำคณิตศาสตร์เมื่อฉันกำลังใกล้เข้ามาบางสิ่งบางอย่างในทางคณิตศาสตร์ บางครั้งนั่นคือคณิตศาสตร์ "ฮาร์ดคอร์": การกำหนดคำจำกัดความการพิสูจน์ทฤษฎีบท บางครั้งมันไม่ใช่ บางครั้งมันเขียนโปรแกรมเล็ก ๆ น้อย ๆ เพื่อให้ลูก ๆ ของฉันสามารถเรียนรู้การสะกดคำ
นี่คือสิ่งที่คณิตศาสตร์ช่วยฉันเมื่อฉันเขียนโปรแกรม:
นามธรรมนี้น่าจะเป็นทักษะโอนเปลี่ยนมือที่สำคัญที่สุดจากคณิตศาสตร์ จากนี้ฉันหมายถึงความสามารถในการขจัดสิ่งที่ไม่จำเป็นออกไปและมุ่งเน้นไปที่คุณสมบัติที่สำคัญ
มุมมองถ้าฉันสามารถเลือกสิ่งเดียวที่นักเรียนของฉันทุกคนต้องเรียนรู้สิ่งนี้ก็คือ: ความสามารถในการเปลี่ยนมุมมองของคนเพื่อให้เหมาะกับปัญหา เรามักจะปฏิบัติต่อสิ่งนี้ในพีชคณิตเชิงเส้นด้วยสูตรการเปลี่ยนแปลงพื้นฐาน (ซึ่งนำไปสู่เมทริกซ์ที่น่ากลัวและภาวะแทรกซ้อนที่น่ากลัว) แต่มันก็มีประโยชน์มากกว่านั้น ที่ใจมันเป็นความคิดที่ว่าเพราะมีบางสิ่งที่มอบให้คุณในแบบที่ไม่ต้องเป็นแบบที่คุณทำงานด้วย สิ่งนี้แยกมุมมองของสิ่งต่าง ๆ ออกจากวิธีการนำเสนอ สิ่งนี้สามารถนำไปใช้ได้จริงอย่างยิ่งยวด: มันคือทั้งหมดที่เกี่ยวกับการทำสิ่งที่มีประโยชน์หรือมีประสิทธิภาพ. ถ้าฉันมีรายชื่อของเวกเตอร์และมันมีประสิทธิภาพมากขึ้นเพื่อเก็บไว้เป็นรายการของ x พิกัดและรายชื่อของ Y-พิกัดที่ดังนั้นไม่ว่าจะเป็น
รูปแบบเมื่อเทียบกับฟังก์ชั่นนำจากข้างบน ถ้าสิ่งที่สามารถนำเสนอในรูปแบบที่แตกต่างกันแล้วมันไม่ยุติธรรมที่จะบอกว่างานนำเสนอหนึ่งโดยเฉพาะเป็นสิ่ง หากต้องการอ้างชื่อเพลงผิดอีกครั้ง: "มันไม่ใช่สิ่งที่คุณเป็นมันคือสิ่งที่คุณทำ " นั่นสำคัญ
ฉันสามารถไปต่อได้ แต่สิ่งเหล่านี้คือสิ่งที่เกิดขึ้นในใจ
ตอนนี้อาจมีปฏิกิริยา (เชิงลบ) มากมายต่อสิ่งที่ฉันเขียนจนถึงตอนนี้ หนึ่งจะเป็น "นั่นไม่ใช่คณิตศาสตร์นั่นเป็นเพียงความรู้สึกที่ดี" (หรือความรู้สึกไม่ดี) ที่ฉันอ้างถึงคำพูดของฉันข้างต้นเห็นด้วยกับความเชื่อมั่นว่า "กิจกรรมมนุษย์ทั้งหมดเป็นรูปแบบของคณิตศาสตร์" อีกข้อหนึ่งคือ "นั่นไม่ใช่ประเภทของคณิตศาสตร์ที่มีความหมายในคำถาม" นี่เป็นเรื่องจริงเกือบแน่นอนและที่นี่ฉันมีความเห็นอกเห็นใจต่อบุคคลที่พูดว่า "อย่างน้อยฉันก็ไม่ได้แตะคณิตศาสตร์เป็นเวลา 10 ปี" เขาหรือเธอผิดแน่นอนพวกเขาทำคณิตศาสตร์มา 10 ปีเพราะเมื่อใดก็ตามที่พวกเขาเขียนโปรแกรมที่พวกเขากำลังทำคณิตศาสตร์อยู่ พวกเขาไม่ได้ตระหนักถึงมัน
จริงๆแล้วฉันใช้ "คณิตศาสตร์จริง" บางอย่างในโปรแกรมของฉัน เมื่อเร็ว ๆ นี้ฉันได้เขียนโปรแกรมสำรวจรูปร่างสามมิติที่สนุกซึ่งเกี่ยวข้องกับการใช้คณิตศาสตร์เพื่อคำนวณการคาดการณ์และการเปลี่ยนแปลงอื่น ๆ ที่ฉันต้องใช้กับข้อมูลของฉัน ฉันถูกขบขันอย่างอ่อนโยนเพื่อค้นหาตัวเองเขียนรหัส quaternions! แต่แน่นอนว่าคณิตศาสตร์ที่เกี่ยวข้องนั้นเล็กน้อยเมื่อเทียบกับคณิตศาสตร์ที่ฉันทำเมื่อฉันทำงาน มันเป็นสิ่งที่ "หลังซอง" คณิตศาสตร์ประเภทนั้นฉันเห็นด้วยกับความรู้สึกที่คุณหยิบมันขึ้นมาเมื่อคุณต้องการมันและถ้าคุณต้องการบางสิ่งที่ซับซ้อนกว่าที่คุณสามารถหาได้บน Wikipedia คุณก็จะพบว่านักคณิตศาสตร์ตัวจริงทำเพื่อคุณ อย่างไรก็ตามเพื่อให้คุณสามารถหยิบมันเมื่อคุณต้องการมันแล้วคุณต้องเรียนรู้บางสิ่งบางอย่าง. สิ่งนั้นอาจไม่ใช่สิ่งที่คุณเคยใช้จริง ๆ แต่เมื่อได้เรียนรู้ว่ามีบางสิ่งที่ทำให้คุณสามารถเลือกสิ่งที่คุณใช้จริงในภายหลังได้ง่ายขึ้น ดังนั้นนี่คือที่ฉันไม่เห็นด้วยกับ Coder: คุณจำเป็นต้องเรียนรู้คณิตศาสตร์บางอย่างถ้าคุณจะใช้คณิตศาสตร์ใด ๆและคุณต้องเรียนรู้จากด้านคณิตศาสตร์ (ซึ่งไม่ได้หมายถึงการพิสูจน์ทฤษฎีบทโดยวิธี)
และในที่สุดก็ถึง "คณิตศาสตร์คือการเขียนโปรแกรม" คุณสามารถเรียนรู้สิ่งเหล่านี้ทั้งหมดจากการเป็นโปรแกรมเมอร์ที่ดี และถ้าคุณได้เรียนรู้สิ่งเหล่านี้คุณจะได้พบกับคณิตศาสตร์ง่ายมากเพราะคุณจะเข้าใจว่าเมื่อเราพูดคุยเกี่ยวกับเวกเตอร์ในปริภูมิเวกเตอร์แล้วมันเป็นเพียงตัวอย่างของการเรียนด้วยVector
ซึ่งหมายความว่าเราสามารถทำทุกสิ่งที่Vector
ไม่ให้ อินสแตนซ์นั้น: เพิ่มลบสเกลและอื่น ๆ นั่นเป็นเหตุผลที่ฉันชอบสอนคณิตศาสตร์ให้โปรแกรมเมอร์ แต่การพูดเป็นนักคณิตศาสตร์ฉันจะบอกว่าก่อนของเหล่านี้ "นามธรรม" ง่ายต่อการเรียนรู้ในวิชาคณิตศาสตร์มากกว่าในการเขียนโปรแกรมเพราะคณิตศาสตร์คือการแสวงหาความเป็นนามธรรม เมื่อใดก็ตามที่เราเห็นพฤติกรรมบางอย่างการฝึกอบรมของเรามักจะถามว่า "มันเกี่ยวกับสิ่งนั้นที่ทำให้มันทำงานอย่างไรถ้าฉันทำสิ่งอื่นที่คล้ายกันมันจะทำงานในลักษณะเดียวกันหรือไม่ ฉันจะต้องยอมแพ้เพื่อหยุดทำแบบนั้นเหรอ? " (การทำเช่นนี้กับสิ่งที่นำไปสู่สุดขีดใน "คณิตศาสตร์ตะขาบ" - ค้นหาคำศัพท์) แต่เราไม่ทำสิ่งนี้กับวัตถุ "โลกแห่งความจริง" (ไม่ว่าพวกเขาจะเป็นอะไร) เราทำสิ่งนี้กับสิ่งที่เป็นนามธรรมแล้ว
สิ่งนี้ยาวพอแล้วดังนั้นขอให้ฉันสนิทกับมุขตลกนักคณิตศาสตร์คลาสสิกคนหนึ่ง:
นักคณิตศาสตร์และนักฟิสิกส์ทั้งคู่เข้าร่วมสัมมนาในรูปแบบใหม่บางส่วนที่เกี่ยวข้องกับพื้นที่ 24 มิติ หลังจากนั้นพวกเขากำลังคุยกันเรื่องนี้และนักฟิสิกส์ตั้งข้อสังเกตว่า: "มันยากจริงๆฉันหมายถึงคนเรามองภาพพื้นที่ 24 มิติได้อย่างไร" นักคณิตศาสตร์คนนั้นตอบว่า: "โอ้มันง่ายมากแค่เห็นภาพอวกาศ n-มิติจากนั้นตั้ง n = 24"
เพิ่ม 2012-03-2
มีความเห็นค่อนข้างน้อยเกี่ยวกับคำตอบนี้แสดงมุมมองที่หลากหลาย ตอนนี้สิ่งเหล่านี้ถูกลบโดยผู้ดำเนินรายการเกี่ยวกับความเข้าใจที่ฉันจะลองพิจารณารวมไว้ (หรือตอบกลับ) ในคำตอบของฉัน
อย่างไรก็ตามฉันไม่แน่ใจว่าฉันจะทำได้ การอ่านความคิดเห็นเหล่านั้นและสิ่งที่เหลือในหน้านี้ฉันสามารถสรุปได้ว่ามีความเข้าใจผิดอย่างมากเกี่ยวกับคณิตศาสตร์จริง ๆ ยิ่งกว่านั้นฉันรู้สึกไม่เก่งพอที่จะอธิบายได้ โชคดีที่มีบางคนเชื่อมโยงกับความโศกเศร้าของ Lockhart แล้วดังนั้นฉันจะเลื่อนการชี้แจงไป ในขณะที่ฉันอาจจะทำให้มันแตกต่างกัน (เมื่อฉันโตขึ้นในสภาพแวดล้อมทางวิทยาศาสตร์ฉันจะให้ความสำคัญกับลักษณะการทดลองทางคณิตศาสตร์มากขึ้น) ฉันไม่คิดว่าฉันจะทำได้ดีกว่านี้
ฉันยังคงคิดว่าฉันสามารถเพิ่มบางสิ่งบางอย่าง เช่นเดียวกับความเข้าใจผิดเกี่ยวกับคณิตศาสตร์คืออะไรนอกจากนี้ยังมีความเข้าใจผิดว่า "การทำคณิตศาสตร์" หมายถึงอะไร ฉันเห็นสถานการณ์ที่ขัดแย้งกันเกือบสองเรื่อง:
คณิตศาสตร์เป็นเรื่องของสมการและสูตร ดังนั้นจึงไม่จำเป็นต้องศึกษาเพราะวิกิพีเดียมีอยู่ (นี่เป็นสิ่งที่ตรงกันข้ามกับความท้าทายที่ไม่มีหลักฐานของออยเลอร์ต่อ Diderot )
คณิตศาสตร์เป็นเรื่องเกี่ยวกับทฤษฎีบทและคำจำกัดความ ดังนั้นจึงไม่จำเป็นที่จะต้องศึกษาเพราะโปรแกรมไม่เคยพิสูจน์อะไรเลย (ซึ่งเป็นเรื่องเกี่ยวกับการเข้าใจผิดอย่างสมบูรณ์เหมือนกับ ...
ในขณะที่ทั้งสองสถานการณ์ขัดแย้งกันพวกเขาก็จบลงในที่เดียวกัน: ไม่มีโปรแกรมเมอร์ที่เรียนคณิตศาสตร์ใด ๆ - และแน่นอนที่สุดไม่ใช่นักคณิตศาสตร์! ท้ายที่สุดพวกเขารู้อะไรเกี่ยวกับอะไร สิ่งที่โปรแกรมเมอร์ต้องการจะรู้สามารถพบได้ใน Wikipedia หรือตัดคนอื่นออก
ข้างต้นฉันอธิบายตัวเองในฐานะโปรแกรมเมอร์ลัทธิขนส่งสินค้า ฉันพนันว่าพวกคุณส่วนใหญ่มักจะหัวเราะคิกคักกับตัวเองและคิดว่า "อ๋อใช่ฉันก็เลยรู้ว่ารายการของคุณเป็นอย่างไร คุณอาจรู้สึกพอใจในตัวเองและเหนือกว่า (แม้ว่าฉันแน่ใจว่าคุณรู้สึกไม่ดีเกี่ยวกับความรู้สึกสบายใจและเหนือกว่า)
สิ่งที่ฉันได้อธิบายไปแล้วข้างต้นคือ Cargo Cult Mathematics
ดังนั้นเมื่อฉันบอกว่าคุณควรเรียนรู้คณิตศาสตร์สักเล็กน้อยเพื่อให้เข้าใจว่าคณิตศาสตร์ทำงานอย่างไรฉันกำลังพูดด้วยเหตุผลเดียวกับที่คุณเห็นถ้าคุณเห็นรหัสที่ฉันเขียน: "ชีวิตของคุณง่ายขึ้นมากแค่ไหน จะเป็นถ้าคุณหยุดโค้ดตัดและวางจาก StackOverflow และเรียนรู้เพียงเล็กน้อยเกี่ยวกับวิธีการทำอย่างถูกต้อง "
อย่างไรก็ตามสิ่งที่สำคัญที่สุดคือคุณควรเรียนรู้จากนักคณิตศาสตร์ ทำไมเป็นเช่นนั้น นี่เป็นการเปรียบเทียบ ภาษาที่ฉันเก่งที่สุดคือ TeX (พูดได้ทั้งหมดจริงๆ!) ทีนี้สมมติว่าฉันต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ TeX เล็กน้อยและมันเกิดขึ้นเมื่อ Don Knuth อยู่ในเมืองและเสนอที่จะให้บทเรียนบางอย่างเกี่ยวกับ TeX หรือฉันสามารถอ่านเกี่ยวกับมันใน Wikipedia หรืออาจจะเป็น Perl และ Larry Wall หรือ C # (นั่นคือสิ่งที่ใช่หรือไม่) และ Jon Skeet อาจเป็นไปได้ว่าคนเหล่านี้ไม่ใช่ครูที่ดีที่สุดแต่พวกเขาก็ควรทำในสิ่งที่พวกเขารู้!
และนั่นคือสิ่งที่นักคณิตศาสตร์ที่มี เราคือคนที่เขียนภาษาจริงจากนั้นเขียนไลบรารีที่คุณใช้ แน่นอนคุณไม่ต้องรู้วิธีพิสูจน์ทฤษฎีบท - คุณจะไม่เขียนห้องสมุด! แต่ถ้าคุณรู้เล็กน้อยเกี่ยวกับวิธีคิดของเรามันอาจช่วยให้คุณเข้าใจว่าทำไมเราจึงเขียนห้องสมุดแบบที่เราทำและถ้าคุณเข้าใจว่ามันอาจช่วยให้คุณใช้มันได้ดีขึ้น
มีจุดกึ่งกลางระหว่างการค้นหาสมการบนวิกิพีเดียและการพิสูจน์การคาดคะเนของPoincaréเช่นเดียวกับ - เพื่ออ้างถึงความโศกเศร้าของล็อคฮาร์ท - มีพื้นกลางระหว่าง "ฉันไม่ค่อยรู้เรื่องศิลปะมากนัก แต่ฉันรู้ว่าฉันชอบอะไร" และเป็นโมเนท์และระหว่าง "คีย์" ใดก็ได้ "อยู่ที่ไหน และการเป็น Don Knuth หากคุณยังอยู่ในมหาวิทยาลัยคุณมีโอกาสที่จะเรียนรู้จากคนที่เป็นผู้เชี่ยวชาญในสาขาของตนเองและใคร - ด้วยเหตุผลบางอย่าง - เต็มใจที่จะใช้เวลาอธิบายให้คุณ
จุดอื่นที่ฉันต้องการขยายในบิตคือเหตุผลว่าทำไมในฐานะโปรแกรมเมอร์คุณไม่ควรกลัวการเรียนรู้คณิตศาสตร์อีกเล็กน้อย มันไม่ใช่การเชื่อมต่อที่ล้ำลึกหรือประโยชน์ใด ๆ ความสามารถของคุณในการเขียนโปรแกรมคอมพิวเตอร์สามารถช่วยให้คุณเรียนรู้คณิตศาสตร์ได้โดยตรง ฉันแค่อยากจะพูดถึงไม่กี่
ทำความเข้าใจกับตัวแปร ผู้คนมากมายสับสนด้วยคำพูดง่ายๆเช่น "ให้ n เป็นจำนวนธรรมชาติ ... " หรือ "ให้ epsilon> 0" มีสถานที่ในวิชาคณิตศาสตร์ที่สำคัญในการจำขอบเขตของตัวแปร สิ่งเหล่านี้เป็นเรื่องธรรมดาในการเขียนโปรแกรม เรียนรู้การแปลคำสั่งทางคณิตศาสตร์เป็นโปรแกรมแล้วคุณจะพบว่ามันง่ายกว่ามากในการติดตามว่ามีอะไรเกิดขึ้น
ลักษณะของการพิสูจน์ หากคุณเคยเขียนบททดสอบหรือเขียนโปรแกรมเพื่อให้คนอื่นใช้งานคุณจะเข้าใจถึงหลักสำคัญของการพิสูจน์ เมื่อคุณทำเช่นนั้นคุณจะต้องรู้ว่าสิ่งที่ผู้ใช้ใส่คุณสามารถจัดการกับมันได้ (ใส่การอ้างอิง xkcd ที่จำเป็น) นั่นคือหลักฐานทั้งหมด! การสาธิตว่าสิ่งที่ "ผู้ใช้ / จักรวาล" ใส่ไว้คำสั่งจะถือ นักทดลองจะเอนตัวไปที่ "ถ้ามันทำงานภายใต้สถานการณ์ปกติมันเป็นเรื่องจริง" แต่โปรแกรมเมอร์รู้ว่ามีเด็กคนนั้นที่จะลอง Alt + G + Shift + ÅØÆเพียงเพื่อดูว่าเกิดอะไรขึ้น
แห้ง. ขออภัยที่จะทำลายสิ่งนี้ให้คุณ แต่เราคิดค้นมันไม่ใช่คุณ เราได้รับ "ไม่ทำซ้ำตัวเอง" มาเป็นพันปี นั่นเป็นเหตุผลที่ผมมีสำเนาขององค์ประกอบของ Euclid บนชั้นวางของฉันและมันยังมีประโยชน์
และยังมีอีกมากมาย ถ้าฉันรู้เพิ่มเติมเกี่ยวกับการเขียนโปรแกรมฉันจะเขียนหนังสือชื่อ "Mathematics for Programmers" โดยมีจุดประสงค์ที่จะไม่สอน "คณิตศาสตร์ที่โปรแกรมเมอร์ควรรู้" แต่ "คณิตศาสตร์ที่ทุกคนควรรู้ แต่เหมาะสำหรับโปรแกรมเมอร์" . แต่ฉันอาจไม่เคยรู้เกี่ยวกับการเขียนโปรแกรมมาเขียนเลยเว้นแต่ว่ามีบางคนเสนอที่จะร่วมมือกับฉัน!
ฉันจะทิ้งไว้ที่นั่น อาจเป็นไปได้ถ้าฉันคิดมากกว่านี้ฉันจะเปลี่ยนสิ่งที่ฉันเขียน หวังว่าฉันจะอธิบายให้ดีกว่านี้ ในเวลาหนึ่งเดือนฉันอาจไม่เห็นด้วยกับบางส่วนของมัน หากใครต้องการที่จะโต้แย้งเพิ่มเติมหรือแสดงความคิดเห็นเป็นอย่างอื่นอาจจะดีที่สุดที่จะไม่ทำในความคิดเห็นที่นี่ คุณรู้ว่าจะหาฉันได้ที่ไหน