มีหลายคนถามเข้ามาในเพจว่า “ฝึก logic อย่างไรดีถึงจะเก่ง” ซึ่งวันนี้แอดจะมาเล่าเทคนิคต่าง ๆ จากประสบการณ์ส่วนตัวให้ฟังกันครับ

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

ก่อนอื่นอยากให้เพื่อน ๆ ทุกคนเข้าใจก่อนว่าการเขียนโปรแกรมเนี่ย จริง ๆ แล้วมันแบ่งออกเป็น 2 ส่วนหลัก ๆ ด้วยกัน นั่นคือ “syntax” และ “logic” ครับ ซึ่งเจ้า syntax มันก็คือคำสั่งต่าง ๆ ภายในโปรแกรมแต่ละภาษา เป็นเรื่องของ grammar ล้วน ๆ เลย อย่างเช่น “คำสั่ง if ต้องมี () แล้วก็มีเงื่อนไข …..” อะไรก็ว่าไป และอีกส่วนนึงที่สำคัญไม่แพ้กัน นั่นก็คือ logic ซึ่งมันจะเป็นวิธีคิดในการนำคำสั่งต่าง ๆ มาใช้งานและนำไปใช้ในการแก้ปัญหาต่อนั่นเอง
ดังนั้น ก่อนที่เราจะฝึก logic ให้แข็งแรงได้ สิ่งแรกที่ต้องทำก่อนเลยก็คือการ “เข้าใจ” syntax ครับ

สำหรับใครที่มาเริ่มตั้งแต่ 0 เลยสิ่งสำคัญที่สุดเลยคือการเลือกภาษาที่ต้องการก่อนครับ ซึ่งถ้าเราอยากจะทำเว็บ อาจจะไปทาง Javascript อยากทำเกมก็อาจจะไป C# หรือถ้าอยากไปแนว AI, Data Science ก็อาจจะเป็น Python ซึ่งถ้าใครมาแบบ 0 เลย ไม่รู้จะฝึกอะไรดี แอดก็ขอแนะนำ 2 ภาษาด้วยกัน นั่นคือ Python และ C สามารถเลือกใช้ได้ตามต้องการเลยครับ
- Python จะเขียนง่ายกว่ามากและมีคำสั่งให้เลือกใช้เยอะ ทำให้โค้ดเขียนง่ายและสบายในช่วงแรก
- C ตัว syntax จะยุ่งยากกว่าหน่อยนึง แต่จะฝึก logic ในขั้นพื้นฐานได้ดีกว่า python มาก ๆ
ส่วนตัวแอดขอแนะนำเป็น C ครับ เพราะหลาย ๆ คำสั่งใน Python ที่ทำให้เราเขียนโค้ดได้ง่าย มักจะเป็น logic พื้นฐานเกือบหมดเลย เช่น การเรียงเลข การหาค่ามากที่สุด น้อยที่สุด ซึ่งสิ่งเหล่านี้ Python มีให้ใช้มันก็สะดวกกว่าจริง ๆ แต่เมื่อถึงคราวที่เราต้องประยุกต์ การที่เราได้ลองฝึกแนวคิดพื้นฐานเหล่านี้ก็จะทำให้เรานำไปต่อยอดได้ง่ายนั่นเอง ถ้าใครตามมาเขียน C เหมือนกับแอด ต้องปลอบใจก่อนเลยว่าช่วงแรกมีท้อแน่นอนเพราะ syntax มันจะค่อนข้างยุ่งยาก แต่ถ้าผ่านจุดนั้นไปได้ เราก็จะเก่งขึ้นมาก ๆ เช่นกัน สู้ ๆ ครับ

พอเราเลือกภาษาได้แล้ว ขั้นต่อไปก็คือการ “เรียน” นั่นเองนะครับ สมัยนี้เราก็สามารถหาดูการสอนเขียนโปรแกรมได้เยอะแยะมากมายเลยนะครับ ซึ่งแน่นอนว่า BorntoDev ของเราก็มีสอนเช่นเดียวกัน สามารถดูเพิ่มเติมได้ที่ Youtube หรือจะดูในหน้าเว็บ school.borntodev.com ก็ได้นะคร้าบบ
ซึ่งในการเรียนอยากจะให้จำไว้เสมอว่า เราไม่ได้เรียนเพื่อแค่ให้รู้ว่าคำสั่งมันทำงานยังไง แต่เราต้องเรียนเพื่อให้ “เข้าใจ” ว่า “แต่ละคำสั่งเหมาะกับสถานการณ์แบบไหน” ทั้งนี้ทั้งนั้นในช่วงแรก ๆ เราอาจจะยังมองไม่ออกว่าคำสั่งไหนเหมาะกับอะไร ซึ่งมันไม่เป็นไรเลยครับ เดี๋ยวพอเราฝึกฝนไปเรื่อย ๆ เราก็จะเริ่มเห็นวิธีการใช้งานของแต่ละคำสั่งเองครับ

