Journey to become a CTO part 1/3 : เส้นทางสู่โปรแกรมเมอร์เงินเดือนแสนบาท (ในวัย 26 ปี)

Art Thunder
5 min readMay 21, 2022

--

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

https://www.guidesure.in/2020/03/average-salary-of-software-developers-in-2020.html
Tech Stack ที่รู้ตอนเรียนจบ ก่อนเริ่มทำงานประจำ

บริษัทแรก (Full-Stack Developer)

  • SME คนไทย พนักงานประมาณ 20 คน
  • ระบบโรงพยาบาล
  • เข้าออกงานตรงเวลา 9:00–18:00
  • ประเมินผลงานและปรับเงินทุกไตรมาส
  • คอมพิวเตอร์บริษัท
  • New year party
  • ประกันสุขภาพ

เหตุผลในการเลือกบริษัท

หลังจากเรียนจบมหาวิทยาลัยก็ลังเลว่าจบไปแล้วจะทำงานสายไหนดีระหว่าง Network, Data, SAP

ตอนนั้นรู้สึกว่าชอบ Data มากที่สุด เอาข้อมูลมาวิเคราะห์เพื่อหาอะไรบางอย่างแล้วใช้มันสร้างประโยชน์ แต่งานสาย Data พึ่งเริ่มเข้ามาในไทย (2015) หางานตำแหน่งนี้ไม่ได้เลย จึงได้สมัครงาน SAP กับ Developer ไปในเว็บ และ Job fair ที่มีบริษัทมาหางานในมหาวิทยาลัย ของ SAP ไม่โดนเรียกคุยเลยซักที่ ส่วนงาน Developer ผ่านหลายบริษัท แต่แคนดิเดตในใจมี 2 ที่ คือ

  1. IT Management Trainee ของธนาคารใหญ่แห่งหนึ่ง
  2. Full-Stack Developer บริษัท SME แห่งหนึ่ง

การตัดสินใจเลือกบริษัท ณ ตอนนั้น

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

ส่วน SME เดินทางง่ายกว่า พี่ในบริษัทดูเป็นกันเองดี เข้างานออกงานตรงเวลา (9:00–18:00) เลิกละเด้งเลย เทคโนโลยีที่ใช้ใหม่กว่า และ killer feature ของบริษัทนี้คือ ประเมินผลงานทุกไตรมาสและปรับเงินทุกไตรมาส จึงตัดสินใจเลือกที่นี่

ประสบการณ์จากบริษัท

ก่อนเริ่มทำงานที่นี่รู้อะไรเกี่ยวกับเว็บไซต์น้อยมาก ที่เคยทำเว็บไซต์มาตอนเรียนคือ เขียน HTML แล้วเพิ่ม CSS แต่งให้หน้าตาสวยงาม จากนั้นก็เขียน PHP เพิ่มให้มันทำแอคชันต่างๆได้ คือเขียนไฟล์ .php และยัด HTML, PHP ลงไป แยก CSS ออกมาอีกไฟล์แค่นั้น

งานของบริษัทนี้เป็นระบบของโรงพยาบาล Hospital Infomation System (HIS) — มองว่าเป็น ERP สำหรับโรงพยาบาลก็ได้ โดยบริษัทรับ maintain โปรแกรมต่อจาก vendor เก่าของโรงพยาบาล ที่เขาไม่รับดูแลต่อแล้ว (legacy code สุด) สิ่งที่ได้ทำคือแปลง Window App ที่เป็น VB6 ให้เป็นเว็บไซต์ (ใช้ Django)

