Monthly Archives: August 2011

Idol ที่สัมผัสได้

ถ้าพูดถึง Idol ในวงการคอมพิวเตอร์ของผมนั้น มีมากมาย ไล่ไปตั้งแต่

  • Larry Page Sergey Brin แห่ง Google
  • Mark Zuckerberg แห่ง Facebook
  • James Gosling คนเขียน Java
  • Josh Bloch คนเขียน Java Collection Framework
  • Martin Fowler เจ้าของ ผู้รวบรวม และเผยแพร่ แนวคิดมากมายของ Agile
  • Kent Beck คนเขียน JUnit และหนังสือ TDD เล่มดังสุด
  • Robert C. Martin คนเขียน Clean Code และกำลังหลักใน SW craftsmanship movement
  • Michael Feathers คนเขียน Working with Legacy code ที่ยังไม่เคยได้อ่าน แต่ก็รับรู้ได้ถึงพลัง
  • Yukihiro Matsumoto คนเขียน Ruby
  • Martin Odersky คนเขียน Scala
  • Linus Torvalds แห่ง Linux
  • Mark Shuttleworth แห่ง Ubuntu

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

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

ผมได้มีโอกาสไปฝึกงานกับบริษัทของพี่ป๊อก ย้อนหลังไปประมาณ 3 ปีกว่า เป็นระยะเวลาประมาณ 2 – 3 เดือน เป็นช่วงเวลาที่ผม ยังอยู่ในกะลาใบเล็กอยู่ (ตอนนี้อยู่กะลาใบใหญ่ขึ้น) สิ่งต่างๆ ที่ผมได้ซึมซับมาจากพี่ป๊อกมีประมาณนี้

  • ความรู้ด้านเทคนิค อันนี้แน่นอนผมได้รับอย่างเต็มที่ตลอดที่เวลาจะเอื้ออำนวย ผมยังจำได้ว่า วันนั้นผมเป็นคนแรกๆ ของประเทศไทยที่ได้ใช้ Git
  • เขียนคนเดียวไม่สนุกหรอก ผมได้รู้ว่าเขียนโปรแกรมต้องมี community วันนี้ผมพยายามเข้าร่วม community ทุกประเภท การไปพบประเจอผู้คน ทำให้เราได้อะไรหลายๆ อย่างมากมาย อย่างรวดเร็ว ทั้งเทคนิค ประสบการณ์ รู้จักประเภทของคน และอื่นๆ อีกมากมาย
  • ความใส่ใจครอบครัว เรื่องนี้ผมเล่าให้คนอื่นๆ ฟังบ่อย ว่าผมประทับใจมาก ตอนที่ไปฝึกงาน แล้วเห็นลูกพี่ป๊อกนอนตัก ในขณะที่พี่เขียนโปรแกรมไปด้วย
  • ความมั่นใจในอาชีพ อาชีพเขียนโปรแกรมก็หาเลี้ยงครอบครัวให้สุขสบายได้ ไม่ต้องก้าวไปเป็นผู้จัดการ ผู้บริหาร เจ้าของ หรือเป็นอาชีพที่นิยมอื่นๆ
  • มุมมองต่อโลก Open source และการ contribute
  • Unix like shell user ตั้งแต่กลับจากฝึกงาน เครื่องผมก็ไม่เคยมี Windows อีกเลย (ถ้าไม่จำเป็นต่องาน สุดๆ)
  • การใฝ่หาความรู้ กล้าที่จะลองสิ่งใหม่ๆ และความสนุกในการเขียนโปรแกรม อันนี้ได้จากพี่ป๊อกมาเต็มๆ

หากที่ผ่านมาผมเคยทำอะไรให้พี่ไม่พอใจก็ขออภัยมา ณ ที่นี้ด้วยนะครับ

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

พี่เป็นส่วนหนึ่งที่ทำให้ชีวิตผมมาทางนี้ครับ ขอบคุณครับ

 

