ทำไมต้องใช้ภาษา [ปิด]


332

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


จอห์นฮิวจ์สได้เขียนกระดาษเกี่ยวกับเรื่องนี้: ทำไมเรื่องหน้าที่ Programming
Hjulle

คำตอบ:


214

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

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

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

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


14
คุณสามารถเขียนโปรแกรมใช้งานได้ในหลาม แต่มันแย่จริงๆ stackoverflow.com/questions/1017621/…
Gordon Gustafson

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

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

202

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

อย่างไรก็ตามภาษาที่บังคับใช้รูปแบบการใช้งานได้รับหมึกเสมือนจริงจำนวนมากในปัจจุบันและว่าภาษาเหล่านั้นจะโดดเด่นในอนาคตหรือไม่เป็นคำถามเปิด ความสงสัยของฉันเองคือภาษาแบบผสมผสานหลายกระบวนทัศน์เช่นScalaหรือOCaml น่าจะมีอิทธิพลเหนือภาษาที่ใช้ภาษา "พิถีพิถัน" ในลักษณะเดียวกับภาษา OO บริสุทธิ์ (Smalltalk, Beta เป็นต้น) ที่มีอิทธิพลต่อการเขียนโปรแกรมกระแสหลัก แต่ยังไม่สิ้นสุด เป็นสัญลักษณ์ที่ใช้กันอย่างแพร่หลายมากที่สุด

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

  • โปรแกรมเมอร์ "ธรรมดา" IMHO) ไม่เข้าใจ
  • มันไม่ได้สอนอย่างกว้างขวาง
  • โปรแกรมใด ๆ ที่คุณสามารถเขียนด้วยมันสามารถเขียนอีกวิธีด้วยเทคนิคปัจจุบัน

เช่นเดียวกับอินเทอร์เฟซผู้ใช้แบบกราฟิกและ "รหัสเป็นแบบจำลองของธุรกิจ" เป็นแนวคิดที่ช่วยให้ OO กลายเป็นที่นิยมมากขึ้นผมเชื่อว่าการใช้งานที่เพิ่มขึ้นของ immutability และการขนานที่เรียบง่าย (ขนาดใหญ่) จะช่วยให้โปรแกรมเมอร์เห็นประโยชน์เพิ่มเติม . แต่เท่าที่เราได้เรียนรู้ในช่วง 50 ปีที่ผ่านมาซึ่งประกอบไปด้วยประวัติศาสตร์ทั้งหมดของการเขียนโปรแกรมคอมพิวเตอร์ดิจิตอลฉันคิดว่าเรายังมีอีกมากที่จะเรียนรู้ ยี่สิบปีต่อจากนี้โปรแกรมเมอร์จะหันกลับมามองด้วยความประหลาดใจกับธรรมชาติดั้งเดิมของเครื่องมือที่เราใช้อยู่ในปัจจุบันรวมถึงภาษา OO และ FP ที่ได้รับความนิยมในปัจจุบัน


55
แค่มองย้อนหลังไป 20 ปี ฉันไม่ได้เขียนโปรแกรมสิ่งที่มีการพัฒนามาก มีเครื่องมือที่ดีกว่าอาจจะเป็นภาษาใหม่หรือ 2 แต่โดยพื้นฐานแล้วจะไม่เปลี่ยนแปลงมากนัก ใช้เวลานานกว่า 20 ปี เราทุกคนเคยคิดว่าเราจะได้เห็นการบินรถยนต์ในปี 2000 :)
bibac

32
O'Caml เป็นชาวไอริชแม้ว่า
defmeta

7
@alex แปลก: "ชอบเปลี่ยนแปลงไม่ได้" และ "หลีกเลี่ยงผลข้างเคียง" เป็นกฎที่ดีอย่างหนึ่งในโรงเรียนสอนโปรแกรมเชิงวัตถุและเชิงบังคับ (ดังนั้นสิ่งที่ไม่เหมือน ;-)?
joel.neely

101
@bibac: 20 ปีที่แล้วเราเขียนรหัส C และพูดคุยถึงข้อดีของ Clipper หรือ Turbo Pascal การวางแนววัตถุเป็นขอบเขตของนักวิชาการ แต่เพียงผู้เดียว เพื่อเสนอว่ามีการเปลี่ยนแปลงเล็กน้อยเป็นเรื่องไร้สาระอย่างจริงจัง
Daniel C. Sobral

24
@Daniel: โปรดระบุรายชื่อบุคคลเหล่านี้ที่แย้งกับ "ข้อดี" ของ Clipper พวกเขาต้องถูกตามล่าและนำตัวเข้าสู่กระบวนการยุติธรรม
David

125

ข้อดีหลักสำหรับฉันคือความขนานโดยธรรมชาติโดยเฉพาะอย่างยิ่งขณะที่เรากำลังเคลื่อนห่างจาก MHz มากขึ้นและไปสู่แกนหลักมากขึ้นเรื่อย ๆ

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


