จิตกร พิทักษ์เมธากุล

จิตกร พิทักษ์เมธากุล

"Work hard, Play hard."
ตอนนี้เป็นผู้จัดการโครงการ (Project Manager)

พัฒนาระบบ e-filing ให้กรมทรัพย์สินทางปัญญา

ชื่อเดียร์ครับ อายุ ... ปี เป็นโปรแกรมเมอร์ ทำงานมาได้ ... ปี ล่ะ ตั้งแต่เรียนจบปี 2555 (2012) ที่มหาวิทยาลัยรามคำแหง (คณะวิศวกรรมศาสตร์ สาขาวิศวกรรมคอมพิวเตอร์) จบมาก็มาเป็นโปรแกรมเมอร์เลย ในตำแหน่ง Java Developer ตอนนี้ก็ยังเป็น Java Dev อยู่ เพราะรู้สึกหลงใหลในอาชีพและภาษานี้

Coding ตลอด 1 ปี

ผลงาน

การศึกษา

เคยทำอะไรที่ไหนมาบ้าง

คติประจำใจ

ไม่มีอะไรเป็นไปไม่ได้ (Impossible is nothing.)

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

วิธีการทำนายอนาคตที่ดีที่สุด ก็คือการสร้างมันขึ้นมา (The best way to predict the future is to invent it.)

ผมเชื่อว่าเราสามารถกำหนดชะตาชีวิตของตัวเองในวันพรุ่งนี้ได้

เป้าหมายในชีวิต

เป็นโปรแกรมเมอร์ ที่สร้างผลงานเจ๋งๆ ระดับโลกให้คนทั่วโลกใช้ และมีบริษัทซอฟต์แวร์เป็นของตัวเอง

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

สภาพแวดล้อมการทำงานที่ชื่นชอบเป็นพิเศษ

ทักษะ (Skills)

เนื่องจากอยากสร้างผลิตภัณฑ์ที่เจ๋งๆ ให้คนทั่วโลกใช้ เลยต้องทำตัวเองให้เป็น Full Stack Developer ซึ่งก็ทำเป็นประมาณนี้

Front end

  • Html
    • Bootstrap
  • CSS Processor
    • LessCSS
    • Sass
  • Javascript

Back end

Test & Analysis tools

Other

แล้วใช้ Tools / Skills ต่างๆ ทำอะไรบ้าง

ตอนนี้ผมทำผลงานตัวเองอยู่ครับ โดยเขียน code เองทั้งหมดเลย ตั้งแต่หน้าบ้าน (Front end) ยันหลังบ้าน (Back end) Design database ถ่ายภาพ แต่งภาพ Photoshop เองทั้งหมด

หน้าบ้านใช้ AngularJS หลังบ้านเป็น SpringMVC และ database เป็น Mysql เขียน code แบบ Stateless คือไม่ใช้ session ในการ control (ใช้ token แทน) เพราะต้องการการ scale-out ที่ใหญ่มากๆ ไม่ว่าจะเอาไป run บน computer กี่เครื่องๆ ก็สามารถทำงานได้แบบสบายๆ ครับ มาดูรายละเอียด (details) ในแต่ละส่วนกัน

Front end (Isomorphic)

AngularJS

ผมเขียน angularjs + routing ใน mode Html5 ใช้คุณสมบัติ push state ของ history api มา control การเปลี่ยน page (จริงๆ ก็ใช้แค่ ui-router ซึ่งเป็น module หนึ่งของ angularjs) ทำให้เวลาเปลี่ยน page ระบบไม่เกิดการ refresh หน้าเว็บ และที่สำคัญคือรองรับ url จริง เช่น /+jittagornp ไม่เหมือนกับ #/+jittagornp ที่หลายๆ คนเขียน เวลาที่เรา refresh browser มันก็ยังอยู่หน้าเดิม ได้ content เหมือนเดิม พูดง่ายๆ ก็คือเป็นการเขียน angularjs ที่รองรับการทำ SEO (Search Engine Optimization) นั่นเอง

LessCSS

ตัว CSS ผมใช้ Less เข้ามาช่วยอำนวยสะดวกในการเขียน code เพื่อให้เราสามารถเขียน css ได้ง่ายขึ้น สะดวกขึ้น และที่สำคัญคือ reuse ใช้ของเดิมได้ (เขียนเป็น function และตัวแปรต่างๆ เพื่อเรียกใช้งานในภายหลัง)

