อ้างจาก Harvard Business Review เรื่อง Why the Most Productive People Don’t Always Make the Best Managers เลยลองเอามาประยุกต์กับงานโปรแกรมเมอร์ดูบ้าง โปรแกรมเมอร์ที่ทำงานได้เยอะได้ดี มักมีความสามารถและพฤติกรรมเหมือนกันอยู่ 7 อย่าง สร้างเป้าหมายในการเขียนโปรแกรมที่ท้าทาย เขียนโปรแกรมได้อย่างมีมาตรฐาน เน้นความรู้และความสามารถในการเขียนโปรแกรมให้อยู่ในระดับมืออาชีพ ผลลัพธ์ที่ได้จากการเขียนโปรแกรมต้องชัดเจน
Category: Programming
พูดคุยแต่เรื่องสร้างซอฟต์แวร์

บทความอันนี้ ผมไม่ได้ให้ความรู้อะไรนะ เป็นแค่การทบทวนตัวเอง ตัวเองก็คือตัวผมนี่แหล่ะ ก็เล่าเรื่อยเปื่อยไป และการทบทวนตัวเองของผม เป็นเรื่องของภาษาคอมพิวเตอร์ที่ผมเคยเรียนรู้ มีหลายภาษาคอมพิวเตอร์ที่ผมยังชำนาญอยู่ แต่ก็มีอีกหลายภาษาคอมพิวเตอร์ที่ผมเคยจับ เคยทำ พอผ่านไปแล้ว ก็ไม่ได้กลับไปทบทวน ซึ่งผมก็เชื่อว่า ถ้าต้องย้อนกลับไปทำ ก็น่าจะยังทำได้อยู่บ้าง (เหรอ จริงเหรอ?) แย่หน่อย ที่เดี๋ยวนี้ผมจำได้แต่หลักการ โครงสร้าง นิพจน์ และคำสงวนของภาษาคอมพิวเตอร์เท่านั้น ส่วนคำสั่งยิบย่อยนี่จำไม่ได้เลย ต้องเปิดคู่มือ ถ้าไม่มีคู่มือ
ข่าวออกมาถี่มาก เรื่องขาดแคลนโปรแกรมเมอร์เนี่ย เขียนโปรแกรมคอมพิวเตอร์ จริง ๆ มันไม่ได้ยาก แต่มันต้องมีโจทย์มาก่อน ทิศทางของโจทย์ จะทำให้ตัวโปรแกรมเมอร์รู้ได้เองว่า ตัวเองจะพัฒนาไปในทิศทางไหน ทิศทางของการพัฒนาโปรแกรมเมอร์ ซึ่งอิงตามโจทย์ จะขึ้นอยู่กับสามปัจจัย คือ 1. โปรแกรมคอมพิวเตอร์ต้องทำงานอยู่บนคอมพิวเตอร์แบบไหน? มันต้องทำงานอยู่บนคอมพิวเตอร์ที่อยู่ในห้องดาต้าเซ็นเตอร์ หรือ ที่ตั้งอยู่บนโต๊ะ หรือ ที่ถือติดมือพกพาได้ หรือ มันทำงานอยู่ในแอร์ ตู้เย็น หรือ
หลายวันก่อนอ่านในกระทู้พันทิป เหมือนมีคนมาตั้งกระทู้ถามว่า กระบวนการแปลภาษาทางคอมพิวเตอร์มันเป็นยังไง แบบว่าไม่เข้าใจ อะไรประมาณนั้น ซึ่งผมมองว่าเป็นคำถามที่ดี เพราะแสดงว่าเขากำลังสนใจวัตถุประสงค์ของการแปลภาษาทางคอมพิวเตอร์ มากกว่าสนใจในภาษาคอมพิวเตอร์ชั้นสูง ซึ่งมีออกมาใหม่ ๆ กันมากมายหลายภาษาซะเหลือเกิน ผมคิดว่าคนที่ตั้งกระทู้ถาม น่าจะเป็นคนรุ่นใหม่ ผมเองเห็นใจคนรุ่นใหม่มาก เพราะพวกเขาอยู่ในยุคสมัยที่ช่องว่างระหว่างเทคโนโลยีต้นน้ำกับเทคโนโลยีปลายน้ำมันห่างออกไปทุกที พวกเขากำลังถูกผลักให้กลายเป็นผู้ใช้งาน มากกว่าเป็นผู้คิดค้นวิจัยพัฒนา พวกเขาถูกสิ่งกีดกันที่เรียกว่าเวลาในการเรียนรู้มาขวางทางเขาเอาไว้ พวกเขาต้องมีเวลามากพอในการเรียนรู้ย้อนกลับจากเทคโนโลยีปลายน้ำไปหาเทคโนโลยีต้นน้ำ เพื่อทำความเข้าใจที่มาที่ไป เพื่อจะได้สร้างเทคโนโลยีปลายน้ำใหม่ ๆ หรือตั้งต้นสร้างเทคโนโลยีต้นน้ำใหม่ได้ เมืองไทยเรานับคนได้เลย ที่คิดจะคิดภาษาคอมพิวเตอร์ชั้นสูง
เมื่อ 17 ปีก่อน ผมเป็นโปรแกรมเมอร์ที่เขียนโปรแกรมคอมพิวเตอร์ได้อย่างมีประสิทธิภาพมาก โปรแกรมคอมพิวเตอร์ที่ผมเขียนจะสะอาด มีการกำกับหมายเหตุ มีการกำกับเลขรุ่น เขียนตามหลักการเชิงวัตถุ ถูกเขียนขึ้นเพื่อตอบสนองความซับซ้อนของโจทย์ปัญหาให้ได้ประสิทธิผล ตอนนั้นผมสงสัย ผมสงสัยว่าทำไมผมจึงไม่ก้าวหน้าในหน้าที่การงาน ในขณะที่พี่อีกคนนึงซึ่งด้อยในการเขียนโปรแกรมคอมพิวเตอร์มากกว่าผม กลับก้าวหน้ากว่ามาก หนำซ้ำยังได้รับความเชื่อถือจากผู้บริหารระดับเบื้องบนอีกต่างหาก ภายหลังผมจึงเข้าใจ การออกไปผจญโลกภายนอกในวิชาชีพคอมพิวเตอร์ (หรือวิชาชีพอื่น ๆ) มันต้องมีทักษะสำคัญ 5 ประการ คือ 1. ความรู้ทางทฤษฎี เช่น
ผมกำลังจะทำชิ้นงานหนึ่งชิ้น เพื่อดึงเอาข้อมูลออกจาก SAP R/3 ออกมาใช้ครับ โดยชิ้นงานที่ว่าจะออกเป็นแนว Web Application ซึ่งผมก็คิดว่าผมจะสร้างมันด้วย PHP โดยจะใช้ SAPRFC ซึ่งเป็น PHP Extension สำหรับแทงทะลุเข้าไปใน SAP R/3 ครับ จริง ๆ แล้วผมจะเขียนภาษา ABAP เพื่อให้มันทำงานบน SAP
องค์กรส่วนใหญ่มักจะลดคนทำงานครับ ไม่ได้หมายถึงว่าจงใจจะลดนะ แต่หมายถึงว่ามันมีคนทำงานลาออกไป แต่ไม่ได้มีคนทำงานคนใหม่ ๆ เติมเข้ามา มันเลยทำให้เกิดช่องว่าง คืองานมีมากกว่าคน ดังนั้น ผู้ร่วมงานของผมซึ่งเคยรับบทบาทเป็น “นักวิเคราะห์ระบบงานคอมพิวเตอร์” ก็ต้องกลายร่างเป็น “นักเขียนโปรแกรมคอมพิวเตอร์” ในขณะที่ผู้ร่วมงานบางคนก็ต้องเปลี่ยนบทบาทจาก “นักบริหารจัดการระบบงานคอมพิวเตอร์” มาเป็น “นักวิเคราะห์ระบบงานคอมพิวเตอร์” ผมเองเป็นคนจำพวกหลัง มันเลยทำให้ผมต้องกลับมาวิเคราะห์ระบบงานคอมพิวเตอร์ เพื่อให้คอมพิวเตอร์มันทำงานตามความต้องการของผู้ใช้งาน!!! เดี๋ยวนี้ผู้ใช้งานเอาแต่ใจตัวเองน้อยลงครับ เริ่มจะไม่สนใจแล้วว่าผลลัพธ์จะออกมาในรูปแบบใด ขอแค่มันออกมาได้เป็นพอแล้ว มันก็เลยทำให้นักเขียนโปรแกรมคอมพิวเตอร์เริ่มมีทางเลือกมากขึ้น ว่าจะแสดงผลลัพธ์ออกมาในรูปแบบใด
ผมกำลังมองหา Cloud Computing ราคาถูกอยู่ ที่ว่าถูกนี่หมายถึงราคาถูกแต่สมรรถนะสูงนะ ไม่ใช่ถูกเฉย ๆ แต่สมรรถนะน้อยนิดกระจิดริดอะไรแบบนั้น ถึงแม้ทุกวันนี้จะมีบริการ Cloud Computing รายเล็กรายน้อยผุดขึ้นมาเยอะแยะ แต่ทุก ๆ ที่ก็คล้าย ๆ กันคือ แพง และ ไม่เสถียร สุดท้ายก็เลยต้องหันกลับมามองเจ้าใหญ่ ๆ สามเจ้าซึ่งได้แก่ Amazon EC2,
หลังจากที่ผมเปิดตัวเกม Beelony บน Facebook ไปได้สองเดือน ผมก็ตัดสินใจเลิกทำมันต่อด้วยเหตุผลดังต่อไปนี้ ไม่สนุก อันนี้น้องชายผมซึ่งเล่นเกมเก่งยืนยัน เขาบอกว่าเกมสนุกคือเกมที่ต้องมีภาพสวย ๆ และมีด่านให้เล่นเยอะ ๆ ซึ่งเกมที่ผมสร้างมันตอบโจทย์ตรงนี้ไม่ได้ มันไม่สวยเด่น มันมีด่า่นน้อยจริง ๆ ผมวาดรูปไม่เก่ง ถ้าอยากได้ภาพสวย ผมมีทางเลือกสองทาง คือ หัดวาดรูปให้เก่ง กับ จ้างคนเก่ง ๆ มาทำงานให้
Facebook Platform for Developer มีการปรับเปลี่ยนอยู่เรื่อย ๆ ครับ ออกแนวสามวันจาก Facebook เป็นอื่น แต่ถึงจะปรับเปลี่ยนบ่อยยังไง มันก็ต้องมีอยู่จุด ๆ หนึ่งที่ถือว่าเป็นการปรับเปลี่ยนใหญ่ ซึ่งผมนับได้เป็นจำนวนสามจุด ได้แก่ การที่ Facebook ขอให้ใคร ๆ เลิกใช้ FBML ซึ่งตัวเองปั้นมาเองกับมือ แต่ยังคงสนับสนุนอยู่อีกพักใหญ่ ๆ