ได้มีโอกาสทำงานด้วย ภาษา C โดย run บน DOS ตอนเริ่มทำ project ก็เริ่มจากอ่าน text book จำชื่อไม่ค่อยได้ อาจจะชื่อ C Programming หรือ Programming in C ประมาณนี้ เล่มไม่ใหญ่มาก แต่เขียนอ่านง่าย ทีนี้ระบบงานส่วนใหญ่ที่ทำนั้นสิ่งสำคัญก็คือ การออกแบบหน้าจอ การจัดตำแหน่งของ field ต่างๆ การทำสี ตัวหนา ตัวกระพริบ ถ้าใช้ C คงจะเหนื่อยหนักทีเดียว ก็เลยใช้ซอฟแวร์ชื่อว่า PowerScreen มาเป็นตัวช่วย คือจะช่วยจัดการในเรื่องต่างๆ ที่เกี่ยวกับ user interface ทั้งหลายบนจอภาพ วิธีการก็คือ ที่ตัว PowerScreen จะมีหัวข้อให้กำหนดรูปภาพของจอภาพ (ต็องไม่ลืมว่าสมัยที่เป็น dos นั้น เป็น text mode ไม่ใช่ GUI อย่างปัจจุบันนี้) แล้วก็กำหนด attribute ให้กับ field ต่างๆบนจอภาพ เมื่อจะใช้งาน ก็ไป call PowerScreen และก็ส่ง parameter ต่างๆ ให้สอดคล้องกับ field ที่กำหนดของจอภาพนั้นๆ รายละเอียดและวิธีการจำไม่ได้แล้ว จากนั้น control จะย้ายไปที่ PowerScreen จนกว่า user จะกดปุ่มที่กำหนดไว้ ก็จะกลับมาที่โปรแกรม แล้วก็จะเป็นส่วนของ process ของโปรแกรมที่จะทำงานตามขั้นตอนของตัวเอง
สำหรับข้อมูลนั้นใช้ Betrieve มาเป็นตัวจัดการ file เนื่องจาก Btrieve ในยุคนั้นมีชื่อเสียงมากเรื่องการจัดการ file บน PC มีความเสถียร และก็ file ไม่พังง่าย (ไม่รวม hard disk crash) คือเคยลองทดสอบโปรแกรมที่อ่านข้อมูลขึ้นมา แต่ยังไม่บันทึกกลับไป คือมีการ open file ค้างไว้ read ข้อมูลมารอไว้ แตยังไม่ได้กด save ก็ทำการปิดสวิทซ์เครื่องเลย ลองเปิดเครื่องมาเรียกดูข้อมูล ก็ยังทำงานได้ปกติดี ในสมัยนั้นการจัดการ file บน PC ถ้าไม่ดีพอ file ที่ open ค้างไว้อาจพังได้ ก็นับว่า Btrieve ได้รับความเชื่อถือในการนำมาเป็น file management ที่กว้างขวางทีเดียว
การจัดการในส่วนของ Btrieve ก็ต้องทำขั้นตอนต่างๆ open file ให้ครบทุก file ที่ต้องใช้งาน read record ที่ต้องการ โดยจะต้องกำหนด key เริ่มต้นเพื่อที่จะได้ record ที่ต้องการ แล้วการ read record ก็ต้องไม่ลืม open file ให้เรียบร้อยก่อน ก็มีบ้างที่ลืมเพราะบางครั้ง มีหลาย file ที่ต้องถูกเรียกใช้งานในโปรแกรม พอมาเพิ่มทีหลังก็ลืมไปเพิ่มในส่วนการ open file และสิ่งที่ลืมไม่ได้คือ ต้องไม่ลืม close file เมื่อตอนจะจบโปรแกรมด้วย โดยเฉพาะ file ที่มีการ udpate record ไปบ้างแล้ว ถ้าไม่ close file ให้เรียบร้อย ข้อมูลอาจจะ physical write ไม่ครบ หรือถ้าโชคร้าย file damage เลยก็มี
การ read record ก็สามารถทำได้ทั้ง read next หรือ previous ขึ้นอยู่กับโปรแกรมนั้นๆ ว่าต้องการให้สามารถทำงานได้หรูหราขนาดไหน จะมีทั้งเลื่อนทีละ record หรือทีละหน้า ก็ต้องกำหนด logic ขึ้นมาเอง แต่ถ้ามี pattern ที่ดีแล้ว ไม่ว่าจะเป็นงานแบบไหน หรือใช้ภาษาอะไร ก็สามารถนำหลักการไปประยุกต์ใช้ได้ดีทีเดียว
งานที่เขียนด้วย C ยุคนั้นมักจะเจอบักประเภท โปรแกรมตายแบบ error exception เครื่อง hang หรือ reset ไปเลย เพราะเป็น dos ถ้าตายก็ตายทั้งเครื่องเลย ไม่มีตายเฉพาะโปรแกรมเหมือนใน Windows ส่วนสาเหตุเท่าที่พอจำได้ ก็จะได้แก่ ประเภท String ลืมปิดท้ายบ้าง, control การทำงานในแบบ array ไม่ดีบ้าง, การคำนวณทางคณิตศาสตร์ด้วยตัวแปรที่ไม่ใช่ numeric บ้าง เพราะ error เหล่านี้จะเจอตอนที่ run program ตอน compile จะไม่เจอ ถึงตอนนั้นก็ต้องไล่โปรแกรมดูว่ามันไปตายตรงไหน ยังดีที่ตัวที่ใช้ทำโปรแกรม C นั้นมีตัวช่วยในการ trace โปรแกรม set break point, ดูค่าในตัวแปรต่างๆได้ ก็เป็นเครื่องมือช่วยเช็คเวลาโปรแกรมทำงานได้ดีทีเดียว
เมื่อจบ project ที่เขียนด้วย C แล้วมีความรู้สึกอย่างหนึ่งคือ งานที่เกี่ยวกับ Business Application แล้ว Cobol เขียนง่ายกว่า แต่ Cobol บน PC นั้นแทบไม่มีให้ใช้เลย ที่มีอยู่ก็มีปัญหาเรื่อง โปรแกรม hang, crash error ไปเลย หรือมีข้อจำกัดที่ขนาดโปรแกรม ใหญ่เกินกว่านี้ๆไม่ได้ อะไรทำนองนี้ ในตอนนั้นเลยหันมาพึ่ง C บน dos เพราะ compile แล้วได้ exe ที่เล็กกว่า แต่ก็ต้องแลกกับรูปแบบของภาษาที่ไม่ค่อยเหมากับลักษณะของงานที่ต้องการนัก แต่ก็ไม่เหลือวิสัยที่จะทำได้ แต่จะเหนื่อยและต้องตั้งหลักกันหน่อยเท่านั้นเอง
07 เมษายน 2552
03 เมษายน 2552
ถัดมากับ COBOL บน IBM Mainframe
แล้วต่อมาก็ได้ทำโปรแกรมด้วย COBOL อีก แต่เปลี่ยนเป็น IBM Mainframe สมัยนั้นระบบงานส่วนใหญ่มักจะใช้ COBOL ในการทำโปรแกรม เนื่องจากลักษณะของภาษาไม่ซับซ้อน ทำความเข้าใจได้ไม่ยาก (แต่ต้องเขียนโปรแกรมให้อ่านง่ายด้วย)
มาคราวนี้ทันสมัยขึ้นมาอีก คือ เดิมที่ทำงานบน NEC ใช้ NEC-ISAM file แต่ตอนนี้ข้อมูลจะเก็บใน DB2 ซึ่งเป็น Database ของ IBM ซึ่งในยุคนั้นมักจะใช้ VSAM เป็นส่วนใหญ่ ได้เขียนโปรแกรมติดต่อกับฐานข้อมูลถือได้ว่าเป็นเรื่องน่าสนใจไม่น้อยทีเดียว
ระบบงานบน Mainframe ที่เป็น Online นั้นจะเรียกใช้ผ่าน CICS โดยในตอนนั้นถือเป็นโชคดีที่ได้รับถ่ายทอดเทคนิคในการเขียนโปรแกรมในลักษณะที่ไม่ hold resource เอาไว้ แต่ก็ต้องเพิ่มภาระในการจัดการ โดยจะต้อง write status ต่างๆ เก็บไว้ใน record จำไม่ได้ว่าน่าจะเป็น VSAM เพราะจะนำ field ต่างๆ ที่ต้องการมาต่อกันให้เรียบร้อยแล้วจึง write เก็บไว้ ก่อนที่จะจบการทำงาน และเมื่อโปรแกรมถูกเรียกให้ทำงานอีก ก็จะอ่าน record ว่ามี write ข้อมูลเก็บไว้หรือเปล่า ถ้าไม่มีก็แสดงว่าเพิ่งจะเริ่มการทำงาน แต่ถ้ามีข้อมูลอยู่ก็แสดงว่าเป็นการกลับเข้ามาทำงานต่อ ฟังดูแล้วออกจะงงอยู่บ้าง แต่เนื่องจากเวลาผ่านมาร่วม 10 ปีแล้วเลยจำรายละเอียดขั้นตอนในการเขียนโปรแกรมไม่ค่อยได้ ทำให้อธิบายได้ไม่ละเอียดและแสดงตัวอย่างไม่ได้ แต่การใช้เทคนิคนี้ OS จะไม่เปลือง resource มาก เนื่องจากครั้งแรกที่โปรแกรมถูกเรียกขึ้นมาทำงานก็จะมีการทิ้งหน้า screen ไว้แล้วจบการทำงานคืน resource ไป หลังจากนั้น เมื่อ user ป้อนค่าต่างๆ ลงบนจอภาพแล้วกด Enter หรือ Function key ที่กำหนดไว้ โปรแกรมก็จะถูกเรียกให้มาทำงานต่อ โดยนำค่าที่ได้จากจอภาพไปประมวลผลต่อ
ดูแล้วจะเหมือนงาน Batch ที่ส่ง screen มาทิ้งไว้ แล้วก็ sleep ไป และเมื่อ user input ค่าต่างๆแล้วก็จะถูกปลุกให้ตื่นมาทำงานต่อนั่นเอง วนซ้ำอยู่อย่างนี้จนกด key ที่กำหนดไว้ให้เป็นการเลิกการทำงานจึงเลิกการทำงานจริง ถ้าจำไม่ผิดความแตกต่างกันอยู่ตรงคำสั่ง EXIT กับ STOP RUN เป็นกุญแจสำคัญของเทคนิคนี้
มาคราวนี้ทันสมัยขึ้นมาอีก คือ เดิมที่ทำงานบน NEC ใช้ NEC-ISAM file แต่ตอนนี้ข้อมูลจะเก็บใน DB2 ซึ่งเป็น Database ของ IBM ซึ่งในยุคนั้นมักจะใช้ VSAM เป็นส่วนใหญ่ ได้เขียนโปรแกรมติดต่อกับฐานข้อมูลถือได้ว่าเป็นเรื่องน่าสนใจไม่น้อยทีเดียว
ระบบงานบน Mainframe ที่เป็น Online นั้นจะเรียกใช้ผ่าน CICS โดยในตอนนั้นถือเป็นโชคดีที่ได้รับถ่ายทอดเทคนิคในการเขียนโปรแกรมในลักษณะที่ไม่ hold resource เอาไว้ แต่ก็ต้องเพิ่มภาระในการจัดการ โดยจะต้อง write status ต่างๆ เก็บไว้ใน record จำไม่ได้ว่าน่าจะเป็น VSAM เพราะจะนำ field ต่างๆ ที่ต้องการมาต่อกันให้เรียบร้อยแล้วจึง write เก็บไว้ ก่อนที่จะจบการทำงาน และเมื่อโปรแกรมถูกเรียกให้ทำงานอีก ก็จะอ่าน record ว่ามี write ข้อมูลเก็บไว้หรือเปล่า ถ้าไม่มีก็แสดงว่าเพิ่งจะเริ่มการทำงาน แต่ถ้ามีข้อมูลอยู่ก็แสดงว่าเป็นการกลับเข้ามาทำงานต่อ ฟังดูแล้วออกจะงงอยู่บ้าง แต่เนื่องจากเวลาผ่านมาร่วม 10 ปีแล้วเลยจำรายละเอียดขั้นตอนในการเขียนโปรแกรมไม่ค่อยได้ ทำให้อธิบายได้ไม่ละเอียดและแสดงตัวอย่างไม่ได้ แต่การใช้เทคนิคนี้ OS จะไม่เปลือง resource มาก เนื่องจากครั้งแรกที่โปรแกรมถูกเรียกขึ้นมาทำงานก็จะมีการทิ้งหน้า screen ไว้แล้วจบการทำงานคืน resource ไป หลังจากนั้น เมื่อ user ป้อนค่าต่างๆ ลงบนจอภาพแล้วกด Enter หรือ Function key ที่กำหนดไว้ โปรแกรมก็จะถูกเรียกให้มาทำงานต่อ โดยนำค่าที่ได้จากจอภาพไปประมวลผลต่อ
ดูแล้วจะเหมือนงาน Batch ที่ส่ง screen มาทิ้งไว้ แล้วก็ sleep ไป และเมื่อ user input ค่าต่างๆแล้วก็จะถูกปลุกให้ตื่นมาทำงานต่อนั่นเอง วนซ้ำอยู่อย่างนี้จนกด key ที่กำหนดไว้ให้เป็นการเลิกการทำงานจึงเลิกการทำงานจริง ถ้าจำไม่ผิดความแตกต่างกันอยู่ตรงคำสั่ง EXIT กับ STOP RUN เป็นกุญแจสำคัญของเทคนิคนี้
ภาคเริ่มต้น กับ COBOL บนเครื่อง NEC
เริ่มการเป็นโปรแกรมเมอร์ โดยใช้ COBOL บนเครื่อง NEC ACOS ทั้งโปรแกรม Online และ Batch ตอนนั้นก็ภูมิใจเล็กน้อยเพราะมีไม่กี่เครื่องในเมืองไทย จะหาคนที่ใช้เป็นคงมีไม่เยอะหรอกนะ
ก็คือชาวบ้านเขาใช้ IBM บ้าง HP บ้าง VAX บ้าง ความจริงก็คือเครื่องเราโบราณกว่าเขานั่นเอง แต่ก็ได้เริ่มต้นเรียนรู้งานจากเครื่องรุ่นเก่านี่เอง
ตอนเรียนนั้นนึกภาพไม่ค่อยออกหรอกว่างานแผนกคอมพิวเตอร์เขาทำอะไรกันบ้าง (สมัยก่อนบางแห่งเรียกแผนก EDP - Electronic Data Processing) ทำแบบฝึกหัดเขียนโปรแกรม 200 line โอ้โฮทำไมโปรแกรมมันยาว พอมาทำงานที่แรกนี่เหมือนได้ฝึกภาคสนาม ออกรบจริงเลย โปรแกรม Batch โปรแกรม Online โดยเริ่มจากศึกษาดูโปรแกรมเดิมที่มีอยู่แล้ว บางโปรแกรม print มาไล่ดูยาวเป็นร้อยแผ่น ราว 3,000 กว่า line ดูแล้วดูอีก ย้อนกลับไปกลับมา พอดูไปถึงช่วงหลัง จำไม่ได้แล้วว่าด้านหน้าทำอะไรบ้าง เห็นชื่อตัวแปรจำไม่ได้แล้วว่ากำหนดไว้ตรงไหน อยู่ใน file อะไร กว่าจะตั้งหลักได้ก็เป็นเดือน
ช่วงถัดมาทันสมัยขึ้นมาหน่อย ได้เปลี่ยนมาทำงานบนเครื่อง NEC เหมือนกัน แต่เป็นรุ่น ASTRA ซึ่งทันสมัยกว่า คล่องตัวกว่า