Jasmine.js

เวลาเขียน code แล้วมี Test ครอบ มันทำให้เรามั่นใจในการเขียน code เอามากๆ กล้าเปลี่ยน กล้าแก้ กล้ารื้อ โดยที่ไม่กลัวพลาดเลย ต่อให้กระทบ ก็ยังรู้ว่ากระทบส่วนไหน (เพราะ Test Fail) ถ้าแก้ต้องแก้ยังไงให้ logic กลับมาถูกเหมือนเดิม ผมใช้ TDD (Test Driven Development) เข้ามาช่วย เวลาที่ต้องเขียน logic อะไรที่มันซับซ้อน / ยาก คิดไม่ออกร่าง TDD ก่อนเลยครับ แล้ว logic มันจะวิ่งตามทางของมันเอง

Grunt.js

Back end (Restful API)

SpringMVC

ผมเอาไว้ทำ Restful API และใช้ทำ URL Mapping สวยๆ เช่น /+jittagornp /@pookradueng ที่เลือกใช้ SpringMVC ก็คงหนีไม่พ้นคำตอบเรื่อง DI (Dependency Injection) ครับ Spring ใช้สะดวกมากๆ และการรองรับ Libraries อื่นๆ ที่ Spring support ซึ่งค่อนข้างครอบคลุม ผมใช้มา ... ปี แล้ว ชอบมากครับ

EclipseLink / Hibernate

JPA (Java Persistence API) 2 ตัว (ไว้ทำ ORM (Object Relational Mapping)) แล้วแต่ว่างานไหนจะเลือกใช้ตัวไหนครับ ต้องการความเรียบง่าย ใช้ง่าย ผมเลือก EclipseLink แต่ถ้าเป็นงานที่ต้องการ Feature เยอะๆ ซับซ้อนๆ ผมเลือก Hibernate (ลูกเล่นมันเยอะกว่า แต่ใช้ยากกว่า) บางทีก็มีผสมกันครับ

JUnit / Mockito

ทั้ง JUnit และ Mockito ต่างเอาไว้เขียน Test โดยเฉพาะ Mockito ที่เอาไว้จำลอง และทดสอบพฤติกรรมของ Code ได้ ในบางครั้งเราไม่รู้ว่า Code ปลายทาง หรือ implementation จริงๆ เป็นยังไง เรารู้แค่หน้าตาภายนอก (หรือ interface) เราสามารถ Mock Code ขึ้นมาแล้วกำหนดพฤติกรรมของ Code ได้โดยการใช้ Mockito

JWT (Json Web Token)

เอามาใช้แทน Session ที่เลือกใช้ JWT เพราะมันไม่ต้องเก็บ state ไว้ที่ Back end ครับ มันใช้หลักการ Sign / Verify Signature ซึ่งถ้า Verify ผ่าน และข้อมูลสิทธิ์ที่เราเก็บไว้ใน token มัน match กับที่ API Required ก็แสดงว่าเรามีสิทธิ์เข้าถึง Resources นั้นๆ เป็นวิธีการที่ผมชอบมากๆ เคยเรียน Digital Signature มา อ่าน JWT แล้วชอบเลย

Other

Web Page Speed

ผมค่อนข้างให้ความสำคัญกับเรื่องความเร็วในการโหลดข้อมูลของหน้าเว็บครับ ซึ่งได้แรงบันดาลใจ และความรู้ต่างๆ มาจาก Google เครื่องมือ กฎ และทฤษฎี Web Page Speed ที่ผมอ่านและ implement ตาม มาจาก PageSpeed Tools

UI / UX (User Interface / User Experience)

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

ทฤษฎี / หลักปฏิบัติต่าง ๆ ที่ใช้ในการทำงาน

ความสนใจอื่นๆ

สิ่งที่อยากทำสักครั้งก่อนตาย

  • กระโดดร่ม
  • ดำน้ำลึก
  • ไปดูการแข่งขัน Bigbike The isle of man ที่ประเทศอังกฤษ
  • กระโดดบันจี้จั๊ม
    • ความสูง 60 เมตร - อะดรีนาลีนสูบฉีดมากๆ
  • ไปเที่ยวที่ Machu Picchu ประเทศเปรู
  • ไปสำนักงานใหญ่ Google
    • Google เป็นแรงบันดาลใจแรกของผม

Social / Profile / ข้อมูลการติดต่อ อื่นๆ