เรียนเขียนโปรแกรมแล้วจะได้ทักษะอะไรบ้าง

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

เรียนเขียนโปรแกรมได้ทักษะในการแก้ปัญหา

แล้วอะไรละคือปัญหา?

ปัญหาที่สามารถแก้ได้ด้วยคอมพิวเตอร์ ( ไม่ใช่ปัญหาทุกอย่างสามารถแก้ได้ด้วย Computer  )ในทางเขียนโปรแกรมคือปัญหาที่สามารถแก้ได้ด้วย Computer ทั้งด้วย Computer ในปัจจุบันและอนาคต คือบางปัญหาอาจจะแก้ได้นะแต่อาจจะต้องใช้เวลาทำการคำนวณนานกว่าอายุของดวงอาทิตย์สะอีก! โดยมากปัญหาทาง Computer มักเป็นปัญหาตัดสินใจ (decision problem) คือ เป็นปัญหาประเภทให้ตอบว่าเป็นจริงหรือเป็นเท็จ หรือตอบว่า ใช่หรือ ตอบว่า ไม่ใช่เท่านั้น นัก Computer จะมองทุกสิ่งทุกอย่างใน Computer เป็นปัญหาและวิธีการแก้ปัญหานั้นเอง เช่นในเกมปัญหาคือตัวละครที่เราเล่นอยู่ชนกับกำแพงหรือยัง ทางแก้ปัญหาก็คือเราจะต้องมีระบบ Vector ใน Game ที่ช่วยเราคำนวณว่า Object 2 อันชนกันหรือไม่ หรือโปรแกรมที่ใช้จัดตารางเวรของพยาบาลว่าใครจะเข้า เวรวันไหนดี ปัญหาก็คือการจัดตารางเวรโดยมี Input เป็นข้อจำกัดของพยาบาลแต่ละคน การแก้ปัญหาคือเราจะมีวิธีการอย่างไรในการจัดตารางเวรให้กับพยาบาลโดยไม่ละเมิดข้อจำกัดของแต่ละคนและไม่ละเมิดข้อจำกัดกลางเช่นจะไม่มีพยาบาลคนไหนอยู่เวรติดกันเกิน 12 ชั่วโมง เป็นต้น

ในทาง Computer แล้วมีปัญหาจำนวนหนึ่งที่ไม่สามารถแก้ได้ด้วย Computer เช่นปัญหาการหยุด (Halting Problem) ในทาง Computer มีการแบ่งชนิดของปัญหาออกเป็นแบบอื่นๆอีกเช่น

  • ปัญหาที่ตัดสินได้ (decidable) คือปัญหาที่ Computer สามารถ ตอบได้ว่าใช่ หรือไม่ใช่เสมอสำหรับทุกๆ Input
  • ปัญหาที่ยอมรับได้ (acceptable) คือปัญหาที่สามารถตอบว่าใช่ เสมอ สำหรับ Input ที่ใช่ แต่สำหรับ Input ที่ไม่ใช่ เครื่องอาจจะทำงานไปเรื่อยๆแบบไม่จบก็ได้ (คือติด Loop นั้นเอง ซึ่งตัวมันเองก็ไม่รู้ด้วยว่ากำลังติด Loop อยู่)
  • ปัญหาที่ตัดสินไม่ได้ (Undecidable) คือ ปัญหาอื่นๆที่ไม่ใช่ปัญหาที่ตัดสินใจได้

หัวข้อนี้สำหรับผู้อ่านที่งงไม่เป็นไรแค่อยากให้เห็นภาพว่า นักศึกษาด้าน 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 คน

  1. Jeff Bezos เจ้าของ Amazon (การศึกษา Bachelor of Science degrees in electrical engineering and computer science )
  2. Bill Gate → Microsoft
  3. Mark Zuckerberg → facebook (การศึกษา Computer Science , Harvard)
  4. Larry Ellison → บริษัท Database ยักษ์ใหญ่ Oracle

หมายเหตุส่วนคนอื่นๆคือ

  • Warren Buffett → Berkshire Hathaway
  • Bernard Arnault → LVMH เจ้าของแบรนด์หรูเช่น Louis Vuitton
  • Amancio Ortega → เสื้อผ้า Zara
  • Carlos Slim → mobile telecommunication
  • พี่น้อง Koch → Koch Industry ธุรกิจหลากหลายเช่น เคมีพันธ์

