前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >码农的瑞士军刀-脚本语言

码农的瑞士军刀-脚本语言

作者头像
叶锦鲤
发布2018-03-15 11:06:37
1.2K0
发布2018-03-15 11:06:37
举报
文章被收录于专栏:悦思悦读悦思悦读

首先声明,这里关于语言间的比较仅仅是为了说明问题。世界上没有一个开发语言有绝对的好坏,只有是否适合你当前的环境。

很多码农工作的非常辛苦,每天加班。一般情况,团队中成长最快的不是工作最辛苦的那一部分人,而是经常在思考怎么样可以“偷懒”的人。举个身边的例子,很多IDE环境都会有一个向导来生成新的project,工作多年只看到过一个人按照公司的常见项目类型定制过这个向导,多数人每个新project都会重复一遍同样的工作,生成一个标准的project,然后手工进行一系列的修改,而且觉得自然而然。

为什么会这样?

有一些人可能没有意识到问题,还有一些是被工具困扰,不知道怎么做。日常工作中大家用的可能都是一些豪华型武器,比如工具用visual studio、eclispe,开发语言用C++、Java。它们确实很好,可以适应大型软件开发。但是,我们平时遇到的很多小事情,也许确实一两个小时可以手动完成,一个月也许只用几次,用这些工具编个小程序就感觉很麻烦。就像登山运动员不可能开着各种工程机械去爬山,他更需要的是一把瑞士军刀,什么功能都有,很精巧。

码农的瑞士军刀之一就是脚本语言。

维基百科对脚本语言定义是这样的。 脚本语言(英语:Scripting language)是为了缩短传统的“编写、编译、链接、运行”(edit-compile-link-run)过程而创建的计算机编程语言。早期的脚本语言经常被称为批处理语言或工作控制语言。一个脚本通常是解释运行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序员快速完成程序的编写工作。

脚本语言的优点

脚本语言最重要的优点是开发效率高,换句话说,用少的多的时间可以实现相同的功能。

优点1: 代码少,自然错误少,开发效率高

为了实现同一功能,脚本语言的代码量一般是是Java的1/3-1/5,是C/C++的1/5-1/10。代码少意味着出错机会少,人的思维能力和代码行数相关,不和功能相关。少敲很多代码,自然就会快很多。

举几个例子:

第一个例子是我最近的一个实际工作的需求,一个项目需要用另外一个项目的代码,但是两个项目的命名规则不一致,需要一次性修改文件名。如果手里有常用的批量修改文件工具,当然没有问题。如果一时没有,需要去网上找,然后下载测试,估计1个小时就没了。下面这个脚本我是用5分钟搞定的。

根据某种规则遍历子目录批量修改文件名

代码语言:javascript
复制
import osfor root, dirs, files in os.walk(r'D:\someproject\trunk\Source'): for name in files:  if name.startswith("OldPrefix"):
   newname = os.path.join(root, "NewPrefix" + name[len("OldPrefix"):])
   oldname = os.path.join(root, name)
   print("raname {0} to {1}]".format(oldname, newname))
   os.rename(oldname, newname)

假定如果需要根据文件的某些内容修改文件名,可能就完全没工具了。

另外两个简单的例子,想让大家体会一下脚本的美感

  • 计算数组lst的中所有数的均方根
代码语言:javascript
复制
 math.sqrt( sum( [x*x for x in lst] )/len(lst))
  • 找到两个数组中所有不相等元素的组合
代码语言:javascript
复制
 [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]

结果是

