งานคอมไพเลอร์ - จำเป็นต้องมีการศึกษาเท่าไหร่ [ปิด]


15

ฉันได้รับแรงบันดาลใจจากการก่อสร้างคอมไพเลอร์เป็นวิชาคำถามและคิดว่าฉันจะถามคำถามนี้

ฉันได้ยินจากคนไม่กี่คนที่พวกเขามี "ทีมคอมไพเลอร์" ที่ดี (อย่าถามที่ฉันได้ยินฉันจำไม่ได้) ดังนั้นทำให้ฉันสงสัยว่าทำไมคนถึงได้ทำงานในทีมเช่นนี้ ?

ฉันรู้ว่ามีชั้นเรียนในหลักสูตรปริญญาตรีและเป็นเช่นนั้น แต่เป็นสิ่งที่การศึกษาระดับปริญญาโทจะต่ำสุด (เช่นปริญญาโทอย่างน้อย)?

ฉันเริ่มต้นปริญญาโทสาขาวิทยาการคอมพิวเตอร์ในอีกสองเดือนและโรงเรียนที่ฉันกำลังจะมีสองชั้นเรียนคอมไพเลอร์ซึ่งจะเพียงพอที่จะได้งานพัฒนาคอมไพเลอร์หรือจะต้องใช้เวลามากขึ้นหรือไม่


2
การมีส่วนร่วมในโครงการคอมไพเลอร์โอเพนซอร์ส (เช่น llvm) จะเป็นประโยชน์อย่างมาก
SK-logic

Ditta @ SK-Logic ฉันกำลังเขียนคอมไพเลอร์สำหรับ IB CS ขั้นสุดท้ายของฉัน การได้รับประสบการณ์ในการเขียนคอมไพเลอร์น่าจะเป็นวิธีที่ดีที่สุด ...

1
ฉันจะชี้ให้เห็นว่าหนึ่งในชื่อที่ยิ่งใหญ่ที่สุดในคอมไพเลอร์และรันไทม์ไม่ได้รับปริญญา Anders Hejlsberg ... สมองเบื้องหลัง Turbo Pascal, Delphi, C #, TypeScript
Matthew Whited

คำตอบ:


17

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

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


ขอบคุณสำหรับคำตอบ คุณจะให้โอกาสกับคนที่สอนตัวเองและไม่มีพื้นฐานด้านการศึกษาหรือไม่?
Jetti

3
เพียงชำระเงินหลักสูตรของ MIT OCW
segfault

3
@Jetti: ฉันจะให้โอกาสกับทุกคนที่ได้ทำผลงานที่สำคัญในการคอมไพเลอร์ที่มาเปิดปีที่ผ่านมาสิ่งที่พื้นหลังของพวกเขา :)
Matthieu เอ็ม

@Jetti: ฉันจะแน่นอนเมื่อพวกเขานำหลักฐานที่พวกเขามีความรู้จริง ตัวอย่างเช่นหากพวกเขาเขียนการทดสอบเพื่อให้เกิดการสร้างโค้ดคอมไพเลอร์ให้เหมาะสมพวกเขาน่าจะมีค่ามากกว่าบัณฑิตระดับบัณฑิต
sharptooth

มันน่าสนใจยิ่งขึ้นเมื่อคอมไพเลอร์เขียนด้วยภาษาของมันเอง
ott--

5

ขั้นตอนแรกคือการมีพื้นฐานด้าน CS ที่ดี - อาจยิ่งดีขึ้น แต่อย่างน้อยก็สำเร็จการศึกษาระดับปริญญาตรีเกียรตินิยม จริงๆแล้วมีเหตุผลบางประการสำหรับเรื่องนี้ในคอมไพเลอร์นั้น (โดยทั่วไปนักแปลภาษา) และเทคนิคที่เกี่ยวข้อง (การเลซซิ่ง, การแจง) เป็นการศึกษาพื้นฐานของวิทยาศาสตร์คอมพิวเตอร์เป็นอย่างดี

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

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

ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้พัฒนาคอมไพเลอร์และมีส่วนร่วมในการสัมภาษณ์ผู้สมัคร


5

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

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


5

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


1
ฟังดูเหมือนบทบาทการวิจัยและพัฒนามากกว่า "บทบาทด้านวิศวกรรมผลิตภัณฑ์" ฉันเป็นวิศวกรผลิตภัณฑ์เกี่ยวกับ armcc และ LLVM (คอมไพเลอร์คุณภาพการผลิต C / C ++ สองรายการ) และไม่เคยต้องการหัวข้อใด ๆ เลยและฉันไม่ได้เห็นการอ้างอิงถึงพวกเขาในช่วง 2 ปีที่ฉันทำงานในพื้นที่นี้
dune.rocks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.