ชีวิตเขียนโค้ด ปี 3 + ปิดเทอม

Napat Limsirorat
Napat Limsirorat
November 9, 2022

หยุดโควิดมันว่าง เลยอยากลองมาเขียนสรุปว่าผ่านมาทั้งปีรู้อะไรเพิ่มมั่ง

ตั้งแต่เปิดเทอมที่คิดว่าจะได้ใช้ชีวิตปี 3 กับการเรียนหมอแบบ 200% ผลสุดท้ายคือได้เขียนเว็บทั้งปี

เรื่องมันเริ่มมาจากที่เราเขียนเว็บให้ค่ายหมอของคณะตั้งแต่ตอนปีสอง เราจึงถูกเชิญให้มาทำต่ออีกปี ก็ถือเป็นโอกาสดีที่ได้แก้ไขโค้ดตัวเองให้เรียบร้อย (หลังจากเขียนชุ่ยๆ ให้จบๆ ไปตอนนั้น เพราะคิดว่าจะไม่ได้ทำต่อแล้ว 🤣) ก่อนจะส่งต่อให้รุ่นน้องทำในปีต่อๆ ไป (ไม่แน่ใจว่าปีนี้จะได้จัดป่าว) ซึ่งก็มีเรื่องตื่นเต้นหลายอย่างอยู่ ถ้าว่างจะมาเขียนเล่าเพิ่มเติม

ตอนนั้นใช้ stack ง่ายๆ เลย มีแค่ Nodejs, Express, Google Cloud: [App Engine, Firestore (ปีแรกใช้ Datastore แต่เห็นว่าตัวใหม่ออกเลยพึ่งมาเปลี่ยน), Google Analytics, Google API: [Sheet API]], simple frontend: [html, js: jquery, css: Bootstrap, sass ด้วยนิดนึง compile ผ่าน webpack] ถ้าอยากรู้เพิ่มเติมไปดูโค้ดได้เลย -> https://github.com/si-computer-club/simc-web

มีทีมช่วยกันทำกันกี่คนหรอ? หึ full stack จ้า โซโล่ทำคนเดียวเกือบหมดเลย ยังดีมีเพื่อนมาช่วยทำตอนท้ายนิดนึง

หลังจากนั้นก็มีอีกงานติดๆ กันที่ต้องเขียนเว็บเพื่อรับสมัคร เป็นงานแข่งขันวิชาการของคณะโดยจะเชิญต่างประเทศมาด้วย งานมีแพลนว่าจะจัดในช่วงเดือนมีนาปีนี้ (สุดท้ายถูกยกเลิกไปด้วยโควิด 😢) เนื่องจากตอนนั้นเรากำลังทำเว็บค่ายพอดี จึงได้มีโอกาสทำสองงานควบกันเลย ซึ่งทั้งสองงานที่แม้จะดูแลโดยคนละกลุ่มเลยแต่จะมีข้อตกลงร่วมกันเหมือนกันอยู่ข้อนึงคือ ออฟงานทั้งหมด 2 วีคก่อนสอบ ซึ่งมันเลยทำให้หลังสอบกลายเป็นงานเราคูณสองเทียบกับปีแรกที่ทำงานเดียว

สำหรับงานนี้เนื่องจากมีรุ่นพี่เขียนเว็บนี้มาก่อนแล้ว เราแค่รับมาทำต่อเฉยๆ เลยไม่ได้ยุ่งอะไรกับ frontend เลย แก้แค่พวก backend เฉยๆ stack ที่ใช้ก็คล้ายๆ งานแรกเลย มีแค่เพิ่ม sync ข้อมูลใน db กับ Google Sheet เพื่อความสะดวกของฝ่ายทะเบียนไม่ต้องมานั่งกรอกข้อมูลทีละคนๆ

จบช่วงรับสมัครไปก็เป็นช่วงงานจริง งานค่ายจัดในช่วงปลายปีที่ผ่านมา ซึ่งเราก็มีหน้าที่ทำเว็บรายงานคะแนนน้องๆ ตามกลุ่ม (เปิดในมือถือกับในคอมจะออกมาเป็นคนละหน้า (ใช้วิธีแบ่งตามขนาดจอ)) ซึ่งงานก็หนักและ deadline ก็เป็นสิ่งที่สำคัญพอสมควร จำได้ว่าพีคที่สุดคือหน้าสุดท้ายได้เริ่มเขียนวันพฤหัสกลางคืน ต้องใช้วันเสาร์ตอน 9.00 เขียนเสร็จตอนวันเสาร์ประมาณตีสี่กว่าๆ