Advertisements

Pull Systems in Software development

ปัญหาสำคัญปัญหาหนึ่งที่ทำให้ software development project ล่าช้า คือ การหลงเสียเวลาไปกับการทำสิ่งที่ไม่มีประโยชน์

ได้มีคนพยายามแก้ปัญหานี้ ด้วยการนำ Lean ซึ่งมีตัวอย่างที่ประสบความสำเร็จคือ TPS มาใช้กับ software development

หนึ่งใน tool ของ Lean ที่ผมจะเอามาเล่าวันนี้ คือ  Pull Systems

ขอออกตัวก่อนว่าผมไม่ได้รู้เรื่อง Lean มากนัก ผมใช้วิธีศึกษาในมุม practical แล้วย้อนกลับมาหาทฤษฎี แล้วพบว่า Pull Systems มันอธิบายหลายๆ อย่างได้

 

Pull Systems ในความเข้าใจของผม คือ การ focus ทำในสิ่งที่ก่อให้เกิด value ด้วยการไม่พยายามผลิตและผลักผลิตภัณฑ์ออกไปสู่ตลาด แต่ใช้วิธีการเก็บความต้องการของตลาดมาเป็นตัวขับเคลื่อนการผลิตแทน

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

– ลดการพัฒนาโปรแกรม ที่จริงๆ แล้วไม่เหมาะกับผู้ใช้งาน

– ลดการพัฒนาโปรแกรม ที่เกินความต้องการผู้ใช้งาน (ไม่สร้าง value)

 

วิธีการก็คือ พัฒนาระบบอย่างง่าย focus ที่ไอเดียและ concept แล้วรีบนำออกให้ผู้ใช้งานได้ทดลองทันที รอรับ feedback นำกลับมาปรับปรุงและ release version ใหม่อย่างรวดเร็ว

Google เป็นตัวอย่างที่ชัดเจนขององค์กรที่ใช้วิธีนี้(ด้วยความตั้งใจหรือเปล่า อันนี้ผมไม่ทราบ) เหล่าผลิตภัณฑ์ทั้งหลายของ Google จะปักป้าย Beta version ออกมาก่อน และเราจะพบว่ามันไม่สมบูรณ์ ณ วันที่ออกมา แต่ผลิตภัณฑ์เหล่านั้นจะแสดงความ unique ของผลิตภัณฑ์แต่ละตัวที่ออกมาอย่างชัดเจน และจะมีการปรับปรุงคุณภาพอย่างต่อเนื่องออกมาเป็นระยะ อย่างรวดเร็ว

 

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

มีคนรวบรวมการ พัฒนาผลิตภัณฑ์ให้ใช้ต้นทุนต่ำที่สุดและเร็วที่สุด เหมาะกับบริษัท startup ที่ผู้ก่อตั้งมี idea เจ๋งๆ ไว้ในชื่อว่า Lean Startup 

 

ตัวชี้วัดว่าเรา เป็น Pull แค่ไหน ดูได้จากขนาดของ Inventory

Inventory ในมุมที่ผมเข้าใจ คือ สิ่งที่เราสร้างขึ้นมา ไม่ก่อนให้เกิด value และต้องใช้ทรัพยากรในการ maintain ด้วย

ระบบ Pull ในอุดมคติ คือ ต้องมี inventory เท่ากับ 0 หมายความว่า เมื่อพัฒนาอะไรขึ้นมาแล้ว ลูกค้าจะต้องได้รับทันที 

