คลังเก็บหมวดหมู่: Programming

พูดคุยแต่เรื่องสร้างซอฟต์แวร์

ปัญหาการขาดแคลนโปรแกรมเมอร์

ข่าวออกมาถี่มาก เรื่องขาดแคลนโปรแกรมเมอร์เนี่ย

เขียนโปรแกรมคอมพิวเตอร์ จริง ๆ มันไม่ได้ยาก แต่มันต้องมีโจทย์มาก่อน

ทิศทางของโจทย์ จะทำให้ตัวโปรแกรมเมอร์รู้ได้เองว่า ตัวเองจะพัฒนาไปในทิศทางไหน

ทิศทางของการพัฒนาโปรแกรมเมอร์ ซึ่งอิงตามโจทย์ จะขึ้นอยู่กับสามปัจจัย คือ

1. โปรแกรมคอมพิวเตอร์ต้องทำงานอยู่บนคอมพิวเตอร์แบบไหน? มันต้องทำงานอยู่บนคอมพิวเตอร์ที่อยู่ในห้องดาต้าเซ็นเตอร์ หรือ ที่ตั้งอยู่บนโต๊ะ หรือ ที่ถือติดมือพกพาได้ หรือ มันทำงานอยู่ในแอร์ ตู้เย็น หรือ มันฝังอยู่ในหุ่นยนต์

คลาสของคอมพิวเตอร์
คลาสของคอมพิวเตอร์

2. โปรแกรมคอมพิวเตอร์ต้องประพฤติตนแบบไหน? อันนี้จัดง่ายเพราะ IEEE Spectrum เขาจัดไว้ให้แล้ว คือ เป็น web application หรือ mobile application หรือ enterprise application หรือ embedded application

ถ้าลองเอาข้อ 1 กับ 2 มา combination กัน ก็อาจยกตัวอย่างได้เช่น web application และ enterprise application มีโอกาสทำงานอยู่บนคอมพิวเตอร์ที่อยู่ในห้องดาต้าเซ็นเตอร์ได้ทั้งคู่ และเพื่อจะสร้าง app ทั้งสองแบบนี้ โปรแกรมเมอร์ก็จะต้องใช้ทักษะที่แตกต่างกัน ต้องพัฒนาตัวเองไปในทิศทางที่แตกต่างกัน เป็นต้น

3. ภาษาคอมพิวเตอร์ที่เหมาะสมและกำลังเป็นที่นิยม ซึ่งสอดคล้องกับข้อ 1 และ 2 คือภาษาอะไร อันนี้ก็ง่ายในการจัดลำดับอีกเหมือนกัน เพราะ IEEE Spectrum เขาจัดอันดับให้แล้ว

IEEE Spectrum Top Programming Language 2016
IEEE Spectrum Top Programming Language 2016

จะเห็นว่า combination มันมี 3 ตัวแปร ซึ่งแปลว่ามันเยอะ

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

ยกตัวอย่าง บางคนเก่งภาษา C สำหรับสร้างโปรแกรมคอมพิวเตอร์แบบ enterprise application เพื่อใช้ในคอมพิวเตอร์ที่ทำงานอยู่ในดาต้าเซ็นเตอร์ เขาชำนาญด้านการสร้าง services, daemon, multi processing, multithreading และ tcp server socket

แต่ตอนนี้ภาษา php สำหรับงานด้าน web application ซึ่งก็ทำงานอยู่บนคอมพิวเตอร์ที่ทำงานอยู่ในดาต้าเซ็นเตอร์เหมือนกัน กำลังได้รับความนิยม เขาจำเป็นจะต้องแบ่งเวลาพัฒนาตัวเองในย่อหน้าบน เพื่อมาพัฒนาในย่อหน้านี้แค่ไหน?

หรือเขาจะยังคงทิศทางการพัฒนา enterprise application เพื่อทำงานบนคอมพิวเตอร์ที่ทำงานอยู่บนดาต้าเซ็นเตอร์ต่อไป โดยเปลี่ยนจากภาษา C เป็นภาษา Python แทน?

