มีวิธีปฏิบัติที่ดีอะไรบ้างเมื่อพยายามสอนการเขียนโปรแกรมแบบเปิดเผยให้แก่โปรแกรมเมอร์ที่มีความจำเป็น


13

ฉันเสนอให้ทำการฝึกอบรมเล็กน้อยใน F # ที่ บริษัท ของฉันและพวกเขาดูเหมือนจะแสดงความสนใจ พวกเขามักจะเป็นโปรแกรมเมอร์ VB6 และ C # ที่ไม่ปฏิบัติตามการเขียนโปรแกรมด้วยความหลงใหลมากเกินไป ที่ถูกกล่าวว่าฉันรู้สึกว่ามันง่ายกว่าที่จะเขียนรหัสที่ถูกต้องเมื่อคุณคิดในเรื่องการทำงานเพื่อให้พวกเขาควรได้รับประโยชน์จากมันแน่นอน

ใครบ้างที่สามารถให้คำแนะนำเกี่ยวกับวิธีที่ฉันควรเข้าหานี้

ไอเดีย

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

การเขียนโปรแกรม F # และการประกาศ ?????
P Shved

@Pavel - นั่นเป็นคำถามหรือไม่?
ChaosPandion

3
@Pavel - ตกลงสนใจที่จะอธิบายว่าทำไมคุณจึงออกแถลงการณ์? นี่เป็นครั้งที่สองที่คุณแสดงความคิดเห็นที่คลุมเครือมาก มันหยาบคายมาก
ChaosPandion

3
en.wikipedia.org/wiki/Declarative_programmingการเขียนโปรแกรมตามหน้าที่เป็นประเภทของการโปรแกรมเชิงประกาศ นอกจากนี้ +1 คำถามที่ดี
หมายเหตุถึงตัวเอง - คิดชื่อ

2
@Chaos ในความคิดของฉัน F # ไม่สนับสนุนกระบวนทัศน์การเขียนโปรแกรมที่เปิดเผย การประเมินความกระตือรือร้นและคุณสมบัติที่จำเป็นทำให้ภาษาเป็นเพียงรูปแบบที่ใช้งานได้สะดวกซึ่งแสดงถึงคำสั่งที่จำเป็นเช่นเดียวกับที่คุณใช้ในการพูด C # มาเลยmakeมีภาษาที่เปิดเผยมากกว่า F # หรือ Caml! (แดกดันสิ่งนี้ทำให้งานของคุณง่ายขึ้น)
P Shved

คำตอบ:


5

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

ตอนนี้สำหรับการฝึกอบรมจริงมากขึ้น: ฉันพบว่าสองแนวคิดจริงๆคลิกฟังก์ชั่นการเขียนโปรแกรมเป็นสไตล์สำหรับฉัน

ก่อนสไตล์ FP จะขึ้นอยู่กับโครงสร้างของข้อมูลไม่ใช่องค์ประกอบเช่นเดียวกับใน OOP ฉันดูบางอย่างเช่น List in C # ว่าเป็นเคล็ดลับที่ชาญฉลาดในการสร้างรายการแบบปลอดภัยซึ่งเป็นสิ่งที่ประกอบประเภท (สตริง) เป็นประเภทอื่น (รายการ) หลังจากเรียนรู้ FP ฉันมองดูข้อมูลทั่วไปมากขึ้นเช่น Monads ตอนนี้ รายการเป็นรูปแบบที่มีโครงสร้างที่รหัสสามารถใช้และมันประดับสตริง

ข้อสองและอาจมีประโยชน์มากกว่าสำหรับโปรแกรมเมอร์ C # / ASP คือแนวคิดที่ว่า FP ทำงานในการเรียกซ้ำและทำซ้ำในขณะที่ OOP ทำงานกับความผันแปรและการวนซ้ำ ฉันมักจะคิดว่าวงจรชีวิตของหน้า ASP เป็นประเภทของ FP ในขณะนี้: แต่ละคำขอจะถูกประมวลผลตั้งแต่เริ่มต้นไปจนถึงวงจรชีวิตทั้งหมดดังนั้นทั้งหน้าจึงเป็นผลหนึ่งโปรแกรมที่ใหญ่ช้าซ้ำแล้วซ้ำอีก หากคุณสามารถทำให้ความคิดนั้นแคบลงคุณจะได้รับแนวคิดที่ดีขึ้นว่าโปรแกรมที่จำเป็นสามารถจัดโครงสร้างรอบฟังก์ชันที่ใช้ในข้อมูลดำเนินการกับมันและส่งคืนข้อมูลใหม่แทนที่จะแก้ไขแบบเก่า

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



1

ภาษาการเขียนโปรแกรมที่จำเป็นหลายอย่าง (Ada, C / C ++, Turbo Pascal, FoxPro) มีความสามารถในการกำหนดตัวชี้ไปยังฟังก์ชันหรือตัวอักษรชื่อกระบวนงานที่สามารถประเมินได้ (และขั้นตอนการตั้งชื่อ

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

เมื่อจมแล้วคุณสามารถเริ่มเจาะลึกลงไปในสิ่งอื่น ๆ (เปลี่ยนไม่ได้ไม่แบ่งอะไร ฯลฯ )


การแก้ไข: สิ่งที่ฉันหมายถึงคือการสร้างบนความคิดที่คุณสามารถกำหนดอัลกอริทึม parametrized ที่สามารถใช้อัลกอริทึม OTHER เป็นพารามิเตอร์และดำเนินการกับโครงสร้างข้อมูล
luis.espinal

1

ใครบ้างที่สามารถให้คำแนะนำเกี่ยวกับวิธีที่ฉันควรเข้าหานี้

แน่นอนว่า:

  • เลือกตัวอย่างของคุณอย่างระมัดระวังเพื่อให้โค้ด F # ของคุณไม่เพียง แต่แก้ปัญหาอย่างหรูหรา แต่ยังสวยงามกว่า C # / VBด้วย การจับคู่รูปแบบและการอนุมานประเภทเป็นเพื่อนของคุณที่นี่

  • ใช้ตัวอย่างหนึ่งเพื่อเน้นประโยชน์ของฟีเจอร์ใหม่ที่พบใน F # เช่นเวิร์กโฟลว์แบบอะซิงโครนัสรูปแบบที่ใช้งานอยู่

  • อย่ากลัวที่จะให้ตัวอย่างที่ไม่บริสุทธิ์โดยใช้โครงสร้างข้อมูลที่ไม่แน่นอนเมื่อเหมาะสม F # ไม่บริสุทธิ์ด้วยเหตุผล

  • อย่าแสดง F # เป็นยาครอบจักรวาล อธิบายแอพพลิเคชั่นที่ F # ไม่เหมาะสมเช่นเดียวกับแอพพลิเคชั่นที่เหมาะสมกว่าภาษา. NET อื่น ๆ

  • ชี้ไปที่ตัวอย่างของเล่นที่พวกเขาสามารถศึกษาได้เช่นเดียวกับโครงการในโลกแห่งความสำเร็จที่ใช้ F # (Bing AdCenter, Halo 3 เป็นต้น)

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

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