Quick Note: TypeScript

เพิ่งเจอลูกค้าใช้ภาษา TypeScript (Wiki) เห็นว่าน่าสนใจเลยลองศึกษาดูสักพักล่ะ

  • มันเป็นภาษา Super Set ของ JavaScript ที่คิดค้นโดยเทพ Anders Hejlsberg
  • เพราะว่า JS มันโคตร flexible จนเราเขียนให้มันผิดพลาดได้ง่ายๆ TypeScript ก็เลยแก้ปัญหาด้วยการเพิ่มความเป็น Static Type, Scope, Class-based OOP เข้าไปใน ECMAScript syntax แล้ว compile ออกมาเป็น JS หรือ ECMAScript ver ต่างๆ ได้เลย ปัญหาพวก type ก็ detect กันตอน compile นี่แหละ
  • เพราะมันเป็น Super Set ของ JS ดังนั้นเราเขียน JS ใส่มันไปดื้อๆ ก็ compile ผ่าน
  • ถ้าทำงานกับทั้งภาษา Dynamic กับ Static Type พร้อมๆ กันแล้วจะรู้สึกว่ามันเป็นธรรมชาติมาก ดูไม่ฝืนความเป็น JS แต่ถ้าทำงานกับภาษา Dynamic ล้วนน่าจะชอบ CoffeeScript มากกว่า
  • โดยรวมทำให้เขียน code ช้าลงนิดนึง แต่ได้ความมั่นใจเรื่อง type, การเขียน class แบบที่คุ้นเคยมา
  • ข้อเสียคือเวลาทำงานกับ JS library อื่นๆ มันต้องการ file definition (.ts.d หรือ typing) ที่ระบุ structure ของ function, class, type, module ของ library นั้นๆ เพื่อให้มัน compile ผ่าน (อารมณ์ .h ของภาษา C)
  • ถ้าเป็น lib ดังๆ แบบ jQuery, Angular, React พวกนี้มีคนทำ file พวกนี้ให้อยู่แล้ว แต่คำถามที่สำคัญคือบางคนทำ file พวกนี้ก็ไม่ใช้คนที่เขียน lib นั้น ดังนั้นก็ต้องดูกันยาวๆ ว่าจะไล่แก้ file definition ตาม update ได้ตลอดไหม
  • ถ้าเป็น lib internal (หรือ legacy) lib เนี่ยยากสุดๆ ที่จะมีเจ้า file นี้หรือเขียน file นี้้ย้อนหลัง ขนาดจะลองกะ JS API ตัวเองยังต้องไปเอา file นี้จากลูกค้า (ซึ่ง decompile API ผมออกมาเขียนไอ้ file นี้) มาใช้เลย
  • ส่วนตัวคิดว่าถ้าเป็น Project ใหม่ + ใช้ lib ที่สนับสนุน TypeScript (เช่น Angular 2) หรือ lib ที่เราเขียนใหม่เองก็น่าสนใจที่จะใช้มัน
  • แต่ถ้าทำงานกับ legacy lib เยอะๆ ก็… ตัวใครตัวมัน

ป.ล. กำลังหัดอยู่จาก link TypeScript Tutorial เข้าใจง่ายดี

ว่าด้วยลูกค้า API

หน้าที่การงานของผมคือเป็น API Support ด้วยชื่อตำแหน่งผมหวังว่าลูกค้าคนที่คุยด้วยจะเป็น Developer ที่เจอปัญหาตอนเขียน code ที่ใช้ API ผม หรือว่าลูกค้าของเขาเจอปัญหาแล้วเขาวิเคราะห์แล้วว่าเกี่ยวกับ code ของเขาที่เรียกใช้ API เรานะ

แต่โลกแห่งความจริงมันไม่ง่ายขนาดนั้น เอาเข้าจริงผมมีลูกค้าเป็น Dev แทบนับหัวได้เลย ส่วนใหญ่เป็นลูกค้าระดับ end user หรือ manager ที่ไม่รู้อะไรเลย หรือไม่ก็ sys-admin ซึ่งคิดว่าทุกอย่างแก้ด้วยการ config file เท่านั้น (ไม่ได้ว่า sys-admin ไม่ดีนะ มีใน loop ช่วยได้เยอะ แต่แบบ… มันไม่ใช่ทุกอย่างเปลี่ยนได้ด้วย config file ไง) ซึ่งเวลาทำงานกับลูกค้าพวกนี้จะเสียเวลามากกว่าจะได้ข้อมูลที่สำคัญๆ มา เพราะว่าเวลาส่วนใหญ่จะเสียไปกับการอธิบายให้เขาเข้าใจว่าปัญหาอยู่ที่ไหนและทำไมเราต้องการข้อมูลพวกนั้น + เวลาเขาจะไปคุยกับ Dev/Ops เขาแล้วมาตอบเราอีกที

แน่นอนว่าลูกค้าประเภท Dev เทพที่ decompile API ผมแล้วชี้จุดที่เขาคิดว่ามีปัญหามาเลยก็มีเหมือนกัน ซึ่งพวกนี้ก็ปวดหัวไปอีกแบบตอนที่เราเอาข้อความที่ Dev เถียงกลับไปตอบเขาแบบสุภาพนี่แหละ

น่าสังเกตุว่าปัญหานี้เกิด API สำหรับภาษา Java เป็นส่วนใหญ่ แต่กับ JavaScript API อีกตัวที่ผมดูแลนั้นลูกค้าที่ติดต่อเข้ามาเป็น Dev ที่เขียน Code ที่กำลังเจอปัญหาจริงๆ ซะส่วนมาก~

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

Uncharted 4: A Thief’s End

Uncharted 4: A Thief’s End เป็นภาคล่าสุดของเกมตระกูล Uncharted ซึ่ง Naughty Dog ตั้งใจจะให้ภาคจบของ series นี้ครับ

uncharted4_1

TL;DR: ให้ 9.9/10 ดีงาม, ยอดเยี่ยม ดีที่สุดใน 4 ภาค ห้ามพลาดด้วยประการทั้งปวง
Continue reading “Uncharted 4: A Thief’s End”