ชี้แจง: “คู่มือเขียน iPhone App”

หนังสือเล่มแรกของผม “คู่มือเขียน iPhone App” ก็ได้ออกวางตลาดเรียบร้อยแล้ว ก็หวังว่าจะช่วยเป็นจุดเริ่มต้นเล็กๆ น้อยๆ สำหรับหลายๆ คนที่อยากจะหัดเขียนโปรแกรม หรือแอพ เพื่อใช้งาน iPhone, iPad, iPod touch กันได้บ้าง


iphoneapps.gif

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

บางครั้งที่ผู้อ่านหลายท่าน พิมพ์โค้ดตามหนังสือ และเกิด Error หรือ Warning ขึ้นมา ทั้งๆ ที่พิมพ์ตามตรงเป๊ะทุกตัวอักษรแล้ว และเมื่อเกิดเรื่องเช่นนั้นขึ้น บางครั้งผู้อ่านบางท่าน อาจจะเริ่มทึกทักว่าหนังสือผมผิด หรือหนังสือผมลืมโน่นลืมนี่ ฯลฯ

ผมขอชี้แจงอะไรบางอย่างตรงนี้ครับ โดยอ้างอิงตัวอย่างจาก e-mail ที่ผมตอบผู้อ่านผมบางท่าน (ขอสงวนชื่อผู้อ่านนะครับ ว่าผมตอบใคร)

กรณีแรก ผู้อ่านประสพปัญหาจากโค้ดในหน้า 157

การวางตำแหน่งต่างๆ ต้องประมวลความรู้เองจากหน้า 121 ครับ ผมเขียนว่า

“ก่อนจะใช้งานสิ่งใดๆ ต้องประกาศสิ่งนั้นก่อน” ดังนั้น …. (พร้อมกับบอกวิธี)

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

ลำดับ Code ที่ปรากฏในหนังสือ สะท้อนลำดับความคิดของผมครับ ไม่ได้สะท้อนลำดับของโค้ดในไฟล์
การที่ผมเขียน Code หนึ่งๆ ทีหลัง ไม่ได้แปลว่าจะต้องปรากฏภายหลังในไฟล์ครับ เราอาจต้อง
ใส่ Interface ของมันไปก่อนใน .h หรือว่าอาจจะต้องเขียน private interface เสียก่อน หรือว่าอาจจะใช้
วิธีการประกาศไว้ก่อน ก็ได้

กรณีที่สอง ผู้อ่านประสพปัญหาจากโค้ดในหน้า 78

Code ที่คุณเขียน และบอกว่ามีปัญหา อยู่ในหนังสือหน้า 78 นะครับ

ลองย้อนไปอ่านดูในหน้า 64 ครับ ตั้งแต่บรรทัดแรกเลย ว่าผมเขียนว่าอะไร และผมมีตัวอย่างให้ดูแล้วด้วย (เรื่อง @synthesize)
ซึ่งจะว่าไป ก็สืบมาตั้งแต่ขั้นตอนการเขียนที่บอกไว้ตั้งแต่หน้า 59 :-)

เป็นความตั้งใจของผมครับ ที่ผู้อ่านจะต้อง “นำความรู้ที่อ่านผ่านไปแล้ว และเห็นตัวอย่างไปแล้ว มาประมวลใช้เอง”

ทีนี้คงจะไม่มีทางลืม @synthesize สิ่งที่กำหนด @property เลยสินะครับ ดีกว่าให้พิมพ์ตามๆ ไปอย่างไม่รู้เรื่องอะไร
เพราะว่ามีหลายคนที่เคยเจอมา อ่านหนังสือไม่ละเอียด ไม่คิด จะดูแต่ code อย่างเดียว และพิมพ์ตามอย่างเดียว
ถ้า code ทำงานได้หมด ไม่เจอปัญหาจากการอ่านไม่ละเอียดและไม่คิดเลย ก็จะ take everything for a grant
(ขออภัย นึกภาษาไทยไม่ออก … ประมาณว่า มองข้ามโน่นนี่ นึกว่าเป็นเรื่องเล็กๆ) ทำให้แก้ปัญหาต่างๆ ไม่ได้ในที่สุด

