Skip to main content

Command Palette

Search for a command to run...

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

Published
4 min readView as Markdown
ThoughtWorks Tech Radar Vol.23 มีอะไรน่าสนใจสำหรับ Python Developer บ้างนะ
Y

My name is Yothin Muangsommuk. I've been in many roles in Software Development team, Software Engineer, Tech Lead, and Technical Coach. My focus has always been improving a sustainability and maintainability through Technical Excellence and Software Craftsmanship. I also A Python enthusiasm, An occasional conference speaker (PyCon APAC, Code Mania, Barcamp Bangkok), and a community organizer (PyCon Thailand, PySomTum, GDG Cloud Bangkok).

Interests: Programming Language Design, Software Engineering, Distributed System

ทุกๆ ประมาณ 6 เดือนบริษัท ThoughtWorks จะออก Tech Radar ออกมาครับ ซึ่งเป็นเหมือนกับการสรุปเทรนด์และ Tooling ที่น่าสนใจในวงการ IT ซึ่งจะแบ่งเป็น 4 หัวข้อใหญ่ๆ คือ Technique, Platforms, Tools และ languages & Frameworks ครับ นอกจากนั้นในแต่ละหัวข้อยังแบ่งระดับของความน่าสนใจเป็น Adopt, Trial, Assess, Hold ด้วยครับ ซึ่งมีประโยชน์มากๆ ในการจะเลือกเครื่องมือบางอย่างจากทะเลของเทคโนโลยีที่มีมหาศาล

แล้วโดยปกติทุกๆ Edition ใหม่ของ ThoughtWorks Tech Radar ผมจะอ่านแล้วทำโน๊ตส่วนตัวไว้อยู่แล้วครับ แต่ปีนี้คิดว่าลองเอามาแชร์ให้คนอื่นบ้างดีกว่า อันนี้คือเฉพาะที่ผมสนใจแล้วเกี่ยวกับ Python ไม่ทางใดก็ทางหนึ่งนะครับ แต่ผมเชียร์ว่าให้อ่านตัวเต็มๆ เองดีกว่าถ้ามีเวลาครับ

ลิ้งค์ไป Tech Radar Volume ล่าสุดครับ https://www.thoughtworks.com/radar#download-current-radar

Technique

carbon.png

Declarative data pipeline definition (Trial)

ในส่วนนี้เป็นเทคนิคที่ช่วยให้เราประกาศ data pipeline ขึ้นมาเป็น DSL code base แทนที่จะเชื่อมกันหลวมๆ มี tooling ที่เขียนด้วย Python ถูกพูดถึงอยู่สองตัวครับตัวแรกคือ airflow-declarative ที่เป็นช่วยให้เรา declare DAG ไว้ใน yaml ไฟล์แล้วอ่านเข้า Airflow ได้ครับ อีกตัวนึงคือ A La Mode ซึ่งเขียน DAG เป็น DSL อยู่ในโค้ด Python เราเลยครับ

Screen Shot 2563-10-29 at 19.27.40.png

Diagrams as code (Trial)

ส่วนนี้เป็นเทคนิคที่ช่วยให้เราเขียน diagram ผ่านโค้ดแทนที่จะใช้เครื่องมือที่เป็น GUI ลากวาง diagram ซึ่งข้อดีคือมันเก็บเวอร์ชั่นได้ และง่ายกับการแก้ไขมากกว่าครับ ในนี้ tooling ที่เป็น Python ถูกพูดถึงคือ Diagrams ที่เราเพิ่งพูดถึงกันไปเมื่อไม่กี่โพสก่อน

Productionizing notebooks (Hold)

ข้อนี้พูดถึง tooling พวก Jupyter notebooks, databricks notebooks ที่ทำให้แสดงผลแบบ Production เลย แต่ปัญหาคือ code ที่ทำเรื่อง data พวกนี้ส่วนใหญ่จะ implement มาไม่ค่อย scalability, maintainability และ resiliency เหมือน application code ที่ development ทีมทำ ซึ่งในนี้แนะนำว่าควรจะให้ data scientists ทำ production code ผ่าน framework ที่เหมาะสมหรือใช้ Continuous delivery เพื่อลด abstraction complexity ในการทำ ML platform ครับ

Platforms

