ภาษาสำคัญที่ต้องเรียนรู้ที่จะเข้าใจแนวทางและแนวคิดต่าง ๆ [ปิด]


172

เมื่อสิ่งที่คุณมีคือมีดสลักเกลียวและวอดก้าหนึ่งขวดทุกอย่างดูเหมือนล็อคที่ประตูโรงเรือของ Wolf Blitzer (แทนที่ด้วยค้อนและตะปูถ้าคุณไม่อ่าน xkcd)

ฉันกำลังเขียนโปรแกรม Clojure, Python, Java และ PHP ดังนั้นฉันคุ้นเคยกับไวยากรณ์ C และ LISP รวมถึงช่องว่าง ฉันรู้ว่าจำเป็น, ใช้งานได้, ไม่เปลี่ยนแปลง, OOP และระบบพิมพ์สองอย่างและสิ่งอื่น ๆ ตอนนี้ฉันต้องการมากขึ้น!

ภาษาใดที่ใช้แนวทางที่แตกต่างกันและจะมีประโยชน์สำหรับการเลือกเครื่องมือที่ใช้งานได้จริงหรือความเข้าใจทางทฤษฎี

ฉันไม่รู้สึกอยากเรียนภาษาอื่นที่ใช้งานได้ (Haskell) หรือภาษา OOP ที่จำเป็น (Ruby) อีกทั้งฉันไม่ต้องการฝึกภาษาสนุก ๆ ที่ทำไม่ได้เช่น Brainfuck

สิ่งหนึ่งที่น่าสนใจมากที่ฉันพบว่าตัวเองเป็นภาษาโมโนโพนิคสแต็กเช่น Factor

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


3
ฉัน +1 +1 สำหรับการอ้างอิง xkcd แต่คำถามก็น่าสนใจเช่นกัน

63
ดูเหมือนว่าคุณจะเป็นโปรแกรมเมอร์ที่ประสบความสำเร็จส่วนที่เหลือก็เพิ่มขึ้น ไม่พยายามเป็นคนโง่ แต่ ... ชีวิตของคุณเป็นอย่างไรการเงินฉลาดความสัมพันธ์ฉลาดสุขภาพดีฉลาดสนุกงานอดิเรกฉลาด? บางทีตอนนี้เป็นเวลาที่จะติดตามบางสิ่งเหล่านั้น ฉันไม่เชื่อว่าคุณต้องรู้มากกว่าหนึ่งโหลภาษาพร้อมกัน หากคุณได้รับเงินเพื่อใช้งาน - เรียนรู้มัน หากคุณต้องการที่จะเขียนหนังสือเกี่ยวกับหนึ่ง - เรียนรู้มัน นอกเหนือจากนั้นคุณมีฐานการเขียนโปรแกรมที่ดี เรียนรู้อะไรบางอย่าง (เช่น J - ความเห็นของฉัน subj :) ที่คุณจะไม่จริงจัง (อ่านให้ $) ใช้ที่ใดก็ได้? อย่าเป็นแฮ็กเกอร์ที่เด็ดสุดในสุสาน
Hamish Grubijan

6
ใช่ฉันเป็นโปรแกรมเมอร์ที่ประสบความสำเร็จตามมาตรฐานของฉันเอง ปัจจุบันฉันไม่ได้ทำเงินมาก แต่เดี๋ยวก่อนฉันอายุ 19 ฉันลงทุนเวลาในทุกประเด็นและอื่น ๆ แต่ฉันพบว่าทั้งงานอดิเรกและความสนุกในการเขียนโปรแกรม ฉันอยากจะบอกว่ามันมีความแตกต่างระหว่างการเข้าใจภาษาและการควบคุมมัน การเรียนรู้ Python และ Clojure เพียงพอสำหรับฉัน ฉันต้องการที่จะเข้าใจตัวเลือกอื่น ๆ ที่มีเพราะมันจะปรับปรุงรหัสของฉันช่วยให้ฉันเข้าใจคอมพิวเตอร์ของฉันและช่วยฉันกำหนดภาษาการเขียนโปรแกรมของตัวเอง
Pepijn

5
คุณเคยเห็นโปรแกรมเมอร์หรือไม่ นี่เป็นประเภทของคำถามที่ถามที่ดีกว่า

คำตอบ:


287

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

