ทักษะประจำกาย Developer #4 – Eating your own dog food

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

แต่จริงๆเป็นการเล่นคำในวงการ software development ว่า การที่เราสร้าง Product อะไรมานั้น เราในฐานะผู้ใช้สร้าง ก็ควรจะใช้งานมันด้วย และที่สำคัญถ้าใช้ในชีวิตประจำวันได้เลยยิ่งดี ซึ่งแนวคิดนี้จะทำให้ Product/Software ที่พัฒนาออกมาได้รับ feedback ที่เร็วขึ้น รวมทั้งได้แง่มุมจากการใช้งานจริงของคนภายใน ก่อนที่จะส่ง Product ออกไปให้ User ใช้

แนวคิดนี้เปลี่ยนมุมมองของการพัฒนา software เลยนะ ผมว่า
เนื่องจากปกติแล้ว Developer จะชอบจดจ่อแต่กับการเขียน Code และเขียนให้เสร็จ แต่จะชอบละเลยการทดสอบ(Test) ซึ่งปกติ Developer จะ Test โดยสนใจผลลัพธ์ของ software ว่าทำงานถูกต้องรึเปล่า(ซึ่งนั่นก็เป็นข้อดี) แต่อีกมุมหนึ่งซึ่งเป็นหัวใจของการ Test ก็คือประสบการณ์ที่ดีของผู้ใช้ (User Experience)

ผมชอบแนวคิดนี้นะ จริงๆไม่ใช่เฉพาะแวดวง Software หรอกที่จะประยุกต์ไปใช้ได้ ผมว่ามันใช้ได้กับทุกผลิตภัณฑ์ เช่น

  1. ถ้าทำธุรกิจอาหาร คุณก็ควรจะกินอาหารจากฝีมือตัวเอง หรือ เซฟ ประจำร้าน อย่างสม่ำเสมอ เพราะถ้าคุณกินแล้วไม่อร่อย คุณคาดหวังจะให้คนอื่นกินอร่อยเหรอ?
  2. เซลล์ขายรถยี่ห้อ A ถ้าคุณเองดันใช้แต่รถยี่ห้อ B แล้วคุณจะแนะนำสิ่งดีๆ หรือประสบการณ์ดีๆจากรถยี่ห้อ A ได้ยังไง
  3. ถ้าคุณเปิดร้านกาแฟ แต่ตกเย็นคุณไปนั่งจิบกาแฟ s… แทนการชงเอง

ทั้งนี้และทั้งนั้น ก็อย่าลืมที่จะ Eating other dog food ด้วยนะครับ เพื่อเป็นการเปิดโลกและสร้างประสบการณ์ใหม่ๆ แล้วนำมาใช้กับชีวิตเรา 😉

ref: https://en.wikipedia.org/wiki/Eating_your_own_dog_food

Advertisements

ทักษะประจำกาย Developer #3 – Root Cause กับ Workaround?

คำ 2 คำที่คุ้นเคยมากสำหรับเราชาว developer

Root Cause ก็คือ ต้นตอของสาเหตุ
Workaround คือ การแก้ปัญหาอ้อมๆ เพื่อบรรเทาทุกข์

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

1. เรารู้ว่าการเขียน code แบบนี้มันแก้ปัญหาได้(มั้ง)แต่ไม่รู้ว่าเพราะอะไร นี่เป็นตัวอย่างนึงของ Workaround
2. ระบบของเราทำงานไป 2 วันแล้วทำงานช้าลง เราก็จัดการ restart เครื่องใหม่มันก็หายละ (แล้วอีก 2 วันมันก็ช้าอีก)  นี่เป็นตัวอย่างนึงของ Workaround โดนที่เราไม่ได้มองเลยว่าทำไมระบบทำไมถึงช้าลงได้

หรือยกตัวอย่างง่ายๆ เวลา TV ที่บ้านสมัยก่อนไม่ชัด เราทำไงกันครับ…ตบ TV ไป 2 ที ชัดเลย นี่แหละ Workaround!