ในบริษัทนี้มีพี่ที่เก่งมาก 2 คน (พี่นัท, พี่แชมป์) ถ้าไม่ได้เจอพี่สองคนนี้คอยแนะนำ เราอาจจะมาไม่ถึงวันนี้ ช่วงแรกเกี่ยวกับ Restful Architecture การแยก Client กับ Server การจัดการ Architecture และ Code ในส่วนของ Frontend และ Backend เวลาติดปัญหาก็ไปถามพี่เขา พี่เขาก็จะโยน document มาให้อ่าน โดยไม่บอกเฉลย หลังๆก็เลยไม่ถามละ หา document แก้เอง ทำให้ได้สกิลในการแก้ปัญหาเอง แต่เราก็ยังถามเวลาทำของใหม่ๆ ว่าทำไมพี่เขาใช้วิธีนี้ เราเห็นวิธีนี้ก็ได้เหมือนกัน ทำให้ได้ความรู้ในการตัดสินใจเลือกเครื่องมือ

ตอนนั้นวันๆก็แปลงโค้ดไปเรื่อยๆ ตามหน้าที่พี่เขาบอก ผ่านไปเดือนสองเดือนก็ทำได้เร็วพอๆกับพี่ๆที่อยู่มาก่อนละ ทำได้ซัก 3–4 เดือนก็เริ่มเบื่อ พอผ่านไป 6 เดือน บริษัทได้โปรเจ็กใหม่มาพอดี คือจะขึ้นระบบ HIS ใหม่เลย ทำให้รู้สึกตื่นเต้นขึ้นมาอีกครั้ง

ตอนนั้นพี่เขาก็เลือกที่จะสร้าง Frontend Framework ขึ้นมาใช้เอง ส่วน Backend ใช้เป็น Django Rest Framework ที่เลือกสร้าง Frontend Framework เองน่าจะเพราะตอนนั้น React, Vue, Angular มันพึ่งเริ่มต้นจึงมีความเสี่ยงว่าจะมีการ maintain ต่อในอนาคตขนาดไหน และเว็บไซต์ที่จะทำเป็นระบบ HIS ที่มี component ซับซ้อน ที่ framework พวกนั้นยังทำได้ไม่ค่อยดี

Internal Frontend Framework

ใช้เป็นภาษา QML และ compile ออกเป็น HTML อีกที และ component จะ render ออกมาเป็น DOJO Toolkit อีกที

ตัวอย่าง QML

หลังจากสร้าง Framework ออกมาแล้วก็นำมาสร้างเว็บไซต์ และก็เพิ่ม component ใหม่เข้าไปเรื่อยๆ(ถ้ายังไม่มี) และที่บริษัทไม่มี designer ก็ช่วยกันออกแบบกันในทีมเดฟ และก็เทสเองหลังเขียนเสร็จ โดยที่นี่จะมีการใช้ Automated Testing แบบ BDD คือใช้ behave มาครอบ selenium อีกที ส่วนการ deploy จะได้ทำแค่ถึง staging หลังจากนั้นจะเป็นพี่ๆ นำไป deploy ที่โรงพยาบาลต่อเอง

เหตุผลในการออกจากบริษัท

การอยู่ที่นี่ทำให้ได้สกิลตั้งแต่ design -> develop -> test หลังจากนั้นทำต่อจนจบงานในส่วนโมดูลที่ได้รับผิดชอบคือ โมดูลลงทะเบียนผู้ป่วย และโมดูลวินิจฉัยโรค

ตอนทำที่นี่ครบ 1 ปี ก็รู้สึกว่างานไม่ตื่นเต้นแล้ว เวลามีฟีเจอร์ใหม่ก็แค่เรียง Component เป็นหน้า สร้าง CRUD API ประกอบกับที่นี่ใช้ Internal Framework ซึ่งอนาคตถ้าไปที่อื่นไม่ได้ใช้แน่ๆ ช่วงหลังๆทำงานเสร็จก่อนเวลาเยอะก็มีเดินเล่นไปมาหาคนอื่น แต่คนอื่นเขายังทำงานกันอยู่เลย ก็มีไปของานใหม่มาทำเพิ่มฆ่าเวลา พอมองเทียบกับซีเนียร์คิดว่าสกิลเราเท่ากันแล้ว(ยกเว้นพี่สองคนนั้นที่สกิลเรายังสู้ไม่ได้) และเราทำได้ไวกว่าด้วย แต่เรายังได้เป็นจูเนียร์อยู่ เงินน้อยกว่าเยอะจึงตัดสินใจย้ายงาน

