วันศุกร์ที่ 10 มกราคม พ.ศ. 2563

ปัญหา Y2K กลับมาอีกครั้ง เพราะความขี้เกียจ

คิดว่าพวกเราหลายคนคงจำปัญหา Y2K กันได้นะครับ ถ้าใครจำไม่ได้ก็คือปัญหาที่ตอนเราเปลี่ยนศตวรรษจากศตววรษที่ 20 (1900) มาเป็นศตวรรษที่ 21 (2000) ปัญหาก็คือเพื่อความประหยัดเนื้อที่ในการเก็บข้อมูล เราจึงเก็บข้อมูลวันที่ในศตวรรษที่ 20 โดยใช้แค่สองหลักสุดท้ายเช่น วันที่ 6 มีนาคม 1968 เราก็จะเก็บข้อมูลเป็น 06/03/68 โดยอนุมานเอาว่าเลขสองหลักข้างหน้าปีคือ 19 คราวนี้พอเข้าศตวรรษใหม่ 2000 มันก็เลยเกิดปัญหาครับ เพราะถ้าใช้การเก็บข้อมูลแบบเดิมปีต้องย้อนกลับมาเป็น 00 ใหม่ ซึ่งมันก็อาจเกิดปัญหากับบางโปรแกรมเพราะมันเท่ากับเซ็ตวันที่กลับไปเป็นปี 1900  เหตุผลที่ทำแบบนี้เพราะในช่วงนั้นฮาร์ดแวร์ของคอมพิวเตอร์ยังมีราคาแพงจึงต้องประหยัด และคนที่พัฒนาโปรแกรมในช่วงนั้นก็คงไม่คิดว่าโปรแกรมของตัวเอง และหลักการเก็บวันที่แบบนี้จะใช้งานมาจนเข้าศตวรรษใหม่ ซึ่งตอนนั้นก็ต้องแก้ปัญหากันซึ่งวิธีแก้ปัญหามีสองวิธีครับ คือเขียนโค้ดใหม่ขึ้นมาเลย กับใช้วิธีขยับหน้าต่างให้ช่วง 00-20 หมายถึงปี 2000 ถึง 2020 (ซึ่งเหตุผลว่าทำไมขยับได้ในช่วงแค่นี้ ขอไม่อธิบายแล้วกันนะครับ ใครอยากรู้คร่าว ๆ ลองไปอ่านในข่าวเต็มกัน หรือลองค้นดูเรื่องเก่า ๆ เกี่ยวกับ Y2K) และไม่น่าแปลกใจนะครับว่า 80% ของโปรแกรมที่ต้องแก้ไขเลือกใช้วิธีขยับหน้าต่างครับเพราะมันง่ายกว่า และตอนนี้ก็กลับมาเจอปัญหาเดิมครับ ในข่าวยกตัวอย่างระบบเก็บค่าจอดรถในนิวยอร์กก็ปฏิเสธไม่รับบัตรเครดิต เพราะวันที่มันย้อนกลับไปเป็นปี 1920 หรือโปรแกรมเกมมวยปล้ำ WWE 2K20 ก็เล่นไม่ได้ในวันที่ 1 มกรา 2020 ซึ่งผู้เล่นต้องดาวน์โหลดโปรแกรมแก้ไขจึงจะเล่นได้ต่อ ซึ่งตอนนี้ก็ต้องดูว่าการแก้ปัญหาจะยังใช้วิธีขยับหน้าต่างกันแบบเดิมอีกหรือเปล่า เพราะถ้าทำแบบเดิมอีกก็จะเจอปัญหานี้อีกทีในปี 2038 

อ่านข่าวเต็มได้ที่: NewScientist

เพิ่มเติมเสริมข่าว

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

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

โพสต์ความคิดเห็น