4
เราได้เห็นสิ่งนี้เกิดขึ้นแล้ว และจะเกิดขึ้นในอนาคต ดังนั้นฉันเห็นด้วย 100% ในจุดนี้
เจสันเบเกอร์

สิ่งที่ยุ่งยากคือมันไม่มีส่วนร่วม / ไม่มีผลข้างเคียงของ FP ที่ทำให้มันเหมาะสำหรับการขนาน และผู้ที่มีแง่มุมที่ไม่ได้นั่งรวมกับโซลูชั่น OO - ทำให้ลูกผสมที่มีประสิทธิภาพเป็นอย่างมากยาก บางที FP กาวระหว่างโหนด OO?
James Brady

สำหรับลูกผสมที่มีประสิทธิภาพต้องดูที่สาขา 2.0 ของภาษาการเขียนโปรแกรม D มันเป็นอัลฟา / กำลังดำเนินการอยู่ แต่กำลังไปถึงที่นั่น
dsimcha

2
ฉันพบว่าคำตอบนี้น่าสนใจฉันไม่รู้จักภาษาที่ใช้งานได้ทำไมพวกเขาถึงคิดว่าเหมาะสมกว่าสำหรับการขนาน
andandandand

26
เนื่องจากไม่มีข้อมูลที่ใช้ร่วมกันฟังก์ชั่นจึงไม่มีผลข้างเคียง สิ่งที่คุณใส่ใจคือผลตอบแทน (นี่เป็นความคิดที่ค่อนข้างยากสำหรับโปรแกรมเมอร์ OO / โพรเซสซิงเพื่อให้ได้เฮดเซ็ท) ดังนั้นจึงสามารถเรียกใช้ฟังก์ชั่นได้พร้อมกันหลายครั้งตราบใดที่เอาต์พุตจากสิ่งหนึ่งไม่ได้ถูกใช้เป็นอินพุตไปยังอีก
Tom Smith

79

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

ฉันบอกว่าไม่มีเหตุผลที่จะไม่เรียนรู้มัน

ฉันคิดว่าภาษาที่ทำงานได้ดีในการผสมผสานการทำงานและสไตล์ที่จำเป็นนั้นน่าสนใจที่สุดและน่าจะประสบความสำเร็จมากที่สุด


จุดดี แต่ฉันต้องการที่จะเห็นคำอธิบายของ "ในสิ่งที่มันจะทำให้คุณเป็นนักพัฒนาที่ดีกว่า"
mt3

20
กระบวนทัศน์การเขียนโปรแกรมที่แตกต่างกันเข้าหาปัญหาจากมุมที่แตกต่างและมักจะต้องมี "วิธีคิดที่แตกต่าง" หรือความคิด และฝึกฝนตัวเองด้วยวิธีการคิดต่าง ๆ ที่หลากหลาย (การเรียนรู้ที่จะใช้ในสถานการณ์ที่ ... ) ไม่ใช่สิ่งเลวร้าย
peSHIr

56

ฉันมักจะสงสัยเกี่ยวกับสิ่งที่ยิ่งใหญ่ต่อไป หลายต่อหลายครั้งเรื่องใหญ่ครั้งต่อไปเป็นอุบัติเหตุที่บริสุทธิ์ของประวัติศาสตร์การอยู่ในสถานที่ที่ถูกต้องในเวลาที่เหมาะสมไม่ว่าเทคโนโลยีจะดีหรือไม่ก็ตาม ตัวอย่าง: C ++, Tcl / Tk, Perl เทคโนโลยีที่มีข้อบกพร่องทั้งหมดประสบความสำเร็จอย่างดุเดือดเพราะพวกเขาถูกรับรู้เพื่อแก้ไขปัญหาของวันนั้นหรือเกือบจะเหมือนกับมาตรฐานที่ยึดที่มั่นหรือทั้งสองอย่าง ฟังก์ชั่นการเขียนโปรแกรมอาจจะยอดเยี่ยม แต่ก็ไม่ได้หมายความว่ามันจะถูกนำมาใช้

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

ตั้งแต่ต้นปีพ. ศ. 2549 ก็ได้มีข่าวเกี่ยวกับการเขียนโปรแกรมการทำงานและการขนานกันบ้าง เนื่องจากผู้คนอย่างSimon Peyton Jonesกังวลเกี่ยวกับการขนานกันอย่างต่อเนื่องตั้งแต่อย่างน้อยปี 1984 ฉันจึงไม่กลั้นลมหายใจจนกว่าภาษาที่ใช้งานได้จะช่วยแก้ปัญหามัลติคอร์ได้ แต่มันจะอธิบายเรื่องปากต่อปากเพิ่มเติมบางอย่างเกี่ยวกับตอนนี้