Tech Stack หลังจากทำงานบริษัทแรก

บริษัทที่สอง (Backend Developer)

  • Startup ไทย (founder ต่างชาติ) พนักงานประมาณ 150 -> 200 คน
  • ระบบธนาคาร
  • เข้า(ไม่ตรง) ออกงานตรงเวลา 10:00–18:00 แวะพักระหว่างวันได้
  • โน๊ตบุ๊ค Ubuntu เอากลับไปบ้านได้ (แต่ไม่ได้เอากลับ)
  • นวดแผนไทยที่ออฟฟิศ
  • New year party
  • ประกันสุขภาพ

เงินเดือนเพิ่มจากบริษัทแรก 25%

เหตุผลในการเลือกบริษัท

ตอนเลือกบริษัทที่สอง จำไม่ได้ว่าตอนนั้นสมัครไปกี่ที่ แต่เราเลือกไปบริษัทที่ใช้ภาษา Scala ด้วยความที่สนใจสาย Data อยู่แล้ว จึงรู้ว่าสายนี้จะมีภาษาหลักๆอยู่ 3 ตัว คือ Python, R, Scala ซึ่งก็ไม่รู้จะไปฝึก Scala อย่างไร จึงย้ายมาทำที่นี่ซะเลย

บริษัทนี้ค่อนข้าง Flexible กว่าบริษัทแรก เข้างาน 10:00–18:00 เลิกแล้วเด้งเลยเหมือนกัน ระหว่างทำงานสามารถออกไปแวะซื้อขนม เดินเล่นได้

ประสบการณ์จากบริษัท

ที่นี่มีพี่ที่เก่งมาก 1 คน (พี่แต้ง) ถ้าไม่ได้เจอพี่คนนี้คอยแนะนำ เราอาจจะมาไม่ถึงวันนี้ ได้รู้จักกับ Microservice ครั้งแรกที่นี่ ได้เรียนรู้เทคนิคการออกแบบ Microservice และการเขียนโค้ด Functional Programming (FP), CQRS, SSE, SAGA, State Machine

งานของที่นี่เป็นการทำระบบให้ธนาคารที่ต่างประเทศ ช่วงแรกที่เข้ามาเขาก็จะมีสอนภาษา Scala กับการเขียนโปรแกรมแบบ Functional Programming ให้ ตอนนั้นเปิดโลกมาก ช่วงแรกการเขียนแบบ Functional Programming จะยากและขัดใจมาก ต้องพยายามทำให้เป็น Pure Function ลดการมี Side Effect แม้แต่ค่าของตัวแปรก็ห้ามไปเปลี่ยนค่ามัน ห้ามวนลูป ต้องใช้ Strong Type ทุก function ต้องมี signature บลาๆ แต่พอเขียนไปซักพักก็ติดใจและชอบ Functional Programming มาก bug จากการเขียนโปรแกรมพลาดน้อยจนแทบไม่มี เพราะมันเจอตั้งแต่ตอน compile และตัวภาษา Scala พอเขียนแบบ Functional Programming และ performance ตอน scaling ดีมากเพราะมันแตกออกเป็น parallel programming

พอมาอยู่ที่นี่ได้ทำ Backend ทำให้มีมุมมองในการออกแบบ API เปลี่ยนไป จากตอน Full-Stack คือตอนนั้นประสบการณ์น้อยด้วย ทำ API เพื่อ Support Frontend ให้ใช้งานได้ ถ้า Frontend ต้องการอะไรก็เพิ่มเข้าไป แต่พอมาเป็น Pure Backend จะออกแบบ API ที่ค่อนข้าง Generic ต้องสามารถ re-use ได้ และต้องไม่ผูกติดกับ Client ต้องสามารถรองรับ Client ตัวอื่นๆได้ โดยไม่ต้องแก้ API ใหม่