การใช้ Workaround บ่อยๆ จะทำให้ทุกอย่างทับถมกันไปหมด จนสุดท้ายระบบก็เละและยากต่อการดูแล

การเป็น Developer ที่ดีเราควรจะหลีกเลี่ยง Workaround และเข้าใจกับ Code ทุกบรรทัดที่เขียนลงไป รวมทั้งการมองปัญหาที่ Root Cause เพื่อที่จะแก้ปัญหาได้อย่างถูกจุดและยั่งยืน ถึงแม้ว่าจะต้องใช้เวลาและความมุ่งมั่นมากกว่าก็ตาม…

ปลุกชีวิตอีกครั้งให้กับ Motorola Razr (xt910)

เรื่องของเรื่องคือเมื่ออาทิตย์ก่อน ผมอยากลอง flash รอมจาก Official Rom – Android 4.1.2 ไปใช้ CyanogenMod 12 (Lollipop 5.1) แต่ว่าพลาดครับ ดันไปลบ Partition หลักของรอมทำให้เปิดเครื่องไม่ได้ แล้วจะติดอยู่ที่โหมดพิเศษเรียกว่า AP fastboot

ความซวยบังเกิดเนื่องจากไม่ได้ชาร์จแบตเอาไว้มาก ทำให้ลองแก้อยู่ 2 ชั่วโมงแล้วแบตเริ่มจะหมด

ผลก็คือ โหมด AP fastboot ดันเช็คว่าถ้าแบตใกล้หมดมันจะไม่ให้ flash rom จบกันครับทำให้ผมต้องกลับไปใช้มือถือรุ่นเทพในอดีตซึ่งเป็นเครื่องสำรอง – Nokia E51

การที่อยู่ในโหมด AP fastboot นั้น ตัวระบบของ Motorola จะไม่ทำการชาร์จไฟเข้าเครื่องด้วยสาย USB ปกติ ซึ่งจริงๆผมก็ลองชาร์จดู 3-4 ชั่วโมง ไฟก็ไม่เข้าจริงๆ ณ จุดๆนี้ โทรศัพท์เครื่องนี้กลายเป็นที่ทับกระดาษไปแล้วพร้อมลายสวยๆเป็นหุ่นกระป๋องนอนแอ้งแม้ง

IMG_3243
ณ เวลานี้ผมมีทางเลือก 3 ทางสำหรับเครื่องนี้
1. ชาร์จแบตตรงๆจากสายไฟ แล้วต่อเข้าขั้ว+,- ที่แบตเอง
2. หาสาย Factory Cable มา เพื่อที่จะ by pass การเช็คแบตในโหมด Ap fastboot
3. ทิ้ง….รอซื้อเครื่องใหม่

พอนั่งศึกษาไป วิธีแรกไม่กล้าต่อแบตตรงครับกลัวเครื่องระเบิด ส่วนรอซื้อเครื่องใหม่ตอนนี้อยากลอง windows 10 ซึ่งยังไม่ออก
ผมเลยมาทางวิธีที่ 2 คือการทำสาย Factory Cable

สาย Factory Cable นั้นเป็นการแก้ระบบการส่งไฟจากสาย Micro USB เพื่อเพิ่มกระแสไฟให้กับ Pin ที่ไม่ได้ใช้ใน Micro USB ปกติ
ดูจากรูปด้านขวาก็คือการ จั้มสายจาก สายสีแดง #1 ไปเชื่อมกับ Pin #4 ที่ไม่ได้ใช้งานในรูปด้านซ้าย

สิ่งที่ต้องมีคือ
– สาย Micro USB
– หัวแร้งบัดกรี (ผมซื้อมา 160 บาท)
– ตะกั่วบัดกรี
– คีม มีด สำหรับการงัดแงะ

