📅 กรกฎาคม 2026
⚠️ ตรวจสอบข้อมูล ณ วันที่เขียน — API และเวอร์ชันอาจเปลี่ยนแปลงภายหลัง
เวลาพูดถึงคนสร้าง Go ทุกคนรู้จัก Rob Pike กับ Ken Thompson
แต่คนที่สามบน whiteboard วันนั้น คนที่เขียน Go specification คนที่ออกแบบ type inference algorithm ให้ Go คนที่ผลักดัน generics ตั้งแต่ proposal จนถึง implementation
เขาไม่ใช่คนที่คุณเห็นบนเวทีบ่อย ๆ ไม่มี Twitter ไม่ใช่หน้าเป็นข่าว
Robert Griesemer
ศิษย์ของ Niklaus Wirth
Griesemer เกิดปี 1964 ที่สวิตเซอร์แลนด์ จบปริญญาเอกจาก ETH Zurich หนึ่งในมหาวิทยาลัยวิศวกรรมที่ดีที่สุดในยุโรป
อาจารย์ที่ปรึกษาของเขาคือ Hanspeter Mössenböck ภายใต้การดูแลของ Niklaus Wirth — ผู้สร้างภาษา Pascal, Modula, และ Oberon
ถ้าคุณเคยเขียน Pascal ตอนเรียนมหาวิทยาลัย คุณใช้ภาษาที่ Wirth ออกแบบ Wirth ได้รับ Turing Award ปี 1984 จากผลงานการออกแบบภาษาโปรแกรมมิ่งทั้งตระกูล
Griesemer เติบโตมาในโรงเรียนแห่งนี้ วิทยานิพนธ์ปริญญาเอกของเขาชื่อ "A programming language for vector computers" (1993) เน้นการออกแบบภาษาให้กับฮาร์ดแวร์เฉพาะทาง
และร่องรอยของ Wirth อยู่ใน Go จนถึงทุกวันนี้ Go specification ใช้ Wirth Syntax Notation (EBNF variant) ซึ่งเป็น notation ที่ Wirth คิดค้นขึ้นมา นี่ไม่ใช่เรื่องบังเอิญ
ก่อน Go: จาก HotSpot สู่ V8
ก่อนจะมาเป็นหนึ่งในสามคนสร้าง Go Griesemer มีผลงานที่โลกใช้กันทุกวัน
Object Oberon ขยายภาษา Oberon ของ Wirth ให้มี object-oriented features นี่คือจุดเริ่มต้นของความคิดเรื่อง type system ที่ต่อมาทำให้ Go แตกต่างจากภาษา C-family ทั่วไป
Java HotSpot VM Griesemer ร่วมเขียน compiler ให้ HotSpot ซึ่งเป็น JVM implementation ที่ทำให้ Java เร็วพอสำหรับ enterprise และรันอยู่ในเซิร์ฟเวอร์เป็นล้านเครื่องทั่วโลก
V8 JavaScript engine เขาเป็นหนึ่งในทีมแรก ๆ ของ V8 ที่ Google engine ตัวนี้ทำให้ Chrome เร็วขึ้นหลายเท่า ทำให้ Node.js เกิด และเปลี่ยน JavaScript จากภาษาที่คนดูถูกว่า "ช้า" เป็นภาษาที่เร็วพอจะรัน server-side ได้
Sawzall ภาษา data processing ของ Google ที่ Griesemer ทำร่วมกับ Pike และทีม Google อีกหลายคน เป็นประสบการณ์ที่ทำให้เขาเห็นว่า "ภาษาสำหรับงานเฉพาะทาง" ควรหน้าตาเป็นยังไง
Paxos Made Live (2006) paper ที่อธิบายความท้าทายในการ implement Paxos algorithm ในระบบ production แสดงให้เห็นว่า Griesemer ไม่ใช่แค่นักทฤษฎีภาษา แต่ยังเข้าใจ distributed systems engineering ด้วย
21 กันยายน 2007 — วันที่สามคนยืนหน้า whiteboard
Go FAQ บันทึกวันที่นี้ไว้อย่างชัดเจน:
"Robert Griesemer, Rob Pike and Ken Thompson started sketching the goals for a new language on the white board on September 21, 2007."
สามคนนี้มาจากคนละโลก Pike คือ systems programmer จาก Bell Labs Thompson คือตำนาน Unix ทีสร้างภาษา B และร่วมสร้าง UTF-8 ส่วน Griesemer มาจากโลกของ type theory, formal semantics, และ compiler design
นี่คือสิ่งที่ทำให้ทีมนี้สมบูรณ์ Pike กับ Thompson คิดจากมุม developer experience ส่วน Griesemer คิดจากมุม "ภาษาแบบนี้ type system ควรเป็นยังไง"
และผลลัพธ์ที่จับต้องได้ที่สุดจากมุมของ Griesemer คือ Go specification
Go Spec — มหากาพย์เงียบ
Go language specification คือเอกสารที่ programmer Go ทุกคนเปิดอ่านตอนสงสัยว่า syntax แบบนี้ถูกต้องไหม ภาษาเวอร์ชันนี้เปลี่ยนอะไรไปจากเวอร์ชันก่อน
Griesemer เป็น primary author ของ spec นี้
การเขียน spec ไม่ใช่งานที่มีคนปรบมือให้ แต่คือสิ่งที่ทำให้ Go เป็นภาษาที่ compiler ทุกตัว (gc, gccgo, TinyGo) ทำงานตรงกัน เพราะทุกอย่างถูกนิยามไว้ชัดเจน ไม่มี "มันควรจะทำงานแบบนี้แหละ" หรือ "แล้วแต่ implementation"
spec ใช้ Wirth Syntax Notation ภาษาที่อาจารย์ของ Griesemer คิดค้นขึ้นเมื่อ 40 ปีก่อน นั่งอยู่ในเอกสารภาษาใหม่ที่รันอยู่ใน production เป็นล้านเครื่องทั่วโลก
Type Inference — สิ่งที่ทำให้ Go generics ใช้งานได้จริง
นี่คือผลงานที่แสดง DNA ของ Griesemer ชัดที่สุด
Go มี type inference ตั้งแต่แรก (:=) แต่ของที่ยากคือ type inference สำหรับ generics ที่เขาออกแบบให้กับ Go 1.18
Griesemer เป็นคนออกแบบ type unification algorithm ที่ทำให้คุณเขียน slices.Sort(list) แทนที่จะต้องเขียน slices.Sort[MyType](list) ได้
เขายังเป็นคนเขียน blog post บน go.dev (ตุลาคม 2023) อธิบายการทำงานของ type inference อย่างละเอียด ตั้งแต่หลักการจนถึง edge case
ประโยคหนึ่งใน post นั้นสรุปปรัชญาของเขาได้ดี:
"Type inference is an optional mechanism: if type arguments make code clearer, by all means, write them down."
ไม่ใช่ "type inference จะเดาทุกอย่างให้คุณ" แต่คือ "type inference จะช่วยคุณในที่ที่มันแน่ใจ และให้คุณควบคุมในที่ที่มันไม่แน่ใจ"
นี่คือ pragmatic language design — ให้เครื่องมือกับ programmer แต่ไม่บังคับ
Generics — 10 ปีที่ทำให้มันถูกต้อง
Generics ใน Go ใช้เวลา design นานกว่าทศวรรษ ไม่ใช่เพราะ Go team ขี้เกียจ แต่เพราะพวกเขาไม่ยอมปล่อยอะไรที่ "เกือบดี"
Griesemer กับ Ian Lance Taylor เป็นสองคนหลักที่เขียน proposal "The Next Step for Generics" (มิถุนายน 2020)
เขาเป็นคนออกแบบ:
- Type inference algorithm
- Interface-based constraint system
-
~(approximation) syntax สำหรับ type constraints - Square brackets
[]สำหรับ type parameters (การเลือกที่ถกเถียงกันมาก แต่เขายืนยันว่าดีกว่า<>เพราะไม่ชนกับ comparison operators)
ทุกครั้งที่คุณเขียน func Sort[T cmp.Ordered](list []T) คุณกำลังใช้ type system ที่ Griesemer ออกแบบ
ปรัชญาการทำงาน
คนที่เคยร่วมงานกับ Griesemer บอกตรงกัน: เขาเป็นคนเงียบ ถามทีตอบที comment ใน code review เฉียบและสั้น
Go spec ทุกเวอร์ชันคือลายเซ็นของเขา ไม่มีน้ำ ไม่มี buzzword แต่เป๊ะ
มีคนเล่าว่าในทีม Go ถ้า spec บอกว่า "implementation-defined" Griesemer จะถามทันทีว่าทำไม แล้วช่วย redesign จนมันไม่ต้องเป็น undefined อีก
นี่คือ DNA ที่มาจาก Wirth: ทำให้ทุกอย่าง explicit ใน spec ทำให้ compiler implement ได้ตรงกันทุกตัว
การปรากฏตัวต่อสาธารณะ
Griesemer ไม่ใช่คนที่คุณเห็นบ่อยบนเวที conference แต่ก็ไม่ใช่ว่าไม่เคยขึ้นเลย
เขาพูดที่ GopherCon SG 2017 (keynote: "Exporting Go"), GopherCon 2016, dotGo 2016, Gopherpalooza 2019, GopherCon 2020, GopherCon 2021 (ร่วมกับ Ian Lance Taylor), และ GopherCon 2023
นอกจากนี้ยังเคยให้สัมภาษณ์ใน GoTime podcast
แต่เมื่อเทียบกับ Pike ที่มีบล็อก 150+ บทความและเป็น keynote speaker ระดับโลก หรือ Thompson ที่ได้ Turing Award
Griesemer เลือกที่จะให้งานพูดแทนตัวเขา
Blog post บน go.dev ที่ Griesemer เขียนเองมีไม่กี่ครั้ง: "The Next Step for Generics" (2020) และ "Type Inference" (2023)
แต่ทุกครั้งที่มีคนเปิด Go spec ทุกครั้งที่มีคนใช้ generics ทุกครั้งที่ type inference เดา type ได้ถูกต้องโดยที่คุณไม่ต้องประกาศ
นั่นคือลายเซ็นของเขา
ทุกวันนี้
Griesemer ยังทำงานที่ Google เป็นหนึ่งใน maintainer หลักของ Go
เขาไม่ใช่ "อดีตผู้สร้าง Go" เขาคือ "คนที่ยังสร้าง Go อยู่ทุกวันนี้"
Griesemer กับโปรแกรมเมอร์ไทย
Go spec ที่เขาเขียน คือเหตุผลที่คุณอ่าน type error แล้วไม่ต้องเดาว่ามันแปลว่าอะไร
Go generics ที่เขาออกแบบ คือเหตุผลที่คุณไม่ต้องเขียน interface{} แล้ว type-assert ไปมา
และปรัชญาที่เขาสืบทอดมาจาก Wirth "ทำให้ของซับซ้อนง่ายด้วย specification ที่ดี" คือสิ่งที่โปรแกรมเมอร์ไทยทุกคนได้ประโยชน์ ไม่ว่าเราจะรู้ชื่อเขาหรือไม่
สรุป
Robert Griesemer คือ proof ว่าคุณไม่จำเป็นต้องดังเท่า Pike หรือ Thompson ถึงจะเปลี่ยนโลก
คุณแค่ต้องเขียน spec ให้ดีพอ
ที่มา: Go FAQ (go.dev), Wikipedia, Go blog (go.dev/blog), Go spec (go.dev/ref/spec), ETH Research Collection (research-collection.ethz.ch), Google Research (research.google/people/author96/), GoTime podcast, Griesemer's Type Inference post (Oct 2023)