งานของทีนี่ช่วงแรกได้ทำระบบ Social Login เพื่อไป KYC ก็ได้ลองเล่นพวก Facebook API, Google API จากนั้นก็ได้ไปขึ้นโปรเจ็กใหม่เป็นระบบ Contact Center สำหรับให้พนักงานธนาคารใช้ในการคุยกับลูกค้า มีระบบในการจัดคิว คะแนนรีวิว SLA ก็ได้เรียนรู้เพิ่มหลายอย่าง ตอนไปขอใช้ Database Server ทีมหลีดบอกให้ใช้เครื่องตัวเอง ตอนนั้นก็งง แล้วก็ได้รู้ว่าสามารถรัน Database ในเครื่องตัวเองได้ ก็ได้หาวิธีใช้ Docker ตอนที่เดฟเสร็จก็ต้อง set infra และ deploy เอง ทำให้ได้เรียนรู้พวก API Gateway, CI/CD, Monitoring, Message Queue, NoSQL ได้เข้าไปใช้ AWS นิดหน่อยตอนจะขึ้น Staging แต่ส่วนใหญ่ทีม DevOps เป็นคนจัดการ

นอกจากนั้นทีนี่ทำงานเป็น Scrum และทีมเราต้อง self-manage กันเอง เช่น การ planning backlog card เนื่องจากทีมหลีดไม่วาง จะมีเข้ามาฟังตอน planning บ้าง และตอน review กับทาง BA, PM (ซึ่งตอนนั้นที่นี่ยังเป็น Scrum ประมาณ 80%) ทำให้ได้สกิลในการจัดการทีมเพิ่มติดตัวมาด้วย

ระหว่างทำงานที่นี่ก็แวะไปคุยกับทีมอื่นบ่อยๆ ทั้ง DevOps, Business Analyst, UX/UI เพื่อเรียนรู้งานของเขา และสิ่งที่เขาทำ

เหตุผลในการออกจากบริษัท

การอยู่ที่นี่ทำให้ได้สกิลตั้งแต่ design architecture -> setup infra -> develop -> test -> deploy -> monitoring และการจัดการงานของทีมตัวเองในรูปแบบ Scrum

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

(หลังจากย้ายงานไปสักพัก บริษัทนี้ก็ล้มละลาย พนักงานที่ออกไม่ทันก็ฟ้องร้องเงินกับบริษัทกันไป)

Tech Stack หลังจากทำงานบริษัทที่สอง

บริษัทที่สาม (Software Engineer)

  • Startup ไทย (co-founder ไทย) พนักงานประมาณ 50 -> 70 คน
  • ระบบ marketplace (ประมาณนั้น)
  • เข้า(ไม่ตรง) ออกงานตรงเวลา 10:00–18:00 แวะพักระหว่างวันได้
  • Macbook เอากลับไปบ้านได้ (แต่ไม่ได้เอากลับ)
  • Monthly Performance Bonus
  • Monthly Team Bonus
  • Yearly Company Bonus
  • Friday Lunch Buffet
  • Monthly Team Dinner
  • Yearly Outing
  • New year party
  • Project / Special Event Party (ปิดผับเลี้ยงบ่อยมาก)
  • Snack bar
  • เค้กวันเกิด (เกิดกันบ่อย กินกันจนอ้วน ฮ่าๆ)
  • ค่าวินมอเตอร์ไซค์เข้าออกซอย
  • ประกันสุขภาพ

เงินเดือนเพิ่มจากบริษัทที่สอง 65%

เหตุผลในการเลือกบริษัท