代码语言:javascript
复制
 [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

优点2:入手容易,学习难度低。

脚本语言通常语法和结构通常比较简单,学习和使用比较简单。这是多数脚本语言的后发优势决定的,一般也是语言创立者的一个重要目标。

优点3:调试容易,特别是支持交互式调试。

一般脚本语言用“解释”作为运行方式,而不需要“编译、链接”过程。熟悉脚本的人一定都用过这种方式,在交互式环境里面,写一句,调试一句,最后汇总整理成一个脚本。远比传统语言的修改、编译、设断点、调试要方便的多。可以随时改变方式,做各种调用处理。这对降低学习成本,提高开发效率非常有效。

这是一个excel调用的例子,实际编写的时候,我们可以在交互式环境下一行行输入执行,然后实时看到excel的实时变化。最后把正确的脚本记录下来就行了。要是用VBA就要不断修改-设断点-调试-中断-再修改。

代码语言:javascript
复制
def excel():
    """"""
    xl = win32.gencache.EnsureDispatch('Excel.Application')
    ss = xl.Workbooks.Add()
    sh = ss.ActiveSheet

    xl.Visible = True
    time.sleep(1)

    sh.Cells(1,1).Value = 'Hacking Excel with Python Demo'

    time.sleep(1)    for i in range(2,8):
        sh.Cells(i,1).Value = 'Line %i' % i
        time.sleep(1)

    ss.Close(False)
    xl.Application.Quit()if __name__ == "__main__":
    excel()

优点4:跨平台,一次学习到处使用

这包括两个方面:多数脚本语言可以支持各种操作系统,Windows/Mac/Linux,甚至android/ios。你写的脚本可能基本不需要修改,就可以在另外一个平台上直接执行。

另外,越来越多的系统提供脚本语言的wrapper。如果你能够熟练使用脚本语言,在学习新系统的时候,就占了大便宜。比如,pyspark和spark,基本上装完了,你就可以开始练习了。用C/java的人还在想怎么搞定编译开发环境。

优点5: 执行效率不一定低于自己开发

很多脚本内置函数都是C/java实现的,经过了认真的优化和测试,不一定比大家自己写的算法效率低。举个简单例子,两个文本文件进行差异比较,这个算法一共就两三篇公认的论文。我们自己用C写一个效率不会明显高于脚本标准库的实现效率,如果水平不够,甚至可能还不如脚本的效率。

优点6:丰富的标准库和第三方库

有些脚本语言的标准库或者扩展库可能比C++或者Java还要丰富。比如,NumPy+SciPy提供了MatLab的很多功能。R提供了SAS/SPSS的很多功能。反而C/Java实现这些功能并不容易。可能我们要在C/Java的系统里考虑嵌入R或者python.

优点7: 高效的office的定制开发工具

一般人office定制开发第一反应可能是VB,但是VB的数学运算和逻辑处理实在太难用。脚本语言可以同时提供VBA的遍历和脚本语言的高效和精美,比如各种数组、map等逻辑处,而学习难度一点没有增加。上面的excel调用例子是一段python代码,用过VBA的人一眼就能看到无数熟悉的东西。 举个实际应用的例子:我们的一些外包项目需要给客户提交报告,每个bug修改涉及到哪些代码。就需要抽取文本差异,然后按照客户的要求生成excel格式的报告。

优点8:脚本语言适合用来作为产品的集成的胶水或者日常工具

脚本是可以根据环境或者用户配置随时改变的,不像C++/Java必须经过编译链接。大家如果注意观察,有大量的应用是嵌入了脚本的。比如各种游戏中的场景和关卡。

我们自己项目中C++代码的Daily build(或者nightly build) 一直都在用python脚本控制,包括cmake/编译环境准备/结果自动发布/各种项目需要的统计数据。

脚本语言的选择

下面讲一下当年我为什么会选择python,供大家了解如何选择脚本。其他语言也有各自的优点。我有一个朋友工作中matlab是必备的,因此,就用matlab的m当作日常的脚本,同样效果很好。

我的工作中主要语言是C++,平时想做点小工具真的觉得很痛苦。我当时希望选一个满足这样目标的语言:

  • 支持windows/linux
  • 可以方便处理各种文件,特别是文本文件。对码农来说就是代码和测试数据
  • 扩展库丰富,至少可以支持数据库、xml之类
  • 最好能够搞定office
  • 有足够活跃的社区,有足够的标杆用户

下面是我当时做的一个简单总结:

Javascript

  • Web客户端开发更合适
  • 本身不够规范,容易出错
  • Windows可以用COM来支持系统调用
  • 扩展功能少

现在Node.js 解决了本地资源访问的障碍,异步调用对于日常使用还是有点复杂。

Perl

  • 曾经是最广泛的脚本语言
  • 所有的Linux/Unix几乎搜默认安装
  • 各种库最完善
  • 语法格式比较诡异,可读性不好
  • 最近几年一直再走下坡路

PHP

  • 针对Web开发
  • 有最好的开源Web 框架
  • 不适合作为系统功能调用
  • 面向过程,嵌入在页面中

Ruby

  • 有一个漂亮的杀手级应用Rails, 高效的Web开发架构,结果也造成语言的发展基本上也只适合web开发。成也萧何,败也萧何。
  • 支持Java/C集成
  • 缺少其他开发支持

Python

  • 均衡发展,中性
  • 语法格式严格
  • C/Java/.Net集成
  • 应用范围广,Linux/unix/mac上已经作为默认安装了
  • 有足够丰富的标准库和扩展库
  • Google曾经的三大编程语言之一,C/Java/Python
  • Visual Studio支持的第一种动态语言

因此,看起来python最符合我自己的状况和期望。

脚本语言 还有很多,Lua / Lisp / Scala / Haskell / Closure / Erlang / R等等。各自有各自的优点和适用范围,就不再一一比较了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 智汇AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 脚本语言的优点
  • 脚本语言的选择
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档