Tutorial

ทำไมการเรียนเขียนโปรแกรมมันยากขนาดนี้ !!

By Arnon Puitrakul - 05 เมษายน 2020

ทำไมการเรียนเขียนโปรแกรมมันยากขนาดนี้ !!

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

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

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

นั่งเรียนแล้วทำไมเรายังเขียนไม่ได้ ?

อื้มมมม โอเค ไปต่อ

ตรงนี้เรียนแล้ว เอามาทำอะไรต่อ ?

เอ่ออออ ยากจัง ไปที่การตัดพ้อบ้าง

มันยากเกินไปสำหรับเรา เรียนไม่ได้หรอก

ไปให้สุดกับการดูถูกตัวเองขั้นสุดยอดด้วย Fixed Mindset แบบ ซูปเปอร์ไซย่า

เราอาจจะไม่เกิดมาเพื่อสิ่งนี้ก็ได้ เลิกละ

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

ปัญหาคืออะไร

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

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

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

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

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

ทำไมมันถึงเป็นแบบนี้กันเยอะ

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

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

ให้เราลองนึกภาพเล่น ๆ ดู ว่าวัน ๆ เราเจอปัญหาอะไรบ้าง แล้วมันซ้ำกันทุกวันมั้ย ถ้าใครตอบว่าซ้ำนี่นะะะ อาจจะต้องคิดดี ๆ หน่อย คิดแบบ Logical เลย ถ้าเมื่อวานเราแก้ปัญหา A ได้ นั่นคือ เรารู้ Solution ของปัญหา A แล้ว

ทำให้ ถ้าอีกวัน เราเจอปัญหา A อีก เราก็ควรจะแก้ได้ง่าย เพราะเรารู้ Solution อยู่แล้ว ทำให้ปัญหาที่เราต้องมา 🦶 ก่ายหน้าผากจริง ๆ เนี่ยมันไม่ซ้ำกันเลย

ดังนั้นเราคิดว่า การที่ไม่เคยเรียนเขียนโปรแกรมมาก่อนเลย แล้วไปนั่งเรียน Syntax แล้วหวังว่าจะเขียนโปรแกรมได้ มันดูจะแปลกไปหน่อย

แล้วจะต้องทำยังไง ?

ด่าไปซะเยอะ ถ้าไม่ให้อะไรเลย คนอ่านน่าจะอยากเอาไม้ฟาดหัวเราเต็มทีแล้ว โดยเฉพาะคนที่ทำ Tutorial สอนแบบนั้นอะนะ ฮ่า ๆ

แต่เดี๋ยวก่อน เราไม่ได้บอกว่า วิธีการสอนมันไร้ค่านะ สติค่ะ สตินะ อย่าดราม่า ชั้นรับไม่ไหว แต่กลุ่มคนที่เหมาะอาจจะไม่เหมือนกันมากกว่า คนที่เหมาะน่าจะเป็นคนที่เขียนอยู่แล้ว แล้วต้องการที่จะเรียนภาษาใหม่ นั่นแหละการเข้าใจ Syntax และ Best Practice ในการเขียน จะช่วยได้มาก

แต่คนที่ไม่เคยเลย เอามาเรียน Syntax มันก็ไม่ต่างกับการเอาเครื่องมือยัดใส่มือให้ แล้วบอกให้ไปใช้ได้เต็มที่เลยนะ คนโดนยัดคือ อิหยังฟร๊ะ ว่าแต่ที่ยัดมามันคืออะไร ใช้ยังไงไม่เข้าใจ

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

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

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

เพราะการเขียนโปรแกรม ไม่ใช่การเขียนโปรแกรม แต่เป็นการแก้ปัญหา

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

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

แต่สิ่งที่หลายคนน่าจะขยาดกันคือ ปัญหาที่ว่า อีเครื่องนี่แหละ ลำไย พูดจาภาษาคนไม่รู้เรื่อง ต้องเป็นภาษาเครื่อง นั่นแหละ ทำให้เรายังจำเป็นต้องเรียน Syntax กันอยู่ แต่มันไม่ใช่อย่างแรกที่เราต้องเรียนไง

และ การไปนั่งพิมพ์ Code ที่ดูเท่ ๆ อะไรนั่นอะ มันคือ แค่ส่วนเล็ก ๆ ที่เกิดขึ้นเมื่อเราได้ Solution แล้วมากกว่านะ มันก็คงจริงแหละ ภาพที่คนส่วนใหญ่คิดคือ Programmer ต้องนั่งติดโต๊ะ เขียน Code ทั้งวัน บ้าเหรออ ใครมันจะไปนั่งทั้งวันขนาดนั้นได้ หลังขด หลังแข็งตายพอดี จริง ๆ มันเป็นเรื่องของการ Communication กันมากกว่า

Key Success คือการสื่อสาร

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

ถ้าเราทำคนเดียวไม่ได้ เราก็ต้องช่วยกัน แต่การที่ คนมากกว่า 1 คนจะมาทำงานด้วยกันได้นั้น มันไม่ได้อาศัยแค่ฝีมือของคนใดคนหนึ่งเท่านั้น แต่เป็น การสื่อสาร ระหว่างทีมด้วย ทำให้การเขียนโปรแกรมเก่งล้นฟ้าขนาดไหน แต่ถ้าไม่คุยกับใครเลยไปเจองานจริงที่อลังมาก ๆ จะน๊อคแบบ K.O เอาได้

