เปลี่ยนวิธีคิดในการเตรียมการสำหรับการเขียนโปรแกรมการทำงาน


9

เมื่อเปลี่ยนเป็นรูปแบบการทำงานของการเขียนโปรแกรมหลังจากมาจากขั้นตอนและ OOP ฉันจำเป็นต้องรู้อะไรบ้างเกี่ยวกับ "วิธีคิดแบบใหม่นี้"

คุณจะเตรียมตัวสำหรับการดำน้ำในโลก FP และทำให้เป็นครั้งแรกได้อย่างไร

พื้นฐานในการเรียนรู้และการตั้งค่าตรงก่อนคืออะไร?


2
นี่มันกว้างเกินไป imho เพียงแค่เริ่มอ่าน! หนังสือและคู่มือส่วนใหญ่เกี่ยวกับการเขียนโปรแกรมการทำงานในปัจจุบันเริ่มต้นด้วยคำตอบสำหรับคำถามของคุณ
devmiles.com

ลองโพสต์คำถามหากคุณติดอยู่กับบางสิ่ง
Tom Squires

@ วลาดิเมียร์โวโลดิน: นั่นคงจะดี แต่ก็ไม่ได้บังคับสำหรับหนังสือทุกเล่ม คุณช่วยแนะนำคนดีได้บ้าง (ควรเป็นผู้ที่ไม่เชื่อเรื่องภาษา)
JohnDoDo

คุณจะได้ไม่ต้องดำน้ำ คุณสามารถลองแลมบ์ดานิพจน์ในภาษา OOP เช่น c # เพื่อทำให้การเปลี่ยนจาก OOP เป็น FP ราบรื่นขึ้น
TomCaps

4
ฉันคิดว่าคุณมีมันย้อนหลัง ลองใช้การเขียนโปรแกรมที่ใช้งานได้และวิธีคิดของคุณจะเปลี่ยนไป
วินไคลน์

คำตอบ:


10

รับสำเนาของ"โครงสร้างและการตีความของโปรแกรมคอมพิวเตอร์"และทำงานด้วยตัวคุณเองผ่านบทแรก "การสร้าง abstractions ด้วยขั้นตอน" การแนะนำการเขียนโปรแกรมฟังก์ชั่นที่ดีที่สุดที่ฉันเคยมี

แก้ไข: หากคุณต้องการสิ่งที่เปรียบเทียบเพิ่มเติมลอง"เจ็ดภาษาในเจ็ดสัปดาห์" (ข้อจำกัดความรับผิดชอบ: หนังสือเล่มนี้ยังอยู่ในรายการสิ่งที่ต้องทำของฉัน)


6

คุณจะต้องคิดอย่างเปิดเผยแทนขั้นตอน "ก่อนอื่นทำสิ่งนี้จากนั้นทำสิ่งนี้แล้วทำ ... " วิธีแก้ปัญหา การทำความเข้าใจกับการเรียกซ้ำอาจเป็นจุดเริ่มต้นที่ดีเนื่องจากเป็นจุดที่ดีระหว่างกระบวนการคิดและการประกาศ


4

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


3

FP ขึ้นอยู่กับแคลคูลัส lamdba คุณจำเป็นต้องรู้ มันเป็นจุดเริ่มต้นที่ดี ฟังก์ชั่นเป็นทุกอย่าง ไม่มีแนวคิดเรื่องสถานะ (แม้ว่าคุณจะปลอมแปลงได้ในระดับที่สูงกว่า)

ใน OOP

a = 1 a = a + 1

ได้รับการยอมรับ ไม่เช่นนั้นใน FP คุณไม่สามารถกำหนดตัวแปรให้เป็นค่าอื่นได้ หากคุณต้องการเรียนรู้ FP ในระยะยาวเรียนรู้ Haskell มันเป็นรุ่นที่บริสุทธิ์ที่สุดของ FP ที่นั่นและมันค่อนข้างซับซ้อนด้วย (ฉันเพิ่งเริ่มเรียนรู้มัน) แต่ก็ยังคุ้มค่าที่จะเรียนรู้