ตอนเลือกบริษัทที่สาม มีสมัครธนาคารใหญ่ไปอีกที่ซึ่งเดินทางค่อนข้างไกล(สมัครเผื่อไว้เฉยๆ) กับบริษัทที่สามนี้ที่ตั้งใจมาที่นี่อยู่แล้ว ด้วยวัฒนธรรมองค์กรที่เป็น Startup จ๋า(รู้จากไลฟ์สไตล์ของเพื่อนที่ทำงานที่นี่) และบริษัทมีสาขาอยู่ที่ต่างประเทศด้วย เป็นผู้นำของตลาดที่ทำธุรกิจอยู่ มีใช้ภาษา GoLang ที่กระแสจะมาแน่ๆ

บริษัทนี้ค่อนข้าง Flexible กว่าบริษัทที่สอง เข้างาน 10:00–18:00 เลิกแล้วเด้งเลยเหมือนกัน ระหว่างทำงานสามารถออกไปแวะซื้อขนม เดินเล่นได้

ประสบการณ์จากบริษัท

ที่นี่มีพี่ที่เก่งมาก 1 คน (พี่ไบโอ) พี่เขาเก่ง Frontend มาก ทำ CSS Framework ใช้เอง เป็นรูปแบบ Atomic เราไม่ค่อยได้ทำงานกับพี่เขาเท่าไร แต่หลายของ Frontend ก็ได้พี่เขาอธิบาย พวก Webpack, Shadow DOM, Web Component

ขายของให้พี่เขาหน่อย

ที่นี่ได้จับเครื่องมือหลากหลาย เน้นใช้ third-party ต่างๆ เพื่อให้พัฒนาได้เร็ว สัปดาห์แรกมาถึงได้จับทั้ง React, Vue, Angular งงไปดิ ย้ายมาจาก Backend Developer ที่นี่ใช้ครบทั้ง 3 ตัวเลย

  • Vue เป็นเว็บหลักที่ให้คนทั่วไปเข้ามาใช้งาน
  • ReactNative เป็นแอปมือถือ
  • Angular เป็นเว็บสำหรับแอดมินใช้ช่วยเหลือลูกค้า

ส่วนของ Backend ที่นี่ใช้ Golang บน gRPC ได้รู้จักพวก Protobuf

ช่วงหลังมีการพัฒนาระบบแชทใหม่ หน้าบ้านใช้เป็น React ส่วนหลังบ้านมีเอา third-party มาใช้เพราะต้องขึ้นระบบให้เร็ว และก็ได้ทำในส่วน migrate ข้อมูล ตอนนั้นได้จับงานข้อมูลที่มีจำนวนเยอะๆ ของจริงครั้งแรก ก็ต้องหาวิธี optimize เอง ไม่งั้นรันนานมาก นอกจากนี้ก็ได้ออกแบบและทำ A/B Testing ขึ้นมาใช้เอง เพื่อจะเทสว่าแบบไหนดีกว่าในการทำ Product Recommender

บรรยากาศการทำงานที่นี่สนุกมาก ในทีมเป็นเพื่อนที่เรียนมาด้วยกันเกินครึ่ง การจัดการงานเป็น Scrum ผลัดกันหลีด Sprint และมีตรงไหนไม่ดีก็คุยกันปรับกัน จนช่วงท้ายๆเรียกว่าเป็น Scrum 90% ได้ การประสานงานกับแผนกอื่นก็ง่ายมาก มีอะไรเดินไปนั่งข้างๆ ทำไปพร้อมกันและเอาให้ดูเลย

ระหว่างทำงานที่นี่ก็แวะไปคุยกับทีมอื่นบ่อยๆ ทั้ง HR, Business Development, Marketing, Project Manager, SEO, UX/UI, Customer Support เพื่อเรียนรู้งานของเขา และสิ่งที่เขาทำ

เหตุผลในการออกจากบริษัท

