Swift – The new road

นับตั้งแต่ Apple ได้ประกาศ iOS 8 ในเดือนมิถุนายนที่ผ่านมา แผนการเขียนหนังสือ Objective-C ที่วางแผนไว้ก็ต้องพับเก็บหมด แม้ว่าผมเขียนเสร็จไปแล้วก็ตาม ทั้งนี้ก็เป็นเพราะว่าทาง Apple ได้ประกาศภาษาใหม่ที่ใช้พัฒนา iOS ขึ้นมานั่นก็คือภาษา Swift ( Swift คือชื่อของ นก )

Why Swift ?

ต้องยอมรับอย่างหนึ่งว่า Objective-C นั้นล้าหลังมาก เนื่องจากเป็นภาษา ที่เกิดมานานแล้ว ก่อนจะเกิด Java ด้วยซ้ำไป ทำให้ตัวภาษานั้นขาด feature หลายๆอย่างที่ภาษาโปรแกรมสมัยใหม่มี  แม้ปีหลังๆจะเพิ่มเติมหลายสิ่งเข้ามา เช่น properties , extension และ ARC  และตัวภาษาปรับปรุงให้มีประสิทธิภาพดีมากขึ้นกว่าเดิม แต่อย่างไรก็ตาม ภาษา Objective-C นั้นเป็นภาษาที่ใช้เวลาในการเรียนรู้ค่อนข้างสูง และมี syntax หน้าตาค่อนข้างประหลาดเช่น ยกตัวอย่างเช่น การเรียกใช้เมธอด ก็จะใช้สัญลักษณ์ [ ] ดังเช่น

[obj method];

แต่ในกรณีของภาษาอื่นๆเช่น java , c++ , c# และแม้กระทั่ง python ก็จะเขียนแทบจะเหมือนๆกัน คือ

obj.method();

เห็นได้ชัดเลยว่าภาษา Objective-C นั้น มันช่างแต่งต่างจากชาวบ้านเหลือเกิน ยิ่งในช่วงหลังมี block เข้ามาด้วย ตัว syntax ของภาษาก็ยิ่งแปลกประหลาดไปกันใหญ่ ปัญหาสองอย่างนี้มันเป็นปัญหาที่สาหัสพอสมควร เพราะนับวันผู้ใช้ Objective-C ก็มากขึ้นเรื่อยๆ และถ้ามองย้อนใน 5  ปีหลัง จะเห็นว่าภาษา Objective-C เพิ่ม feature ไปหลายอย่างมากมาย  เมื่อมองระยะยาวแล้วมันก็เหมือนแก้ปัญหาเฉพาะหน้าไปเรื่อยๆ  ทางออกของ Apple ก็คือสร้างภาษาใหม่ทดแทนภาษา Objective-C เพื่อแก้ปัญหาในระยะยาว และนั่นเลยเป็นที่มาของภาษา Swift

Swift History