Inventory ใน software development ของผม ไมไ่ด้หมายความถึงแค่ code เท่านั้น แต่ยังรวมถึง diagram หรือ project planing document หรืออะไรก็แล้วแต่ที่ต้องใช้เวลาในการทำและmaintainสูง สิ่งเหล่านี้มีประโยชน์อย่างมาก แต่ก็ต้องใช้พลังในการ maintain consistency สูงเช่นเดียวกัน พยายามเลือกใช้เท่าที่จำเป็น หากเป็นไปได้ พยายามรวมมันเข้ากับ code จะดีกว่า จะได้มีจุด maintain แค่จุดเดียว

 

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

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

  1. ต้องทำให้ระบบเพิ่ม feature ได้ง่าย
  2. เมื่อเพิ่ม feature แล้วไม่ทำให้เกิด bug
  3. ทีมพัฒนาไม่ว่าคนใดสามารถทำงานแทนกันได้ สามารถย้ายคนทุกคนไปทำสิ่งเดียวกัน ที่มีความต้องการอย่างเร่งด่วนได้ และเมื่อมีคนเจ็บป่วย หรือออก ต้องไม่มีผลกระทบ

สิ่งเหล่านี้ น่าจะสามารถทำได้ ด้วยการปรับใช้กระบวนการต่างๆ เช่น Refactoring, Clean Code, TDD, BDD, Peer/Code Review, Automate-testing, Continuous integration/deployment/delivery, A/B testing และ การ design ระบบที่ไม่มี coupling ระหว่าง component จนเกินไป

 

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

 

ช่วงหลัง ผมมาสังเกตดูตัวเอง จริงๆ Pull ก็ปะปนอยู่ในวิธีคิดการใช้ชีวิตของผมอยู่เหมือนกัน

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

 

เขียนมาค่อนข้างยาว หวังว่าผู้อ่านจะชอบนะครับ 🙂

วิถีมืออาชีพ

นอกจากพื้นฐาน คือ การรับผิดชอบงานให้เสร็จแล้ว สิ่งที่แสดงถึงความเป็นมืออาชีพในอุดมคติ ในมุมมองของผม มีดังนี้

– ทำให้สภาพร่างกายของตอนพร้อมทำงานอยู่เสมอ (ออกกำลังกาย, กินอาหารตรงเวลา, ทานอาหารที่มีประโยชน์, นอนหลับพักผ่อนให้เพียงพอ)
– ทำให้ตัวเองมีความรู้สึกอยากทำงานอยู่เสมอ (ทำงานอย่างรู้ลิมิตว่า ไม่มากเกินที่จะทำให้เบื่องาน, ค้นหาความท้าทายในงาน)
– คิดถึงวิธีการพัฒนาวิธีการทำงานและตนเองอยู่เสมอ
– ร่วมแก้ปัญหา ไม่หาแพะ
– กล้าปฏิเสธว่าจากการประเมินไม่น่าจะสามารถทำงานได้ทัน กล้าที่จะบอกเวลาตามความเป็นจริง
– ไม่ทำให้ตัวเองต้องลาป่วย หลังจากกลับจากไปเที่ยวต่างจังหวัดหรือต่างประเทศ ถ้ารู้ว่าจะต้องพักผ่อนก็ลาเผื่อนอนพักไปเลยอีก 1 วัน
– เปิดอกคุยกับเพื่อนร่วมงาน กล้าแย้ง กล้าแสดงความคิดเห็น และรับฟังความคิดเห็น
– ไม่อ่อนไหวต่อเรื่องราวส่วนตัวมากนักในด้านจิตใจ ณ เวลาทำงาน (อันนี้ ยกเว้นเคสแย่จริงๆ ให้) อย่างน้อยก็ไม่ควรมีอารมณ์ใส่เพื่อนร่วมงาน
– ทำงานทุกอย่างที่ได้รับมอบหมาย / มอบหมายงานที่เหมาะสม
– เข้าใจถึงความแตกต่างระหว่างบุคคล (ความสามารถ, อารมณ์, มุมมอง) ศึกษาพื้นฐานด้านต่างๆ ของผู้ร่วมงานอย่างน้อยคร่าวๆ
– ใช้วิธีการสื่อสาร ที่เหมาะสมกับผู้รับสาร

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

