Framework คืออะไร ทำไมเราถึงต้องใช้ Framework


คำถามสุดคลาสสิค ในทีมนักพัฒนาซอฟแวร์ ที่มักโต้เถียงกันบ่อยๆ นั่นก็คือ framework คืออะไร ? ทำไมเราถึงต้องใช้ framework ?

 

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

 

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

ดังนั้นเรามาดูข้อดีของการใช้ framework กันว่ามีอะไรบ้าง

 

1. Code and File Organization

Framework ที่มีชื่อเสียงทุกตัว ได้รับออกแบบจากนักพัฒนาที่มีประสบการณ์ระดับ Enterprise นั่นหมายความว่าการออกแบบโครงสร้างของโปรแกรม ต้องมีความยืดหยุ่นสูง  การจัดวาง folder และ file  ต่างๆ นั้นได้ถูกออกแบบและจัดหมวดหมู่เป็นอย่างดี เพื่อให้ทีมพัฒนาซอฟแวร์สามารถเข้าใจโครงสร้างโปรแกรม และต่อเติมได้ง่าย รวมทั้งง่ายต่อการดูแลรักษา

http://stackoverflow.com/questions/13030795/rails-integrating-an-html-css-js-theme

http://stackoverflow.com/questions/13030795/rails-integrating-an-html-css-js-theme

 

นักพัฒนาส่วนมาก มักจะไม่คำนึงถึงการจัดระเบียบ source code   ซอฟแวร์ที่มีโครงสร้าง sourcecode ที่ไม่ดี จะทำให้การดูแลรักษาเป็นไปอย่างยากลำบาก ถึงแม้ว่า ณ เวลาที่พัฒนาโปรแกรมนั้นผู้พัฒนาสามารถจำได้ว่า source code ส่วนไหนคืออะไร แต่ถ้า 3-6 เดือนให้หลัง มีความจำเป็นต้องมาแก้บั๊ก ก็ไม่สามารถทำได้ง่าย

 

การวางโครงสร้าง sourcecode ไว้ไม่ดี ก็มีผลต่อทีมพัฒนาขนาดใหญ่  ทำให้ซอฟแวร์มีความซับซ้อน และทีมพัฒนามักบ่ายเบี่ยง และมักจะไม่ชอบเวลาโปรแกรมมีบั๊ก เพราะไม่สามารถแก้ไขโปรแกรมได้โดยง่าย

 

2. Utility, Helper and Library

 

ถ้าเราไม่ใช้ framework  งานที่ต้องทำซ้ำๆ ในการพัฒนาซอฟแวร์เช่น

  • การ validate ฟอร์ม
  • การ filter -> input / output
  • การเขียนโปรแกรมเชื่อมต่อฐานข้อมูล
  • การสร้างและแก้ไข session, cookie
  • ระบบส่ง email, ปฏิทิน, pagination
  • การจัดการ user / role / permission
  • และอย่างอื่นอีกมากมาย

เราต้องพัฒนาสิ่งเหล่านี้ขึ้นมาทั้งหมดซึ่งต้องใช้เวลามาก จะเป็นการดีกว่าถ้าเราใช้ framework เพราะ framework มีการจัดเตรียม library / helper พื้นฐานไว้พร้อมใช้งานหมดแล้ว

http://stackoverflow.com/questions/11491055/updated-jelly-bean-android-stack

http://stackoverflow.com/questions/11491055/updated-jelly-bean-android-stack

ข้อดีของการใช้ library / helper ที่มากับ framework อีกข้อคือ เราไม่ต้องมาทำการดูแลรักษา แก้บั๊ก หรือเพิ่ม feature ใหม่ๆ เพียงแต่เราดาวน์โหลด framework เวอร์ชันใหม่มาติดตั้ง เราก็สามารถใช้งาน feature ใหม่ๆ ได้ทันที

 

3. Design Pattern

การใช้งาน framework  ทำให้เราสามารถเรียนรู้เทคนิคใหม่ๆ (Design Pattern)  ในการพัฒนาซอฟแวร์ เช่น web framework ส่วนใหญ่จะใช้โครงสร้างพื้นฐานเป็น OOP (Object Oriented Programming) และ MVC (Model View Controller) ซึ่งใช้กันอย่างแพร่หลาย

http://blog.codinghorror.com/rethinking-design-patterns/

http://blog.codinghorror.com/rethinking-design-patterns/

Design Pattern คือวิธีการและเทคนิคในการเขียนโปรแกรมที่พบบ่อยๆ ที่ช่วยให้การวางโครงสร้างโปรแกรมเป็นไปอย่างมีระบบ ระเบียบเรียบร้อย  ง่ายต่อการดูแลรักษา (maintenance)  อีกทั้งยังช่วยเพิ่มประสิทธิภาพของโปรแกรมให้ทำงานดีขึ้น

 

