36 คะแนน โดย GN⁺ 2025-11-10 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • วิศวกรคอมไพเลอร์ คือ สายงานวิศวกรรมซอฟต์แวร์ ที่ไม่ได้ออกแบบภาษาโปรแกรมขึ้นมาโดยตรง แต่ทำให้ภาษาที่มีอยู่ทำงานได้เร็วและมีประสิทธิภาพมากขึ้น
  • งานสายนี้มีอยู่เพียงส่วนน้อยมากเมื่อเทียบกับตำแหน่งวิศวกรซอฟต์แวร์ทั้งหมด และ มีอุปสรรคในการเข้าสู่วงการสูงพร้อมทั้งความต้องการที่จำกัด
  • บริษัทที่รับสมัครมีหลากหลายทั้ง สตาร์ตอัป บริษัทเทคขนาดใหญ่ แวดวงวิชาการ ภาคการเงิน และโครงการโอเพนซอร์ส แต่ส่วนใหญ่ยังคงเน้นผู้มีประสบการณ์
  • ในการสัมภาษณ์มักประเมินเรื่อง การเขียนอัลกอริทึมด้วย C++, การออกแบบภาษา, การเพิ่มประสิทธิภาพคอมไพเลอร์, และความรู้ด้านระบบระดับล่าง เป็นหลัก
  • การเตรียมตัวด้วยคอร์สจาก MIT และแหล่งเรียนรู้โอเพนซอร์ส รวมถึง การสร้างเครือข่ายอย่างต่อเนื่องและการขอ referral คือกุญแจสำคัญสู่ความสำเร็จในการหางาน

วิศวกรคอมไพเลอร์คืออะไร

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

เหตุผลที่เขียนบทความนี้

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

สรุปเส้นทางอาชีพส่วนตัว

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

ที่ไหนบ้างที่จ้างวิศวกรคอมไพเลอร์

  • จาก Indeed คำว่า “software engineer” มี 116,000 ตำแหน่ง ขณะที่ “compiler engineer” มีเพียงราว 400 ตำแหน่ง
  • สตาร์ตอัป: มีโอกาสรับคนจบใหม่มากกว่า และผู้เขียนเองก็เริ่มงานแรกที่สตาร์ตอัป
  • บริษัทเทคขนาดใหญ่: พบมากในบริษัทสายฮาร์ดแวร์และยานยนต์ เช่น Tesla, Waymo, Nvidia
    • สำหรับบริษัทกลุ่ม FAANG ก็มีกรณีที่ได้เข้าทำงานผ่านการแปลงจากฝึกงานเป็นพนักงานประจำ
  • แวดวงวิชาการ: โอกาสค่อนข้างจำกัดจากการลดลงของงบวิจัย
  • บริษัทการเงินเชิงควอนต์: เช่น Jane Street, Five Rings ที่ต้องการทักษะด้านคอมพิวติ้งสมรรถนะสูง
  • โครงการโอเพนซอร์ส: มีบางสตาร์ตอัปที่เปิดรับคนทำงานด้านนี้

กลยุทธ์เรซูเม่และการสร้างเครือข่าย

  • referral คือแนวทางที่ได้ผลที่สุด
    • ขอการแนะนำจากคนรู้จักหรือคนรู้จักของคนรู้จัก
    • ผู้เขียนระบุความสนใจไว้ในโปรไฟล์โซเชียลว่า "Rona likes compilers" เพื่อเปิดโอกาสด้านการสร้างเครือข่าย และก็เชื่อมไปถึงการสัมภาษณ์จริงได้
  • ภูมิหลังส่วนตัว เช่น การมีสัญชาติอเมริกันและวุฒิจาก MIT ก็ช่วยให้ได้เปรียบ

