June 10, 2018

เปรียบเทียบประสบการณ์ฝึกงานที่ google กับ huawei

(ไม่ว่าจะทำงานที่ไหนก็ตาม ถ้ามารัฐ california ต้องกินเบอร์เกอร์ in-n-out)



ใน 3 ปีที่ผ่านมา เราได้มีโอกาสไปฝึกงาน software engineer
ที่ google สาขาใหญ่ใน silicon valley ปีละครั้ง
แต่ละครั้งก็ประมาณ 3 เดือน รวมกันได้ 9 เดือนละ

ส่วนในปีที่ผ่านมา เราได้มีโอกาสไปฝึกงาน research ที่ huawei
สาขาใน silicon valley
ตอนนี้ก็รวมกันเป็นเวลา 9 เดือนแล้ว

มีน้องนักเขียนคนนึง ชื่อสมมติว่า น้องพีท
มีเพจสมมติชื่อว่า เก่งอังกฤษชีวิตเปลี่ยน
(ไป like ซะนะ ท่านผู้อ่าน ของดีทั้งนั้น)

แนะนำว่า

ไหนๆก็ทำงานสองที่ใหญ่ๆใน silicon valley
ทั้งวัฒนธรรมตะวันออกและตะวันตก
ในฐานะเด็กฝึกงานคล้ายๆกัน
เป็นเวลาเท่าๆกัน

เขียนเปรียบเทียบประสบการณ์น่าจะน่าสนใจเนอะ



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

เพื่อความกระชับ เราจะใช้ศัพท์ programmer บ้าง
(คาดว่าคนที่เข้ามาอ่านน่าจะเป็น programmer ส่วนนึง)
แต่จะพยายามไม่ให้มันเยอะ หรือน่ารำคาญเกินไป สำหรับผู้อ่านที่ไม่แคร์เรื่อง IT เท่าไร


Google




ประสบการณ์ Google ซัมเมอร์แรก (3 เดือน)


(อ่านประสบการณ์สัมภาษณ์ที่นี่ และ ประสบการณ์ฝึกงานละเอียดได้ที่นี่)

อยู่อเมริกามานาน ทำงานไป 2-3 ที่แล้ว
แต่อันนี้เป็นครั้งแรกเลย ที่จะได้ทำงานบริษัทใหญ่ใน silicon valley

โปรเจคที่ทำเกี่ยวกับ continuous integration

ถ้าเกิด software ของ google ใช้เวลา 1 ชั่วโมงในการ compile และ run test
ซึ่งทำให้สามารถ compile และ run test ได้ชั่วโมงละครั้ง (แทนที่จะทำทุก commit แบบ CI ทั่วไป)

ทำยังไงถึงจะรู้ได้เร็วที่สุดว่า commit ของใคร break build 

หัวหน้า: คณลุงฝรั่ง software engineer รุ่นใหญ่ เก๋าเกมส์ expert java
โค้ดโคตรสวย design สวย แต่หาตัวยาก
ใช้เวลารีวิวโค้ดนาน แต่เวลารีวิวที ได้เรียนรู้ design ดีๆเยอะ 

รองหัวหน้า: พี่แขก ช่วยรีวิวโค้ดให้นิดหน่อย ไม่ได้ทำงานด้วยกันเท่าไร

ผลงานตอนจบ

ส่งงานได้ใช้ทันการพอดี
มี commit อันนึง break build แล้วโค้ดของเราจับได้
ตอน present เลยออกมาดูดี


Google ซัมเมอร์ที่สอง (3 เดือน) 


 (อ่านรายละเอียดได้ที่นี่)

โปรเจคที่ทำเกี่ยบกับ database query engine ภายในของ google

ภาษา query มีความซับซ้อนกว่า sql ทั่วไป
ระบบยังค่อนข้างใหม่อยู่
ถ้ามี error คือ ต้องลอง run query และส่ง request ให้ server ต่างๆนั้นถึงจะรู้ว่ามี error

ทำยังไงถึงจะรู้ว่า query มีปัญหาได้ โดยไม่ต้อง run query