1_OneJZOqKqBZ9oN80kRX7kQ.png

JupyterLab (Trial)

สำหรับใครที่ยังใช้ Jupyter notebook อยู่นะครับแนะนำให้ลอง JupyterLab เลยเพราะฟีเจอร์เยอะกว่ามาก (ส่วนตัวผมว่าหน้าตามันคล้ายสมัย Matlab ฮิตๆ กันมากครับ)

AWS Cloud Development Kit (Assess)

หนึ่งในภาษาที่ AWS CDK ทำ library มาคือ Python ครับ ซึ่งตัว AWS CDK นี้จะช่วยให้เรา define ตัว cloud infrastructure ได้แทนที่จะต้องมานั่งลง service สร้างเครื่อง ผูก VPC ฯลฯ ครับ

Screen Shot 2563-10-29 at 19.30.56.png

DuckDB (Assess)

ตัวนี้เป็น embeded, columnar database ครับ ซึ่งถึงแม้จะไม่ได้เขียนด้วย Python แต่ผมอยากพูดถึงเพราะว่ามันมี client Python และตัวมันเองน่าจะมาแก้จุดอ่อนของ Pandas ที่ต้องโหลด data เข้า memory มาประมวลผลข้อมูลและถูกจำกัดด้วยปริมาณหน่วยความจำในเครื่องครับ

Tools

rbac-ui-timezone.gif

Airflow (Adopt)

ผมคงไม่ต้องอธิบายอะไร Airflow มากนะครับ ถ้าอยากรู้จัก Airflow มากขึ้นไปดูต่อที่เพจ https://www.facebook.com/dataength เลยครับ

screenshot.png

Dependabot (Adopt)

ถึงแม้ dependabot จะไม่ได้เขียนด้วย Python แต่ในฐานะ Developer ผมแนะนำให้ทุกคนใช้ครับ จะช่วยประหยัดเวลาในการ Monitor 3rd party package ที่เปลี่ยนตลอดเวลาให้เรา ซึ่งถ้าตั้ง workflow ดีๆ นี่ เราแทบจะประหยัดเวลาอัพเกรด package ไปได้เยอะเลยครับ ตัว Dependabot support Python ทั้ง requirements.txt ธรรมดาๆ pipenv, poetry ยัน pip-tools เลยครับ

Screen Shot 2563-10-29 at 19.37.29.png

Bokeh (Trial)

ผมว่าหลายๆ คนที่ทำงาน Data visualization น่าจะเปลี่ยนมาใช้ตัวนี้แทน Matplotlib แล้วนะครับ ด้วยรูปแบบ graph ที่หลากหลายมาก และส่วนตัวผมว่า API ใช้ง่ายด้วยเลยแทบจะเป็น goto library สำหรับคนทำ visualization เลยครับ

thumbnail_0a718df0-9ce7-11e9-8982-0242ac11004a.png

Dash (Trial)

ตะกี้ Bokeh อาจจะเก่งเรื่อง visualize ครับ แต่ถ้าอยากได้ data application แบบครบจบใน lib เดียวนี้ต้องยกให้ Dash เลย ซึ่งในนี้บอกว่าเราควรพิจารณาที่จะใช้ Dash ในกรณีที่ต้องการแสดง analytics แบบลึกๆ กับ business user แทน low code solution อย่าง Tableu ครับ

MLflow (Trial)

Dash อาจจะเป็น Platform สำหรับ data แต่ MLflow นี่ตามชื่อเลยครับ สำหรับ Machine learning experiment tracking and lifecycle management ที่จะช่วยให้เราพัฒนาแล้วค่อยๆ evolve machine-learning model เราไปเรื่อยๆ ผ่าน experiment tracking ที่จะคอยเก็บ metrics ต่างๆ ไว้ให้เรา ปรับ model เราให้ดียิ่งขึ้นครับ MLflow รองรับการจัดการผ่านทั้ง UI based กับ API ด้วย

features-page-dash-12c65431808e7d8daf234a096446c1f0da311a0f3bcec5352e28bda60136fb16.jpg

Sentry (Trial)

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

dvc_cml_long_report.png

CML (Assess)