แต่ถ้าคุณกำลังอยากจะรวยทางลัดละก็ การเรียนเขียนโปรแกรมอาจจะไม่เหมาะกับคุณ เพราะว่าการเรียนเขียนโปรแกรมต้องใช้แรงกายแรงใจค่อนข้างเยอะ มีอะไรหลายอย่างเลยครับที่ต้องเรียน และแน่นอนครับว่าคณิตศาสตร์ก็เป็นเรื่องที่สำคัญไม่น้อยทีเดียว นัก Computer ส่วนหนึ่งก็เป็นนักคณิตศาสตร์ด้วย และเพราะว่าการเรียนเขียนโปรแกรมก็คือการเรียนเพื่อที่จะสื่อสารความคิดของเราให้ Computer และให้ Developer คนอื่นๆ เข้าใจครับซึ่งการสื่อสารก็ต้องใช้ภาษา และภาษาที่ใช้เยอะมากสำหรับการเรียนโปรแกรมอยู่ในลักษณะเดียวกับ ภาษาคณิตศาสตร์ครับ ใช่แล้วครับคุณอ่านไม่ผิดแน่นอนเพราะว่า ถ้าเรียนไปลึกๆ คุณจะเข้าใจเลยว่า ภาษาเป็นคณิตศาสตร์อย่างหนึ่ง และคณิตศาสตร์ก็เป็นภาษาอย่างหนึ่งครับ (ถ้าใครไม่เชื่อคำพูดนี้ของผมให้หาหนังสือชื่อ ประมาณว่า linguistic model ครับหนังสือมันจะอารมณ์แบบเปิดมาหน้าแรก นิยามคำในภาษาด้วย set แล้วก็นิยาม Operation บน Set แล้วก็พิสูจน์สมบัติปิดบน set จากนั้นนิยามไวยากรณ์ภาษาเป็น Function ที่ Output เป็น สมาชิกใน Set )และนอกจากนี้การเขียนโปรแกรมคอมพิวเตอร์ถึงแม้ไม่ได้เกี่ยวข้องกับคณิตศาสตร์แบบ 100 % แต่การเขียนโปรแกรมคอมพิวเตอร์ก็ใช้สมองส่วนที่ใช้เรียนคณิตศาสตร์เรียนครับดังนั้น ถ้าอยากเก่งเขียนโปรแกรมให้เรียนคณิตศาสตร์เยอะๆครับผม

เรียนเขียนโปรแกรมได้เรียนรู้การวางแผน

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

 

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

ฟรี TUTORIAL JAVA

ฟรีtutorial JAVA 01 install Eclipse ฟรีtutorial JAVA 02 intro to programming Eclipse ฟรีtutorial JAVA 03 condiotion ฟรีtutorial JAVA 04.loop ฟรีtutorial JAVA 05.array ฟรีtutorial JAVA 05 2 array cont ฟรีtutorial JAVA 06 01 function ฟรีtutorial JAVA 06 02 function cont ฟรีtutorial JAVA 07 object ฟรีtutorial JAVA 08 string ฟรีtutorial JAVA 09 constructor ฟรีtutorial JAVA 10 01 oop ฟรีtutorial JAVA 10 02 oop2 ฟรีtutorial JAVA 11 exception ฟรีtutorial JAVA 12 reading file ฟรีtutorial JAVA 13 thread ฟรีtutorial JAVA 14 generic ฟรีtutorial JAVA 15 01 GUI ฟรีtutorial JAVA 15 02 GUI2 ฟรีtutorial JAVA 15 03.GUI3 ฟรีtutorial JAVA 16 using WindowBuilder ฟรีtutorial JAVA 17 event ฟรีtutorial JAVA 18 database management system ฟรีtutorial JAVA 19 ER diagram ฟรีtutorial JAVA 20 Relational ฟรีtutorial JAVA 21 Xampp ฟรีtutorial JAVA 22 JDBC ฟรีtutorial JAVA 23 MVC ฟรีtutorial JAVA 24 SQL ฟรีtutorial JAVA
ขอย้ำอีกครั้งว่าเนื้อหาที่เห็นอยู่นี้ไม่ใช่เนื้อหาตามปกติที่เราสอนในห้องเรียนเป็นแค่ tutorial ไว้อ่านประกอบเฉยๆ แทบไม่เกี่ยวกันเลย และไม่เกี่ยวกับการบ้านที่ทำครับ ในห้องเรียนเนื้อหาจะเยอะกว่านี้ค่อนข้างมากครับ
ขอบคุณน้องตี้ อย่างสูงสำหรับ Tutorial ดีๆ

ฟรี TUTORIAL DATA STRUCTURE

DATA STRUCTURE

ฟรีtutorial : DATA STRUCTURE : 01 1การเรียงลำดับ(Sorting) ฟรีtutorial : DATA STRUCTURE : 01 2 การเรียงลำดับ2 ฟรีtutorial : DATA STRUCTURE : 02 อาร์เรย์ลิสต์ (Array List) ฟรีtutorial : DATA STRUCTURE : 03 ลิงค์ลิสต์ (Linked List) ฟรีtutorial : DATA STRUCTURE : 04 สแต๊ค ฟรีtutorial : DATA STRUCTURE : 05 1 คิวและไพออริตี้คิว ฟรีtutorial : DATA STRUCTURE : 05 2 คิวและไพออริตี้คิว ฟรีtutorial : DATA STRUCTURE : 06 1 ไบนารีทรี ฟรีtutorial : DATA STRUCTURE : 06 2 ไบนารีเสิร์ชทรี ฟรีtutorial : DATA STRUCTURE : 06 3 ไบนารีเสิร์ชทรี ฟรีtutorial : DATA STRUCTURE : 08 แฮช ฟรีtutorial : DATA STRUCTURE : 09 กราฟ ฟรีtutorial : DATA STRUCTURE :
ขอย้ำอีกครั้งว่าเนื้อหาที่เห็นอยู่นี้ไม่ใช่เนื้อหาตามปกติที่เราสอนในห้องเรียนเป็นแค่ tutorial ไว้อ่านประกอบเฉยๆ แทบไม่เกี่ยวกันเลย และไม่เกี่ยวกับการบ้านที่ทำครับ ในห้องเรียนเนื้อหาจะเยอะกว่านี้ค่อนข้างมากครับ
ขอบคุณน้องตี้ อย่างสูงสำหรับ Tutorial ดีๆ


แผนผังการเรียนเขียนโปรแกรม