รูปแบบการสัมภาษณ์

  • อัลกอริทึมสไตล์ LeetCode: โจทย์ whiteboarding ด้านโครงสร้างข้อมูล เช่น BFS, priority queue โดยส่วนใหญ่ใช้ C++
  • การออกแบบภาษา: เขียน ไวยากรณ์ (grammar) ของภาษาง่าย ๆ ภายใต้ข้อจำกัดที่กำหนด
  • คำถามเกี่ยวกับภาษาโปรแกรม: เช่น ชอบภาษาโปรแกรมใดและเพราะอะไร
  • ตัวแทนระดับกลาง (IR): การตีความและแปลง x86 assembly รวมถึงโจทย์ที่อิงกับ MLIR
  • optimization pass: ในโจทย์ MLIR มีการเขียน algebraic simplification optimization pass รวมถึงทำ pass สำหรับ constant propagation และ dead code elimination
  • พื้นฐานคอมไพเลอร์: อธิบายองค์ประกอบของคอมไพเลอร์ เทคนิคการเพิ่มประสิทธิภาพ และความต่างระหว่าง static กับ dynamic compiler
  • ทฤษฎีกราฟ: มีคำถามเกี่ยวกับการแทนคอมไพเลอร์แบบอิงกราฟ เช่น control flow graph และ register allocation (ได้รับอิทธิพลจากหัวข้อวิทยานิพนธ์ระดับปริญญาตรีของผู้เขียน)
  • หัวข้อระบบระดับล่าง: เช่น deadlock, race condition, special-purpose register, instruction pipeline, memory allocation, การแทนค่าแบบไบนารีและการคำนวณ, garbage collection
  • คำถามเชิงพฤติกรรม: เช่น “ทำไมถึงอยากทำงานด้านคอมไพเลอร์” ที่เน้นแรงจูงใจเป็นหลัก

กระบวนการเตรียมสัมภาษณ์

  • เรียนเป็นหลักจาก MIT OCW
    • Computation Structures: pipeline, assembly, การคำนวณแบบไบนารี และแนวคิดระดับล่างอื่น ๆ
    • Computer Language Engineering: ประสบการณ์กับ C++ และโค้ดเบสขนาดใหญ่
    • Performance Engineering: เน้นการเพิ่มประสิทธิภาพ และมีบทบาทสำคัญมากต่อการได้งานปัจจุบัน
    • Theory of Computation: ช่วยให้เข้าใจการออกแบบไวยากรณ์ของภาษา
  • ยังอ้างอิงการเรียนด้วยตนเองจาก Advanced Compilers ของ Cornell ด้วย

สิ่งที่ควรปรับปรุงและบทเรียนที่ได้

  • ไม่มีเมนเทอร์: ทำให้ตระหนักว่าจำเป็นต้องสร้างเครือข่ายผ่าน LinkedIn
  • หนังสือเฉพาะทาง (Engineering a Compiler, Dragon Book) มีประโยชน์สำหรับทบทวนแนวคิด แต่มีข้อจำกัดเมื่อใช้เตรียมสัมภาษณ์จริง
  • ไม่ได้จดคำถามสัมภาษณ์ไว้: การไม่บันทึกคำถามหลังสัมภาษณ์เพื่อกลับมาทบทวนถือเป็นความผิดพลาด
  • มีส่วนร่วมกับโอเพนซอร์สน้อยเกินไป: เคยดูโปรเจกต์อย่าง Carbon, Mojo แต่ไม่ได้มีส่วนร่วมจริง ทั้งที่โอเพนซอร์ส มีประโยชน์มากต่อการเรียนรู้และการสร้างเครือข่าย

เหตุผลที่เลือกสายคอมไพเลอร์

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

ตลาดงานสายเทคและคำแนะนำ

  • เพื่อนของผู้เขียนในโอเรกอน (เช่น Oregon State และมหาวิทยาลัยรัฐที่ไม่ได้มีชื่อเสียงมาก) สมัครงานเป็นร้อยตำแหน่งแต่ได้สัมภาษณ์เพียงราว 4 ครั้ง
  • ใช้ทรัพยากรที่มีให้เต็มที่และสร้างความแตกต่าง: เข้าร่วมคอมมูนิตีโอเพนซอร์ส ใช้โซเชียลมีเดีย และใช้ทรัพยากรของมหาวิทยาลัยให้เป็นประโยชน์ (แม้จะเป็นชมรมที่ไม่มีใครมา ก็ลองเริ่มเอง)
  • พบปะกันตัวต่อตัว: เช่น เข้าร่วมกลุ่มอ่านหนังสือด้านระบบ (มีการกล่าวถึงกลุ่ม systems ในนิวยอร์กของ Eric)
  • ยังคิดจริงจังถึงการเริ่มช่อง YouTube เกี่ยวกับคอมไพเลอร์ด้วย (แม้จะรู้สึกเขินหน้ากล้อง)
  • สิ่งเหล่านี้ ไม่ได้การันตีว่าจะได้งานโดยตรง แต่ช่วยเพิ่มโอกาสให้มากขึ้น