ฟังก์ชั่น, Haskell - ฉันรู้ว่าคุณพูดว่าคุณไม่ต้องการ แต่คุณควรพิจารณาอีกครั้งจริงๆ คุณได้รับฟังก์ชั่นการใช้งานบางอย่างจาก Clojure และแม้แต่ Python แต่คุณไม่ได้สัมผัสมันอย่างเต็มที่โดยไม่ต้องใช้ Haskell หากคุณเทียบกับ Haskell จริงๆแล้วการประนีประนอมที่ดีคือ ML หรือ OCaml

Declarative, Datalog - หลายคนจะแนะนำ Prolog ในช่องนี้ แต่ฉันคิดว่า Datalog เป็นตัวอย่างที่ชัดเจนของภาษาที่ประกาศ

Array, J - ฉันเพิ่งค้นพบ J แต่ฉันคิดว่ามันเป็นภาษาที่น่าทึ่ง มันจะทำให้จิตใจของคุณกลายเป็นขนมปังเค็ม คุณจะขอบคุณ J สำหรับสิ่งนั้น

Stack, Factor / Forth - Factor นั้นทรงพลังมากและฉันวางแผนที่จะขุดมันโดยเร็ว Forth เป็นพ่อที่ยิ่งใหญ่ของภาษาสแต็กและเป็นโบนัสเพิ่มเติมมันง่ายที่จะใช้งานด้วยตัวคุณเอง มีบางอย่างที่ต้องพูดเกี่ยวกับการเรียนรู้ผ่านการใช้งาน

Dataflow, Oz - ฉันคิดว่าอิทธิพลของ Oz กำลังอยู่ในช่วงขาขึ้นและจะเติบโตต่อไปในอนาคต

ต้นแบบ / JavaScript, Io / Self - ตามตัวเองเป็นพ่อที่ยิ่งใหญ่และมีอิทธิพลอย่างมากในทุกภาษาที่ใช้ต้นแบบ สิ่งนี้ไม่เหมือนกับ OOP แบบคลาสและไม่ควรได้รับการปฏิบัติเช่นนี้ หลายคนมาเป็นภาษาต้นแบบและสร้างระบบคลาส ad-hoc แต่ถ้าเป้าหมายของคุณคือการขยายความคิดของคุณฉันคิดว่านั่นเป็นความผิดพลาด ใช้ภาษาให้เต็มประสิทธิภาพ อ่านการจัดโปรแกรมโดยไม่มีคลาสเพื่อหาแนวคิด

ระบบผู้เชี่ยวชาญ CLIPS - ฉันแนะนำสิ่งนี้เสมอ ถ้าคุณรู้จัก Prolog คุณจะมีความสามารถในการเร่งความเร็วสูง แต่เป็นภาษาที่แตกต่างกันมาก

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

ประเภทการทำงาน + ตัวเลือก Qi - คุณบอกว่าคุณได้สัมผัสกับระบบบางประเภท แต่คุณเคยมีประสบการณ์กับระบบประเภท "skinnable * หรือไม่ไม่มีใครมี ... แต่พวกเขาควรจะ Qi เป็นเหมือนเสียงกระเพื่อมในหลาย ๆ วิธี ระบบพิมพ์จะทำให้ใจของคุณ

นักแสดง + ความทนทานต่อความผิดพลาด Erlang - รูปแบบกระบวนการของ Erlang ได้รับความนิยมอย่างมาก แต่กลไกการยอมรับข้อบกพร่องและกลไกการเปลี่ยนรหัสร้อนแรงนั้นกำลังเปลี่ยนเกม คุณจะไม่ได้เรียนรู้มากเกี่ยวกับ FP ที่คุณจะไม่เรียนรู้ด้วย Clojure แต่ฟีเจอร์ FT ของมันจะทำให้คุณสงสัยว่าทำไมภาษาอื่น ๆ ไม่สามารถทำให้ถูกต้องได้

สนุก!


8
+1 - คำตอบที่ดี
duffymo

2
ขอบคุณที่ชี้นำฉันไปยังหลายภาษาเพื่อเรียนรู้

2
ฉันจะเพิ่ม Erlang สำหรับการเขียนโปรแกรมจากนักแสดงและ Fortress สำหรับการเขียนโปรแกรมแบบขนาน
nickik

2
+1 สำหรับการแลกเปลี่ยนความร้อนและการยอมรับข้อผิดพลาดของ Erlang
Mic