จะเห็นว่าอันนี้ตัดสินใจไม่ได้ เพราะขึ้นกับทิศทางของโจทย์ ถ้าทางเดิมมันยังไปได้ไกล ก็เดินต่อไปได้ ส่วนทางใหม่ก็ให้ใคร ๆ เดินต่อไป แต่ถ้าทางเดิมมันเดินไปไม่ได้ ก็ต้องเปลี่ยนมาเดินทางใหม่กับใคร ๆ เขา

เมืองไทยเราน่ะมีโปรแกรมเมอร์เยอะ เก่งด้วย เห็นมีเป็นพันคน แต่เขาสับละเอียดไง ดังนั้น เวลาจะบอกว่าขาดแคลนโปรแกรมเมอร์ ให้วนไปดู 3 ข้อข้างบน แล้วบอกมาว่า combination ไหนที่ขาดแคลน!!!

บางทีคนพอ แต่อาจกระจัดกระจาย ก็เอามารวมอยู่ด้วยกัน แต่ถ้าไม่พอก็ค่อยมาคิดอ่านว่าจะสร้างเพิ่มกันขึ้นมาได้ยังไง

กระบวนการแปลภาษาทางคอมพิวเตอร์

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

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

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

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

โดยองค์ประกอบหลัก ๆ ของการเกิดขึ้นและตั้งอยู่ของภาษาทางคอมพิวเตอร์ก็มีอยู่ 2 ประการคือ หนึ่งไวยากรณ์ของภาษา และ สองโปรแกรมที่จะแปลไวยากรณ์ของภาษาให้เป็นภาษาเครื่อง

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

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

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

สั่งเครื่องจักรด้วยภาษาเครื่อง
สั่งเครื่องจักรด้วยภาษาเครื่อง

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

มันด้อยประสิทธิภาพมากเลยใช่มั้ยครับ คนที่จะสั่งเครื่องจักรก็ต้องเหนื่อยน่าดู กว่าจะเขียนคำสั่งจำนวนหลาย ๆ บรรทัด โดยจะต้องจดจำคำสั่งภาษาเครื่อง หรือดีหน่อยก็ชำเลืองมองคู่มือภาษาเครื่องไปพลาง เขียนคำสั่งไปพลาง เพื่อสั่งให้เครื่องจักรทำงานให้ ซึ่งได้ผลนิดเดียว!

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

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

การแปลภาษาเครื่องให้เป็นภาษาระดับล่าง
การแปลภาษาเครื่องให้เป็นภาษาระดับล่าง

แบบนี้คือชีวิตดีขึ้นมั้ย? ก็ยังไม่ได้ดีขึ้นอะไรมากมายครับ เพราะภาษาระดับล่าง ยังไงก็ทำงานแบบ 1 ต่อ 1 กับภาษาเครื่องอยู่แล้ว มันไม่ได้ช่วยทำให้เขียนน้อยลง แต่มันช่วยเรื่องไวยากรณ์ จากเดิมที่เคยต้องเขียนสั่งด้วยภาษาเครื่องที่เป็นเลขฐานสอง ก็เปลี่ยนมาเป็นภาษาระดับล่างซึ่งมีคำสั่งแบบข้อความสั้น ๆ หรือคำย่อแทน

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

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

และเนื่องจากเราเคยสร้างภาษาระดับล่างไว้แล้ว มันก็จะเป็นการลดขั้นตอนในการสร้างตัวแปลภาษา เพราะแทนที่เราจะต้องเขียนตัวแปลภาษาด้วยภาษาเครื่อง เพื่อแปลภาษาระดับสูงให้เป็นภาษาเครื่อง เราก็เปลี่ยนเป็นเขียนตัวแปลภาษาด้วยภาษาระดับล่าง เพื่อแปลภาษาระดับสูงเป็นภาษาเครื่องแทน เบาแรงขึ้นเยอะ ดังรูปด้านล่างนี้

การแปลภาษาระดับสูงเป็นภาษาเครื่อง
การแปลภาษาระดับสูงเป็นภาษาเครื่อง

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

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

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

