Babel Coder

5 วิธี สู่การเป็นโปรแกรมเมอร์ที่ดีกว่า

beginner

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

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

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

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

สารบัญ

ทำทันที อย่ารีรอ

ด้วยจิตวิญญาณแห่งโปรแกรมเมอร์สายโซเซียลอย่างแท้ทรู ทุก 15 นาทีของการเขียนโค้ด นอกจากแก้วสตาร์บัคแล้วก็มีเฟสบุคนี่หละที่อยู่เคียงข้าง

เพราะเราไม่อยากตกเทรนด์ เราจึงติดตามมันทุกเพจของโลก IT เมื่อเลื่อนฟีดไปสักพักก็พบเจอกับโพสต์เกี่ยวกับเทคนิคการเขียนโปรแกรมที่น่าสนใจ…

ทว่า เราเป็นโปรแกรมเมอร์ผู้ไม่มีแม้แต่เสี้ยววินาทีให้รีรอ เราจึงเลือกที่จะไม่อ่านมัน แต่ก็เสียดายอยู่นะ…โพสต์ออกจะดี งั้นเอาอย่างนี้ดีกว่า แชร์ไปซะพร้อมตั้งสเตตัสอย่างกิ๊บเก๋ว่า “แปะไว้ก่อน เดี๋ยวมาอ่าน” จากนั้นจึงเลื่อนฟีดไปอ่านโพสต์ถัดไป~ (ไหนว่าไม่มีเวลาไงฟระ)

พูดไปแล้วก็น่าสงสารโพสต์ที่ถูกแชร์นั้นนะ เพราะหลังจากนั้นมันก็ไม่เคยถูกเปิดอ่านอีกเลย =…=

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

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

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

เราไม่ได้ให้ความสำคัญเรื่องเวลา เพราะเราคิดว่าเวลาคือ “ของฟรี” แต่ระยะเวลา “ไม่ฟรี” เวลาเป็นสิ่งที่แพงที่สุด [1]

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

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

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

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

เพียงเท่านี้ชีวิตก็จะก้าวทันข่าวสารด้วยเวลาอันสั้นและปราศจากการแปะไว้ก่อนแล้วหละ

เรียนรู้ด้วยหนังสือและคอร์สลิขสิทธิ์เท่านั้น

ผมเชื่อว่าทุกคนเคยเล่นเกม และเป็นธรรมชาติของเราที่จะลองมันทุกเกมที่เรามีอยู่ในมือ

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

แล้วยังไงต่อ? ตอนนี้พอเกมล้นมือเราจึงมีทางเลือกให้เล่นมากกว่าเดิม ปัญหาของการมีเกมเยอะคือหัวใจเราก็จะแบ่งปันให้เกมได้มากเกม (อารมณ์เดียวกับมักมากในกาม - หลายใจ) เล่นเกมนี้เบื่อแล้วไปเล่นอีกเกมดีกว่า สุดท้ายเราก็เล่นมันไม่จบซักเกม (เว้นแต่ว่าเกมนั้นจะสนุกจริงๆ หนะนะ)

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

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

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

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

เทคนิคที่จะนำเสนอในหัวข้อที่สองนี้ผมจึงเลือก (แอบ) โหลด e-book ที่สนใจ เพียงครั้งละเล่มแล้วอ่านให้จบก่อนแทน ในกรณีที่ต้องการความรู้เพิ่มเติม ผมก็จะโหลดเฉพาะ e-book ที่เป็นเรื่องเดียวกันเท่านั้น อ่านจบเรื่องนี้เมื่อไหร่ถึงจะไปเรื่องถัดไป

ด้วยเทคนิคนี้ เมื่อรู้สึกกระสันอยากจะอ่านเรื่องอื่น ก็ต้องฝืนใจตนให้อ่านเรื่องเก่าให้จบก่อน

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

หากคุณเป็นหนึ่งในคนที่มีวินัยอยู่แล้ว ต่อให้หนังสือกองตรงหน้ากี่แสนโกฏิก็อ่านจบ - ข้ามหัวข้อนี้ได้เลยฮะ

ฝึกสมองให้จำเป็นภาพ

หากนี่คือรายการของ 10 อย่างที่คุณต้องจำด้วยเวลาอันสั้น

  • กระต่าย
  • คบไฟ
  • ไม้บรรทัด
  • กระดานดำ
  • เทพีเสรีภาพ
  • หนังยาง
  • ห่วงฮูร่าฮูบ
  • บิกินี
  • แว่นตาดำ
  • พัด

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

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

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

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

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

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

ว่าแต่ แล้วจำเป็นภาพมันเกี่ยวอะไรกับโปรแกรมเมอร์อย่างเราๆละ?

หลักการสำคัญกว่าไวยากรณ์

