王巍访谈:关于Swift学习和AppleWatch开发的一些建议
via:cocoachina
本期采访对象王巍,微博ID“onevcat”,圈儿内人称喵神,知名iOS/Unity 开发者,现居日本,就职于LINE。喵神是objc中国项目发起人,开源过广受开发者喜爱的Xcode插件VVDocumenter,主创或参与开发《姬骑士和最后的百龙战争》、《英雄 Slash》、《冒险谜题王国》以及《小熊推金币》等多款游戏,个人应用代表有《番茄工作法》(Pomodoro Do)和《云端记账》(Our Money)。
CocoaChina:很多新手开发者会纠结于先学习Objective-C还是Swift,不过大家比较倾向于两者都学,那么在同时学习两者的过程中,哪些内容需要重点关注呢?
王巍:其 实不论是 Objective-C 还是 Swift,现在的目的都是写 iOS 和 OSX 的 app,那么其实对于绝大多是情况来说,语言本身并不是非常重要,使用语言去和 Cocoa 以及 CocoaTouch 交互才是我们日常开发中最常用到的技能。Cocoa 的编程思想并没有随着语言的变化发生什么大改变,所以还是应该把对于框架的学习放在首位。当然在 Swift 中有些细节和做法会与 Objective-C 有所不同,对于开发者来说选择其实变得更多了 (举个例子,Objective-C 中总会使用 NSError 指针来获取错误信息,而 Swift 中我们还可以有 Tuple 这样的选项)。
现在可能在工作中使用 Objective-C 的开发者还是占大多数,我的建议是在使用 Objective-C 的时候,也顺便可以“想象”一下如何用 Swift 更好地实现同样的事情。如果不是特别赶进度的话,甚至可以再用 Swift 真实地实现一遍。因为两种语言最大的区别就是 Swift 拥有更强的类型检查和安全性,所以如果能够特别关注这点的话,之后快速切换到新的语言去就不会有什么问题。
CocoaChina:对于学习Swift的开发者,入门以后应该如何进一步提高?
王巍:可 以尽快开始动手实践开发一些 app。给自己定一个目标,比如花上几天时间或者一周的时间用 Swift 做一个能上架的简单 app 之类的。这个 app 不需要有特别复杂的功能,可能就是一个简单的天气查询提醒,或者是展示附近好吃又便宜的餐饮店面。与简单地写个 demo 相比,实际做一个真正的 app 对能力的提升所在的层次是完全不同的,后者需要更多的全局考虑和综合能力。不少问题只有在实践中才会遇到,才会被解决,而对应的能力也才能被提升。所以入 门之后进一步提升的最好的路子就是实践,然后在实践中再去学习没有掌握的剩下的东西。
另外要注意的是,因为现在 Swift 还很新,很多东西并没有现成的方案或者所谓的最佳实践。在遇到这样的情况时,最好询问下你身边的资深 iOS 或者 Objective-C 的开发者。因为 Swift 和 Objective-C 其实是共通的,很多经验是可以参照借鉴的。
CocoaChina:TIOBE曾预计Objective-C可能会失去其在移动开发方面的主导地位,而Swift将会给该领域带来新的发展。您是怎么看待iOS语言的趋势呢?有没有可能说将来只学习Swift呢?如果有,那么您预计大概需要多久?
王巍:Swift 作为去年才出现的新星,已经取得了很好的成绩,而现在开发社区对于 Swift 的态度和预期也都十分积极友好的。可以预想到在可见的未来,Swift 的使用和普及必定将更近一步。Swift 相对于 Objective-C 的优势十分明显,在进一步成熟后 (最主要是的将运行时集成到系统中以及标准库的完善),在 iOS 开发上逐渐替代 Objective-C 的地位可以说只是时间问题。当然这确实是需要花上一定时间来完成迁移,主要是社区的第三方工具和项目的支持程度是需要积累的。将来只需要学习 Swift 是完全有可能的 (甚至我自己认为就算现在也可以考虑只学习 Swift,相对于 Swift 来说 Objective-C 显得更简单和容易,如果学会 Swift 的话,Objective-C 自然也不成问题)。整个 Swift 社区的成熟可能需要花上两三年时间吧。
CocoaChina:我们知道您现在在维护swifter.tips这个站点,其内容来自于您的《Swifter - 100 个 Swift 必备 tips》电子书,能否给我们介绍一下这本书,以及其后期计划。
王巍:这 本书是在我从 WWDC 回来以后就筹划打算写的,其实主要是作为自己学习 Swift 时候的一些补充和记录。因为正好赶上从上一家公司离职的节点上,有一段比较空闲的时间,所以集中地实践很多 Swift 的东西。这本书是给已经入门 Swift,但是却在实际使用中遇到困难的开发者准备的一本小册子。里面总结了 100 条可能会用到的小 tip,基本是对一些重要概念以及它们的不太被人注意到的特性的讨论。另外也有一些自己总结的比较好的实践的推荐。因为写这本书的时候 Swift 语言还非常新,所以很多地方都是带着探索的心理去做的,之后的话会根据 Swift 的发展进行一些必要的修订。另外现在我正在把这本书翻译成英文版,虽然可能有点妄想,但是自己内心确实是希望能让世界知道中国也是有开发者活跃在这个舞台 上的。顺便要告诉喜欢纸质版那种阅读实感的朋友一个好消息,现在已经在和出版社合作准备出版,应该会在不久的将来就能见到实体书。
CocoaChina:Apple Watch即将发售,针对有计划为该设备开发软件的开发者,可以跟我们聊聊Apple Watch的开发模式、目前的局限、以后发展方向吗?
王巍:Apple Watch 现在对于第三方开发者来说更多的还是一块额外的屏幕。Watch Kit 现在能提供的 API 也比较简单。对于 Apple 没有提供表盘上的旋钮以及表面触感的 API 这一点,很多开发者也比较失望的。因为新的交互才能带来全新的想法和创意,但是暂时 Watch Kit 没有能给出足够的接口。不过我们也应该看到这只是 Watch Kit 的第一个版本,之后 Apple 也承诺会有原生的手表 app,可能等一段时间到 Apple Watch 和 Watch Kit 的完全版面世的时候局面才会很不一样吧。
CocoaChina:目前Apple Watch上适合开发什么样的应用,目前Apple Watch会不会只是iPhone应用的延伸,有没有可能出现一些革新性的应用。
王巍:利 用 Apple Watch 随时抬手可看的特性,一些比较注重通知提醒类的 app 应该会很有空间。比如朋友圈或者微博里被 at 了一下,或者是待办事项到期之类。由于屏幕大小和交互方式限制还是比较多,另外 Apple 本身对 Watch app 也有一些限制,所以可以预见在一段时间内 Apple Watch 只会是 iPhone 应用的延伸,为 iPhone 应用提供另一种可能的呈现方式,或者都是一些轻交互的 app。但是也并不好说,Apple 的开发者带着镣铐跳舞的能力从来都是不可小觑的。如果之后 Apple 能进一步开放 API 的话,可以肯定会爆发出无数的革命性的 app,到时候我们的日常生活很可能会被再一次改变。
CocoaChina:您个人博客OneV's Den中的文章可以说篇篇都是精华,风格淡然,技术严谨,能跟大家分享下您在写技术博客方面的经验吗?
王巍:见 笑了。我写博客也有几年时间了,其实能有现在的积累,还是得益于坚持和定位明确。坚持的话,经常关注我的博客的朋友会发现我的更新周期还是比较稳定能在一 个月至少一篇这样。并不是很频繁,但这也算是我给自己定的一个目标。因为如果太久不写确实就会惰性发作很可能就荒废了,所以保持一定的更新频率是很有必要 的。另外就是找准目标:我在博客上写的东西一般都属于比较浅的内容,也希望能尽量面向更多的读者,而我自己也把我的博客定位在一个开发知识普及的层次上。 这个层次的内容我比较能够把握,同时也能有比较多的读者能看完,对自己也算是能坚持写下去的一种动力和理由。
在选题上基本还是实际工作和学 习里接触到的内容,我会尽量试图以新的角度在解读或者梳理一下。这样做可以巩固自己的知识,另外我也坚信如果我能以传播者和教授者的身份把一件事情讲明白 的话,才能代表我自己真的明白了这件事。所以写博客对于我来说就是一个提高和巩固的过程,是学习中重要的一环。
CocoaChina:您现在是在日本做开发,那么日本的iOS开发是怎样一种情况呢?有哪些值得借鉴的地方呢?
王巍:可 以说日本的 iOS 开发者和国内很多开发者不同的一点是对资讯的接触和掌握感觉要更前沿一些,也就是视野要开阔一些。不过可能是由于我接触到的日本开发者正好都比较喜欢新鲜 事物吧。这边的话,团队合作和规范确实很厉害,每个项目基本无论大小,都会有很正式的文档和 wiki,另外像测试和 CI 这些方面也都很注意,对程序员来说开发起来特别舒服,基本可以专注于开发的内容。日本开发者另一个优点是做事认真,每一个特性都要反复确认;QA 那边过来的 bug 报告也十分详尽,对于定位问题很有帮助。但是另一方面,他们的基础可能比国内的 CS 出身的开发者同行们要差一些,开发效率也低不少。所以两国开发者其实互相都有需要学习和借鉴的地方。
CocoaChina:您欣赏的国内外iOS开发者有哪些?
王巍:国外的话像 Mattt Thompson和 Mike Ash都是很厉害的 Cocoa 开发者,我也一直受益于他们的贡献和分享才能逐渐成长。
国内低调有内涵的高手实在太多了..要写名字的话估计版面不够,在此就容我略过吧.. XD
CocoaChina:新年新气象,您在2015年有什么样的规划呢?