php_meetup
มีโอกาสไปร่วมงาน PHP Meetup ครั้งที่ 3 ของกลุ่ม Thailand PHP User Group
โดยในครั้งนี้มีหลายๆ เรื่องที่น่าสนใจ รวมทั้งผมก็ได้ไปพูดเรื่อง TDD with PHP
จึงของสรุปสิ่งที่ได้รับและแบ่งปันจากงานในครั้งนี้

เริ่มต้นด้วยเรื่องของคนทำเกมส์

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

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

สิ่งที่ได้รับรู้ต่อมาคือ

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

ผมรับรู้ได้ว่า เกมส์เพื่อชีวิต มันเป็นอย่างไร ก็ครั้งนี้ สุดๆ ครับ นับถือมากๆ

ต่อมาผมมาพูดเรื่อง Test-Driven Development with PHP

โดยสิ่งที่ต้องการจะแบ่งปันคือ เรื่องของ unit testing ว่าเป็นอย่างไร
รวมไปถึงการเขียน unit test เพื่อทดสอบที่มีความซับซ้อน
หรือทำงานกับหลายๆ ส่วน สามารถใช้สิ่งที่เรียกว่า Test Double มาช่วยได้
ตัวอย่างระบบดังรูป
Screen Shot 2557-09-25 at 6.03.55 PM

ซึ่งมีตัวอย่าง code โดยใช้ phpUnit ดังนี้

สามารถเขียนได้ทั้งแบบ Test First และ Test Last
ต่อจากนั้นจึงพาเข้าไปในเรื่องของ Test-Driven Development
ซึ่งมี cycle การทำงาน ดังรูป

Screen Shot 2557-09-24 at 1.22.10 PM

รวมทั้งยังแนะนำการเริ่มต้นเขียน TDD
และกลิ่นแปลกๆ ที่บอกว่าคุณกำลังทำ TDD แบบผิดๆ
พร้อมแนะนำเครื่องมือต่างๆ เช่น phpUnit, Codeception เป็นต้น
คิดว่าน่าจะพอทำให้เห็นภาพได้ครับ

ในช่วงถามตอบมีการถามเกี่ยวกับ การจัดการกับ Legacy code
ตรงนี้เดี๋ยวผมสรุปขึ้นตอนพร้อมยกตัวอย่างให้จะดีกว่า

สามารถดู Slide เต็มได้จาก Slideshare ครับ

ต่อมามี session เกี่ยวกับ AngularJS

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

ปิดท้ายด้วยเรื่อง เราจัดการกับระบบที่เป็น Legacy code

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

  • ต้องมีผู้ใหญ่สนับสนุน ไม่งั้นพังมานะ เงิบแน่นอน
  • ในการทำนั้นจะต้องสามารถบอกได้ว่า แก้ไขไปแล้วมันกระทบอะไรบ้าง รวมทั้งใช้เวลาเท่าไร ตีเป็นตัวเงินได้เท่าไร
  • ต้องมีการวางแผนที่ดี
  • ในการทำจะต้องทำให้เป็นอัตโนมัติได้มากที่สุด ทั้งการ rollout และ rollback
  • การแก้ไขต้องทำที่ต้นทางคือ การสร้าง connection มายัง database และแปลงไฟล์ ให้อยู่ใน encoding ที่ต้องการ
  • ต้องทำในทุกๆ ระบบที่เกี่ยวข้อง แต่ค่อย rollout ได้
  • ต้องมีการเปรียบเทียบก่อนและหลังทำ ว่ามันมีผลกระทบอะไรบ้าง
  • ไม่ต้องกลัวว่าจะผิด ซึ่งมันมีผิดแน่ๆ ต้อง support อย่างน้อย 1 สัปดาห์ มากหรือน้อยกว่านั้นขึ้นอยู่กับระบบ
  • สุดท้าย เริ่มทำได้เลย ไม่ทำวันนี้ก็ทำวันหน้า ซึ่งจะยิ่งเจ็บปวดกว่านี้

เจอกันในครั้งที่ 4 ต่อไปครับ
ขอบคุณสำหรับสถานที่ อาหาร และ คนที่มาร่วมงานครับ