ทำไมบทเรียนการเขียนโปรแกรมการทำงานทั้งหมดจึงเป็นคณิตศาสตร์?


20

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

ข้อมูลพื้นฐาน: ฉันเขียนซอฟต์แวร์มา 12 ปีแล้ว ฉันเข้าใจแนวคิดบางอย่างเช่นการปิดการทำงานเป็นพลเมืองชั้นหนึ่งและชื่อสามัญ ฉันอาจจะมีปัญหากับฟังก์ชั่นการสั่งซื้อขั้นสูงในบางระดับขั้นสูง แต่ฉันอยากจะเชื่อว่าฉันมีความเข้าใจพื้นฐาน Monads กำลังกัดฉันในก้นและ ณ จุดนี้ฉันไม่ได้ผ่านที่ (ฉันแน่ใจว่าฉันจะในที่สุดเพราะฉันขัดขืน)


เพียงเล็กน้อยฉันยังไม่ได้ลองภาษาอื่น ๆ อีก 3 ภาษาที่คุณแนะนำ
Charles Lambert

F # เป็นสิ่งที่ง่ายที่สุดในการเริ่มต้นถ้าคุณรู้ C # ไม่ขอความรู้คณิตศาสตร์ขนาดใหญ่
cnd

6
ลอง SICP - มันไม่ไปไกลเกินกว่าคณิตศาสตร์มัธยม
SK-logic

@Charles Lambert - ไปดู OfficeSpace แล้วคุณจะได้รับส่วนที่สองของความคิดเห็นของ Job
Jetti

@Charles Lambert: เรียนรู้คุณ Haskell สำหรับความดีไม่เก่งเกินไป: D
Matthieu M.

คำตอบ:


21

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

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

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

http://learnyouahaskell.com/ - น่าจะเป็นหนึ่งในการแนะนำการเขียนโปรแกรมฟังก์ชั่นที่อ่อนโยนฉันตรวจสอบซ้ำแล้วซ้ำอีกและไม่มีอะไรมากไปกว่าพีชคณิตพื้นฐานและทฤษฎีกราฟในนั้น


learnyousomeerlang.comเป็นตัวเลือกเช่นกันหากคุณต้องการสิ่งอื่นนอกเหนือจาก Haskell
เทรวิส

11

มีเหตุผลมากมายและพวกมันเกี่ยวข้องกันทั้งหมด:

  • ภาษาโปรแกรมการทำงานส่วนใหญ่ได้รับการพัฒนาในบริบททางวิชาการที่ CS มีการเชื่อมโยงอย่างใกล้ชิดกับคณิตศาสตร์ดังนั้นผู้ที่ออกแบบพวกเขามีพื้นฐานทางคณิตศาสตร์ที่แข็งแกร่ง (และมีแนวโน้มที่จะถือว่าเหมือนกันเกี่ยวกับผู้ชม)
  • ฟังก์ชั่นการเขียนโปรแกรมเป็นกระบวนทัศน์ที่เหมาะอย่างยิ่งในการแก้ปัญหาคณิตศาสตร์หนัก
  • ทฤษฎีที่อยู่เบื้องหลัง FP, แลมบ์ดาแคลคูลัส (โดยทั่วไปเป็นทฤษฎีที่เป็นนามธรรมของฟังก์ชั่น) เป็นสาขาวิชาคณิตศาสตร์และภาษา FP มักจะใช้แนวคิดและคำศัพท์จากแลมบ์ดาแคลคูลัส

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


3
+1 สำหรับการพัฒนาในสถาบันการศึกษา: ผู้ที่สร้างภาษาเชิงฟังก์ชันขึ้นอยู่กับคุณสมบัติทางคณิตศาสตร์ดังนั้นจึงรั่วไหล ...
Matthieu M.

@Matthieu M: การใช้ภาษาการเขียนโปรแกรมเกี่ยวกับคุณสมบัติทางคณิตศาสตร์ช่วยในการเขียนซอฟต์แวร์ที่ถูกต้องและลดเวลาในการพัฒนา ตัวอย่างเช่นฉันใช้เวลาในการดีบักรหัส Haskell น้อยกว่ารหัส C ++ ของฉัน การลดเวลาในการพัฒนา (และค่าใช้จ่าย) เป็นข้อได้เปรียบเชิงปฏิบัติอย่างมากซึ่งสามารถพิสูจน์ความพยายามในการเรียนรู้คณิตศาสตร์บางอย่าง ดังที่ tdammers ชี้ให้เห็นมีแนวคิดพิเศษบางอย่างที่จำเป็นต้องเรียนรู้ แต่หลังจากที่คุณเข้าใจแนวคิดหลักบางประการแล้ว FP ก็ใช้งานง่ายเหมือนกับการเขียนโปรแกรมที่จำเป็น
จอร์โจ

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