โดยทั่วไปมหาวิทยาลัยในอเมริกากำลังทำงานด้านการสอนการเขียนโปรแกรมฟังก์ชั่นไม่ดี มีแกนกลางที่แข็งแกร่งของการสนับสนุนสำหรับการสอนการเขียนโปรแกรมแนะนำโดยใช้ Schemeและ Haskell ยังสนุกกับการสนับสนุนบางอย่างที่นั่น แต่ก็มีน้อยมากในการสอนเทคนิคขั้นสูงสำหรับโปรแกรมเมอร์ที่ใช้งานได้ ฉันได้สอนหลักสูตรที่ Harvard และจะทำเช่นนั้นอีกครั้งในฤดูใบไม้ผลินี้ที่ Tufts เบนจามินเพียร์ซสอนหลักสูตรนี้ที่เพนน์ ฉันไม่รู้ว่า Paul Hudak ทำสิ่งใดกับเยลหรือไม่ มหาวิทยาลัยในยุโรปกำลังทำผลงานได้ดีกว่ามาก ตัวอย่างเช่นการเขียนโปรแกรมการทำงานจะเน้นในสถานที่สำคัญในเดนมาร์ก, เนเธอร์แลนด์, สวีเดนและสหราชอาณาจักร ฉันมีความรู้สึกน้อยลงเกี่ยวกับสิ่งที่เกิดขึ้นในออสเตรเลีย


ฉันไม่รู้เกี่ยวกับมหาวิทยาลัยในสหราชอาณาจักร คุณมีแนวโน้มที่จะพบว่ามหาวิทยาลัยหลายแห่งที่นี่สอนภาษาการเขียนโปรแกรมน้อยมาก (Java, C, หรือ Perl ถ้าคุณโชคดี) ปัญหาตรงนี้คือความแตกต่างในด้านคุณภาพเนื่องจากมหาวิทยาลัยที่ดีที่สุด (น้อย) มีโปรแกรม CS ที่ดีที่สุด
Mike B

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

ฉันได้ Forth และ Lisp ที่ uni ในสหราชอาณาจักร (เช่นเดียวกับ Pascal, C, Modula2 และ Cobol) แต่นั่นก็เป็น 20 ปีที่ผ่านมา ..
kpollock

29
ฉันสอน Java / C ++ ที่ uni (ในออสเตรเลีย) แต่เพื่อนร่วมงานของฉันสองสามคนไปที่มหาวิทยาลัยหลายแห่งที่พวกเขาทำหลายหน่วยงานใน Haskell มันถูกใช้ทั้งในการแนะนำการเขียนโปรแกรมและหนึ่งในหน่วยสุดท้ายของปี ฉันหัวเราะเมื่อฉันได้ยินสิ่งที่เพื่อนร่วมงานของฉันพูดกับอาจารย์ผู้สอนภาษาจาวาหลังจากที่เขาได้รับการแนะนำให้รู้จักกับการคัดเลือกนักแสดงเป็นครั้งแรก (ณ จุดนี้เขาเพิ่งรู้จัก Haskell) - "อะไรนะ! ไม่ทราบว่ามันคืออะไรชนิด!
34432 Jacob Stanley

1
มองสิ่งที่เกิดขึ้นกับ C # กับทุกคนในยุโรปทีม :)
Benjol

32

ฉันไม่เห็นใครพูดถึงช้างในห้องที่นี่ดังนั้นฉันคิดว่ามันขึ้นอยู่กับฉัน :)

JavaScript เป็นภาษาที่ใช้งานได้ ในขณะที่ผู้คนจำนวนมากทำสิ่งที่ก้าวหน้ายิ่งขึ้นกับ JS โดยเฉพาะอย่างยิ่งการใช้ประโยชน์จากจุดที่ดีขึ้นของ jQuery, Dojo และกรอบงานอื่น ๆ FP จะได้รับการแนะนำโดยผู้พัฒนาเว็บ

ร่วมกับการปิด FP ทำให้โค้ด JS เบาจริง ๆ แต่ยังอ่านได้

ไชโยปล


2
นั่นคือวิธีที่ฉันเริ่มขุดโปรแกรมที่ใช้งานได้จริง ๆ ไม่มีอะไรดีไปกว่าลิสต์ของ Prototype.js แต่ละรายการ (ฟังก์ชั่น (รายการ) {}) หรือวิธีการดำเนินการทั้งหมดของ jQuery
Cory R. King

20
Javascript อนุญาตให้โปรแกรมหนึ่งทำงานในลักษณะที่ใช้งานได้ มันเป็น แต่เป็นภาษากระบวนทัศน์ข้ามทำให้หนึ่งในการเขียนโปรแกรมในความหลากหลายของวิธีการที่แตกต่างกัน (ซึ่งผมชอบ แต่ที่ไม่เกี่ยวข้อง) ... OO, การทำงาน, ขั้นตอน ฯลฯ
RHSeeger


วิธีการวัตถุ jQuery เป็นเพียงการดำเนินการในรายการ monad การรับออบเจ็กต์ที่แสดงถึงคอนเทนเนอร์ (หรือลำดับ) เป็นอินพุตและส่งคืนออบเจ็กต์ตามผลลัพธ์คือตัวอย่างที่ดีของการคิดค้น fmap ในทางปฏิบัติ
Jared Updike

25