รูปตัวอย่างหน้าดูคะแนนแบบดูในคอม (ขอบคุณ art สวยๆ จากน้องฝ่าย PR ด้วยครับ)

หลังจากนั้นในช่วงต้นปีนี้ (ที่ยังไม่ค่อยมีข่าวโรคระบาด) เราเริ่มทำระบบแข่งขันแบบ real-time กล่าวคือระหว่างที่ผู้แข่งกำลังเขียนคำตอบ (โจทย์เป็นข้อเขียน) คนดูจะได้เห็นทันทีว่าใครตอบก่อน-หลัง ตอบว่าอะไร ซึ่งมีโค้ดจากรุ่นพี่ส่งต่อๆ กันมาอยู่บ้าง (ส่งมาทาง Google Drive 🙈) แต่เป็นลักษณะที่แก้ไม่ง่ายนัก เชื่อว่าเกิดจากการทำงานสู้ deadline กันมาหลายต่อหลายครั้งจนโค้ดมี technical debt พอสมควร

ตอนแรกคิดจะเขียนใหม่ทั้งหมดเลย แต่ใช้ก้อปโค้ดบางส่วนเท่าที่ได้ และคิดว่าจะใช้ stack ดีๆ ทับลงไปเลย จะได้ใช้ต่อได้ยาวๆ เริ่มจาก frontend คิดว่าจะต้องมี framework จริงจังซักตัว สุดท้ายใจไปที่ React เพราะเห็นว่ามี React Native เผื่อวันหลังอยากเขียนแอพมือถือจะได้ง่ายๆ

สุดท้ายจบที่โควิด เลยยังไม่ได้ทำต่อให้เสร็จ กำลังลังเลอยู่เหมือนกันว่าจะทำต่อให้เสร็จแล้วส่งต่อให้น้องๆ มาทำต่อหรือทิ้งไปเลยดี เพราะปีหน้าก็น่าจะไม่ได้ทำงานนี้แล้ว

อยู่มาวันหนึ่งก็มีคนชวนเราไปทำโปรเจกอีกอัน เป็น LINE Chatbot ของภาควิชาสูติ-นรีเวช ที่มีจุดประสงค์ใช้สอบถามข้อมูลประจำวันของผู้ป่วยกลุ่มที่เราติดตาม เพื่อใช้ประกอบการประเมินโรค ซึ่ง features หลักที่ต้องการตอนนี้คือให้สามารถป้อนข้อมูลส่วนตัว (วันเกิด) ได้ และให้ bot ทักแชททุกวันเพื่อถามประวัติประจำเดือน (เนื่องจากผู้ป่วยมักลืมรอบเดือนของตน และมี compliance ต่อเรื่องแนวนี้ไม่มาก)

งานที่ผ่านมาเราทำเองคนเดียวเกือบหมดเลย แต่งานนี้เห็นว่ามีหลายคนช่วยกันทำ เลยหลวมตัวไปช่วยเค้าด้วย เราเลยกลายเป็นคนหลักที่ออกแบบและทำ backend แทนเองเลย 😂 แต่คราวนี้มีคนช่วยทำ frontend ให้แล้วงานเลยน้อยหน่อย รอบนี้ก็ไม่ได้ใช้อะไรหวือหวา เพียงแต่ก่อนเราเข้าไปทำเค้ามีทำกันไปบ้างแล้วซึ่งใช้ Dialogflow มาช่วยจับ pattern แชทของผู้ใช้ พอเราเข้าไปทำก็เลยยึดอำนาจ ยัด GCP เข้าไปซะเลย ให้เราทำดีนัก 😏 ใครสนใจอยากช่วยหรือมีข้อแนะนำก็แวะไปดูโค้ดกันได้ครับ -> https://github.com/si-computer-club/signb-project