หรือ Continuous Machine Learning ครับ ซึ่งเป็น library ที่ช่วยให้ เราทำ CI/CD ให้กับ machine learning project ของเราได้ (ซึ่งงาน machine learning เราก็น่าจะทำด้วย Python กันนี่แหละ) ตัว CML ช่วยเรา manage/track experiment กับ model ที่เราทำแล้วคอยเก็บ versioning ผ่าน DVC (ซึ่งคนทำคนเดียวกันด้วย) อีกความสามารถนึงคือช่วยทำ report ของ ML experiment แล้วสร้างเป็น GitHub pull request ให้ด้วยครับ

datadocs-221a69b622226a3c0349928caabddc18.gif

Great Expectations (Assess)

ตัวนี้ถ้าเทียบง่ายๆ คือ unit tests สำหรับ data pipelines ครับ โดยมันจะทำหน้าที่ตรวจสอบคุณภาพของข้อมูลกับ Anomaly ให้ ซึ่งนอกจากจะช่วยตรวจสอบ data ให้ยังช่วยรับประกันได้ว่า model เราจะยังทำงานในขอบเขตของข้อมูลที่เราเข้าใจอยู่ครับ

history-and-comparison.png

LGTM (Assess)

LGTM เป็น static analysis ที่โฟกัสในเรื่อง security โดยเฉพาะครับ ผ่านตัว CodeQL ซึ่งเป็นตัว query syntax tree ที่รองรับหลายภาษาเลยรวมถึง Python ด้วย

Screen Shot 2563-10-29 at 19.45.46.png

Opacus (Assess)

เป็น library ที่ช่วยให้ PyTorch เรารองรับการทำ model แบบ differential privacy ครับที่ช่วยรักษาข้อมูลส่วนตัวของลูกค้า ความท้าทายของ Library นี้อยู่ที่การหา Model กับ Data ที่สามารถรองรับการทำงานแบบนี้ได้ครับ ซึ่งใน Tech Radar บอกว่า Library ตัวนี้ยังใหม่มากยังต้องคอยดูอยู่ว่าจะเป็นยังไงต่อไป

OSS Index (Assess)

ตัวนี้เป็น tool ที่ช่วย scan 3rd party library ให้เราว่าปลอดภัยรึเปล่า มี vulnerabilities รึเปล่า ซึ่งรองรับ PyPI ด้วยครับ โดยถ้าเราจะใช้กับ Python เราสามารถใช้ผ่าน package ชื่อ ossaudit ซึ่งรองรับทั้ง requirements.txt, Pipfile, tox.ini และ conda.yml ครับ ส่วนตัวผมมองว่าเอามาเสริมการทำงานกับ Dependabot นี่จะช่วยเราได้มากเลยครับ

Languages & Frameworks

pipeline_visualisation_with_layers.png

Kedro (Assess)

Kedro เป็น library ที่ช่วย apply Software engineering practice ให้กับ data/machine-learning pipeline ครับ โดยจะเป็น framework ที่วาง structure กับ practice ให้ไม่ว่าจะเป็น logging, การเก็บ credential การจัดการ sensitive information นอกจากนั้นแล้วพวก coding style, testing อะไรก็จัดการวางรากฐานให้หมดเลยครับ เรียกได้ว่าถ้าขึ้น project data / machine learning ใหม่ ตัวนี้ก็น่าสนใจไม่ใช่น้อย

SnorkelHeader.png

Snorkel (Assess)

Snorkel เป็น library ช่วย build/manage training data สำหรับ Maching Learning ครับ โดยเกิดจากความเชื่อที่ว่า machine learning จะประสบความสำเร็จหรือไม่ ไม่ได้ขึ้นอยู่กับ model, algorithm หรือ infra แต่ขึ้นอยู่กับ data ครับ โดยจะช่วยจัดการการ label data ให้แบบ programmatically ครับ ถึงแม้โปรเจ็คจะไม่ Active แล้วเพราะคนทำไปทำ Snorkel Flow แต่ก็นับว่าเป็นไอเดียที่เจ๋งมากครับ

5ee3ba655ea1538e308186f8_5e110cb05aa3986df7fd27a2_uber_website.gif

Streamlit (Assess)

