เรื่องมีอยู่ว่ามาวันนึงผมเกิดความรู้สึกเบื่อ รู้สึกว่างานที่ทำอยู่ก็ไม่มีอะไรใหม่ ๆ ชีวิตเริ่มจำเจ เลยอยากหาอะไรทำ และถ้าให้ดีก็อยากให้อะไรที่ทำมันสร้างรายได้ด้วย คิดอยู่พักนึงเลยตัดสินใจว่าลองศึกษาเขียน Mobile Application ละกัน ทั้งที่ตัวเองก็ไม่เคยเขียนโปรแกรมเลยทั้งชีวิต (เอาจริง ๆ จำได้ว่าเคยเรียน Pascal ตอนปี 1 เมื่อ 10 กว่าปีที่แล้ว แต่ก็ไม่มีอะไรเกี่ยวกับ Pascal เหลืออยู่ในสมองเลย) คิดแค่ว่า เราก็เรียนวิศวะมา (เครื่องกล) ก็คงทำได้แหละ
เริ่มศึกษาการเขียนโปรแกรม
พอตัดสินใจอย่างนั้นก็เริ่มหาข้อมูลว่าจะเขียนบน iOS หรือ Android ดี จนมีเพื่อนคนนึงแนะนำว่าถ้าจะเขียน App ขาย เขียน iOS ดีกว่า (อันนี้ไม่รู้จริงหรือเปล่า แต่ผมก็เชื่อไปแล้ว) เมื่อตัดสินใจจะเขียน iOS App ก็พบว่าเราสามารถเขียนได้ 2 ภาษา คือ Objective-C กับ swift พอดู syntax ของ Objective-C บอกตรง ๆ ว่ามึน นี่มันอะไรกัน ภาษากรีกโบราณหรือเปล่า ในขณะที่ Swift ดูอ่านง่ายกว่าเยอะ แต่ผมก็ยังไม่ตัดสินใจ เลยลองถามผู้รู้ท่านนึงในวงการ เค้าก็บอกว่าให้เขียน Swift ไปเลย บอกตรง ๆ ตอนนั้นรู้สึกดีที่ไม่ต้องเขียน Objective-C
เอาล่ะ เมื่อตัดสินใจได้แล้วว่าจะเขียนภาษา Swift ก็ต้องดูว่าจะเริ่มศึกษาจากตรงไหนดี โชคดีที่ผมอ่านภาษาอังกฤษพอได้ เพราะ Apple มี document ของ Swift ไว้ให้อ่าน ที่ทำไว้ค่อนข้างดีทีเดียว
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309 ส่วนถ้าเป็นภาษาไทยก็มีอันนี้
http://share.olanlab.com/th/it/blog/view/220 ผมเริ่มอ่าน document ของ Apple ทุกวัน วันละประมาณ 2 ชั่วโมง หลังลูกหลับ (ลูกคนโต 3 ขวบกว่า คนเล็ก 6 เดือน) ใช้เวลาเกือบเดือนถึงจะอ่านจบ อ่านจบแล้วก็ยังมีงง ๆ อยู่ เพราะยังไม่เคยลองเขียนอะไรจริง ๆ เลย มีส่วนที่ไม่เข้าใจเยอะพอสมควรแม้ว่าจะพยายามอ่านย้อนไปมา เพื่อทำความเข้าใจแล้วก็เถอะ ตรงนี้เป็นส่วนที่น่าเบื่อ เพราะมีแต่อ่านกับอ่าน แต่ตั้งใจแล้วว่าจะอ่านให้จบก่อนถึงจะเริ่มเขียนจริง จะได้เห็นภาพรวมทั้งหมดของสิ่งที่จะทำก่อน ส่วนตัวผมเชื่อว่าน่าจะเป็นวิธีที่ดีกว่าสลับไปมา
พออ่านจบก็ถึงเวลาลองของ ปัญหาคือที่บ้านมีแต่ PC (ตกลงคิดถูกมั้ยที่เลือก iOS?) จะเขียน iOS App ต้องใช้ Mac เลยไปดูราคา Mac แต่ละรุ่น ถูกสุดคือ Mac Mini แต่ไม่มีจอ พกพาลำบาก ไม่ตอบโจทย์ เลยลองดู Macbook Air เพราะเป็น Notebook Mac ที่ถูกที่สุดแล้ว ก่อนซื้อก็หาข้อมูลว่า Mabook Air นี่พอมั้ยสำหรับเขียน App อ่าน ๆ ไปก็พบว่าพอ ถ้า App เราไม่ได้ใหญ่ซับซ้อนมาก จะมีปัญหาก็แค่จอไม่ใช่ retina อ่าน code อ่าจจะปวดตาหน่อย แต่เอาเถอะไม่อยากลงทุนเยอะ เลยตัดสินใจถอย Macbook Air รุ่นถูกสุดมา พร้อมผ่อน 0% 6 เดือน (3 หมื่นกว่าบาท)
พอได้ Macbook Air มาก็ต้องลง Xcode ซึ่งเป็นโปรแกรมที่ใช้ พัฒนา App ของ Apple ตอนนี้อย่าเพิ่งรีบเสียเงินสมัคร Apple Development Program แค่ Apple ID ธรรมดาก็เขียน App และ test บน device ของเราได้ เพราะค่าธรรมเนียมเป็นรายปี นั่นหมายความว่าทุกวันที่ผ่านไปเป็นเงินทั้งนั้น ผมแนะนำว่ารอให้ App ใกล้เสร็จ หรือเมื่อจำเป็นค่อยสมัคร แล้วก็ลองหา tutorial ตามอินเตอร์เน็ตทำไปเรื่อย อันแรกที่ผมแนะนำคือ tutorial ของ Apple เอง
https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ ทำไปก็คิดไปว่าจะเขียน App อะไรดี เบื้องต้นอยากได้ App เกี่ยวกับการคำนวณ เพราะผมเรียนมาสายวิศวะ น่าจะทำได้ดีกว่า App ประเภทอื่น เป็นจังหวะเดียวกับที่แฟนผมบอกว่าบ้านใกล้ถึงเวลารีไฟแนนซ์ได้แล้ว ผมเลยคิดว่าทำ App คำนวณสินเชื่อบ้านดีกว่า เลยเข้าไปดูใน App Store ว่ามี App แบบนี้อยู่แล้วมั้ย ปรากฎว่ามีแล้ว (แอบเซ็ง) แต่พอดูไปดูมาปรากฎว่า App ที่มีอยู่ไม่ใช่แบบที่ผมต้องการ บางอันกรอกได้ดอกเบี้ยเดียว บางอันกรอกได้หลายดอกเบี้ยแต่ข้อมูลไม่ครบ แล้วก็กรอกดอกเบี้ยเป็นเดือนไม่ได้ ผมเลยคิดว่า ทำ App คำนวณผ่อนบ้านแบบที่ กรอกได้หลายดอกเบี้ย แล้วก็ข้อมูลครบอย่างที่อยากได้ดีกว่า
เริ่มเขียน App
ก่อนจะเริ่มเขียนโปรแกรมอะไร ผมก็ต้องเริ่มจากการหาสมการก่อน ว่าถ้าดอกเบี้ยเป็นแบบนี้ มีหลายช่วง แต่ยอดผ่อนชำระต่อเดือนเท่ากัน และมีอายุสัญญาชัดเจน เราจำคำนวณเงินผ่อนชำระต่อเดือนได้ยังไง ผมก็เริ่มจากการ google สมการ แต่ก็พบว่ามีแต่สมการคิดดอกเบี้ยเดียว ไม่มีแบบหลายดอกเบี้ย ในเมื่อหาไม่เจอก็ต้องมานั่งหาสมการเอง เขียนไปเขียนมาจนได้สมการมา ก็เอาสมการมาเขียนโปรแกรมหาค่า ดีที่ Xcode มี playground ให้ใช้ ซึ่งสะดวกมากในการทดสอบการคำนวณของโปรแกรมโดยที่ยังไม่ต้องเขียน App เป็นรูปเป็นร่างอะไร
เมื่อเริ่มเขียน App ไปเรื่อย ๆ ผมก็เริ่มเข้าใจสิ่งที่อ่านไปก่อนหน้า อย่างเช่น เมื่อไหร่จะใช้ protocol กับ delegate, หรือ เราจะใช้ getter และ setter ของ properties เมื่อไหร่ คืออะไรพวกนี้เราอาจจะไม่รู้ว่ามันมีให้เราใช้ถ้าเราเป็นมือใหม่ ซึ่งการ "อ่าน" อย่างละเอียด 1 รอบก่อน ทำให้เราเข้าใจอะไรได้ดีขึ้น ถึงจะจำ syntax ไม่ได้ ก็แค่ย้อนกลับไปอ่าน หรือ google เอา ส่วนการใช้ UI และอะไรที่นอกเหนือจาก Swift document ของ Apple ผมแนะนำ
https://www.raywenderlich.com/ กับ
https://www.appcoda.com เป็นเวปทีมี tutorial เกี่ยวกับการเขียน App iOS ไว้เยอะ และเนื้อหาดี
อย่างนึงที่ผมอยากจะบอกสำหรับผู้เริ่มต้นเขียน program คือ อย่า copy paste code จากตัวอย่าง ให้พิมพ์ใหม่เอา เพราะถ้าเรา copy paste เราจะจำอะไรเกี่ยวกับ code นั้นไม่ค่อยได้ อีกอย่าง XCode มี auto complete หมายความว่าถ้าเราพิมพ์ไป XCode จะมี option parameter มาให้เลือก ซึ่งตรงนี้อาจจะทำให้เรารู้ว่าเราสามารถทำอะไรได้มากกว่าแค่ code ที่ copy มา
ปัญหาอื่น ๆ ที่เจอก็ทำไปหาข้อมูลไป ส่วนใหญ่คำตอบที่ได้จะมาจาก Stack Overflow ซึ่งเป็น communities ชื่อดังของโปรแกรมเมอร์ ก็เป็นภาษาอังกฤษอีกเหมือนกัน แต่ถึงจะไม่เก่งภาษาอังกฤษ ถ้าลองอ่าน code ในคำตอบดูก็อาจจะช่วยแก้ปัญหาได้เหมือนกัน ผมเขียนไปเรื่อยถึงจะเจอปัญหา แทนที่จะเบื่อผมกลับรู้สึกสนุกแฮะ รู้สึกว่าเราน่าจะเลือกเรียน วิศวะ คอมพ์ มากกว่า 555 แต่ส่วนนึงผมคิดว่ามันเป็นเพราะสมัยนี้ เขียนอะไรไปมันสามารถเห็น จับต้องได้บนโทรศัพท์ของเรา มันเลยทำให้สนุกมากกว่ากว่าเขียนโปรแกรมสมัยก่อน (อันนี้คิดเอาเอง)
เขียน ๆ แก้ ๆ เกือบทุกวัน ประมาณวันละ 2 ชั่วโมงหลังลูกหลับ (ตามเคย) เขียนไปก็นึกฟังก์ชันที่อยากเพิ่มเข้าไปได้ ก็เพิ่มไปเรื่อย แล้วก็ได้ App ที่น่าพอใจ แต่มีสิ่งนึงที่ผมพลาด ไม่ได้ทำตั้งแต่แรกคือการทดสอบกับการคำนวณจริงของธนาคาร เพราะที่ผ่านมาผมก็แค่ลองทดสอบใส่ดอกเบี้ยเดียวแล้วเทียบกับการคำนวณของเวปของธนาคารแห่งประเทศไทย ก็พบว่าตรงกัน เลยไม่ได้คิดอะไรมาก ส่วนสินเชื่อบ้านที่แฟนกู้อยู่ก็ใช้ทดสอบไม่ได้เพราะธนาคารให้ผ่อนชำระไม่เท่ากันตลอดอายุสัญญา คือ 2 ปีแรกผ่อนน้อยกว่าปีต่อ ๆ ไป
ทดสอบกับการกู้จริง
หลังจากได้ App ที่เป็นที่พอใจแล้ว ผมก็ขอข้อมูลจากเพื่อน ๆ ที่กู้บ้านว่า App เราคำนวณได้ใกล้เคียงมั้ย ซึ่งผลลัพธ์พบว่าคลาดเคลื่อนมากกว่าที่ควรจะเป็น ตอนนั้นเซ็งมาก ไม่เข้าใจ เช็คทุกอย่าง ก็พบว่าสมการของผมไม่ได้ผิดพลาดตรงไหน หาข้อมูลไปเรื่อย ๆ จึงพบว่าจริง ๆ ธนาคารไม่ได้คำนวณแบบที่ผมคิด แต่ธนาคารใช้ดอกเบี้ยสุดท้ายดอกเบี้ยเดียว ซึ่งเป็นดอกเบี้ยสูงสุด แล้วบวกค่าเผื่อเล็กน้อย แตกต่างกันไปในแต่ละธนาคาร แล้วปัดเศษหลักร้อย ด้วยเหตุผลว่า ดอกเบี้ย MLR และ MRR นั้นเป็นดอกเบี้ยลอยตัว เปลี่ยนแปลงได้เมื่อเวลาผ่านไป ธนาคารเลยเอาดอกเบี้ย MLR หรือ MRR บวกส่วนต่างเข้าไป เพื่อในอนาคตถ้าดอกเบี้ยปรับตัวสูงขึ้น จะได้ไม่เป็นภาระกับผู้กู้มาก (อันนี้ผมสรุปจากข้อมูลที่หาดูเอง ถ้าสิ่งที่ผมคิดมันไม่ใช่ รบกวนผู้รู้บอกทีครับ) ดังนั้นถ้าดอกเบี้ยไม่มีการเปลี่ยนแปลง แล้วเราผ่อนตามที่ธนาคารกำหนด เราจะผ่อนหมดก่อนอายุสัญญา
มาถึงตรงนี้ผมต้องตัดสินใจว่าจะแก้โปรแกรมตามการคำนวณของธนาคาร หรือจะยึดหลักคำนวณตามดอกเบี้ยจริง ที่ให้ยอดเงินกู้เหลือศูนย์พอดีในงวดสุดท้ายของอายุสัญญา คิดไปคิดมาผมเลยตัดสินใจแก้โปรแกรมของผมดีกว่า เพราะเข้าใจว่าคนส่วนใหญ่น่าจะอยากได้ยอดผ่อนชำระที่ใกล้เคียงกับการกู้จริงที่สุด
ผมเลยต้องมาไล่แก้โปรแกรมใหม่ แต่ครั้งนี้ดีหน่อยเพราะผมเริ่มเข้าใจการเขียนโปรแกรมมากขึ้น 3 เดือนที่ผ่านมา รู้สึกถึงการพัฒนาของตัวเองได้ การแก้เลยไม่ได้เสียเวลามาก แม้ว่าการแก้ใหม่จะไม่ได้ให้ผลลัพธ์ที่ตรงกับทุกธนาคาร เพราะแต่ละธนาคารคิดแตกต่างกันเล็กน้อย แต่ผลลัพธ์พบว่าค่อนข้างใกล้เคียงทีเดียว
ส่ง App ขึ้น App Store
การที่เราจะส่ง App ของเราขึ้น App Store ได้นั้นเราต้องเสียค่าสมาชิกของ Apple Developer Program ก่อน ตอนที่ผมสมัครนั้นปีละ 3,590 บาท หลังจากพยามเลี่ยงมานาน แต่มาถึงนี่ยังไงก็ต้องเสีย ก็สมัครไป ขั้นตอนการสมัครก็ไม่ได้ง่าย แต่ก็ไม่ยากจนเกินไป สมัครเสร็จประมาณ 3 วัน Apple ก็แจ้งมาว่าผมสามารถใช้ account ของผมได้แล้ว สิ่งสุดท้ายที่ผมต้องเตรียมก่อนส่ง App ขึ้น Store คือ Icon ของ App นั่นเอง ซึ่ง Apple กำหนดให้มีหลายขนาด ซึ่งหลายขนาดไม่ใช่ปัญหา ผมเคยใช้ Adobe Illustrator อยู่เมื่อนานมาแล้ว แม้จะไม่ได้เชี่ยวชาญ แต่แค่ Icon คิดว่าทำได้ แต่ปัญหาคือ ผมไม่มี Illustrator เหลืออยู่ในคอมเครื่องไหนแล้ว จะให้ซื้อคงไม่ไหว เลยลองหา program อื่นดู ก็มาเจอ InkScape ซึ่งเป็น Open Source ก็โชคดีไปที่ โปรแกรมใช้ได้ดี และไม่ต้องเสียเงิน
เมื่อทุกอย่างพร้อมก็ถึงเวลาส่ง App ของผม ที่ชื่อ Mortgage Calculator TH ขึ้น App Store เสียที ถ้าใช้ Xcode การ submit App ถือว่าง่ายไม่ยุ่งยาก จากที่หาข้อมูลดูถ้าใช้ Manual จะยุ่งยากกว่า การส่ง App ขึ้น Store นั้น ไม่ใช่ว่าส่งปุ๊บมันจะขึ้นปั๊บ Apple จะ Review App ก่อนว่าจะปล่อยให้ขึ้น Store มั้ย ซึ่งก็ใช้เวลาอยู่ แต่ Apple ก็จะมีเมลล์มาบอกตลอดว่าสถานะ App ของเราไปถึงไหนแล้ว
ระหว่างรอก็ตื่นเต้น กลัว App จะโดน Reject ไม่แน่ใจว่าเราไปแก้ Private API ตรงไหนหรือเปล่า ถึงจะค่อนข้างมั่นใจว่าไม่แล้วก็ตาม ผ่านไป ประมาณ 2 วัน Apple ก็มีเมลล์แจ้งว่า App เราพร้อมแล้ว เข้าไปดู App Store ก็เจอ App ของตัวเอง ตอนนั้นตื่นเต้นมาก ภูมิใจมาก แม้ไม่รู้ว่ามันจะขายได้มั้ย แต่ก็เป็นความสุขเล็ก ๆ บอกไม่ถูก
สำหรับผู้ที่สนใจจะเริ่มศึกษาเขียน Mobile Application
ผมแนะนำว่าลองศึกษาดูเลย ไม่ได้ยากเกินไป แต่ถ้ารู้ภาษาอังกฤษจะดีมาก เพราะความรู้ส่วนใหญ่เป็นภาษาอังกฤษ ส่วนตัวผมยังไม่เจอหนังสือภาษาไทยที่เขียนได้ดี หรืออาจจะมีแต่ผมหาไม่เจอเอง ไม่จำเป็นต้องลงทุนซื้อ Macbook อย่างผมก็ได้ เท่าที่ผมดูผ่าน ๆ การเขียนบน Android ก็ไม่ได้ยากไปกว่า iOS แต่จะง่ายกว่าหรือเปล่าไม่แน่ใจ ผมเชื่อว่าถ้าตั้งใจ ก็ทำได้ ไม่จำเป็นต้องมีความรู้การเขียนโปรแกรมมาก่อน แค่มีความตั้งใจ ผมเชื่อว่ามันไม่ยากอย่างที่บางคนคิด
สุดท้ายนี้หวังว่ากระทู้นี้จะเป็นกำลังใจให้ใครที่กำลังคิดจะเขียน Mobile Application โดยที่ไม่มีพื้นฐานมาก่อนบ้าง
และขอฝาก Mortgage Calculator TH Application ที่ผมทำเองกับมือไว้ด้วยครับ
https://itunes.apple.com/app/id1367344965
คิดว่าคงมีประโยขน์กับหลาย ๆ คน โหลดฟรีถึงสิ้นเดือนนี้ครับ หลังจากนั้นจะขาย ก็ต้องลุ้นกันดูว่าจะขายได้มั้ย 555
แชร์ประสบการณ์ การเขียน iOS App เริ่มจากศูนย์ และ แนะนำ App iOS สำหรับคำนวณสินเชื่อบ้าน
เริ่มศึกษาการเขียนโปรแกรม
พอตัดสินใจอย่างนั้นก็เริ่มหาข้อมูลว่าจะเขียนบน iOS หรือ Android ดี จนมีเพื่อนคนนึงแนะนำว่าถ้าจะเขียน App ขาย เขียน iOS ดีกว่า (อันนี้ไม่รู้จริงหรือเปล่า แต่ผมก็เชื่อไปแล้ว) เมื่อตัดสินใจจะเขียน iOS App ก็พบว่าเราสามารถเขียนได้ 2 ภาษา คือ Objective-C กับ swift พอดู syntax ของ Objective-C บอกตรง ๆ ว่ามึน นี่มันอะไรกัน ภาษากรีกโบราณหรือเปล่า ในขณะที่ Swift ดูอ่านง่ายกว่าเยอะ แต่ผมก็ยังไม่ตัดสินใจ เลยลองถามผู้รู้ท่านนึงในวงการ เค้าก็บอกว่าให้เขียน Swift ไปเลย บอกตรง ๆ ตอนนั้นรู้สึกดีที่ไม่ต้องเขียน Objective-C
เอาล่ะ เมื่อตัดสินใจได้แล้วว่าจะเขียนภาษา Swift ก็ต้องดูว่าจะเริ่มศึกษาจากตรงไหนดี โชคดีที่ผมอ่านภาษาอังกฤษพอได้ เพราะ Apple มี document ของ Swift ไว้ให้อ่าน ที่ทำไว้ค่อนข้างดีทีเดียว https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309 ส่วนถ้าเป็นภาษาไทยก็มีอันนี้ http://share.olanlab.com/th/it/blog/view/220 ผมเริ่มอ่าน document ของ Apple ทุกวัน วันละประมาณ 2 ชั่วโมง หลังลูกหลับ (ลูกคนโต 3 ขวบกว่า คนเล็ก 6 เดือน) ใช้เวลาเกือบเดือนถึงจะอ่านจบ อ่านจบแล้วก็ยังมีงง ๆ อยู่ เพราะยังไม่เคยลองเขียนอะไรจริง ๆ เลย มีส่วนที่ไม่เข้าใจเยอะพอสมควรแม้ว่าจะพยายามอ่านย้อนไปมา เพื่อทำความเข้าใจแล้วก็เถอะ ตรงนี้เป็นส่วนที่น่าเบื่อ เพราะมีแต่อ่านกับอ่าน แต่ตั้งใจแล้วว่าจะอ่านให้จบก่อนถึงจะเริ่มเขียนจริง จะได้เห็นภาพรวมทั้งหมดของสิ่งที่จะทำก่อน ส่วนตัวผมเชื่อว่าน่าจะเป็นวิธีที่ดีกว่าสลับไปมา
พออ่านจบก็ถึงเวลาลองของ ปัญหาคือที่บ้านมีแต่ PC (ตกลงคิดถูกมั้ยที่เลือก iOS?) จะเขียน iOS App ต้องใช้ Mac เลยไปดูราคา Mac แต่ละรุ่น ถูกสุดคือ Mac Mini แต่ไม่มีจอ พกพาลำบาก ไม่ตอบโจทย์ เลยลองดู Macbook Air เพราะเป็น Notebook Mac ที่ถูกที่สุดแล้ว ก่อนซื้อก็หาข้อมูลว่า Mabook Air นี่พอมั้ยสำหรับเขียน App อ่าน ๆ ไปก็พบว่าพอ ถ้า App เราไม่ได้ใหญ่ซับซ้อนมาก จะมีปัญหาก็แค่จอไม่ใช่ retina อ่าน code อ่าจจะปวดตาหน่อย แต่เอาเถอะไม่อยากลงทุนเยอะ เลยตัดสินใจถอย Macbook Air รุ่นถูกสุดมา พร้อมผ่อน 0% 6 เดือน (3 หมื่นกว่าบาท)
พอได้ Macbook Air มาก็ต้องลง Xcode ซึ่งเป็นโปรแกรมที่ใช้ พัฒนา App ของ Apple ตอนนี้อย่าเพิ่งรีบเสียเงินสมัคร Apple Development Program แค่ Apple ID ธรรมดาก็เขียน App และ test บน device ของเราได้ เพราะค่าธรรมเนียมเป็นรายปี นั่นหมายความว่าทุกวันที่ผ่านไปเป็นเงินทั้งนั้น ผมแนะนำว่ารอให้ App ใกล้เสร็จ หรือเมื่อจำเป็นค่อยสมัคร แล้วก็ลองหา tutorial ตามอินเตอร์เน็ตทำไปเรื่อย อันแรกที่ผมแนะนำคือ tutorial ของ Apple เอง https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ ทำไปก็คิดไปว่าจะเขียน App อะไรดี เบื้องต้นอยากได้ App เกี่ยวกับการคำนวณ เพราะผมเรียนมาสายวิศวะ น่าจะทำได้ดีกว่า App ประเภทอื่น เป็นจังหวะเดียวกับที่แฟนผมบอกว่าบ้านใกล้ถึงเวลารีไฟแนนซ์ได้แล้ว ผมเลยคิดว่าทำ App คำนวณสินเชื่อบ้านดีกว่า เลยเข้าไปดูใน App Store ว่ามี App แบบนี้อยู่แล้วมั้ย ปรากฎว่ามีแล้ว (แอบเซ็ง) แต่พอดูไปดูมาปรากฎว่า App ที่มีอยู่ไม่ใช่แบบที่ผมต้องการ บางอันกรอกได้ดอกเบี้ยเดียว บางอันกรอกได้หลายดอกเบี้ยแต่ข้อมูลไม่ครบ แล้วก็กรอกดอกเบี้ยเป็นเดือนไม่ได้ ผมเลยคิดว่า ทำ App คำนวณผ่อนบ้านแบบที่ กรอกได้หลายดอกเบี้ย แล้วก็ข้อมูลครบอย่างที่อยากได้ดีกว่า
เริ่มเขียน App
ก่อนจะเริ่มเขียนโปรแกรมอะไร ผมก็ต้องเริ่มจากการหาสมการก่อน ว่าถ้าดอกเบี้ยเป็นแบบนี้ มีหลายช่วง แต่ยอดผ่อนชำระต่อเดือนเท่ากัน และมีอายุสัญญาชัดเจน เราจำคำนวณเงินผ่อนชำระต่อเดือนได้ยังไง ผมก็เริ่มจากการ google สมการ แต่ก็พบว่ามีแต่สมการคิดดอกเบี้ยเดียว ไม่มีแบบหลายดอกเบี้ย ในเมื่อหาไม่เจอก็ต้องมานั่งหาสมการเอง เขียนไปเขียนมาจนได้สมการมา ก็เอาสมการมาเขียนโปรแกรมหาค่า ดีที่ Xcode มี playground ให้ใช้ ซึ่งสะดวกมากในการทดสอบการคำนวณของโปรแกรมโดยที่ยังไม่ต้องเขียน App เป็นรูปเป็นร่างอะไร
เมื่อเริ่มเขียน App ไปเรื่อย ๆ ผมก็เริ่มเข้าใจสิ่งที่อ่านไปก่อนหน้า อย่างเช่น เมื่อไหร่จะใช้ protocol กับ delegate, หรือ เราจะใช้ getter และ setter ของ properties เมื่อไหร่ คืออะไรพวกนี้เราอาจจะไม่รู้ว่ามันมีให้เราใช้ถ้าเราเป็นมือใหม่ ซึ่งการ "อ่าน" อย่างละเอียด 1 รอบก่อน ทำให้เราเข้าใจอะไรได้ดีขึ้น ถึงจะจำ syntax ไม่ได้ ก็แค่ย้อนกลับไปอ่าน หรือ google เอา ส่วนการใช้ UI และอะไรที่นอกเหนือจาก Swift document ของ Apple ผมแนะนำ https://www.raywenderlich.com/ กับ https://www.appcoda.com เป็นเวปทีมี tutorial เกี่ยวกับการเขียน App iOS ไว้เยอะ และเนื้อหาดี
อย่างนึงที่ผมอยากจะบอกสำหรับผู้เริ่มต้นเขียน program คือ อย่า copy paste code จากตัวอย่าง ให้พิมพ์ใหม่เอา เพราะถ้าเรา copy paste เราจะจำอะไรเกี่ยวกับ code นั้นไม่ค่อยได้ อีกอย่าง XCode มี auto complete หมายความว่าถ้าเราพิมพ์ไป XCode จะมี option parameter มาให้เลือก ซึ่งตรงนี้อาจจะทำให้เรารู้ว่าเราสามารถทำอะไรได้มากกว่าแค่ code ที่ copy มา
ปัญหาอื่น ๆ ที่เจอก็ทำไปหาข้อมูลไป ส่วนใหญ่คำตอบที่ได้จะมาจาก Stack Overflow ซึ่งเป็น communities ชื่อดังของโปรแกรมเมอร์ ก็เป็นภาษาอังกฤษอีกเหมือนกัน แต่ถึงจะไม่เก่งภาษาอังกฤษ ถ้าลองอ่าน code ในคำตอบดูก็อาจจะช่วยแก้ปัญหาได้เหมือนกัน ผมเขียนไปเรื่อยถึงจะเจอปัญหา แทนที่จะเบื่อผมกลับรู้สึกสนุกแฮะ รู้สึกว่าเราน่าจะเลือกเรียน วิศวะ คอมพ์ มากกว่า 555 แต่ส่วนนึงผมคิดว่ามันเป็นเพราะสมัยนี้ เขียนอะไรไปมันสามารถเห็น จับต้องได้บนโทรศัพท์ของเรา มันเลยทำให้สนุกมากกว่ากว่าเขียนโปรแกรมสมัยก่อน (อันนี้คิดเอาเอง)
เขียน ๆ แก้ ๆ เกือบทุกวัน ประมาณวันละ 2 ชั่วโมงหลังลูกหลับ (ตามเคย) เขียนไปก็นึกฟังก์ชันที่อยากเพิ่มเข้าไปได้ ก็เพิ่มไปเรื่อย แล้วก็ได้ App ที่น่าพอใจ แต่มีสิ่งนึงที่ผมพลาด ไม่ได้ทำตั้งแต่แรกคือการทดสอบกับการคำนวณจริงของธนาคาร เพราะที่ผ่านมาผมก็แค่ลองทดสอบใส่ดอกเบี้ยเดียวแล้วเทียบกับการคำนวณของเวปของธนาคารแห่งประเทศไทย ก็พบว่าตรงกัน เลยไม่ได้คิดอะไรมาก ส่วนสินเชื่อบ้านที่แฟนกู้อยู่ก็ใช้ทดสอบไม่ได้เพราะธนาคารให้ผ่อนชำระไม่เท่ากันตลอดอายุสัญญา คือ 2 ปีแรกผ่อนน้อยกว่าปีต่อ ๆ ไป
ทดสอบกับการกู้จริง
หลังจากได้ App ที่เป็นที่พอใจแล้ว ผมก็ขอข้อมูลจากเพื่อน ๆ ที่กู้บ้านว่า App เราคำนวณได้ใกล้เคียงมั้ย ซึ่งผลลัพธ์พบว่าคลาดเคลื่อนมากกว่าที่ควรจะเป็น ตอนนั้นเซ็งมาก ไม่เข้าใจ เช็คทุกอย่าง ก็พบว่าสมการของผมไม่ได้ผิดพลาดตรงไหน หาข้อมูลไปเรื่อย ๆ จึงพบว่าจริง ๆ ธนาคารไม่ได้คำนวณแบบที่ผมคิด แต่ธนาคารใช้ดอกเบี้ยสุดท้ายดอกเบี้ยเดียว ซึ่งเป็นดอกเบี้ยสูงสุด แล้วบวกค่าเผื่อเล็กน้อย แตกต่างกันไปในแต่ละธนาคาร แล้วปัดเศษหลักร้อย ด้วยเหตุผลว่า ดอกเบี้ย MLR และ MRR นั้นเป็นดอกเบี้ยลอยตัว เปลี่ยนแปลงได้เมื่อเวลาผ่านไป ธนาคารเลยเอาดอกเบี้ย MLR หรือ MRR บวกส่วนต่างเข้าไป เพื่อในอนาคตถ้าดอกเบี้ยปรับตัวสูงขึ้น จะได้ไม่เป็นภาระกับผู้กู้มาก (อันนี้ผมสรุปจากข้อมูลที่หาดูเอง ถ้าสิ่งที่ผมคิดมันไม่ใช่ รบกวนผู้รู้บอกทีครับ) ดังนั้นถ้าดอกเบี้ยไม่มีการเปลี่ยนแปลง แล้วเราผ่อนตามที่ธนาคารกำหนด เราจะผ่อนหมดก่อนอายุสัญญา
มาถึงตรงนี้ผมต้องตัดสินใจว่าจะแก้โปรแกรมตามการคำนวณของธนาคาร หรือจะยึดหลักคำนวณตามดอกเบี้ยจริง ที่ให้ยอดเงินกู้เหลือศูนย์พอดีในงวดสุดท้ายของอายุสัญญา คิดไปคิดมาผมเลยตัดสินใจแก้โปรแกรมของผมดีกว่า เพราะเข้าใจว่าคนส่วนใหญ่น่าจะอยากได้ยอดผ่อนชำระที่ใกล้เคียงกับการกู้จริงที่สุด
ผมเลยต้องมาไล่แก้โปรแกรมใหม่ แต่ครั้งนี้ดีหน่อยเพราะผมเริ่มเข้าใจการเขียนโปรแกรมมากขึ้น 3 เดือนที่ผ่านมา รู้สึกถึงการพัฒนาของตัวเองได้ การแก้เลยไม่ได้เสียเวลามาก แม้ว่าการแก้ใหม่จะไม่ได้ให้ผลลัพธ์ที่ตรงกับทุกธนาคาร เพราะแต่ละธนาคารคิดแตกต่างกันเล็กน้อย แต่ผลลัพธ์พบว่าค่อนข้างใกล้เคียงทีเดียว
ส่ง App ขึ้น App Store
การที่เราจะส่ง App ของเราขึ้น App Store ได้นั้นเราต้องเสียค่าสมาชิกของ Apple Developer Program ก่อน ตอนที่ผมสมัครนั้นปีละ 3,590 บาท หลังจากพยามเลี่ยงมานาน แต่มาถึงนี่ยังไงก็ต้องเสีย ก็สมัครไป ขั้นตอนการสมัครก็ไม่ได้ง่าย แต่ก็ไม่ยากจนเกินไป สมัครเสร็จประมาณ 3 วัน Apple ก็แจ้งมาว่าผมสามารถใช้ account ของผมได้แล้ว สิ่งสุดท้ายที่ผมต้องเตรียมก่อนส่ง App ขึ้น Store คือ Icon ของ App นั่นเอง ซึ่ง Apple กำหนดให้มีหลายขนาด ซึ่งหลายขนาดไม่ใช่ปัญหา ผมเคยใช้ Adobe Illustrator อยู่เมื่อนานมาแล้ว แม้จะไม่ได้เชี่ยวชาญ แต่แค่ Icon คิดว่าทำได้ แต่ปัญหาคือ ผมไม่มี Illustrator เหลืออยู่ในคอมเครื่องไหนแล้ว จะให้ซื้อคงไม่ไหว เลยลองหา program อื่นดู ก็มาเจอ InkScape ซึ่งเป็น Open Source ก็โชคดีไปที่ โปรแกรมใช้ได้ดี และไม่ต้องเสียเงิน
เมื่อทุกอย่างพร้อมก็ถึงเวลาส่ง App ของผม ที่ชื่อ Mortgage Calculator TH ขึ้น App Store เสียที ถ้าใช้ Xcode การ submit App ถือว่าง่ายไม่ยุ่งยาก จากที่หาข้อมูลดูถ้าใช้ Manual จะยุ่งยากกว่า การส่ง App ขึ้น Store นั้น ไม่ใช่ว่าส่งปุ๊บมันจะขึ้นปั๊บ Apple จะ Review App ก่อนว่าจะปล่อยให้ขึ้น Store มั้ย ซึ่งก็ใช้เวลาอยู่ แต่ Apple ก็จะมีเมลล์มาบอกตลอดว่าสถานะ App ของเราไปถึงไหนแล้ว
ระหว่างรอก็ตื่นเต้น กลัว App จะโดน Reject ไม่แน่ใจว่าเราไปแก้ Private API ตรงไหนหรือเปล่า ถึงจะค่อนข้างมั่นใจว่าไม่แล้วก็ตาม ผ่านไป ประมาณ 2 วัน Apple ก็มีเมลล์แจ้งว่า App เราพร้อมแล้ว เข้าไปดู App Store ก็เจอ App ของตัวเอง ตอนนั้นตื่นเต้นมาก ภูมิใจมาก แม้ไม่รู้ว่ามันจะขายได้มั้ย แต่ก็เป็นความสุขเล็ก ๆ บอกไม่ถูก
สำหรับผู้ที่สนใจจะเริ่มศึกษาเขียน Mobile Application
ผมแนะนำว่าลองศึกษาดูเลย ไม่ได้ยากเกินไป แต่ถ้ารู้ภาษาอังกฤษจะดีมาก เพราะความรู้ส่วนใหญ่เป็นภาษาอังกฤษ ส่วนตัวผมยังไม่เจอหนังสือภาษาไทยที่เขียนได้ดี หรืออาจจะมีแต่ผมหาไม่เจอเอง ไม่จำเป็นต้องลงทุนซื้อ Macbook อย่างผมก็ได้ เท่าที่ผมดูผ่าน ๆ การเขียนบน Android ก็ไม่ได้ยากไปกว่า iOS แต่จะง่ายกว่าหรือเปล่าไม่แน่ใจ ผมเชื่อว่าถ้าตั้งใจ ก็ทำได้ ไม่จำเป็นต้องมีความรู้การเขียนโปรแกรมมาก่อน แค่มีความตั้งใจ ผมเชื่อว่ามันไม่ยากอย่างที่บางคนคิด
สุดท้ายนี้หวังว่ากระทู้นี้จะเป็นกำลังใจให้ใครที่กำลังคิดจะเขียน Mobile Application โดยที่ไม่มีพื้นฐานมาก่อนบ้าง
และขอฝาก Mortgage Calculator TH Application ที่ผมทำเองกับมือไว้ด้วยครับ
https://itunes.apple.com/app/id1367344965
คิดว่าคงมีประโยขน์กับหลาย ๆ คน โหลดฟรีถึงสิ้นเดือนนี้ครับ หลังจากนั้นจะขาย ก็ต้องลุ้นกันดูว่าจะขายได้มั้ย 555