พื้นฐานของภาษาส่วนใหญ่นั้นเหมือนกันหมด
พวกเขาเสนอ:
- ประเภทข้อมูลเกลา: โดยปกติแล้วจะเป็นบูลีนจำนวนเต็มลอยและตัว
- ชนิดข้อมูลแบบผสม: อาร์เรย์ (สตริงเป็นกรณีพิเศษ) และโครงสร้าง
- โครงสร้างรหัสพื้นฐาน: เลขคณิตมากกว่าสเกลาร์, การเข้าถึงอาร์เรย์ / โครงสร้าง, การมอบหมาย
- โครงสร้างการควบคุมแบบง่าย: if-then, if-then-else, ในขณะที่สำหรับลูป
- แพคเกจของบล็อครหัส: ฟังก์ชันขั้นตอนพร้อมพารามิเตอร์
- ขอบเขต: พื้นที่ที่ตัวระบุมีความหมายเฉพาะ
หากคุณเข้าใจสิ่งนี้คุณจะเข้าใจภาษา 90% ของโลก สิ่งที่ทำให้ภาษาเหล่านี้เข้าใจยากขึ้นเล็กน้อยคือความหลากหลายของไวยากรณ์แปลก ๆ ที่คนทั่วไปใช้ในการพูดสิ่งพื้นฐานเดียวกัน บางคนใช้สัญกรณ์สั้นที่เกี่ยวข้องกับเครื่องหมายวรรคตอนแปลก (APL เป็นสุดขีด) บางคนใช้คำหลักจำนวนมาก (ภาษาโคบอลเป็นตัวแทนที่ดีเยี่ยม) นั่นไม่สำคัญหรอก สิ่งที่สำคัญคือถ้าภาษานั้นสมบูรณ์เพียงพอสำหรับตัวเองในการทำงานที่ซับซ้อนโดยไม่ทำให้คุณขาดทรงผม (ลองเข้ารหัสแฮ็คสตริงที่ร้ายแรงในสคริปต์เชลล์ของ Window DOS: มันเป็นความสามารถของทัวริง แต่แย่มากในทุกสิ่ง)
ข้อเสนอภาษาขั้นตอนที่น่าสนใจมากขึ้น
- ขอบเขตที่ซ้อนกันหรือคำศัพท์เนมสเปซ
- พอยน์เตอร์อนุญาตให้เอนทิตีหนึ่งอ้างถึงอีกองค์กรหนึ่งด้วยการจัดสรรพื้นที่เก็บข้อมูลแบบไดนามิก
- บรรจุภัณฑ์ของรหัสที่เกี่ยวข้อง: แพคเกจวัตถุที่มีวิธีการลักษณะ
- การควบคุมที่มีความซับซ้อนมากขึ้น: การเรียกซ้ำการดำเนินการปิด
- ตัวดำเนินการพิเศษ: การดำเนินการกับสตริงและอาร์เรย์ฟังก์ชันคณิตศาสตร์
แม้ว่าจะไม่ได้เป็นคุณสมบัติทางเทคนิคของกล่องกรองข้อมูล แต่เป็นคุณสมบัติของระบบนิเวศที่ภาษาดังกล่าวอาศัยอยู่เป็นห้องสมุดที่สามารถเข้าถึงได้ง่ายหรือมีภาษาเป็นส่วนหนึ่งของเครื่องมือในการพัฒนา การมีสิ่งอำนวยความสะดวกในห้องสมุดที่หลากหลายทำให้การเขียนแอปพลิเคชั่นง่ายขึ้นหรือเร็วขึ้นเพราะไม่จำเป็นต้องบูรณาการสิ่งที่ห้องสมุดทำ ในขณะที่ Java และ C # มีการคิดอย่างกว้างขวางว่าเป็นภาษาที่ดีทั้งในและของตัวเองสิ่งที่ทำให้พวกเขามีประโยชน์อย่างแท้จริงคือห้องสมุดขนาดใหญ่ที่มาพร้อมกับพวกเขาและไลบรารีส่วนขยายที่หาได้ง่าย
ภาษาที่ยากต่อการเข้าใจคือภาษาที่ไม่ใช้ขั้นตอน:
- ภาษาที่ใช้งานได้จริงโดยไม่มีการมอบหมายหรือผลข้างเคียง
- ภาษาลอจิกเช่น Prolog ซึ่งการคำนวณเชิงสัญลักษณ์และการรวมเกิดขึ้น
- ภาษาที่จับคู่รูปแบบซึ่งคุณระบุรูปร่างที่ตรงกับปัญหาและบ่อยครั้งที่การกระทำถูกเรียกใช้งานโดยการจับคู่
- ภาษาข้อ จำกัด ซึ่งช่วยให้คุณระบุความสัมพันธ์และแก้สมการโดยอัตโนมัติ
- ภาษาคำอธิบายฮาร์ดแวร์ซึ่งทุกอย่างดำเนินการในแบบคู่ขนาน
- ภาษาเฉพาะโดเมนเช่น SQL, Colored Petri Nets เป็นต้น
มีสองรูปแบบการดำเนินการที่สำคัญสำหรับภาษา:
- ข้อความอ้างอิงซึ่งเอนทิตีของตัวระบุชื่อและการไหลของข้อมูลถูกเข้ารหัสโดยปริยายในสูตรที่ใช้ตัวระบุเพื่อตั้งชื่อเอนทิตี (Java, APL, ... )
- กราฟิกซึ่งเอนทิตีถูกวาดเป็นโหนดและความสัมพันธ์ระหว่างเอนทิตีถูกวาดเป็นเส้นโค้งที่ชัดเจนระหว่างโหนดเหล่านั้น (UML, Simulink, LabView)
ภาษากราฟิกมักจะอนุญาตให้มีข้อความย่อยเป็นข้อความประกอบในโหนดและบนส่วนโค้ง ภาษากราฟิกอื่น ๆ อนุญาตให้ใช้กราฟซ้ำ (พร้อมข้อความ :) ในโหนดและบนส่วนโค้ง ภาษากราฟิกที่แปลกจริง ๆ อนุญาตให้กราฟหมายเหตุประกอบชี้ไปที่กราฟที่มีการเพิ่มความคิดเห็น
ภาษาเหล่านี้ส่วนใหญ่ใช้รูปแบบการคำนวณจำนวนน้อยมาก:
- แคลคูลัสแลมบ์ดา (พื้นฐานสำหรับเสียงกระเพื่อมและภาษาที่ใช้งานได้ทั้งหมด)
- ระบบโพสต์ (หรือเทคนิคการเขียนสตริง / ต้นไม้ / กราฟ)
- เครื่องทัวริง (การปรับเปลี่ยนสถานะและการเลือกเซลล์หน่วยความจำใหม่)
ด้วยความมุ่งเน้นของภาคอุตสาหกรรมส่วนใหญ่เกี่ยวกับภาษาเชิงปฏิบัติและโครงสร้างการควบคุมที่ซับซ้อนคุณจะได้รับบริการอย่างดีถ้าคุณเรียนรู้ภาษาที่น่าสนใจมากขึ้นในหมวดหมู่นี้โดยเฉพาะอย่างยิ่งหากมีการวางแนววัตถุบางประเภท
ผมขอแนะนำให้เรียนรู้โครงการโดยเฉพาะอย่างยิ่งจากหนังสือที่ยอดเยี่ยมจริงๆ:
โครงสร้างและการแปลความหมายของโปรแกรมคอมพิวเตอร์ สิ่งนี้อธิบายแนวคิดพื้นฐานทั้งหมดเหล่านี้ หากคุณรู้สิ่งนี้ภาษาอื่น ๆ จะดูค่อนข้างตรงไปตรงมายกเว้นไวยากรณ์ที่โง่เขลา