โค้งคำนับโปรแกรมเมอร์คนแรก

 

    เมื่อคืนวาน (9.. 02) ผมเข้า Internet ไปเจอข่าวหนึ่ง ที่ทำให้ผมสงบไปพักหนึ่ง Edsger Wybe Dijkstra ตายแล้วด้วยโรคมะเร็งเมื่อวันที่ 6 .. 02 รวมอายุได้ 72 ปี เช้านี้ ผมเลยจับ keyboard กดเป็นเรื่องนี้ให้อ่านกัน

    ผมเริ่มรู้จักชื่อ Dijkstra กว่า 10 ปีแล้ว จำได้ว่า ครั้งแรกที่ผมเห็นชื่อนี้ ก็จากวรสารไมโครคอมพิวเตอร์ ของไทย ถ้าจำไม่ผิด น่าจะเป็นฉบับที่ 7 มีบทความเรื่องหนึ่งเขียนถึงการหาระยะทางที่สั้นที่สุด โดยใช้วิธีการของ Dijkstra นั่นเอง ในวันนั้นผมจำได้ว่า ผมค่อนข้างทึ่งกับ Algorithm ตัวนี้มาก และนั่นเป็นครั้งแรกที่ผมรู้จัก Dijkstra

    ต่อมาเมื่อผมเรียนรู้เรื่อง Object Oriented Programming คำว่า Dijkstra ก็โผล่มาให้เห็นอยู่เรื่อยๆ ทำให้ผมสนใจ ผมลองไปค้นประวัติดู ปรากฏว่าไม่ธรรมดาจริงๆ ครับ เรามาลองดูประวัติคร่าวๆ ของเขากันดีกว่า

    Dijkstra เกิดเมื่อปี 1930 ที่เนเธอร์แลนด์ รู้จักคอมพิวเตอร์เป็นครั้งแรกเมื่อเรียนจบปริญญาตรี แกมีโอกาสไปศึกษาที่อังกฤษด้าน Programming อยู่ 3 เดือน จากนั้นก็กลับมาเรียนต่อ จนจบ Doctor Degree ที่ University of Amsterdam เมื่อปี 1959 ทางด้านคณิตศาสตร์และฟิสิกส์ ชีวิตส่วนใหญ่หลังจากจบแล้วก็เป็นศาสตราจารย์อยู่ที่ Uninversity of Texas at Austin ประเทศอเมริกา จนถึงปี 2000 ก็เกษียรกลับมาอยู่ที่เนเธอร์แลนด์ และเสียชีวิตในที่สุด

    มีเกร็ดเล็กๆ ที่น่าสนใจ ย้อนไปเมื่อเวลาที่เขาเรียนจบ กรมทะเบียนราษฎร์ของเนเธอร์แลนด์ ก็มาสำรวจ ถามเขาว่า คุณมีอาชีพอะไร คำตอบน่าสนใจครับ "programmer" ซึ่งทางการไม่รู้จักครับว่า Programmer คืออาชีพอะไร ก็เลยไม่ยอมให้มีการบันทึกอาชีพนี้ครับ สุดท้าย Dijkstra ก็เลยต้องยอมลงอาชีพตัวเองว่า "theoretical physicist"

    Dijkstra เท่าที่ผมรู้ไม่เคยมีอาชีพเป็นโปรแกรมเมอร์จริง นักเขียนโปรแกรมในมุมของของ Dijkstra คือนักคิดค้น Algorithm หรือที่เราเรียกกันว่า Computer Scientist ไม่ใช่โปรแกรมเมอร์แบบเราๆ

    เอ! อย่างนั้นที่ผมจั่วหัวเรื่องว่า "โปรแกรมเมอร์คนแรก" ก็คงไม่ถูกต้องเสียทีเดียว ยอมรับครับ แต่ก็นั่นแหละ ทุกวันนี้เรายอมรับว่า Augusta Lovelace Ada เป็นโปรแกรมเมอร์คนแรกของโลก ผมคนหนึ่งครับ ที่ไม่เชื่อว่าเรื่องของ Ada เป็นเรื่องจริง ถึงแม้ว่ามันจะเป็นเรื่องจริง ผมว่าสิ่งที่เธอทำนั้น ไม่อาจจะเรียกได้ว่าเป็นการเขียนโปรแกรมครับ เพราะถ้ายอมรับว่าวิธีการที่ Ada ใช้ เป็นสิ่งที่เรียกว่า Programming ผมคงต้องบอกว่า ชาวจีนคิดค้นอะไรทำนองนั้น กับเครื่องทอผ้าที่มีลาย มานานหลายพันปีก่อนหน้าแล้วครับ

    อย่างน้อย Dijkstra ก็ใช้คำว่าโปรแกรมเมอร์กับโลกของคอมพิวเตอร์เป็นแรก ผมก็ถือเอาว่า Dijkstra เป็นโปรแกรมเมอร์คนแรกของโลกครับ ส่วนโปรแกรมคนแรกของโลกที่เขียน Software เลี้ยงปากเลี้ยงท้องเหมือนเราๆ ผมกำลังหาอยู่ครับ อยากรู้จริงๆ ว่าคนตกนรกคนแรกเป็นใคร! แต่ถ้ายังหาไม่ได้ ผมคงจะพูดต่อว่า นี่คือโปรแกรมเมอร์คนแรกของโลก!

    เรามาดูผลงานเด่นของ Dijkstra (บางส่วน) กันบ้าง แล้วจะได้รู้ว่า ทำไมผมถึงให้ความสนใจคนๆ นี้นัก

