ภาษาการเขียนโปรแกรมมีกี่ประเภท [ปิด]


30

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

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


2
จะดีกว่าไหมถ้าพูดว่า "ประเภทไหน .. " แทนที่จะเป็นกี่อัน?
Amir Rezaei

ฉันได้เรียนรู้ว่าสิ่งที่คล้ายกับ Prolog และ C นั้นแตกต่างกันโดยพื้นฐานดังนั้นฉันจึงคิดว่าพวกเขาแต่ละคนตรงกับภาษาการเขียนโปรแกรมชนิดต่าง ๆ และฉันหวังว่าจะเข้าใจว่ามีกี่ประเภท
sova

7
2: ประเภทที่ทำในสิ่งที่คุณต้องการและประเภทที่ไม่ใช่
Matt Ellen

1
เรียนรู้เกี่ยวกับความแตกต่างของการเขียนโปรแกรมภาษาอย่าง สร้างสรรค์ ! คุณอาจโต้เถียงว่าสิ่งนี้ควรถูกปิดเป็นสำเนาที่ซ้ำกันแต่ฉันคิดว่าพวกเขามีคำถามที่แตกต่างกันพอที่จะแยกจากกัน
Peter Boughton

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

คำตอบ:


73

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

ภาษาจำเป็นจะแตกบางครั้งออกเป็นสองกลุ่มย่อย: ขั้นตอนภาษาเช่น C และภาษาเชิงวัตถุ ภาษาเชิงวัตถุนั้นเป็นฉากที่มีการจัดกลุ่ม แต่เนื่องจากมีภาษาเชิงวัตถุ (OCaml และ Scala เป็นตัวอย่าง)

คุณยังสามารถภาษากลุ่มโดยการพิมพ์: แบบคงที่และแบบไดนามิก ภาษาที่พิมพ์แบบสแตติกเป็นภาษาที่ตรวจสอบการพิมพ์ (และบังคับใช้โดยทั่วไป) ก่อนที่จะเรียกใช้โปรแกรม (โดยทั่วไปจะอยู่ในช่วงของการคอมไพล์) ภาษาที่พิมพ์แบบไดนามิกเลื่อนการตรวจสอบประเภทไปยังรันไทม์ C, C ++ และ Java เป็นภาษาที่พิมพ์แบบคงที่ Python, Ruby, JavaScript และ Objective-C เป็นภาษาที่พิมพ์แบบไดนามิก นอกจากนี้ยังมีuntypedภาษาซึ่งรวมถึงการเขียนโปรแกรมภาษา Forth

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


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

ภาษาสคริปต์เช่น VBScript จะเข้ากับเรื่องนี้อย่างไร มันอาจเป็นขั้นตอนเล็กน้อยและ OO นิดหน่อยเพราะมันสามารถสร้างประเภทต่าง ๆ ได้ดังนั้นมันจะเป็นลูกผสมหรือไม่?
JB King

นี่คือสิ่งที่ฉันกำลังมองหา ขอบคุณมาก.
sova

3
@JB King OOP ภาษามักจะเป็นขั้นตอนอย่างน้อยภายในร่างกายวิธีการ นอกจากนี้ยังเป็นความเข้าใจผิดที่ OOP หมายถึง "วัตถุ" ภาษาจำนวนมากมีชนิดข้อมูลและวัตถุ มีการถกเถียงกันมากมายเกี่ยวกับคำจำกัดความที่แน่นอนของ OOP คืออะไร แต่มักจะรวมถึงการสืบทอดและ / หรือการห่อหุ้ม (รัฐส่วนตัว) เป็นประเด็นหลัก ภาษาที่ไม่มีในบางรูปแบบอาจเป็นการยากที่จะจำแนกเป็นภาษา OOP
CodexArcanum

