ฉันจำเป็นต้องเข้าใจ Internals ของภาษาการเขียนโปรแกรมหรือไม่?


11

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

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


4
Internals มีความสำคัญเมื่อคุณต้องกังวลเกี่ยวกับประสิทธิภาพ
Gort the Robot

7
ฉันรู้ว่าค่อนข้างยุติธรรมเกี่ยวกับ CPython และ PyPy internals แต่ 80% ของเวลาที่พวกเขาไม่ได้ใช้งาน (หรือแม้แต่เป็นอันตรายเช่นเดียวกับที่ทำให้เสียสมาธิ) สำหรับการเขียนโปรแกรม Python ของฉัน ฉันดีใจที่ฉันรู้ว่าสิ่งอื่น ๆ อีก 20% และมันไม่เพียง แต่สำหรับประสิทธิภาพการทำงาน แต่ยังสำหรับการทำความเข้าใจข้อความแสดงข้อผิดพลาดที่โง่เขลาและการควบคุมพฤติกรรมที่ไม่ใช่แบบพกพา


2
ไม่และไม่ ไม่ซ้ำกันอย่างใดอย่างหนึ่ง

1
มันขึ้นอยู่กับสิ่งที่คุณหมายถึงโดย "the internals" แต่ฉันรู้ว่ามันไม่ใช่เรื่องแปลกสำหรับนักเขียนโปรแกรม C # และ Java อย่างมืออาชีพที่มีความเข้าใจ CLI หรือ JVM เป็นอย่างน้อย
user16764

คำตอบ:


8

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

  1. ความรู้เกี่ยวกับโครงสร้างข้อมูลและอัลกอริทึมจะช่วยให้คุณเลือกโครงสร้างข้อมูลที่เหมาะสมที่สุดสำหรับงานเฉพาะของคุณ บางภาษามีโครงสร้างข้อมูลเหล่านี้ภายใน

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

  3. การเขียนคอมไพเลอร์สำหรับภาษานั้น (หรือคอมไพเลอร์สำหรับภาษาอื่นในภาษานั้น) สามารถทำให้คุณมีความเข้าใจอย่างลึกซึ้งเกี่ยวกับภาษาและพัฒนาโปรแกรมของคุณเกินกว่าค่าเฉลี่ย

  4. การมีความเชี่ยวชาญในภาษาอื่น ๆ (โดยเฉพาะภาษาที่แตกต่างกัน) ทำให้คุณเป็นโปรแกรมเมอร์ที่ดีขึ้นในภาษาหลักของคุณเพราะคุณสามารถนำทักษะและเครื่องมือเหล่านั้นมาใช้ในภาษาหลักของคุณ

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


7

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

พูดง่าย ๆ ใช่ ตราบใดที่คุณสามารถแสดงออก (และเข้าใจผู้อื่น) ได้ดีคุณก็จะสามารถใช้ภาษาได้อย่างคล่องแคล่ว

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


0

ฉันจะกำหนด "ความชำนาญ" ด้วยภาษาเป็น:

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

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

ตัวอย่างเช่น: ฉันรู้ว่าทั้ง VB.NET และ C # ถูกคอมไพล์กับ IL ของ. NET (Intermediate Language) ซึ่งถูกคอมไพล์แล้วสำหรับเฟรมเวิร์กเป้าหมาย ฉันไม่ค่อยรู้เรื่อง IL มากนัก แต่ฉันรู้พอที่จะจดจำมันเมื่อฉันเห็นมันและเข้าใจในแง่ทั่วไปว่ามันจัดการกับบางสิ่งได้อย่างไร ฉันคิดว่าตัวเองเก่งใน C # แต่ไม่ใช่ใน VB.NET ถึงแม้ว่า "internals" จะเหมือนกันและความเข้าใจของฉันก็ไม่ลึกนัก

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