14
ไม่มีการชุมนุม? เป็นการดีที่มีความเข้าใจว่าโปรเซสเซอร์ทำงานอย่างไรเพื่อเรียนรู้รหัสที่พวกเขาชอบ
Nick T

33

Prolog (สำหรับการรวม / การย้อนรอย ฯลฯ ), Smalltalk (สำหรับ "ข้อความทุกอย่าง"), Forth (ขัดกลับ, ล่ามที่เป็นเกลียว ฯลฯ ), Scheme (ต่อเนื่อง)?

ไม่ใช่ภาษา แต่Art of the Metaobject Protocolเป็นสิ่งที่ทำให้ใจคุณอลเวง


แก้ไขให้ถูกต้องหากฉันผิด แต่ฉันคิดว่า Python sortof ทำสิ่งต่อเนื่องอยู่แล้ว และจากสิ่งที่ฉันได้อ่านฉันควรจะเรียนรู้ปัจจัยและวัตถุประสงค์ -C มากกว่า Forth และ Smalltalk แต่ฉันอาจจะตัดมุมตรงนั้น
Pepijn

1
@pepijn หลามไม่ได้มีตชั้นแรก ( แต่ผมกำลังทำงานกับสับ bytecode ปลอมมัน)
aaronasterling

1
วัตถุประสงค์ -C มาจาก Smalltalk แต่ฉันคิดว่าสิ่งที่นำกลับมาใช้จริงจาก ST คือพลวัตของสิ่งแวดล้อมเอง
John Cromartie

33

ฉันสอง Haskell อย่าคิดว่า "ฉันรู้จักเสียงกระเพื่อมดังนั้นฉันจึงรู้ว่าการเขียนโปรแกรมใช้งานได้" เคยได้ยินชั้นเรียนประเภท? ชนิดข้อมูลพีชคณิต Monads? "สมัยใหม่" (มากกว่าหรือน้อยกว่า - อย่างน้อยไม่ 50 ปี;) ภาษาทำงานโดยเฉพาะอย่างยิ่ง Haskell ได้สำรวจมากมายแนวคิดที่มีประโยชน์มากที่มีประสิทธิภาพมาก คลาสประเภทเพิ่มความหลากหลายแบบ ad-hoc แต่การอนุมานประเภท (ยังมีอีกสิ่งที่ภาษาที่คุณรู้แล้วไม่มี) ทำงานเหมือนมีเสน่ห์ ประเภทข้อมูลเกี่ยวกับพีชคณิตนั้นยอดเยี่ยมมากโดยเฉพาะอย่างยิ่งสำหรับการสร้างแบบจำลองโครงสร้างข้อมูลที่เหมือนต้นไม้ แต่ทำงานได้ดีสำหรับ enums หรือระเบียนอย่างง่ายเช่นกัน และ monads ... เอาล่ะสมมติว่าผู้คนใช้พวกมันเพื่อสร้างข้อยกเว้น I / O ตัวแยกวิเคราะห์รายการความเข้าใจและอื่น ๆ อีกมากมาย - ด้วยวิธีการทำงานที่หมดจด!

นอกจากนี้หัวข้อทั้งหมดอยู่ลึกพอที่จะทำให้หนึ่งไม่ว่างสำหรับปี;)


"นอกจากนี้ยังมีหัวข้อทั้งหมดที่ลึกพอที่จะทำให้หนึ่งไม่ว่างสำหรับปี;)" - ฉันสงสัยว่าทำไมสิ่งนี้จะเป็นสิ่งที่ดี? ท้ายที่สุดแล้วชีวิตของเราก็มีขอบเขต จำกัด
vegai

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

32

ฉันกำลังเขียนโปรแกรม Clojure, Python, Java และ PHP [... ] ภาษาใดบ้างที่ใช้แนวทางที่แตกต่างกันและจะมีประโยชน์สำหรับการเลือกเครื่องมือที่ใช้งานได้จริงหรือความเข้าใจทางทฤษฎี?

มีรหัส C จำนวนมากวางอยู่รอบ ๆ --- มันใช้งานได้จริง หากคุณเรียนรู้ภาษา C ++ เกินไปมีเป็นจำนวนมากขนาดใหญ่ของรหัสอีกรอบ (และก้าวกระโดดเป็นระยะสั้นเมื่อคุณรู้ว่า C และ Java)