แต่ถ้าเราจะสร้างภาษาระดับสูงด้วยเหตุผลทางแฟชั่น อันนี้ก็ต้องคิดค้นไวยากรณ์ขึ้นมาใหม่ และรับผิดชอบสร้างตัวแปลภาษาเองครับ ซึ่งแฟชั่นที่ว่าก็เช่น ถ้าช่วงนี้ใคร ๆ ก็อยากจะสั่งเครื่องจักรให้ทำงานด้าน Machine Learning หรือ Data Mining หรือ Data Science หรือ 3D Printing และภาษาชั้นสูงที่มีในปัจจุบัน มันไม่เอื้อต่องานด้านนี้ ก็สามารถสร้างกันขึ้นมาใหม่ได้ครับ ตามแฟชั่นกันไป

 

ทักษะสำคัญ 5 ประการในวิชาชีพคอมพิวเตอร์ (หรือวิชาชีพอื่น ๆ)

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

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

ภายหลังผมจึงเข้าใจ

การออกไปผจญโลกภายนอกในวิชาชีพคอมพิวเตอร์ (หรือวิชาชีพอื่น ๆ) มันต้องมีทักษะสำคัญ 5 ประการ คือ

1. ความรู้ทางทฤษฎี เช่น ความรู้ในทฤษฎีคอมพิวเตอร์ ความรู้ในผลิตภัณฑ์หรือบริการทางคอมพิวเตอร์ ความรู้ในกระบวนการทางคอมพิวเตอร์

2. ความเชี่ยวชาญในการปฏิบัติ เช่น ทักษะการเขียนโปรแกรม ทักษะการเขียนเอกสารวิเคราะห์ระบบ ทักษะการสร้างเอกสารเพื่อบรรยาย ทักษะการบรรยายนำเสนอ ทักษะการใช้งานผลิตภัณฑ์หรือบริการทางคอมพิวเตอร์

3. ความมีเสน่ห์ คือ มีบุคลิกภาพดึงดูดผู้คนให้เข้าหา หน้าตาอิ่มเอมไม่เศร้าหมอง พูดจาดีน่าเชื่อถือ น้ำเสียงไม่ขู่กรรโชก วาจาไม่ก้าวร้าว ไม่ยกตนข่มท่าน ไม่ชักสีหน้า รู้จักรักษาน้ำใจคน

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

5. การบริหารการเมือง คือ รู้จักจัดสรรผลประโยชน์ เพื่อแบ่งให้ตัวเองและผู้อื่น รู้จักการเข้าหาผู้คน รู้จักการประนีประนอม รู้จักใช้ทฤษฎีเกม รู้จักวิธีการพึ่งพาผู้อื่นอย่างเหมาะสม รู้จักการอ่านใจคนและอ่านพฤติกรรมคน

ผมมีข้อ 2 แค่ข้อเดียว ส่วนข้ออื่นด้อยหมด

ในขณะที่พี่คนนั้นเขาด้อยในข้อ 2 แต่มีดีในข้อที่เหลือทั้ง 4 ข้อ

มันก็เป็นดังนี้แล …

ให้ PHP ใช้ SAPRFC เพื่อดึงข้อมูลจาก SAP R/3

ผมกำลังจะทำชิ้นงานหนึ่งชิ้น เพื่อดึงเอาข้อมูลออกจาก SAP R/3 ออกมาใช้ครับ โดยชิ้นงานที่ว่าจะออกเป็นแนว Web Application ซึ่งผมก็คิดว่าผมจะสร้างมันด้วย PHP โดยจะใช้ SAPRFC ซึ่งเป็น PHP Extension สำหรับแทงทะลุเข้าไปใน SAP R/3 ครับ

