วันเสาร์ที่ 13 ตุลาคม พ.ศ. 2555

รายละเอียดใน RPG

มาดุรายละเอียดกันครับ
เขียนในสไตล์  เล่าเรื่องไปเรื่อยๆ  ถ้าจะให้ครบคงต้องไปอ่านใน หนังสือน๊ะครับ

ทบทวน Version

RPG II -> RPG III -> RPG/400 (with SQL) -> RPG ILE

RPG II    เขียน Code ให้สั้นที่สุด (เหมือน  การเจาะรูใน Punch Card จะเร็ว)
               แต่ละตำแหน่งที่เจาะรูในกระดาษ มีความหมาย  (มีมาก/เข้าใจยาก)
RPG III   เริ่มเป็น  Code ที่อ่านรู้เรื่องมากขึ้น (แต่จำกัดที่  ขนาดของ PunchCard)
RPG/400 (with SQL)  เพิ่มความสามารถต่างๆให้สะดวกขึ้น รวมทั้งเขียนติดต่อกับ SQL ได้
RPG ILE  ปรับที่ระดับ  โครงสร้างพื้นฐาน  ลดข้อจำกัดต่างๆ
...             มีข่าว ภาษาใหม่ ออกมา ทำงานแบบลูกครึ่ง  (จำชื่อไม่ได้แล้ว  เงียบไปแล้ว)


Hist

ผู้เขียนโชคดีที่  เมื่อเข้าทำงานบริษัทได้กำหนด  ให้หยุด/ลด การใช้ RPG II มาใช้ RPG III
(ช่วงนั้น การแปลง code เป็นงานใหญ่มาก)

ขอบคุณรุ่นพี่ทุกคนที่  กล้าหาญและเสียสละ  วางเส้นทางที่สะดวกในอนาคตไว้ ครับ
ช่วงเวลานั้นจะมีรุ่นพี่ 1 คน  ประกาศชัดเจน และมี 3-4 คน ที่เชี่ยวชาญสนับสนุน "เต็มตัว"
(ไม่ใช่เห็นด้วยแต่ไม่ทำอ่ะ) ทีมงานครอบคลุมทั้งหน่วยงาน


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

ในยุคถัดมา  บางกลุ่มได้พยายามปรับแนวทาง  ตาม ver  แต่ไม่สำเร็จ (ได้แค่ระดับบุคคล,หน่วยย่อย)
กลับเพิ่มปัญหาใหม่ คือ คนกลุ่มหนึ่งจะไม่ยอมเปลี่ยน  และอาจจะเกเรไม่ดู code ที่ตนเองอ่านไม่เข้าใจ

ตย.การเปลี่ยนไปใช้  RPG/400 with SQL  
ข้อดี คือ SQL เป็น Tool ที่ดีในการเข้าถึง Database (IBM แนะนำว่า SQL ทำงานเร็วกว่าแบบปัจจุบัน)
ข้อเสีย คือ ภาพรวม   (กับโครงสร้าง) ทำให้เขียนโปรแกรม "ยาวขึ้น" ,การตรวจสอบ "ยุ่งยาก"
(เหมาะกับ คนที่จะเริ่มปรับ มาใช้  ภาษารุ่นใหม่)
ต้องสร้างพื้นฐานให้ทุกคนใช้ SQL ให้คล่องก่อน (เพิ่ม ขั้นตอน)

ผู้เขียนเอง ก็ได้พยายามวางแนวทางใหม่สำหรับอนาคต  แต่ทำได้แค่  ระดับหน่วยย่อยเท่านั้น และใช้เวลานานมาก ในการปรับ

(จาก Hist + ทดลอง พบว่า การบังคับ ใช้เวลาสั้นและสำเร็จ แต่ถ้า  อาสาสมัคร  ใช้เวลานาน,ล้มเหลว)