นอกจากนี้ยังช่วยให้คุณ (หรือบังคับให้คุณมี) ความเข้าใจที่ดีในประเด็นทางทฤษฎีบางอย่าง; ตัวอย่างเช่นโปรแกรมที่ทำงานอยู่ในอาร์เรย์ไบต์ 4 GB ในบางกรณี พอยน์เตอร์ใน C เป็นเพียงดัชนีในอาร์เรย์นี้ - พวกมันเป็นจำนวนเต็มชนิดอื่น ไม่แตกต่างใน Java, Python, PHP ยกเว้นซ่อนอยู่ใต้เลเยอร์พื้นผิว

นอกจากนี้คุณสามารถเขียนโค้ดเชิงวัตถุใน C คุณเพียงแค่ต้องมีคู่มือเล็กน้อยเกี่ยวกับ vtables และเช่นนั้น Portable Puzzle Collection ของ Simon Tatham เป็นตัวอย่างที่ดีของรหัส C ที่สามารถเข้าถึงวัตถุได้ มันออกแบบมาค่อนข้างดีและคุ้มค่าที่จะอ่านให้กับโปรแกรมเมอร์ C ระดับเริ่มต้น / ระดับกลาง นี่คือสิ่งที่เกิดขึ้นใน Haskell เช่นกัน --- ประเภทของคลาสนั้นมีความหมายว่า "just vtable อื่น"

อีกสิ่งที่ยอดเยี่ยมเกี่ยวกับ C: การมีส่วนร่วมในการถามตอบกับโปรแกรมเมอร์ C ที่มีทักษะจะได้รับคำตอบมากมายที่อธิบาย C ในแง่ของโครงสร้างระดับล่างซึ่งสร้างฐานความรู้ที่ใกล้เคียงกับเหล็กมากขึ้น

ฉันอาจพลาดประเด็นของ OP --- ฉันคิดว่าฉันกำลังตัดสินโดยคำตอบอื่น ๆ --- แต่ฉันคิดว่ามันอาจเป็นคำตอบที่มีประโยชน์สำหรับคนอื่น ๆ ที่มีคำถามคล้ายกันและอ่านหัวข้อนี้


1
สิ่งนี้ต้องการ upvotes มากขึ้น C คือภาษาอันดับหนึ่งเมื่อคุณต้องการหรือต้องการลงไปหาโลหะเปลือยและทำความเข้าใจกับการทำงานของเครื่อง - หรือภาษาการเขียนโปรแกรมระดับสูง - ตั้งแต่ต้นจนจบ ยิ่งไปกว่านั้นมันยังเป็นสากลมากคอมไพเลอร์ C มีอยู่สำหรับ (เกือบ) ทุกสถาปัตยกรรมของ CPU ที่เคยคิด
dietr

27

จากเว็บไซต์ของ Peter Norvig:

"เรียนรู้ภาษาการเขียนโปรแกรมอย่างน้อยครึ่งโหลรวมภาษาหนึ่งที่รองรับ abstractions คลาส (เช่น Java หรือ C ++), หนึ่งที่รองรับ abstraction ที่ใช้งานได้ (เช่น Lisp หรือ ML), หนึ่งที่รองรับ synstactic abstraction (เช่น Lisp), หนึ่งที่สนับสนุนการประกาศ ข้อมูลจำเพาะ (เช่นแม่แบบ Prolog หรือ C ++) รุ่นหนึ่งที่รองรับ coroutines (เช่น Icon หรือ Scheme) และอีกหนึ่งรุ่นที่รองรับระบบขนาน (เช่น Sisal) "

http://norvig.com/21-days.html



10

ในประเภทตามทฤษฎี / ระบบประเภทขั้นสูง: Coq (ฉันคิดว่า Agda มาในหมวดนี้ด้วย)

Coq เป็นผู้ช่วยพิสูจน์ที่ฝังอยู่ในภาษาโปรแกรมการทำงาน

คุณสามารถเขียนหลักฐานทางคณิตศาสตร์และ Coq ช่วยสร้างโซลูชัน คุณสามารถเขียนฟังก์ชั่นและพิสูจน์คุณสมบัติได้

มันมีประเภทที่ขึ้นกับว่าคนเดียวใจฉัน ตัวอย่างง่ายๆ:

