Push Technology กับ Pull Technology

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

แต่ก็นั่นแหล่ะ ของมันเรียนมาแล้วแต่ไม่ได้ใช้นาน ๆ ก็มีลืม งั้นมาทบทวนกันหน่อยแล้วกัน

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

ก็ประชุมกันไปครับ เอาคนที่ทำด้านเครือข่าย เครื่องแม่ข่าย โปรแกรมคอมพิวเตอร์ และ ความมั่นคงปลอดภัย มานั่งคุยกัน คุยกันตั้งนานกว่าจะเข้าใจวิธีการทำงาน เพราะพวกเขาคิดว่า ต่างฝ่ายต่างรู้เรื่อง Push Technology กับ Pull Technology กัน เลยไม่ได้อธิบายให้ชัดว่าจะเลือกใช้วิธีไหนกัน

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

Push Technology กับ Pull Technology เป็นเรื่องง่าย ๆ ด้านการสื่อสารข้อมูลผ่านเครือข่ายภายใน เครือข่ายภายนอก หรือเครือข่ายอินเทอร์เน็ตครับ ไม่สนว่าจะใช้โปรโตคอลอะไรเลยก็ยังได้ ขอแค่ปฏิบัติประมาณนี้ก็เรียกว่า Push Technology หรือ Pull Technology แล้ว

เริ่มแรก มาดูภาพที่ผมพยายามอธิบายเกี่ยวกับ Push Technology กันดีกว่า ผมไม่เขียนเยอะนะ ดูหลักการเอาจากรูปแล้วกันครับ

Push Technology
Push Technology

จากภาพข้างบนจะเห็นว่า หลักการ Push Technology คือ ถ้ามองตัวเราเป็น Server เราก็จะมีบทสนทนากับ Client ประมาณว่า

“เธอต่อเข้ามาหาฉันนะ แล้วเธอก็รับโน่นรับนี่จากฉันไปแล้วกัน อย่าบ่นล่ะ รับไปเฉย ๆ นิ่ง ๆ เธอไม่ต้องขอ ฉันให้เธอเอง”

ในขณะที่ถ้าเป็น Pull Technology จะเป็นยังไง โดยปรกติมันจะเป็นแบบภาพข้างล่างนี้ครับ ไม่อธิบายเยอะนะ ลองดูจากภาพเอา

Pull Technology
Pull Technology

ถ้าให้อธิบายภาพข้างบนของ Pull Technology เป็นบทสนทนา โดยมองว่าตัวเราเป็น Server แล้วคุยกับ Client ก็จะมีบทสนทนาประมาณว่า

“เธอต่อเข้ามาหาฉันนะ จากนั้นเธอก็บอกมาว่าเธอจะเอาอะไร แล้วถ้าฉันให้ได้ฉันก็ให้เธอเองแหล่ะ แต่ถ้าเธอไม่บอก ฉันก็จะเฉย ๆ นะ ถึงฉันคิดว่ามีสิ่งที่เธอต้องการ ฉันก็ไม่ส่งให้เธอหรอก”

ทีนี้ แบบข้างบนมันเป็น Pull Technology สองทิศทาง มันมีอีกแบบหนึ่งเป็นแบบทิศทางเดียว แบบข้างล่างนี้

Pull Technology (one way)
Pull Technology (one way)

ถ้าอธิบายเป็นบทสนทนาสำหรับ Pull Technology ทิศทางเดียวตามภาพข้างบน โดยมองว่าตัวเราเป็น Server บทสนทนาก็จะประมาณว่า

“เธอต่อเข้ามาหาฉันนะ จากนั้นมีอะไรก็ว่ามา ฉันจะฟังเฉย ๆ อย่างเดียว”

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

ทีนี้เพื่อให้เข้าใจง่ายขึ้นอีกนิดนึง ผมจึงได้ทำตารางเปรียบเทียบครับ จะได้เห็นว่า Push / Pull Technology มันเป็นเบื้องหลังของโปรแกรมคอมพิวเตอร์แบบไหนบ้าง

ตัวอย่างโปรแกรมใช้ Push / Pull
ตัวอย่างโปรแกรมใช้ Push / Pull

จุดสำคัญอีกอย่างหนึ่งที่ผมพบเวลาคุยเรื่อง Push กับ Pull ก็คือ ไม่ค่อยมีใครบอกชัด ๆ ครับว่าใครเป็น Server และใครเป็น Client

อย่าเข้าใจว่า Server คือเครื่องใหญ่ และ Client คือเครื่องเล็กนะครับ สำหรับ Push กับ Pull ไม่จำเป็นที่ Server ต้องเป็นเครื่องใหญ่ และ Client ต้องเป็นเครื่องเล็กเสมอไป

ดังนั้น ก่อนตกลงเรื่อง Push กับ Pull ต้องตกลงกันก่อนเรื่อง Server กับ Client ให้เรียบร้อยครับ คุยผิดนี่ออกทะเลกันเลยทีเดียว

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

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

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

ภาพข้างบน ผมพยายามนำเสนอว่า การพัฒนาซอฟต์แวร์มันตั้งต้นมาจากการที่มีคนคิดค้นทฤษฎีทางคอมพิวเตอร์ (คุณ 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. เป็นอย่างอื่น ไม่เคยเป็นเครื่องใช้ไฟฟ้ามาก่อน แต่ภายหลังถูกเพิ่มเติมวงจรอิเลกทรอนิกส์เข้าไปมากขึ้นเรื่อย ๆ จนกระทั่งมันคำนวณได้ จดจำคำสั่งได้ และ จดจำข้อมูลได้

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

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