วันอาทิตย์ที่ 25 พฤศจิกายน พ.ศ. 2555

อ่านโปรแกรม RPG (ปัจจุบัน) ให้เป็น

อ่านโปรแกรม RPG (ปัจจุบัน) ให้เป็น

สำหรับ  โปแกรมเมอร์ใหม่ (0-3 ปี)
หนึ่งในหน้าที่ คือ เรียนรู้ระบบฯงานที่มีอยู่

ผมเชื่อว่า คนสอน >50% จะบอกว่า  ให้เรียนรู้ (อ่านเอาเอง) จากโปรแกรม
บางที่จะมี  เอกสารประกอบให้ดู (ส่วนใหญ่ก็จะเก่ามาก)


ผมก็สอนงาน แบบนี้เหมือนกันครับ  : P
ก็ภาษามันมีโครงสร้าง ไม่ซับซ้อน  ดังนั้นการอ่าน/ทำความเข้าใจ  ก็ยาก
แต่ใช้ไม่ได้กับทุกกรณีครับ  บางเรื่องก็ยากเกินไปน๊ะครับ

ถ้าเป้าหมายของการสอนงาน คือ "เรียนรู้ให้เร็ว" และพร้อมทำงาน
วิธีข้างต้น  ก็ไม่ตอบโจทย์น๊ะครับ

ตย.  นาย ก ต้องมาค้นหาวิธีเขียนโปรแกรมเทคนิค abc   ใช้เวลา 1 เดือน
ด้านดี  (คิดบวกมากๆ) นาย ก เรียนรู้ด้วย "ตนเอง" ได้ (นักเรียนในฝัน)
ด้านเสีย  ใช้เวลานานไป  และไม่การันตีว่า  รู้ตรงกับที่อยากให้เรียนรู้

ความเห็นของผม : แค่ "ลงมือทำ" ในสิ่งที่คิด
(ทุกคนคิดได้  แต่ไม่ได้ลงมือทำ  อ้างว่าไม่ว่างซะงั้น)

กลับมาที่หัวข้อ  วิธีอ่านโปรแกรม (ปัจจุบัน)​ ให้เป็น

Q: เราอ่านโปรแกรม เพื่ออะไร ?

หากฏ หรือ ข้อกำหนด (condition), หาความสัมพันธ์, เรียนรู้เทคนิค
โดยปรกติ จะเริ่มดูโปรแกรม กลุ่ม Entry, Maintenance และหน้าจอผลลัพธ์ที่ใช้บ่อย


หากฏ หรือ ข้อกำหนด (condition)
- ถ้า  สินค้า  เป็นชนิดนี้   ค่า commission ให้ลดลง 5% ... ไม่พบในเอกสารพื้นฐาน

หาความสัมพันธ์
- File A01,A02 ต้องใช้คู่กับ File C05 ... ไม่มีในเอกสาร



เทคนิคต่างๆ
- แสดงผลแบบ xxx (ต้องใช้ 3 เทคนิค) ... ไม่มีในหนังสือ
- Array, SubFile ... หนังสือทั่วไปไม่พูดถึง

มา Share ประสพการณ์จากผมทีละเรื่องกันครับ

หากฏ หรือ ข้อกำหนด (condition)


ปรกติ  ผมจะเริ่มจาก สรุปหลักการขึ้น  "แบบย่อ" ขึ้นมาก่อนครับ (ประมาณครึ่งหน้า A4)
เช่น งานบัญชี Fix Asset,  งานผลิต   มี keyword อะไรบ้าง

ตย.1
       สินทรัพย์ ทุกรายการต้องมี  เลขที่ประจำตัว  บอกวันเริ่มต้น, ระยะเวลาหมดค่า, สูตรการคำนวน

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

       สินทรัพย์ ทุกรายการต้องมี  เลขที่ประจำตัว  บอกวันเริ่มต้น, ระยะเวลาหมดค่า, สูตรการคำนวน
แบบเชิงเส้น
       ยกเว้น กลุ่มอิเลคทรอนิคส์  (รหัส E) ใช้สูตรลดค่าแบบเรขาคณิต

ตย.2
       งานผลิต  ชิ้นงาน (Item No)  ผลิตที่  (Process, machine) ณ. เวลา (วันเดือนปี,เวลา)  ได้จำนวนดี
,เสียหาย เท่าไหร่  

เมื่ออ่านโปรแกรม อาจจะพบว่า  Process A321  จะบันทึกจำนวนในรูปแบบกิโล  แทนการนับเป็นชิ้น  ให้บันทึกเป็น "ข้อกำหนดพิเศษ" 

       งานผลิต  ชิ้นงาน (Item No)  ผลิตที่  (Process, machine) ณ. เวลา (วันเดือนปี,เวลา)  ได้จำนวนดี,เสียหาย เท่าไหร่ (นับเป็นชิ้น)
       ยกเว้น  Process A321 ที่นับเป็น กิโล (ต้องเปลี่ยน กิโล เป็น ชิ้น)