concatenate: forall (A:Set)(n m:nat), (array A m)->(array A n)->(array A (n+m))

เป็นลายเซ็นต์ของฟังก์ชันที่เชื่อมสองขนาดอาร์เรย์ n และ m ขององค์ประกอบ A และส่งกลับอาร์เรย์ขนาด (n + m) มันจะไม่คอมไพล์ถ้าฟังก์ชั่นไม่ส่งคืน!

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

แก้ไข: ฉันต้องพูดถึง: คุณเขียนฟังก์ชั่นใน Coq แล้วคุณสามารถพิสูจน์ได้ว่ามันถูกต้องสำหรับการป้อนข้อมูลใด ๆ ที่น่าทึ่ง!


ฉัน coq ที่สอง เมื่อเรียนรู้ภาษาส่วนใหญ่คุณยังสามารถใช้เทคนิคเก่าของคุณได้ แต่ coq บังคับให้คุณเขียนโปรแกรมทั้งหมดที่ใช้งานได้เสมอ
Bruno Martinez

ฉันพยายามที่จะเรียนรู้ Coq ฤดูร้อนที่ผ่านมา แต่ยอมแพ้เพราะฉันพบว่ามันยากที่จะหาเอกสารที่ดีเกี่ยวกับการเรียนรู้และการใช้มัน ข้อเสนอแนะใด ๆ

ฉันเรียนรู้จากหลักสูตรที่มหาวิทยาลัยของฉันแล้วอ่าน "Coq'Art: The แคลคูลัสของการก่อสร้างเชิงอุปนัย" มันไม่เพียงพอที่จะเชี่ยวชาญมัน แต่เพียงพอที่จะชื่นชมมัน
Bruno Martinez

6

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


5

เช่นเดียวกับ Fogus ได้แนะนำให้คุณอยู่ในรายชื่อของเขาฉันแนะนำให้คุณดูภาษาOzML / Mozart กระบวนทัศน์หลายอย่างซึ่งมีเป้าหมายหลักที่การเขียนโปรแกรมพร้อมกัน / หลายตัวแทน

เกี่ยวกับการเกิดพร้อมกันและแคลคูลัสแบบกระจาย, แคลคูลัสแลมบ์ดาซึ่งเทียบเท่ากับการเขียนโปรแกรม functionnal เรียกว่า Pi แคลคูลัส

ฉันเริ่มที่จะดูการใช้งานแคลคูลัส Pi แต่พวกเขาได้ขยายแนวคิดการคำนวณของฉันไปแล้ว


5

การเขียนโปรแกรม Dataflow หรือการเขียนโปรแกรมแบบอิง Flow เป็นขั้นตอนที่ดีในอนาคต buzzwords บางคำ: การประมวลผลแบบ Paralell, การสร้างต้นแบบอย่างรวดเร็ว, การเขียนโปรแกรมด้วยภาพ (ไม่เลวเท่าเสียงก่อน)

บทความของ Wikipedia นั้นดี:

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

อ่านหนังสือของ JPM: http://jpaulmorrison.com/fbp/

(เราเขียนการใช้งานง่าย ๆ ใน C ++ สำหรับการทำงานอัตโนมัติในบ้านและเรามีความสุขมากกับมันเอกสารกำลังอยู่ระหว่างการปรับปรุง)


+1, ฉันเชื่อว่าการเขียนโปรแกรมดาต้า - โฟลว์และการไหลเวียนของข้อมูล

5

คุณได้เรียนรู้ภาษามากมาย ตอนนี้เป็นเวลาที่จะมุ่งเน้นไปที่หนึ่งภาษาและเชี่ยวชาญ


3

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

อย่างไรก็ตามดูเหมือนว่าคุณสนใจในสิ่งที่อยู่ข้างนอกดังนั้นข้อเสนอแนะ

นอกจากนี้คุณสามารถลองตัวตรวจสอบแอนดรอยด์เพื่อสร้างสิ่งที่มองเห็นได้


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

นั่นคือสิ่งที่มาพร้อมกับ Lego NXT ใช่มั้ย ทั้งหมดไม่ทำงานสำหรับฉัน ขอบคุณสำหรับคำแนะนำว่า
Pepijn

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

2

Bruce A. Tate การเขียนเพจจากThe Pragmatic Programmerเขียนหนังสือว่า: เจ็ดภาษาในเจ็ดสัปดาห์: คู่มือปฏิบัติเพื่อการเรียนรู้การเขียนโปรแกรมภาษา