จริง ๆ แล้วผมจะเขียนภาษา ABAP เพื่อให้มันทำงานบน SAP R/3 ก็ได้นะ มันได้ผลเหมือนกัน เพียงแต่ผมอยากจะแสดงผลออกมาเป็น Web Application ที่มีลูกเล่นสวย ๆ โดยใช้ XHTML + CSS + jQuery + AJAX มากกว่า และอีกอย่างผมก็ไม่อยากจะให้ผู้ใช้งาน ต้องมาติดตั้ง SAP GUI ให้วุ่นวายด้วย ก็เลยเลือกทำเป็น Web Application แทน

หลัก ๆ แล้วการเชื่อมต่อจาก PHP ไปที่ SAP R/3 สามารถทำได้สองวิธีครับ คือใช้ RFC กับใช้ SOAP แต่ผมเลือกใช้ RFC เพราะมีคนเก่ง ๆ ทำ PHP Extension ที่เรียกว่า SAPRFC ให้เราแล้ว ทำเป็น API สวยงาม พร้อมให้เราเรียกใช้ได้เลย

ตอนแรกผมนึกว่าผมจะใช้ ASP.NET เพื่อทำเป็น Web Application แล้วต่อเชื่อมไป SAP R/3 ด้วย SAP Netweaver ที่มี API ของ .NET Framework เตรียมมาให้ แต่แย่หน่อย ผมไม่ได้เป็นสาวกของ Microsoft ผมชอบ PHP มากกว่า ก็เลยเลือกใช้ PHP แทน (ชุมชนมันใหญ่ดี)

วกกลับมาเรื่อง RFC ต่อ คือว่า แนวคิดของ SAP R/3 เ่นี่ย เขาจะอนุญาตให้โปรแกรมคอมพิวเตอร์ภายนอกเรียกเข้ามาที่ SAP R/3 ได้ แต่ไม่ให้เรียกเข้ามาตรง ๆ มาคุ้ยมาเขี่ยตามใจชอบอะไรแบบนั้น คือจะต้องเรียก Function ที่เตรียมเอาไว้ใน SAP R/3 ซึ่ง Function ดังกล่าวก็จะมี Parameter สำหรับรับเข้าและส่งออก และที่สำคัญ Function ดังกล่าวต้องสร้างเอาไว้โดยมีคุณสมบัติเป็น Remote-enabled Module

มีคนแต่งหนังสือสอนเรื่องนี้ไว้หลายคน เช่น อันนี้ เป็นต้น

การเขียนโปรแกรมคอมพิวเตอร์เพื่อเชื่อมต่อกับ SAP R/3 ถือว่าเป็นเรื่องท้าทาย เพราะโดยปรกติแล้ว ก็มีแต่ผลิตภัณฑ์ของ SAP กันเองนั่นแหล่ะ ที่ใช้่ RFC เพื่อเชื่อมต่อรับส่งข้อมูลหากัน คนนอกไม่ค่อยอยากไปยุ่งด้วยเท่าไหร่หรอก มันเป็นระบบกึ่งปิดกึ่งเปิด

ก็ทำมันบน SAP สิ

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

ผมเองเป็นคนจำพวกหลัง มันเลยทำให้ผมต้องกลับมาวิเคราะห์ระบบงานคอมพิวเตอร์ เพื่อให้คอมพิวเตอร์มันทำงานตามความต้องการของผู้ใช้งาน!!!

เดี๋ยวนี้ผู้ใช้งานเอาแต่ใจตัวเองน้อยลงครับ เริ่มจะไม่สนใจแล้วว่าผลลัพธ์จะออกมาในรูปแบบใด ขอแค่มันออกมาได้เป็นพอแล้ว มันก็เลยทำให้นักเขียนโปรแกรมคอมพิวเตอร์เริ่มมีทางเลือกมากขึ้น ว่าจะแสดงผลลัพธ์ออกมาในรูปแบบใด ไม่ว่าจะเป็น Window Form, Web Form, SAP Form หรือ Oracle Form และใช้กลไกใดในการทำให้มันสำเร็จ ไม่ว่าจะเป็น Window Application หรือ Web Application เป็นต้น

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