คำค้นหาที่นำมาสู่ blog ผม

เมื่อกี้เปิดดู stat ของ blog เล่นๆ ก็ดูไปถึง stat ของคำ search ที่ทำให้เค้าคลิ๊กเข้ามาที่ blog ของเรา มีอะไรน่าสนใจเลยเอามาโพสให้ดู
– มีคน search เข้ามาด้วยชื่อจริงเยอะมาก น่ากลัวเหมือนกันแหะ จำไม่ได้ว่าไปมีเรื่องอะไรกับใครนะ 55
– ทำไมคนถึงอยากรู้ว่า ฝึกงานแล้วได้อะไร
– มีคนมีปัญหากับ adapter notebook เยอะทีเดียว
– คนสนใจ บวชตลอดชีวิต ก็ไม่น้อย
– คนอยากรู้ว่า ผู้ใหญ่คืออะไร ก็เยอะเหมือนกัน
รายละเอียดและจำนวน search ดูได้จากรูปข้างล่างครับ ที่ปิดไว้คือ ชื่อนามสกุลจริงผม ใคร stalk อยู่ อยากรู้ก็คิดว่าหากันเองได้ไม่ยากนะ 🙂





ทำไมผมถึงซื้อ MacbookAir?

หลายๆ คนจะรู้ว่าผมไม่ค่อยถูกโรคกับผลิตภัณฑ์ของค่าย Apple เท่าไหร่ แต่ไฉนการซื้อโน้ตบุ๊คใหม่ครั้งแรกในรอบ 5 ปีของผมถึงมาออกที่ MacbookAir ได้

ก่อนอื่นเลย มาดู requirement ของผมกันก่อน พยายามจะเรียงลำดับตามความสำคัญ
– ราคาอยู่ราวๆ 40,000 บาท หรือน้อยกว่า
– แบตนาน
– keyboard ต้องพิมพ์ได้ดี
– น้ำหนักไม่เกิน 2 kg
– ไม่ร้อน
– จอใหญ่และละเอียดที่สุด เท่าที่น้ำหนักไม่เกิน
– ถ้าเป็นเครื่อง PC ฮาร์ดแวร์ต้องไม่มีปัญหากับ Linux (Ubuntu) มากนัก
– ขนาดและน้ำหนัก adapter
– ระยะเวลาการรับประกัน และประเทศที่สามารถเข้าศูนย์ได้
– ความแข็งแรงของ body
– Ram อย่างน้อย 4 Gb ถ้าเพิ่มได้จะดีมาก

สิ่งที่มีก็ได้แต่ไม่ได้อยากได้เท่าไหร่ (และจะรู้สึกว่าสิ้นเปลืองถ้าใส่มา)
– Windows
– โปรแกรมเสริมที่ติดมากับเครื่อง
– การ์ดจอ (หลีกเลี่ยงพวก switchable เพราะมีปัญหากับ Ubuntu)

สิ่งที่เฉยๆ
– DVD drive (ถ้าไม่ก็น่าจะทำให้เบาขึ้น)
– CPU รุ่น top (ไม่ได้ต้องการ CPU ที่เร็วเท่าไหร่ เอาแค่มาตรฐานของยุคก็พอ ยิ่งเร็ว น่าจะยิ่งกินแบต ยิ่งร้อน)

สิ่งที่ไม่สนใจ
– ความหนา (ไม่เห็นจะอยากได้โน้ตบุ๊คบางเลย หนาก็ได้ แต่ขอเบาละกัน)

ผมมีความตั้งใจหนึ่งมานานแล้วว่าถ้าผมจะซื้อโน้ตบุ๊คเครื่องใหม่ผมอยากซื้อ Thinkpad แต่พอถึงเวลาจะซื้อจริงๆ มาสำรวจราคาแล้ว พบว่า Thinkpad ถ้าซื้อในโซน South-East Asia (และโซนอื่นๆในโลกที่ไม่ใช่ U.S.?) จะราคาแพงกว่าที่ U.S. มากๆๆ บางครั้งประมาณ 2 เท่า ผมรู้สึกไม่พอใจจึงตัด Thinkpad ออกไปจาก list อย่างเสียดาย