สิ่งที่คุณเจอ และการแก้ปัญหาของคุณ เป็นเจตนาของผมทีี่อยากให้เกิดขึ้นครับ

มาถูกทางแล้วครับ ยินดีด้วย

ดังนั้น เพื่อ Make Statement ให้ชัดเจนตรงนี้ ผมขอบอกอีกครั้งนะครับ (ซึ่งเป็นการเขียนซ้ำข้อความที่ผมเขียนไว้ในหน้า 14 ของหนังสือ ซึ่งหลายท่านอาจจะอ่านข้ามไปแบบไม่สนใจเท่าไหร่)

หนังสือเล่มนี้จะไม่มี “การรวมโค้ด” ของโปรแกรมเอาไว้ที่หน้าใดหน้าหนึ่ง ให้พิมพ์ตามหรือลอกเฉพาะส่วนของโค้ดได้ โดยไม่อ่านเนื้อหาและความคิดอันเป็นที่มาของโค้ด

นอกจากนี้ โค้ดหลายส่วนที่ซ้ำหรือคล้ายกับที่เคยผ่านมือกันมาแล้ว บางส่วนผู้อ่านจะต้องเขียนเพิ่มเติมเอง

ผมไม่ปฏิเสธครับ ว่าลักษณะการเขียนหนังสือของผมนั้น ได้รับอิทธิพลจากหนังสือต่างประเทศ ทั้งอเมริกาและญี่ปุ่น เป็นอย่างมาก

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

หลายต่อหลายคน หัดเขียนโปรแกรมตามตัวอย่าง คอมไพล์ผ่าน ทำงานได้ ตามตัวอย่างเป๊ะๆ ก็หลงระเริง คิดว่าเข้าใจแล้ว ทำได้แล้ว พอเขียนจริง ต่อให้เป็นโปรแกรมง่ายๆ ไม่ต้องยาก (แค่เปิดไฟล์ นับคำในไฟล์ว่ามีกี่คำ ที่ผมชอบใช้เวลาสอนหนังสือที่ ม.ศิลปากร) ก็เริ่มต้นไม่ถูก พอเขียนแล้วเจอปัญหาเล็กน้อย ก็ไปต่อไม่เป็น เจอข้อความจาก Compiler ก็กลัว ฯลฯ

ขอให้ค่อยๆ พยายามๆ ครับ อ่านหนังสือให้ละเอียด ใช้เวลากับมันให้มากสักนิด เพื่อรากฐานที่มั่นคง

หนังสือผม ไม่เขียนหลอกผู้อ่านไปวันๆ ว่าใครก็สามารถเป็นนักพัฒนาโปรแกรมสำหรับ iPhone ได้ อย่างแน่นอน การที่จะให้ทำตามแบบ Copy & Paste แบบไม่ต้องคิด และได้โปรแกรมที่เหมือนจะทำงานได้นั้น ไม่ใช่สิ่งที่ผมเห็นด้วย เป็นสิ่งที่ฉาบฉวยและไม่ยั่งยืน ผมเชื่อว่า ไม่มีความรู้แบบฉาบฉวยแม้แต่บรรทัดเดียวในหนังสือเล่มนี้

และ … คาดเข็มขัดนิรภัยให้แน่นนะครับ เพราะว่าเมื่อพื้นฐานของทุกคนแน่นแล้ว “เล่ม 2” จะเร็วกว่านี้ หนักกว่านี้ ยากกว่านี้ แน่นอน เพราะจะเป็นสิ่งที่ผมทิ้งท้ายไว้ในบทสุดท้าย (บทที่ 16) แต่ถ้าไม่มีสิ่งที่เป็นความรู้ “ระดับสูงขึ้นไป” เลยล่ะก็ การเขียน App หลายตัวสำหรับ AppStore ปัจจุบันนั้นทำไม่ได้แน่นอนครับ