การเรียนรู้ภาษาการเขียนโปรแกรมแต่ละประเภท


24

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

ฉันได้เรียนรู้ภาษาขั้นตอน (Perl) แต่มีประเภทอื่นคืออะไร

อะไรคือความแตกต่างระหว่างพวกเขาและสิ่งที่เป็นตัวอย่างของแต่ละคน?


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

1
ฉันจะลืมหมวดหมู่ - ถ้าคุณสนใจที่จะเรียนรู้จากภาษาฉันจะแนะนำทั้ง Lisp และ Scala ถ้าคุณสามารถจัดการกับทั้งสองได้คุณได้ครอบคลุมมาก
Bill K

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

คำตอบ:


34

แม้ว่าคำศัพท์จะไม่ได้มาตรฐาน แต่เป็นวิธีทั่วไปในการจัดหมวดหมู่กระบวนทัศน์การเขียนโปรแกรมที่สำคัญ

  • ขั้นตอน
  • การทำงาน
  • ตรรกะ
  • เชิงวัตถุ
  • ทั่วไป

คุณดูเหมือนจะรู้แล้วว่าการเขียนโปรแกรมเชิงโพรซีเดอร์เป็นอย่างไร

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

ในตรรกะการเขียนโปรแกรมที่คุณกำหนดภาคที่อธิบายความสัมพันธ์ระหว่างหน่วยงานเช่นหรือpresident(Obama, USA) president(Medvedev, Russia)เพรดิเคตเหล่านี้มีความซับซ้อนมากและเกี่ยวข้องกับตัวแปรไม่ใช่แค่ค่าตามตัวอักษร เมื่อคุณระบุภาคแสดงทั้งหมดของคุณแล้วคุณสามารถถามคำถามของระบบและรับคำตอบที่มีเหตุผล

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

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

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

void swap(int, int);
void swap(float, float);
....

คุณจะเขียน

void swap(T, T);

ครั้งเดียวและให้คอมไพเลอร์สร้างรหัสเฉพาะสำหรับสิ่งที่Tอาจจะเป็นเมื่อswap()มีการใช้งานจริงในรหัส

การเขียนโปรแกรมทั่วไปได้รับการสนับสนุนในองศาที่แตกต่างโดย C ++, Java และ C #

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


2
SQL ประเภทใดจะตกอยู่ใน?
Kirk Kuykendall

@ KirkKuykendall SQL จะเป็นผู้เชี่ยวชาญหรือภาษา "น้อย"
Kevin Lacquement

17
SQL เป็นภาษาที่ประกาศ คุณบอกสิ่งที่คุณต้องการมันจะหาวิธีที่จะได้มันมา (ภาษา "Logical" เช่น Prolog เป็นชุดย่อยของภาษา Declarative ที่แตกต่างกัน)
Izkata

3
เราสามารถอธิบายขั้นตอนเพื่อให้คำตอบสมบูรณ์ยิ่งขึ้นได้ไหม
deworde

3
@Dima สรุปที่ดี อย่างไรก็ตาม nitpick ที่ค่อนข้างน้อย: "การเขียนโปรแกรมทั่วไป" ไม่ได้เกิดขึ้นจากการใช้เทมเพลตใน C ++ และยังใช้บ่อยในภาษาที่ใช้งานได้เช่น Haskell
Andres F.

11

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

  • ขั้นตอน / โครงสร้าง
  • การทำงาน
  • เชิงวัตถุ
  • กิจกรรมที่ขับเคลื่อนและมุมมองที่มุ่งเน้น
  • ทั่วไป
  • ตรรกะ

แต่ภาษาต่างกันด้วยวิธีอื่นเช่นกัน:

  • ระบบการพิมพ์ (แบบไดนามิกกับการพิมพ์แบบคงที่และแบบแข็งแรงและแบบอ่อนแอ)
  • สร้างกระบวนการและสภาพแวดล้อมรันไทม์ (ตีความ, แปลโดยรวบรวม, รวบรวมทั้งหมด)
  • การจัดการหน่วยความจำ (ด้วยตนเองเช่น C / C ++, การรวบรวมขยะอัตโนมัติบังคับเช่น Java, ตัวเลือก GC เช่น D, ... )
  • วินัยการประเมินผล (กระตือรือร้นกับขี้เกียจ; ภาษาส่วนใหญ่มีความกระตือรือร้นโดยค่าเริ่มต้น
  • กฎการกำหนดขอบเขต (เปรียบเทียบการทำงานของขอบเขตใน PHP, Javascript และ C, สามภาษาที่ค่อนข้างคล้ายกันในแง่ของไวยากรณ์)

2

มีกระบวนทัศน์การเขียนโปรแกรมที่แตกต่างกันหลายอย่างที่กำลังอยู่ในสมัย:

  • Object Oriented - VB.NET, C #, Java ตกอยู่ในหมวดหมู่นี้ รหัสจะถูกจัดเรียงรอบวัตถุที่มีพฤติกรรมและข้อมูลที่เกี่ยวข้องและสื่อสารกันโดยการส่งข้อความ
  • หน้าที่ - Haskel, Scheme, Lisp และ F # อยู่ในหมวดหมู่นี้ ฟังก์ชั่นเพียวที่ไม่มีผลข้างเคียง คิดว่าฟังก์ชั่นเหมือนในคณิตศาสตร์ บ่อยครั้งที่หนึ่งสามารถขยายภาษาของตัวเองผ่านการสร้าง

เป็นประเภทอื่น ๆ เท่านั้นหรือไม่
แบบไดนามิก

@ perl.j - ไม่ แต่นี่คือรายการหลักที่เห็นการแพร่กระจายที่กว้างใช้วันนี้ ดูวิกิพีเดีย - Programming กระบวนทัศน์
Oded

@ perl.j ยังมี Stack-based เช่น Forth และ Postscript ลอจิก: เช่น Prolog
Jetti

2
และประเภทซีโรคือ C;)
yati sagade

คำถามจริงคือจำนวน Dev เหล่านี้จำเป็นต้องเขียนโค้ดปัญหาการเขียนโปรแกรมส่วนใหญ่อย่างมีประสิทธิภาพ
JeffO

0

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

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


0

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

  • ภาษาสเปรดชีต (Excel, Google Forms): ออกแบบมาเพื่อจัดการข้อมูลตาราง
  • Array Languages (APL, J): ออกแบบมาเพื่อประมวลผลอาร์เรย์หลายมิติอย่างรวดเร็ว ใน J (+/ % #)&.:*:คำนวณค่า RMS ของอาร์เรย์ มีชื่อเสียงในเรื่องความกระชับฉาวโฉ่ว่าไม่สามารถอ่านได้
  • ภาษาอัตโนมัติ (AutoHotkey, Bash): ออกแบบมาเพื่อปรับปรุงงานทั่วไปเช่นการกรอกแบบฟอร์มการอัพโหลดไฟล์ ฯลฯ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.