ThoughtWorks Tech Radar Vol.24 มีอะไรน่าสนใจสำหรับ Python Engineer บ้างนะ

Subscribe to my newsletter and never miss my upcoming articles

เป็นธรรมเนียมที่เพิ่งสร้างละกัน สำหรับผมที่จะมารีวิว ThoughtWorks Tech Radar ฉบับใหม่ๆ ว่ามีอะไรที่น่าสนใจบ้างในส่วนที่เกี่ยวข้องกับ Python Language & Ecosystem ครับ ซึ่ง สำหรับใครยังไม่เคยอ่านบล็อกที่แล้ว สามารถตามไปได้ที่ลิ้งค์นี้เลยครับ

ThoughtWorks Tech Radar Vol.23 มีอะไรน่าสนใจสำหรับ Python Developer บ้างนะ

โอเค มาเข้าเรื่องกันดีกว่าสำหรับ ThoughtWorks Tech Radar Vol.24 นั้นสามารถไปโหลดอ่านกันเองได้ที่ลิ้งค์นี้ครับ TECHNOLOGY RADAR An opinionated guide to technology frontiers Volume 24 โดยเหมือนทุกๆ ฉบับที่จะแบ่งหัวข้อออกเป็น 4 กลุ่มหลักๆ คือ Techniques, Platforms, Tools, Languages & Frameworks และทุกๆ ฉบับจะมี theme ของตัวเอง โดยในฉบับนี้มาใน Theme 4 คือ

  • Platform Teams Drive Speed to Market - ในส่วนนี้พูดถึงการสร้างทีมและ Platform เพื่อที่จะรองรับการพัฒนาให้เร็วยิ่งขึ้นและลดความซับซ้อนในการ operate ลงครับ
  • Consolidated Convenience over Best in Class - ส่วนนี้พูดถึงการเลือก Tooling ครับซึ่ง หลายๆ ทีมจะเลือกแต่ละ tools เองส่วนใหญ่ เพราะมันตอบโจทย์มากกว่า one-stop shop ครับ
  • Perennially "Too Complex to Blip" - หลายๆ หัวข้อไม่ถูกหยิบมาใน Radar เพราะมันซับซ้อนเกินกว่าจะสรุปให้ได้สั้นๆ ครับ แล้วจะไปโผล่ใน medium อื่นที่ เหมาะจะ discuss มากกว่า
  • Discerning the Context for Architectural Coupling - ส่วนนี้พูดถึง coupling ใน software ครับว่าถึงแม้หลายๆ practice จะบอกให้ decoupling แต่ก็ต้องแลกมาด้วยความซับซ้อนของ workflow ในการ integrate กันซึ่งเค้าสรุปคร่าวๆ คือ no-silver bullet และเราควรจะใช้เวลาในการทำความเข้าใจ Factor ต่างๆ ของระบบเราแทนที่จะหา general solution มาครับ

Techniques

ml-pipeline-1.png

CD4ML

ใน Vol.23 เราเห็น Continuous ML (CML) อยู่ใน Assess แต่ในฉบับนี้ถูกยกเป็น Adopt แล้วครับ และแนะนำว่าให้เป็นจุดเริ่มต้นที่เราควรมาดู ถ้าเราต้องการ Deploy ML ขึ้น Production ครับ ส่วน Tooling ที่ใช้ยังคงแนะนำเป็น DVC (Data Science Version Control) เหมือนเดิมครับ

Distroless Docker Images

ผมเห็น Distroless Docker Images ขึ้น Tech Radar มาหลายครั้งละ ซึ่งรอบก่อนๆ ผมไม่ได้สนใจเท่าไร แต่รอบนี้ขอพูดถึงหน่อยละกัน คือ Docker Images ที่เราใช้ๆ กันส่วนใหญ่จะ based จาก Linux ซัก distro เช่น Ubuntu หรือเบาๆ หน่อยก็ alpine ใช่มั้ยครับ ซึ่ง ในปัจจุบัน vulnerability ที่โจมตี Container ก็จะ relate กับตัว based distro เหล่านี้ครับ เลยเป็นเหตุให้เกิด Distroless images ขึ้นมา ซึ่งเราสามารถ ใช้ได้จาก Google distroless container images ซึ่งมี Python 3 image ด้วย หรือใช้ Bazel ซึ่งเป็น buildtools จาก Google ช่วยสร้างให้ได้ หรือถ้าง่ายกว่านั้นก็ใช้ Multi-stage Docker ที่เราใช้ๆ กันสร้างก็สามารถทำได้เช่นกัน และส่วนใหญ่แล้ว Distroless image จะไม่มี Shell มาให้เราเข้าไปทำอะไรได้ครับ แต่เราสามารถใช้ BusyBox shell ไว้ debug แทนได้ครับในกรณีนี้

Homomorphic encryption