อย่างเรื่องแรกที่ใช้วิธีพิจารณาถึงสัดส่วนของแหล่งกำเนิดข้อมูล เราก็ต้องมาดูว่าระบบฯที่เราจะสร้างขึ้นมา มันนำเข้าข้อมูลมาจากไหนบ้าง เช่น จาก SAP 50%, จาก Oracle Database 20%, จาก SQL Server 20% และจาก Microsoft Excel อีก 10% งั้นก็ตัดสินใจดิบ ๆ ได้เลยว่า เราควรจะทำโปรแกรมเป็นแบบ SAP Form ทำงานในแบบ Window Application บนสภาพแวดล้อมของ SAP โดยเขียนภาษา ABAP ขึ้นมา แล้วก็เรีียก Function Module มาตรฐานโน่นนี่นั่นที่ SAP จัดเตรียมมาให้ เพื่อสร้างเป็นโปรแกรมคอมพิวเตอร์ขึ้นมา สำหรับต่อเชื่อมกับฐานข้อมูลของ SAP เอง และต่อเชื่อมกับ Oracle Database, SQL Server Database และมีกลไกในการ Import ไฟล์ Microsoft Excel อะไรเงี้ย

ส่วนเรื่องสองคือการพิจารณาถึงความยากง่ายของกลไก เราต้องพิจารณาว่าการเขียนโปรแกรมคอมพิวเตอร์แบบไหนยากกว่ากัน เช่น เขียน ABAP เพื่อทำเป็น SAP Form ยากมั้ย? หรือเขียนด้วย Visual Studio .NET เพื่อทำเป็น Window Form จะยากกว่า หรือเขียนด้วย PHP แล้วใช้ CakePHP เพื่อทำเป็น Web Form แล้วให้มันทำงานแบบ Web Application จะลำบากหน่อยแต่ดูสวยงาม หรือแม้กระทั่งจะเขียนด้วย Developer 2000 เพื่อทำเป็น Oracle Form ซะเลย ซึ่งถ้าสุดท้ายเราพิจารณาแล้วว่าทำเป็น SAP Form มันจะง่ายกว่า เพราะมันมีกลไกเจ๋ง ๆ อย่าง ALV Report เอย มี Selection Screen เอยเอาไว้ให้เราใช้ เราก็ควรจะเลือกมันเป็นลำดับต้น ๆ ก่อน

สำหรับเรื่องที่สามซึ่งเป็นเรื่องสุดท้ายที่เราจะพิจารณา นั่นก็คือคนของเราน่ะถนัดใช้เครื่องมืออะไรในการทำ และมีความพร้อมจะทำหรือเปล่า เช่น เรามี ABAPER ที่เป็นคนของบริษัทภายนอกที่เราจ้างเอาไว้ด้วย man day ตายตัว เราควรจะให้เขาทำมั้ย? หรือ เราควรจะให้คนในองค์กรทำกันเองด้วย Visual Studio .NET เพราะคนของเราก็ทำ Window Application แบบ Win Form เก่งเหมือนกัน? หรือ เราควรจะใช้คนของทีม Web เพื่อให้มาทำ Web Form ดี แต่เอ๊ะ เขาไม่เกี่ยวกับเรื่องนี้ เขาจะยอมทำให้หรือเปล่า?

ถ้าเราพิจารณาทั้งสามเงื่อนไขแล้ว เราเห็นว่ามันเข้าเงื่อนไขสองในสาม ก็เลือกแบบนั้น ๆ ไปก็แล้วกัน ซึ่งตามตัวอย่างข้างต้นจะเห็นว่า การเลือกทำบน SAP จะเป็นคำตอบที่ดีที่สุด เพราะมีการนำเข้าข้อมูลจาก SAP 50% ซึ่งถือเป็นข้อมูลสัดส่วนใหญ่, ใช้ ABAP เพื่อทำ SAP Form ง่ายกว่า เพราะมีเครื่องมือที่เอื้ออำนวยในการเข้าถึงข้อมูล และ ใช้ ABAPER ของบริษัทที่จ้างเอาไว้ เพราะเป็นมืออาชีพกว่า เป็นต้น

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