2
@ SOVA ฉันสามารถนึกได้ถึงสองภาษาที่ทำงานแบบนั้น Erlang ขึ้นอยู่กับการประมวลผลแบบขนาน แต่ถ้าคุณต้องการสิ่งที่ฉันพูดถึงมากขึ้นอย่างแน่นอนคุณควรมองเข้าไปที่ Polyphonic C # มันเป็นภาษาการวิจัย (ตอนนี้ถูกพับเป็น C-omega) โดยใช้ Pi-แคลคูลัส (เช่นวิธีที่ FP ยึดตามแลมบ์ดาแล็บ) Pi-Calc ขึ้นอยู่กับหน่วยของกระบวนการและคุณประกาศกระบวนการและการรวมกันของซิงโครนัสและ asych โทรเข้ามา ดูที่ลูกศรใน FP โดยเฉพาะ Haskell ด้วย ลูกศรเป็นอย่างมาก
CodexArcanum

12
  • การชุมนุม
  • ขั้นตอน
    • ขั้นพื้นฐาน
    • C
  • เชิงวัตถุ
    • C #
    • ชวา
  • ที่เปิดเผย
    • อารัมภบท
    • SQL
  • การทำงาน
    • เสียงกระเพื่อม
    • Haskell

สิ่งเหล่านี้เป็นตัวหลัก แต่มีกระบวนทัศน์อื่นอีกมากมายและมีการทับซ้อนกันระหว่างพวกเขามากมาย


วิธีการเกี่ยวกับการประกาศ (เช่น Prolog, SQL)
Bruce Alderman

@ บรูซ, ได้รับเลยตอนนี้

ใช่นี่เป็นความคิดทั่วไปที่ฉันได้เรียนรู้ที่ไหนสักแห่งระหว่างทาง
sevenseacat

6
ไม่ควรพิจารณาขั้นตอนการประกอบ
MattDavey

2
concatenative (อิงตามสแต็ก) ภาษาโปรแกรมเช่น Forth และ Factor คุณสามารถพิจารณามันเป็นประเภทของการเขียนโปรแกรมฟังก์ชั่น แต่มันอาจแตกต่างกันพอที่จะได้รับการกล่าวถึง en.wikipedia.org/wiki/Concatenative_programming_language
KChaloux

11

สำหรับประเภทของภาษาการเขียนโปรแกรม (Paradigms) ดูที่นี่:
http://en.wikipedia.org/wiki/Programming_paradigm

สำหรับลักษณะอื่น ๆ ของภาษาการเขียนโปรแกรม (เช่น Type Systems) ดูที่นี่: http://en.wikipedia.org/wiki/Programming_language


ah! "กระบวนทัศน์" เป็นคำที่ดี! ขอบคุณ
sova

@sova ฉันจะยอมรับว่านี่เป็นคำตอบที่ดีที่สุดเพราะมีกระบวนทัศน์จำนวนมากเกินไปที่จะแสดงรายการในคำตอบ P.SE ซึ่งน้อยกว่ามากที่จะอธิบายความแตกต่างของแต่ละคน
Rei Miyasaka

9

คลิกที่ภาพเพื่อดู PDF กรอบความคิดการเขียนโปรแกรมโปสเตอร์

คุณควรดูที่กระบวนทัศน์การเขียนโปรแกรมสำหรับ Dummies: สิ่งที่โปรแกรมเมอร์ทุกคนควรรู้โดย Peter Van Roy นี่จะให้ภาพรวมเกี่ยวกับวิธีการใช้งานภายนอก

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


6
  • ขั้นตอน: ชุดประกอบ, Java, C #, F #, Lisp, Fortran

  • ตั้งค่าตาม: SQL

  • รูปแบบตาม: Perl, Regex, Snobol

  • โครงสร้างพื้นฐาน: XSLT

  • Array based: APL


2
+1 สำหรับการใช้การจำแนกประเภทที่แตกต่างกันและสำหรับการรับรู้ว่า "ขั้นตอน" ในความเป็นจริงมีการจำแนกประเภทของคนอื่นมากที่สุด (แน่นอนว่ามีเพียงหมายความว่าคำมีความหมายน้อยมากและเนื้อสัตว์ที่อยู่ในเขตการปกครองดังกล่าว)
ฮาเวียร์

4

มีหลายวิธีที่จะตอบคำถามนี้ แต่ในแง่ที่พวกเขาสามารถแบ่งได้เป็น:

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

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

