บุคลากรสายงานพัฒนาซอฟต์แวร์

บุคลากรสายงานพัฒนาซอฟต์แวร์น่าจะมีใครบ้าง? ผมคิดว่าพวกเราน่าจะนึกถึง “โปรแกรมเมอร์” กับ “วิศวกรซอฟต์แวร์” เป็นอันดับแรก ๆ ส่วน “วิศวกรคอมพิวเตอร์” กับ “นักวิเคราะห์ระบบงานคอมพิวเตอร์” พวกเราน่าจะนึกถึงเป็นอันดับรอง ๆ

บุคลากรสายงานพัฒนาซอฟต์แวร์
บุคลากรสายงานพัฒนาซอฟต์แวร์

ภาพข้างบน ผมพยายามนำเสนอว่า การพัฒนาซอฟต์แวร์มันตั้งต้นมาจากการที่มีคนคิดค้นทฤษฎีทางคอมพิวเตอร์ (คุณ A) ซึ่งถูกตีพิมพ์เผยแพร่ในงานประชุมวิชาการหรือวารสารวิชาการ (เช่น ACM หรือ IEEE) และมีคนคิดค้นมาตรฐานทางคอมพิวเตอร์ (คุณ B) ซึ่งถูกเผยแพร่โดยสหพันธ์วิชาชีพ สมาคมวิชาชีพ สภาวิชาชีพ หรือ บริษัทเอกชน (เช่น RFC โดย IETF หรือ IT Standard โดย ISO) เป็นต้น

จากนั้นโปรแกรมเมอร์หรือวิศวกรซอฟต์แวร์ (คุณ C) ก็นำเอาทฤษฎีทางคอมพิวเตอร์และมาตรฐานทางคอมพิวเตอร์ที่ถูกคิดค้นขึ้น มาสร้างเป็นโปรแกรมสำเร็จรูปโดยตรง หรือ ต่อยอดผ่อนแรงสร้างเป็น Library, API หรือ Framework ไปก่อน เพื่อให้โปรแกรมเมอร์หรือวิศวกรซอฟต์แวร์คนอื่น  (คุณ D) นำสิ่งเหล่านี้ไปใช้สร้างโปรแกรมสำเร็จรูปอีกต่อหนึ่ง

โปรแกรมสำเร็จรูปเจ๋ง ๆ ที่สร้างออกมาได้ ส่วนใหญ่ก็จะถูกนำไปใช้งานโดยผู้ใช้งาน (คุณ E) เพื่อเอาไปผลิตสินค้าหรือบริการ ส่วนน้อยก็จะถูกนำไปใช้งานโดยคนที่คิดค้นทฤษฎีทางคอมพิวเตอร์ (คุณ A) หรือคนที่คิดค้นมาตรฐานทางคอมพิวเตอร์ (คุณ B) อีกทีหนึ่ง วนเป็นวงจรเกื้อหนุนกันไป

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

โดยไม่พึ่งพา Framework หรือ API หรือ Library ใด ๆ

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

ณ ตอนนั้น ผมรู้สึกว่าการที่ผมเป็นคุณ D มันเร็วกว่า ง่ายกว่า แต่รู้สึกภูมิใจน้อยกว่า

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

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

เมืองไทยเรากำลังขาดแคลนโปรแกรมเมอร์ครับ (ข่าวเขาว่างั้น) ดังนั้น บุคลากรที่กำลังขาดแคลน จึงหมายถึงคุณ C และคุณ D นั่นเองครับ

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

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

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

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

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

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 ไหนที่ขาดแคลน!!!

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

สาเหตุที่ไม่ค่อยชอบ Neural Network ซักเท่าไหร่

เห็นทุกวันนี้งานทางด้าน AI ใช้ Neural Network มากขึ้นเรื่อย ๆ ซึ่งโดยส่วนตัวแล้วไม่ค่อยชอบโมเดลปัญญาประดิษฐ์แบบ Neural Network ซักเท่าไหร่ เพราะ …