แอปพลิเคชั่นส่วนใหญ่นั้นง่ายพอที่จะแก้ไขในวิธี OO ปกติ

  1. วิธี OO นั้นไม่ใช่ "ปกติ" เสมอไป มาตรฐานของทศวรรษนี้เป็นแนวคิดที่ถูกลดทอนลงของทศวรรษที่แล้ว

  2. ฟังก์ชั่นการเขียนโปรแกรมเป็นคณิตศาสตร์ Paul Graham บน Lisp (แทนที่การเขียนโปรแกรมใช้งานได้สำหรับ Lisp):

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


25

ฉันพนันได้เลยว่าคุณไม่รู้ว่าคุณใช้งานโปรแกรมเมื่อคุณใช้:

  • สูตร Excel
  • นักแต่งเพลงควอตซ์
  • JavaScript
  • โลโก้ (กราฟิกเต่า)
  • LINQ
  • SQL
  • Underscore.js (หรือ Lodash), D3

10
Javascript มีวิธีพิจารณาการเขียนโปรแกรมการทำงานอย่างไร
Pacerier

8
มันมีฟังก์ชั่นชั้นหนึ่งฟังก์ชั่นการสั่งซื้อที่สูงขึ้นปิดฟังก์ชั่นที่ไม่ระบุชื่อแอพลิเคชันบางส่วน, การ currying และองค์ประกอบ
daniel1426

2
ฮ่าฮ่า เมื่อเขียนสูตร Excel การชำระคืนโหลดที่กว้างกว่าหน้าจอที่มีฟังก์ชั่นที่ซ้อนกัน ฉันรู้แล้วว่าฉันกำลังเขียนโปรแกรมตามหน้าที่ แต่ยังไม่รู้ศัพท์
ProfK

7
กรุณาเพิ่ม C ลงในรายการนั้น
Mandeep Janjua

2
@MandeepJanjua: หือ? มาทำไม หรือทำไมไม่มีภาษาเลยล่ะ?
Sz.

18

โปรแกรมเมอร์ระดับองค์กรโดยเฉลี่ยเช่นคนส่วนใหญ่ที่ฉันทำงานด้วยจะไม่เข้าใจและสภาพแวดล้อมการทำงานส่วนใหญ่จะไม่อนุญาตให้คุณเขียนโปรแกรม

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

มันไม่ได้สอนที่มหาวิทยาลัยจริงๆ (หรือทุกวันนี้)

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

แอปพลิเคชั่นส่วนใหญ่นั้นง่ายพอที่จะแก้ไขในวิธี OO ปกติ

มันไม่ได้เป็นเรื่องของ "เรียบง่ายพอ" การแก้ปัญหาจะง่ายขึ้น (หรืออ่านได้ง่ายขึ้น, สง่างาม, หรูหรา, นักแสดง) ใน FP มีหลายสิ่งที่ "ง่ายพอที่จะแก้ไขใน Java" แต่ก็ยังต้องใช้รหัสจำนวนมหาศาล

ไม่ว่าในกรณีใดโปรดจำไว้ว่าผู้เสนอ FP ได้อ้างว่าเป็นสิ่งที่ยิ่งใหญ่ต่อไปมาหลายทศวรรษแล้ว บางทีพวกเขาอาจจะถูก แต่จำไว้ว่าพวกเขาไม่ได้เมื่อพวกเขาเรียกร้องเดียวกัน 5, 10 หรือ 15 ปีที่ผ่านมา

สิ่งหนึ่งที่แน่นอนข้อหาในความโปรดปรานของพวกเขา แต่เป็นว่าเมื่อเร็ว ๆ นี้, C # ได้ดำเนินการเปิดคมต่อ FP ในขอบเขตที่ว่ามันจริงเปลี่ยนรุ่นของโปรแกรมเมอร์โปรแกรมเมอร์เข้า FP ให้โดยที่พวกเขาไม่ได้สังเกตเห็น นั่นอาจเป็นการปูทางสำหรับการ "ปฏิวัติ" ของ FP อาจจะ. ;)


MIT เคยสอน Scheme ในหลักสูตร CS เบื้องต้น แต่ตอนนี้ใช้ Python แล้ว
mipadi

1
"15 ปีก่อนพวกเขาไม่เข้าใจ OOP" - ปัญหาคือเมื่อ 15 ปีก่อนพวกเขาไม่เข้าใจ FP เช่นกัน และพวกเขายังไม่ทำวันนี้
เจสันเบเกอร์

15

มนุษย์ไม่สามารถเข้าใจถึงความสมบูรณ์แบบและความไม่สมบูรณ์แบบของศิลปะที่เขาเลือกหากเขาไม่เห็นคุณค่าในศิลปะอื่น ๆ การปฏิบัติตามกฎจะอนุญาตให้พัฒนาได้จนถึงจุดหนึ่งในเทคนิคเท่านั้นจากนั้นนักเรียนและศิลปินจะต้องเรียนรู้เพิ่มเติมและค้นหาเพิ่มเติม มันสมเหตุสมผลที่จะศึกษาศิลปะอื่น ๆ รวมถึงกลยุทธ์

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