Syntax ที่ถูกต้องทำให้เราเขียนโค้ดได้โดยไม่ถูกคอมไพเลอร์ด่า ทว่าเฉพาะ Syntax ไม่เพียงพอที่จะทำให้เราเป็นโปรแกรมเมอร์ที่ดีขึ้นได้

ต่อให้คุณท่อง API ของ jQuery ได้ทั้งหมดก็ไม่ได้การันตีว่าคุณจะเขียนหน้าเพจได้ดี หากเราปราศจากความเข้าใจหลักการที่ว่าหน้าเพจหนึ่งควรมี ID เดียว เราประกาศ ID เดิมๆในหลายๆ element สุดท้ายใช้ jQuery ด้วย API ชั้นเลิศเพื่อเข้าถึงกลุ่มของ element ที่มี ID เดียวกันนั้น สุดท้ายผลลัพธ์อาจไม่ใช่สิ่งที่ต้องการ เพราะถ้าจะทำแบบนี้ควรแปะ class ให้อีลีเมนต์มากกว่า

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

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

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

ไม่ว่าคุณจะใช้ DTAC AIS หรือ Truemove หลักการยังคงเหมือนกันบนพื้นฐานของโทรศัพท์เคลื่อนที่ที่คุณมี การเรียนรู้หลักคิดจึงทำให้คุณได้อะไรมากกว่าการท่องจำ Syntax นั่นเอง

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

ความผิดพลาดคือกระบวนการของการเรียนรู้

อยากพัฒนาตนเอง จงเลียนแบบ REPL!

การที่เราจะทราบได้ว่าโปรแกรมของเราทำงานได้ถูกต้องตามที่เราคิดหรือไม่จำเป็นต้องทดสอบมันดู ไม่ว่าจะเป็นการ execute โปรแกรม ผ่าน test suite หรืออาศัย Interactive Shell ที่เป็นการทำงานแบบ REPL ล้วนสามารถตอบโจทย์นี้ได้ทั้งสิ้น

Read-Eval-Print Loop หรือ REPL สามารถช่วยให้เราทดสอบโค้ดอย่างง่ายได้และเป็นสิ่งที่เราทุกคนใช้กันเป็นปกติอยู่แล้ว

สมมติผมมีข้อความ hello world ที่มีช่องว่างตรงกลางสองตัว ต้องการแปลงเป็น hello-world เราจึงเปิด Interactive Shell ของ Node.js ขึ้นมาทดสอบ

แรกเริ่มเราใช้ replace เพื่อแทนช่องว่างเป็นเครื่องหมายขีด

'hello  world'.replace(' ', '-')

หลังการทดสอบ ตัวโปรแกรมจะแสดงผลลัพธ์เป็น hello- world แน่นอนว่านี่ไม่ใช่ผลลัพธ์ที่เราต้องการ เพราะยังมีช่องว่างเหลืออยู่อีกหนึ่งตัว

เราตระหนักได้ถึงข้อผิดพลาดนี้ จึงทดสอบคำสั่งใหม่ผ่าน Regular Expression

'hello  world'.replace(/ +/g, '-')

รอบนี้ผลลัพธ์ของการทำงานเป็น hello-world ซึ่งเป็นผลลัพธ์ที่ถูกต้อง

กระบวนการที่เกริ่นกันมาอย่างยาวนานนี้คือ REPL แรกเริ่มโปรแกรมรับข้อมูลเข้า (Read) และทำการประมวลผล (Eval) พร้อมส่งผลลัพธ์การทำงาน (Print) ให้กับเรา เราจึงสามารถตรวจสอบผลลัพธ์แล้วปรับปรุงต่อในรอบการทำงานถัดไปได้ (Loop)

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

การพัฒนาง่ายสุดเริ่มจากงาน เราเขียนโค้ด เราส่งโค้ดขึ้น Github เราคาดหวังจะได้ผลลัพธ์จากระบบนี้ เราจึงเปิด pull requests เพื่อให้เพื่อนร่วมทีมได้ช่วย review นั่นคือการ input เข้าระบบ สิ่งต่างๆที่เกิดขึ้นย่อมสร้าง feedback กลับมาให้เราพัฒนาตนอย่างก้าวกระโดดได้

จากโลกการทำงาน สามารถขยายไปสู่การถ่ายทอดเทคนิคหรือสิ่งที่เรารู้ให้ผู้อื่นฟัง ยิ่งเราถ่ายทอด เรายิ่งได้กลับมามากกว่าที่เป็น

หมดยุคแล้วที่โปรแกรมเมอร์จะกั๊กความรู้ เทคโนโลยีเปลี่ยนทุกวัน สิ่งที่เรารู้เราคิดว่าเจ๋ง อาจไม่เป็นจริงอีกตัวไปเมื่อ library อัพเดท

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

สรุป

ไม่มี - จบเลยนะ


  1. https://www.facebook.com/chadchartofficial/photos/a.536355946425262.1073741826.532747176786139/541729305887926/


แสดงความคิดเห็นของคุณ


No any discussions