ระบบคอมพิวเตอร์

กับดัก ของ Programmer รุ่นบุกเบิก


บทความนี้เกี่ยวข้องกับตัวอย่างของกับดักของนักเขียนโปรแกรมคอมพิวเตอร์รุ่นเก่า ในยุคของการเขียนโปรแกรมด้วยภาษา Cobol บน Platform Mainframe Computer ซึ่งเป็น Platform ที่ได้รับเกียรติให้สมญาว่าเป็นไดโนเสาร์ใน Jurassic Park และได้รับคำทำนายว่าจะสูญพันธุ์ไปในเวลาอันใกล้ ตั้งแต่ผมเริ่มเข้าวงการ Mainframe Computer เมื่อ ค.ศ. 1985 จนกระทั่งบัดนี้ผมเกษียณอายุการทำงานใน ค.ศ. 2017 มาตั้งหลายปีแล้ว ผมก็ยังเห็นการใช้งาน Platform Mainframe Computer ในธนาคารขนาดใหญ่ในเมืองไทยหลายแห่งที่ทำการประมวลผล Core Banking System ซึ่งเป็นหัวใจหลักของระบบหลัก ๆ ของ Banking Application เช่น ระบบเงินฝาก ระบบเงินกู้ ระบบบัตรเครดิต ระบบข้อมูลลูกค้า อยู่อย่างเหนียวแน่นอยู่เลย

IBM S/390 Mainframe Computer
รูปที่ 1 IBM S/390Mainframe Computer ที่รองรับ System 390Instruction Set68

เหตุเกิดเพราะในขณะนั้นผมทำงานอยู่ที่ IBM ในตำแหน่ง Program Service Representative (PSR) ซึ่งถ้าจะเปรียบเทียบให้เข้าใจง่าย ๆ คือ เป็นวิศวกรระบบแก้ไขปัญหาของ IBM Operating System (ระบบปฏิบัติการคอมพิวเตอร์) หรือถ้าจะเปรียบเทียบกับระบบปฏิบัติการดัง ๆ บน Platform อื่นในสมัยนี้ เช่น ระบบ Window บน PC (Personal Computer) ระบบ Linux หรือ Unix บน Server ระบบ IOS บน iPhone/iPad/Mac และ/หรือระบบ Android บนมือถือยี่ห้ออื่น ๆ ที่ไม่ใช่ Apple หน้าที่ของผมคือหากระบบใด ๆ บน Platform Mainframe Computer ของ IBM ที่ใช้ประมวลผลอยู่ที่ศูนย์คอมพิวเตอร์ของธนาคารทำงานผิดปกติ ผมจะต้องไปดำเนินการแก้ไขให้กลับมาทำงานอย่างเดิมโดยเร็วที่สุด เพื่อหาให้พบว่า ต้นเหตุของปัญหาอยู่ที่ไหน (Problem Source Identication – PSI) ปัญหาเกิดจาก Infrastructure? หรือ Hardware? หรือ Software? หรือ Network? หรือ Operator ส่งคำสั่งอะไรบางอย่างผิดพลาดเข้าระบบหรือเปล่า

หาทางแก้ไขปัญหานั้นให้ได้โดยด่วน (Problem Debugging – PD) เพราะการหยุดทำงานของ Platform Mainframe Computer ของธนาคาร จะกระทบกับผู้คนในวงกว้าง และถ้าโปรแกรมนั้น ๆ เกี่ยวข้องกับเรื่องเงินเรื่องทองด้วยแล้ว ความกดดันก็มีมากขึ้นเป็นเท่าทวีคูณ

ถ้าประเมินดูแล้วว่าการแก้ไขปัญหาจะใช้เวลานาน จะต้องหาทางเก็บข้อมูลสถานะของระบบ ณ ขณะนั้นให้มากที่สุด (Information Gathering) เพื่อนำไปวิเคราะห์หาปัญหาภายหลัง (เพราะในทุก Case ลูกค้าจะยืนยันให้หาปัญหาให้พบ เพราะไม่ต้องการให้ปัญหานี้เกิดขึ้นอีกในภายหลัง) เราสามารถจะพัฒนา Code เป็นการแก้ไขชั่วคราวก็ได้ (เรียกว่า Local Fix) เพื่อ Bypass ให้ระบบทำงานต่อไปก่อนได้ไหม ถ้าไม่ได้และการเกิดปัญหาครั้งนี้ก็ไม่มีข้อมูลให้วิเคราะห์ภายหลังเลย เราต้องตั้งพารามิเตอร์ไว้ให้พร้อมอย่างหนึ่งที่รันบน Platform Mainframe Computer ของเขานั้นจะหยุดทำงาน ทุกครั้งที่มีการส่งโปรแกรมนี้เข้าไปประมวลผล (Application Program นี้พัฒนาโดยเจ้าหน้าที่ของธนาคาร) โดยมี Error Message ว่า Program Exception Error โปรแกรมของลูกค้าโปรแกรมนี้ใช้งานมาทุกวันสิ้นเดือนโดยไม่มีปัญหามา 2-3 ปีแล้ว ดังนั้น ผู้เขียนโปรแกรมจึงมั่นใจว่าปัญหานี้ไม่น่าจะเกิดที่ Program ของเขา จึงโอนหน้าที่การค้นหาและแก้ไขปัญหามาที่ System Platform ซึ่งเป็นผู้ต้องสงสัย