ยุคปัจจุบันเรามีความกังวลเรื่อง privacy มากขึ้นอย่างมีนัยยะสำคัญ Homomorphic encryption เลยมาตอบโจทย์นี้ครับ โดยทำให้เราสามารถทำงานอย่างเช่น search, arithmetic ในตัวข้อมูลที่เข้ารหัสอยู่ได้เลย ซึ่งก็มี tooling ที่ช่วยทำสิ่งนี้ในหลายภาษาครับและหนึ่งในนั้นคือ python-paillier ที่ช่วย implement HE ให้เราครับ

Platforms

Screen Shot 2564-04-17 at 14.35.37.png

จริงๆ มี Pulumi เป็น Infrastructure as a Code ถ้าอธิบายง่ายๆ จะคล้ายๆ Terraform แต่แทนที่จะใช้ yaml เขียนภาษาเดียว ตัว Plulumi มี Client หลายภาษาครับ ซึ่ง Python ก็เป็นหนึ่งในนั้นด้วยครับ

Tools

Sentry

ผมเคยเขียนถึง Sentry ไปใน บล็อก Vol.23 แล้วครับ ซึ่งในรอบนี้เค้าเปลี่ยนจาก Trial เป็น Adopt เลย ส่วนตัวผมยังยืนยันคำเดิมครับว่า ถ้าได้ใช้แล้ว เราจะเลิกดู Log output แบบเดิมๆ ไปเลย อ่อเสริมอีกนิดนึงคือ ตัว Sentry มีเวอร์ชั่น Open-source ที่เราสามารถเอาไป Host อยู่บน On-Premise ของเราเองได้นะครับ

dbt-arch.png

dbt

Data Build Tool (DBT) เป็นเครื่องมือที่ช่วยให้เรา Transform data ใน ELT pipeline ครับ โดยจุดเด่นของมันคือ ค่อนข้างจะสนับสนุน engineering practice ให้กับชาว Data Engineering ยกตัวอย่างเช่น การทำ versioning, automate testing หรือ automate deployment ครับ ซึ่งภาษาหลักๆ ที่ใช้จะยังเป็น SQL อยู่ แต่สามารถเขียน Adaptors เพื่อไปต่อกับ source อื่นๆ เช่น Snowflake, BigQuery, Amazon Redshift หรือ Postgres นอกจากนั้นตัว DBT ยังมี Python API ที่ให้เราควบคุมมันโดยตรงจาก Python code แทนที่จะใช้ผ่าน CLI ได้ด้วยครับ และ support templating engine ที่เราคุ้นเคยกันอย่าง Jinja ในการเขียนคู่กับ SQL อีกด้วยครับ

Great Expectations

ตัวนี้ผมก็เขียนถึงใน Vol.23 แล้วครับ ใน Edition นี้เค้าปรับจาก Assess เป็น Trial แล้วครับ

Screen Shot 2564-04-17 at 14.58.28.png

MLflow

MLflow ตัวนี้เป็น Machine Learning lifecycle management tools ครับ ซึ่งครบวงจรมากตั้งแต่ Tracking result ของ model เรา, Packaging เพื่อให้คนอื่นนำไปใช้ได้, Deploy model ไปจนถึงมี repository ไว้เก็บ Model เลยครับ สิ่งเดียวที่ Tech Radar กังวลเกี่ยวกับ MLflow คือตัวมันเองพยายามทำหลายอย่างไปครับ (ทำให้ผมคิดถึงหัวข้อ theme ของ Edition นี้เลยที่บอกว่า tools ที่รวมหลายๆ อย่างมักจะไม่ดีทุกอย่าง)

OR-Tools

OR-Tools เป็นชุดเครื่องมือจาก Google ที่ไว้ช่วยเราแก้ปัญหาในทาง combinatorial optimization ครับเช่น vehicle routing, flows, integer หรือ linear programming ซึ่งหนึ่งในภาษาที่ OR-Tools รองรับคือ Python ครับ

PyrightLarge.png

Pyright

Pyright เป็น Static type checker สำหรับ Python จาก Microsoft ครับ ซึ่งทาง Tech radar บอกว่าเค้าค่อนข้างจะ Prefer มากกว่า mypy เนื่องจาก ความเร็วในการทำงานกับ code base ขนาดใหญ่ และ watch mode ที่ช่วยให้ทำงานได้ฟีดแบคเร็วมาก นอกจากนั้นแล้ว Pyright ยังรองรับการทำงานทั้งจาก CLI และ integrate กับ Editors ต่างๆ ได้เป็นอย่างดีครับ

redash-anim.gif

Redash

Redash เป็น Tools ที่ช่วยให้เราสามารถ explore, query, visualize และ share data ได้ไม่ว่าจาก source ใหญ่หรือเล็ก โดยไม่สน Technical Skill ครับ ซึ่งใน Tech Radar บอกว่า ช่วยให้ทีมเค้าสามารถ สร้าง product dashboard และ query metrics ต่างๆ ขึ้นมาได้อย่างรวดเร็วด้วยตัวเอง ลด feedback cycle และทำให้ทีมโฟกัสกับ business outcomes มากขึ้นครับ อ่อ และที่ผมเลือก Redash มาเพราะว่า Backend ของ Redash อยู่บนพื้นฐานของ Flask ครับ

