แบ่งปันประสบการณ์ KBTG Go Software Engineering Bootcamp และกิจกรรม Go Summer Workshop

Ruchida Pithaksiripan
3 min readMay 16, 2024

--

น้อง Gopher ตัวเป็นๆที่ไม่ใช่รูปที่ภรรยาคุณ Rob วาด
น้อง Gopher ตัวเป็นๆ ที่ไม่ใช่ภาพวาดของภรรยาคุณ Rob Pike

สวัสดีค่ะ ทุกคน ช่วงต้นปีที่ผ่านมา ฝ้ายได้มีโอกาสทำความรู้จักกับภาษา Go กับคอนเซป “เราไม่ได้เรียน Go เพื่อ Programming แต่ให้เราเรียน Software Engineering จาก Go” ซึ่งการเรียนในโครงการนี้ จะเริ่มจากการเรียนออนไลน์ผ่านแพลตฟอร์ม KLIX ของ KMITL เป็นเวลา 8 สัปดาห์ก่อน ในช่วงเดือนกุมภาถึงเมษา โดยจะมี Coaching Session ในแต่ละสัปดาห์จากพี่ๆ เพื่อมาคอยไขข้อสงสัย และให้คำแนะนำจากแบบฝึกหัดที่ได้จากบทเรียน ก่อนจะจบด้วย Intensive Workshop ที่ฝ้ายเพิ่งไปเข้าร่วมในสัปดาห์ที่ผ่านมาค่ะ ถ้าสนใจ

Summer Workshop

กิจกรรม Intensive Workshop นี้จัดในวันเสาร์อาทิตย์ที่ 11–12 พ.ค.ที่ผ่านมาค่ะ โดยรอบนี้จัดที่ตึก K+ สามย่าน เดินทางสะดวกด้วยรถไฟฟ้า ด้วยความที่วันแรกไปแต่เช้าค่ะ ตื่นเต้น ฝ้ายไปถึง แล้วจังหวะที่คุณพี่ที่โต๊ะลงทะเบียนชั้นล่างบอกให้ขึ้นไป ขึ้นไปถึงคนแรกเลย มีพี่ๆแม่บ้าน เดินมาถามด้วย ว่าเตรียมยังไง ยั๊งงงง หนูมาเรียนค่า แต่พี่ๆใจดีมาก พาชมสถานที่ พรีเซนท์ห้องอาบน้ำ แนะนำสวน และยังเชิญให้ไปนอนพักที่ Pod ก่อน บอกว่าเดี๋ยวงานเริ่มแล้วจะมาปลุกด้วยค่ะ Nice มาก ก็เลยแอบไปชมความล้ำจากโซน KBTG Labs ก่อนค่ะ ประทับใจ Future You, CCTV Analytics กับ Know your land price มากค่ะ

ง่วงๆก็มาชาร์จแบต มีแรงแล้วก็ จงตื่น มนุษย์

สำหรับช่วงเช้า เราก็จะมีให้แนะนำตัวกับสิ่งที่ชอบที่สุดสองอย่าง กับเพื่อนๆเป็นการ Ice-Breaking กันก่อนค่ะ จากนั้นเราก็จะไปนั่งประจำกลุ่มของตัวเอง (กลุ่มละ 8 คน) โดยช่วงเช้าพี่ๆก็จะแนะนำว่าเราจะทำอะไรกัน และมีเทคโนโลยีอะไรบ้างที่เราจะนำมาใช้ในการทำงานให้มีมาตรฐานแบบ Enterprise Grade รวมไปถึง Cross-functional Requirement (Non-functional Requirement) ที่จำเป็นด้วยค่ะ

เสริมพลังน้อง Gopher ด้วยเครื่องมือต่างๆ

