สัมภาษณ์คนไทยในซิลิคอนวัลเลย์ - ณัฐกรณ์ พัฒนพงษ์ศักดิ์ กับงานด้าน Frontend ที่ eBay

by mk
25 October 2015 - 09:08

ซีรีส์สัมภาษณ์ "คนไทยในซิลิคอนวัลเลย์" คราวนี้มาดูคนทำงานฝั่ง frontend กันบ้าง กับบทสัมภาษณ์คุณณัฐกรณ์ พัฒนพงษ์ศักดิ์ ตำแหน่ง Frontend Developer ที่ eBay

ในบทสัมภาษณ์นี้ คุณณัฐกรณ์จะมาเล่าความเคลื่อนไหวของการทำงานสาย frontend ของบริษัทไอทีเหล่านี้กันว่าต้องใช้เครื่องมือแบบไหนกำลังมาแรง รวมถึงประสบการณ์การทำงานที่ไทยเทียบกับสหรัฐอเมริกา

แนะนำตัว

สวัสดีครับ ผมชื่อฟลุ๊ค ณัฐกรณ์ พัฒนพงษ์ศักดิ์ ตอนนี้ทำงานเป็น Frontend Developer ที่ eBay ครับ

ผมจบตรีวิศวกรรมคอมพิวเตอร์จากมหาวิทยาลัยเกษตรศาสตร์ครับ หลังเรียนจบผมก็ทำงานที่ไทยอยู่บริษัท DSTi หรือ DST Worldwide Services ประมาณ 6 เดือน หลังจากนั้นรู้สึกว่าอยากเปิดโลกกว้างดูบ้าง เลยตัดสินใจมาเรียนต่อโทที่ San Jose State University สาขา Software Engineer

หลังเรียนจบผมก็หางาน ก็ได้งานที่ FriendFinder Networks Inc. ทำงานเป็น full stack engineer หลังจากหลังก็ผันตัวมาทำงานด้าน frontend เต็มตัว ที่ eBay จนถึงปัจจุบันครับ

มาทำงานที่บริษัทปัจจุบันได้อย่างไร

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

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

สุดท้ายมาได้งานทำเว็บ PHP ของบริษัทเล็กที่หนึ่ง ได้เรียนรู้อะไรเยอะ พอใกล้เรียนจบ เริ่มหางานอยู่หลายที่จนได้ทำงานที่ FriendFinder Networks Inc. ซึ่งเป็นบริษัทเกี่ยวกับ online dating service ครับ

บริษัทนี้เน้นไปทางด้าน "เว็บผู้ใหญ่" แบบครบวงจร ทั้งทำ online dating, live interactive video, chat room, photo, video and voice sharing, บล็อกสำหรับผู้ใหญ่ สุดท้ายบริษัทถูกซื้อโดย Penthouse Media Group ในเวลาต่อมาครับ

ตอนแรก ผู้ก่อตั้ง Andrew Conru สร้างเว็บ FriendFinder Networks เพื่อเป็น social network สำหรับคนทั่วไป แต่พอสร้างได้ซักระยะ ปรากฏว่าคนกลับใช้โพสต์รูปเปลือยของตัวเอง และมองหาคู่นอนกันบน FriendFinder บริษัทจึงหันเน้นทางด้านเว็บผู้ใหญ่เป็นหลักแทน

ตอนที่ทำอยู่ FriendFinder Networks ผมเป็น fullstack engineer ทำให้รู้ตัวว่าสนใจและสนุกกับการทำ frontend มากกว่า ตอนหลังเลยเปลี่ยนสายงานมาเน้นทางด้าน frontend อย่างเต็มตัว

ผมถนัดเขียน JavaScript และอยากทำงาน client-facing application เลยลองหางานทางด้าน frontend ดู ประกอบกับมีเพื่อนทำงานด้าน eBay เลยให้เค้าแนะนำ (refer) ให้ พอสัมภาษณ์ผ่านเลยได้มาทำงานที่ eBay ครับ

แนะนำงานที่ทำอยู่ที่ eBay

ผมทำงานในทีมที่รับผิดชอบ header และ footer สำหรับทุกหน้าบนเว็บไซด์ eBay ครับ รวมไปถึงทุกประเทศในเครือ ebay อ่านหน้าที่งานแบบเผินๆ อาจดูไม่มีอะไรซับซ้อน แต่จริงๆ แล้ว รายละเอียดของงานค่อนข้างเยอะกว่าที่เห็น