หลังจากประกาศหยุดเรียนก็เหมือนปิดเทอมที่ยังไม่ปิด (เพราะยังสอบไม่หมดทุกตัว) ก็มานั่งทำงานนี้ต่อกะว่าจะให้เสร็จ แล้วก็ได้บังเอิญอ่านเรื่อง concept ของ monorepo ผ่าน blog ของ Nx เลยมาลองใช้ดู กลายเป็นว่าได้เปิดโลกของ DevOps เลย โอ้โหมันมี tool อะไรเยอะแยะไม่รู้ไปหมด ตั้งแต่ Eslint, Prittier, Babel, Typescript (พึ่งได้มาลองใช้ก็ตอนนี้แหละ), Jest, Cypress, Netlify, CI/CD และอื่นๆ อีกร้อยแปดพันเก้า และก็ได้มาลองอ่านเรื่อง Git แบบจริงจัง เหตุผลนึงเพราะก่อนหน้านี้เราทำงานคนเดียวมาตลอด เลยพึ่งรู้จักว่า VCS ดีกับการทำงานเป็นทีมยังไง ส่วนเรื่อง container พวก Docker, Kubernetes ไรงี้ยังไม่ได้ลองจริงจังเลย เพราะ App Engine ที่เป็น free tier (Standard Env) ยังไม่รองรับ

จำนวน Commit ที่ผ่านมา สังเกตุได้ว่าตั้งแต่ช่วงมีนาหลังหยุดโควิดก็หนาขึ้นอย่างเห็นได้ชัด และถ้าสังเกตุอีกจะพบว่าเว้นไปช่วงนึงตอนกลางๆ May

ตอนนั้นเห็นว่าคณะเค้าหารือกันว่าจะสอบช่วงไหน ได้ผลมาเป็นช่วงเดือนสิงหาคม ก็เลยคิดว่าสบายละ ได้เล่นเกมยาวๆ กด Dota plus ไปเล่นได้สองสามวันก็มีประกาศมาว่า “มีการจัดสอบออนไลน์ในวันที่ 13–15 พฤษภาคม” ซึ่งประกาศตอน 30 เมษา ถึงกับไปไม่เป็นเลยทีเดียว แต่ก็เท่ากับว่าเวลาหลังสอบก็จะเหลืออีกเพียง 3 สัปดาห์ก่อนเปิดเทอม

“…มันมีเวลาให้เตรียมตัว แล้วเอาเข้าจริง เค้าสอบเมื่อไหร่ก็ได้นะครับ เพราะมันสิ้นสุดการเรียนการสอนแล้ว”

กลัวแล้วครับ 14 วันกับการอีเลคมาราธอน 30 กว่าชั่วโมง แต่ก็ผ่านไปได้

หลังสอบเสร็จก็กลับมา explore เรื่องอะไรไม่รู้ของเราต่อ และก็คิดอยากจะทำแอพเล่นๆ อันนึง เป็นแนวๆ todo แต่มี feature เพิ่มมาคือให้มีแจ้งเตือนทุกๆ วัน เกี่ยวกับเรื่องอะไรก็ได้ที่เราสนใจ หรือเป็น collection แล้วให้สุ่มๆ มาก็ได้ ไหนๆ ก็ทำเล่นๆ เลยจะลองใช้ tool ทั้งหมดที่ไม่เคยใช้มาก่อน เลยได้มีโอกาสลอง Koa, Yarn Workspace(berry), Netlify build tool (แต่สุดท้ายก็ไม่สำเร็จ ลืมไปว่าแอพเราก็ต้องมี backend เหมือนกัน เลยกลับไปซบ GCP ), React Native

แล้วก็เห็นเพื่อนๆ มีแนะนำคอร์สเรียนฟรีใน Coursera กัน ก็เลยเริ่มสนใจว่าอาจจะลองเรียนเรื่องอะไรสนุกๆ ซักหน่อย ใครมีของดีก็มาป้ายยากันได้ครับ

ยังไม่ทันไรพรุ่งนี้ก็จะเปิดเทอมซะแล้ว หวังว่าที่เรานั่งอ่านๆ ทำๆ มาคงมีประโยชน์บ้างในอนาคตแหละ ต่อให้ framework พวกนี้มันเปลี่ยนไปเรื่อยๆ ตามปี แต่อย่างน้อยเราก็พอมีประสบการณ์ จะได้เข้าใจว่าปัญหาที่เจอตอนนี้คืออะไร แล้วในอนาคตเค้าจะแก้กันยังไง สุดท้ายเราคงต้องเรียนรู้กันตลอดชีวิตแหละครับ

198698_517793794899786_2013913423_n.webp
By Napat Limsirorat
November 9, 2022

© Jew • 2022

FacebookGithub