การติดตั้ง Tensorflow บน Microsoft Windows

ผมอยากลองใช้ Tensorflow ตามกระแสครับ คือจริง ๆ มันก็มีเครื่องมือหลายตัวที่ทำงานด้าน AI ได้ ไม่ว่าจะเป็น Matlab, Octave, Weka หรือ RapidMiner (รวมทั้ง Library หรือ Framework ด้าน AI ที่ใช้กับภาษา C/C++) แต่ว่าเครื่องมือเหล่านั้นเป็นสหสาขา AI เลยทำได้แบบกลาง ๆ คลุม ๆ ไม่เน้นเฉพาะด้าน ซึ่งแตกต่างจาก Tensorflow ที่เด่นด้าน Artificial Neural Network โดยเฉพาะ

ผมต้องการติดตั้งเพื่อใช้งาน Tensorflow บน Microsoft Windows ครับ และหลังจากใช้ความพยายามหลาย ๆ ๆ ๆ ๆ ครั้ง ผิดโน่นนี่นั่นครั้งแล้วครั้งเล่า ก็ได้ทำให้ผมสามารถวาดสิ่งที่เรียกว่า Prerequisite หรือก็คือสิ่งที่จะต้องมีมาก่อน ก่อนที่เราจะติดตั้ง Tensorflow บน Microsoft Windows ได้ โดยมีแผนภาพตามภาพข้างล่างนี้ครับ

Prerequisite ในการติดตั้ง Tensorflow บน Microsoft Windows
Prerequisite ในการติดตั้ง Tensorflow บน Microsoft Windows

ณ ปัจจุบันนี้ ผมยังติดตั้ง Tensorflow บน Microsoft Windows ไม่สำเร็จครับ เพราะเครื่องของผมมันไม่ได้ติดตั้ง Microsoft Windows 64 บิต

ก็เขียนแปะไว้ก่อนครับ เผื่อมีตังค์ซื้อเครื่องที่มี CPU 64 บิตและลง Microsoft Windows 64 บิต ผมก็จะได้เอาบันทึกช่วยจำชิ้นนี้ มาทวนการติดตั้ง Tensorflow อีกครั้ง

ภาษาคอมพิวเตอร์กับแพลตฟอร์ม

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

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

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

มันเป็นเรื่องช่วยไม่ได้ เพราะเรามีเรื่องอื่นต้องจำอีกเยอะ!!!

ใน IEEE Spectrum ได้แบ่งประเภทของแพลตฟอร์มไว้ 4 ประเภท คือ Enterprise, Web, Mobile และ Embedded System ซึ่งแพลตฟอร์มเหล่านั้น ก็ล้วนทำงานอยู่บนเครื่องจักรประมวลผล ที่มีพฤติกรรมแบบคอมพิวเตอร์ทั้งนั้น ดังนั้น มันก็ต้องมีช่องทางให้สั่งงานมันได้ผ่านภาษาคอมพิวเตอร์ ไม่ว่าทางใดก็ทางนึง

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

ภาษาคอมพิวเตอร์กับแพลตฟอร์ม
ภาษาคอมพิวเตอร์กับแพลตฟอร์ม

ภาพข้างบนคือภาษาคอมพิวเตอร์และเครื่องไม้เครื่องมือที่ผมทำเป็น จะเห็นว่าผมไร้ทักษะในแพลตฟอร์ม Mobile และ Embedded อย่างเห็นได้ชัด!!!

คือคิดไม่เป็น ทำไม่เป็นเลยแหล่ะ ไม่ได้ไปเรียนรู้อะไรเลย และแพลตฟอร์มเหล่านั้นเป็นอนาคตซะด้วย!!!

มันเลยเหมือนผมเป็นคนเก่าแก่ในแพลตฟอร์มเก่า แต่เป็นเด็กใหม่ในแพลตฟอร์มใหม่ อะไรประมาณนั้น

ในขณะเดียวกัน บนแพลตฟอร์ม Enterprise หรือ Web เอง ทุกวันนี้ก็มีสิ่งใหม่ ๆ ปรากฎขึ้นมาให้ใช้งานมากมาย ไม่ว่าจะเป็นภาษา Python เอย Ruby เอย หรือเครื่องมือ เช่น Ruby on Rails, AngularJS, Node.js, Express.js แต่ผมก็ไม่ได้ไปต่อในเรื่องเหล่านี้เหมือนกัน

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

ด้วยวิธีการนี้ทำให้ผมมองเห็นได้ง่าย ว่าผมอ่อนด้อยและไร้ทักษะในด้านไหนบ้าง และถ้ามันจำเป็น ผมหมายถึงจำเป็นจริง ๆ นะ ผมก็จะไปพัฒนาในด้านนั้น

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

อ้าวไม่ใช่ล่ะ!!!

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

เวลาแต่ล่ะคนมีจำกัด ก็ต้องเก็ง ๆ กันไปครับ

 

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

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

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