ภาษา Swift นั้นมีจุดกำเนิดมาจาก Chris Lattner เขาเป็นคนเดียวกับ คนที่สร้าง LLVM Compiler ซึ่งเป็นคอมไพลเลอร์สมัยใหม่ มีประสิทธิภาพสูง (ผมเคยเขียนเรื่อง LLVM ไว้แล้ว)  Chris นั้นได้เข้ามาทำงานกับ Apple ตั้งแต่เมื่อ 2005 จากวิทยานิพนธ์ ป.เอก เรื่อง LLVM ( ถ้าหากสนใจการทำงาของ llvm ลองไปอ่านที่ Chris เขียนไว้ได้ http://aosabook.org/en/llvm.html )  เมื่อ Chis เริ่มทำงานกับ Apple สิ่งแรกที่ได้ปรับปรุงให้กับ Objective-C ก็คือโปรเจค Clang ซึ่งเป็น front-end compiler ให้กับภาษา C , C++ และ Objective-C จากการโปรเจคนี้เองทำให้ Chris เห็นข้อจำกัดของ Objective-C และต้องการจะเปลี่ยนมัน เขาจึงเริ่มสร้างภาษา Swift ในปี 2010

หากดูภาพใหญ่ของภาษา Swift แล้ว มันมีส่วนคล้ายกับภาษา Objective-C อยู่มาก ดังคำกล่าวในงานเปิดตัว Swift ไว้ว่า “Objective-C with out C” และเมื่อดู syntax ของภาษา Swift จะพบว่ามีลักษณะคล้ายกับภาษาสคริป แต่ตัวมันเองนั้นกลับไม่ใช่ภาษาสคลิป เหมือนอย่าง java script , php หรือ python แต่อย่างใด เพราะโปรแกรมภาษา Swift นั้นต้องผ่านการคอมไพล์ให้เป็นไบนารี่ไฟล์ เหมือนกับภาษา Objective-C , C, C++ เสียก่อน ถึงจะทำงานได้ (ไว้วันหลังจะเขียน blog เกี่ยวกับ feature ของภาษา)

คริสได้บอกว่าเค้าสร้าง Swift ด้วยการผสมผสานภาษาต่างๆเข้าไว้ด้วยกัน

“drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list”

ในการออกแบบภาษายังมีผู้เชี่ยวชาญทาง compiler และ document guru เข้ามาทำงานนี้อีกหลายคน ดังนั้นแล้วภาษา Swift จึงเต็มไปด้วยสิ่งใหม่ๆ idea ใหม่ๆ และการทำงานที่ง่าย และเรียนรู้เร็ว

Should I learn Swift ?

ในวันเปิดตัว Swift นั้นทาง Apple ได้แสดงให้เห็นถึงลูกเล่นต่างๆของภาษา Swift โดยเฉพาะ Playground ทำเอานักพัฒนาหลายคน ถึงกับต้องร้องว้าวววว สุดยอด ไม่ใช่แค่ playground ที่เจ๋งเพียงอย่างเดียว แต่เมื่อลองเล่นหลายๆอย่างเช่น debugger แล้วมันก็ทำได้เยี่ยม และตัวภาษาเอง ก็ใช้งานง่ายมาก และมีฟีเจอร์หลายอย่างที่ดีกว่า  Objective-C

ในเมื่อมันสุดยอดขนาดนี้ แล้วเราควรจะใช้มันทำงานเลยไหม ?

คำตอบคือ มันแล้วแต่ว่าคุณกำลังทำอะไร

สำหรับผู้ที่เพิ่งจะเริ่มต้นเขียน iOS คำตอบแบบสั้นๆเลยคือ .. จะรอทำไม ลุยเลยสิ ถึงแม้ Apple จะบอกว่า Swift เป็นภาษาทางเลือก แต่คาดว่าในไม่ช้า Apple จะตัดหางปล่อยภาษา Objective-C เฉกเช่นเหมือนที่ทำกับภาษา C/C++ อย่างแน่นอน แล้วเราจะไปเรียนภาษาที่กำลังจะตายในอีก 5 ปีไปทำไม ? (ถ้ายังจำกันได้ Apple เคยมี framework ของภาษา C/C++ ชื่อ Carbon และก็ตัดการสนับสนุนไป ซึ่งเป็นสาเหตุหนึ่งในการตายของ flash สำหรับ OSX ก็เพราะว่า flash นั้นเขียนด้วย C++) และจากงาน WWDC 2014 เห็นได้ชัดเจนเลยว่า Apple ก็จะผลักดัน Swift อย่างเต็มที่แน่นอน และปล่อยให้ Objective-C ลดบทบาทลงอย่างช้าๆ

แต่อย่างไรก็ตามจะศึกษา Objective-C ต่อไป ก็ไม่เสียหายอะไร แม้ว่าภาษา Objective-C  มีแนวโน้มสูงว่า Apple จะหยุดการสนับสนุนในอนาคต แต่ว่าตัวภาษา Objective-C มันก็จะยังได้รับการสนับสนุนมากกว่า 3 ปีแน่นอน ทั้งนี้เป็นเพราะว่า โปรแกรม iOS มากมายใน App Store ที่ยังเขียนด้วย Objective-C

ถ้าคุณมี idea อยากทำ App ขายเลยในปีนี้ การเขียนด้วย Swift มันอาจจะเป็นเรื่องที่ยากกว่าการเขียนด้วย Objective-C เพราะว่า Swift มันเป็นภาษาใหม่ มีแหล่งข้อมูลน้อยมาก ในขณะที่ Objective-C มีหนังสือเป็นร้อยเล่มให้อ่าน มีเวปเป็นพันๆเวปให้ศึกษา และมี third party lib ให้ใช้มากมาย การเลือกใช้ Swift ก็อาจจะยากกว่า ถ้าหากติดปัญหา การจะไปหาคนที่รู้และช่วยแก้ไขย่อมน้อยกว่า Objective-C แน่นอน

สำหรับคนที่มีโปรเจคที่เขียนด้วย Objective-C  อยู่แล้ว มันก็แล้วแต่คุณอีกนั่นแหละว่ายอมรับความเสี่ยงได้มากแค่ไหน ถ้าจะเขียนต่อด้วย Objective-C ก็ได้ เพราะว่าด้วยเหตุผลเดียวกันคือ Apple ก็ยังจะรองรับ Objective-C ไปอีกอย่างน้อย 3 ปี แต่ถ้าโปรเจคมีความเสี่ยงน้อย และตัวคุณเองมีเวลาในการศึกษามาก ผมก็แนะนำให้เริ่มศึกษา Swift และทำการ port code มาเป็น Swift น่าจะเป็นเรื่องที่ดีกว่าในระยะยาว (Swift เขียนร่วมกับ Objective-C ได้)

ฟังดูเหมือนๆ ว่า ใช้ Swift มีความเสี่ยง กว่า Objective-C ?

ปัญหาหลักๆของ Swift ในตอนนี้คือ มันเป็นภาษาใหม่มาก คนเขียนเป็นน้อย ดังนั้นแหล่งข้อมูลมันก็จะน้อยตามไปด้วย เมื่อเกิดปัญหา การหาคำตอบและทางออกมันอาจจะยากกว่าการใช้ Objective-C ฉะนั้นแล้วการที่จะลุยไปกับ Swift ก็ดูเหมือนค่อนข้างจะเสี่ยงอยู่ไม่น้อย

ก็ในเมื่อมันเสี่ยงแล้วจะใช้ดีไหมละงั้น ?

เคยได้ยินไหมครับว่า “High risk , High return”

จริงอยู่ว่ามันเสี่ยงกว่า .. แต่ลงมือศึกษาก่อน คุณก็จะเป็น คนที่ล้ำหน้ากว่าคนอื่น ..ตัวคุณเองก็จะได้เรียนรู้ไปกับคนอื่นๆทั่วโลก เพราะภาษานี้มันเพิ่งจะเริ่มต้น ณ ตอนนี้มันยังมีไม่กี่คนหรอกที่เป็น ขั้นเทพของภาษา Swift เพราะมันเพิ่งจะออกมาได้ ไม่กี่เดือนเอง จริงไหม ? ถ้าคุณอยากจะล้ำหน้า ก้าวหน้ากว่าคนอื่น มันก็ต้องลงมือกันตั้งแต่ตอนนี้เลย  แม้กระทั่งตัวผมเองถึงจะรู้ Objective-C มาเยอะ แต่ภาษา Swift ก็อยู่ในขั้นเริ่มต้นเหมือนกับคนอื่นเช่นกัน

สำหรับตัวผมเอง ณ ปัจจุบันไม่ได้มีโปรเจค iOS ที่ต้องรับผิดชอบ และเขียน Objective-C เป็นอยู่แล้ว ดังนั้นความเสี่ยงของผมนั้นไม่มี ผมจึงตัดสินใจหยุดเขียน Objective-C และทิ้งหนังสือที่เขียนไป 20 บท ซึ่งใช้เวลากว่า 2 ปีในการเขียนไปเฉยๆเลย และเบนเข็มเริ่มลงมือศึกษา Swift แทน ถามว่าเสียดายไหมก็ เสียดาย แต่โลกของเทคโนโลยีมันต้องเปลี่ยนแปลงอยุ่ตลอดเวลา ความรู้สึกของผมกับการเรียนรู้ Swift ในตอนนี้มันก็เหมือนการที่ได้เริ่มเขียน Objective-C เมื่อ 5-6 ปีก่อน ในสมัยที่ยังไม่มี iPhone ไม่มีแหล่งความรู้อะไรเลย แทบจะไม่มีใครรู้จักด้วยซ้ำว่า Objective-C คืออะไร การหาคำตอบต่างๆต้องอ่านจาก document ของ Apple และเวปบอร์ดต่างประเทศ ถามว่าเริ่มต้นยากไหม บอกเลยว่า “ยาก.. แต่ไม่เกินกำลัง และเราเรียนรู้ได้”  ซึ่งผลตอบแทนสำหรับผมมันคุ้มค่า

Swift Resource

สำหรับผู้ที่สนใจจะเริ่มต้นกับ Swift นั้น สามารถดู WWCD  ใน session ของ Swift ได้ ดังหัวข้อต่อไปนี้

Introduction to Swift
Intermediate Swift
Advanced Swift
Integrating Swift with Objective-C
Swift Interoperability In Depth
Swift Playgrounds
Introduction to LLDB and the Swift REPL
Advanced Swift Debugging in LLDB

หรืออ่านหนังสือของ Apple ได้โดยตรง Swift Programming และ Using Swift with Cocoa

ผมไม่อาจจะตอบได้ว่า ควรทำอะไร ควรลงมือศึกษาเลยดีไหม .. เพราะแต่ละคน มีปัจจัยเกี่ยวข้องหลายอย่าง แตกต่างกันไป

ทีนี้ก็ลองถามตัวคุณเองดีกว่า ว่าพร้อมไหมกับ Swift ? ถ้าพร้อมก็ลุยเลยครับ

 

สุดท้ายนี้ขอประชาสัมพันธ์การอบรม Swift Programming x2 ด้วยนะครับ

สมัครได้เลย http://goo.gl/uQsiEL

Untitled

 

Leave a Reply