21 March 2014

เขียนโปรแกรมให้เป็น คิดกันอย่างไร? แก้ปัญหากันอย่างไร? - ตอนที่ 3

Updated on

        เว้นช่วงบทความหัวข้อนี้กันไประยะหนึ่ง เพราะงานรุมเร้าและอื่นๆอีกมากมาย (รวมไปถึงขี้เกียจด้วย) คราวนี้เจ้าของบล็อกก็ได้วนเวียนกลับมาทำบทความต่อจากเดิมที่ทำไว้ใน [Android Dev Tips] เขียนโปรแกรมให้เป็น คิดกันอย่างไร? แก้ปัญหากันอย่างไร? [ตอนที่ 2]

        โดยในบทความนี้ก็จะพูดถึงเรื่องของDeveloper กับ User กันเสียหน่อย

การจะเป็นนักพัฒนาแอนดรอยด์ที่ดีควรเริ่มจากอะไรเป็นอย่างแรก?

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

        "ไปซื้ออุปกรณ์แอนดรอยด์มาก่อนแล้วใช้งานให้ชำนาญซะ"


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

        เหตุผลก็คือ

        Dev ที่ไม่เคยเป็น User มาก่อน ก็ไม่มีทางที่จะทำแอปพลิเคชันที่ดีได้

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


        ยกตัวอย่างเป็น Dev ที่พัฒนาแอปพลิเคชันที่ใช้งาน GPS แต่เวลาทดสอบกลับนั่งทดสอบอยู่ในห้อง เพราะดันไม่รู้ว่า GPS ใช้งานในอาคารจะจับตำแหน่งช้าหรือจับตำแหน่งไม่ได้เลย ในขณะที่ Dev ที่เคยเป็น User มาก่อนแล้วเคยใช้งานแอปพลิเคชันพวก GPS ก็จะรู้ว่าต้องออกไปทดสอบข้างนอก วิ่งซักรอบสองรอบเพื่อดูการทำงาน ส่วน Dev ที่ไม่รู้ก็นั่งอยู่หน้าคอมแก้ปัญหาต่อไป สุดท้ายก็จะมาถามเจ้าของบล็อกว่าทำไม GPS ไม่ทำงาน เจ้าของบล็อกก็จะชอบตอบว่า "หยิบมือถือแล้วออกไปวิ่งข้างนอกซักสองรอบนะครับ แล้วค่อยกลับมาถามผมใหม่"

        นอกจากนี้การใช้งานอุปกรณ์แอนดรอยด์ชำนาญก็ยังเป็นที่มาของ UI (User Interface) กับ UX (User Experience) อีกด้วย เพราะการออกแบบ UI & UX ที่ดีจะต้องตอบโจทย์การใช้งานได้และมีการใช้งานที่สะดวก ถ้า Dev เคยใช้แอนดรอยด์แค่กะปริบกะปรอยก็ย่อมไม่รู้ว่า UI & UX ที่ตอบโจทย์ผู้ใช้นั้นคืออะไร

จะเขียนให้คนอื่นใช้หรือจะเขียนไว้ใช้เองกันแน่ ?

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

        แต่ทว่า User จะใช้ได้ง่ายด้วยหรือป่าว?

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


        ดังนั้นการหัดใช้แอนดรอยด์ให้ชำนาญจะช่วยให้ Dev เข้าใจถึงความรู้สึกของ User ว่าเวลาใช้งานส่วนใหญ่จะมีการใช้งานอย่างไร แอปพลิเคชันควรมีเมนูย่อยอย่างไร เยอะแค่ไหน และเวลาใช้งานแอปพลิเคชันอื่นๆอยู่ก็อาจจะเจอ Force Close ซึ่งสามารถเรียนรู้และนำไปเป็นบทเรียนได้ว่ามี Bug ในกรณีแบบนั้นๆด้วย (แต่ทางที่ดีก็ควรหา User มาทดสอบจะดีกว่า)