งานของผมส่วนใหญ่เน้นไปทาง frontend เช่น พัฒนาฟีเจอร์ให้กับ header และเน้นไปทางด้านพัฒนาโค้ด frontend ของทีมให้มีประสิทธิภาพสูงสุด เช่น ดูว่าทำยังไงให้โค้ด JavaScript/CSS/HTML ไม่ใช่แค่ทำงานได้ แต่ทำอย่างไรให้ทำงานได้เร็วที่สุด เพราะ header อยู่บนทุกหน้าของเว็บที่มีคนเข้าเยอะมาก ถ้าโค้ดมีขนาดใหญ่เกินไป หรือใช้เวลาเรนเดอร์มากเกินไป ก็ส่งผลกระทบต่อความเร็วในการโหลดหน้าเว็บ ซึ่งสุดท้ายอาจทำให้ผู้ใช้ลดลง จนกระทบถึงรายได้ของบริษัทในที่สุด

ช่วงหลัง eBay ให้ความสำคัญเรื่อง mutli-device experience เพราะในสองสามปีที่ผ่านมา eBay เห็นถึงการเติบโตอย่างรวดเร็วของอุปกรณ์พกพา ปริมาณผู้ใช้จากอุปกรณ์พกพาเพิ่มจำนวนขึ้นจนทัดเทียมกับผู้ใช้ desktop แต่ปัญหาที่เกิดขึ้นคืออุปกรณ์แต่ละตัวมี UI ต่างกัน ส่งผลให้ user experience ของผู้ใช้แตกต่างกัน บริษัทจึงพยายามให้ user experience ลื่นไหลไม่สะดุด ไม่ว่าจะใช้อุปกรณ์ชนิดไหนก็ตาม

อีกปัญหาหนึ่งที่สำคัญคือการทำงานที่ทับซ้อนกัน เช่น ฟีเจอร์ localization หรือ tracking ซึ่งฝั่งไคลเอนต์ด้องสร้างฟีเจอร์นี้ขึ้นมา ถ้าเรามีไคลเอนต์บนระบบปฏิบัติการ 10 ตัว เราก็ต้องสร้างฟีเจอร์พื้นฐานนี้ 10 รอบ

ทางแก้คือใช้แนวคิดเรื่อง view/model แบ่ง view เป็นโมดูลย่อยตามแต่ละไคลเอนต์ (เช่น เว็บ, แอพ) การทำงานต้องเรียก frontend server ซึ่งมาตรวจสอบว่าคนเข้ามาจากอุปกรณ์ชนิดใด จากนั้นจึงส่ง view model กลับไปตามความเหมาะสมของอุปกรณ์นั้น

จากตัวอย่างข้างบน เราจะแบ่งเป็นหลาย view model เช่น seller model, detail model, price model ซึ่งอุปกรณ์แต่ละตัวจะได้ data ที่ต่างกันเช่น URL, ขนาดและสีของตัวอักษร

วิธีนี้ช่วยให้ผู้ใช้รู้สึกว่าถึงแม้จะเปลี่ยนอุปกรณ์ในการใช้งานแต่ UI ไม่ต่าง และช่วยลดการทำงานซ้ำซ้อนในส่วนของ frontend เช่น ระบบ click tracking ฝั่งไคลเอนต์ไม่จำเป็นต้องรู้ว่า tracking id ที่ต้องใส่ใน URL (เช่นปุ่ม more detail) คืออะไร เพราะ frontend server จะสร้าง URL ที่รวมค่า tracking ไปด้วยนั่นเอง

ถ้าเรามี frontend server เราก็จะสามารถเขียนตัว logic ลงที่นี่ที่เดียวได้เลย ส่วนของไคลเอนต์ก็เน้นไปเรื่อง UI ของแต่ละอุปกรณ์เพียงอย่างเดียว

ในฐานะคนทำ frontend ปัจจุบันมีไคลเอนต์หลากหลายมาก ตรงนี้เรามีแนวทางจัดการความซับซ้อนเหล่านี้ได้อย่างไร

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

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