ตอนเรียนนั้นนึกภาพไม่ค่อยออกหรอกว่างานแผนกคอมพิวเตอร์เขาทำอะไรกันบ้าง (สมัยก่อนบางแห่งเรียกแผนก EDP - Electronic Data Processing) ทำแบบฝึกหัดเขียนโปรแกรม 200 line โอ้โฮทำไมโปรแกรมมันยาว พอมาทำงานที่แรกนี่เหมือนได้ฝึกภาคสนาม ออกรบจริงเลย โปรแกรม Batch โปรแกรม Online โดยเริ่มจากศึกษาดูโปรแกรมเดิมที่มีอยู่แล้ว บางโปรแกรม print มาไล่ดูยาวเป็นร้อยแผ่น ราว 3,000 กว่า line ดูแล้วดูอีก ย้อนกลับไปกลับมา พอดูไปถึงช่วงหลัง จำไม่ได้แล้วว่าด้านหน้าทำอะไรบ้าง เห็นชื่อตัวแปรจำไม่ได้แล้วว่ากำหนดไว้ตรงไหน อยู่ใน file อะไร กว่าจะตั้งหลักได้ก็เป็นเดือน
ช่วงถัดมาทันสมัยขึ้นมาหน่อย ได้เปลี่ยนมาทำงานบนเครื่อง NEC เหมือนกัน แต่เป็นรุ่น ASTRA ซึ่งทันสมัยกว่า คล่องตัวกว่า