เนื่องจากว่านี่เป็นการบัดกรีครั้งแรกในชีวิตของผม ผลก็คือ…… สาย Micro USB เสียไป 1 สายพร้อมกับซากการแงะ จริงๆตอนแรกเหมือนจะใช้ได้ แต่พอขยับสายไปๆมาๆ สายเส้นอื่นๆที่ผมไม่ได้ยุ่งก็ขาดแล้วไม่สามารถกู้ได้เนื่องจากไปบัดกรีพลาดจนพลาสติกมันละลาย

IMG_3271

แต่เราต้องสู้ต่อไปเลยไปหาสาย Micro USB มาอีกสาย แล้วผลของความมุ่งมั่นก็สำเร็จ

IMG_3272 IMG_3273
และในที่สุดผมปลุกชีพ Motorola Razr ได้แล้วววววว

IMG_3269

สิ่งที่ผมได้จากการ workshop การซ่อมเครื่องครั้งนี้มีเยอะเลยครับ
– ได้ลองทำอะไรใหม่ๆ ที่ไม่เคยทำ ผมเรียนวิทยาการคอมพิวเตอร์มาซึ่งไม่ได้มีโอกาสทำพวกไฟฟ้าหรือวงจรเลย แต่การลองครั้งนี้ก็สำเร็จ
– กล้าตัดสินใจ ตอนนั่งกรีดสาย Micro  USB ที่มันใช้ได้อยู่ก็เสียดายนะครับ ถึงจะเส้นละ 200-300  ตอนทำเส้นที่ 2 เลยต้องรอบคอบกว่าเดิมเยอะ
– และ ความรู้เรื่องระบบ Architect ของ Android OS ที่ได้ตอนการ flash rom จาก AP Fastboot mode ที่ปกติตอน flash rom จาก mode ปกติมันง่ายกว่ามาก
– และสุดท้าย ได้มือถือกลับมาใช้แก้ขัดได้อีกซักพัก 🙂

ทักษะประจำกาย Developer #2 – คิดเยอะขึ้นอีกนิด

เนื่องด้วยลักษณะงานของ Developer(Dev) คือการพัฒนาระบบใหม่ๆและแก้ปัญหาของผู้ใช้ (users) การพัฒณาความสามารถของเรานั้นจะต้องใช้ความคิดในการแก้ปัญหาและการต่อยอดจากสิ่งที่มีอยู่แล้ว รวมทั้งการสร้างสรรค์สิ่งใหม่ๆให้กับคนบนโลกนี้

เราต้องเพิ่มมุมมองในการมองสิ่งต่างๆ ซึ่งปกติส่วนตัวผมจะฝึกมองและคิดสิ่งต่างๆที่เจอในชีวิตประจำวันเพิ่ม 2 มุม

  1. คิดว่ามันทำได้ยังไง
  2. คิดว่าทำยังไงให้มันดีขึ้น
ยกตัวอย่าง App – LINE ยอดฮิต เชื่อว่าคนไทยเกือบทุกคนที่มี smartphone ใช้ app นี้ โดยปกติเราอาจจะโหลดมาใช้งานทั่วไป ซึ่งก็เป็นปกติอยู่แล้ว
แต่ในมุมมองของ Dev เราคิดต่อไปเลยครับ
“มันทำได้ยังไง” – ลองคิดเลยว่าระบบของ app นี้จะเป็นยังไง ประกอบด้วยอะไรบ้าง มี database หรือว่า infrastructure อะไรบ้าง การทำ User Interface(UI) ประมาณนี้ต้องเขียน Code ยังไง คิดว่าถ้าเราต้องสร้างระบบประมาณนี้จะต้องออกแบบลักษณะไหน ซึ่งการทำแบบนี้บ่อยๆจะทำให้เราได้มี Idea ดีๆเวลาที่เพื่อต้องใช้งานจริงซักวัน
“ทำให้มันดีขึ้นยังไง” – ลองคิดดูว่า app – LINE มันขาดอะไรไป เช่น จะดีกว่านี้มั้ยถ้ามันส่งไฟล์ง่ายๆไม่ได้ หรือจะดีกว่านี้มั้ยถ้ามีระบบตอบรับอัตโนมัติ
การคิดแบบนี้บ่อยๆจนเป็นนิสัย ผมเชื่อว่าจะช่วยให้ตัวเราพัฒนาขึ้น
มาเริ่มเป็นนักคิดกันเถอะ….