บทสรุปและประสบการณ์ส่วนตัว

  • ก่อนเข้าสตาร์ตอัปในปี 2024 ผู้เขียนไม่มีประสบการณ์ในอุตสาหกรรมที่เกี่ยวกับคอมไพเลอร์มาก่อน
  • ในกระบวนการสมัครงานปี 2025 ยังเคยสมัครตำแหน่งที่ ค่าจ้างรายชั่วโมงต่ำ ด้วย แต่โอกาสตกไปอยู่กับผู้สมัครระดับปริญญาเอก
  • หลังสัมภาษณ์หลายสิบครั้งตลอด 10 เดือน ในที่สุดก็ได้งาน และตอนนี้กำลังโฟกัสกับการ ปรับปรุงประสิทธิภาพของโปรแกรมในระดับมิลลิวินาที
  • ผู้เขียนชวนให้คนในสายคอมไพเลอร์ติดต่อเข้ามา พร้อมกล่าวถึง การเริ่มต้นใหม่ในย่าน Palo Alto
  • ปิดท้ายด้วยการแชร์ข่าวการออกนวนิยายของตัวเองชื่อ 『You Had Me at Hello World』

2 ความคิดเห็น

 
sacru2red 2025-11-11

เมื่อเทียบกับสายงานอื่นแล้ว เงินและชื่อเสียงน้อยกว่า เลยต้องมีความเป็นมาโซคิสม์อยู่นิดหน่อย

