• เพราะชีวิตไม่ได้มีแค่เรื่องเขียนโปรแกรม

    น้องใหม่สายเดฟ เดอะซีรี่ ตอนที่ 2 ไม่รู้จะเลือกเน้นอะไรดี

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

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

    READ MORE
  • เพราะชีวิตไม่ได้มีแค่เรื่องเขียนโปรแกรม

    น้องใหม่สายเดฟ เดอะซีรี่ ตอนที่ 1 ทำยังไงให้เรียนจบ

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

    ทีนี้เราจะทำอย่างไรไม่ให้เป็นหนึ่งในผู้เสียชีวิตตอนทำโปรเจ็ก

    READ MORE
  • เพราะชีวิตไม่ได้มีแค่เรื่องเขียนโปรแกรม

    รีวิวบ้านพักผ่อนสำหรับพนักงานของบริษัท codemate

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

    บริษัทโค้ดเมทคือใคร ?  บริษัทโค้ดเมทเป็นบริษัทซอฟต์แวร์จากประเทศฟินแลนด์

    READ MORE
  • PHP

    OOP ซีรี่ย์ – Abstract classes & methods

    Abstract class นั้นเป็นคลาสที่ถูกเขียนขึ้นมาด้วยความตั้งใจว่า “เป็นการวางโครงคลาสไว้ให้ก่อน เมื่อจะนำไปใช้ คุณจะต้อง implement มันให้เป็นคลาสเสียก่อน” วิธีการสร้างก็เหมือนการคลาสปกติ เพียงแต่นำหน้าคลาสด้วยคีย์เวิร์ด Abstract ผมเอาตัวอย่างจริงๆของ WooCommerce มาให้ดู เพื่อจะให้เห็นว่าคอนเซ็ปนี้เขาไม่ได้สร้างกันขึ้นมาเล่นๆ View the code on Gist. เวลาจะเอาคลาส WC_CSV_Exporter ไปใช้งาน เราจะต้องทำการ implement มันให้เป็นคลาสเสียก่อน ด้วยคำสั่งนี้        

    READ MORE
  • เพราะชีวิตไม่ได้มีแค่เรื่องเขียนโปรแกรม

    Codemate การทำงานแบบชาวฟินแลนด์

    เราสั่งซื้อโต๊ะพูลมาติดตั้งที่ชั้น 30 แล้ว น่าจะอีกสัปดาห์หรือสองสัปดาห์เขาจะมาติดตั้งให้

    READ MORE
  • PHP

    OOP ซีรี่ย์ – override properties and methods

    ในกระบวนการของ OOP นั้นมันยอมให้คลาสลูกที่สืบทอดไปจากคลาสแม่ เขียนทับฟังก์ชั่นของตัวแม่ได้ เหตุผลหนึ่งที่ยอมให้กระทำอย่างนั้นได้ เพราะว่า เผื่อเราต้องการจะเปลี่ยนแปลงการทำงานของฟังก์ชั่นบางฟังก์ชั่น สมมติ เรามีคลาสอยู่ตัวหนึ่งซึ่งเราตั้งใจให้มันเป็นคลาสหลักให้คลาสอื่นๆมา extends ออกไปแล้วเขียนฟังก์ชั่นเพิ่มให้แตกต่างกันไป ทีนี้ระบบมันก็ใช้มาๆ แล้ววันหนึ่งเราต้องการสร้างคลาสตัวหนึ่งที่จะต้อง extends มาจากคลาสหลัก แต่ อยากแก้ไขฟังก์ชั่นที่มีอยู่เดิมให้ทำงานแตกต่างออกไป แบบนี้ทำได้ ดูตัวอย่าง View the code on Gist. ถ้าเราประกาศฟังก์ชั่นด้วยคีย์เวิร์ด public มันจะอนุญาติให้เราเขียนฟังก์ชั่นทับอย่างนี้แหละ  แต่ถ้าเราไม่อยากให้มีการเขียนทับฟังก์ชั่น เราจะต้องใช้คีย์เวิร์ด final วางไว้หน้าฟังก์ชั่น แล้ว PHP มันจะไม่อนุญาติให้เขียนฟังก์ชั่นทับเอง ทีนี้บางคนอาจจะสงสัยว่า ก็เราเขียนเอง ทำไมต้องไฟน่งไฟนอล เอ้าก็ภาษามันไม่ได้ออกแบบมาเพื่อให้คนๆเดียวเขียนเท่านั้น มันอาจจะมีฝ่ายวางแผน ฝ่ายขึ้นโครงคลาส พวกสร้างคลาสให้แล้วคนอื่นเอาไปเขียนต่อ ซึ่งมันจำเป็นต้องป้องกันบางอย่างที่อาจจะก่อให้เกิดบัก ตัวอย่างข้างล่างนี่เออเร่อ เพราะตรงบรรทัดที่ 12 มีการใส่ final ไว้หน้าฟังก์ชั่น getID นั่นหมายความว่า ห้ามใคร implement ฟังก์ชั่นนี้ใหม่ในคลาสลูก View the […]

    READ MORE
  • PHP

    OOP ซีรี่ย์ – Inheritance in PHP

    Inheritance หรือเรียกอย่างไทยๆว่าการสืบทอด การสืบทอดมันไม่ได้มีอะไรใกล้เคียงกับตั๊กแตนทอดหรือกล้วยทอด หรืออะไรอย่างอื่นที่ใช้น้ำมันเป็นส่วนประกอบกรรมวิธี พอกล่าวถึงเรื่องน้ำมัน ก็อยากจะบอกว่าน้ำมันปาล์มไว้ใช้ทอด น้ำมันถั่วเหลืองไว้ใช้ผัด ไปเรื่อย… การสืบทอดใน OOP นั้นจะคล้ายๆกับการก้อปปี้โค้ดเดิมแล้วเอามาเขียนโค้ดต่อเพิ่มเข้าไป ที่ผมใช้คำว่าคล้าย เพราะว่าการสืบทอดนั้นมันเจ๋งกว่าการก้อปปี้ สมมติว่าผมมีคลาสอยู่ตัวหนึ่ง ทำงานได้ดี View the code on Gist. คลาสตัวนี้เอาไปใช้ในโค้ดหลายๆที่ นานไปๆก็จำไม่ได้แล้วว่าเอาไปใช้ตรงไหนบ้าง แต่ไม่เป็นไรเพราะระบบยังใช้งานได้ดี วันหนึ่งเราอยากจะได้ฟังก์ชั่นสำหรับดึงค่า idcard ออกมา แต่มันก็ใช้อยู่ที่เดียวเท่านั้น ในโค้ดใหม่ ทางเลือกที่เรามีอยู่ตอนนี้ก็คือ ก้อปปี้คลาสนี้ทั้งคลาสเลยแล้วเปลี่ยนชื่อเสียใหม่แล้วเพิ่มโค้ด / หรือแก้คลาสเดิมเลยเพิ่มโค้ดใหม่เข้าไป 2 ทางเลือกที่ให้มาถ้าเป็นระบบจริงๆมีเสียวกันบ้าง เพราะการแก้โค้ดเดิม ไม่รู้ว่ามันจะไปกระทบกับของเก่าที่นำไปใช้บ้างหรือเปล่า หากคุณเขียนโค้ดแบบ functional นะ ไม่ใช้ class นะ ทางเลือกคุณมี 2 ทางนั้นแหละ แต่คลาสเขาออกแบบมาให้มันรองรับการสืบทอด เราเขียนคลาสใหม่สืบทอดจากคลาสเก่าแล้วเติมโค้ดใหม่เข้าไป ดอตอยอ ดูตัวอย่าง View the code on Gist. คลาส […]

    READ MORE
  • PHP

    OOP ซีรี่ย์ – Magic methods

    เมจิกเมธอด ชื่อมันก็บอกอยู่แล้วว่าเป็นเมธอดมหัศจรรย์ มหัศจรรย์ยังไง ก็มหัศจรรย์ว่ามันจะรันของมันอัตโนมัติ เมจิกเมธอดนี้จะมีอยู่ 2 เมธอด คือ __construct() : จะถูกเรียกอัตโนมัติเมื่อคลาสนั้นถูก new โดยปกติเขาจะไว้ใช้สำหรับเตรียมตัวแปรหรืออะไรเทือกๆนั้น __deconstruct() : จะถูกเรียกอัตโนมัติเมื่อโค้ดถูกรันหมดหน้า ปกติเขาจะไม่เขียนเมธอดนี้กัน เอ้าทำไม ก็เพราะว่าเขียนหรือไม่เขียนก็ค่าเท่ากัน PHP นั้นมันมีระบบที่เรียกว่า เรียกว่าเหี้ยอะไรสักอย่างนี่แหละ หน้าที่ของมันก็คือมันจะทำลายตัวแปรทั้งหมดทิ้งเมื่อรันโค้ดหมดหน้าและส่งไปแสดงผลแล้ว เพื่อไม่ให้เกิดอาการที่เขาเรียกว่าหน่วยความจำรั่ว หรือเรียกเอาเท่ว่า memory leak ตัวอย่างการเขียนจะเป็นแบบนี้ View the code on Gist. เมื่อมีการ new คลาส People ฟังก์ชั่น __construct() จะถูกรันอัตโนมัติ  

    READ MORE
  • PHP

    OOP ซีรี่ย์ – Public vs. Private

    สองคีย์เวิร์ดนี้ public, private เขาไว้สำหรับกำหนดขอบเขตการเข้าถึงฟังก์ชั่นหรือตัวแปรภายในออบเจ็ก ดอตอยอ View the code on Gist. ตอนพระเจ้าสร้างออบเจ็กขึ้นมา พระเจ้าจะกำหนดไว้แล้วว่า ฟังก์ชั่นไหนไม่ให้เรียกจากภายนอก ฟังก์ชั่นไหนให้เรียกจากภายนอกได้และเรียกจากภายในก็ได้ เหตุผลที่ทำอย่างนี้น่ะเหรอ ก็เพื่อจำกัดกรอบของบักให้แคบลง หรือไม่งั้นก็อาจจะเพราะอินดี้ก็ได้ เอ้า… ทำไมอะเราไม่ให้เรียกใช้ฟังก์ชั่นนี้จากภายนอกอะ เราผิดเหรอ ผมเคยเจอบ่อย ตอนที่เขียนปลักอินติดต่อกับวูคอมเมิร์ส เรียกฟังก์ชั่นไป ตอบกลับเออเร่อมาว่าฟังก์ชั่นนี้ไม่ให้เรียกจากภายนอก เป็น private อะไรอะ… ลองเข้าไปอ่านโค้ดของวูคอมเมิร์สดูก็ไม่น่าจะต้องจำกัดสิทธิ์การเข้าถึง ผมถึงบอกว่าบางทีก็เพราะพระเจ้าอินดี้ ก็แล้วแต่แหละ เขียนๆไปมีประสบการณ์เยอะๆ จะรู้เองว่า อ๋อฟังก์ชั่นนี้เราใช้ส่วนตัวภายในก็พอ เอาล่ะมาดูการเรียกใช้งานจากคลาสข้างบน View the code on Gist. เราจะได้ตัวแปร name เท่ากับ Watcharamet Srinethirothai แต่ถ้าเราเรียกอย่างนี้ เออเร่อเลยนะครับ View the code on Gist. มันจะเออเร่อตรงบรรทัด 29 เพราะว่าในคลาสประกาศฟังก์ชั้น changeName() […]

    READ MORE