ดังนั้นถ้าเราใช้ framework ก็สามารถทำให้เราเข้าใจหลักการและเทคนิคในการพัฒนาซอฟแวร์ได้ดี และยังทำให้เราสามารถจัดการปัญหาใหม่ๆ ได้ง่าย

 

4. Security

การพัมนาซอฟแวร์ทุกครั้งจะต้องมีการจัดการเรื่อง security, เราจะแน่ใจได้อย่างไรว่าโปรแกรมที่เราพัฒนาไม่มีช่องโหว่ให้ hacker เข้ามาเจาะระบบ?

 

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

 

แต่ถ้าเราใช้ framework การจัดการเรื่อง security จะเป็นไปอย่างง่ายดาย มีข้อผิดพลาดน้อย เพราะ framework ต่างๆ มีเครื่องมือพื้นฐานที่ออกแบบโดยทีมผู้เชี่ยวชาญเรื่อง security โดยเฉพาะเตรียมไว้ให้นักพัฒนาใช้อยู่แล้ว  การป้องกัน security พื้นฐานก็เป็นไปแบบอัตโนมัติ เช่น sql injection, xss filter, cookie encryption

 

อีกทั้งถ้ามีรูรั่วของซอฟแวร์ใหม่ๆ  ทีมพัฒนา framework ต่างๆ ก็สามารถแก้ไขด้วยความรวดเร็ว  ส่วนเราผู้ใช้ framework ก็สามารถดาวน์โหลด framwork เวอร์ชันใหม่ๆ มาเพื่อแก้ไขช่องโหว่เหล่านั้นได้ทันที  ทำให้การจัดการเรื่อง security เป็นไปได้โดยง่าย

 

5. Less Code & Faster Development

การใช้ framework นั่นหมายถึงเราเขียน code น้อยลง แสดงว่าการพัฒนาโปรแกรมสามารถเป็นไปอย่างรวดเร็วยิ่งขึ้น

http://www.slideshare.net/nateabele/less-time-less-code-less-headache

http://www.slideshare.net/nateabele/less-time-less-code-less-headache

 

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

 

6. Community Support

Framework ที่มีคนใช้มาก จะมี Community ขนาดใหญ่ ถ้าเรามีปัญหาก็สามารถไปหาคำตอบตาม webboard ได้ โดยไม่ต้องเสียเวลาค้นคว้าและแก้ปัญหาเอง  ส่วนใหญ่ปัญหาที่พบเจอในการเขียนโปรแกรมจะเป็นปัญหาซ้ำๆ ซึ่งมีคนก่อนหน้าได้ค้นคว้าหาคำตอบไว้ให้อยู่แล้ว เป็นการทุ่นระยะเวลาในพัฒนาโปรแกรมไปมาก

http://neo4j.com/blog/import-10m-stack-overflow-questions/

http://neo4j.com/blog/import-10m-stack-overflow-questions/

 

7. Job Opportunity

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

https://www.quora.com/What-is-the-average-Node-js-salary

https://www.quora.com/What-is-the-average-Node-js-salary

 

จากภาพจะเห็นได้ว่าเงินเดือนเฉลี่ยในต่างประเทศของนักพัฒนาที่ใช้ framework ดังๆ ได้นั้นไม่ธรรมดาเลย ตีเงินเป็นเงินไทยก็ประมาณ 3 ล้านบาทต่อปี

https://www.quora.com/What-is-the-average-Node-js-salary

https://www.quora.com/What-is-the-average-Node-js-salary

 

8. Suitable for Teamwork

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

http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/

http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/

  • web framework มักจะบังคับให้การออกแบบโปรแกรมเป็นแบบ MVC ดังน้้นเราสามารถแบ่งงานได้ชัดเจนและแยกจากกันอย่างเด็ดขาด ระหว่าง frontend developer / backend developer / database developer  ทำให้การพัฒนาโปรเจคเป็นไปได้โดยเร็ว เพราะสามารถทำงานทั้งสามประเภทไปพร้อมๆ กันได้

 

  • framework ส่วนใหญ่จะมี code convention  / organization  หรือแนวทางการจัดการ sourcecode ดังนั้นถ้าทุกคนในทีมเห็นภาพโครงสร้างของโปรแกรมไปในทิศทางเดียวกัน ก็จะทำให้การทำงานภายในทีมง่ายขึ้น

 

บทสรุป

แต่ก็มีงานบางประเภทที่ไม่เหมาะกับการใช้ framework ส่วนใหญ่จะเป็นโครงการขนาดเล็ก หรือ script สั้นๆ  ที่ไม่ต้องการ feature มากมาย

 

การใช้ framework มีข้อเสียคือระยะเวลาการศึกษา (learning curve) สูง ดังนั้นอาจจะเป็นการเสียเวลาเกินจำเป็นถ้าเรานำมาใช้กับงานที่ไม่เหมาะสม

 

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

 

 

Comments