บทนำเกี่ยวกับการเขียนโปรแกรมฟังก์ชั่น
การเขียนโปรแกรมที่ใช้งานได้ตั้งแต่เริ่มต้น
การอธิบายการเขียนโปรแกรมที่ใช้งานได้ตั้งแต่เริ่มต้นเข้าใจง่ายและใช้งานได้จริงจากมุมมองที่หลากหลาย! ~ จากทฤษฎีหมวดหมู่ไปสู่การก่อสร้าง FRP
? บทที่ 1? ภาพรวม
https://zenn.dev/ken_okabe/books/functional-programming-from-scratch-1/
นี่คือจุดเริ่มต้นของบทความ
แนะนำ "ภายนอก" ของการเขียนโปรแกรมที่ใช้งานได้
การเขียนโปรแกรมที่ใช้งานได้คืออะไร?
หัวข้อที่หลากหลายรวมถึงแนวโน้มในชุมชนการเขียนโปรแกรมล่าสุด CPU และการเขียนโปรแกรมที่จำเป็นประเภทในภาษาระบบ abstractions ในการเขียนโปรแกรมที่มีโครงสร้างการแนะนำภาษาการทำงานความสัมพันธ์ระหว่างคำศัพท์และคณิตศาสตร์ของการมุ่งเน้นเชิงวัตถุ
เริ่มต้นและตั้งค่าอย่างรวดเร็วสำหรับสภาพแวดล้อมการพัฒนา typeScript และ F#
https://zenn.dev/ken_okabe/books/functional-programming-from-scratch-1
แนะนำชิ้นส่วนที่สร้างโครงกระดูกสำหรับการเขียนโปรแกรมที่ใช้งานได้
ฟังก์ชั่นชั้นหนึ่ง, การแสดงออกของแลมบ์ดา, ฟังก์ชั่นลำดับที่สูงขึ้น, การเชื่อมต่อการทำงานแบบทวินาม, การสังเคราะห์ฟังก์ชั่น, monoid
หากไม่มีสิ่งนี้การเขียนโปรแกรมที่ใช้งานได้จะไม่เริ่มต้นดังนั้นจึงจำเป็นต้องมีการทำความเข้าใจ
https://zenn.dev/ken_okabe/books/functional-programming-from-scratch-2
เข้าสู่ทฤษฎีพื้นฐานของการเขียนโปรแกรมการทำงานอย่างลึกซึ้ง
เราจะพยายามให้คำอธิบายที่ง่ายต่อการอ้างถึงการอ้างถึงเอกสารที่รู้จักกันดีซึ่งมุ่งเน้นไปที่ผู้อ่านที่มีความสนใจเป็นพิเศษในทฤษฎีหมวดหมู่ซึ่งคิดว่าเป็นเรื่องยาก
ผู้อ่านที่ไม่สนใจไม่จำเป็นต้องบังคับตัวเองให้เข้าใจทุกอย่างและพวกเขาไม่รังเกียจที่จะข้ามมันไป
https://zenn.dev/ken_okabe/books/functional-programming-from-scratch-3
รวมถึงสรุปเนื้อหาและไดอะแกรมของทฤษฎี
แนะนำไปป์ไลน์/รายการ/ตัวเลือก/io/timeline/async monad
การใช้งาน monad เขียนรหัสเฉพาะโดยใช้ F# และ typeScript
ในที่สุดเรามุ่งมั่นที่จะสร้าง FRP ที่เรียบง่ายตั้งแต่เริ่มต้น
https://zenn.dev/ken_okabe/books/functional-programming-from-scratch-4
รหัสตัวอย่าง
https://zenn.dev/ken_okabe/books/functional-programming-from-scratch-5
สำหรับโปรแกรมเมอร์จำนวนมาก
นอกจากนี้
เพราะมันเป็นร่างกายของความรู้ในอาณาจักร
และเป็นเรื่องยากที่ "การรับรู้" ดังกล่าวได้อธิบายอย่างละเอียด
การเขียนโปรแกรมที่ใช้งานได้คืออะไร?
การรวม fiunction บริสุทธิ์
ฟังก์ชั่นบริสุทธิ์ต้องไม่มีผลข้างเคียง
"ตัวแปร" ไม่เปลี่ยนแปลง
มี ความโปร่งใสอ้างอิง (มาตรวจสอบแล้ว)
โดยทั่วไปนี่คือวิธีการระบุคำศัพท์ใหม่พร้อมกับคุณสมบัติและรายละเอียด
ทั้งหมดนี้เป็น กฎที่ค่อนข้างเข้มงวด และพวกเขาเป็นข้อกำหนดที่แน่นอนที่โปรแกรมเมอร์ไม่เคยตระหนักมาก่อนและพวกเขาเอาเสรีภาพในการเขียนโค้ดออกไปทำให้พวกเขารู้สึกว่า พวกเขาผูกมือและเท้าของโปรแกรมเมอร์
ธรรมชาติที่แท้จริงของแต่ละคำศัพท์คือ "มันคืออะไร?" ในความเป็นจริงผู้อ่านจะไม่ได้อธิบายอย่างถูกต้องจนกว่าจะถึงที่สุด
ทำไมต้องเป็นแนวคิด? ทำไมเราไม่ควรถูก จำกัด ? - ตั้งแต่ คำว่า "นั่นคืออะไรจริง ๆ " ไม่ได้ประมวลผลอย่างถูกต้องมันมักจะถูกผลักไปพร้อมกับรหัสใหม่รวมถึง "คุณสามารถเขียนรหัสที่สวยงามเช่นนี้" หรือ "คุณรู้สึกถึงประโยชน์ใด ๆ หรือไม่?"
ในความเป็นจริงข้อกำหนดและแนวคิดใหม่เหล่านี้มี ความคล้ายคลึงกันที่เรียบง่ายและมั่นคง และมีแนวคิดพื้นฐานที่คุณควรระวังและคุณต้องอธิบายอย่างละเอียดก่อน
นี่เป็นกระบวนการที่ยอดเยี่ยมของ "การรับรู้" และในความเป็นจริง "การรับรู้" คือ การสำรวจทางปัญญาและการผจญภัย และเป็นสิ่งที่น่าสนใจมาก
อย่างไรก็ตามเนื่องจากเป้าหมายหลักของคำอธิบายคือการครอบคลุมคุณสมบัติที่ระบุไว้เหล่านี้และเชื่อมโยงแต่ละอันด้วยคำอธิบายที่น่าสนใจจึงเป็นทัศนคติที่ต่อต้านการพัฒนาดังนั้น "การรับรู้" ที่สำคัญที่สุดนี้สามารถสัมผัสได้ง่ายหรือไม่สนใจเป็นโบนัส
คนที่อธิบายเรื่องราวอาจ "ไม่เข้าใจจริง ๆ " (ฉันคิดว่านี่เป็นหลายกรณี) หรือสำหรับผู้ที่รู้ แต่ได้เชี่ยวชาญแล้วมันเป็นเรื่องยุ่งยากที่จะอธิบายอย่างใจดีดังนั้นมันง่ายที่จะพูดว่า "ฉันพูดอย่างนั้นใช่มั้ย"
แน่นอนฉันไม่รู้คำอธิบายทั้งหมด แต่ฉันคิดว่าคำอธิบายส่วนใหญ่ล้มเหลวด้วยเหตุผลนี้
สำหรับบางคนโลกก็ รู้ | unknowns ~ "สิ่งที่ฉันรู้" และ "สิ่งที่ฉันไม่รู้"
แน่นอนว่ามี "สิ่งที่คุณไม่รู้จัก" มากขึ้นอย่างท่วมท้นในโลกและเป็นไปไม่ได้ที่จะใช้อัตราส่วนของกราฟนี้ดังนั้นขนาดของ "สิ่งที่คุณรู้" ค่อนข้างเกินจริงสำหรับคำอธิบาย
การกระทำของการขยายพื้นที่ของ "การรู้สิ่งต่าง ๆ " ของที่รู้จัก คือ การได้มาซึ่งความรู้ ราวกับว่าค่อยๆเปลี่ยนพื้นที่ที่ ไม่รู้จัก "รู้สิ่งต่าง ๆ "
ตัวอย่างเช่นหากเรา จำกัด ตัวเองไว้ในฟิลด์ของการเขียนโปรแกรมและมัน
ฉันต้องการเรียนรู้ภาษาการเขียนโปรแกรม สนิม !
ฉันต้องการที่จะสามารถควบคุม Unreal Engine 5 !
ฉันต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับเทคนิคการปฏิบัติของ Docker !
มันจะเป็นเช่นนั้น
Rust, Unreal Engine 5, Docker และอื่น ๆ เป็น เทคโนโลยี "ที่รู้จักกันดี" ที่รู้จักกันดีซึ่งมีชื่อเสียง ในการเขียนโปรแกรมและโลกไอที
"ที่รู้จักกันดี" ที่มีชื่อเสียง ที่นี่ไม่ได้หมายความว่าทุกคนเป็นที่รู้จักกันดีเป็นที่รู้จักกันดีหรือคุ้นเคยกับเทคโนโลยี แต่เป็นชื่อของพวกเขาที่รู้จักกันดีเป็นที่รู้จักหรือเป็นที่รู้จักกันดี
กล่าวอีกนัยหนึ่งไม่ว่าคุณจะรู้เนื้อหาของเทคโนโลยีหรือไม่ก็มี พื้นที่ที่ไม่รู้จักซึ่งไม่เป็นที่รู้จักกันดีโดยทั่วไป ไม่ทราบพื้นที่ที่ไม่รู้จักซึ่งไม่เป็นที่รู้จัก
"ส่วน" ของการเขียนโปรแกรมที่ใช้งานได้ไม่ใช่เทคโนโลยีที่เป็นที่รู้จักกันดีในที่สาธารณะเช่น Rust และ Docker
เพื่อเรียนรู้การเขียนโปรแกรมการทำงาน
unkown (ไม่ได้รับรู้)
เป็นที่รู้จัก
กระบวนการ = การรับรู้ มีความสำคัญมากกว่าสิ่งใด
อย่างไรก็ตาม คำอธิบายการเขียนโปรแกรมที่ใช้งานได้หลายอย่างที่มีอยู่มากมายในถนน พยายามอธิบายแนวคิดใหม่ที่จำเป็นสำหรับการเขียนโปรแกรมที่ใช้งานได้ซึ่งอาจไม่เป็นที่รู้จักสำหรับผู้อ่านและไม่ทราบว่าเป็นที่รู้จักและเป็นที่รู้จักกันดีอยู่แล้ว
วิธีนี้ไม่ทำงาน
ผลที่ได้
"การเขียนโปรแกรมที่ใช้งานได้มีความรู้ว่ามันเป็นฟังก์ชั่นที่บริสุทธิ์"
"ฟังก์ชั่นบริสุทธิ์เป็นข้อมูลอ้างอิงที่โปร่งใส"
"ฟังก์ชั่นบริสุทธิ์ไม่ทำให้เกิดผลข้างเคียง"
นี่เป็นสถานะที่เหลือเชื่อที่คำอธิบายที่เข้าใจยากอย่างสมบูรณ์อยู่ในโหมดปกติซึ่งแนวคิดที่ไม่คุ้นเคยพยายามอธิบายบางสิ่งที่ไม่รู้จักด้วยแนวคิดที่ไม่คุ้นเคยอื่นหรือเกี่ยวข้องกับการรวบรวมบางสิ่งบางอย่างในอากาศโดยไม่มีรากฐาน
หรือในกรณีที่คุณตระหนักว่ามันไม่ดีคุณสามารถเริ่มต้นตัวอย่างที่ค่อนข้างผิดปกติและเขียนโค้ดตัวอย่างเพื่อพยายามโน้มน้าวผู้อ่าน
โดยทั่วไปตัวเลือกทั้งสองนี้เป็นบรรทัดล่างและธรรมชาติที่แท้จริงของแนวคิดพื้นฐาน "การรับรู้" ไม่ได้กล่าวถึงและไม่เคยอธิบายในลักษณะที่ทำให้ผู้อ่านรับรู้ถึงผู้อ่านที่สำคัญ
อธิบายคำอื่นที่ไม่รู้จักด้วยคำพูดที่คุณไม่รู้←ไม่ใช่เพื่อการสนทนา
การแสดงรหัสตัวอย่างสำหรับกรณีเอกพจน์การสร้างแนวคิดที่ไม่รู้จักในใจของผู้อ่าน←มีอัจฉริยะใด ๆ ที่สามารถทำได้
นอกจากนี้ยังมี "เทคนิคการจับคู่ระหว่างสอง"
นี่คือรูปแบบ ที่คุณเขียนโค้ดสำหรับ Haskell ภาษาที่ใช้งานได้และเรียกมันว่า "บทนำสู่การเขียนโปรแกรมที่ใช้งานได้หรือ" ทฤษฎีภาค "
การอธิบายแนวคิดใหม่ของการเขียนโปรแกรมที่ใช้งานได้ด้วยข้อกำหนดภาษาที่ไม่รู้จักสำหรับ Haskell
เราแสดงโค้ดตัวอย่างสำหรับ Haskell ภาษาที่ไม่รู้จักซึ่งสร้างแนวคิดที่ไม่รู้จักของการเขียนโปรแกรมการทำงานและทฤษฎีหมวดหมู่ในใจของผู้อ่าน
"การจับคู่ทั้งสอง" นี้แน่นอนว่าน่าอึดอัดใจ แต่จริง ๆ แล้วมีสถานการณ์ปัจจุบันที่รุนแรงในโลกการเขียนโปรแกรมซึ่งผู้คนที่เข้าใจมันอย่างน้อยผู้ที่สามารถเขียนรหัสของ Haskell เองกำลังทำซ้ำแนวทางเดียวกับที่พวกเขาต้องเข้าใจ
ไม่ทราบ: ความรู้ "ไม่ทราบ"
รู้: "สิ่งที่ฉันรู้"
unknowns "สิ่งที่ฉันไม่รู้"
มีทั้งคู่
เพื่อชี้แจงสิ่งนี้มันเป็นเพียงเรื่องของแผนภาพการจำแนกประเภทแนวคิด แต่ก็เป็นไปได้ที่จะเขียนกราฟใหม่
อย่างแรกครึ่งล่างมักจะสังเกตเห็นพื้นที่รู้จักที่รู้จักกันดี
อีกครั้งวิธีการนี้ใช้งานได้หากเป้าหมายที่คุณต้องการเรียนรู้นั้นเป็นเทคโนโลยีที่รู้จักกันดีสนิมเครื่องยนต์ที่ไม่จริงหรือนักเทียบท่า
อย่างไรก็ตามวิธีการนี้ไม่ทำงานในการเขียนโปรแกรมที่ใช้งานได้
ก่อนอื่นมันเป็นสิ่งสำคัญมากที่จะ ยืนยันว่ารู้ว่ารู้ว่า "ตระหนักถึงสิ่งที่คุณรู้"
ตัวอย่างเช่น ทุกคนควร "คุ้นเคยกับ" "เพิ่มเติม", "การลบ", "การคูณ" และ "การแบ่ง" ที่พวกเขาเรียนรู้ในตอนแรกในคณิตศาสตร์ของโรงเรียนประถม
หนังสือเล่มนี้เริ่มต้นที่ระดับนี้จริง ๆ และได้รับการออกแบบในลักษณะที่วางแผนไว้มากกว่านโยบายข้างต้น
ในที่สุดการเรียนรู้หมายถึงการขยายความรู้ของคุณตามสิ่งที่คุณรู้อยู่แล้ว
สิ่งที่คุณรู้อยู่แล้วคืออะไรเช่นนี้เมื่อคุณดูการเขียนโปรแกรมที่ใช้งานได้
Unkown รู้ว่า: "ฉันไม่รู้สิ่งที่ฉันรู้"
รู้จักกันดีว่า: "ฉันรู้ว่าฉันรู้อะไร"
นี่เป็นกระบวนการของ "การแจ้งเตือน" และไม่ต้องการงานใหม่ในการซื้อ "สิ่ง" ใหม่จากสิ่งที่ไม่รู้จักจนถึงตอนนี้ทำให้ง่ายและราบรื่น
กล่าวอีกนัยหนึ่งทุกคนที่จบการศึกษาจากโรงเรียนประถมศึกษามี "รู้ดีมาก" "เพิ่มเติม" "การลบ" "การคูณ" และ "การแบ่ง" เป็นความรู้ที่แข็งแกร่งสำหรับบุคคลนั้นและไม่จำเป็นต้องทำซ้ำการเจาะคณิตศาสตร์
นี่เป็นสินทรัพย์ทางปัญญาที่ยอดเยี่ยมที่บุคคลนั้นได้ทำงานอย่างหนักเพื่อให้ได้มาในโรงเรียนประถม
อย่างไรก็ตาม "โครงสร้างพีชคณิต" นี้เรียกว่า "เลขคณิตที่สี่" นำไปสู่การเขียนโปรแกรมและแนวคิดที่เรียกว่า Monads อย่างไร คนส่วนใหญ่ไม่รู้พวกเขาไม่รู้จัก
เมื่อคุณมี "การรับรู้" ทรัพย์สินทางปัญญาที่หายากนี้เรียกว่า "เลขคณิตรวม" สามารถใช้งานได้ทั้งหมดเหมือนเป็นความรู้ของการเขียนโปรแกรมที่ใช้งานได้
ดังนั้น จึงเป็นเรื่องที่น่ารังเกียจที่จะแจ้งแจ้งสอนหรืออธิบาย "การรับรู้" นี้; มันเป็นความประมาทเลินเล่อของผู้อธิบายหรือเพียงแค่คำอธิบาย แต่ในความเป็นจริงกรณีหลังเป็นเรื่องธรรมดามาก
หนังสือเล่มนี้เป็นความพยายามอย่างละเอียดเกี่ยวกับงานนี้
หากคุณ "ไม่รู้" สิ่งนี้ก็คุ้มค่าที่จะอ่านหนังสือเล่มนี้ด้วยตัวเอง
ขั้นตอนต่อไปจะมุ่งเน้นไปที่ "ฉันไม่ทราบสิ่งที่ฉันรู้" และเข้าสู่พื้นที่ของ Unknown Unknown ของ Unknown "ฉันไม่ได้ตระหนักถึงสิ่งที่ฉันไม่รู้"
ซึ่ง รวมถึงตัวอย่างเช่นมุมมองทางฟิสิกส์เชิงทฤษฎีของ [การไหลของเวลา]
หนังสือที่รู้จักกันดีที่แนะนำ "การจัดการเวลา" ในการเขียนโปรแกรมการทำงานจากมุมมองทางฟิสิกส์เชิงทฤษฎีคือ "โครงสร้างและการตีความของโปรแกรมคอมพิวเตอร์" ซึ่งมักใช้เป็นตัวย่อของ SICP ในชื่อเดิม
โครงสร้างและการตีความโปรแกรมคอมพิวเตอร์ปกแข็ง - 2000/2/1 Gerald Jay Sussman (ผู้แต่ง), Julie Sussman (ผู้แต่ง), Harold Ableson (ผู้แต่ง), & 4 เพิ่มเติม
เป็น
สำหรับ มุมมองทางฟิสิกส์เชิงทฤษฎีของ "การจัดการเวลา" ในการเขียนโปรแกรมที่ใช้งานได้ อย่างน้อยฉัน ก็จำไม่ได้ว่าเห็นคำอธิบายเพียงครั้งเดียวยกเว้น SICP ดังนั้นฉันคิดว่ามันเป็นธีมสำคัญที่ประชาชนละเลย
หนังสือเล่มนี้เป็นความพยายามอย่างละเอียดเกี่ยวกับงานนี้
หากคุณ "ไม่รู้" สิ่งนี้ก็คุ้มค่าที่จะอ่านหนังสือเล่มนี้ด้วยตัวเอง
ในการเขียนหนังสือเล่มนี้ฉันพัฒนาและใช้ตัวแก้ไข WYSIWYG ของตัวเอง (ส่วนขยายของ VSCODE) เพื่อวางรูปภาพจำนวนมากและเขียน markdown อย่างมีประสิทธิภาพ
Markdownnote