- Miyamoto Musashi "A Book of Five Rings"


12

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

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

Haskell ใช้วิธีการต่าง ๆ แทน IO: monads เหล่านี้เป็นวัตถุที่มีการดำเนินการ IO ที่ต้องการที่จะดำเนินการโดยระดับบนสุดของล่ามของคุณ ในระดับอื่น ๆ พวกเขาเป็นเพียงวัตถุในระบบ

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


12

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

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

มันทำให้คุณมีชีวิตที่ดีขึ้น


6
ฉันไม่คิดว่า OO นั้นง่ายกว่า FP มันขึ้นอยู่กับพื้นหลังของคุณ (ฉันเป็นนักคณิตศาสตร์เดาว่าฉันเจออะไรง่ายกว่านี้ :) ผู้คน OO และกฎที่บ้าของคุณ
temp2290

14
พระไม่ยากที่จะเข้าใจ อย่าซื้อวัวตัวผู้นั้น
เรน

-1 OOP นั้นยากกว่า FP
แค่บางคน

-1 เราจะไม่เขียนคอมไพเลอร์ออปติไมซ์โดยใช้ OCaml หรือ Haskell ถ้า FP เหมาะสำหรับปัญหาทางคณิตศาสตร์
gracchus

8

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


คำพูดดี +1 @Mendelt: "เข้าถึงได้มากกว่า" ใช่ไหม คุณหมายถึงปวดหัวเร็วขึ้นเมื่อคุณดูรหัสหรือไม่?
Patrick Honorez

2
ดู F # ห้องสมุดนี้: quanttec.com/fparsec/tutorial.html ฉันชอบที่จะเห็นโค้ดตัวอย่างใน C # โดยมีตัวแยกวิเคราะห์ที่ครึ่งหนึ่งดูสง่างามและสามารถอ่านได้เหมือนกับรหัส F # ถึงแม้ว่าพวกเขาจะรวบรวมคำแนะนำเดียวกัน และลองย้ายพอร์ต FParsec จาก F # ถึง C # และดูว่าโค้ดขยายตัวอย่างไร
Jared Updike

8

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

* The average corporate programmer, e.g. most of the people I work with, will not understand it and most work environments will not let you program in it
* It's not really taught at universities (or is it nowadays?)
* Most applications are simple enough to be solved in normal IMPERATIVE ways

การเปลี่ยนแปลงต้องมาจากที่ไหนสักแห่ง การเปลี่ยนแปลงที่มีความหมายและสำคัญจะทำให้ตัวเองเกิดขึ้นโดยไม่คำนึงว่าผู้ที่ได้รับการฝึกอบรมเกี่ยวกับเทคโนโลยีก่อนหน้านี้จะเห็นว่าการเปลี่ยนแปลงนั้นไม่จำเป็น คุณคิดว่าการเปลี่ยนแปลงของ OO นั้นดีหรือไม่แม้ว่าจะเป็นคนที่ต่อต้านมันในเวลานั้น?


2
* โปรแกรมเมอร์องค์กรโดยเฉลี่ยเช่นคนส่วนใหญ่ที่ฉันทำงานด้วยจะไม่เข้าใจและสภาพแวดล้อมการทำงานส่วนใหญ่จะไม่อนุญาตให้คุณเขียนโปรแกรม - นั่นยังคงเป็นจริงของ OOP ในหลาย ๆ สถานที่ที่ฉันเคยทำงาน :) (แน่นอนพวกเขาพูดว่าพวกเขากำลังทำ OOP แต่พวกเขาไม่ได้)
tolanj

7

F # สามารถจับได้เนื่องจาก Microsoft กำลังผลักดันมัน

มือโปร:

  • F # จะเป็นส่วนหนึ่งของ Visual Studio รุ่นถัดไป
  • Microsoft กำลังสร้างชุมชนสำหรับบางเวลา - ผู้สอนศาสนาหนังสือที่ปรึกษาที่ทำงานร่วมกับลูกค้าที่มีชื่อเสียงระดับสูงการเปิดเผยที่สำคัญในการประชุม MS
  • F # เป็นภาษา. Net ชั้นหนึ่งและเป็นภาษาที่ใช้งานได้แรกที่มาพร้อมกับรากฐานที่ยิ่งใหญ่จริงๆ (ไม่ใช่ฉันบอกว่า Lisp, Haskell, Erlang, Scala, OCaml ไม่มีห้องสมุดจำนวนมากพวกเขาไม่สมบูรณ์เท่ากับ. NET คือ)
  • การสนับสนุนที่แข็งแกร่งสำหรับการขนาน

Contra:

  • F # นั้นยากมากที่จะเริ่มต้นแม้ว่าคุณจะดีกับ C # และ. Net - อย่างน้อยสำหรับฉัน :(
  • มันอาจจะยากที่จะหานักพัฒนา F # ที่ดี