การอยู่ที่นี่ทำให้ได้สกิล Frontend กลับมาอีกครั้งและลึกกว่าเดิม และได้ใช้ third-party ต่างๆ ได้ออกแบบระบบต่างๆเอง พอช่วงท้ายก็เริ่มเบื่องานเพราะตัวงานใช้เทคนิคเดิมๆ ไม่ค่อยได้เรียนรู้อะไรใหม่แล้ว งานส่วนใหญ่เป็นการ maintenance มีการทำฟีเจอร์เสริมนิดหน่อย และเห็นประกาศรับสมัครปริญญาโทสถิติ Data Science พอดี ก็กดสมัครเลย และนัดสอบในเวลาไม่ถึงเดือนมั้ง ก็ลองดู เพราะคิดว่าถ้าทำงานไปนานกว่านี้คงไม่อยากเรียนต่อละ ก่อนสอบก็เอาหนังสือคณิตศาสตร์ ตอน ม.ปลาย มาอ่านคร่าวๆ ปรากฏว่าสอบติดเฉย ข้อสอบง่ายพอๆกับข้อสอบ O-Net มีเซ็ต ตรรกศาสตร์ ฟังก์ชัน ความน่าจะเป็น สถิติ แต่ก็เห็นคนสอบไม่ผ่านกันเกินครึ่งนะ

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

(หลังจากย้ายงานไปสักพัก บริษัทนี้ก็มีการเลย์ออฟคนเนื่องจากทำรายได้ไม่ถึงเป้า จึงไม่ได้รับเงินทุนเพิ่ม จริงๆถ้ารู้ก่อนอาจจะไม่รีบลาออก เผื่อโดนเลย์ออฟและได้เงินชดเชยฟรี ฮ่าๆ)

Tech Stack หลังจากทำงานบริษัทที่สาม

บริษัทที่สี่ (Software Engineer)

เงินเดือนเพิ่มจากบริษัทที่สาม 55%

และเงินเดือนก็ถึงหกหลักทีนี่

อ่านต่อที่ Part 2

Journey to become a CTO part 2/3 : เส้นทางสู่ผู้จัดการแผนกเงินเดือนเกินแสน (ในวัย 27 ปี)

สรุป

  • เลือกบริษัทที่จะได้ฝึกสกิลที่ตัวเองต้องการ
  • พยายามทำงานกับคนเก่ง และเรียนรู้เทคนิคจากเขา
  • ดูว่าคนที่เก่งกว่าเรา เป็นหัวหน้าเราเขามีสกิลอะไร เรายังขาดอะไร
  • ถามเพื่อเข้าใจเหตุผล และวิธีการคิด ไม่ใช่เอาแค่ solution
  • ทำงานที่อยู่นอกสโคปของตัวเองด้วยเพื่อเพิ่มสกิลใหม่ๆ
  • หาความรู้เพิ่มเติมนอกเวลางานด้วย จะทำให้ยิ่งเก่งได้เร็วขึ้น
  • ทำความรู้จักกับสายงานอื่นๆ ที่เกี่ยวข้อง ถ้ามีโอกาสก็ของเขาลองช่วยทำ
  • ย้ายบริษัทเมื่อรู้สึกว่าทำต่อไปก็ไม่เก่งขึ้นกว่านี้แล้ว
  • เรียกค่าตอบแทนที่เหมาะสมกับสกิลตัวเอง อาจจะลองเปรียบเทียบสกิลกับ next level ในบริษัทตัวเองว่าสกิลเราเท่าเขาหรือเปล่า และ level นั้นได้เรทเงินที่เท่าไร ถ้าเราเก่งเท่าเขาก็ควรได้เรทนั้น
  • ถ้าจะย้ายงานเพิ่มเรียกเงินเดือน ต้องมั่นใจว่าสกิลของเรามีมูลค่าเท่าราคานั้นจริง ยิ่งเรียกค่าตัวสูง บริษัทยิ่งคาดหวังผลงานของเราสูง หากไม่สามารถทำได้จริง ก็อาจจะไม่ผ่านโปร และต้องตอบตัวเองให้ได้ ว่าทำไมบริษัทจะต้องจ้างตัวเราที่ค่าตัวสูงกว่าคนอื่น

หากต้องการทราบเหตุการณ์ช่วงวัยเรียนก่อนจะเริ่มทำงานสามารถอ่านได้ที่

--

--