หัวหน้า: เจ๊อินเดีย software engineer กำลังอยู่ในช่วงเลื่อนขั้นเลยขยัน
วิธีทำงานชอบให้ส่งงานทีละชิ้นใหญ่ๆ (ไม่หั่นงานให้เล็ก)
อยมาช่วยเหลือถามทุกข์สุข ติดตรงไหนไหม ฯลฯ ทุกวัน
หาตัวง่าย รีวิวโค้ดค่อนข้างเร็ว 

รองหัวหน้า: พี่ฝรั่ง ชอบวิ่งมาราธอน
เป็น senior software engineer
พูดน้อย แต่ให้ feedback ดีและเยอะเวลาทำโค้ดรีวิว

ผลงานตอนจบ

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


Google ซัมเมอร์ที่สาม (3 เดือน)


โปรเจคที่ทำเกี่ยวกับ service ตัวนึงใน google

Request ที่เข้ามาแต่ละอัน ใช้เวลาประมวลผลนาน (หลายวินาที-เป็นนาที)
แต่พฤติกรรมของผู้ใช้ค่อนข้างจะคาดเดาได้ (เช่นตื่นมาเปิดพยากรณ์อากาศทุกวัน)

ทำยังไงถึงจะเดา request ของ user มา cache ไว้ล่วงหน้าก่อนที่ user จะ request ได้

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

รองหัวหน้า: พี่จีน senior software engineer ได้ทำงานด้วยกันนิดหน่อย ไม่มีอะไรพิเศษมาก
แต่ได้กินไอติมฟรีด้วยกันทีนึง

ผลงานตอนจบ

ทำไม่ได้ตามที่หวังไว้เท่าไร
เพราะโปรเจคถือว่าค่อนข้างจะฝันไกลเกินตัวไปหน่อย

ขนาดหัวหน้าก็ยังไม่ชัวร์เลยว่าทำยังไงผลลัพธ์ถึงจะออกมาดี
แต่เอาตัวรอดมาได้เพราะเพิ่ม cache hit rate ได้นิดหน่อย
และวิเคราะห์ข้อมูลออกมาให้ทีมว่า
ถ้าจะให้ hit rate สูงกว่านี้จะต้องแก้ตรงไหนบ้าง

ปรากฏว่ารอบนี้ เหมือนแบบผลลัพธ์และ impact แย่สุด
แต่รู้สึกว่าเข้ากับหัวหน้าได้ที่สุด
และได้ evaluation ปากเปล่าที่โคตรดีเทียบกับครั้งก่อนๆ


Huawei

(ลืมถ่ายรูปตึก แต่มีรูปของที่ให้พนักงานใหม่)


Huawei เดือน 0-4


โปรเจคที่ได้คือช่วยเขียน compiler ตัวนึง ที่เฉพาะทางด้านการคูณ matrix 

(สวยปะ เราวาดเอง รูป tensor)

หัวหน้า: เด็กจบเอกจากมหาลัยที่เราเรียนอยู่
มีความเป็นหุ่นยนต์ ไม่แสดงอารมณ์มาก
แต่เก่งเลยแหละ

เขียนภาษา haskell เป็นหลัก เราเลยได้เรียน functional programming ของแท้ๆก็ตอนนี้

ผลงาน

ได้ publish paper อันนึง (second author)
ได้ความรู้ค่อนข้างเยอะ 

แตตตตตต่

ช่วงนี้เริ่มมีอาการความเครียดขึ้นมา
บางทีผลลัพธ์ของโปรเจคไม่ค่อยน่าพอใจเลยรู้สึกกดดัน

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

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


Huawei เดือน 4-5


โปรเจคที่ทำตอนนี้ค่อนข้างคลุมเครือ
เหมือนทั้งทีมพยายามลองไอเดียวิจัยใหม่ๆอยู่
ยังไม่มีทิศทางชัดเจน

สิ่งที่เราทำ คือ เขียน python script อ่าน input
และส่งสิ่งที่อ่านได้ ไปให้ component อื่นๆ