50: ภาษา ALGOL

    ภาษา ALGOL เป็นภาษาต้นแบบ ที่เป็น Structure Programming ภาษานี้ถือได้ว่าเป็นภาษาหลัก ที่ภาษาคอมพิวเตอร์ส่วนใหญ่ยึดเป็นต้นแบบ ลองดูตัวอย่างนี้ครับ

begin
   integer i;
   for i:= 1 step 1 until 10 do
   begin
      Print Integer(i);
   end
end

Dijkstra เป็นผู้หนึ่งที่ให้แนวคิด Structured Programming และอื่นๆ กับภาษา ALGOL
 

50: Shortest Path Algorithm

    Algorithm ตัวนี้คงไม่ต้องพูดกันมาก มันเป็น Algorithm ตัวแรกๆ ที่มีการคิดค้นขึ้น และจนในยุคปัจจุบันก็ยังคงเป็น Algorithm ที่มีประสิทธิภาพสูงมากตัวหนึ่ง ในยุคปัจจุบัน มีการใช้ Algorithm ตัวนี้กันอย่างแพร่หลายมาก ใน เรื่องของ IP Routing ที่เราใช้กันใน Router ของ Internet ต่างๆ ก็ยังใช้ Algorithm ตัวนี้ ถ้าใครสนใจ Algorithm ตัวนี้ ลองดู Applet ตัวนี้ครับ http://www.cs.uwa.edu.au/undergraduate/courses/230.300/readings/graphapplet/dijkstra.htm

    Algorithm ตัวนี้แท้ที่จริงแล้วเป็นผลพลอยได้จากการที่ Dijkstra วิจัยพัฒนาภาษา ALGOL จึงไม่น่าแปลกใจเลยว่าทำไมภาษานี้ถึงมีชื่อว่า ALGOL

ปี 1968: บทความในวรสาร ACM เรื่อง "Go To Statement Considered Harmfull"

    ภาษา ALGOL ไม่เคยดัง ตัวที่ดังจริงๆ กลับเป็นภาษา FORTRAN  COBOL และ น้องใหม่คือ BASIC ตัวที่มีปัญหามากที่สุดคือ BASIC มันใช้ Goto เป็นว่าเล่น ซึ่ง Dijkstra เห็นว่าการใช้คำสั่ง Goto เป็นสิ่งที่ไม่ดี บทความนี้ดีครับและดังมากในยุคนั้น เป็นการปลุกกระแสต่อต้านคำสั่ง Goto ซึ่งส่งผลให้ภาษาที่เกิดขึ้นมาในยุคใหม่ๆ ลดบทบาทของคำสั่ง Goto ลง หรือไม่มีเลย ถ้าสนใจตัวบทความจริงๆ ดูที่นี่ครับ http://www.acm.org/classics/oct95/

    แต่ก็ไม่ใช่ทุกคนเห็นดีเห็นงามไปหมดนะครับ บางคนก็ไม่เห็นด้วย หรือไม่อาจทำใจยอมรับได้ Dijkstra ก็โดนพอสมควรสำหรับบทความนี้ แต่แกก็ยังวิจารณ์ต่อไป แต่ก็บ่นน้อยใจบ้างในบทความต่อๆ มา ลองดูบทความนี้ครับ http://www.cs.virginia.edu/~evans/cs655/readings/ewd498.html