ภาษาระดับสูง: ภาษาระดับสูงเป็นสิ่งที่โปรแกรมเมอร์ส่วนใหญ่ใช้ในปัจจุบัน ภาษาเช่น C, C ++ และ Java เป็นภาษาระดับสูงทั้งหมด ข้อดีของภาษาระดับสูงคือสามารถอ่านและพกพาได้ ข้อเสียของภาษาระดับสูงคือภาษามีประสิทธิภาพน้อยกว่าภาษาแอสเซมบลี เนื่องจากคำสั่งเดียวในภาษาระดับสูงถูกแปลเป็นคำสั่งภาษาเครื่องจำนวนมาก

ภาษาระดับสูงสามารถจำแนกได้ดังนี้:

  1. ภาษาที่ใช้งานได้:ในภาษาที่ใช้งานได้โปรแกรมจะแบ่งออกเป็นคำจำกัดความของฟังก์ชัน ภาษาหน้าที่เป็นภาษาที่เปิดเผย พวกเขาส่วนใหญ่จะขึ้นอยู่กับแลมบ์ดาแคลคูลัสที่พิมพ์ด้วยค่าคงที่ ภาษาฟังก์ชั่นที่มีชื่อเสียงบางส่วนคือ Scala, F #, Clojure และ Lisp

  2. ภาษาเชิงโพรซีเดอร์:ในภาษาเชิงโพรซีเดอร์โปรแกรมถูกเขียนในลำดับขั้นตอนที่ควรปฏิบัติตามเพื่อสร้างผลลัพธ์ COBOL, FORTRAN และ C เป็นภาษาขั้นตอนบางอย่าง

  3. ภาษาโปรแกรมเชิงวัตถุ:ในภาษา OOP โปรแกรมจะแบ่งออกเป็นวัตถุที่มีข้อมูลรวมถึงวิธีการที่ทำงานกับข้อมูล Java, C # และ C ++ เป็นภาษา OOP

  4. ภาษาการเขียนโปรแกรมลอจิก:ลอจิกภาษาถูกใช้เพื่อสร้างโปรแกรมที่ช่วยให้คอมพิวเตอร์มีเหตุผลอย่างมีเหตุผล เช่นภาษาลอจิก

สำหรับการศึกษาเชิงลึกโปรดดูที่:


3

ฉันมักจะคิดในแง่ของคุณสมบัติ:

ไวยากรณ์:

C-Based หรือ what-have-you Java มีไวยากรณ์ที่ใช้ C ฉันขอแนะนำให้ลองใช้สิ่งที่คล้ายกับ Python หรือ Ruby เพื่อนำหน้าออกมาจากไวยากรณ์และการพิจารณาเพิ่มเติมในแง่ของพื้นฐานของการทำงานของภาษาที่กำหนด ฉันเห็นว่าไม่จำเป็นต้องใช้ไวยากรณ์เป็นกลุ่มมากกว่า C-based และไม่มีปัญหาการสร้างบล็อกรอบพื้นที่สีขาว

รวบรวมกับตีความ w Build-Process vs. Interpreted / Console:

ฉันมีความคุ้นเคยน้อยมากกับการรวบรวมเวลากับข้อกังวลเกี่ยวกับสภาพแวดล้อมแบบรันไทม์ แต่ฉันเข้าใจว่ามีความกังวลมากมายที่ฉันไม่ได้คิดถึง

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

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

การพิมพ์แบบไดนามิกและแบบเข้มงวด:

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

ขอบเขตระดับบล็อกกับขอบเขตของฟังก์ชันเทียบกับ?:

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

คลาสสิก OOP เทียบกับ Prototypal OOP เทียบกับเกือบ -OOP (structs ใน C?) เทียบกับ Non-OOP:

แม้ใน OOP แบบอิงคลาสก็มีช่องว่างมากมายสำหรับการเปลี่ยนแปลง ไม่ว่าคุณจะสามารถทำหลายมรดก (ew, ดีเกิน, ew), กำหนดอินเตอร์เฟส, ฯลฯ ...

