Swift是花拳绣腿吗?——谈谈开发语言与程序员的职业发展

为什么80%的码农都做不了架构师>   


安全特性:变量和常量的类型安全

例如在下面的代码中,Swift用关键字let声明常量,关键字var声明变量。

Swift的语法规定,如果case语句不能覆盖所有可能的情况,则必须加default语句来处理其他情况。否则编译不能通过。

这样可以避免由于程序员疏忽,流程没有被switch-case经过处理,而引起的逻辑错误。

我们可以看到Swift中的安全特性确实有助于新手减少Bug和逻辑错误。但是类似于“变量声明时就有初始值”的特性在JavaScript,C#等多种现代语言中早已实现了。

在功能强大方面,有一个特性中是对字符串操作的简化,在下面的代码中,Swfit可以用(a)的形式,代替C语言中对字符串format操作。大大简化了代码,增加了程序的可读性。

在项目实践中,类似的字符串拼接应用较多的是日志操作。一般都已经封装成为组件了。所以,虽然这种语法可以简化代码,但对于工程的影响不大。


支持Unicode

例如下面的代码中可以直接使用苹果的emoji图标写程序。每一个小老鼠的图标可以作为一个字符(character)处理。

另一个强大的功能是For-in语句的增强。

比如在For-in语句中使用0…4表示循环时取[0,4]的闭区间内整数值。

另外用“n…m”的形式表示[n,m]闭区间的语法也可以应用在switch-case语句中:

但是在正式版中,这种写法被取消了。因为“n..m”和“n…m”这两种写法太相似了,如果都保留就会引起混淆,降低程序的可读性,成为“语法盐”或者“语法糖精”了。

现在评价Swift中的新语法是语法糖还是语法盐还为时尚早,需要时间和市场的检验。


考察Swift中Modern的特性

首先是闭包。在下面的代码中,repeat函数可以接受一个闭包类型的task参数。在调用repeat函数时,传入的第二个参数是一个函数体,其中包含了一行打印语句。

我们可以看到在上述代码中,sayAlert是闭包,也满足上述3个特点。

其实满足上述3个特点的语法还有很多,只是名字不一样而已。比如Java和C#中的Lamda表达式:

不过使用Objective-C的朋友也有福了,在即将发布的XCode7中,Objective-C也支持泛型了。

这是一个很方便的特性。比如一个返回值为int的函数,可以通过返回nil来表示函数出错的情况。而不需要使用NSError,也不需要通过返回某些特殊int值来表示错误,比如“-1”或“-IntMax”。

不过类似的语法在10年前的C# 2.0中就出现了。

通过示例代码可以看出,Swift支持使用多个catch语句捕获不同类型的Error,而且也支持使用finally语句。

不过这WWDC 2015大会上PPT中的代码与微软官方文档中的一段代码非常相似:

通过右侧的平均值对比可以看出:

  • 在CPU负荷较大的Mandelbrot的测试中,Swift取得了与C++相近的成绩。
  • 在GEMM测试中(侧重于大数据在有限内存中顺序读取操作),Swift与C++差距变大了。
  • 在FFT测试中(大数组随机读取),C++取得的成绩是Swift的近10倍。

因此可以看出,从运行效率上看,Swift不能完全胜任所有的场景。

综上所述:Swift在代码效率的3各方面,虽然有一定优势,但是还不能由此得出“我们应该转向Swift”的结论。

我们继续从第三个方面:学习成本上考察Swift。

Swift虽然属于类C(C-Family)的语言,在保留了大括 ,if-else,do-while,swich-case-default 等语法元素之外,也创新了许多新语法。有些语法形式(比如枚举类型)变化较大。学习Swift语法可能比Objective-C容易一些,但是也不会是零门槛的。

此外使用Swift开发应用必须依赖Cocoa框架,对于之前没有接触Cocoa的程序员,这是一块很大的隐性成本。

这里引用JavaEye 区创始人Robin的一句话供大家参考:

对程序员来说,熟悉Swift语法也不过一天时间足够了。关键是要提供高级数据类型,简化Cocoa类库,否则用不用Swift都没区别。
Swift语言的学习成本并不像媒体上宣传得那么低。所以我们还需要从第四个方面——生态环境方面进行考察。

