27 February 2014

เขียนโปรแกรมให้เป็น คิดกันอย่างไร? แก้ปัญหากันอย่างไร? - ตอนที่ 1

Updated on

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

        การเขียนโปรแกรมสมัยนี้จะไม่เหมือนกับสมัยก่อนแล้ว จากเมื่อก่อนการที่จะเขียนโปรแกรมขึ้นมาตัวหนึ่งได้นั้นจะต้องใช้เวลา การฝึกฝน และความพยายามพอสมควร แต่ในปัจจุบันนี้โปรแกรมที่ใช้เขียนโปรแกรมนั้นมีตัวช่วยให้สะดวกขึ้นเป็นอย่างมาก นึกถึงสมัยก่อนที่นั่งเขียนเว็ปทีก็ต้องเขียนภาษา HTML เอง ในขณะที่ทุกวันนี้แค่ Dreamweaver ก็จบแล้ว ลากๆวางๆ แก้นิดหน่อย (ยังไม่รวมไปถึง Framework ขั้นสูงตัวอื่นๆ)

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

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

        อ้าว!? มันต่างกันยังไง?



        อนึ่งนั้นเป็นความคิดเห็นของเจ้าของบล็อกล้วนๆไม่จำเป็นต้องเชื่อก็ได้

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


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

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

        เพราะอะไร?

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

        การเขียนโปรแกรมก็เปรียบเสมือนการสร้างสรรค์คำสั่งให้ออกมาเป็นผลงาน เฉกเช่นเดียวกับงานศิลปะ

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

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



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

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



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


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

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

                "เวลามีน้อย" - เริ่มต้นช้า ซึ่งจริงๆควรเผื่อเวลาศึกษาพื้นฐานตั้งแต่เริ่มต้น

                "งมมานานแล้วแต่ไม่เข้าใจ" - วิธีการในการศึกษาหาข้อมูลไม่ถูกวิธี

                "หาตัวอย่างไม่เจอ" - อันนี้หนักสุด...เสพย์ติดตัวอย่างไปซะแล้ว

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

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

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

        แต่ก่อนที่จะฝึกเขียนไปเรื่อยๆได้นั่นจะต้องมีอะไรบ้าง?


        ตราบใดที่พื้นฐานยังไม่ดีพอ การพัฒนาตัวเองให้เขียนโปรแกรมเป็นนั้นก็ลำบาก ดังนั้นการศึกษาพื้นฐานเป็นสิ่งแรกที่ควรทำก่อน ส่วนพื้นฐานมีอะไรบ้างก็ลองไปหากันเอาเอง พวกหนังสือเริ่มต้นก็มีเยอะแยะให้หาอ่าน XD


        พิมพ์มายืดยาวละ ขอจบตอนที่ 1 ไว้เพียงเท่านี้ก่อนดีกว่า แล้วบทความต่อไปจะมาพิมพ์ให้อ่านกันต่อว่า การเขียนโปรแกรมมีวิธีคิดกันอย่างไรในตอนที่ 2 [Android Dev Tips] เขียนโปรแกรมให้เป็น คิดกันอย่างไร? แก้ปัญหากันอย่างไร? [ตอนที่ 2]