Model Neural Network แบบต่าง ๆ
Model Neural Network แบบต่าง ๆ
  1.  แปลความยาก คือเวลามันเรียนรู้แล้วสร้างเส้นแบ่ง เส้นแบ่งมันเป็นเส้นโค้ง โค้งไปมาตามข้อมูลที่มันเรียน มันเลยไม่มีความเป็นกลาง ลองนึกถึงว่าเราตีเส้นตรงเพื่อแบ่งเขต เรายังตีความง่าย แต่พอมันโค้ง เราต้องตีความว่าทำไมมันโค้ง มันหลบทำไม มันมีอะไรพิเศษถึงต้องโค้งหลบ (มันเหมือนทางด่วนที่สร้างหลบบ้านคนรวยมั้ย)
  2. ถ้าอยากได้เส้นแบ่งเป็นเส้นตรง ก็ต้องเลือกใช้ Neural Network แบบ Perceptron แต่มุมเอียงของเส้นตรงที่แบ่งข้อมูล ก็จะเอียงแบบไม่มีหลักการ ถ้าเอาไปเทียบกับ Linear Support Vector Machine หรือ Linear Discriminant Analysis พวกนั้นยังตีเส้นตรงแบ่งแบบมีหลักการกว่าเยอะ
  3. มันช้า แต่ล่ะ epoch แปรผันตรงกับ node และ layer ยิ่งเยอะ ยิ่งช้า
  4. โมเดลมันเป็นแบบปลายเปิด คือ ไม่รู้ว่าจะต้องออกแบบ Hidden Layer หรือ Recurrent Layer หรือ Kernel Layer กี่ node หรือกี่ layer ถึงจะเหมาะกับปัญหาที่จะแก้ ต้องลองผิดลองถูกไปเรื่อยๆเอง
  5. การสุ่มค่าน้ำหนักเริ่มต้น เป็นไปตามดวง สุ่มไม่ดีเรียนรู้ช้า สุ่มดีเรียนรู้เร็ว
  6. ต้องใช้ข้อมูลเพื่อเรียนรู้เยอะมาก กว่าจะแบ่งเขตข้อมูลได้อย่างเหมาะสม

ไม่รู้คนอื่นเจอแค่ไหน แต่ที่ส่วนตัวเคยสัมผัสมา ก็ประมาณนี้

แต่ก็ไม่ใช่ว่า Neural Network จะไม่มีอะไรดีเลยในสายตาผมนะ ผมยังมองว่ามันมีจุดดีอยู่บ้าง ซึ่งเป็นจุดที่ผมชอบมาก ๆ เลย

นั่นก็คือ เมื่อสร้าง Model Neural Network ขึ้นมา แล้วสอนมันจนได้ประสิทธิผลที่พอใจแล้ว เราก็ไม่จำเป็นจะต้องสนใจกับข้อมูลที่สอนอีกต่อไป สนใจเฉพาะโมเดลที่ได้ก็พอ

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

คอมพิวเตอร์คืออะไร?

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

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

หมวดหมู่ของคอมพิวเตอร์
หมวดหมู่ของคอมพิวเตอร์

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

ภาพข้างบนที่ผมจับมาจากวิกิพีเดียมันใหญ่ มันต้องกดขยาย ดูยากไปนิด ผมเลยลอกมาทำเป็น Quote ให้ดูแบบข้างล่างนี้แทน (จัดหมวดหมู่เหมือนวิกิพีเดียเป๊ะ)

Microcomputer, Personal Computer
|-Stationary
|–Workstation
|–Desktop Computer
|–Home Computer
|–Personal supercomputer
|–Small Form Factor (Nettop)
|–Plug Computer
|–Portable Computer (Table Computer)
|–Video Game Arcade Cabinet (System Board)
|–Home Video Game Console
|–Microconsole
|–Interactive kiosk
|–Smart TV
|–Smart Speaker
|-Mobile
|–Laptop
|—Desktop Replacement Computer
|—Notebook Computer
|—2-in-1 PC
|—Subnotebook (Netbook, Smartbook, Ultrabook)
|—Ultramobile PC
|–Tablet
|—Ultramobile PC
|—2-in-1 Tablet
|—Mobile Internet Device
|—Tabletop Computer
|—Phabet
|–Information Appliance
|—Handheld PC (Plamsize PC, Pocket PC, Pocket Computer, Palmtop PC)
|—PDA (Electronic organizer, Enterprise Digital Assistant)
|—Mobile Phone (Feature Phone, Smartphone)
|—Portable Media Player
|—E-Reader
|—Handheld Game Console
|—Portable Data Terminal / Mobile Data Terminal
|–Calculator
|—Scientific Calculator
|—Programmable Calculator
|—Graphing Calculator
|–Wearable
|—Digital wristwatch (Calculator Watch, Smart Watch)
|—Smartglasses
|—Smart Ring
Mini
|-Midrange Computer
|-Superminicomputer
|-Server Computer
Large
|-Supercomputer
|-Minisupercomputer
|-Mainframe Computer
Other
|-Microcontroller
|-Nanocomputer
|-Pizza box form factor
|-Single-board Computer
|-Smartdust
|-Wireless sensor network

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

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

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

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

