作为一个以开发为生的程序员,在我心目中编程语言如同战士手里的武器,好与不好主要看使用的人是否趁手、是否适合,没有绝对的高低之分。
从2013年起,学习并使用Golang已经有6年时间了,我想叙述一下我选择Go语言的一些经历,希望能给考虑使用Go的开发者们做些参考。
为了避免无谓的语言争论,提前说明一点:Golang并不完美。
我在许多讨论场合中都表达过这样的观点,选择适当的编程语言非常重要,甚至会影响一个程序员的职业发展历程,但是编程语言本身确没有绝对的高低之分。一名武术大师使用狙击枪不仅不能发挥枪的优势,而且可能会影响自己的招式,最重要的是,武术大师可能根本没有使用狙击枪的场景,一把精良的剑可能更适合他。
我并非计算机专业科班出身,我学习的是土木工程专业,在学校曾经简单的学习过C语言,但是学校的计算机教育并没有引起我学习编程的兴趣(国内学校的教育方式不扼杀学生的兴趣就算是万幸了)。学习编程的原因是我当时很想搞清楚怎么搭建一个漂亮平面设计网站和论坛,有一个朋友推荐我学习了ASP(用VB语言),在我大学那个时候,搭建一个网站对于大多数人来说还是一个挺神秘的事情。后来又因为懒惰,不想和其他同学一样手绘图纸,于是专心学习了一段时间Lisp,以便于在AutoCAD(一款工程绘图软件)自动绘制图纸。对于编程,我一向是实用主义。
大学毕业后,放弃了土木专业的就业方向,正式以编程作为自己的职业,学习不同的编程语言也成为了工作必备的要求。
一开始,我选择了C#以便于开发.net框架下的应用和网站,这次选择非常有意义,在.net框架下不仅可以开发动态网站,还可以开发各种Windows系统下的视窗程序、控制台和动态链接库,微软提供了非常好用的IDE,对于一个非科班出身的程序员,在.net框架完整的解决方案的帮助下,我尽可能快的接触到了软件开发领域的各个方面。
随着Web2.0概念的提出,我的工作几乎完全是Web开发。在这个领域最被人们津津乐道的语言就是PHP。本来我并不以为然,直到我发现很多优秀的项目都是用PHP开发后,它成功的吸引了我的注意;另一个原因是微软的服务器操作系统和IIS在当时的版本下确实有许多问题,我希望能摆脱微软的控制,将软件部署在Linux或Unix服务器上,LAMP(Linux+Apache+MySQL+PHP)组合方案就是我所需要的。PHP除了拥有学习快,上手容易这些基本的优势外,PHP开源社区非常活跃,你可以轻松的找到各种开源的PHP项目,几乎所有Web相关的开源项目中最著名的都是PHP语言开发的,比如 WordPress、Drupal、PrestaShop、Joomla、Opencart等,数不胜数。
后来,我开始带领团队,成为了公司开发团队的小头目,我不能只专心于自己的开发工作,需要考虑整个团队的工作需要。PHP开发公司经营的网站非常有效,但是团队里有一些项目的需求方会要求使用他们指定的开发语言,比如Java。在当时,Java被认为是最稳定、最安全、最标准的解决方案,许多开发领域的大神们也非常推崇Java,J2EE几乎是政府、金融等领域大型项目的标准解决方案。出于市场需要,我不得不让自己和团队学习和掌握Java以便于能够有更多的项目机会。
Java本身很优秀,再加上活跃的社区、完善的第三方框架和库,但是总让我觉得太麻烦(或者是我越来越懒),团队常常会有一些简单的工作任务,于是我选择了Python来做这些简单的工作。Python的简单出乎预料,刚开始学习的一段时间,我非常迷恋Python,它让编程变得如此简单,并且它历史悠久,拥有非常丰富的开源资源,Web、桌面、服务器领域的开发都有它的身影。
Python是我非常喜欢的语言,但是它的性能问题是我的心结,尽管如《黑客与画家》作者所说,程序的运行性能往往不是编程语言导致,而且未来计算机硬件的发展速度会让编程语言的性能差异越来越微不足道,但如果能有一门语言能够像Python那么简单又同时具备静态语言的性能岂不更好。
很幸运,我在那段时间,遇到了Golang。
我非常看重一门语言的入门门槛。我所在的团队并不大,我们需要精打细算每一个时间成本的投入,学习和进步是必须的,但是也需要切实的考量成本问题。
Golang入门非常快,当时我独自学习大概花了一周时间(我还要保持其他工作正常完成),然后我收集整理学习资料,再组织团队的其他成员学习,整个开发团队学习Golang非常的快,无论他们以前擅长Java、C++或是其他语言,都能很快的上手。
我有一个好朋友,曾经共事过一段时间,后来这位朋友专心于前端开发领域。有一次我们讨论团队配合的问题,讨论到前后端API开发的一些事情,当时我提到了Golang,我朋友看了一些简单的介绍和范例后问了我一个问题 “作为脚本语言,Golang与Python、NodeJS比起来有什么优势?”。听到这个问题,我非常高兴,原因是我的朋友把Golang当作了脚本语言(我的这位朋友也有多年的开发经验,而且在前端领域也是相当厉害的大神了),这至少说明作为静态语言的Golang给人的初步影响是简单清晰的,如同脚本语言(动态语言)一样。
Golang的性能很好,根据官方的描述以及其他人的测试结果来看,它的运行性能仅次于C/C++。当然,会有很多人认为这并不绝对有用,性能问题还是得根据具体的代码环境而言,纯粹的循环IO没有意义。不过一个语法上像脚本语言一样简单的高性能静态语言,对程序猿来说还是很有吸引力的。
附上一些Go的教程,适合刚入门级别看看,算是福利。关注头条号,私信回复“资料”获取。