ดังนั้นฉันให้โอกาส 50:50 แก่ F # ในการกลายเป็นสิ่งสำคัญ ภาษาที่ใช้งานอื่น ๆ จะไม่สร้างขึ้นในอนาคตอันใกล้


6
ฉันขอยืนยันว่าสกาล่าเป็นรากฐานที่ค่อนข้างลึกซึ้งกับ JRE
cdmckay

2
เกี่ยวกับห้องสมุดมันขึ้นอยู่กับสิ่งที่คุณทำ F # มีการกำหนดเป้าหมายที่ภาคการเงินและยังใช้กับการคำนวณทางวิทยาศาสตร์ แต่ OCaml มีห้องสมุดที่ดีกว่าสำหรับการใช้งานดังกล่าวมากกว่า. NET ตัวอย่างเช่นเมื่อฉันมาที่ F # จาก OCaml ฉันไม่พบ FFT ที่เหมาะสมและจบลงด้วยการเขียน (และขาย) ของฉันเองใน C # แล้ว F #
Jon Harrop

1
LINQ เป็นสะพานที่ดีที่จะใช้แนวความคิดการทำงานที่มี C # และ VB.Net ... และฉันคิดว่ามันจะมากน้อยเจ็บปวดที่จะอ่านเมื่อเทียบกับ F #
แมทธิว Whited

5

ผมคิดว่าเหตุผลหนึ่งคือการที่บางคนรู้สึกว่าเป็นส่วนที่สำคัญที่สุดของการไม่ว่าจะเป็นภาษาที่จะได้รับการยอมรับเป็นวิธีที่ดีที่เป็นภาษา น่าเสียดายที่สิ่งต่าง ๆ นั้นง่ายมาก ตัวอย่างเช่นฉันจะยืนยันว่าปัจจัยที่ใหญ่ที่สุดที่อยู่เบื้องหลังการยอมรับของ Python ไม่ใช่ภาษานั้น (แม้ว่าจะเป็นสำคัญมาก) เหตุผลที่ดีที่สุดที่ Python ได้รับความนิยมคือห้องสมุดมาตรฐานขนาดใหญ่และชุมชนที่ใหญ่กว่าของห้องสมุดบุคคลที่สาม

ภาษาอย่าง Clojure หรือ F # อาจเป็นข้อยกเว้นสำหรับกฎนี้เนื่องจากพิจารณาว่าเป็นภาษา JVM / CLR เป็นผลให้ฉันไม่มีคำตอบสำหรับพวกเขา


+1 แต่อย่าลืมพลังของการตลาดและความจริงที่ว่ารหัสภูเขาของ บริษัท คุณจะไม่เปลี่ยนภาษาโดยอาศัยเทรนด์ใหม่ที่ยอดเยี่ยม
temp2290

และคุณลืมพูดถึง: Google กำลังเป็นที่นิยมหลาม
Hao Wooi Lim

4

แอปพลิเคชันส่วนใหญ่สามารถแก้ไขได้ใน [ใส่ภาษาที่คุณชื่นชอบกระบวนทัศน์ ฯลฯ ที่นี่]

แม้ว่าจะเป็นจริง แต่เครื่องมือต่าง ๆ สามารถใช้แก้ปัญหาต่าง ๆ ได้ ฟังก์ชั่นช่วยให้เกิดสิ่งที่เป็นนามธรรมอีกระดับ (สูงกว่า) ที่ช่วยให้การทำงานของเรามีประสิทธิภาพมากขึ้นเมื่อใช้อย่างถูกต้อง


4

สำหรับฉันแล้วดูเหมือนว่าคนที่ไม่เคยเรียน Lisp หรือ Scheme มาก่อนในระดับปริญญาตรีกำลังค้นพบมัน เช่นเดียวกับหลายสิ่งในสาขานี้มีแนวโน้มที่จะโฆษณาและสร้างความคาดหวังสูง ...

มันจะผ่านไป

ฟังก์ชั่นการเขียนโปรแกรมที่ยอดเยี่ยม อย่างไรก็ตามมันจะไม่ใช้เวลาทั่วโลก C, C ++, Java, C #, และอื่น ๆ จะยังคงอยู่

ฉันคิดว่าอะไรจะมาจากความสามารถข้ามภาษา - ตัวอย่างเช่นการนำสิ่งต่าง ๆ มาใช้ในภาษาที่ใช้งานได้และจากนั้นให้เข้าถึงสิ่งนั้นในภาษาอื่น


1
ตอนนี้ C # เป็นภาษาการเขียนโปรแกรมที่ใช้งานได้ แท้จริงแล้วมันถูกใช้ใน WPF และ TPL แล้ว ดังนั้นการตั้งโปรแกรมการทำงานจึงเห็นได้ชัดอยู่แล้วที่นี่
Jon Harrop


3

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