ซึ่งเป็นงานที่ไม่ได้มีความตื่นเต้นอะไรเลย

หัวหน้า: director แลบ คนจีน
เวลาทำงานลงรายละเอียดค่อนข้างเยอะ
มีอะไรอยากได้ก็จะบอกเดี๋ยวนั้น
เป็นนักวิทยาศาสตร์จ๋า เชี่ยวชาญเรื่อง compiler เก่งในเรื่องสร้างผลงานวิจัย
ในฐานะหัวหน้าก็ manage ทีมแบบตะวันออก
(คำสั่งมาจากเบื้องบน และถ้าทุกคนทำตามได้อย่างมีประสิทธิภาพ งานจะออกมาเร็ว และถูกใจเจ้านาย)
และไม่เชี่ยวชาญเรื่องการเขียนโปรแกรม

สภาวะหลังเวลาผ่านไป

อาการเครียดกลับมาแบบเร็วมาก
เพราะ ไม่เข้าใจว่า ไอ้การทำแบบนี้มันจะช่วยให้จบ เอก ได้ยังไง
(เกริ่นนิดนึง ตอนแรกที่มาทำงานที่นี่เพราะอยากทำงานวิจัยที่จะได้จบเอกเร็วขึ้น)

แถมมีความกดดันเพิ่มขึ้นมาอีก 

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

แต่ก็สรุป ทนไม่ไหว

ตั้งใจจะลาออกนะ แต่ก็ยังเกรงใจอาจารย์ที่ปรึกษา
ไม่อยากทำอะไรโดยไม่ปรึกษาก่อน

ก็โทรไปคุยกับอาจารย์ที่ปรึกษา
จากนั้นก็คุยกับหัวหน้าอย่างเปิดใจ

พอคุยกันจริงๆ หัวหน้าก็เห็นใจและพยายามแก้ปัญหา

หลังจากคุยกันแล้ว
หัวหน้าก็พยายามเลือกอะไรที่เกี่ยวกับงานวิจัยให้เราได้ทำมากขึ้น

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



Huawei เดือน 5-9


โปรเจค คือ ออกแบบ programming language และสร้าง compiler
เพื่อตอบโจทย์พนักงานที่เขียน algorithm ภายใน huawei

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

มีแค่ความเหนื่อยกายและปวดกล้ามเนื้อคอไหล่ข้อมือ
จาก deadline ที่กระชั้นและการทำงานหนักติดต่อกันนานๆ

(ถ้าไม่มี keyboard นี้ คงได้ไปหาหมอแน่)

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

ตอนนี้ก็ยังทำงานอยู่ และคงทำงานต่อไปอีกซักพัก
ถ้ามีอะไรน่าสนใจคงเอามาแชร์อีก


เปรียบเทียบประสบการณ์




ก่อนอื่นอยากจะบอกว่า
นี่เป็นประสบการณ์ส่วนตัว
กับทีมๆที่เฉพาะ
กับโปรเจคที่เฉพาะ 

ไม่อยากให้คนอ่านตีความหรือสรุปแค่ว่า “huawei ดีกว่า google”
หรือ “การทำงานแบบจีนแย่กว่าแบบฝรั่ง”

บางอย่างนี่น่าจะชัดเลยว่าไม่เกี่ยวกับ
จีน vs ฝรั่ง
google vs huawei

แต่เกี่ยวกับทำเล ทีมและโปรเจคที่ทำอยู่ล้วนๆ 

อยากให้อ่านแล้ว เอาไปคิดประมาณว่า 
หลังจากอ่านประสบการณ์พวกนี้ มันมีอะไรบ้างที่คล้ายกับประสบการณ์ของเรา
และจะเอาอะไรไปใช้ได้บ้าง”


การสั่งงานและอัพเดท status


มีบทความนึงเคยอ่าน

ลองเอาไปอ่านดูนะ

สรุปคือ การทำงานแบบเอเชียกับแบบตะวันตกมันต่างกัน

แบบเอเชียเน้นเจ้านายสั่งลูกน้อง
แบบตะวันตกให้อิสระในความคิดเยอะ 

