มันเป็นเหมือนการเรียนรู้คณิตศาสตร์ที่จะพัฒนาทักษะการวิเคราะห์ของคุณและการเรียนรู้วรรณกรรมละติน / คลาสสิกจะพัฒนาทักษะการเขียนของคุณ
ผู้ที่ออกแบบภาษาเหล่านั้นมีความคิดมากเกี่ยวกับการเขียนโปรแกรมหมายถึงอะไร และภาษาเหล่านั้นเป็นผลจากการวิจัยเหล่านั้น
ที่กล่าวว่าการเรียนรู้ Java จะทำให้คุณเป็นโปรแกรมเมอร์ที่ดีขึ้น และการเรียนรู้ C. ประโยชน์ที่แท้จริงมาจากการเรียนรู้ภาษาด้วยปรัชญาที่แตกต่างกัน จากนั้นคุณสามารถมีความคิดเห็นของคุณเองเกี่ยวกับวิธีการเขียนโปรแกรม
แก้ไข
ฉันรู้ว่าคำตอบนี้ไม่เป็นประโยชน์สำหรับผู้ที่ยังไม่ได้เรียนรู้ฮาเซลและ / หรือเสียงกระเพื่อม นี่คือตัวอย่างที่จะอธิบายเพิ่มเติมสิ่งที่ฉันหมายถึง
LISP
เสียงกระเพื่อมเชื่อว่าไวยากรณ์ควรน้อยที่สุดและทุกอย่างควรเป็นรายการหรือดั้งเดิม (Lisp ย่อมาจาก List Processing) แม้แต่โปรแกรมส่วนใหญ่จะเป็นรายการที่มีรายการและสัญลักษณ์อื่น ๆ เสียงกระเพื่อมช่วยให้คุณสามารถจัดการโปรแกรมเป็นรายการและเพื่อสร้างโปรแกรมใหม่ได้ทันที ดังนั้นcode is data and data is code
คำขวัญทั้งหมด
ผลที่ตามมาโดยตรงคือภาษา Lisp อนุญาตให้คุณกำหนดส่วนต่อประสานที่คุณต้องการ ตัวอย่างที่ดีคือ compojure ซึ่งเป็นเฟรมเวิร์กของเว็บ นี่คือลักษณะของฟังก์ชั่นการกำหนดเส้นทาง
(defroutes app-routes
(GET "/" [] view/page)
(GET "/api" [] (wrap-aleph-handler api/socket-handler))
(route/resources "/static")
(route/not-found "page not found"))
ตัวอย่างที่ดีอีกประการหนึ่งคือกรอบการทำแม่แบบสะอึก:
(html [:ul
(for [x (range 1 4)]
[:li x])])
ที่คุณสามารถดูผลที่ได้คือเป็นสั้นในขณะที่ DSL เช่นหนวด (for [x (range 1 4)] block)
แต่ช่วยให้คุณใช้ภาษาที่ให้บริการเช่น แม้กระทั่ง nicer คุณมีเครื่องมือทั้งหมดที่เป็นนามธรรมและจัดโครงสร้างโค้ดของคุณ
ในภาษาอื่น ๆ ไวยากรณ์มีความซับซ้อนมากขึ้น คุณไม่สามารถอ่านโปรแกรม Java เป็นรายการได้ แต่ด้วยการใช้ Lisp คุณจะได้รับแนวคิดที่ดีขึ้นเกี่ยวกับอินเทอร์เฟซที่เหมาะสมควรมีลักษณะอย่างไรและสิ่งใดในรหัสของคุณที่สามารถแยกออกเป็นข้อมูลได้ นอกจากนี้ยังช่วยให้คุณเห็นภาษาที่คุณชื่นชอบเป็นโครงสร้างข้อมูลขนาดใหญ่และเพื่อให้เข้าใจความหมายได้ดีขึ้น
Haskell
Haskell เชื่อในการพิมพ์คงที่และความบริสุทธิ์ที่แข็งแกร่ง ฟังก์ชั่นที่บริสุทธิ์เป็นเหมือนฟังก์ชั่นทางคณิตศาสตร์: พวกเขาถูกกำหนดไว้ในชุดของค่าและแมปพวกเขาในชุดอื่น ฟังก์ชั่นไม่มีผลข้างเคียงและค่าไม่เปลี่ยนรูป ความบริสุทธิ์น่าสนใจเพราะไม่ใช่สิ่งที่ภาษาแบบหลายกระบวนทัศน์สามารถมีได้ ภาษานั้นบริสุทธิ์หรือไม่
สิ่งหนึ่งที่สำคัญคือคุณไม่สามารถทำการกระทำ IO ได้ทุกเมื่อที่คุณต้องการ (Haskellers เชื่อว่านี่เป็นสิ่งที่ดี) การกระทำของ IO นั้นถูกกำหนดให้เป็นธุรกรรมซึ่งล้วนเป็นคุณค่าที่แท้จริง main
ค่าของโปรแกรม Haskell จะทำธุรกรรม IO ดำเนินการเมื่อคุณเรียกใช้โปรแกรม
คุณต้องจัดการกับกระแสข้อมูลในโปรแกรมของคุณอย่างชัดเจน คุณไม่สามารถสื่อสารสององค์ประกอบโดยการเขียนและอ่านสิ่งต่าง ๆ ในตัวแปรส่วนกลาง คุณต้องสร้างและส่งผ่านค่า
คุณสมบัติอื่นที่กล่าวถึงโดย Jimmy Hoffa คือระบบการพิมพ์ที่หลากหลาย ในขณะที่ภาษาอื่นมีการพิมพ์แบบคงที่ใน Haskell คุณสามารถมีสิ่งต่าง ๆ เช่น:
length :: [a] -> Int
(ฟังก์ชั่นจากรายการของ a ไปยัง int)
map :: (a -> b) -> [a] -> [b]
(ฟังก์ชันที่รับการa to b
แปลงและรายการ a's และส่งคืนรายการ b's)
สิ่งที่ดีคือฉันไม่จำเป็นต้องอธิบายสิ่งที่ฟังก์ชั่นเหล่านั้นทำจริง: คุณเข้าใจพฤติกรรมของพวกเขาแล้ว ยิ่งไปกว่านั้นฟังก์ชั่นที่มีลายเซ็นเหล่านั้นไม่สามารถทำอะไรได้เลยนอกจากคำนวณความยาวของรายการและแมปการแปลงผ่านรายการ
ในภาษาที่พิมพ์อื่น ๆ ลำดับชั้นของชั้นรวมกับความไม่แน่นอนทำให้การจัดการกับประเภทเหล่านั้นเป็นฝันร้าย คุณต้องเข้าใจสิ่งต่าง ๆ เช่นความแปรปรวนร่วมและความแปรปรวนซึ่งเป็นไปไม่ได้ที่จะได้รับจากมุมมองของภาษา (เช่นง่ายมีประสิทธิภาพและปลอดภัย)
ไม่ว่าคุณจะใช้เส้นทางที่ปลอดภัย (เช่นสกาล่า) และจบลงด้วยภาษาที่ซับซ้อนจริงๆหรือคุณใช้เส้นทางที่เรียบง่ายและได้รับสิ่งที่ จำกัด (google go generics จำกัด เฉพาะรายการและแผนที่) หรือไม่ปลอดภัย (generics โผที่มักจะเป็น covariant)
โดยใช้ Haskell คุณส่วนใหญ่เรียนรู้เกี่ยวกับประโยชน์ของความบริสุทธิ์และวิธีการเขียนรหัสบริสุทธิ์