วันศุกร์ที่ 19 มิถุนายน พ.ศ. 2563

เรื่องที่น่ากังวลในการพัฒนาโปรแกรม

ศรัณย์วันศุกร์วันนี้ขอพูดถึงเรื่องในวงการของตัวเองสักวันแล้วกันนะครับ ต้องขอโทษด้วยถ้าผู้อ่านที่อาจติดตามบล็อกอยู่แต่ไม่ได้อยู่ในฟิลด์นี้อาจอ่านไม่เข้าใจ วันนี้จะเป็นเรื่องเกี่ยวกับการพัฒนาโปรแกรมครับ คือผมได้มีโอกาสอ่านบล็อกบล็อกหนึ่งคือ Old Code Gets Younger Every Year ซึ่งพูดถึงเรื่องของการพัฒนาโปรแกรม และผมค่อนข้างเห็นด้วย ก็เลยเอามาเขียนสรุปให้ฟังในบล็อกนี้ครับ

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

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

ผู้เขียนบอกว่าแทนที่จะมาแซะกันเรื่อง COBOL เราควรจะมาสนใจเรื่องพวกนี้กันดีไหม (ซึ่งผมค่อนข้างเห็นด้วยนะครับ) ปัญหาคือการขึ้นต่อกัน  (dependency)  ผู้เขียนได้ยกตัวอย่างของภาษาเขียนโปรแกรมซึ่งมีการปรับปรุงเวอร์ชันไปขนานใหญ่แล้ว แต่นักพัฒนายังติดอยู่กับเวอร์ชันเก่าของภาษา ตัวอย่างก็คือภาษา Java ซึ่งตอนนี้ไปที่เวอร์ชัน 14 แล้ว แต่ 64% ของนักพัฒนายังใช้ Java 8 อยู่ ภาษา Java มีการปรับปรุงครั้งใหญ่ตั้งแต่เวอร์ชัน 9 นั่นคือถ้าจะเอาจริง ๆ โปรแกรมเดิมที่เขียนด้วยเวอร์ชัน 8 จะต้องถูกเขียนใหม่เกือบทั้งหมด และนี่คือเหตุผลที่ว่าทำไมยังใช้เวอร์ชัน 8 กัน 

อีกหนึ่งตัวอย่างคือภาษา Python ซึ่งตอนนี้อยู่ในเวอร์ชัน 3 ซึ่งก็เป็นการเปลี่ยนแปลงครั้งใหญ่เช่นกัน และนักเขียนโปรแกรมหลายคนก็ยังอยู่ในเวอร์ชัน 2 แม้แต่ Mac OS เอง ก็ยังติดตั้ง Python 2.7 มาเป็นดีฟอลต์ให้ เพราะเครื่องมือที่ใช้ภายในของตัว OS ยังใช้ Python 2.7 นอกจากนี้ก็ยังมีโปรแกรมดัง ๆ อีกหลายตัวที่เป็นแบบนี้ 

ปัญหาของทั้ง Java และ Python ที่มีร่วมกันก็คือการขึ้นต่อกันเพราะภาษาพวกนี้ มักจะมีการใช้คลังโปรแกรม (library) พอตัวภาษาถูกปรับปรุง แต่ตัวคลังโปรแกรมไม่ได้ปรับปรุงตาม ก็ทำให้นักเขียนโปรแกรมที่ใช้คลังโปรแกรมเหล่านั้น ถ้าจะปรับก็ต้องเขียนคลังโปรแกรมขึ้นมาเอง ซึ่งก็ไม่มีใครอยากทำ

นอกจากนี้พอมาถึงยุคของเฟรมเวอร์กก็ทำให้การขึ้นต่อกันหนักขึ้นไปอีก ผู้เขียนยกตัวอย่างของ node.js ซึ่งเกิดขึ้นมาเพื่อทำให้เราสามารถเขียนโปรแกรมภาษา JavaScript ซึ่งทำงานบนฝั่งเซิร์ฟเวอร์ได้ และด้วยความที่ภาษา JavaScript อาจถูกออกแบบมาไม่ดีนัก (ผมนี่ไม่ชอบเลยภาษานี้) ปัญหาคือมันแทบจะไม่มีคลังโปรแกรมมาตรฐานที่ควรมากับภาษาโปรแกรมเหมือนที่ภาษาอื่นมี ดังนั้นมีแนวคิดของ NPM เกิดขึ้น เพื่อให้นักเขียนโปรแกรมไปแชร์ไลบรารีที่ตัวเองเขียนขึ้นได้โดยง่าย นักพัฒนาซึ่งไม่อยากเขียนคลังโปรแกรมเอง ก็ใช้ NPM เพื่อติดตั้งคลังโปรแกรมเหล่านั้น ลงบนเครื่องของนักพัฒนา ดังนั้นเครื่องของนักพัฒนาแต่ละคนก็อาจติดตั้งคลังโปรแกรมที่ทำงานแบบเดียวกันแต่เป็นคนละตัวกัน คลังโปรแกรมบางตัวก็ไม่ได้ปรับปรุงมาเป็นปีแล้ว ก็ยังถูกดาวน์โหลดไปติดตั้งกัน จะเห็นว่ามีการขึ้นแก่กันอย่างมาก ลองจินตนาการว่าถ้า JavaScript มีการปรับปรุงครั้งใหญ่ เหมือน Java และ Python มันก็คงจะให้ผลคล้าย ๆ กัน คือคงมีคนไม่ปรับปรุงโปรแกรมเป็นจำนวนมาก 

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

ไม่มีความคิดเห็น:

แสดงความคิดเห็น