นี่คือบทความที่ได้รวบรวม tips และเคล็ด(ไม่ลับ) ในการพัฒนาตัวเองเพื่อเป็นโปรแกรมเมอร์ที่ดีขึ้นกว่าเดิม โดยได้รวบรวมเทคนิค แนวคิด และมุมมอง ซึ่งกลั่นกรองมาจากประสบการณ์ที่ได้ประสบพบเจอส่วนตัว รวมไปถึงจากแหล่งข้อมูลอื่น ๆ ที่น่าสนใจ มีเคล็ดลับหรือทิปส์อะไรที่น่าสนใจ รวบรวมไว้แล้วครบ จบในบทความนี้ครับ นี่คือบทความที่เพื่อน ๆ ต้องแชร์หรือ bookmark เก็บไว้อ่านได้เลยครับ
การเป็นโปรแกรมเมอร์นั้นหลีกเลี่ยงไม่ได้ที่จะต้องใช้ Google ในการค้นหาคำตอบหรือโซลูชั่นต่าง ๆ ซึ่งมันก็ไปสอดคล้องกับสกิลในการรีเสิร์ช ยิ่งถ้าเรามีสกิลนี้มากเท่าไหร่ เราจะยิ่งเรียนรู้และแก้ปัญหาได้ด้วยตัวเองได้ดียิ่งขึ้น ถ้าเราสามารถใช้ Google ได้อย่างมีประสิทธิภาพ จะทำให้ช่วยลดระยะเวลาในการพัฒนาหรือช่วยให้งานเสร็จไวมากยิ่งขึ้น ซึ่ง Google นั้นเรียกได้ว่าเป็นสกิลที่เป็นพื้นฐานและขาดไม่ได้ไปแล้วในปัจจุบัน
เขียนคอมเมนต์ในโค้ดในกรณีที่โค้ดของเราอาจจะดูซับซ้อนหรือเราประเมินแล้วว่าคนที่มาแก้ไขหรืออ่านทีหลังจะเข้าใจได้อยาก ดังนั้นก็จงเขียนคอมเมนต์ไว้ คนมาเขียนทีหลังหรือเขียนร่วมกันจะได้เข้าใจง่าย
ถ้าโค้ดที่เขียนสามารถอธิบายและสื่อความหมายเข้าใจได้ง่ายในตัวมันเอง ก็ไม่จำเป็นต้องเขียนคอมเมนต์ลงไปในโค้ดให้ดูรกหรือยืดยาวเสียเปล่า
การอ่าน docs นั้นเป็นอีกหนึ่งสกิลที่สำคัญ เพราะบางทีเฟรมเวิร์ค ไลบรารี่ หรือเครื่องมือบางตัว ก็ไม่ได้มีตัวอย่าง บทความ หรือวิดีโอสอนต่าง ๆ ออกมาเยอะมากนัก การที่เราสามารถอ่านทำความเข้าใจเกี่ยวกับ docs ได้นั้นจะช่วยให้เราทำความเข้าใจและหาทางที่จะทำให้งานเราบรรลุไปได้ หรือในอีกกรณีที่แตกต่างกันสำหรับบางเฟรมเวิร์คหรือไลบรารีดัง ๆ ก็มีข้อมูลที่ต้องการใน docs ให้ครบ แต่สำหรับมือใหม่กับสิ่งนั้นอาจจะต้องอ่านทำความเข้าใจภาพรวมของสิ่ง ๆ นั้นก่อนค่อยมาอ่าน docs เพราะว่า docs จะค่อนข้างเป็นทางการ ในช่วงเริ่มต้นอาจจะยากในการทำความเข้าใจ แต่ถ้าเข้าใจภาพรวมแล้วโดยการอ่านบทความหรือ tutorials มาก่อนก็จะทำให้เข้าใจได้ง่ายมากยิ่งขึ้น สรุปได้ว่า การอ่านทำความเข้าใจ docs ได้ดี เป็นสกิลที่ควรต้องมีติดตัว
ค้นหาใครสักคนที่มีประสบการณ์ จะทำให้เราสามารถเรียนรู้หรือรับคำแนะนำจากเขาคนนั้นได้อย่างถูกทิศทางและไปได้ไวมากยิ่งขึ้น
จากข้อก่อนหน้าที่เราจะหา mentor สักคน ในข้อนี้ก็จะตรงกันข้ามคือเป็น mentor ซึ่งพอถึงจุดนี้เราก็น่าจะมีประสบการณ์มาพอสมควรแล้ว ซึ่งการเป็น mentor ให้กับผู้อื่นนี่แหละจะทำให้เราได้ถ่ายทอดประสบการณ์ของเราออกไปบ้าง ช่วยให้ตกผลึกทางความรู้มากยิ่งขึ้น
ตัวแปรและฟังก์ชันควรสื่อความหมายในตัวมันเองได้ หลาย ๆ คนมักจะมักง่ายหรือตั้งชื่อตัวแปร (Python) เช่น
a = 10
b = 20
c = a + b
อะไรทำนองนี้ไม่ควรตั้งชื่อตัวแปรแบบนี้ ควรตั้งให้สื่อความหมาย
เช่น
val1 = 10
val2 = 20
total_val = val1 + val2
เป็นต้น
โค้ดส่วนไหนที่ไม่ได้ใช้แล้วก็ลบออกไปเสีย เพราะยิ่งโค้ดเยอะก็ยิ่งใช้เวลาในการวิเคราะห์และทำความเข้าใจเยอะมากขึ้นตามไปด้วย เสีย cost ด้านเวลามากขึ้นไปอีก ดังนั้นถ้ามันไม่ได้ถูกใช้แล้ว ก็จงลบออกไป
สองสิ่งนี้คือหัวใจหลักของโปรแกรมมิ่งก็ว่าได้ ถ้าเข้าใจสองสิ่งนี้ดี จะต่อยอดไปเรียนภาษาอื่น ๆ ก็ทำได้ไม่ยากเย็น
หลายครั้งที่ติดปัญหา และส่วนใหญ่มักจะเป็นปัญหาที่มีคนเคยพบเจอแล้วทั้งสิ้น ดังนั้นการถามคำถามก็เป็นสิ่งที่สามารถทำได้ แต่ต้องพยายามแก้ไขปัญหาด้วยตัวเองก่อน เมื่อพยายามจนสุดแล้วก็ยังไม่สามารถแก้ไขหรือหาคำตอบได้ การเรียบเรียงคำถามเพื่อคำตอบที่คาดหวังก็เป็นสิ่งที่ทำได้
ไม่มีอะไรที่ได้มาง่าย ๆ โดยไร้ซึ่งความพยายาม ทุก ๆ คนเริ่มมาจากจุดเดียวกัน คือไม่มีใครที่จะรู้มาตั้งแต่แรก เกิดความการเริ่มต้นเรียนรู้และฝึกฝนกันแทบทั้่งสิ้น ดังนั้นอย่ายอมแพ้ สู้ต่อไป สักวันจะเป็นวันของเรา
การโค้ดไปโดยที่ยังไม่ชัวร์เรื่อง requirements ที่ได้รับมาตั้งแต่ต้นนั้นจะทำให้เกิดความคลุมเคลือในการเขียนโค้ด รวมไปถึงการเกิดปัญหาผิดพลาดที่เพียงแค่มอง requirement ไม่ขาด ตกไปเพียงแค่บางฟีเจอร์บางถืออาจต้องรื้อโค้ดหลายส่วนเพื่อเริ่มต้นใหม่กันเลยก็เป็นไปได้ ดังนั้นควรมอง requirements ต่าง ๆ ให้ขาดและเคลียร์ตั้งแต่แรก
เทคโนโลยีเปลี่ยนแปลงทุกวันอย่างรวดเร็ว อย่ายึดติดเทคโนโลยีเดิม เปิดใจให้พร้อมอยู่เสมอสำหรับเรียนรู้เทคโนโลยีใหม่ ๆ
มีภาษาและเฟรมเวิร์คต่าง ๆ มากมายให้เราได้เรียนรู้ แน่นอนว่ามันเป็นไปไม่ได้ที่เราจะเก่งทุก ๆ อย่างให้ได้ แต่จงเรียนหรือทำให้เก่งหรือ expert สักทาง จากนั้นก็เรียนรู้ส่วนอื่น ๆ ที่เกี่ยวข้อง เพื่อให้เสริมกัน และให้มองภาพรวมออก
หลายคนเมื่อฟังอาจจะอุทาน "อิหยังหว่า (อะไรหว่า ภาษาอิสาน)" ซึ่งเหตุผลก็คือการสอนหรือถ่ายทอดออกไปนั้นจะช่วยให้สิ่งที่เราได้เรียนรู้มาก่อนหน้าหรือประสบการณ์ก่อนหน้าของเรานั้นเราจะจำมันได้ขึ้นใจมากยิ่งขึ้นและมันจะยิ่งติดหนึบ ติดหนับ ซึมซับอยู่ในหัวของเรานานมากยิ่งขึ้น เพราะว่าการที่จะสอนได้ก็ต้องทำการบ้านและรีเสิร์ชมาพอสมควรบ้างแล้ว ดังนั้นการสอนหรือถ่ายทอดออกไป ก็เป็นอีกรูปแบบวิธีการหนึ่งในการเรียนรู้แบบเนียน ๆ ที่มีประสิทธิภาพโคตร ๆ (ขออภัยคำหยาบ)
เราต้องรู้ว่าเรากำลังจะทำสิ่งเหล่านี้หรือเขียนโค้ดส่วนนี้ไปทำไป (why?) แทนที่จะเริ่มต้นด้วยการที่จะทำมันอย่างไร (how?) คือถ้า how แล้ว ค่อย why นั้นบรรลัยมานักต่อนัก lol
ข้อนี้ถือเป็นอีกข้อที่ควรจะไฮไลท์ไว้ได้เลย เพรไาะว่าหลาย ๆ คนมักจะลงมือเขียนโค้ดก่อนโดยไม่ได้รู้เบื้องลึกหรือเบื้องหลังหรือหลักการทำงานของสิ่ง ๆ นั้น ดังนั้นต้องทำความเข้าใจกับ fundamentals ก่อน เพื่อมองภาพรวม จากนั้นค่อยลงมือเขียนโค้ด จะทำให้เขียนโค้ดได้เข้าใจ ราบรื่นและมีประสิทธิภาพมากยิ่งขึ้น ข้อนี้ก็ค่อนข้างที่จะสำคัญมากกกกกก (ก.ไก่ ล้านตัว)
หลาย ๆ คนคงเคยก็อปปี้โค้ดจากแหล่งต่าง ๆ เช่น Stackoverflow มาใช้ในโปรเจคท์ แต่ก็มีหลายคนที่ก็อปมาแล้วโค้ดทำงานได้ แต่ไม่รู้ว่าจริง ๆ แล้วโค้ดส่วนนี้มันทำหน้าที่อะไรกันแน่ จะทำให้เกิดปัญหาตามมาในภายหลังได้
ยกตัวอย่างเช่น "programming คืออะไรครับ/คะ?"
คำถามนี้ดูไม่ make sense เสียเลย ยังทำให้คนที่ได้ยินหัวร้อนไปด้วยเอาได้ เพราะในเบื้องต้นนั้นบ่งบอกได้ว่าคุณนั้นแทบไม่มีความพยายามเลย ทำไมถึงบอกแบบนี้ก็เพราะว่าจริง ๆ แล้วใน Google ก็มีคำตอบและบทความหลาย ๆ บทความที่เกี่ยวข้องเขียนอธิบายไว้ค่อนช้างเยอะ ดังนั้นควรที่จะค้นหาก่อนที่จะถามคำถามแบบนี้ แต่เชื่อว่าหลาย ๆ คนล้วนมีข้อผิดพลาดกันได้ เมื่อเวลาและประสบการณ์ที่เริ่มเยอะขึ้นจะทำให้เรารู้ว่าคำถามไหนที่ควรถาม หรือคำถามไหนไม่ควรถาม
ทำไมถึงบอกแบบนี้ ? ก็เพราะว่าบางที่ requirements หรือสิ่งที่ user ขอมาอาจจะไม่เป็นแบบที่เขาคิดไว้ก็เป็นได้ ถ้าเราสามารถแนะนำได้ว่าจริง ๆ แล้ว use cases จริงมันควรเป็นแบบนั้นแบบนี้ก็ควรแนะนำให้ user ให้เข้าใจแต่แรก เพราะว่าบางที user อาจไม่ได้มีประสบการณ์ด้านนี้มาก่อน ดังนั้นเราสามารถคิดแทนได้ แต่ก็ควรอยู่ในขอบเขตที่ user ต้องการ
วิธีการที่ว่านี้เป็นที่นิยมและถูกใช้อย่างแพร่หลาย ฝรั่งจะเรียกว่า "Coding 3 times" ซึ่งแบ่งออกได้ดังนี้คือ
ครั้งที่ 1 - เป็นการ proof concept ว่าโปรเจคท์หรือฟีเจอร์นี้มันเป็นไปได้นะ
ครั้งที่ 2 - เป็นการเขียนโค้ดเพื่อให้สามารถทำงานได้จริง
ครั้งที่ 3 - เป็นการเขียนโค้ดเพื่อให้เกิดความถูกต้องในทางที่ควรจะเป็น
โดยสรุปเป็นนัยยะก็คือ ครั้งแรกเขียนเพื่อพิสูจน์ว่าเป็นไปได้ ครั้งที่สองเขียนเพื่อให้โค้ดทำงานได้ตามที่วางแผนเอาไว้ ครั้งสุดท้ายเป็นการปรับแก้ไขโค้ดจากที่ทำงานได้ ให้เป็นโค้ดที่เหมาะสม ตาม best practice ที่ควรจะเป็น
จริง ๆ แล้วคงอาจไม่ต้องมี discussion อะไรแบบนี้เกี่ยวกับภาษาอังกฤษ เพราะว่ามันคือ standard ไปแล้วสำหรับวงการนี้ เรียกได้ว่าเป็น a must (ต้องรู้) ข้อมูลบนโลกส่วนใหญ่ล้วนเป็นภาษาอังกฤษ ภาษาไทยเป็นเพียงแค่แหล่งข้อมูลอันน้อยนิด เมื่อเทียบกับข้อมูลมากมายมหาศาลบนโลกอินเทอร์เน็ต นั้่นหมายความว่า ถ้าเราสามารถเข้าถึงและทำความเข้าใจกับข้อมูลมากมายมหาศาลเหล่านั้น มันจะทำให้เราอยากเรียนอะไรก็ได้เรียน อยากค้นหาและทำความเข้าใจกับอะไรก็ทำได้เว้ยยยย มันง่ายและสะดวกไปหมด
มันเป็นสิ่งที่ชาญฉลาดแทนที่เราจะเรียนรู้ทุกสิ่งอย่างด้วยตนเอง แต่เมื่อมีคนอื่นที่เรียนรู้ก่อนเราอยู่แล้ว ก็ควรเรียนรู้จากประสบการณ์ของคนอื่นได้เลย เช่น ประสบการณ์ของคนอื่น ๆ ก็มีอยู่หลายรูปแบบที่เราสามารถตักตวงหรือเก็บเกี่ยวได้ ไม่ว่าจะเป็นหนังสือ บทความ คอร์สเรียน ฯลฯ ที่คนอื่นสกัดเน้น ๆ มาให้แล้ว
โฆษณาแพพพพพครับ: เช่น คุณสามารถสมัครคอร์สเรียนไพธอนจาก Stackpython กว่า 10 คอร์ส หนึ่งในคอร์สไพธอนที่เยอะสุดในไทย โปรสุดท้ายส่งท้ายปี 2021 พลาดปีนี้ คุณอาจพลาดคอร์สเรียนออนไลน์เด็ด ๆ ของเราไปตลอดกาล 😉 (ปีหน้าไม่มีคอร์สออนไลน์แบบคลิปแล้ว จะมีแต่สอนสด) แต่ยังซัพพอร์ตคนที่ลงคอร์สออนไลน์เหมือนเดิมนะครับ
รายละเอียด
เคยได้ยินภาษิตไหมครับว่า "คบคนเช่นใด ย่อมเป็นเช่นนั้น" แน่นอนว่าถ้าคุณแวดล้อมไปด้วยคนเก่ง ๆ mindset ดี ๆ ไม่ช้าก็เร็วคุณก็จะเก่งและดีตามไปด้วย
บุ๊คมาร์คหรือเซฟบทความ วิดีโอ หรือลิ้งค์แหล่งเรียนรู้ที่น่าสนใจไว้ มันจะทำให้คุณได้ใกล้ชิดแหล่งเรียนรู้มากยิ่งขึ้น คือเปิดมาเจอเลย คุณก็พร้อมจะเปิดอ่านมันได้ทันที
ส่วนนี้คือการสร้างความ productiveให้กับตัวคุณเอง คุณต้องหัดใช้คีย์ลัดต่าง ๆ สำหรับเครื่องมือเขียนโค้ดที่ใช้ เช่น คุณกำลังใช้ Visual Studio Code ก็ต้องทำความเข้าใจการใช้คีย์ลัดต่าง ๆ เพื่อให้การทำงานได้รวดเร็วมากยิ่งขึ้น แทนที่จะกดปุ่ม 10 สเต็ปถึงจะได้ผลลัพธ์ที่ต้องการ แต่ใช้คีย์ลัดเพียงแค่ 2 ครั้งก็สามารถทำได้เทียบเท่ากับการทำก่อนหน้า !!
ถ้าเรายังไม่เคยได้แตะ bad practice เราจะไม่เข้าใจ best practice อย่างลึกซึ้งที่ควรจะเป็น ตัวอย่างเช่น Docker ถ้าเราไม่เคย deploy งานแบบเก่าก่อนที่ไม่ได้มี containerization อย่าง Docker มาช่วยเราจะไม่เข้าใจ paintpoint ที่จะนำ Docker มาใช้อย่างถ่องแท้ ดังนั้นอย่ากลัวที่จะ bad พิสูจน์และทำให้เห็นก่อนว่า Why แทนที่จะเป็น How
ข้อนี้จริง ๆ หลายคนอาจจะละเลยไปหรือเห็นว่าไม่สำคัญ แต่ก็อยู่ที่ดุลยพินิจแต่ละคน เพราะว่าการใช้คำหรือภาษาที่ถูกต้องนั้นจะช่วยทำให้เราดูน่าเชื่อถือมากยิ่งขึ้น ขนาดภาษาเรายังไม่ใส่ใจในรายละเอียดเล็ก ๆ น้อย ๆ แล้วโค้ดเราล่ะ ?
จริง ๆ การดูคลิปวิดีโอ tutorials ต่าง ๆ ก็มีข้อดีในตัวอยู่ในตัวและเป็นประโยชน์อยู่แล้ว เพียงแต่อย่าเอาแต่ดู ให้ลงมือปฎิบัติด้วย จะได้เจอปัญหาจริง ๆ เรียนรู้จากการทำโปรเจคท์จริงไปเลย อย่าเอาแต่ดูคลิปคนอื่น จงออกไปท่องยุทธภพด้วยตัวคุณเอง แล้วคุณจะได้บาดแผล และทำให้คุณแกร่งขึ้น !!!
การทำ to do list เป็นสิ่งที่จะช่วยให้เรารู้ทิศทางและเป้าหมายในแต่ละวันอย่างชัดเจน ทำให้ทราบว่า วันนี้ พรุ่งนี้ หรือมะรืน หรืออาจจะระยะยาวกว่านั้นตามแต่สถานการณ์ของแต่ละคน
ปรับสมดุลระหว่างการใช้ชีวิตในเรื่องส่วนตัวและการทำงานให้สมดุลกัน ควรกำหนดเวลาในการทำงานและเวลาในการใช้ชีวิตส่วนตัวให้ชัดเจน ซึ่งข้อนี้ก็ไม่ง่ายเท่าไหร่สำหรับใครหลาย ๆ คน ว่าไหมครับ ?
เทคโนโลยีในสายงานโปรแกรมมิ่งนั้นมีอะไรใหม่ ๆ ออกมาในทุกวัน ดังนั้นจึงอย่าหยุดเรียนรู้ อย่ายึดติดกับเทคโนโลยีเดิม ๆ
สุดท้าย.....ถึงตาคุณ
.... yours ? ข้อนี้ให้เพื่อน ๆ แสดงความคิดเห็นมาคนละ 1 นะครับ 🙂 ในโพสต์บน Facebook page โพสต์นี้
เป็นอย่างไรกันบ้างครับกับเคล็ดลับและทิปส์ที่น่าสนใจที่ผมได้รวบรวมไว้ ถ้ามีส่วนอื่น ๆ เพิ่มเติม สามารถแสดงความคิดเห็นกันเข้ามาได้เลยนะครับ อย่าเก็บไว้ แชร์มาให้เป็นประโยชน์ต่อคนอื่นได้เลย ขอบคุณครับ