อีกตัวที่ดูเข้าข่ายแต่ตั้งทิ้งไปตั้งแต่ยังไม่ได้คิดจะซื้อ คือ Samsung series 9 เพราะรูปร่างขัดใจอย่างมาก

ตัวเลือกของผมที่ออกมาหลังจากตัดตระกูล Thinkpad ออกไปแล้ว มีดังนี้ (ไม่เรียงลำดับ)
– Asus u36SD
– Sony Vaio S
– Toshiba R830
– MacbookAir

ขออธิบายรายตัวที่ตัดทิ้ง
– Toshiba R830: ตอนแรกดูจากเว็บ ถูกใจตัวนี้มาก ทั้งเบา, มี DVD drive, ประกัน international 3 ปี, แต่ข้อเสียที่ร้ายแรงมากและรับไม่ได้คือ ขนาด keyboard ตัวมันเป็น normal size โน้ตบุ๊คแท้ๆ แต่ดันตัดความสูง keyboard ออก ไปลองพิมพ์แป๊ปเดียว กาทิ้งทันที
– Asus u36SD: ตัวนี้ที่ Singapore กำลังจะเข้า แต่มีรุ่นพี่ที่เป็น 1st gen Intel core i u36jc ให้เล่น ตัวนี้ ช่องระบายความร้อนใหญ่ดันอยู่ใต้ฝ่ามือซ้ายเลย เบาดี ราคาถูก keyboard ใช้ได้ แต่การ์ดจอมี nVidia มาคู่กับ Intel onboard
– Sony Vaio s: คล้ายๆ Asus แต่จอดูไม่แข็งแรง มี DVD drive ไปยกดูหลายเครื่องแล้วร้อน และความอคติส่วนตัวว่า Sony Vaio รุ่นถูกมักจะห่วย แถมเป็น hybrid graphic card Intel/Radeon นรกของ Ubuntu แท้ๆ

สิ่งที่ชอบใน MacbookAir (บางข้อมีใน Macbook อื่นๆ)
– แบตใช้ได้นาน ตามสภาพ load งานของเรา
– ความร้อน ตามสภาพ load งานของเราเช่นกัน แต่ถ้าเล่นเว็บทั่วไปจะไม่ร้อนเลย ตอนตัดสินใจซื้อคิดว่ายังไง low-votage cpu ก็น่าจะปล่อยความร้อนน้อยกว่า cpu ทั่วไปแหละหนะ
– จอละเอียดกว่าคู่แข่ง
– เบา, บาง
– MacOSX เป็น OS ที่มีกับ Unix-like shell ที่มี UI ที่ดีที่สุด (จริงๆ ผมแค่อยากได้ OS ที่มี Unix-like shell มาแบบ native)
– SSD
– รู้สึกว่าซื้อได้ถูก เทียบกับ U.S. และไทย

สิ่งที่เกือบจะทำให้ไม่ซื้อ MacbookAir
– keyboard กดแล้วบุ๋มน้อย
– เพิ่ม Ram ไม่ได้ – ram 4 GB ถ้าเป็น ณ ปัจจุบันผมคิดว่าเพียงพอ แต่อีกซัก 2 – 3 ปี ผมไม่แน่ใจ แต่ผมตัดสินใจว่าหากถึงเวลานั้นแล้ว Ram ไม่พอ จะซื้อเครื่องถูกๆ หนักๆ ถึกๆ ไว้ใช้ แล้วเก็บเจ้า Air นี้ไว้สำหรับ mobility แทน
– เป็นผลิตภัณฑ์ Apple