ก่อนหน้านี้เราพูดถึง Dash ไปที่เป็น data application framework ใช่มั้ยครับ ตัวนี้อยู่ในตลาดเดียวกันแต่จะเด่นในเรื่อง rapid prototyping กับ visualization ที่รองรับ library หลายตัวกว่า ซึ่งทาง Tech Radar บอกว่าเหมาะกับ Data Scientist ที่อยากจะ show case งานแบบเร็วๆ ระหว่างที่ยัง experiment อยู่ครับ

Summary

รวมๆ แล้วปีนี้ผมเห็น Tooling เกี่ยวกับ Data Engineering / Machine Learning เพิ่มขึ้นเยอะมากครับ หลายๆ อย่างทำให้มี Software Engineering Practice ดีขึ้น ซึ่งน่าสนใจไม่น้อยเลยทีเดียว และยิ่งทำให้ผมที่ช่วงนี้สนใจ Machine Learning แล้วยิ่งสนใจมากกว่าเดิมอีก ใครอ่านเต็มๆ แล้วเจอ Tooling ตัวไหนน่าสนใจลองมา Comment กันได้ครับ

More from this blog

ยิง request แบบไม่มีสะดุดด้วย emacs REST client

ช่วงปีใหม่ผมมีเวลาไปเรียนคอร์ส The Ultimate Go Series ของพี่ยอดซึ่งจากใจคนที่ดู Go อยู่ห่างๆ ผมบอกได้เลยว่าคอร์สนี้สอนได้ครบเครื่องมากในเวลาไม่กี่ชั่วโมง แต่นั่นไม่ใช่ประเด็นครับ ประเด็นคือตอนคอร์ส 2 ที่กำลังเรียนเรื่อง API พี่ยอดใช้ HTTP Client ที่ร...

Jan 9, 20223 min read102
ยิง request แบบไม่มีสะดุดด้วย emacs REST client

[Book Review] The Phoenix Project เพราะ IT Operation ก็ไม่ต่างกับ Production Plant

ผมรู้จัก The Phoenix Project มานานมากและมันวนเวียนมาเกือบจะได้อ่านหลายรอบ จนกระทั่งเมื่อประมาณกลางเดือนที่แล้ว ผมเพิ่งได้มีโอกาสจะหยิบมันขึ้นมาอ่าน และตั้งแต่ตอนนั้นผมแทบจะวางไม่ลงเลยตลอดระยะเวลาเกือบหนึ่งเดือนที่ผ่านมา และผมแนะนำให้กับทุกคนที่ทำงานใ...

Dec 20, 20214 min read456
[Book Review] The Phoenix Project เพราะ IT Operation ก็ไม่ต่างกับ Production Plant

Emacs diary EP2: สภาพแวดล้อม

ผมไม่รู้ว่าจะมีใครมาใช้ emacs แบบ เป็น text-editor ตัวแรกเลยมั้ย ผมไม่ใช่คนนึงแน่ๆ ซึ่งพอเราเปลี่ยนเครื่องมือ มันจะอารมณ์เดียวกับเราเปลี่ยนภาษา Programming ที่เราเขียนทุกวันเลย เพราะสิ่งแรกๆ ที่เราพยายามทำคือ "เราพยายามจะทำสิ่งเดียวกับที่เราเคยทำได้จ...

Dec 4, 20214 min read98
Emacs diary EP2: สภาพแวดล้อม

เรื่องประหลาดๆ ของการนับปีใน Java

ลืมหัวข้อ blog นี้ไปก่อนนะครับ แล้วลองพยายามเดาดูว่าโค้ด Java ข้างล่างนี้พยายามทำอะไร มันก็ดูตรงไปตรงมาใช่มั้ยครับ แล้วถ้ารันออกมาสมมติวันนี้วันที่ 1 ธันวาคม 2021 สิ่งที่ function นี้คืนกลับมาก็ เป็น 2020-12-01 ใช่มั้ยครับ ถ้าเราเขียน Unit test ไว้ ...

Dec 1, 20212 min read96
เรื่องประหลาดๆ ของการนับปีใน Java

Make Time | โลกมันวุ่นวาย แต่เรายังหาความสงบได้นะ

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

Nov 18, 20212 min read144
Make Time | โลกมันวุ่นวาย แต่เรายังหาความสงบได้นะ
P

Python by Cow

22 posts