ในจาวาสคริปต์เรามี OOP ต้นแบบลูกผสมแบบผาดโผนที่วัตถุมีความเรียบง่ายมากไม่แน่นอนสูง แต่เรายังคงมีความสามารถในการแยกอินเทอร์เฟซจากข้อกังวลภายในซึ่ง IMO เป็นส่วนสำคัญของการห่อหุ้ม

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

ฟังก์ชั่นชั้นหนึ่ง:

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

ปิดกิจการ

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

เข้มงวด / เข้มงวด / ปลอดภัยเมื่อเทียบกับการมอบเชือกทั้งหมดที่คุณต้องการ:

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


ขอขอบคุณ เป็นเรื่องที่ดีมากที่ได้พยายามลงคะแนนเสียงโดยไม่มีคำอธิบาย
Erik Reppen

2

ฉันคิดว่าทางลัดสำหรับสิ่งเหล่านี้คือการเรียนรู้เสียงกระเพื่อมพอที่จะทำสิ่งที่มีประโยชน์กึ่ง กระบวนทัศน์ส่วนใหญ่เริ่มต้นจากวิธีการใช้ Lisp ดังนั้นจึงเป็นวิธีที่ง่ายในการลองสิ่งต่างๆ

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

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

อีกวิธีในการดูคือโครงสร้างการควบคุม เมื่อภาษาถูกดำเนินการ (ถ้ามี) สิ่งที่เป็นลำดับในสิ่งที่เกิดขึ้นเพื่อบรรลุสิ่งที่คุณต้องการ? ตัวอย่างเช่น: การดำเนินการแบบตรงๆแบบง่าย ๆ , การเรียกซ้ำ, Backtrack, parallelism หนึ่งที่ฉัน (ไอเจียมเนื้อเจียมตัว) ค้นพบคือการดำเนินการที่แตกต่างกัน

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


เย็น. ฉันจะเรียนรู้ LISP และได้รับความรู้แจ้ง น่าตื่นเต้น: D
sova

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

@ โซวา: สำหรับฉันแล้วทฤษฎีสารสนเทศเป็นการเปิดเผยที่ยิ่งใหญ่ (ทั้ง Shannon และ Kolmogorov) มันเกี่ยวกับความหมายของการเข้ารหัสและส่งผ่านช่องทางโดยมีแนวคิดเกี่ยวกับแบนด์วิดท์การตรวจจับข้อผิดพลาดการเข้ารหัสน้อยที่สุดการสุ่มและอื่น ๆ ดังนั้นการเข้ารหัสข้อมูลและอัลกอริธึมคือช่องทาง โปรแกรมเข้ารหัสข้อมูลและการเขียนโปรแกรมเป็นช่องทาง ดังนั้นข้อมูลอะไรที่เข้ารหัส? มันมาจากที่ไหนและเมื่อไหร่? มันจะไปไหน แหล่งที่มาของข้อผิดพลาด (เสียงรบกวน) คืออะไร พวกเขาแก้ไขอย่างไร ฉันพบว่ามุมมองที่มีประโยชน์
Mike Dunlavey

@sova: (ต่อ) คุณไม่จำเป็นต้องเรียนรู้คณิตศาสตร์ที่ผิดพลาด สำหรับฉันสิ่งที่สำคัญคือกรอบความคิดที่ทำให้ฉันคิดเกี่ยวกับสิ่งต่าง ๆ
Mike Dunlavey

1

ฉันต้องเพิ่มว่ามีภาษาการเขียนโปรแกรมสำหรับการใช้งานเฉพาะ สิ่งที่ควรคำนึงถึงคือ APT (Automatic Programmed Tool) ภาษาที่ใช้ในการผลิตสำหรับเครื่องมือเครื่องจักร


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

ฉันทำงานกับโปรแกรมที่สร้าง gcode สำหรับเครื่องกัด ฉันถืออย่างแท้จริงและเห็นผลลัพธ์ของการเขียนโปรแกรมข้อบกพร่องบ่อยครั้งที่ฉัน
David Thornley

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