ทำไมผมถึงไม่ซื้อ Macbook Pro
– เพราะมันเป็นผลิตภัณฑ์ Apple ที่ใกล้จะออกรุ่นใหม่

เหตุผลหลักอีกจุดนึงในการตัดสินใจ คือ ความผูกพันธ์กับ Ubuntu ซึ่งผมคิดว่าถ้าเอา Vaio หรือ Asus จะต้องมีปัญหากับ การ์ดจอแน่ๆ และผมรู้สึกว่า Ubuntu’s Unity มันยังห่างไกลคำว่าเสร็จอยู่อีกมาก ถึงแม้ว่าตัว ผมจึงสามารถตัดใจจาก Ubuntu ที่อยู่กันมากกว่า 3 ปีได้

ด้วยเหตผลที่กล่าวมาแล้ว ตอนนี้ผมจึงเป็นเจ้าของเจ้า MacbookAir 13″ ตัว spec ต่ำ และที่ผ่านมาสำหรับเรื่องการใช้งานมีความสุขดีครับ

ถึง PHP

ด้วยความที่ผมเป็นคนไม่ค่อยมีหัวด้านศิลปะ และไม่อดทนเพียงพอที่จะฝึกฝน ทำให้ผมเลือกที่จะทำงานเบื้องหลัง(ในด้านการพัฒนาโปรแกรม)ถ้าสามารถเลือกได้ PHP จึงเป็นภาษาที่ผมทอดทิ้งไม่เคยคิดจะศึกษาไปโดยปริยาย

แต่พอย้ายงานมาดันต้องใช้มัน ทำให้ได้ศึกษาในเชิงลึกมากขึ้น และมีคอมเมนต์เกี่ยวกับมุมหนึ่งของภาษา PHP จึงอยากแสดงความคิดเห็นเอาไว้หน่อย

จุดที่ผม คนซึ่งเกิดมากับภาษา OO ขัดใจอย่างมากกับ PHP คือ เรื่อง scope

บน PHP ถ้าเราจะสร้าง function หรือตัวแปร ทั่วๆไป เราสามารถเข้าถึงได้ง่ายโดยไม่ต้องระบุ scope แต่หากเราสร้าง function หรือตัวแปร ที่อยู่ภายใต้ class เวลาเรียกใช้เราต้องอ้างถึงด้วย $this->

ความคิดแรกที่รู้สึกกับเรื่องนี้ เห้ยนี่มันบ้าอะไรเนี้ย มันเป็นสิ่งที่ขัดขวาง cohesion ชัดๆ

แต่แล้ววันนี้ผมก็ได้รู้ว่า จริงๆ แล้วมันเหมาะสมกับงานของมันแล้ว

PHP เป็นภาษาที่เกิดมาในยุคต้นของ dynamic html มันเกิดขึ้นมาเพื่อให้เราสามารถสร้าง dynamic html ได้ ไม่ได้ให้เราเอามาเขียน back-end business logic อย่างที่ทำๆ กันอยู่ ที่มันต้องเป็น OO เพราะคนอยากให้มันเป็น ผลักดันให้มันเป็น ก็ต้องยอมแลกกับอะไรบางอย่างๆนี้แหละ

การเรียกใช้ได้แบบไร้ scope ของมัน จะเปล่งประกายคุณสมบัติมาก เมื่อใช้ในการสร้างหน้า html เพราะลำพังตัว syntax html, css ก็ยืดยาวพอแล้ว ถ้าต้องมาอ้างถึง scope เพื่อใช้ utiliy functions ต่างๆ อีก ก็ยิ่งยาวไปกันใหญ่ การเรียกใช้ utility functions ได้ๆ ง่ายๆ โดยไม่ต้องอ้างถึง scope จึงเหมาะกับการนี้มาก

เพราะฉะนั้นถ้าจะเอามันมาใช้ back-end ก็กรุณาอย่าบ่นครับ 😀