@ จอร์โจ: มีความแตกต่างระหว่าง "การรั่วไหลในภาษา" (อย่างใด) และ "การรั่วไหลในการกวดวิชา" ฉันค่อนข้างมั่นใจว่าคุณสามารถเขียนการสอนการเขียนโปรแกรมใช้งานได้โดยไม่ต้องใช้คณิตศาสตร์ในนั้น แน่นอนว่าพวกเขาจะดีขึ้นหรือไม่ขึ้นอยู่กับการถกเถียงและอาจเป็นอัตนัย
Matthieu M.

@ MatthieuM: ขอบคุณมากสำหรับความกระจ่างในสิ่งที่คุณหมายถึงโดยการรั่วไหล (รั่วไหลในการกวดวิชา): ความคิดเห็นของคุณทำให้รู้สึกมากขึ้นกับฉันตอนนี้ ฉันเห็นด้วยกับคุณว่าการสอนเกี่ยวกับ FP ควรมีคณิตศาสตร์น้อยที่สุด ฉันตีความความคิดเห็นของคุณอย่างผิด ๆ : การทำงานทั้งในอุตสาหกรรมและในสถาบันการศึกษาฉันค่อนข้างอ่อนไหวกับ "ในสถาบันการศึกษาพวกเขาทำคณิตศาสตร์จำนวนมากที่ไร้ประโยชน์ในโลกแห่งความคิดเห็น" +1 สำหรับความคิดเห็นและคำตอบของคุณ
Giorgio

5

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

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


4
พื้นฐานการคำนวณคือการรวมกันของตรรกะและเลขคณิต นี่ไม่ใช่คณิตศาสตร์ คุณไม่สามารถแสดงคำสั่งสาขาในสูตรทางคณิตศาสตร์ได้ดังนั้นจึงไม่สามารถใช้ในวิชาคณิตศาสตร์ได้ ฝูงชนการเขียนโปรแกรมการทำงานต้องการให้มันอยู่ในคณิตศาสตร์เพื่อให้พวกเขาพัฒนาภาษาโปรแกรมซึ่งทำตัวราวกับว่าไม่มีคำแนะนำสาขา
James Anderson

9
@James Anderson คุณกำลังบอกว่าตรรกะและคณิตศาสตร์ไม่ใช่คณิตศาสตร์ใช่ไหม และฉันเคยเห็นสูตรทางคณิตศาสตร์หลายตันซึ่งมีคำสั่งสาขา (มักแสดงในรูปแบบของการสลับเหมือน)
Peter Taylor

4
เลขคณิตเซตย่อยของคณิตศาสตร์ที่เกี่ยวข้องกับการคำนวณอย่างง่าย ลอจิกเป็นชุดคณิตศาสตร์ที่เป็นพื้นฐานของความคิดที่สมเหตุสมผล การเขียนโปรแกรมการทำงานโดยบังเอิญเป็นความคิดที่ดีมากในการแก้ปัญหาที่สามารถแสดงออกทางคณิตศาสตร์; มันไม่ร้อนมากเมื่อคุณพยายามทำตามกฎเกณฑ์โดยพลการเช่น GAP (วิธีปฏิบัติทางบัญชีที่ยอมรับโดยทั่วไป)
James Anderson

6
@ ian31 คุณจะนิยามคำว่า " พื้นฐาน " อย่างไร? คุณจะรู้ว่างานวิศวกรรมโยธายังขึ้นอยู่กับฟิสิกส์และคณิตศาสตร์ในขณะที่ในทางปฏิบัติก็คือทั้งหมดที่เกี่ยวกับการสร้างสิ่งที่สำหรับคนที่จะใช้และเพลิดเพลินกับ และก่อนที่จะเริ่มคิดเกี่ยวกับการเขียนโปรแกรมแก้ไขปัญหาที่เกิดขึ้นในโลกแห่งความเป็นจริงคุณต้อง แปลปัญหานั้นให้เป็นระเบียบคณิตศาสตร์ มันจะไม่ทำงานอย่างอื่น การเขียนโปรแกรมเป็นเรื่องเกี่ยวกับพิธีการ
SK-logic

6
@ ian31 ภาษาการเขียนโปรแกรมเป็น ระเบียบ พฤติกรรมของพวกเขาถูกกำหนดและคาดการณ์ได้อย่างเคร่งครัด ดังนั้นการเขียนโค้ดโมเดลเฉพาะใด ๆ (แม้ว่าจะคลุมเครือ) กำลังเปลี่ยนเป็นรูปแบบของการเรียงลำดับ คณิตศาสตร์ยังคงขยายตัวได้ดีในพื้นที่ที่คลุมเครือแม้จะมีการรับรู้ทั่วไปว่ามันถูกกักขังอยู่ในโลกที่ชัดเจนของรูปแบบที่เข้มงวดที่ชัดเจน
SK-logic

1

ฉันคิดว่า "The Little Schemer" เป็นการแนะนำที่ยอดเยี่ยมเกี่ยวกับการเขียนโปรแกรมฟังก์ชั่นการใช้งานและไม่ใช่คณิตศาสตร์ มันไม่ได้เข้ามาใน Monads ดังนั้นมันอาจจะพื้นฐานเกินไปสำหรับรสนิยมของคุณ แต่ทำมาจาก combinator Y จนจบ

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

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