ตย แนวทางที่ผู้เขียน กำหนดเปลี่ยน
- เตรียมพร้อม ที่จะเปลี่ยน เทคโนโลยี (อนาคต) ใน 3 ปี
        ต้องทำได้ "เร็วกว่า" และพร้อมจะเปลี่ยน ภาษา(ASP -> C#, PHP, ...) ,DB (DB2 -> Oracle,...) 
- หยุด/ลด การเขียน Report บน RPG   โดยใช้ภาษาใหม่  ที่ง่าย/เร็วกว่า
     - ก่อนสร้าง Report   ใช้ SQL ทดสอบ Data บน Excel  
             เลือก iSeries Navigator
     - นำ SQL ไป Bind กับ ตัวแสดงผล ...  
             เลือก VS2005 Express + มีรูปแบบการสร้างที่แน่นอน (ลอกไปได้)
             + เน้น  ลดการปรับที่จุกจิก (ใช้เฉพาะบุคคล)  

     - เลือกใช้ OWC ช่วยในการ  เปลี่ยนการแสดงผล (1 report แสดงได้หลายแบบ)


RPG-Syntax

RPG เริ่มจากการเขียนบน  บัตรตอก (Punch Card)  ส่งให้เครื่องอ่าน อ่านและแปล (Compile)
(ประวัติศาสตร์นี้แหล่ะที่ทำให้ รูปแบบปัจจุบัน ยังคงต้องทำอยู่)

    ภาพแสดง การ์ดอธิบายช่องต่างๆ  ที่โปรแกรมเมอร์ในอดีต ต้องมีใช้ติดตัว


ในยุคนั้น  พบอุปสรรคเรื่องข้อจำกัดต่างๆ  (1 แถวใน  บัตรตอกป้อน code ได้ 60-100 อักษรเท่านั้น)
จึงได้หาทางแก้ไข เหมาะที่สุดในเวลานั้น  ได้แก่

# แต่ละช่อง มีความหมาย 


     จากรูป จะเห็นความหมายแต่ละช่อง


    เพื่อให้  ง่าย(ขึ้นนิ๊ด) บัตรตอก แยกหมวด (Specification) แต่ละหมวด มี Format เป็นของตนเอง

  •  F-Spec = บอกว่า ติดต่อ file อะไรบ้าง  File Description Specifications
  • [ E-Spec = ใช้บอก เขียนส่วนขยาย เช่น Array   Extenstion-Specifications ]
  • [ I-Spec =รูปแบบ input (Field/Record) เป็นอย่างไร   Input-Specifications ] 
  •  C-Spec = ส่วนของ Coding หรือ การคำนวน  Calculation-Specifications 
  •  O-Spec = รูปแบบ output (Field/Layout) เป็นอย่างไร  Output-Specifications


     ภาพใน F-Spec ยังมีแบ่งย่อยการใช้งานอีก

     ใน ver RPG II ต้องใช้หมวดต่างๆเกือบจะครบ (ยังมีอีก 2 ตัวคือ  L,C) ... วันนี้ถ้าใครยังต้องใช้อยู่ ขอแสดงความเสียใจด้วยครับ
     แต่ ver RPG III ขึ้นไปใช้น้อยลง  RPG ILE เพิ่ม D-Spec ใช้กำหนดตัวแปร (มีความหมายชัดเจนกว่า I-Spec)



# ขนาดที่จำกัดขนาด

     ทำให้  ชื่อ File (8 อักษร), คำสั่ง (5 อักษร),ตัวแปร  (8 อักษร)
     หัดตั้งชื่อ Var, Field แบบย่อให้ได้  เช่น  strCustomerCode   -> CUST, CSTC, CSCD
     เริ่มใช้ ตัวแปรร่วม, ใช้ชั่วคราว  เช่น intK  -> N#52   strText  -> X#10
ภาพแสดง การเขียนคำสั่งติดต่อ File ลงในช่องที่จำกัด



       ตย. การอ่าน code ทำงาน
       F-Spec : โปรแกรมนี้ ติดต่อ File 2 ตัว
                TestX  เรียกใช้แบบ อ่านอย่างเดียว (I = Input)  ชื่อ Field ดูได้ใน I-Spec  (F)
                           จำกัดการติดต่อที่ 5 อักษร
                TestA  เรียกใข้แบบ  Update/Delete (U = Update)  ชื่อ Field ดูได้ใน I-Spec  (F)
                           จำกัดการติดต่อที่ 10 อักษร
                (มักจะใช้   E เพื่อบอกว่า  นำ Field ที่กำหนดใน File มาใช้  ไม่ต้องไปประกาศใน I-Spec)
      I-Spec กำหนดตาม ที่ F-Spec ระบุ  File ชื่อ ... ตั้งชื่อ Field อะไร  ตำแหน่งที่เท่าไหร่ ?
      C-Spec กำหนดให้ อ่านแบบเขียน ควบคุมเอง  (มี Goto)
                   อ่าน File  TestX
                   If    End Of File (*In66 = 1)  Then จบการทำงาน
                   Else
                           อ่าน File  TestA
                           If   Found  (*In67 = 0)   Then
                                    Fld1 = Part
                                    Output (Update) ตามรูปแบบ MAST (ดู O-Spec)
                           กลับไปอ่าน TextX ใหม่

       สำหรับคนรุ่นใหม่  เป็นอย่างไรครับ  (ถ้าเปิดใจบ้าง  วิธีนี้ก็เขียนโปรแกรมสั้นดีครับ)


   - ข่าวดี
          ตั้งแต่ ver RPG/400 เริ่มให้ พื้นที่การเขียนที่กว้างมากขึ้น  เขียนร่วมกับ SQL ได้
   - ข่าวร้าย ถ้าคุณต้องมาดูแล Code ที่เขียนไว้นานกว่า 5 ปี คุณต้องรู้โครงสร้างแบบเก่า 555


# ผลกระทบ 

           แบบอ่านเข้าใจง่าย       If  x <  20   Then
           เขียนในรูป RPG          X    IFLT 20                         Less Than

     ภาพแสดง การเขียนคำสั่ง  ลงในช่องที่จำกัด


           แบบอ่านเข้าใจง่าย       If  (x <  20) and (y >= 10)  
           เขียนในรูป RPG          X    IFLT 20
                                             Y   ANDGE                          Greather and Equal

           ปัญหาเก่าๆ ที่ไม่พบใน ภาษายุคใหม่แล้ว  จะกลับมาพบเห็นหมด
           เช่น                            X    IFLT 20
                                             Y   ANDGE10                      
                                             Z   ORLT 5                        

           code ข้างต้น  คนเขียน คิดแบบไหน ? RPG จะมองแบบไหน ?
           (a)  If    (x < 20) and (y >= 10)  or (z < 5)
           (b)  If   [(x < 20) and (y >= 10)]  or (z < 5)
           (c)  If    (x < 20) and [(y >= 10  or z < 5)]      
           (d)  ...

Tip :  ถ้าไม่ยึดติดมาก  Code ที่ดูยุ่งยาก  ก็ยังอ่านรู้เรื่อง
         ดังนั้นควรเน้น  "ความเข้าใจ" จะยืดหยุ่นดีกว่าท่องจำ

ใน RPG : ผมจะมี Source Code อยู่ 1 member ที่รวมเทคนิค ที่ใช้ "บ่อยๆ" = ผมจะมาค้นที่นี่ที่เดียว
ส่วน ภาษาอื่น  ที่ไม่ค่อยได้ใช้ (เช่น กลับไปเขียน code C#,ASP)
     ผมก็เรียกใช้เครื่องมือพื้นฐาน โดยใช้เวลาค้น 3-5 วินาที (เร็วมาก)
     แต่ผมต้อง "เข้าใจ"  -> รู้  "คำ" ที่จะค้นก่อน ...  แล้วไปค้นในจุดที่เปิดได้เร็วที่สุด (Help > Index, Google > ASP xxx example)

Tip : ควรอ่าน  แบบเร็ว  เพื้อให้คุ้นว่า  อะไรทำได้,ไม่ได้
- อ่าน Syntax "ทั้งหมด" หมายถึงอะไร (ไม่ต้องสนใจ การใช้งาน) ใช้เวลาประมาณ 10-30 นาที
  เช่น  ไม่มี For ... Next แต่ใช้  Do ... End แทน
  # อ่านจาก RPG "User" Guide 

- อ่านคำสั่ง "ทั้งหมด" หมายถึงอะไร (ไม่ต้องสนใจ การใช้งาน) ใช้เวลาประมาณ  1-2 ชม.
  เช่น SORTA ใช้เรียงค่าใน Array
  ดู code เล็กน้อย (บางทีเข้าใจง่ายกว่า)
  จะมี  ติดบางคำ (ถ้าไม่รุ่นพี่ ก็ถามซะ) ถ้าไม่รู้จะถามใคร ก็ผ่านๆไปก่อน (บางตัวไม่ใช้งานเลย)
  # อ่านจาก RPG "Reference" Guide จะเรียงตามอักษร


# ตัวแปรที่ไม่แปลก  แต่ไม่คุ้นเคย

ตัวแปร Boolean (True/False = 1/0 = On/Off) จะใช้ตัวแปรชนิด Indicator (*IN) แทน
พื้นฐานมีให้ใช้ 99 ตัว (01-99) ... คนรุ่นเก่านึกถึง การใช้ Register ใน Assembly

RPG จะใช้ Indicator แทน IF ...  And   เพราะพื้นที่จำกัด มาเขียน IF หลายๆตัวคงไม่ได้
      โดยกันพื้นที่  ให้ใช้ 3 ตัวด้านซ้าย

Tip : เมื่อรู้ที่มา ก็เลือกใช้ให้เหมาะน๊ะครับ  เช่น
        ควรใช้ IF คลุมหลายบรรทัด จะทำงานเร็วว่า  ใส่ Indicator  ตัวเดียวกันทุกบรรทัด

ในขณะเดียวกัน เมื่อสั่งOperation เช่น อ่าน File, ค้นหาใน Array, เปรียบเทียบ Field ก็จะส่งคืนค่าผ่าน Indicator
       โดยจะกันพื้นที่ด้านขวา  ให้แสดงผลได้ 3 ตัว

# RPG Cycle

เป็นส่วนของ RPG II หลงเหลือให้เห็นอยู่    Cycle = ทำงานวนไปเรื่อยๆ (Loop)

ภาคบังคับ  เพื่อจบ Cycle ต้องกำหนด Indicator = LR  (Last Record)ให้ = On(1)
                              SETON             LR
          LR                RETRN

สั่ง *IN LR = 1 หรือ On   บอกให้ RPG Compiler รู้ว่า   อ่านรอบนี้เป็นรอบสุดท้าย
(วิ่งไปจนถึงบรรทัดสุดท้ายของ C-Spec)
กำหนด If  *In LR = '1'   Then   ทำคำสั่ง  RETRN = Return   เป็นการสั่งให้  สิ้นสุดทำงาน "ทันที"
(ไม่ต้องรอให้ไปถึง บรรทัดสุดท้ายของ C-Spec)

(ตอนต่อไป น่าจะเข้าเรื่อง DB ได้สักที)

วันเสาร์ที่ 4 สิงหาคม พ.ศ. 2555

Next Step

"เริ่มต้น" คำนี้ สำหรับผม หมายถึง ผู้ที่เคยเรียนรู้มาก่อน
แต่หลังจาก เรียนเสร็จ  ก็จะ "งง" ...แบบว่า ทำไม เนื้อหามันมากเหลือเกิน


คนสอน ก็มักจะพูดว่า  แค่นี้จำไม่ได้ หรือ ?
คนเรียน ก็มักจะคิดว่า  มันมากน๊ะ  ใครจะจำได้ ?  
     ตอนคุณ (คนสอน) เรียน ทำได้เลยใช่มั๊ย ?  (อันนี้คิดในใจน๊ะ)


Next Step  คือ  ฝึกทำๆๆๆ  และเพิ่มความรู้ความเข้าใจในเครื่องมือ (Tool) ต่างๆ

อ๊ะ! วิธีนี้คือ การเรียนในห้องเรียนนี่นา!   
ใช่แล้วครับ 

ถ้าใช้เครื่องมือได้เต็มที่  ก็จะลดเวลาได้มาก
ข่าวไม่ดี : เครื่องมือดั้งเดิม  ที่แสดงให้เห็น  ใช้งานยังยุ่งยากอยู่ 

ผมมักจะเปรียบเทียบวิธีนี้ คือ การเขียน ASP.net  ด้วย NotePad
(ต้องจำคำสั่ง และใช้ความพยายามมาก)

มีเครื่องมือที่ช่วย  คล้ายกันกับ VS2010 ของ DotNet แต่ก็ยังมีข้อจำกัดอื่นๆ แทรกอยู่
เช่น  เขียน code ง่ายขึ้น แต่เมื่อจะ compile ต้องกลับไปใช้  วิธีแบบเดิม เป็นต้น

Tool ที่ใช้เขียน RPG ที่ง่ายกว่า เช่น Web Sphere Studio (ฟรี), ASNA Visual RPG (มีลิขสิทธ์)
ตัวที่ช่วยออกแบบหน้าจอ เช่น Visual Age (ฟรี) เป็นต้น
เลือกใช้ตามสะดวกครับ  ในหัวข้อต่อไป  ผมจะแนะนำ "หัวข้อ" 
ที่ใช้เสริม  "ฝึกทักษะ"  เพื่อแก้ปัญหา  รู้วิธีทำแล้ว  จะทำอะไรดีอ่ะ (คิดไม่ออก)

โดยผมจะแทรก  algorithm  กับ business concept เข้าไปด้วย
จากประสพการณ์  นักศึกษาที่จบใหม่  "ขาด" ทักษะส่วนนี้มาก  




วันเสาร์ที่ 28 กรกฎาคม พ.ศ. 2555

เริ่มต้นกับ RPG/400

RPG เป็นภาษาที่ใช้บนเครื่อง IBM รุ่น iSeries, AS/400 (รุ่นยอดนิยม)
หรือ System/38 (รุ่นนี้น่าจะไม่มีคนใช้แล้ว) 

ช่วงเวลาหนึ่ง รุ่น AS/400 ขายดีมากในประเทศไทย
ด้วยสภาพการใช้งาน ที่เฉพาะ IBM เท่านั้น ทำให้จนถึงปัจจุบันหลายบริษัทฯ ก็ยังใช้งานอยู่  


สำหรับผู้ที่จำเป็นต้องใช้งาน  ก็มาเรียนรู้กัน
แต่ควรเตรียมปรับตัว  รองรับช่องทางเสริม เผื่่อไว้กรณีบริษัทเปลี่ยน platform ด้วยน๊ะครับ

ใน blog นี้ผมจะแนะนำ แนวทางการใช้งาน ควบคู่กับการใช้เทคโนโลยี่ใหม่

----------------------------------------------------------------------------------------------

โปรแกรมเมอร์ต้อง ได้รับสิทธิการใช้เข้าใช้เครื่อง "ก่อน" น๊ะครับ
(ติดต่อ Admin ของเครื่องนั้น)

เข้าใช้งานด้วยเครื่อง Workstation (เครื่องเฉพาะเพื่อเปิดใช้ ปัจจุบันมีน้อยมาก)
หรือ PC ที่ติดตั้งโปรแกรมจำลองการทำงานเหมือน Workstation
ที่นิยมใช้คือ CA/400(Client Access/400)  ปรกติ Admin จะติดตั้งให้ใช้
สภาวะพร้อมทำงาน คือ หน้าจอ SignOn
หน้าจอ SignOn 

การเข้าใช้งาน Admin จะสร้าง UserProfile และ รหัสผ่านเริ่มต้นให้
หลังจาก Sign On เข้าไป  จะเห็นหน้าจออย่างน้อย หนึ่งใน 2 แบบ คือ 
1. Line Command ต้องป้อนคำสั่งเอง  (ต้องจำกัดหน่อยครับ)
2. Line Command ที่แสดง เมนู ให้เลือก  (ง่ายดี)

แทนที่จะจำคำสั่งหรือโปรแกรมเครื่องมือแต่ละตัว
IBM ได้จัดรวมโปรแกรมเครื่่องมือ (Tool) ในการป้อน Code ไว้ใน  Programming Development Manger
เรียกใช้  ด้วยคำสั่ง StrPdm
หน้าจอแสดงผลลัพธ์จาก คำสั่ง StrPdm

Code ที่เราสร้างจะจัดเก็บใน Library, SourceFile  (ที่เราได้รับอนุญาตให้ใช้)

ลองดูภาพรวมๆ ของการสร้าง

ตย  ต้องการสร้างโปรแกรม  เพื่อแสดงคำว่า Hello
A. สร้างหน้าจอ  เพื่อแสดงข้อความ Hello
B. สร้างโปรแกรม เรียกใช้ หน้าจอจากข้อ A
C. เรียกใช้

A. สร้างหน้าจอ ชื่อ HelloW เพื่อแสดงข้อความ Hello (บรรทัดที่ 2 เริ่มต้น ที่คอลัมน์ 5)
    หน้าจอมาตรฐาน  จะมีขนาด 80 อักษร (คอลัมน์) 24 แถว

    a.1 เลือกเมนู ข้อ 3  (ด้านล่าง ป้อน เลข 3 แล้วกด Enter)
          จัดเก็บใน Source File = QDDSSRC ที่ Library = QGPL
          จะอยู่ใน mode : หน้าจอแสดงรายชื่อสมาชิก  (work member PDM)

    a.2 กด F6 เพื่อสร้าง สมาชิก (Member) ใหม่  ตั้งชื่อ file หน้าจอ HelloW  ชนิดเป็น DSPF
          หลังสร้างเสร็จ จะเห็น ชื่อ HelloW  (ในข้อ a.1)

    a.3 เข้าไป  ออกแบบหน้าจอ  HelloW ด้วย StrSDA   ป้อน 2=Edit หน้า HelloW
    a.4 ป้อน code ดังต่อไปนี้
              1. สร้าง หน้าจอ(Record Format)  ชื่อ HelloWR1  ป้อนเลข 1
              2. ป้อน  คำว่า Hello World  ให้แสดง บรรทัดที่ 10 เริ่มที่คอลัมน์ 20
 


    a.5 สิ้นสุดการป้อน โดยกด F3  เพื่อ Save  จะกลับไปสู่ ข้อ a.1
    a.6 เปลี่ยน  code เป็น Object  โดยป้อนเลข 14 ในช่อง Opt
           หลังการสร้าง compiler จะแสดงผลเป็น รายงาน และ ข้อความ (สำเร็จ หรือ ล้มเหลว)
  
         ตรวจสอบ object ได้สร้างสำเร็จ หรือไม่ ?  
           ด้วยคำสั่ง   dspobjd  qgpl/hellow*  *file   จะเห็น object


B. สร้างโปรแกรม เรียกใช้หน้าจอข้อ A
    (สังเกต  ผมพยายามแสดงให้เห็นว่า  ทำงานคล้ายๆกัน)
    b.1 เลือกเมนู ข้อ 3  (ด้านล่าง ป้อน เลข 3 แล้วกด Enter)
          โดยจัดเก็บใน  SourceFile = QRPGSRC  ที่ Library = QGPL
          จะอยู่ใน mode : หน้าจอแสดงรายชื่อสมาชิก  (work member PDM)


    b.2 กด F6 เพื่อสร้าง สมาชิก (Member) ใหม่  ตั้งชื่อ File = Hello  ชนิดเป็น RPG

          หลังสร้างเสร็จ จะเห็น ชื่อ Hello ในข้อ b.1
    b.3 เข้าไป  ป้อน code File= Hello ด้วย StrSEU  ป้อน 2 หน้า Hello
    b.4 ป้อน code ทีทำงานดังนี้
               1. จะใช้  หน้าจอ จากข้อ A HelloW
               2. เรียกใช้  หน้าจอเลขที่ 1 HelloWR1
               3. บอกจุดสิ้นสุดโปรแกรม


    b.5 สิ้นสุดการป้อน โดยกด F3  เพื่อ Save  จะกลับไปสู่ ข้อ a.1
    b.6 เปลี่ยน  code เป็น Object  โดยป้อนเลข 14 ในช่อง Opt
           หลังการสร้าง compiler จะแสดงผลเป็น รายงาน และ ข้อความ (สำเร็จ หรือ ล้มเหลว)

C. เรียกใช้
    ที่ Line Command : Call Hello

         ตรวจสอบ object ได้สร้างสำเร็จ หรือไม่ ?  
           ด้วยคำสั่ง   dspobjd  qgpl/hello*  *pgm   จะเห็น object

ตอนนี้เห็น "ภาพรวม" แล้วน๊ะครับ - แต่ละจุดยังมีรายละเอียดย่อยอีกพอสมควร
ถ้ามองอย่างยุติธรรม   ขั้นตอนหลักไม่ต่างกันกับทุกภาษา
- ภาษาอื่น อาจจะมีเครื่องมือ ช่วยให้ใช้งานได้เร็วกว่า ตย.เช่น Visual Studio เป็นต้น

ผู้เขียน สอนพนักงานใหม่มาหลายรุ่น  จะเชี่่ยวชาญต้อง
- เพิ่ม "ทักษะ" (ทำมากๆๆๆ)
- จดจำขั้นตอนหลัก ให้ได้   ("ลด" รายละเอียดปลีกย่อยไปก่อน)
- ใช้ "ความเข้าใจ" แทนการท่องจำขั้นตอน