พร้อมจะลุยมานานแล้ว! ได้เวลา ทุกคนก็จะเข้า Git Repository ของกลุ่มค่ะ โดยสำหรับ workshop นี้ พี่ๆได้อธิบาย gitops และ Terraform ที่มีมาให้พร้อมแล้ว เพื่อให้เราฝึกฝนและเข้าใจคอนเซปของ Infrastructure as a Code (IaC) ว่าเราใช้ Terraform ในการ Provision ในส่วนของ Dev และ Production ได้ยังไง มีการตั้งค่า Kubernates, SonarQube, ArgoCD, PostgreSQL และ Cloudflare อย่างไรบ้างจากนั้น แต่ละทีม ก็จะได้ลองเข้าไปยัง ArgoCD เพื่อ provision dev environment ของทีมขึ้นมาก่อนค่ะ จาก Best Practice ที่ว่า “Deploy ให้ได้ก่อน ต่อไปค่อยเขียน Code เพิ่ม”

พอเห็น Pipeline เขียวให้แล้ว เราก็จะมีการติดตั้ง env ในเครื่องและ pre-commit ที่จะเป็น hooks สำหรับตรวจสอบคุณภาพ pre-commit และ pre-push ซึ่งจะทำการตรวจสอบว่า Unit Test และ Integration Test ยังครอบคลุมและรันผ่านอยู่เหมือนเดิมค่ะ ซึ่ง Code ที่ Push ขึ้นไป จะถูกตรวจสอบด้วย CI Pipeline ที่มีการเขียนไว้ใน GitOps Workflow ที่จะมีการ Build and Analyze ทำการ Quality Scan ด้วย SonarQube ก่อนที่จะผ่านไป Build ได้ หลายครั้ง โค้ดเรารันผ่าน แต่ขึ้นไปแดง เพราะว่ามี Test Coverage ที่ต่ำกว่าที่ตั้งไว้ (75%) หรือ Duplicate Code เกินจากที่กำหนด (3%) ซึ่งด้วยความพยายามของทีม เมื่อทำให้ Pipeline ผ่านได้ ก็จะมีการ Build แล้วอัพเดท Tag ทำให้ ArgoCD สามารถมาดึงไป Deploy บน AWS ได้

ถัดมา ก็จะมี PO นามสมมติ เดินมาบอก Business Requirement ให้แก่ทุกคน ว่าสองวันนี้ ด้วยสกิลสุดเทพ เราจะต้อง Implement APIs เพื่อตอบโจทย์ที่ให้มาให้สำเร็จ โดยจะมี Backlogs มาให้ ทีมเราก็จะได้ Design API ด้วยกัน แล้วค่อยจับคู่ Pair Programming เพื่อทำงานให้สำเร็จค่ะ

สารถภาพว่าตอนแรกเห็นชื่ออ่านว่า หงส์จ๊อด เปล่า! มันอ่านว่า โฮ่งจด

รอบนี้ตอนที่เรา Design กันเสร็จ ก่อนที่จะได้ลงมือทำ เราได้มีโอกาสไปฟังไอเดียจากกลุ่มอื่นๆด้วยค่ะ ทำให้ได้ไอเดียใหม่ๆด้วย แต่ละแบบก็มีข้อดีข้อเสียต่างกัน บางอันใช้งานง่าย แต่โอกาสในการเติบโตก็ทำได้ยากกว่า ก่อนจะกลับมาสรุปกับเพื่อนๆค่ะว่าสุดท้ายเราจะ Implement กันอย่างไร ซึ่งกลุ่มเรา ไม่ได้ทำตาม Backlog ที่ได้มาตั้งแต่แรก เพราะมองว่า Design ที่ทางทีมเลือก จะตอบ Needs ของ Business ได้ดีกว่า