ในหนังสือเขาครอบคลุม Clojure, Haskell, Io, Prolog, Scala, Erlang และ Ruby


2
ได้รับการเตือนว่าหนังสือเล่มนี้เต็มไปด้วยการอ้างอิงถึงภาพยนตร์ที่ดูเหมือนจะกลายเป็นส่วนหนึ่งของวัฒนธรรมป๊อปของสหรัฐอเมริกา หากคุณไม่ได้ดูภาพยนตร์คุณจะสงสัยว่า Tate กำลังทำอะไรอยู่ หากคุณเคยดูภาพยนตร์คุณอาจจะถูกเลื่อนออกไปจากการเปลี่ยนแปลงภาษาของการเขียนโปรแกรมอย่างต่อเนื่องหรือโดยการไม่ชอบตัวละครที่มีปัญหา (ฉันไม่ชอบ Mary Poppins โดยบังเอิญฉันก็ไม่ชอบ Ruby ดังนั้นการเปรียบเทียบ อาจจะมีบางอย่าง)
Alan Plum

2

ปรอท : http://www.mercury.csse.unimelb.edu.au/

มันเป็น Prolog ที่พิมพ์ด้วยประเภทและโหมดที่ไม่ซ้ำกัน (เช่นการระบุว่าความappend(X,Y,Z)หมายของคำกริยาที่ผนวกเข้ากับ Y คือ Z จะให้ผลผลิตหนึ่ง Z ที่ให้ X และ Y แต่สามารถให้ X / Y หลายตัวสำหรับ Z ที่กำหนด) นอกจากนี้ไม่มีการตัดหรือเพรดิเคตพิเศษอื่น ๆ

ถ้าคุณต้องการมันก็เพื่อ Prolog เป็น Haskell คือ Lisp


1
  1. การเขียนโปรแกรมไม่ครอบคลุมงานของโปรแกรมเมอร์
  2. สิ่งใหม่นั้นน่าสนใจอยู่เสมอ แต่ก็มีของเก่าที่เจ๋ง ๆ

ระบบฐานข้อมูลแรกคือ dBaseIII สำหรับฉันฉันใช้เวลาประมาณหนึ่งเดือนในการเขียนตัวอย่างเล็ก ๆ (dBase / FoxPro / Clipper เป็นฐานข้อมูลแบบตารางที่มีดัชนี) จากนั้นในที่ทำงานแรกของฉันฉันได้พบกับ MUMPS และฉันก็ปวดหัว ฉันยังเด็กและมีสติ แต่ใช้เวลา 2 สัปดาห์ในการทำความเข้าใจกับโมเดลฐานข้อมูล MUMPS มีอยู่ครู่หนึ่งเหมือนในการ์ตูน: หลังจาก 2 สัปดาห์ปุ่มก็เปิดอยู่และหลอดไฟก็สว่างขึ้นในใจฉัน MUMPS เป็นธรรมชาติระดับต่ำและเร็วมาก (มันเป็น btree ที่ไม่สมดุลและไม่มีการปรับรูปแบบที่ไม่มีประเภท) แนวโน้มของวันนี้แสดงให้เห็นถึงวิธีการกลับคืนมา: NoSQL, คีย์ - ค่าฐานข้อมูล, ฐานข้อมูลหลายมิติ - ดังนั้นจึงเหลือเพียงขั้นตอนบางส่วนเท่านั้น

นี่คืองานนำเสนอเกี่ยวกับข้อดีของ MUMPS: http://www.slideshare.net/george.james/mumps-the-internet-scale-database-presentation

เอกสารย่อเกี่ยวกับ db ลำดับชั้น: http://www.cs.pitt.edu/~chang/156/14hier.html