ดั่งเวลาเรา ไปแข่งการเขียนโปรแกรมอย่าง ACM-ICPC ในทีมมี 3 คน ถ้าเราไม่คุย ไม่สื่อสารกันเลย โต๊ะเล็ก ๆ กับคอมพิวเตอร์หนึ่งเครื่องมันคงจะเละไม่เป็นท่า และผลการแข่งขันเช่นเดียวกัน แต่เมื่อเราร่วมมือ และสื่อสารกัน คนนึงอ่านโจทย์ แก้ปัญหา และ เขียนโปรแกรม อีกคนกำลังกินขนมพร้อมกับบอกรายชื่อขนม และ คนที่ 3 กำลังสอนคนที่ 2 เล่น Minesweeper อยู่ก็จะทำให้ผลการแข่งออกมาเข้ารอบ Asia ได้ เอ๊ะ เด่วนะ เอาเรื่องจริงมาล้อเล่นได้เหรอ เอาจริง ๆ คือ มันก็ต้องช่วยกันไงงงงงง ถึงแม้ว่า เอ่อ... เราจะ เอ่อ.... ไม่ได้ช่วยอะไรไม่ได้เลยก็ตาม 😂

หรือถ้าเราบอกว่า อ่อ ผมเป็น Freelance ทำงานคนเดียว งั้นเราถามต่อ แล้วแกไม่ต้องคุยกับลูกค้ารึไงห่ะ !!! นอกเรื่องละ กลับเข้าเรื่อง ๆ ๆ ๆ ๆ

โอเค สรุปเถอะ ก่อนจะกาวกว่านี้

สรุปเลย การเขียนโปรแกรมจริง ๆ มันไม่ใช่เรื่องของ Syntax ซะทั้งหมด จริง ๆ แล้วมันเป็นส่วนเล็ก ๆ เท่านั้น แต่ส่วนที่ใหญ่กว่านั้นคือ การแก้ปัญหา เพราะถึงแม้กว่า เราจะเก่ง Syntax ขนาดไหน แต่ถ้าเราไม่มีทักษะในการแก้ปัญหาเลย เราก็จะ Syntax ออกมาร้อยเรียงเป็นโปรแกรมได้ ทำให้เราเจอปัญหาคนที่กำลังเรียนครั้งแรกแล้วเปิดมาเจอ Syntax เลยก็จะจบด้วยความ อึน ว่า แล้วไงต่อ ? ไป แต่สำหรับคนที่เคยผ่านการเขียนโปรแกรมมาแล้ว กำลังจะเขียนภาษาใหม่ Concept ใหม่ โอเคแหละ Syntax และ Best Practice อาจจะเป็นทางออกที่เร็วดีก็ได้

เขียนมาขนาดนี้แล้ว ตัดเข้าช่วงโฆษณาฮ่วน ๆ มันเลยละกัน

เคยมั้ยหัดเขียนโปรแกรมแล้วทำไมถึงเขียนไม่ได้จริง ๆ สักที วันนี้เรามี Solution มาเสนอกับ Course Starter Pack for Non-Programmer to be Programmer ที่จะมา Boost ปูพื้นฐานสำหรับคนที่ไม่เคยเขียนโปรแกรมเลย ให้มีพื้นฐานเพียงพอที่จะไปเขียนโปรแกรมจริง ๆ ได้ ติดตามรายละเอียดได้ในเพจ Arnondora ได้เลย

Read Next...

ฮาวทูย้าย Synology Add-on Package ไปอีก Volume

ฮาวทูย้าย Synology Add-on Package ไปอีก Volume

เรื่องราวเกิดจากการที่เราต้องย้าย Add-on Package ใน DSM และคิดว่าหลาย ๆ คนน่าจะต้องประสบเรื่องราวคล้าย ๆ กัน วันนี้เราจะมาเล่าวิธีการว่า เราทำยังไง เจอปัญหาอะไร และ แก้ปัญหาอย่างไรให้ได้อ่านกัน...

จัดการ Docker Container ง่าย ๆ ด้วย Portainer

จัดการ Docker Container ง่าย ๆ ด้วย Portainer

การใช้ Docker CLI ในการจัดการ Container เป็นท่าที่เราใช้งานกันทั่วไป มันมีความยุ่งยาก และผิดพลาดได้ง่ายยังไม่นับว่ามี Instance หลายตัว ทำให้เราต้องค่อย ๆ SSH เข้าไปทำทีละตัว มันจะดีกว่ามั้ย หากเรามี Centralised Container Managment ที่มี Web GUI ให้เราด้วย วันนี้เราจะพาไปทำความรู้จักกับ Portainer กัน...

Host Website จากบ้านด้วย Cloudflare Tunnel ใน 10 นาที

Host Website จากบ้านด้วย Cloudflare Tunnel ใน 10 นาที

ปกติหากเราต้องการจะเปิดเว็บสักเว็บ เราจำเป็นต้องมี Web Server ตั้งอยู่ที่ไหนสักที่หนึ่ง ต้องใช้ค่าใช้จ่าย พร้อมกับต้องจัดการเรื่องความปลอดภัยอีก วันนี้เราจะมาแนะนำวิธีการที่ง่ายแสนง่าย ปลอดภัย และฟรี กับ Cloudflare Tunnel ให้อ่านกัน...

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

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