พอตกลงกันได้แล้ว กลุ่มเรา 8 คนก็จะแบ่งการทำงานกันว่าใครจะพัฒนา Endpoint เส้นไหน มีเส้นไหนที่ต้องรอรึเปล่า เพื่อเริ่มลงมือทำงานกันแบบ Pair Programming ได้ออกเป็น 4 คู่โดยระหว่างนี้ แต่ละกลุ่มมีพี่ๆ TA ประจำกลุ่มคอยแนะนำตอบข้อสงสัย แถมระหว่างที่ทำงาน ก็มีขนม นม เนย เครื่องดื่ม ชา กาแฟอร่อยๆให้เติมพลังได้เรื่อยๆเลยค่ะ

หลังจากวันแรกผ่านไปอย่างรวดเร็ว จนถึงบ่ายวันที่สอง ที่ทุกคนต่างเร่งรีบสู้กับเดดไลน์ที่กำลังมาถึงจนหมดเวลา พี่ๆก็จะให้เราหยุด พับจอสี่สิบห้าองศา เพื่อมารีวิว ว่าที่ผ่านมาการทำงานของเราเป็นยังไงบ้าง มีอะไรอุปสรรคอะไรเกิดขึ้น เราแก้ปัญหาอย่างไร ได้เรียนรู้อะไรบ้าง สรุปออกมาในกลุ่ม จากนั้น เราจะแบ่งทีมสำหรับพรีเซนท์ผลงาน และทีมสำหรับไปแลกเปลี่ยนกับกลุ่มอื่นๆค่ะ ในจุดนี้เราพบว่ามีบางปัญหาที่เจอกันแทบทุกกลุ่มเลย เช่น Database Migration ที่ยังไม่ค่อยคุ้นชินกัน หรือก็มีบางกลุ่มที่มีวิธีคิดวิธีการทำงานที่ดี ให้เราได้เก็บนำมาปรับปรุง เช่น แนวทางการเขียน Test Case และการจัดการ Output และ Error พอเวียนครบทั้งห้าทีม ได้เทคนิคและไอเดียใหม่ๆแล้ว ในกลุ่มก็จะกลับมาสรุปให้เพื่อนๆฟังกันอีกครั้ง ทั้งจากทีมที่ไปเก็บความรู้จากกลุ่มอื่น และทีมที่ได้รับฟีดแบคและคำแนะนำจากเพื่อนๆที่ฐานค่ะ

ลายมือน้อง ที่ไม่ใช่ลายมือหมอ แต่วอน โปรดให้อภัย

Next Step

สำหรับ Closing Speech นอกจากพี่ๆ Coach และ Instructors ที่มาแนะนำใน Workshop แล้ว ยังได้รับเกียรติจากพี่ๆจาก KBTG ที่มาแบ่งปันประสบการณ์การใช้ Go จากตอนสมัยอยู่ Google และการนำมาประยุกต์ใช้ที่ KBTG ว่าการทำงานของ Software Engineer ที่ต้องคำนึงถึง Scale ในการทำงานขององค์กรขนาดใหญ่ และ Time ที่ต้องการซอฟท์แวร์ ที่สามารถใช้งานได้นาน maintain ได้ง่าย

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

Last but not least

Go ไม่ใช่ภาษา แต่เป็น Software Engineering Practices

เพื่อนที่เขียน Go เหมือนกัน หรือมีคำแนะนำอะไรก็ตาม สามารถแนะนำติชมได้เต็มที่เลยนะคะ ยังมือใหม่อยู่เสมอ หากมีอะไรผิดพลาดก็ขออภัยมา ณ ที่นี้ด้วย ขอบคุณมากค่ะ

ใครที่สนใจกิจกรรมดีๆแบบนี้ ก็ลองดูรายละเอียดเพิ่มเติมและติดตามได้ทางเวบของทาง KBTG Kampus เลยนะคะ เห็นเคยมีจัดทั้ง Java Software Engineer, Cyber Security, Infrastructure Engineer น่าสนใจทั้งนั้นเลย

--

--

Ruchida Pithaksiripan

Software engineer whom passionate in design, development, data & ai. Try to make a lot of money for coffee and wine :D