มาถึงขั้นตอนนี้ ทุกคนก็จะเข้าใจตัวภาษาที่ตัวเองเลือกไว้แล้วประมาณนึง แต่ยังไม่ได้ลองใช้จริง ซึ่งแอดขอแนะนำเลยว่าให้ลองไปฝึกฝนกันในเว็บ https://www.borntodev.com/devlab ได้เลย ซึ่งในช่วงเริ่มต้น แนะนำว่าไล่ทำโจทย์ official ให้หมดเลยครับ จากนั้นจะทำโจทย์จากทางบ้านอื่น ๆ ต่อก็ทำได้เลย หรือจะขยับขึ้นไปเป็น Leetcode เลยก็ได้ครับ แต่ไม่ค่อยแนะนำ เพราะส่วนใหญ่ Leetcode จะมีหัวข้อที่ advance ขึ้นไปอีกครับ เช่น OOP, Data Structure, เทคนิค two pointer, Dynamic programming และอื่น ๆ ตรงนี้ไม่ต้องกังวลนะครับ เขียนโปรแกรมไปเรื่อย ๆ เราจะค่อย ๆ เจอสิ่งเหล่านี้ไปเองครับ ค่อย ๆ เรียนรู้กันไป ไว้เราเริ่มแข็งแรงด้าน logic แล้วก็กลับมาฝึกที่ Leetcode ก็ได้ครับ
อ่านมาถึงตรงนี้หลายคนอาจจะเริ่มเอะใจแล้วว่า มีที่ให้เรียน มีที่ให้ฝึก แต่ไม่เห็นมีเทคนิคหรือแนวคิดเลย ซึ่งแอดขอบอกก่อนเลยว่าอธิบายทั้งวันก็ไม่จบ 5555555 แต่จริง ๆ แล้วมันมีวิธีให้เราฝึกฝนอยู่ครับ
อย่างแรกนั่นคือการฝึกฝนด้วยโค้ดจริง ๆ เลย อย่างที่ได้อธิบายไปก่อนหน้านี้ ไม่ว่าจะเป็น Devlab, Leetcode หรืออื่น ๆ ตรงนี้เราจะได้ฝึกทั้ง syntax และ logic ในเวลาเดียวกัน ซึ่งแน่นอนว่าถ้ามันง่ายก็คงจะไม่มีโพสต์นี้ขึ้นมาหรอกนะครับ 55555555 และแน่นอนว่าทุกคนที่เขียนโปรแกรมไปพอเราเริ่มไต่ระดับขึ้นไปเรื่อย ๆ เราจะเจอกับสิ่งที่เรียกว่า “ทางตัน”

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

อีกส่วนนึงที่สำคัญมาก ๆ ที่จะทำให้การเรียงลำดับความคิดของเราดีขึ้นมาก ๆ นั่นคือสิ่งที่เรียกว่า “ความคิดเชิงตรรกะ” ครับ ตรงนี้ฝึกฝนกันได้ อาจจะพวกเกม Sudoku หรือเกมฝึกสมองอื่น ๆ ครับ หลัก ๆ แอดฝึกจาก Sudoku เยอะที่สุดแล้ว มันจะช่วยให้เราแยกส่วนปัญหาออกและลำดับความคิดได้ดีขึ้นครับ เวลาว่าง ๆ ก็อาจจะหยิบ Sudoku มาเล่นสัก 1-2 กระดาน / วัน ก็โอเคแล้วครับ บางวันแอดเพลิน ๆ ก็เล่นไป 20-30 กระดานก็มี พอเรากลับมาเขียนโค้ด หัวเราก็จะแล่นเหมือนเรือติดสปีดเลย
ซึ่งในการฝึกเขียนโปรแกรมแอดไม่แนะนำให้ “ใช้ AI เพื่อแก้ทั้งโจทย์” แต่อยากให้ “ใช้ AI เพื่อเรียนรู้” อาจจะศึกษาแนวคิดจาก AI ถาม syntax หรือการเรียนรู้วิธีใหม่ ๆ เพราะถ้าเราแค่อยากให้โจทย์มันผ่านแล้วใช้ AI แก้ไปเฉย ๆ คนที่ได้รับผลเสียที่สุดคือตัวเราครับ อย่างที่บอกไปข้างต้นว่ามันคือการ “ฝึก” ดังนั้นเราควรจะเก็บเกี่ยวความรู้และลองทำด้วยตัวเองให้เยอะที่สุด จะส่งผลดีกับเราที่สุดครับ

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