จงทดสอบเพื่อหาจุดที่ผิดพลาดไม่ใช่หาความสำเร็จ

        เจ้าของบล็อกเจอมาไม่น้อยเหมือนกันที่ Dev ลองเขียนแอปพลิเคชัน แล้วทดสอบด้วยการลองกดเอง ซึ่งการทำแบบนี้จะไม่มีทางเกิด Bug หรือ Force Close ได้เลย เพราะตัวเองมัวแต่กดตามที่เขียนไว้ แต่สำหรับ User นั้น เราจะไม่สามารถควบคุมการใช้งานของ User ได้อยู่แล้ว เพราะงั้น User อาจจะทำอะไรบางอย่างที่นอกเหนือจากที่เขียนไว้ จึงทำให้เจอ Bug หรือ Force Close ขึ้นมาได้

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



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

        แต่ทว่าน้องแกดันทดสอบอะไรที่ตัวเองเขียนไว้อย่างเช่นกด 4 + 5 พอกด = ผลลัพธ์ก็ได้เท่ากับ 9 ลองกด (3x5)+5 ผลลัพธ์ก็ได้เป็น 20

        พอเอามาให้เจ้าของบล็อกทดสอบดูบ้าง เจ้าของบล็อกก็จัดเลย กด -4+1 เป็นอย่างแรกเลย ผลก็คือ Force Close ทันที เพราะไม่ได้เขียนรองรับส่วนนี้ไว้ พอลองกด (6)5 ก็ Force Close เช่นกัน ยังไม่พอ เจ้าของบล็อกจิ้ม 1+.5 กับ 1.0.0.0.0+5 ด้วย

        เจ้าของบล็อกโรคจิตหรือป่าว? เค้าไม่ได้ให้กดอะไรแปลกๆแบบนั้น

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

        ดังนั้นจากตัวอย่างที่ยกมาเล่าให้ฟังควรทำอะไรบ้าง?

                • ป้องกันไม่ให้ใส่สัญลักษณ์นำหน้า

                • ต้องใส่ตัวเลขก่อนที่จะใส่จุดทศนิยม

                • เมื่อตัวเลขนั้นๆใส่จุดทศนิยมไปแล้วจะใส่เพิ่มอีกไม่ได้แล้ว

หัดใช้งานและพยายามทำความรู้จักกับมัน

        กลับมาที่การหัดใช้แอนดรอยด์ให้เป็นกันต่อ ในการใช้แอนดรอยด์ให้เป็นนั้นไม่ใช่แค่ว่าใช้งานเป็นผิวเผินเท่านั้น แต่ควรจะรู้ให้ได้ว่าฟีเจอร์นั้นเรียกว่าอะไร? แถบตรงนี้เรียกว่าอะไร? ลูกเล่นแบบนี้เรียกว่าอะไร?


        เพราะสิ่งเหล่านี้นี่ล่ะคือสิ่งที่เรียกว่า "Keyword" ที่จะนำไปใช้ค้นหาเพื่อศึกษาต่อได้

        จะค้นหาว่า "วิธีการทำให้เครื่องเอียงได้" หรือว่าจะค้นหาว่า "การใช้งาน Accelerometer" ก็ลองเอาไปคิดดูต่อละกัน ว่าอันไหนจะค้นหาเจอได้ง่ายและศึกษาต่อยอดได้ง่ายกว่า

จะเสียเงินซื้ออุปกรณ์แอนดรอยด์ไปทำไมในเมื่อ Emulator ก็มีให้ใช้

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

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

        Emulator ไม่ได้ตอบโจทย์การใช้งานแทนเครื่องจริงทั้งหมด อย่างเช่น พฤติกรรมการกดหน้าจอ แอปพลิเคชันที่มี UX ที่ดีจะนิยมวางตำแหน่งปุ่มที่เป็นเชิง Positive (ปุ่มที่จูงใจให้กด) หรือกดบ่อยๆอยู่ชิดฝั่งขวามือของจอ เพราะว่า User จะได้สามารถใช้มือขวาที่ถือเครื่องแล้วกดปุ่มนั้นๆได้สะดวก ซึ่งความรู้สึกนี้ไม่มีทางรู้ได้แน่ๆถ้ายังเอาเม้าส์จิ้มหน้าจอบน Emulator ไปวันๆ



สรุปใจความในตอนที่ 3 นี้

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

        ขอสรุปเนื้อหาโดยรวมให้เลยละกัน

        • อยากเป็น Dev ก็ไปหัดเป็น User ให้ชำนาญก่อนซะ

        • นึกถึงความรู้สึกของ User ทุกครั้งที่ออกแบบ UI & UX

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

        • ถ้าเป็นไปได้หาเหยื่อซักคนมาเป็น User Tester เถอะ ยิ่งใช้เป็นน้อยเท่าไรยิ่งดี

        • ควรมีเครื่องแอนดรอยด์อย่างน้อยหนึ่งเครื่อง ส่วน Emulator ใช้ทดสอบบางกรณีเท่านั้น

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

        • ที่พิมมาข้างต้นนี้ ให้นำไปพัฒนาตนเองให้กลายเป็น Dev ที่เก่งให้ได้ล่ะ


        ขอทิ้งท้ายก่อนจะจบบทความนี้ว่า

        ถ้าไม่เคยเป็น User ก็ไม่สามารถรู้ว่าแอปพลิเคชันที่ดีต้องเป็นยังไง