เปรียบการเขียนโปรแกรมเหมือนการประพันธ์ดนตรี

วันนี้ขอขึ้นด้วยเพลง “ใครนิยาม” ที่ Cover โดยคุณชายพุฒิพัชร … เอ๊ย คุณพัชรแห่ง iHearBand ละกันนะครับ ที่ยกคุณพัชรขึ้นมาเพราะว่าจะได้เห็นว่าในวงการไอทีบ้านเราก็มีนักดนตรีเก่ง ๆ หลายท่าน คุณพัชรก็ถือเป็นตัวอย่างที่ดีทีเดียว (ผมไม่เคยได้มีโอกาสได้พูดคุยส่วนตัว แต่เคยได้ชมฝีมือสด ๆ ในงานแต่งพี่ที่ทำงานครั้งหนึ่งครับ)

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

ถ้าให้ยกตัวอย่าง หลาย ๆ คนคงเคยใช้ระบบภาษาไทยบน Windows มาแล้ว แต่คงมีน้อยคนที่รู้ว่าระบบภาษาไทยบน Windows 95 และบน Office 95 นั้นมีทีมงานคนไทยคนหนึ่งที่เป็นนักดนตรีมาก่อน ซึ่งก็คือคุณป้อ นุสรณ์ พจน์พิพัฒน์ หรือบางคนอาจจะเคยเจอพี่เขาในชื่อคุณ McDuck (ถ้าผมจำไอดีเขาไม่ผิดนะ :)) พี่ป้อเคยเป็นสมาชิกของวงดิโอฬารโปรเจคมาก่อนครับ ก่อนจะไปรับงานไมโครซอฟท์พัฒนาระบบภาษาไทยอย่างที่ว่ามาข้างต้นนั่นล่ะ หลังจากนั้นก็เปิดบริษัทพัฒนาระบบภาษาไทยของ Windows CE (ปัจจุบันถูกแทนที่ด้วย Windows Embeded และ Windows Phone) และปลาดาวออฟฟิศ 

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

ใช่ครับ ทั้งโค๊ดโปรแกรม และแผ่นสกอร์โน๊ต มันก็คือ “บันทึกคำสั่ง” นั่นเอง

ผมเคยถามคนที่เรียนดนตรี เขาก็บอกว่า สิ่งที่เขาต้องเรียนนอกจากการเล่นเครื่องดนตรีแล้ว ยังต้องศึกษาเรื่องการอ่านโน๊ต และทฤษฎีดนตรีพื้นฐานต่าง ๆ ก่อนที่จะได้มาเรียนเรื่องประพันธ์ดนตรี

การเขียนโปรแกรมก็เหมือนกัน เราก็ต้องรู้ก่อนว่าโปรแกรมมันทำงานยังไง จากนั้นก็เริ่มหัดเขียนโปรแกรม ซึ่งก็เป็นการเรียนรู้เรื่องสัญลักษณ์ต่าง ๆ ที่ใช้ในการเขียนโปรแกรมนั่นเอง และจากนั้นก็เริ่มเรียนทฤษฎีต่าง ๆ ที่เกี่ยวข้อง

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

ที่จริงทั้งการเขียนโปรแกรมและเขียนโน๊ตก็ใช้ปากกากับกระดาษก็ได้เหมือนกันแหละ แต่ว่าตอนนี้มันศตวรรษที่ 21 แล้วใช่ไหมครับ 😉

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

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

ก็เหมือนกัน ใช่ไหมครับ

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

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

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

ดังนั้นผมว่าถ้าเราสามารถเอาแนวความคิดพื้นฐานของศาสตร์หนึ่งมาปรับคิดใช้ประโยชน์กับศาสตร์อีกแขนงนึงได้มันก็สนุกดีนะ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.