อธิบายแขนงวิชาของปัญญาประดิษฐ์

เดี๋ยวนี้ ผลิตภัณฑ์อิเล็กทรอนิกส์ที่บรรจุคุณสมบัติของ AI หรือ ปัญญาประดิษฐ์ มีมากขึ้นเรื่อยๆ

ปัญญาประดิษฐ์มีหลายแขนงมาก จะอธิบายให้เข้าใจง่ายๆ ก็ไม่ใช่เรื่องง่ายๆ

แต่ก็จะลองอธิบายดู

1. Machine Learning คือ การให้เครื่องมันเรียนรู้ข้อมูลที่รู้จักมาก่อน และมีผลเฉลยอยู่ก่อนแล้ว โดยมนุษย์เรานั่นแหล่ะเฉลยเอาไว้ ให้มันเรียนเข้าไป เรียนเยอะๆ จุดประสงค์ก็เพื่อว่า ถ้ามีข้อมูลใหม่เข้ามา ก็จะได้ให้มันทำนายด้วยตัวเอง ว่าด้วยข้อมูลแบบนี้นะ ผลเฉลยมันควรจะเป็นยังไง

จากนั้นพอมันเก่งมากพอ มนุษย์เราก็จะเริ่มให้มันเรียนรู้เอง โดยคราวนี้มนุษย์เราจะไม่เฉลยคำตอบให้มันล่ะ ให้มันเฉลยคำตอบเอง เรียนเอง สอนตัวเอง

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

สำหรับนักคอมพิวเตอร์ ซึ่งต้องเป็นผู้ที่เข้าใจเบื้องหลังการทำงานของมัน ก็จะเกี่ยวข้องผูกพันกับ Machine Learning ผ่านความเข้าใจในทฤษฎีพื้นฐานที่เกี่ยวเนื่อง เช่น Naive Bayes, Neural Network, Support Vector Machines, Decision Tree, Fuzzy Logics, Regression, Discriminant Analysis, Ensemble, Hidden Markov Model, Bayesian Network เป็นต้น

แขนกลกดเครื่องคิดเลข

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

สำหรับผู้บริโภคอย่างเรา เราได้สัมผัสมันแล้วผ่านเครือข่ายสังคม เราได้บอกว่าตัวเราชอบอะไร เราเป็นใคร เราอยู่ที่ไหน เราได้อธิบายความผ่าน hash tag เรากด like กด wow เราแชร์รูป

เครื่องมันจะนับ จัดเรียง จำแนก จัดกลุ่ม หาความสัมพันธ์ จากการกระทำของเรา

เครื่องมันไม่รู้ว่าการที่คนเยอะแยะที่บอกว่าตัวเองชอบเครื่องประดับและมักจะแชร์ภาพเครื่องประดับ ทำไมจึงไปกดติดตามเพจ Cartier หรือ Tiffany & Co ซึ่งมีรูปภาพเครื่องประดับ มันไม่รู้ด้วยซ้ำว่า คำว่าเครื่องประดับ กับ รูปภาพเครื่องประดับ มันคืออะไร (การอธิบายข้อมูลเป็นแขนง Ontology ซึ่งแยกต่างหากออกไป ไม่ได้อยู่ใน Data Mining) แต่มันได้รู้ว่าสิ่งเหล่านี้มีความเกี่ยวข้องกัน และเป็นกลุ่มเดียวกันผ่านการ “นับ” จากการที่มนุษย์เราอธิบายความ

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

สำหรับนักคอมพิวเตอร์ ซึ่งต้องเป็นผู้ที่เข้าใจเบื้องหลังการทำงานของมัน (อีกล่ะ) ก็จะเกี่ยวข้องผูกพันกับ Data Mining ผ่านทฤษฎีพื้นฐาน เช่น Centroid Clustering, Hierarchical Clustering, Density Clustering, Association Rule Learning, Frequent Itemsets เป็นต้น

จริงๆยังมีแขนงอื่นของ AI อีกหลายตัวที่ไม่ได้อธิบาย บางตัวก็เป็นเรื่องใกล้ตัว เช่น Image Processing, Ontology หรือ Natural Language Processing

ในขณะที่บางตัวก็ไกลตัวไปเลย เช่น Bioinformatics, Evolutionary Computation หรือ Brain Informatics

ทฤษฎีการคำนวณสำหรับคอมพิวเตอร์และทฤษฎีการประมวลผลสารสนเทศ