คำแนะนำเกี่ยวกับการเขียนโปรแกรมฟังก์ชั่นช่วยให้คุณมีภาพรวมระดับสูงว่า FP เกี่ยวกับอะไร

สองประการแม้ว่า

  1. หากคุณต้องการเรียนรู้ FP สำหรับงานแสดงว่ามีตำแหน่งงานว่างไม่มากเกินไป ขั้นตอนการปฏิบัติงานและ OOP ยังคงควบคุมตลาดงาน แต่ FP สามารถช่วยคุณได้มากในการค้นหาวิธีการใหม่ในการแก้ปัญหา
  2. คอมไพเลอร์ FP ไม่เร็วอย่างเห็นได้ชัด เนื่องจาก FP เกี่ยวข้องกับการแก้ปัญหามากขึ้นคุณจึงไม่สามารถคาดหวังความเร็ว C ได้ แต่คุณยังสามารถออกคำแนะนำให้คอมไพเลอร์ (ใน Haskell) เพื่อเร่งกระบวนการดำเนินการ การแลกเปลี่ยนคือคุณได้รับเวลามากที่จะมุ่งเน้นไปที่โปรแกรมในมือมากกว่าข้อบกพร่องดับเพลิง

8
"FP ขึ้นอยู่กับแคลคูลัส lamdba คุณจำเป็นต้องรู้" ไม่คุณทำไม่ได้ การรู้แคลคูลัสแลมบ์ดาไม่จำเป็นต้องเข้าใจการเขียนโปรแกรมเชิงฟังก์ชันมากกว่าการรู้ว่าเครื่องทัวริง (หรือชุดประกอบ) จำเป็นต้องเข้าใจการโปรแกรมแบบบังคับ
sepp2k

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

2
FP อย่างแน่นอนจะมีสถานะของมันเพียงว่ารัฐมักจะไม่เปลี่ยนรูป แต่ก็ไม่แน่ใจว่าฉันเห็นด้วยกับคำสั่งเกี่ยวกับคอมไพเลอร์ที่ช้า
jk

@jk แน่นอนว่าพวกเขามีสถานะ แต่ไม่ใช่ในทาง OO (รัฐสามารถรวมอยู่ในฟังก์ชั่นหรือเป็นรูปแบบการจับคู่และในรูปแบบที่ลึกซึ้งยิ่งขึ้น) และสถานะที่เปลี่ยนไม่ได้หมายความว่าคุณมีเพียงรัฐเดียว นั่นเป็นสาเหตุที่ฟังก์ชั่นควรคืนค่าเดิมเสมอ เกี่ยวกับคอมไพเลอร์ฉันไม่คิดว่าพวกเขาสามารถจับคู่ C / C ++ ในแง่ของความเร็วที่แท้จริงเนื่องจากคอมไพเลอร์จะดูแลขั้นตอนที่จำเป็นในการคำนวณผลลัพธ์แทนที่จะเป็นเราระบุคำสั่ง FP มีข้อได้เปรียบที่ใหญ่ที่สุดในการลดต้นทุนของนักพัฒนาและการคำนวณแบบขนานมากกว่าความเร็วของ CPU ที่บริสุทธิ์
Ubermensch

3

ฉันพยายามอย่างดีที่สุดเพื่อจำมนต์ต่อไปนี้:

Data in -> Transform Data -> Data out

หรือ

TransformData (Data In) -> Data Out


1
ควรเป็น TransformData (DataIn) -> DataOut
Ubermensch

:) ในฐานะ matra "Data In, Data Data, Data Out" ง่ายต่อการพูดว่า "TransformData, Open Bracket, Data In, Close Bracket, Data Out" ฉันล้อเล่นฉันเห็นด้วยกับคุณ
Darknight

มันเป็นแค่เพื่อนแสดงความคิดเห็นที่เป็นมิตร ขอบคุณสำหรับคำตอบ
Ubermensch

ฉันรู้ว่าฉันแค่ล้อเล่นกับคุณไม่มีความผิดที่เกิดขึ้นจริง ๆ แล้วฉันคิดว่าฉันจะอัปเดต matra ของฉัน
Darknight

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