และด้วยฮาร์ดแวร์แบบขนานขนาดใหญ่ที่สร้างแรงกดดันให้กับทุกคน - และภาษาที่ใช้งานได้ดีที่สุดในการจัดการกับการเปลี่ยนแปลง - มันไม่ได้กระโดดไกลอย่างที่ครั้งหนึ่งเคยคิดว่า Haskell หรือ F # จะเป็นเรื่องใหญ่ต่อไป


3

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

  • การปิดฟังก์ชั่นที่ไม่ระบุตัวตนการผ่านและการส่งคืนฟังก์ชั่นเป็นค่าที่เคยเป็นคุณสมบัติแปลกใหม่ที่แฮ็กเกอร์ Lisp และ ML รู้จักเท่านั้น แต่ค่อยๆ C #, Delphi, Python, Perl, Javascript ได้เพิ่มการสนับสนุนสำหรับการปิด มันเป็นไปไม่ได้สำหรับภาษาที่กำลังจะมาถึงนี้ที่จะต้องดำเนินการอย่างจริงจังโดยไม่ต้องปิด

  • หลายภาษาโดยเฉพาะอย่างยิ่ง Python, C #, และ Ruby มีการสนับสนุนดั้งเดิมสำหรับรายการความเข้าใจและรายการกำเนิด

  • ML เป็นหัวหอกในการเขียนโปรแกรมทั่วไปในปี 1973 แต่การสนับสนุนยาชื่อสามัญ ("parametric polymorphism") เป็นเพียงมาตรฐานอุตสาหกรรมในช่วง 5 ปีที่ผ่านมา ถ้าฉันจำได้อย่างถูกต้อง Fortran สนับสนุน generics ในปี 2003 ตามด้วย Java 2004, C # ในปี 2005, Delphi ในปี 2008 (ฉันรู้ว่า C ++ ได้รองรับเทมเพลตตั้งแต่ปี 1979 แต่ 90% ของการสนทนาบน STL ของ C ++ เริ่มต้นด้วย "นี่มีปีศาจ" .)

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

แอปพลิเคชั่นส่วนใหญ่นั้นง่ายพอที่จะแก้ไขในวิธี OO ปกติ

ใครบอกว่าไม่สามารถใช้การเขียนโปรแกรมฟังก์ชั่นสำหรับสิ่งที่ง่ายเกินไป? ไม่ใช่ทุกฟังก์ชั่นโปรแกรมที่จำเป็นต้องเป็นคอมไพเลอร์, ผู้พิสูจน์ทฤษฎีบท, หรือสวิตช์การสื่อสารโทรคมนาคมแบบขนานอย่างหนาแน่น ฉันใช้ F # เป็นประจำสำหรับสคริปต์เฉพาะกิจนอกเหนือไปจากโครงการที่ซับซ้อนกว่าของฉัน


3

มันเป็นเรื่องที่น่าจับตามองเพราะเป็นเครื่องมือที่ดีที่สุดในการควบคุมความซับซ้อน ดู:
- สไลด์ 109-116 ของ Simon Peyton-Jones พูดคุย "A Taste of Haskell"
- "ภาษาโปรแกรมกระแสหลักต่อไป: มุมมองของนักพัฒนาเกม" โดย Tim Sweeney



3

ลิงก์ไม่เปิด ข้อผิดพลาด 403
Alexey Frunze

นี่อาจเป็นการทดแทนที่ดี? cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
canadiancreed

ลิ้งค์ นี่คือเหตุผลที่คำตอบประเภทนี้ไม่เอื้ออำนวยต่อการอ้างอิงและการเชื่อมโยง
Sylwester

ฉันได้แก้ไขลิงก์แล้ว @Sylwester ที่เป็นจริง แต่เป็นเอกสาร 23 หน้า การกลั่นกระดาษลงเพื่อตอบในเว็บไซต์นี้จะไม่ยุติธรรม
grom

2

ฉันเห็นด้วยกับจุดแรก แต่เวลาเปลี่ยน บริษัท จะตอบสนองแม้ว่าพวกเขาจะรับช่วงปลายหากพวกเขาเห็นว่ามีข้อได้เปรียบที่จะมี ชีวิตเป็นแบบไดนามิก

พวกเขาสอน Haskell และ ML ที่ Stanford ในช่วงปลายยุค 90 ฉันแน่ใจว่าสถานที่เช่น Carnegie Mellon, MIT, Stanford และโรงเรียนที่ดีอื่น ๆ กำลังนำเสนอให้กับนักเรียน

ฉันยอมรับว่าแอป "เปิดเผยฐานข้อมูลเชิงสัมพันธ์บนเว็บ" ส่วนใหญ่จะดำเนินต่อไปในหลอดเลือดดำเป็นเวลานาน Java EE, .NET, RoR และ PHP ได้พัฒนาวิธีแก้ปัญหาที่ดีสำหรับปัญหานั้น

คุณเคยเจอกับบางสิ่งที่สำคัญ: อาจเป็นปัญหาที่ไม่สามารถแก้ไขได้อย่างง่ายดายด้วยวิธีการอื่นที่จะช่วยเพิ่มการเขียนโปรแกรมการทำงาน มันจะเป็นอะไร?