Yelp's detect-secrets

detect-secrets เป็นเครื่องมือในการหา secrets ใน codebase เราครับ ซึ่งเราสามารถใช้ tools ตัวนี้ใน pre-commit hook ได้หรือจะเอาไว้ใน CI/CD ก็ได้ครับ ซึ่ง default configuration ก็ใช้งานได้ดีอยู่แล้ว แต่ก็สามารถ custom plugins เพื่องานเฉพาะทางเราได้ด้วยเช่นกันครับ

Languages & Framework

1_VqdpQwdIybhq7EutrQNCwg.png

AWS Data Wrangler

AWS Data Wrangler เป็น library ที่ช่วยเพิ่มความสามารถของ Pandas กับ AWS ครับ โดยใช้ความสามารถของ Apache Arrow ควบคู่กับ Boto3 ทำให้ Dataframe สามารถเชื่อมกับข้อมูลที่อยู่ใน AWS ได้ seemless ขึ้น ซึ่งช่วยเราลดเวลาที่จะใช้ในการเชื่อมข้อมูลกับ Source ใน AWS แล้วไปสนใจกับการ Transform data ได้มากขึ้นครับ

logo-teal.png

FastAPI

ณ เวลานี้ต้องบอกว่า ถ้าพูดถึง Web Framework ใน Python นั้นไม่ได้ Dominate ด้วย Django หรือ Flask อีกต่อไปแล้วครับ ด้วย FastAPI เป็นอีก Library นึงที่มาแรงมาก ด้วยการที่ใช้ความสามารถใน Modern Python อย่าง Typing, Async รวมถึง auto documentation เป็น Swagger ได้ด้วยครับ ซึ่งใน Tech Radar บอกว่าตัว FastAPI ช่วยให้ทีมโฟกัสกับ business functionality และสร้าง REST APIs ได้อย่างรวดเร็วครับ

Screen Shot 2564-04-17 at 15.43.21.png

Streamlit

Streamlit เราพูดถึงกันไปแล้วใน Edition ที่แล้วใน Edition นี้เค้าเปลี่ยนจาก Assess เป็น Trial แล้วครับ โดย Streamlit ช่วยให้เราสร้าง Prototype data application ขึ้นมาได้อย่างรวดเร็วครับ (น่าจะเร็วที่สุดในบรรดา Library แนวๆ เดียวกัน) นอกจากนั้นยัง support visualization library หลากหลายไม่ว่าจะเป็น Plotly หรือ Bokeh ด้วย ซึ่งแน่นอนว่าถ้าเราพูดถึงแสดงว่า มันเขียนด้วย Python ครับ

79161362-3bc8cf00-7d90-11ea-8974-17edbde3dc0d.gif

Dagster

ใน Edition ที่แล้ว Tech Radar แนะนำ Airflow มาครับ แต่ใน Edition นี้เค้าแนะนำ Dagster ขึ้นมาโดยเป็น Orchestration framework เหมือนกัน​ ซึ่งจุดเด่นของ Dagster คือมันจะ type aware data ที่ไหลอยู่ใน pipeline ตลอดครับ ผ่านความสามารถของ Type annotation ครับ

Screen Shot 2564-04-17 at 15.55.31.png

River

หลายๆ ครั้ง Machine Learning model มักจะเกิดจากการเทรนด้วย Dataset เดียว แล้วก็เอาไปใช้เลยครับ ซึ่งหลายๆ ครั้งมันไม่เวิร์คเพราะโลกเรา data มันเปลี่ยนตลอด และการ re-train model ใหม่มันใช้ effort เยอะมากครับ ตัว Library River เลยเปลี่ยน Approach ในเรื่องนี้ใหม่ โดยให้ตัว ML model มัน learn จาก Stream data และปรับตัวเองอยู่ตลอดครับ

Summary

ส่วนตัวใน Edition นี้ผมต้องยกให้ FastAPI, Redash กับ Streamlit ครับ ซึ่งทำให้เห็นชัดมากว่า การทำ Prototyping ให้ออกมาให้เร็วแล้วเก็บ Feedback มาปรับปรุงให้เร็วที่สุดสำคัญสำหรับ Business Agility ขนาดไหน ซึ่งสอดคล้องกับ Theme: Platform Teams Drive Speed to Market มากครับ ในขณะเดียวกัน เราก็ได้เห็น Technique / Approach ใหม่ๆ ในการทำงานกับ Machine Learning model ไม่ว่าจะเป็น dbt, Dagster หรือ River ที่ช่วยให้การทำงานกับ Data และ ML Model มีตัวเลือกมากขึ้นครับ

No Comments Yet