มันไม่มีอะไรถูก แค่ต้องใช้ให้เหมาะกับทีม
เพราะการบริหารงานแต่ละแบบมันดีกว่าอีกแบบนึงในคนละสถานการณ์

ที่ google รู้สึกค่อนข้าง free style เลยแหละ
เจ้านายให้โปรเจคมาแล้วก็บอกทิศทางคร่าวๆ
ปล่อยเราไปทำงาน
แล้วติดอะไร นานๆทีก็จะถามไป 

ที่ huawei เราไม่เคยติดอะไรแล้วถามหัวหน้า
เพราะว่า หัวหน้าถามมาก่อนตลอดว่าถึงไหนแล้ว
หลังจากนี้มีอะไรทำอีกไหม
มีอะไรที่คนอื่นในทีมรอเราอยู่ไหม 

ซึ่งบุคลิกของเรา ชอบแบบ google มากกว่า ไม่ชอบความกดดันเครียดง่าย
แต่ในทางกลับกัน ผลงานที่ huawei เราผลิตออกมาได้มากกว่าตอนทำงาน google ค่อนข้างเยอะ


การแบ่งข้อมูลระหว่างทีม


อันนี้เห็นได้ชัดว่า google เปิดมาก ทุกคนแชร์โค้ดกันหมดยกเว้นมัน sensitive จริงๆ (https://www.wired.com/2015/09/google-2-billion-lines-codeand-one-place/)

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

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

ข้อดีก็มีนะ คิดว่าทำให้เรามุ่งมั่นทำงานของตัวเองให้ดีที่สุด
เพราะต้องดีกว่าทีมอื่น 

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


การเรียนรู้สิ่งใหม่ๆ


ตอนอยู่ google สิ่งหลักๆที่เรียนรู้ คือ วิธีการเขียนโค้ดที่ดี มีคุณภาพ
หลักๆที่ใช้ก็ C++ กับ Java ก็จะเป็นการเขียนโค้ดแบบ object oriented ให้ดีซะส่วนใหญ่

ถ้าโชคดีก็จะได้จับเรื่องการออกแบบระบบนิดนึง
แต่ในฐานะเด็กฝึกงาน มันก็จะเป็น scope ที่เล็กอยู่ 

ตอนอยู่ huawei เนื่องจากโปรเจคที่ทำมันเป็นการวิจัย
ไม่ใช่การพัฒนาโปรแกรม
เป้าหมายที่สำคัญที่สุด คือ ทดลองสมมติฐานให้เร็วที่สุด
และโชว์ผลงานให้คนอื่น

มันก็จะมีทีมที่เต็มไปด้วยนักวิทยาศาสตร์ที่เก่งสาขาของตัวเอง
แต่ไม่จำเป็นต้องแกร่งเขียนโปรแกรม

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

เรามีประสบการณ์เขียนโปรแกรมมากกว่าการวิจัย เลยได้ฝึกการรีวิวโค้ดคนอื่น
ได้ฝึกการ design ระบบ ฯลฯ

อันนี้ให้ความรู้สึกคล้ายๆตอนที่เคยทำงานใน start up
เพียงแต่ว่าที่นี่มีนักวิทยาศาสตร์เยอะกว่า
ส่วนที่ start up มี software engineer ซะเยอะกว่า
เป้าหมายมันต่างกันนิดหน่อย แต่สิ่งที่เรียนรู้มหาศาลเหมือนกัน

ต้องบอกว่า ประสบการณ์ที่ huawei ได้เรียนรู้มากกว่าตอนอยู่ google


อาหารและตัวออฟฟิส


ที่ google มีออฟฟิสที่เปิด มีสีสัน รู้สึกโปร่ง
มีอาหารคุณภาพดีให้กิน
สะดวกมาก รู้สึกน่าทำงาน 

ที่ huawei มีออฟฟิสสีเทาๆ หลอดนีออน
ทำงานในกำแพงสูงๆสีเทา ไม่เห็นดวงตะวัน (ไม่เห็นจริงๆอะ)
มีกาแฟกับชาให้กิน
มีโรงอาหารที่ขายอาหารอยู่ แต่ส่วนตัวชอบออกไปกินข้างนอกมากกว่า

พอมานั่งคิดดีๆ
โดยรวมไม่มีผลกับผลงานเท่าไร
ถ้าบริษัทมีงานที่ทำให้รู้สึกกระตือรือร้น ถึงไม่มีอาการฟรีก็ไม่ใช่เรื่องใหญ่

แต่ก็ไม่แน่
อาจจะมีผล เพราะอาจจะเกิดการเปรียบเทียบ


คุณภาพโค้ด


อันนี้ต้องให้ google เพราะทุกคนเป็น software engineer
ถ้าโค้ดคุณภาพไม่ผ่าน ยังไงก็จะไม่ได้ commit
แบบรักษาคุณภาพงานขั้นสูงสุด

ส่วนที่ huawei ทุกคนเป็นนักวิทยาศาสตร์ก่อน
เรื่อง software engineer บางคนมีประสบการณ์เยอะ แต่บางคนไม่ค่อยมีประสบการณ์

เรามักจะเจออารมณ์ประมาณว่าคุณภาพโค้ดไม่ผ่าน
แต่เนื่องจากมี deadline ให้ยอม approve ไปก่อน

พอมาคิดดู
เราคิดว่าอันนี้มันเกี่ยวกับเรื่อง เวลานะ

“ถ้าให้เวลา x จะทำยังไงถึงจะใช้เวลาให้คุ้มที่สุด” 

ที่ google เวลา x นี่คือเวลาเป็นเดือนๆปีๆ
การลงทุนเวลาที่ดี คือ ลงทุนในคุณภาพ
ถ้าพนักงานใหม่เข้ามาเห็นโค้ดตัวนี้ จะต้องสานต่อได้ระยะยาว

ที่ huawei เวลา x นี่คือหนึ่งสัปดาห์ หรือ ไม่กี่วัน
การลงทุนเวลาที่ดี คือ ลงทุนในการส่งงานให้ทัน
ถ้ามีงานที่ต้องทำต่อจากอันนี้ต้องส่งภายในอาทิตย์หน้า
ให้ผ่านๆไปก่อนถ้ามันไม่ได้แย่ขนาดนั้น


ความกดดัน


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

ที่ huawei ฝั่ง silicon valley เป็นแลบวิจัย
เหมือนยังมีสถานะสู้ทาง HQ ที่ประเทศจีนไม่ได้
การทำอะไรรู้สึกว่าถูกกำหนดมาจากฝั่ง HQ ซะส่วนใหญ่
และทำให้รู้สึกเหมือนโดนกดดันอยู่ตลอดเวลา
ถ้าทำอะไรพลาด อาจจะกระทบกับทีมได้ 

เข้าเรื่องของความกดดันนิดนึง มันคือๆ กับความเครียด

เราเคยคุยในโพสที่ผ่านมา
ว่าความกดดันที่พอควรมันมีประโยชน์
ความกดดันน้อยเกิน ไม่เกิดการพัฒนา
ความกดดันเยอะเกิน ส่งผลเสียกับสุขภาพ

เรารู้สึกว่า google เอียงไปทางความกดดันน้อยเกิน
และ huawei เอียงไปทางความกดดันเยอะเกิน


สรุป



เรารู้สึกว่าเราได้หลุดเข้าไปในที่ทำงานสองที่ที่มีวิธีการทำงานที่ต่างกันมากๆ
ได้เจอข้อดีและข้อเสียของแต่ละที่
ทำให้ได้เห็นหลายๆอย่างเป็นสีเทา
และแก้ปัญหาด้วยการหาสีเทาที่เหมาะสมที่สุดกับสถานการณ์

ที่เขียนนี่คือจากมุมมองของเรานะ 
คนอื่นอ่านแล้วอาจจะมีมุมมองอื่น
อ่านแล้วได้ไอเดีย หรือ ข้อคิดอะไรก็เอามาบอกๆกันบ้างนะ

บรัยยย