สรุป Libraries และ APIs ของภาษา Java ฉบับสิ้นคิดประจำปี 2021
ปฏิเสธไม่ได้ว่าภาษา Java ยังคงได้รับความนิยมอยู่ในปี 2021 เนื่องจากภาษาเริ่มพัฒนามาตั้งแต่ปี 1995 ทำให้มี ecosystem ที่แข็งแกร่งมาก มี documentation ที่ครบถ้วน มี community ที่ใหญ่มาก มี libraries, frameworks, และ APIs ให้เลือกใช้ครบ สามารถใช้พัฒนาระบบแบบสากกะเบือยันเรือรบ
เมื่อเรายอมรับและเข้าใจปัญหาที่เกิดขึ้นรวมถึงวิธีการแก้ไข การที่เรามีคู่มือสิ้นคิดอย่าง 20+ Essential Java Libraries and APIs Every Programmer Should Learn in 2021 น่าจะช่วยให้ย่นระยะเวลาการพัฒนาระบบของเราให้สั้นลง มาดูกันครับ
1. Testing
หนึ่งในเหตุผล (หรือข้ออ้าง) ในการไม่เขียนชุดการทดสอบคือการไม่รู้จักเครื่องมือ ซึ่ง Java ก็มีเครื่องมือมาตรฐานโลกหลายอย่างให้เรียนรู้และเลือกใช้ เช่น
- JUnit สำหรับ unit testing, integration testing
- Mockito หรือ PowerMock สำหรับ test double
- Cucumber หรือ Robot framework สำหรับ end-to-end testing
2. JSON
ถือว่าเป็นรูปแบบข้อมูลที่เป็นมาตรฐานโลกสำหรับ web application ซะแล้ว แนะนำเป็น Jackson หรือ Gson
3. Logging
เป็นวิธีการที่ง่ายที่สุดที่จะ monitor ระบบของเรา (รวมไปถึงการ debug สำหรับบางคน ฮ่าๆๆ) สำหรับ library ที่ช่วยจัดการ level ของ log (info, debug, warn, error) รวมถึง format ก็อย่างเช่น Log4j, SLF4J, และ Logback
4. Common operation
ใครที่เขียน Java อาจจะต้องเจอกับเรื่องพื้นฐานอย่าง IO, Collections, email, cryptographic, random number generator ซึ่งบางอย่างเราก็ไม่จำเป็นต้องเขียนใหม่ทุกรอบแล้วเอาไปไว้ใน package แบบ common หรือ helper นะ (ผมก็เคยทำ ฮ่าๆๆ) library ที่แนะนำเลยคือ Google Guava กับ Apache Commons
5. HTTP
ที่จริง Java มี HttpClient อยู่แล้ว แต่ต้องมาจัดการเรื่อง caching และ compression เอง OkHttp หรือ Apache HTTPClient หรือ AsyncHttpClient หรือใครมาสาย Spring Boot ก็จัด RestTemplate หรือ WebClient ไปเลย
6. XML
สำหรับคนที่ต้องจัดการข้อมูลกับ XML แนะนำเป็น dom4j ครับ
7. Excel
จะทำยังไงถ้าต้องอ่าน-เขียนลงไปใน Microsoft Document อย่าง Excel บอกเลยว่า Java ก็ทำได้ครับ แนะนำเป็น Apache POI API
8. Bytecode
ส่วนตัวไม่เคยใช้เหมือนกันครับ แต่ถ้าถามว่า Java สามารถดำลงไปถึง low-level API เช่นทำงานกับ JVM ได้ไหม คำตอบคือได้ครับ (ทำอะไรก็ได้หมดเลยป่ะเนี่ย ฮ่าๆๆ) สำหรับ case นี้แนะนำเป็น Javassist หรือ CgLib
9. Database
สำหรับการเชื่อมต่อกับ database แน่นอนต้องผ่าน connection pool อยู่แล้ว เพราะประหยัด resource และจัดการ consistency นะ สำหรับ library ลองเป็น DBCP หรือจะไปสาย Spring Boot เลยจะดีกว่าครับ
10. Messaging
ระบบหลายๆ ที่ก็เริ่มเปลี่ยนการ communication เป็นแบบ asynchronous กันแล้ว เพื่อแยกระบบออกเป็นส่วนๆ ลดผลกระทบเมื่อระบบเกิดปัญหาและการ scale แบบ horizontal ก็ทำได้ง่ายขึ้นผ่าน messaging queue ซึ่งเราสามารถนำ JMS API มาช่วยได้
11. PDF
จัดการ Excel ได้แล้ว PDF ล่ะ ได้เหมือนกันครับ ลองดู Apache PDFBox หรือ iText ครับ
12. Date and Time
เป็น case มาตรฐานโลกเหมือนกัน สำหรับ Java 8 ขึ้นไป แนะนำให้ใช้ Date & Time API ที่ให้มาเลยครับ ถ้าเก่ากว่านั้นแนะนำเป็น Joda-Time สิ่งที่ผมอยากเน้นคือ เลือกใช้ตัวใดตัวนึงไปเลยดีกว่าใช้ปนๆ กัน ไม่งั้นมันไปเพิ่มแรงในการ maintain code ครับ
13. HTML
สำหรับคนที่ต้องจัดการข้อมูลบน HTML เช่นการทำ web scraping ใช้ JSoup ก็ไม่เลวครับ หรือจะเปลี่ยนไปใช้ Python ก็ดีครับ
14. Embedded SQL Database
เหมาะมากสำหรับการทดสอบครับ เนื่องจากไม่ต้อง provision database ขึ้นมาเองทุกครั้ง แนะนำเป็น H2 ครับ
15. JDBC Debugging
เพิ่งรู้เหมือนกันครับว่ามันมี library แบบนี้ด้วย ในบทความแนะนำให้ลอง p6spy ครับ
16. Networking
สำหรับสาย low-level ดำลงไปในระดับ transport layer เช่น TCP หรือ UDP ผ่าน Java NIO แนะนำเป็น Apache MINA
17. Serialization
เป็นอีกหนึ่งทางเลือกในการรับ-ส่งข้อมูลแทนการใช้ JSON หรือ XML เพื่อเพิ่ม performance ของระบบ และไม่ผูกมัดกับระบบ ตัวอย่างเช่น การใช้งาน gRPC แทน HTTP API + JSON ซึ่งเหมาะกับระบบที่ต้องการ throughput สูงๆ latency ต่ำๆ ในส่วนของ library เริ่มจาก Google Protocol Buffer เลยก็ดีครับ
เมื่อพบเจอปัญหา แนะนำให้ยอมรับและเข้าใจมันก่อนเรานำเครื่องมือไปใช้ อย่าเอาเครื่องมือมากำหนดการแก้ปัญหานะ ไม่งั้นจะทำให้เราลำบากทีหลังได้