ข้อมูลเบื้องต้นเกี่ยวกับ MUMPS globals (ใน MUMPS, ตัวแปรโลคัล, แบบสั้น: locals คือตัวแปรหน่วยความจำและตัวแปรโกลบอลแบบย่อ: globals คือ "ตัวแปร db" การตั้งค่าตัวแปรโกลบอลจะไปที่ดิสก์ทันที: http: // gradvs1.mgateway.com/download/extreme1.pdf (PDF)


1

สมมติว่าคุณต้องการเขียนบทกวีรัก ...

แทนที่จะใช้ค้อนเพียงเพราะมีอยู่แล้วในมือของคุณเรียนรู้เครื่องมือที่เหมาะสมสำหรับงาน: เรียนรู้การพูดภาษาฝรั่งเศส

เมื่อคุณถึงระดับการพูดใกล้ตัวคุณพร้อมที่จะเริ่มต้นบทกวีของคุณ


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

อร่อยประชดจอห์นฉันชอบมัน (ฉันเป็นคนฝรั่งเศส, btw)
Vinzz

1

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


1

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

ในบรรทัดเดียวกันฉันจะเลือกเครื่องคิดเลขรุ่น HP-41C (หรืออีมูเลเตอร์แม้ว่าไม่มีฮาร์ดแวร์ใดที่เต้นได้จริง) มันยากที่จะห่อสมองของคุณรอบ ๆ มัน แต่ก็คุ้มค่า TI-57 จะทำ แต่จะเป็นประสบการณ์ที่แตกต่างอย่างสิ้นเชิง หากคุณจัดการเพื่อแก้สมการระดับที่สองใน TI-55 คุณจะได้รับการพิจารณาเป็นหลัก (ไม่มีเงื่อนไขและไม่มีสาขายกเว้น RST ที่กระโดดโปรแกรมกลับไปที่ขั้นตอน 0)

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


1

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

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

ลองใช้การเขียนโปรแกรม GPUs เช่น CUDA หรือ OpenCL มันเป็นแค่ส่วนขยาย C / C ++ แต่รูปแบบทางจิตของสถาปัตยกรรมนั้นแตกต่างจากวิธีคลาสสิกอย่างสมบูรณ์อีกครั้งและมันก็สามารถนำไปใช้งานได้จริงเมื่อคุณจำเป็นต้องทำตัวเลขจริงให้สำเร็จ


1

Erlang, Forth และบางส่วนทำงานด้วยภาษาแอสเซมบลี จริงๆ; ซื้อชุด Arduino หรือสิ่งที่คล้ายกันและสร้างเสียงเตือนแบบ polyphonic ในการประกอบ คุณจะได้เรียนรู้บางสิ่งจริงๆ


1

นอกจากนี้ยังมีanic :

https://code.google.com/p/anic/

จากเว็บไซต์:

เร็วกว่า C ปลอดภัยกว่า Java ง่ายกว่า * sh

anic เป็นคอมไพเลอร์ในการดำเนินการอ้างอิงสำหรับการทดลองประสิทธิภาพสูงขนานโดยปริยายการเขียนโปรแกรมดาต้าลโลว์สำหรับการเขียนโปรแกรมภาษา ANI

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


1

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

แต่ก็ยังมีคอมไพเลอร์ bootstrapped ของตัวเองให้แพลตฟอร์มที่มีการติดตั้งลดลงโดยไม่ต้องพึ่งพาภายนอกได้รับแพคเกจที่ถูกต้อง - และทำงานบน Java, C # และตอนนี้เว็บ (ผ่าน js)

มันอาจไม่ขยายขอบเขตอันไกลโพ้นของคุณในแง่ของวิธีการเขียนโปรแกรมใหม่ แต่มันจะแสดงวิธีการเขียนโปรแกรมที่ดีขึ้น


1

สิ่งหนึ่งที่ฉันเห็นว่าหายไปจากคำตอบอื่น ๆ : ภาษาที่ยึดตามการเขียนคำซ้ำ

คุณสามารถดูที่บริสุทธิ์ - http://code.google.com/p/pure-lang/

Mathematica ยังเขียนใหม่ตามแม้ว่ามันจะไม่ง่ายนักที่จะคิดว่าเกิดอะไรขึ้นเพราะมันค่อนข้างปิด


0

APL, Forth และ Assembly

ขอให้สนุก เลือกชุดหุ่นยนต์ Lego Mindstorm และ RobotC ของ CMU และเขียนรหัสหุ่นยนต์ สิ่งต่าง ๆ เกิดขึ้นเมื่อคุณเขียนโค้ดที่ต้อง "สกปรก" และโต้ตอบกับโลกแห่งความจริงที่คุณไม่สามารถเรียนรู้ด้วยวิธีอื่นได้ ใช่ภาษาเดียวกัน แต่มีมุมมองที่แตกต่างกันมาก

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