ปี 1968: บทความในวรสาร ACM เรื่อง "The Structured of "THE" Multiprogramming System"

    หลังจากบทความเรื่อง Goto ลงตีพิมพ์ อีก 2 เดือนถัดมา Dijkstra ก็ส่งบทความอีกเรื่องหนึ่งที่ดังไม่แพ้กันออกมา บทความนี้พูดถึง OS ตัวหนึ่งครับที่ชื่อว่า THE  (Technische Hoogeschool Eindhoven)  ลองแปลเล่นๆ ดู อาจจะผิดก็ได้ Technische คือ Technology ส่วน Hoogeschool  น่าจะมาจาก Huge School  โรงเรียนใหญ่ในภาษาจีนนั่นก็คือ University นั่นเอง ส่วน Einhoven น่าจะเป็น Holland  รวมความแล้วมันคือชื่อมหาวิทยาลัยที่ Dijkstra ทำงานเป็นศาสตราจารย์ทางคณิตศาสตร์ อยู่ก่อนที่จะไปอเมริกานั่นเอง  (อีกที Hoogeschool รวมกับ Technische อาจจะเป็นแค่ โปลีเทคนิคก็ได้)

    (21-OCT-04 กรุณาอ่านปรับปรุงท้ายบทความครับ)

    ที่มหาวิทยาลัยนี้ Dijkstra สร้าง OS ขึ้นมาตัวหนึ่งที่ชื่อ THE เป็น multiprogramming OS ทำงานได้หลายงานพร้อมๆ กัน OS ตัวนี้อาจถือได้ว่าเป็น OS แบบ multiprogramming ตัวแรกๆ ของโลก มันเกิดมาระยะเวลาไล่เลี่ยกับ Multics ซึ่งเป็นต้นแบบของ UNIX ในทุกวันนี้

    ในบทความนี้มีการพูดถึงปัญหาที่ผู้ออกแบบ OS ต้องประสบ ก็คือการที่บังคับให้ Process ใด Process ใช้ Resource จนเสร็จสิ้น ไม่สามารถแทรกได้ เช่นการพิมพ์ออก Printer คงไม่ดีแน่ถ้าให้ Process 2 ตัวแย่งกันพิมพ์คนละบรรทัด Dijkstra เสนอคำว่า Mutual Exclusion และหนทางแก้ไขปัญหาโดยใช้สิ่งที่ Dijkstra เรียกว่า Semaphore ศัพท์เหล่านี้เป็นศัพท์ที่คุ้นเคยกันในหมู่นักเรียนคอมพิวเตอร์อยู่แล้ว

    ทุกวันนี้ OS ในยุคปัจจุบันก็ยังใช้แนวคิดของ 'THE' ของ Dijkstra อยู่ในหลายส่วนของ OS ครับ ใครสนใจบทความตัวนั้น อ่านได้จาก http://www.cs.utexas.edu/users/dahlin/Classes/GradOS/papers/p341-dijkstra.pdf

ปี 1997: หนังสือ A Discipline of Programming

    เป็นหนังสือที่ Dijkstra เขียนรวบรวม Algorithms ที่ตนเองคิดค้นมา เป็นหนังสือ Classic เล่มหนึ่งในวงการ แต่ผมไม่เคยอ่าน เลยไม่กล้าวิจารณ์

ยังไม่หมด

    Dijkstra ยังเป็นผู้บุกเบิกเรื่องต่างๆ ของคอมพิวเตอร์อีกหลายเรื่องเช่น Distributed Computing, Compiler Writing, Heuristics, stream, Computer Hardware Design, Dining Philosopher, Software Configuration Management, Sorting Algorithms,  Fast Fourier Transform, Deadlock, Concurrent Programming, Garbage Collection, Memory Design,  AI: Pattern Matching, Graph Theory, Scope of Variables, Transaction และอื่นๆ อีกมากมายครับ มากกว่า 1,000 บทความ

    ลอง Search ใน yahoo เอาคำเหล่านี้ แล้วลองต่อด้วยคำว่า Dijkstra ดูครับ เห็นแล้วทึ่งจริงๆ ครับ

ความสำเร็จในชีวิต

    Dijkstra ได้รับเกียรติมากมาย ดังนี้

    ผมคิดเอาเองว่า รางวัลที่สำคัญที่สุดก็คือ ACM Turing Award, ซึ่งตั้งให้เป็นเกียรติกับ Alan Turing (ถ้ามีโอกาสผมจะนำเสนอประวัติของ Turing สนุกราวกับนิยายเลยครับ) มีผู้กล่าวว่า Dijkstra เป็น 1 ใน 15 นักวิทยาศาสตร์คอมพิวเตอร์ที่ยิ่งใหญ่ที่สุดในโลกครับ

ก่อนจบขอทิ้งท้ายด้วยคำคมที่ Dijkstra กล่าวไว้เมื่อไม่นานนี้

"Do not try to change the world. Give the world the opportunity to change itself"

 

ไปไม่กลับ

    วันนี้ วันที่ 10 สิงหา 02 เป็นวันที่กำหนดทำพิธีศพของ Dijkstra ที่ เนเธอร์แลนด์ ผมขอน้อมคารวะปรมาจารย์ผู้นี้ด้วยคนครับ

--------
Supoj
http://www.twoguru.com
10-AUG-02

ปรับปรุง

จาก คุณบุญ - - boon_brpd@hotmail.com

    อ.สุพจน์ ได้พูดถึง Technische Hoogeschool Eindhoven ว่า Eindhoven หมายถึงฮอลแลนด์ และ Technische Hoogeschool เอาจริง ๆ แล้วจะเหมือนโปลีเทคนิค ขอเรียนว่า ไม่น่าจะใช่นะครับ เพราะเขาสอนถึงระดับปริญญาเอก เน้นด้านเทคโนโลยี เกรดระดับมหาวิทยาลัยแนวหน้าของประเทศ ถ้าจะเทียบกับบ้านเราก็คงเป็น (มหาวิทยาลัย) สถาบันเทคโนโลยี..... ทำนองนั้นแหละ

และ Eindhoven ไม่ได้หมายถึงฮอลแลนด์ แต่เป็นเมืองใหญ่ที่มีชื่อเสียง(มีทีมฟุตบอลชื่อดังด้วยนา) อยู่ทางตะวันออกเฉียงใต้ ห่างประมาณ 100 กม. จาก Amsterdam เมืองหลวงของเนเธอร์แลนด์ (หรือฮอลแลนด์) มีสนามบินนานาชาติด้วย