ในฝั่งเซิร์ฟเวอร์ แนะนำว่าควรสร้างเซอร์วิสขนาดเล็กที่ทำงานเจาะจงด้านใดด้านหนึ่งเพียงอย่างเดียว (microservice) เช่น สร้างเซอร์วิสมีหน้าที่หลักคือจัดการกับ business logic หรือดึงข้อมูล ข้อดีของแนวทางนี้คือง่ายต่อการดูแลและการพัฒนาต่อ ไม่มี dependency ที่ซับซ้อน และมีการทำ API versioning ซึ่งรองรับ backward compatibility ได้ง่าย

ส่วนของ frontend ถ้าเรามีแผนจะทำไคลเอนต์จำนวนมาก และรองรับความต้องการของแต่ละอุปกรณ์ที่ต่างกัน การทำ frontend server ถือเป็นหนึ่งทางเลือกที่สามารถจัดการกับ View/Model ได้อย่างดีตามที่กล่าวไว้แล้ว

ประเด็นที่สำคัญในการทำไคลเอนต์ คือเราควรนึกไว้เสมอว่าไคลเอนต์ควรรับหน้าที่สร้าง UI สำหรับตัวเองเท่านั้น ถ้ามีงานไหนที่ต้องทำซ้ำซ้อน ก็ควรหาดูว่าสามารถยกไปไว้ที่เซอร์วิสหรือ frontend server แทนได้หรือไม่

อยากให้แนะนำ UI framework ที่กำลังมาแรงในปัจจุบัน และบริษัทในแถบนั้นใช้กันเยอะ

UI Framework แบ่งได้หลายแบบมาก สำหรับผมแยกได้ดังนี้

  • CSS Preprocessor ส่วนใหญ่ที่ใช้กันเยอะ คือ Less และ Sass แต่รู้สึกว่าหลังๆ คนหันมาใช้ Sass เยอะ เนื่องจากว่ามีฟีเจอร์หลายอย่างที่ช่วยในการเขียน CSS3 ง่ายและสั้นลง
  • JavaScript framework มีมากมายให้เลือกใช้ ตัวหลักคือ Backbone.js, Angular, React.js, Ember ช่วงหลังรู้สึกว่า React กำลังมาแรง อาจเป็นเพราะ Angular กำลังพัฒนาเวอร์ชัน 2 ช่วงนี้เลยเงียบอยู่ ประกอบกับฝั่ง React ออก React native รองรับ android พอดีด้วย
  • Responsive front-end framework ที่ดังๆ คนใช้เยอะคงหนีไม่พ้น Bootstrap ส่วนตัวอื่นที่ผมรู้จักมี Foundation กับ Skeleton แต่ไม่เคยใช้ครับ

ทักษะที่สำคัญในการทำงาน frontend มีอะไรบ้าง

อย่างแรก ผมคิดว่าต้องมีความรู้ความเข้าใจการทำงานฝั่ง server side เพราะเราต้องดึงข้อมูลจากหลังบ้านมาใช้แสดงผล ดังนั้นเราควรมีความรู้เบื้องต้นว่าจะเรียกข้อมูลอย่างไรให้มีประสิทธิภาพ

ทักษะการออกแบบระบบก็สำคัญครับ อย่างที่นี่เค้าเน้นในเรื่อง frontend performance ค่อนข้างเยอะ ต้องเรียนรู้ว่าวิธีไหนที่มีประสิทธิภาพสูงสุด แต่ใช้ทรัพยากรน้อยที่สุด ตัวอย่างงานที่ผมทำคือฟีเจอร์ notification ที่ต้องใช้ AJAX ดึงข้อมูลเป็นระยะเพื่ออัพเดต notification ของผู้ใช้ เราต้องศึกษาว่าวิธีไหนดีที่สุด เช่น polling, long polling, web sockets, comet เป็นต้น

ทักษะที่สำคัญอีกอย่างคือ JavaScript ส่วนตัวผมคิดว่า JavaScript เป็นสิ่งจำเป็นมากสำหรับ frontend developer เพราะว่าเดี๋ยวนี้ user interaction ขาดไม่ได้แล้ว และความรู้ทาง JavaScript ไม่ใช่เพียงแค่ใช้ jQuery ได้ แต่ต้องเข้าใจหลักของตัวภาษา รวมทั้งเข้าใจการทำงานของ JavaScript engine ด้วย เพราะถ้าเราเข้าใจพื้นฐาน การเรียนรู้รายละเอียดของ JavaScript freamwork แต่ละตัวก็ไม่ใช่เรื่องยากอีกต่อไป

