/ 365วันแห่งโปรแกรม

[365 วันแห่งโปรแกรม #day20] Library, API, Framework, SDK, Code Snippet

วันที่ยี่สิบของ ‪#‎365วันแห่งโปรแกรม‬ วันนี้เราจะมีคุยกันเรื่อง Library, API, Framework, SDK, Code Snippet


พอดีเพื่อนอยากได้บทความเกี่ยวกับความแตกต่างของ Library, API, Framework, SDK, Code Snippet ก็เลยลองเขียนครับ

Library

Library คือกลุ่มของโค้ดที่โปรแกรมของเราสามารถนำมาใช้ได้ โดยการ import หรือ include เข้ามา แล้วใช้งานผ่าน API ที่มันมีให้

ทั่วไปแล้ว Library จะระบุหน้าที่ของมันไว้ชัดเจนว่าใช้สำหรับทำอะไร เช่น Picasso(Android) เป็น Library สำหรับโหลดรุปภาพจาก source ต่างๆ มาแสดง, Refit(.Net) เป็น Library สำหรับใช้ในการติดต่อกับ REST service หรือแม้แต่ Package พื้นฐานของภาษาโปรแกรมต่างๆ ก็คือ Library

API

API มาจาก Application Programming Interface หมายถึงส่วนที่ใช้ในการสื่อสารระหว่างโค้ดของเรากับโค้ดของอีกฝั่งนึง (Library/Service) ซึ่งมันทำให้เราสามารถใช้งานบริการต่างๆ ของโค้ดภายนอกได้

API นั้นไม่ได้หมายถึงแค่ฟังก์ชันเพียงอย่างเดียว แต่รวมไปถึง class, enum, constant หรืออะไรก็ตามที่ที่บริการการนั้นๆ ยอมให้เราเข้าถึงได้

เราอาจกล่าวได้ว่า API คือสิ่งที่โปรแกรมเราเห็นเมื่อมองเข้าไปใน Library/Service

Framework

Framework คือกลุ่มของ Library และข้อกำหนดทางโครงสร้างและ pattern ของโค้ด (flow of control) Framework ต่างจาก Library ตรงที่ โค้ดของเราเรียกใช้ Library แต่ Framework เรียกใช้โค้ดของเรา เช่น Framework สำหรับ Web ก็จะมีข้อกำหนดในการทำ routing การสร้าง view/controller การติดต่อกับฐานข้อมูล ประโยชน์หลักๆ ของ Framework ก็จะเป็นเรื่องของการบังคับให้เราเขียนโค้ดทั้งหมดในรูปแบบเดียวกัน โครงสร้างเหมือนกัน

อันนี้ไปเจอมาจากความเห็นของคุณ Ford AntiTrust ซึ่งมีต้นฉบับมาจากที่อื่นอีกที ผู้เขียนได้บอกไว้ชัดเจนมากครับว่า Framework และ Library ต่างกันยังไง

A framework is more than a library, and actually maybe has nothing to do with a library.

Here is an interesting article on Martin Fowler’s blog about Inversion of control, but in the article, Martin discuss the difference between the library and the framework, as well he refers to another article about frameworks.

I can summarize the points in both articles in the following:

  • A library is about reusable functionalities, but a framework is about reusable behaviors.
  • A library is something you call/inherit from your code, but framework is something that calls your code or provide services for your code.
  • A library is a collection of components and classes, where framwork is how abstract classes and components interact with each others.

I can explain the framework by this definition: Framework is an abstract design that embodies how the application works, and it has "hooks" where you can "inject" your module, or component.

SDK

SDK คือกลุ่มของ Framework, Library, Tools, Document, และอื่นๆ ที่จำเป็นในการเขียนโปรแกรมเพื่อทำงานบน/ร่วมกับ Platform/Hardware/Service ของผู้ผลิต SDK นั้น

SDK ยังเป็น abstraction layer ที่ครอบความยุ่งยากของการทำงานเอาไว้ เช่น เราอาจรู้ว่าเราสามารถเขียนโปรแกรมบนมือถือได้หากเราสามารถแกะวิธีเข้าถึงค่าต่างๆ ของมือถือ แต่ถ้ามี SDK ให้ล่ะ? เราก็แค่ทำตามที่เขาบอก ใช้งาน Libraries และ Tools ที่เขาให้มาจบ ชีวิตก็ง่ายขึ้น

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

Code Snippet

Code Snippet เป็นอีกรูปแบบหนึ่งของ reusable code ที่เราสามารถเอามาใส่เมื่อเราต้องการ โดยการ copy โค้ดมาใส่ไว้ในโค้ดของเราตรงๆ เลย

IDE (integrated development environment) หรือ code editor ต่างๆ มักจะมี Snippet มาให้จำนวนนึง เช่น โค้ดสำหรับทำ swith-case, โค้ดสำหรับอ่าน/เขียนไฟล์ ซึ่งเราอาจสามารถเพิ่ม template ของ Snippet เข้าไปเองได้

นอกจากนี้ Code Snippet ยังรวมไปถึง copy and paste programming (เขียนโปรแกรมแบบ copy/paste) ด้วย

‪#‎day20 #365วันแห่งโปรแกรม ‪#‎โครงการ365วันแห่ง‬...