ทักษะประจำกาย Developer #1 – การเรียนรู้

ในโลกที่หมุนเร็วขึ้นทุกๆวัน ทุกสายงานทุกอาชีพนั้นจำเป็นต้องเรียนรู้สิ่งใหม่ๆเสมอเพื่อพัฒนาตัวเองให้ทันยุคทันสมัย แต่ถ้าเจาะจงมาทางสาย IT หรือ Software Development ล่ะ

มันโคตรจะเร็วเลยครับ เอาง่ายๆแค่ลองมองย้อนกลับไป 10 ปีที่แล้วเราเห็นอะไรบ้าง

จาก Desktop Application => Web => Web 2.0 และมาที่ Apps

ซึ่งพื้นฐานของการพัฒนา software จริงๆแล้วก็มาจากพื้นฐานเดียวกันนั่นแหละ สิ่งที่ Developer ควรจะสนใจเป็นพิเศษคือเราควรจะต้องยอมรับการเปลี่ยนแปลงของกระแสหลัก เรียนรู้ขีดความสามารถของเทคโนโลยี และนำมาใช้ให้เหมาะสมกับลักษณะงานของเรา

การที่ Developer นั้นยึดติดกับเครื่องมือหรือภาษาที่ใช้ในการพัฒนา software นั้น เป็นเหมือนกำแพงที่จะปิดกั้นการพัฒนาศักยภาพของตัวเอง

การเรียนรู้ด้วยตัวเองในสมัยนี้ก็ง่ายจริงๆ มีทั้ง internet, e-book, youtube และะพวก online course ต่างๆ
เราอาจจะตั้งเป้าหมายว่าทุกๆเดือนเราจะเรียนรู้เรื่องต่างๆเพิ่มขึ้นก็ได้ เช่น เดือนนี้จะรู้เรื่องการเขียน app บน android, เดือนหน้าจะลองเขียนเวปด้วย nodejs, เดือนต่อไปอีกจะลองเล่น Linux ซักครั้ง

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

เนื่องด้วยลักษณะของสายงานของ Developer เป็นแบบนี้แล้ว ทำให้คนในแวดวงนี้อาจจะได้เปรียบคนในสายงานอื่น(มั้ง)ก็คือ เราจะตื่นตัวกับการเปลี่ยนแปลงอยู่เสมอและพร้อมที่จะเรียนรู้ตลอดเวลา ….

เพลงประกอบในเกม…สิ่งที่ทำให้เกมเป็นมากกว่าความสนุก

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

มาดูกันว่าแต่ละเพลงที่ผมชอบมีอะไรบ้าง (ไม่ได้เรียบลำดับนะครับ) 🙂

1. Nier – Ashes of Dreams

เพลงจากเกม Nier ที่เนื้อหาของเกมก็ดูมืดหม่น ชื่อเพลงก็ฟังดูแล้วก็จะเศร้าแปลว่า “เถ้าถ่านของความฝัน” แค่อินโทรด้วยเสียงเปียโนและเนื้อเรื่องภาษาฝรั่งเศสที่ผมฟังไม่ออกแต่ก็รู้สึกว่าเพราะและเศร้า

2. Xenoblade Chronicles – Main Theme

เพลงเปิดเกมที่เริ่มบรรเลงตอน Title ที่ผมเปิดครั้งแรกตอนเล่นเกมนี้ครั้งแรกก็ทำให้ต้องเปิดค้างไว้แล้วฟังเพลงจนจบไป 3 รอบก่อนจะได้เข้าเกมครั้งแรก
แบบว่าฟังครั้งแรกก็ประทับใจกับความเพราะแบบไม่มีเงื่อนไขเลย…