生态环境是一个比较抽象的概念。这里我们把生态环境简化为2个问题:

  • 是否有很多开源工程可以借鉴li>
  • 有了问题是否能快速找到结论li>

对于第一个问题,我们可以参考一下Github上开源项目的统计数据( http://githut.info ):

但是在最受欢迎的语言榜单上,Swift排名第一。

与之相比,Swift就只能基于一种框架进行开发——Cocoa。Swift可以说是与平台强相关的,离开苹果平台,Swift恐怕没有用武之地。最近十几年我们看到微软、诺基亚的起起落落。因此在我们决定是否选择Swift的时候,我们对苹果的前景和信心也是一个重要的考量因素。

以上我们从语言特性、代码效率、学习成本和生态环境4各方面考察了Swift。除此以外,还有一些因素值得考虑。

第一个是调试工具。JavaScript作为一个前台语言为什么这么流行重要因素是诸如像Google Chrome和FireFox等工具为JavaScript提供了相当完善、相当优秀的调试工具。

另外一个因素是跨平台开发。我们是否愿意把自己押宝在一个平台上,赌这一个平台的成败。Php和JavaScript是几乎没有平台的概念。但如果做移动端开发的话,显然还是要选择一个平台的。不过最近Facebook推出了一个框架:Reactive Native。虽然还不完善,但我们可以想象一下,如果我们能用JS开发iOS,那我们还会学Swift吗p>

除了开发之外,在实际项目中还有许多工作要做。比如测试,比如对测试结果的分析,对上线后应用运行状况的分析。如果上线后很多用户出现程序闪退,如何知道闪退原因问题p>

在腾讯内部,有一个公用的crash定位模块。每个App都可以使用这个模块。这个模块可以帮助App定位和分析crash的数量、类别、原因等信息。 现在这个模块已经对外公布出来了,名为Bugly。腾讯之外的App也可以使用这个模块了。

1.我们是否应该开始学习Swift呢strong>

结论是肯定的。Swift中融合了许多现代语言中先进的特性。通过学习Swift可以了解现代语言的发展趋势。多掌握一门语言也有助于横向对比,更深刻的了解语言特性的本质,同时也是提高自己的眼界和学习能力的一个高效的手段。

2.我的项目是否应该迁移到Swiftstrong>

这个问题要具体情况具体分析。首先要看团队的能力。如果团队的学习能力很强,则可以考虑使用Swift。但是也不绝对,如果团队经验非常丰富,在iOS上面拥有五年以上的开发历史,那就要慎重一些了,因为这样会增加学习成本。如果团队很年轻,经验也不多则可以考虑使用Swift。

接下来还要考虑项目的构成。比如包含上千个C语言的文件,那么转换的成本就太高了。而且会严重影响应用的稳定性。如果是全新的项目,就可以考虑使用Swift了。

从上面的分析可以看出,一门语言对项目的影响并没有那么大,对于程序员职业发展的影响也没有那么大。

程序员可能有很多发展方向,在这些方向上除了关注语言,开发需求,改Bug,还有很多更重要的事情。在下图中我列举了程序员的一些发展方向和对应的关注点。

Swift是花拳绣腿吗?——谈谈开发语言与程序员的职业发展

另外,无论我们做什么工作都需要的一些通用能力,比如学习能力,分析和解决问题的能力,创新能力,传承知识和培养人才的能力,沟通能力等等。


Swift是花拳绣腿吗h2>

Swift就好比是一套武功招式,它能否发挥巨大威力,不取决于招式本身,而取决于使用者内功。只有自己变强,才能将Swift的特性得到淋漓尽致的发挥,做出优秀的应用。

所以我们还是要关注自身的成长,在Swift的语言之外学习更多的东西。


腾讯Bugly简介

Bugly是腾讯内部产品质量监控平台的外发版本,其主要功能是App发布以后,对用户侧发生的Crash以及卡顿现象进行监控并上 ,让开发同学可以第一时间了解到App的质量情况,及时机型修改。目前腾讯内部所有的产品,均在使用其进行线上产品的崩溃监控。

相关资源:陈式太极拳教学软件+注册机1-专业指导文档类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年10月22日
下一篇 2015年10月22日

相关推荐