ฮาร์ดแวร์มัลติคอร์ขนาดใหญ่และการประมวลผลแบบคลาวด์จะผลักดันพวกเขาไปด้วยหรือไม่


2

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

ฉันไม่เห็นด้วยที่โปรแกรมเมอร์ "ปกติ" จะไม่เข้าใจ ในที่สุดพวกเขาก็จะเข้าใจเหมือนกันว่าในที่สุดพวกเขาก็เข้าใจ OOP (ซึ่งเป็นเรื่องลึกลับและแปลกประหลาดหากไม่เป็นเช่นนั้น)

นอกจากนี้มหาวิทยาลัยส่วนใหญ่สอน FP หลายคนถึงกับสอนเป็นหลักสูตรการเขียนโปรแกรมแรก


ขออภัย FP มีความยาวเกือบ 3 เท่าของ OOP สิ่งนี้ไม่ต้องใช้เวลามากขึ้น มันจะใช้เวลามากกว่านี้เพื่อสร้างกระแสหลัก FP
เจสันเบเกอร์

คุณจะพลาดส่วนหนึ่งของโพสต์ของฉันที่ฉันอธิบายได้อย่างไรว่า "สิ่งที่มากกว่า" อาจเป็นแบบหลายแกนได้อย่างดี? และบางสิ่งที่ "อยู่ใกล้" ก็ไม่เกี่ยวข้องกันจริงๆ คนเข้าใจ OOP เพราะมันให้ประโยชน์ที่จับต้องได้ในเวลานั้น FP เพิ่งจะกลายเป็นจริง
เซบาสเตียน

2

ว้าว - นี่คือการสนทนาที่น่าสนใจ ความคิดของฉันเกี่ยวกับเรื่องนี้:

FP ทำให้บางงานค่อนข้างง่าย (เทียบกับภาษาที่ไม่มี FP) ไม่มีภาษา FP กำลังเริ่มนำแนวคิดจาก FP มาใช้แล้วดังนั้นฉันจึงสงสัยว่าแนวโน้มนี้จะดำเนินต่อไปและเราจะเห็นการรวมที่มากขึ้นซึ่งจะช่วยให้ผู้คนกระโดดข้ามไปสู่ ​​FP ได้ง่ายขึ้น


2

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

ลักษณะไร้สัญชาติของ FP แผนที่เป็นธรรมชาติมากขึ้นกับลักษณะไร้รัฐของเว็บและทำให้ภาษาที่ใช้งานได้ง่ายขึ้นไปยังเว็บแอป RESTFUL ที่หรูหรากว่า ตัดกับกรอบ JAVA และ. NET ที่ต้องหันไปใช้ HACKS ที่น่าเกลียดอย่างเช่นปุ่ม VIEWSTATE และ SESSION เพื่อรักษาสถานะของแอปพลิเคชันและคงไว้ซึ่งภาษาที่จำเป็นในการใช้งานไร้สาระเช่นเว็บ

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


2

มุมมองของฉันคือว่ามันจะจับในขณะนี้ว่า Microsoft ได้ผลักดันมันมากขึ้นในกระแสหลัก สำหรับฉันมันน่าสนใจเพราะมันสามารถทำอะไรให้เราได้เพราะมันเป็นความท้าทายใหม่และเพราะโอกาสในการทำงานที่มันไม่พอใจสำหรับอนาคต

เมื่อเข้าใจแล้วจะเป็นอีกเครื่องมือหนึ่งที่ช่วยให้เราทำงานได้มากขึ้นในฐานะโปรแกรมเมอร์


2

ประเด็นที่ขาดไปในการอภิปรายคือระบบประเภทที่ดีที่สุดนั้นพบได้ในภาษา FP ร่วมสมัย ยิ่งไปกว่านั้นคอมไพเลอร์สามารถอนุมานทุกประเภท (หรืออย่างน้อยที่สุด) โดยอัตโนมัติ

เป็นที่น่าสนใจที่หนึ่งใช้เวลาครึ่งหนึ่งในการเขียนชื่อประเภทเมื่อเขียนโปรแกรม Java แต่ Java นั้นยังไม่ปลอดภัยเท่าที่ควร แม้ว่าคุณจะไม่สามารถเขียนชนิดในโปรแกรม Haskell (ยกเว้นเอกสารที่ตรวจสอบคอมไพเลอร์) และรหัสนั้นปลอดภัย 100%


1

นอกเหนือจากคำตอบอื่น ๆ แล้วการหล่อแก้ปัญหาด้วยฟังก์ชันการทำงานที่บริสุทธิ์นั้นทำให้เราต้องเข้าใจปัญหาให้ดีขึ้น ในทางกลับกันการคิดในรูปแบบที่ใช้งานได้จะช่วยพัฒนาทักษะการแก้ปัญหาได้ดีขึ้น

* อาจเป็นเพราะกระบวนทัศน์การทำงานดีกว่าหรือเพราะจะสามารถเพิ่มมุมการโจมตีได้

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