เปียโนกับไวโอลิน ช่างเป็นอะไรที่เข้ากันได้จริงๆ

3. Granado Espada – Granado Espada theme

เพลงเปิดเกม Online ยอดฮิตอีกเกม ส่วนตัวแล้วผมไม่เคยเล่นเกมนี้เลย แต่เคยเห็นภาพตัวอย่างแล้วสนใจดีเลยเปิด youtube ไปดูแล้วก็พบว่า เพลงเค้าแต่งไม่ธรรมดาจริงๆ

เนื่องจากว่า Theme ของเกมนี้จะออกแนวยุโรปยุคเรเนซองค์และบารอค ทำให้เพลงจะมีกลิ่นอายของแนวคลาสสิค
และแน่นอนเพลงนี้ก็เปียโนมาซะหวานเลย

4. The Last Story – Main Theme

เพลงเปิดอีกแล้ว กับ 1 ในสุดยอดเกม RPG ส่งท้ายเครื่อง wii
เพลงเปิดเกมของเกม RPG ส่วนมากจะเน้นแนวๆ เศร้าๆและดู EPICๆ ซึ่งผมล่ะชอบจริงๆ

5. The Legend of Zelda: Skyward Sword – Ballad of the Goddess

บทเพลงแห่งเทพธิดา เพลงประจำเกม Zelda ของภาคนี้ ที่ฟังแล้วรู้สึกฮึกเฮิมและ EPIC มากๆ

ว่าด้วยเรื่องการเพิ่ม Productivity ของ Developers

หลายๆคนอาจจะเคยได้ยินคำว่า Productivity ถ้าแปลตรงตัวเป็นภาษาไทยก็แปลว่า “ความสามารถในการผลิต”
แล้วการเพิ่ม Productivity คืออะไรในแง่ของการพัฒนา software

ผมคิดว่าหน้าที่ของ Software Engineer, Software Developer, Programmer(เรียกรวมๆว่า Developer ละกัน) ก็คือการทำให้ software ที่เป็นไอเดีย สามารถออกมาเป็น Program หรือ App ที่มันทำงานได้จริงอย่างมีประสิทธิภาพ

การที่เหล่า Developer นั้นต้องมานั่งหน้าคอมแล้วทำงานที่ไม่เกี่ยวกับการพัฒนา software สิ่งเหล่านั้นเราควรจะคิดว่ามันเป็นสิ่ง developer ไม่ควรจะเสียเวลาด้วยหรือควรจะเสียเวลาให้น้อยที่สุด ยกตัวอย่างเช่น การประชุมโดยที่ developer ไม่มีส่วนร่วม, การทำงานเดิมๆซ้ำๆ หรือแม้กระทั่งการ copy files ทุกวัน วันละ 2-3 รอบแล้วต้องนั่งรอ

ยกตัวอย่างเช่นถ้างานทุกวันของ Developer คือการ compile source code ที่ให้เวลา 10 นาทีต่อการ compile 1 ครั้ง
วันนึง Developer ต้อง compile ประมาณ 10 รอบ หมายความว่าในแต่ละวัน Developer จะเสียเวลา compile ไป 100 นาที = 1.5 ชม กว่าๆ

ถ้า Developer มีเงินเดือน 30,000 บาท หรือประมาณ 1,500 บาทต่อวัน ( นับ 20 วันทำงาน ) หมายความว่าเราอาจจะเสียเวลาของ Developer ใช้ในการ compile code ประมาณ 300 บาทต่อวัน หรือ 6,000 บาทต่อเดือน

ถ้าเราเอาเงินจำนวนนี้มาอัพเกรดเครื่อง Computer ให้ Developer เพื่อที่จะลดเวลาจาก 10 นาทีเป็น 5 นาที หมายความว่าเราจะมีเวลาให้ developer ใช้ในการทำงาน(เขียนโปรแกรม หรือ ออกแบบระบบให้ดีขึ้น) ซึ่งจะมีประโยชน์มากกว่าการรอ compile….