ที่ว่าคล่องตัวกว่าเพราะโปรแกรม Online บนเครื่อง ACOS นั้น ต้องกำหนดค่า attribute byte ซึ่งเป็นค่า hexadecimal ให้กับ field ที่ต้องการให้มีผลที่ต่างกันเช่น ทำตัวเข้ม กำหนดให้รับค่าได้ แล้วต้อง send ถึงจะแสดงผลบน dump terminal ที่ user ใช้งานอยู่ แต่บนเครื่อง ASTRA จะง่ายกว่านี้ เพราะ COBOL ของ ASTRA กำหนดเป็นไว้เป็น reserve word ไว้แล้ว การแสดงผลก็ใช้ display - accept รับผล จากจอ terminal ของ user ได้เลย แล้วก็ เครื่อง ACOS การ run report จะได้ output อยู่ใน print queue ต้องให้ operator ที่ห้อง computer ปล่อย print queue ให้ คือ user พิมพ์เองไม่ได้ โปรแกรมที่ให้ user print เองได้ต้องเป็นงานที่จำเป็นจริงๆ เช่น print slip ให้ลูกค้า หรือ print GL card ของทางบัญชี แต่ ASTRA ใช้ write output ก็ออก printer ที่ต่อพ่วงกับ terminal ก็ใช้ได้เลย ชีวิตง่ายขึ้นเป็นกอง
สมัครสมาชิก:
บทความ (Atom)