ต้องขยายความเปรียบเทียบปัญหาที่เกิดขึ้นนี้สักนิดหนึ่งว่า หากเป็น Platform Microsoft Window ลูกค้าเคยสร้าง Excel File บน Microsoft Window นานมาแล้ว และก็สามารถใช้งานได้โดยไม่มีปัญหามาทุกวันสิ้นเดือนที่ผ่านมา แต่มาวันนี้ พอเปิด Excel File ไฟล์นี้เมื่อไร Program Excel จะหยุดทำงานทุกครั้ง (แต่ Window ยังเป็นปกติอยู่ ซึ่งจะยังสามารถใช้งาน Microsoft Power Point หรือ Microsoft Word ได้)

ใน Platform Mainframe นั้นจะแยกคนที่ดูแล System ซึ่งประกอบไปด้วย IBM Operating System (OS) และ IBM Program Product (PP) ต่าง ๆ เราเรียกคนที่ดูแล System นี้ว่า System Programmer มีหน้าที่ Install, Congure และ Maintain ระบบให้รองรับ Application Program ที่พัฒนามาประมวลผลภายใต้ OS หรือ PP อีกที เราจะเรียกคนกลุ่มที่ 2 นี้ว่า Application Programmer ในปัญหานี้ คนที่แจ้งผมให้มาดูแลปัญหานี้คือ System Programmer ช่วงนั้นผมถือเป็น PSR หน้าใหม่ ที่ IBM เพิ่ง Assign ให้มาดูแล Account นี้ (อย่าลืมว่าเป็นธนาคารใหญ่) เมื่อผมดูอาการเจ้าหน้าที่แต่ละคนที่ธนาคารนี้ ก็น่าจะยังคลางแคลงใจในความสามารถของผมว่าจะไปรอดไหมเนี่ย

ผมเริ่มด้วยการขอดู Error Message ที่ปรากฏหลังการส่งงานเข้ามารันขอให้พิมพ์ Dump (ข้อมูลที่อยู่ใน Memory ขณะเกิดปัญหา) ออกมา ผมหาInstruction ที่มีปัญหาใน Memory จาก Dump และบอกกับ System Programmer ว่า ปัญหาอยู่ที่ Application เพราะข้อมูลในตำแหน่งที่ Instruction ที่มีปัญหานี้ชี้ไปนั้น ผิด Format ที่ Instruction นี้จะ Execute ได้ พอผมแจ้งไปอย่างนั้นก็เป็นเรื่องเลย System Programmer ถามยํ้ากับผม 2-3 ครั้งว่า ผมมั่นใจไหม เพราะคนที่เขียนโปรแกรมนี้เป็น Senior Programmer ของที่นี่ (เบอร์ 2 ของ Business Unit นี้) และโปรแกรมของท่านแต่ละโปรแกรมค่อนข้างมั่นใจได้ในความถูกต้อง ยิ่งไปกว่านั้น โปรแกรมนี้ใช้งานมานานแล้วโดยไม่มีการเปลี่ยนแปลง ไม่น่าจะใช่อย่างที่ผมสรุป พูดง่าย ๆ ว่า หน้าใหม่ ๆ ชั่วโมงบินน้อย ๆ อย่างผม เอาอะไรไปแย้งระดับ Senior ที่ครํ่าหวอดกับการพัฒนาโปรแกรมมาอย่างยาวนาน

ที่จริงผมมั่นใจในการวินิจฉัยของผม มันชัดเจนมาก และการหาปัญหาแบบส่งงานทีไรก็ไม่ผ่าน (ภาษาในวงการเรียกว่า ส่งทีไรก็ตาย) มันหาปัญหาได้ง่ายกว่าส่งบางครั้งตาย บางครั้งไม่ตาย อยู่แล้ว แต่เมื่อมีข้อโต้แย้ง (อย่างหนักแน่นอย่างนั้น) ผมเลยขอให้ Compile โปรแกรม Cobol Source Code ให้ใหม่ โดยใส่ Option List เข้าไปด้วย เพื่อให้ Cobol Compiler แตก Cobol Instructions ให้แสดง Assembler Instructions ออกมาด้วย ผมเขียนโปรแกรม Cobol ไม่เป็น แต่สำหรับภาษา Assembler มันคือภาษาที่จำเป็นที่สุดที่จะเข้าใจการ Execute Instruction ของ CPU เพราะ Assembler Instructions จะ Map แบบ 1:1 กับ Machine Instruction ที่ CPU Execute ทำให้เราเข้าใจ Flow การทำงานของคอมพิวเตอร์ ซึ่งจำเป็นแก่การหาปัญหาในระบบ ไม่ว่าจะเป็น OS หรือ PP ก็ตาม…

(อ่านต่อฉบับหน้า)


ที่มา: อินทาเนีย ฉบับที่ 2 ปี พ.ศ. 2565 คอลัมน์ เรื่องเล่าชาวอินทาเนีย โดย อดิศร แก้วบูชา วศ.17


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

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

Allow All
Manage Consent Preferences
  • คุกกี้ที่จำเป็น
    Always Active

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

  • คุกกี้เพื่อการวิเคราะห์

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

Save