หืมม

 
GN⁺ 2025-11-10
ความคิดเห็นจาก Hacker News
  • ถ้าใครสนใจคอมไพเลอร์ ขอแนะนำให้เริ่มมีส่วนร่วมกับโปรเจ็กต์ ClangBuiltLinux หรือ issue tracker ของ LLVM
    ดูได้จาก รายการอีชชู Linux kernel with LLVM และ
    รายการ good first issue ของ LLVM

  • รู้สึกว่าประเด็นของบทความออกแนวโปรโมตตัวเอง
    แต่ถ้าอยากเป็น วิศวกรคอมไพเลอร์ จริง ๆ หัวใจสำคัญคือการลองสร้างคอมไพเลอร์ด้วยตัวเอง
    การเข้าใจแนวคิดพื้นฐานอย่าง tokenizing, การสร้าง AST, type checking, IR (Intermediate Representation) เป็นเรื่องสำคัญ
    ขอแนะนำ LLVM tutorial
    ไม่จำเป็นต้องเป็นอัจฉริยะระดับ MIT แค่เนื้อหาระดับวิชา CS หนึ่งเทอมก็พอเริ่มต้นได้

    • แม้แต่คนที่เรียนด้านการทำภาษาโปรแกรมมาโดยตรง ก็ยังไม่ค่อยมีโอกาสได้ เขียนคอมไพเลอร์ด้วยตัวเอง
      เพราะงานสายนี้มีน้อย หลายคนเลยย้ายไปสายอื่นอย่าง AI
    • ส่วนตัวคิดว่าซีรีส์ “Let’s Build a Compiler” ของ Crenshaw เป็นบทนำที่ดีที่สุด
    • LLVM ซับซ้อนเกินไปสำหรับมือใหม่ ดังนั้นการลองทำ Lisp ขนาดเล็ก หรือ คอมไพเลอร์ OCaml น่าจะเป็นจุดเริ่มต้นที่ดีกว่า
    • คิดว่าคำอย่าง “puff piece” หรือ “attack vector” แรงเกินไป มันก็แค่ เรื่องเล่าส่วนตัว ในบล็อกส่วนตัวเท่านั้น
  • น่าแปลกใจที่แม้จะจบจาก MIT ก็ยังหางานสาย วิศวกรรมคอมไพเลอร์ ได้ไม่ง่าย
    วงการนี้แคบกว่าที่คิด และดูเหมือนเป็น ตลาดที่เน้นคนซีเนียร์ มากกว่าระดับเริ่มต้น
    ตอนฟองสบู่ดอตคอมแตกปี 2001 ก็หางานยาก แต่ตอนนี้ก็ดูหนักไปอีกแบบ

    • พอเห็นคนจบ MIT แบบเรียนสองสาขายังหางานลำบาก ก็รู้สึกว่า สภาพเศรษฐกิจแย่มาก
    • วงการนี้มี sub-niche ย่อยเยอะมาก — semantic ของ frontend ภาษา, การ optimize backend, AoT vs JIT, CPU vs accelerator เป็นต้น
      และก็มีผู้สมัครจำนวนมากที่ความรู้ด้าน system programming ยังไม่พอ
    • เมื่อไม่กี่ปีก่อนยังไม่ยากขนาดนี้ เพราะคอมไพเลอร์ก็สุดท้ายคือ โปรแกรมทั่วไป และหลายคนก็เติบโตจากการเรียนรู้หน้างาน
    • บริษัทส่วนใหญ่เป็นแค่ ผู้ใช้คอมไพเลอร์ ไม่ได้สร้างเอง เลยทำให้ตลาดเล็กตั้งแต่ต้น
  • ถึงเธรดจะแตกไปหลายทาง แต่ขอสรุปรายชื่อที่ที่จ้างวิศวกรคอมไพเลอร์
    มี AMD, Nvidia, Intel, Apple, Google, Jane Street, Bloomberg, Qualcomm, Modular, AWS, ARM เป็นต้น
    ข้อมูลเพิ่มเติมดูได้ที่ รายการ CompilerJobs
    ในความเป็นจริงคือ จำนวนผู้สมัครมากกว่าจำนวนงานอย่างมาก
    การมีส่วนร่วมกับโปรเจ็กต์อย่าง LLVM, Rust, Swift, Carbon คือเส้นทางเข้าวงการที่เป็นจริงที่สุด
    แหล่งอ้างอิง: PL Resources,
    How to Learn Compilers (LLVM Edition),
    ช่อง YouTube Compilers

    • ขำกับคอมเมนต์ที่บอกว่ามีคนจำนวนมากเอาแต่ทำตัวอย่างอย่าง “lox interpreter” ซ้ำ ๆ
    • เคยมีประสบการณ์เขียน LLVM backend สำหรับ DSP ถ้าดู commit history ของ LLVM ก็จะเจอรายชื่อบริษัทอีกเยอะ
    • วงการคอมไพเลอร์มี วัฒนธรรมที่เน้นคุณภาพ เลยเหมาะกับการเรียนเพื่อพัฒนาตัวเองด้วย
    • Microsoft ก็มี โปรเจ็กต์คอมไพเลอร์ หลายตัว เช่น MSVC, C#, F#, CLR, rustc
    • สงสัยว่าคำว่า “จ้างเฉพาะสำหรับภาษาหนึ่ง ๆ” หมายถึงอะไร
  • รู้สึกว่าชื่อหนังสือ “You Had Me At Hello World” ที่เธอพูดถึงน่ารักมาก

    • เลยนึกถึงชื่อแนวล้ออย่าง “et tu btrfs?” ด้วย
    • เท่าที่รู้ หนังสือเล่มนั้นเคยมีสัญญาจะตีพิมพ์ แต่ ล่าช้าเพราะประเด็นลอกงาน
  • ตกใจที่อยู่ ๆ มีประโยคว่า “นี่คือรูปของฉัน” โผล่มากลางบทความ

    • เลยรู้สึกว่าโพสต์นี้มีความเป็น การโปรโมตตัวเอง มากกว่าบทความอื่น
  • ย้อนกลับไปยุค 80 เคยฝันอยากเป็น วิศวกรคอมไพเลอร์ ถึงขั้นเรียนปริญญาโทและตีพิมพ์งานเรื่อง LR parsing
    แต่ตอนนั้นก็แทบไม่มีงานอยู่แล้ว เลยประคองตัวด้วยการอ่านซอร์สของ PCC กับ GCC
    หลังจากนั้นก็ย้ายไปทำ GUI development และหลังจาก Java/Swing ออกมา โอกาสในสายนั้นมีมากกว่ามาก

  • กลับสงสัยมากกว่าว่าเธอได้สัญญาหนังสือเปิดตัวกับ Simon & Schuster ตั้งแต่อายุยี่สิบต้น ๆ ได้อย่างไร

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

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

    • ส่วนตัว หนังสือของ Andrew Appel(Modern Compiler Implementation)
      ช่วยให้เข้าใจอัลกอริทึมฝั่ง backend ได้มาก Dragon Book ก็อ้างอิงได้เหมือนกัน แต่ข้ามส่วน parsing ไปก็ได้
    • แอบสงสัยว่าโพสต์นี้อาจเป็น เนื้อหาที่นำกลับมาใช้ซ้ำ จากบทความเก่าชิ้นอื่นหรือเปล่า