เป้าหมายของการเรียนเขียนโปรแกรมสำหรับแต่ละคนอาจจะแตกต่างกันออกไป แต่วัตถุประสงค์หลักของการเรียนเขียนโปรแกรมคือการทำให้เราสามารถเขียนโปรแกรมเพื่อแก้ปัญหาต่างๆได้
ปัญหาที่สามารถแก้ได้ด้วยคอมพิวเตอร์ ( ไม่ใช่ปัญหาทุกอย่างสามารถแก้ได้ด้วย Computer )ในทางเขียนโปรแกรมคือปัญหาที่สามารถแก้ได้ด้วย Computer ทั้งด้วย Computer ในปัจจุบันและอนาคต คือบางปัญหาอาจจะแก้ได้นะแต่อาจจะต้องใช้เวลาทำการคำนวณนานกว่าอายุของดวงอาทิตย์สะอีก! โดยมากปัญหาทาง Computer มักเป็นปัญหาตัดสินใจ (decision problem) คือ เป็นปัญหาประเภทให้ตอบว่าเป็นจริงหรือเป็นเท็จ หรือตอบว่า ใช่หรือ ตอบว่า ไม่ใช่เท่านั้น นัก Computer จะมองทุกสิ่งทุกอย่างใน Computer เป็นปัญหาและวิธีการแก้ปัญหานั้นเอง เช่นในเกมปัญหาคือตัวละครที่เราเล่นอยู่ชนกับกำแพงหรือยัง ทางแก้ปัญหาก็คือเราจะต้องมีระบบ Vector ใน Game ที่ช่วยเราคำนวณว่า Object 2 อันชนกันหรือไม่ หรือโปรแกรมที่ใช้จัดตารางเวรของพยาบาลว่าใครจะเข้า เวรวันไหนดี ปัญหาก็คือการจัดตารางเวรโดยมี Input เป็นข้อจำกัดของพยาบาลแต่ละคน การแก้ปัญหาคือเราจะมีวิธีการอย่างไรในการจัดตารางเวรให้กับพยาบาลโดยไม่ละเมิดข้อจำกัดของแต่ละคนและไม่ละเมิดข้อจำกัดกลางเช่นจะไม่มีพยาบาลคนไหนอยู่เวรติดกันเกิน 12 ชั่วโมง เป็นต้น
ในทาง Computer แล้วมีปัญหาจำนวนหนึ่งที่ไม่สามารถแก้ได้ด้วย Computer เช่นปัญหาการหยุด (Halting Problem) ในทาง Computer มีการแบ่งชนิดของปัญหาออกเป็นแบบอื่นๆอีกเช่น
หัวข้อนี้สำหรับผู้อ่านที่งงไม่เป็นไรแค่อยากให้เห็นภาพว่า นักศึกษาด้าน Computer เขาศึกษาอะไรกันบ้าง และปัญหา บวกกับวิธีการแก้ปัญหาก็เป็นหัวใจหลักที่นัก Computer ทำการศึกษานั้นเอง จะสังเกตเห็นว่า ปัญหาที่ตัดสินได้( decidable )จะเป็นปัญหาที่ยอมรับได้ ( acceptable ) เสมอและปัญหาที่ตัดสินไม่ได้ (Undecidable )ก็อาจเป็นปัญหา acceptable ก็ได้
ปัญหาทาง Computer คือปัญหาที่เอาไว้ให้ Computer แก้ แต่สำหรับมนุษย์เองด้วยกันแล้วนั้น เราก็มีปัญหาเช่นกัน หนึ่งในนั้นคือปัญหาเรื่องของการสื่อสาร ซึ่ง Computer ก็มีปัญหาด้านการสื่อสารเช่นกัน เช่น ถ้าหากเราต้องการเขียนโปรแกรมคอมพิวเตอร์ให้ไปทำงานอยู่บนโทรศัพท์มือถือ Computer ของเราจะทำการเก็บข้อมูล GPS ไว้ใน File และเมื่อต่อ Internet ได้จะทำการ Upload ข้อมูลขึ้นไปให้กับ Server ที่อยู่ในระบบ Cloud ในอีกซีกโลกหนึ่ง นอกจากเรื่องของการแก้ปัญหาทาง Algorithm แล้วการเขียนโปรแกรม Computer ยังต้องมีความรู้ด้าน Computer Architecture ( Software Architecture , Hardware Architecture , System Architecture)
การเขียนโปรแกรมคือการสร้างการสื่อสารที่เข้าใจง่ายให้ Computer ที่ไม่ค่อยฉลาดทำงาน ! โดยการอธิบายวิธีการทำงานอย่างเป็นขั้นเป็นตอน ซึ่งเรียกว่า Algorithm นั้นเอง และทักษะเพื่อสร้าง Algorithm คือ Computational Thinking (การคิดเชิงคำนวณ) ครับ ซึ่ง Algorithm นี้ไม่ได้จำกัดกับ การทำงานของ Computer เท่านั้น ในระบบตั้งแต่เล็กไปจนใหญ่เช่นวิธีการตัดหญ้าให้เป็นระเบียบไปจนกระทั้งถึงการสื่อสารของทหารในยามสงคราม ล้วนแล้วแต่ต้องมี Algorithm ที่ดีงานถึงจะได้ราบรื่น และใช้ทรัพยากรน้อย ซึ่งคนที่เก่ง Computational Thinking ก็จะมีประโยชน์ตรงนี้นั้นเองคือสามารถทำงานได้อย่างหลากหลายและมีประสิทธิภาพนั้นเองครับ
ตอนนี้เราอยู่ในโลกที่มีสิ่งต่างๆเกิดขึ้นใหม่ทุกวันเราได้ยินเรื่องราวของการเป็นมหาเศรษฐีพันล้าน เรื่องราวของ Jack Ma เรื่องของ Steve Jobs เรื่องของ Mark Zuckerberg เรื่องราวของ Startup ระดับ Unicorn เรื่องราวของการพลิกจากความล้มเหลวมาเป็นร่ำรวย ลองสังเกตดูไหมครับว่าเรื่องราวเหล่านี้มักจะวนเวียนอยู่ที่เรื่องของ Technology และมีการเขียนโปรแกรม Computer เป็นส่วนประกอบของเรื่องเหล่านั้นด้วย จะดีไหมถ้าเราจะไม่ได้เป็นแค่ผู้เสพ (Social Network , Technology และอื่นๆ) แต่เป็นผู้สร้างมันด้วย และวิธีการสร้างธุรกิจและความร่ำรวยใหม่ๆ ล้วนเกิดขึ้นบนพื้นฐานของ Technology Computer / AI แทบทั้งสิ้น ดังนั้นการเตรียมความพร้อมของเด็กๆเพื่อเรียนเขียนโปรแกรมคอมพิวเตอร์จึงเป็นสิ่งสำคัญ***
นอกเรื่องนิดนึง มีบางท่านที่อาจจะเคยอ่านพวกบทความ (ของนักการตลาดที่อ่านหนังสือมานิดๆหน่อยๆ )เถียงในใจว่า Steve Jobs เป็นสายการตลาดและสาย Design นะ ไม่ใช่ สาย Technical จ๋า และ Steve Wozniak คู่หูที่สนิทกันเคยบอกด้วยว่า Steve Jobs เขียนโปรแกรมไม่เป็น แต่อย่าลืมว่า Steve Jobs เป็นนักอนาคตศาสตร์ เป็นคนที่อ่านหนังสือเยอะมาก เป็นคนที่ฝันเห็นอนาคตและวิเคราะห์อนาคตอย่างจริงจังมากและแม่นยำมาก จึงทำให้สามารถกำหนดวิสัยทัศน์และสามารถสร้างสิ่งประดิษฐ์เปลี่ยนโลกได้หลายอย่างเลยทีเดียวครับ และอีกเรื่องหนึ่งคือต้องอย่าลืมด้วยว่า Steve Jobs อยู่ที่สหรัฐอเมริกา ดินแดนแห่ง American Dream และเสรีภาพ ยอกจากนั้น Steve Jobs ยังแวดล้อมตัวเองด้วยนักเทคโนโลยีเจ๋งๆจำนวนมาก ( Steve Jobs กับ Steve Wozniak สนิทกันเพราะว่า ทั้งคู่ทำวงจรไฟฟ้าแกล้งคนกันไม่ใช่เหรอ? Steve Jobs วัยเด็กสร้างสิ่งประดิษฐ์ จากวงจรไฟฟ้าเพื่อมาแกล้งคนอื่นมากมายจนมารู้จักกับ Wozniak ซึ่งชอบแกล้งตั้งแต่ครูไปจนถึงเพื่อนนักเรียน นอกจากนี้ Steve Jobs ยังรู้เรื่อง Tecnical มากพอที่จะยืนเถียงเป็นชั่วโมง ชั่วโมงเรื่องการทำงานของ ภาษา Objective-C ดีกว่า JAVA อย่างไร และนี่คือเหตุผลที่ ใน iPhone , iPad ยังใช้ Objective - C จนถึงทุกวันนี้ นอกจากนี้ Steve Jobs ยังมีความรู้เรื่องระบบปฏิบัติการ Computer แบบลงลึกและละเอียดมากๆ อีกด้วย ถึงแม้ว่า Steve Jobs จะไม่ได้เป็นคนเขียน Code โดยตรงแต่การบอกว่า Steve Jobs เขียน Code ไม่เป็นเลย จึงเป็นการกล่าวที่ออกจะไม่ยุติธรรมกับ Steve Jobs มากนัก เช่นเดียวกับ Jeff Bezos คนที่รวยที่สุดในโลกในปัจจุบัน โค้นแชมป์เก่าอย่าง Bill Gate ไปในปี 2018 ) และถึงแม้ว่า Jeff Bezos จะไม่ได้เขียนโปรแกรมมานานแล้วแต่เขาก็เป็นส่วนหนึ่งของทีมผู้เขียนโปรแกรมยุคแรกๆของ Amazon นอกจากนี้ เขา (Jeff Bezos )ยังสนใจวิทยาการคอมพิวเตอร์ตั้งแต่เด็ก ๆ และจบการศึกษาด้าน Computer Science จากมหาวิทยาลัย Princeton University อีกด้วย
ซึ่งการเรียนเขียนโปรแกรมเพื่อสร้างสิ่งใหม่ๆก็จะได้เป็นการฝึกทักษะความคิดสร้างสรรค์ด้วย
เราลองมาดู List ของคนที่รวยที่สุดในโลกกัน...
(ภาพบุคคลที่รวยที่สุดในโลกประจำปี 2018 โดย Frobes https://www.forbes.com/billionaires/#39ab6221251c )
เป็นเรื่องที่ไม่น่าแปลกใจเลยที่ใน List ของ คนที่รวยที่สุดในโลกจะมีคนที่เกี่ยวข้องกับ Technology Computer อยู่ถึง 4 คน
หมายเหตุส่วนคนอื่นๆคือ
แต่ถ้าคุณกำลังอยากจะรวยทางลัดละก็ การเรียนเขียนโปรแกรมอาจจะไม่เหมาะกับคุณ เพราะว่าการเรียนเขียนโปรแกรมต้องใช้แรงกายแรงใจค่อนข้างเยอะ มีอะไรหลายอย่างเลยครับที่ต้องเรียน และแน่นอนครับว่าคณิตศาสตร์ก็เป็นเรื่องที่สำคัญไม่น้อยทีเดียว นัก Computer ส่วนหนึ่งก็เป็นนักคณิตศาสตร์ด้วย และเพราะว่าการเรียนเขียนโปรแกรมก็คือการเรียนเพื่อที่จะสื่อสารความคิดของเราให้ Computer และให้ Developer คนอื่นๆ เข้าใจครับซึ่งการสื่อสารก็ต้องใช้ภาษา และภาษาที่ใช้เยอะมากสำหรับการเรียนโปรแกรมอยู่ในลักษณะเดียวกับ ภาษาคณิตศาสตร์ครับ ใช่แล้วครับคุณอ่านไม่ผิดแน่นอนเพราะว่า ถ้าเรียนไปลึกๆ คุณจะเข้าใจเลยว่า ภาษาเป็นคณิตศาสตร์อย่างหนึ่ง และคณิตศาสตร์ก็เป็นภาษาอย่างหนึ่งครับ (ถ้าใครไม่เชื่อคำพูดนี้ของผมให้หาหนังสือชื่อ ประมาณว่า linguistic model ครับหนังสือมันจะอารมณ์แบบเปิดมาหน้าแรก นิยามคำในภาษาด้วย set แล้วก็นิยาม Operation บน Set แล้วก็พิสูจน์สมบัติปิดบน set จากนั้นนิยามไวยากรณ์ภาษาเป็น Function ที่ Output เป็น สมาชิกใน Set )และนอกจากนี้การเขียนโปรแกรมคอมพิวเตอร์ถึงแม้ไม่ได้เกี่ยวข้องกับคณิตศาสตร์แบบ 100 % แต่การเขียนโปรแกรมคอมพิวเตอร์ก็ใช้สมองส่วนที่ใช้เรียนคณิตศาสตร์เรียนครับดังนั้น ถ้าอยากเก่งเขียนโปรแกรมให้เรียนคณิตศาสตร์เยอะๆครับผม
การเรียนเขียนโปรแกรมเพื่อที่จะแก้ปัญหานั้นทำให้เราต้องรู้จักการวางแผนเราจะได้รู้ว่าบางครั้งการแก้ปัญหาสามารถแก้ได้หลายทางแต่บางทางก็เหนื่อยสะเหลือเกินตอนทำจริงๆ ดังนั้นเพื่อที่จะแก้ปัญหาได้และไม่เหนื่อยจนเกินไปเราต้องรู้จักการวางแผนที่จะทำมันอย่างเป็นขั้นเป็นตอน อ่านมาถึงตอนนี้ผู้อ่านคงจะคุ้นเคยกับคำว่าขั้นตอนวิธีแล้วใช่ไหมครับ ใช่แล้วมันคือ Algorithm นั้นเอง
ภาพด้านบนคือ Flowchart หรือภาษาไทยเรียนกว่าแผนภาพผังงาน ซึ่งใช้ในการอธิบายวิธีการทำงานอย่างเป็นขั้นเป็นตอน เด็กๆที่เรียนเขียนโปรแกรมกับ EPT จะได้เรียนรู้ Flowchart ด้วย ข้อดีของ Flowchart คือเข้าใจง่ายและสามารถทำให้การเขียน โปรแกรมสามารถมองเป็นภาพได้
Tag ที่น่าสนใจ: เรียนเขียนโปรแกรม การแก้ปัญหา คอมพิวเตอร์ algorithm การสื่อสาร computational_thinking technology steve_jobs jeff_bezos computer_science
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com