หาความสัมพันธ์ (ER)


ในมหาวิทยาลัยเราเรียนการสร้าง  Table ใหม่  แต่ในงานจริง บริษัทฯ เปิดทำการมามากกว่า 20 ปี
Table ต่างๆ ถูกสร้างขึ้นมามากมายแล้ว   ดังนั้นการอ่านโปรแกรมก็คือ การหาความสัมพันธ์  ที่
อาจจะไม่เคยเห็นเอกสาร   พูดภาษาชาวบ้านคือ "เดาใจ"  ผู้สร้าง Table ในยุคนั้นออกแบบอย่างไร
โชคไม่ดี  ถ้า Developer ที่จบมาส่วนใหญ่  ออกแบบไม่เก่ง  ในยุคสมัยนั้น คงไม่ต่างกันเท่าไหร่ ...
การเดาใจจึง "ซับซ้อน"  กว่าปรกติ

อันดับแรก ต้องเชื่อว่าโปรแกรมที่กำลังอ่าน   สร้างถูกต้องตามหลักการก่อน
(ไม่จำเป็นต้องถูกต้อง 100% ก็ได้)
ตัวเอกสาร Fix Asset, งานผลิต  ถ้าจะสร้าง Table ใหม่  น่าจะต้องใช้กี่ Table
(เริ่มจาก 1 Table  -> หลาย  Table ที่สัมพันธ์กัน)  ไม่เรียกเดาใจจะเรียกอะไรครับ

เรื่องถัดมา  เข้าใจวิธี RPG เรียกใช้ DB2/400 

DB2/400 เป็น Database ที่ดีอีกตัว  ง่ายเมื่อทำงานกับ 1 Table เริ่มซับซ้อนเมื่อทำงานมากกว่า 1 Table  และ เริ่มเข้าใจยากเมื่อ บันทึก/แก้ไข ข้อมูลหลาย Table  (ยุคนี้ทำได้ง่ายขึ้น แต่ก็ยังไม่ง่ายจริงๆ)  
ดังนั้นไม่ใช่เรื่องแปลกที่ Developer ในยุคนั้นจะเลือกวิธีที่ง่าย  มากกว่าวิธีที่ถูกต้องจริงๆ (ซึ่งทำได้ยุ่งยาก)  เช่น ยุคนี้  SQL  3 Table ในครั้งเดียว  RPG ยุคใหม่จะมองผลลัพธ์เป็น 1 Table แต่ RPG ในยุคดังกล่าวจะทำทีละ Step (อ่าน Table แรก  แล้วนำแต่ละ Row ไปอ่าน Table 2 หรือ 3) 

ลองดู ตย. การเขียนในสไตล์ใหม่
SQL : -> ได้ 1 Table-Result   
     Select  *   from    Table-1 as T1   
     Left Join   Table-2  as T2 On  T1.X=T2.Y 
     Left Join   Table-3  as T3 On  T1.Y=T3.Z

RPG : (ที่ใช้คู่กับ SQL)  ทำให้ดูง่าย
     Read  Table-Result
     Do while    not EOF
           Print
           Read  Table-Result
     End Do

ตย.นี้  เรารู้แค่ Table ทั้ง 3 มี Relation  แต่ไม่รู้ว่าความสัมพันธ์เป็นแบบไหน
1:1 หรือ 1:m    ต้องทดสอบโดยต้องใช้ SQL หา Relation ทีละคู่
  Table-1  ได้ผลลัพธ์  115 rows 
เพิ่ม Join กับ Table-2  ถ้านับผลลัพธ์ได้ 115 rows เท่าเดิม -> จะได้ relation  1:1
เพิ่ม Join กับ Table-2  ถ้านับผลลัพธ์ได้มากกว่า  115 rows  -> จะได้ relation  1:m
-----------------------------------------------------------
ลองดู ตย. การเขียนที่สืบทอดกันมา
RPG :
     Pointer to  Table-1
     Read  Table-1  (one row)
     Do while    not EOF
           T1.x  Pointer to  Table-2  

           T1.y  Pointer to  Table-3
           Read  Table-3  (one row)
           Do while    not EOF
               Print
               Read  Table-3  (next row)
           End Do

           Read  Table-1  (next row)
     End Do


ตย.ข้างต้น เราจะอ่าน Relation ได้ว่า 
     Table-1 : Table-2 จะมีความสัมพันธ์ แบบ 1:1
     Table-1 : Table-3 จะมีความสัมพันธ์ แบบ 1:m

หัวข้อถัดไปยกยอดไปคราวหน้าแล้วกันครับ (เนื้อหาเริ่มยาวเกินไปแล้ว)



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

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