ข้อดีอีกอย่างของ JavaScript คือเราสามารถทำงานได้หลากหลาย จะทำงาน frontend หรือ backend (Node.js) หรือแอพมือถือก็ได้

นอกจากนี้ คนที่มาทำงานด้านนี้ควรติดตามเทคโนโลยีใหม่ๆ ของเบราว์เซอร์ เช่น ECMAScript 6 และควรเป็นคนที่ชอบงานละเอียดอ่อน เพราะงานด้านนี้ต้องทำ cross-browser, cross-platform, cross-device compatibility frontend performance

ทักษะด้านการดีไซน์นี่มีก็ดีครับ แต่ไม่มีก็ไม่เป็นไร เพราะส่วนใหญ่เค้ามีทีมงานออกแบบอยู่แล้ว

ประสบการณ์การทำงานในสหรัฐ พบว่าวัฒนธรรมการทำงานแตกต่างกับเมืองไทยมากน้อยแค่ไหน

จากที่ทำงานมา มองเห็นความแตกต่างหลายด้านที่น่าสนใจครับ

1) เวลาทำงาน

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

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

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

ทีมของผมให้ความสำคัญกับ work-life balance มาก ถ้าเลิกงานหรือลาพักร้อนก็ไม่ต้องอ่านอีเมลหรือต้องรีโมทเข้ามาทำงาน เค้าจะใช้เวลาหลังเลิกงานกับครอบครัว หรือว่าดูแลตัวเอง ออกกำลังกาย พบปะเพื่อนฝูง ในขณะที่ในไทย ผมคิดว่าเรายังทำงานกันค่อนข้างหนัก และให้ความสำคัญกับการดูแลตัวเองน้อยกว่า

2) ระบบการทำงาน

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

คนที่ไม่ค่อยสนิทกันเหมือนที่ไทย คนอเมริกาเรียกเพื่อนที่ทำงานว่า colleague ไม่ได้ใช้คำว่า friend เพื่อนที่ทำงานคือเพื่อนที่ทำงาน คุยกันผิวเผิน ไม่ค่อยไม่ยุ่งเรื่องส่วนตัวของกันและกัน หรือนัดเจอกันหลังเวลางานมากนัก นอกจากสนิทกันจริงๆ

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

3) ความก้าวหน้าในสายงาน

ที่นี่ให้ความสำคัญกับสายงาน technical พอกับสายบริหาร เราสามารถทำงานตำแหน่งผู้เชี่ยวชาญ ถ้าชอบสาย technical มากกว่า อาจเป็นเพราะบริษัทมีเรื่อง R&D (research and development) ทำให้ผู้เชี่ยวชาญเป็นที่ต้องการมาก

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

ถ้ามีคำแนะนำให้น้องๆ รุ่นหลังที่อยากมาทำงานด้านเกี่ยวกับไอทีในสหรัฐ มีอะไรบ้าง

สำหรับน้องๆ ที่อยากมาทำงานด้าน frontend ที่นี่ ผมแนะนำให้สร้างโอกาสให้ตัวเองก่อนครับ

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

ที่ eBay มีเครื่องมือโอเพนซอร์สที่น่าสนใจอย่าง Marko (template engine) มีฟีเจอร์ที่น่าสนใจเช่น html templating, UI component, Async Fragments, Marko widget

ลองดูวิดีโอประกอบ

อีกวิธีหนึ่งคือลองสร้างโครงการของตนเอง เริ่มจากของง่ายๆ อย่างสร้าง node module หรือสร้าง UI component สำหรับ frontend framework อย่าง Marko หรือ Angular การสร้างบัญชี GitHub เป็นของตนเองช่วยให้ดูน่าเชื่อถือ ไปจนถึงสร้างเว็บของตนเองด้วยเทคโนโลยีใหม่ๆ

เทคนิคนี้ช่วยผมได้ตอนสมัครงานที่ eBay เพราะตอนนั้น responsive design กำลังมาแรง ประกอบกับผมสนใจสร้างเว็บรวมข่าว เลยสร้างเว็บที่เป็น resposive design ขึ้นมา พอตอนสัมภาษณ์ พบว่าช่วยได้เยอะ คนสัมภาษณ์ดูสนใจงานของเราดี

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

Blognone Jobs Premium